[{"data":1,"prerenderedAt":180912},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2026-05-24-c-xue-xi\u002Fch8-lei-he-dui-xiang":3,"wiki-doc-nav":8984},{"id":4,"title":5,"body":6,"description":8977,"extension":8978,"meta":8979,"navigation":651,"path":8980,"seo":8981,"stem":8982,"__hash__":8983},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":8,"toc":8958},"minimark",[9,13,21,28,33,36,39,42,47,52,55,58,68,73,76,86,92,302,305,584,587,590,593,598,601,604,615,620,874,878,888,891,899,1049,1053,1056,1059,1063,1541,1545,1553,1561,2494,2501,2506,3142,3145,3148,3151,3270,3273,3360,3363,3489,3492,3586,3589,3942,3946,3954,3958,3965,3968,3971,3982,3988,3993,4005,4013,4034,4042,4059,4247,4250,4254,4257,4260,4263,4266,4269,4272,4275,4742,4748,4752,4755,4766,5361,5364,5855,5859,5862,5865,5868,5871,5874,5882,6280,6284,6287,6290,6741,6744,6747,6753,6756,6761,6764,6768,6771,6773,6781,6784,7095,7105,7146,7150,7153,7155,7188,7191,7499,7502,7517,7520,7543,7552,7558,7561,7565,7568,7571,7576,7587,7592,7600,7605,7736,7739,7742,7918,7923,8135,8139,8142,8257,8262,8503,8507,8511,8514,8517,8522,8628,8631,8634,8637,8641,8753,8756,8759,8764,8816,8819,8822,8827,8873,8876,8881,8949,8951,8954],[10,11,5],"h1",{"id":12},"_8类和对象",[14,15,16,17],"p",{},"C++面向对象的三大特性为",[18,19,20],"strong",{},"封装、继承、多态",[14,22,23,24,27],{},"C++认为",[18,25,26],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,29,30],{},[18,31,32],{},"例如：",[14,34,35],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,37,38],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,40,41],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[43,44,46],"h2",{"id":45},"_81封装","8.1封装",[48,49,51],"h3",{"id":50},"_811封装的意义","8.1.1封装的意义",[14,53,54],{},"封装是C++面向对象三大特性之一",[14,56,57],{},"封装的意义：",[59,60,61,65],"ul",{},[62,63,64],"li",{},"将属性和行为作为一个整体，表现生活中的事物",[62,66,67],{},"将属性和行为加以权限控制",[14,69,70],{},[18,71,72],{},"封装意义一：",[14,74,75],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,77,78,81,82],{},[18,79,80],{},"语法："," ",[83,84,85],"code",{},"class 类名{   访问权限： 属性  \u002F 行为  };",[87,88,89],"ol",{},[62,90,91],{},"**示例1：**设计一个圆类，求圆的周长",[93,94,99],"pre",{"className":95,"code":96,"language":97,"meta":98,"style":98},"language-c++ shiki shiki-themes github-light github-dark","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","c++","",[83,100,101,114,121,128,134,140,146,155,161,173,179,200,206,212,223,228,234,240,246,252,267,296],{"__ignoreMap":98},[102,103,106,110],"span",{"class":104,"line":105},"line",1,[102,107,109],{"class":108},"szBVR","class",[102,111,113],{"class":112},"sScJk"," Circle\n",[102,115,117],{"class":104,"line":116},2,[102,118,120],{"class":119},"sVt8B","{\n",[102,122,124],{"class":104,"line":123},3,[102,125,127],{"class":126},"sJ8bj","    \u002F\u002F访问权限\n",[102,129,131],{"class":104,"line":130},4,[102,132,133],{"class":126},"    \u002F\u002F公共权限\n",[102,135,137],{"class":104,"line":136},5,[102,138,139],{"class":108},"public:\n",[102,141,143],{"class":104,"line":142},6,[102,144,145],{"class":126},"    \u002F\u002F属性\n",[102,147,149,152],{"class":104,"line":148},7,[102,150,151],{"class":108},"    int",[102,153,154],{"class":119}," m_r;\n",[102,156,158],{"class":104,"line":157},8,[102,159,160],{"class":126},"    \u002F\u002F行为\n",[102,162,164,167,170],{"class":104,"line":163},9,[102,165,166],{"class":108},"    double",[102,168,169],{"class":112}," calculateZC",[102,171,172],{"class":119},"()\n",[102,174,176],{"class":104,"line":175},10,[102,177,178],{"class":119},"    {\n",[102,180,182,185,189,192,195,197],{"class":104,"line":181},11,[102,183,184],{"class":108},"        return",[102,186,188],{"class":187},"sj4cs"," 2",[102,190,191],{"class":108},"*",[102,193,194],{"class":119},"PI",[102,196,191],{"class":108},[102,198,199],{"class":119},"m_r;\n",[102,201,203],{"class":104,"line":202},12,[102,204,205],{"class":119},"    }\n",[102,207,209],{"class":104,"line":208},13,[102,210,211],{"class":119},"};\n",[102,213,215,218,221],{"class":104,"line":214},14,[102,216,217],{"class":108},"int",[102,219,220],{"class":112}," main",[102,222,172],{"class":119},[102,224,226],{"class":104,"line":225},15,[102,227,120],{"class":119},[102,229,231],{"class":104,"line":230},16,[102,232,233],{"class":126},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[102,235,237],{"class":104,"line":236},17,[102,238,239],{"class":126},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[102,241,243],{"class":104,"line":242},18,[102,244,245],{"class":119},"    Circle c1;\n",[102,247,249],{"class":104,"line":248},19,[102,250,251],{"class":126},"    \u002F\u002F给圆对象 的属性进行赋值\n",[102,253,255,258,261,264],{"class":104,"line":254},20,[102,256,257],{"class":119},"    c1.m_r",[102,259,260],{"class":108},"=",[102,262,263],{"class":187},"10",[102,265,266],{"class":119},";\n",[102,268,270,273,276,280,282,285,288,291,293],{"class":104,"line":269},21,[102,271,272],{"class":119},"    cout",[102,274,275],{"class":108},"\u003C\u003C",[102,277,279],{"class":278},"sZZnC","\"圆的周长\"",[102,281,275],{"class":108},[102,283,284],{"class":119},"c1.",[102,286,287],{"class":112},"calculateZC",[102,289,290],{"class":119},"()",[102,292,275],{"class":108},[102,294,295],{"class":119},"endl;\n",[102,297,299],{"class":104,"line":298},22,[102,300,301],{"class":119},"}\n",[14,303,304],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[93,306,308],{"className":95,"code":307,"language":97,"meta":98,"style":98},"#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",[83,309,310,318,331,338,345,349,353,358,365,370,391,395,405,409,414,430,434,444,448,453,462,466,500,505,510,519,524,530,536,553,568,579],{"__ignoreMap":98},[102,311,312,315],{"class":104,"line":105},[102,313,314],{"class":108},"#include",[102,316,317],{"class":278},"\u003Ciostream>\n",[102,319,320,323,326,329],{"class":104,"line":116},[102,321,322],{"class":108},"using",[102,324,325],{"class":108}," namespace",[102,327,328],{"class":112}," std",[102,330,266],{"class":119},[102,332,333,335],{"class":104,"line":123},[102,334,314],{"class":108},[102,336,337],{"class":278},"\u003Cstring>\n",[102,339,340,342],{"class":104,"line":130},[102,341,109],{"class":108},[102,343,344],{"class":112}," Student\n",[102,346,347],{"class":104,"line":136},[102,348,120],{"class":119},[102,350,351],{"class":104,"line":142},[102,352,139],{"class":108},[102,354,355],{"class":104,"line":148},[102,356,357],{"class":119},"    string m_name;\n",[102,359,360,362],{"class":104,"line":157},[102,361,151],{"class":108},[102,363,364],{"class":119}," m_id;\n",[102,366,367],{"class":104,"line":163},[102,368,369],{"class":126},"    \u002F\u002F赋值姓名\n",[102,371,372,375,378,381,384,388],{"class":104,"line":175},[102,373,374],{"class":108},"    void",[102,376,377],{"class":112}," setName",[102,379,380],{"class":119},"(",[102,382,383],{"class":112},"string",[102,385,387],{"class":386},"s4XuR"," name",[102,389,390],{"class":119},")\n",[102,392,393],{"class":104,"line":181},[102,394,178],{"class":119},[102,396,397,400,402],{"class":104,"line":202},[102,398,399],{"class":119},"        m_name",[102,401,260],{"class":108},[102,403,404],{"class":119},"name;\n",[102,406,407],{"class":104,"line":208},[102,408,205],{"class":119},[102,410,411],{"class":104,"line":214},[102,412,413],{"class":126},"    \u002F\u002F赋值学号\n",[102,415,416,418,421,423,425,428],{"class":104,"line":225},[102,417,374],{"class":108},[102,419,420],{"class":112}," setId",[102,422,380],{"class":119},[102,424,217],{"class":108},[102,426,427],{"class":386}," id",[102,429,390],{"class":119},[102,431,432],{"class":104,"line":230},[102,433,178],{"class":119},[102,435,436,439,441],{"class":104,"line":236},[102,437,438],{"class":119},"        m_id",[102,440,260],{"class":108},[102,442,443],{"class":119},"id;\n",[102,445,446],{"class":104,"line":242},[102,447,205],{"class":119},[102,449,450],{"class":104,"line":248},[102,451,452],{"class":126},"    \u002F\u002F打印学生信息\n",[102,454,455,457,460],{"class":104,"line":254},[102,456,374],{"class":108},[102,458,459],{"class":112}," printInfo",[102,461,172],{"class":119},[102,463,464],{"class":104,"line":269},[102,465,178],{"class":119},[102,467,468,471,473,476,478,481,483,486,488,491,493,496,498],{"class":104,"line":298},[102,469,470],{"class":119},"        cout",[102,472,275],{"class":108},[102,474,475],{"class":278},"\"姓名：\"",[102,477,275],{"class":108},[102,479,480],{"class":119},"m_name",[102,482,275],{"class":108},[102,484,485],{"class":278},"\" \"",[102,487,275],{"class":108},[102,489,490],{"class":278},"\"学号：\"",[102,492,275],{"class":108},[102,494,495],{"class":119},"m_id",[102,497,275],{"class":108},[102,499,295],{"class":119},[102,501,503],{"class":104,"line":502},23,[102,504,205],{"class":119},[102,506,508],{"class":104,"line":507},24,[102,509,211],{"class":119},[102,511,513,515,517],{"class":104,"line":512},25,[102,514,217],{"class":108},[102,516,220],{"class":112},[102,518,172],{"class":119},[102,520,522],{"class":104,"line":521},26,[102,523,120],{"class":119},[102,525,527],{"class":104,"line":526},27,[102,528,529],{"class":126},"    \u002F\u002F实例化\n",[102,531,533],{"class":104,"line":532},28,[102,534,535],{"class":119},"    Student s1;\n",[102,537,539,542,545,547,550],{"class":104,"line":538},29,[102,540,541],{"class":119},"    s1.",[102,543,544],{"class":112},"setName",[102,546,380],{"class":119},[102,548,549],{"class":278},"\"张三\"",[102,551,552],{"class":119},");\n",[102,554,556,558,561,563,566],{"class":104,"line":555},30,[102,557,541],{"class":119},[102,559,560],{"class":112},"setId",[102,562,380],{"class":119},[102,564,565],{"class":187},"123456",[102,567,552],{"class":119},[102,569,571,573,576],{"class":104,"line":570},31,[102,572,541],{"class":119},[102,574,575],{"class":112},"printInfo",[102,577,578],{"class":119},"();\n",[102,580,582],{"class":104,"line":581},32,[102,583,301],{"class":119},[14,585,586],{},"类中的属性和行为统称为成员",[14,588,589],{},"属性：成员属性(成员变量)",[14,591,592],{},"方法：成员函数(成员方法)",[14,594,595],{},[18,596,597],{},"封装意义二：",[14,599,600],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,602,603],{},"访问权限有三种：",[87,605,606,609,612],{},[62,607,608],{},"public        公共权限",[62,610,611],{},"protected 保护权限",[62,613,614],{},"private      私有权限",[14,616,617],{},[18,618,619],{},"示例：",[93,621,625],{"className":622,"code":623,"language":624,"meta":98,"style":98},"language-C++ shiki shiki-themes github-light github-dark","\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","C++",[83,626,627,632,637,642,647,653,660,664,669,673,678,682,687,692,697,701,706,711,718,722,726,735,739,751,763,775,779,783,787,796,800,805,817,826,835,840,853,858,869],{"__ignoreMap":98},[102,628,629],{"class":104,"line":105},[102,630,631],{"class":126},"\u002F\u002F三种权限\n",[102,633,634],{"class":104,"line":116},[102,635,636],{"class":126},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[102,638,639],{"class":104,"line":123},[102,640,641],{"class":126},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[102,643,644],{"class":104,"line":130},[102,645,646],{"class":126},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[102,648,649],{"class":104,"line":136},[102,650,652],{"emptyLinePlaceholder":651},true,"\n",[102,654,655,657],{"class":104,"line":142},[102,656,109],{"class":108},[102,658,659],{"class":112}," Person\n",[102,661,662],{"class":104,"line":148},[102,663,120],{"class":119},[102,665,666],{"class":104,"line":157},[102,667,668],{"class":126},"    \u002F\u002F姓名  公共权限\n",[102,670,671],{"class":104,"line":163},[102,672,139],{"class":108},[102,674,675],{"class":104,"line":175},[102,676,677],{"class":119},"    string m_Name;\n",[102,679,680],{"class":104,"line":181},[102,681,652],{"emptyLinePlaceholder":651},[102,683,684],{"class":104,"line":202},[102,685,686],{"class":126},"    \u002F\u002F汽车  保护权限\n",[102,688,689],{"class":104,"line":208},[102,690,691],{"class":108},"protected:\n",[102,693,694],{"class":104,"line":214},[102,695,696],{"class":119},"    string m_Car;\n",[102,698,699],{"class":104,"line":225},[102,700,652],{"emptyLinePlaceholder":651},[102,702,703],{"class":104,"line":230},[102,704,705],{"class":126},"    \u002F\u002F银行卡密码  私有权限\n",[102,707,708],{"class":104,"line":236},[102,709,710],{"class":108},"private:\n",[102,712,713,715],{"class":104,"line":242},[102,714,151],{"class":108},[102,716,717],{"class":119}," m_Password;\n",[102,719,720],{"class":104,"line":248},[102,721,652],{"emptyLinePlaceholder":651},[102,723,724],{"class":104,"line":254},[102,725,139],{"class":108},[102,727,728,730,733],{"class":104,"line":269},[102,729,374],{"class":108},[102,731,732],{"class":112}," func",[102,734,172],{"class":119},[102,736,737],{"class":104,"line":298},[102,738,178],{"class":119},[102,740,741,744,746,749],{"class":104,"line":502},[102,742,743],{"class":119},"        m_Name ",[102,745,260],{"class":108},[102,747,748],{"class":278}," \"张三\"",[102,750,266],{"class":119},[102,752,753,756,758,761],{"class":104,"line":507},[102,754,755],{"class":119},"        m_Car ",[102,757,260],{"class":108},[102,759,760],{"class":278}," \"拖拉机\"",[102,762,266],{"class":119},[102,764,765,768,770,773],{"class":104,"line":512},[102,766,767],{"class":119},"        m_Password ",[102,769,260],{"class":108},[102,771,772],{"class":187}," 123456",[102,774,266],{"class":119},[102,776,777],{"class":104,"line":521},[102,778,205],{"class":119},[102,780,781],{"class":104,"line":526},[102,782,211],{"class":119},[102,784,785],{"class":104,"line":532},[102,786,652],{"emptyLinePlaceholder":651},[102,788,789,791,793],{"class":104,"line":538},[102,790,217],{"class":108},[102,792,220],{"class":112},[102,794,795],{"class":119},"() {\n",[102,797,798],{"class":104,"line":555},[102,799,652],{"emptyLinePlaceholder":651},[102,801,802],{"class":104,"line":570},[102,803,804],{"class":119},"    Person p;\n",[102,806,807,810,812,815],{"class":104,"line":581},[102,808,809],{"class":119},"    p.m_Name ",[102,811,260],{"class":108},[102,813,814],{"class":278}," \"李四\"",[102,816,266],{"class":119},[102,818,820,823],{"class":104,"line":819},33,[102,821,822],{"class":126},"    \u002F\u002Fp.m_Car = \"奔驰\";",[102,824,825],{"class":126},"  \u002F\u002F保护权限类外访问不到\n",[102,827,829,832],{"class":104,"line":828},34,[102,830,831],{"class":126},"    \u002F\u002Fp.m_Password = 123;",[102,833,834],{"class":126}," \u002F\u002F私有权限类外访问不到\n",[102,836,838],{"class":104,"line":837},35,[102,839,652],{"emptyLinePlaceholder":651},[102,841,843,846,848,851],{"class":104,"line":842},36,[102,844,845],{"class":112},"    system",[102,847,380],{"class":119},[102,849,850],{"class":278},"\"pause\"",[102,852,552],{"class":119},[102,854,856],{"class":104,"line":855},37,[102,857,652],{"emptyLinePlaceholder":651},[102,859,861,864,867],{"class":104,"line":860},38,[102,862,863],{"class":108},"    return",[102,865,866],{"class":187}," 0",[102,868,266],{"class":119},[102,870,872],{"class":104,"line":871},39,[102,873,301],{"class":119},[48,875,877],{"id":876},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,879,880,881,884,885],{},"在C++中 struct和class唯一的",[18,882,883],{},"区别","就在于 ",[18,886,887],{},"默认的访问权限不同",[14,889,890],{},"区别：",[59,892,893,896],{},[62,894,895],{},"struct 默认权限为公共",[62,897,898],{},"class   默认权限为私有",[93,900,902],{"className":622,"code":901,"language":624,"meta":98,"style":98},"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",[83,903,904,911,915,925,929,933,941,945,955,959,963,971,975,980,996,1000,1005,1019,1023,1033,1037,1045],{"__ignoreMap":98},[102,905,906,908],{"class":104,"line":105},[102,907,109],{"class":108},[102,909,910],{"class":112}," C1\n",[102,912,913],{"class":104,"line":116},[102,914,120],{"class":119},[102,916,917,919,922],{"class":104,"line":123},[102,918,151],{"class":108},[102,920,921],{"class":119},"  m_A;",[102,923,924],{"class":126}," \u002F\u002F默认是私有权限\n",[102,926,927],{"class":104,"line":130},[102,928,211],{"class":119},[102,930,931],{"class":104,"line":136},[102,932,652],{"emptyLinePlaceholder":651},[102,934,935,938],{"class":104,"line":142},[102,936,937],{"class":108},"struct",[102,939,940],{"class":112}," C2\n",[102,942,943],{"class":104,"line":148},[102,944,120],{"class":119},[102,946,947,949,952],{"class":104,"line":157},[102,948,151],{"class":108},[102,950,951],{"class":119}," m_A;",[102,953,954],{"class":126},"  \u002F\u002F默认是公共权限\n",[102,956,957],{"class":104,"line":163},[102,958,211],{"class":119},[102,960,961],{"class":104,"line":175},[102,962,652],{"emptyLinePlaceholder":651},[102,964,965,967,969],{"class":104,"line":181},[102,966,217],{"class":108},[102,968,220],{"class":112},[102,970,795],{"class":119},[102,972,973],{"class":104,"line":202},[102,974,652],{"emptyLinePlaceholder":651},[102,976,977],{"class":104,"line":208},[102,978,979],{"class":119},"    C1 c1;\n",[102,981,982,985,987,990,993],{"class":104,"line":214},[102,983,984],{"class":119},"    c1.m_A ",[102,986,260],{"class":108},[102,988,989],{"class":187}," 10",[102,991,992],{"class":119},";",[102,994,995],{"class":126}," \u002F\u002F错误，访问权限是私有\n",[102,997,998],{"class":104,"line":225},[102,999,652],{"emptyLinePlaceholder":651},[102,1001,1002],{"class":104,"line":230},[102,1003,1004],{"class":119},"    C2 c2;\n",[102,1006,1007,1010,1012,1014,1016],{"class":104,"line":236},[102,1008,1009],{"class":119},"    c2.m_A ",[102,1011,260],{"class":108},[102,1013,989],{"class":187},[102,1015,992],{"class":119},[102,1017,1018],{"class":126}," \u002F\u002F正确，访问权限是公共\n",[102,1020,1021],{"class":104,"line":242},[102,1022,652],{"emptyLinePlaceholder":651},[102,1024,1025,1027,1029,1031],{"class":104,"line":248},[102,1026,845],{"class":112},[102,1028,380],{"class":119},[102,1030,850],{"class":278},[102,1032,552],{"class":119},[102,1034,1035],{"class":104,"line":254},[102,1036,652],{"emptyLinePlaceholder":651},[102,1038,1039,1041,1043],{"class":104,"line":269},[102,1040,863],{"class":108},[102,1042,866],{"class":187},[102,1044,266],{"class":119},[102,1046,1047],{"class":104,"line":298},[102,1048,301],{"class":119},[48,1050,1052],{"id":1051},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,1054,1055],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,1057,1058],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,1060,1061],{},[18,1062,619],{},[93,1064,1066],{"className":622,"code":1065,"language":624,"meta":98,"style":98},"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",[83,1067,1068,1078,1082,1086,1091,1106,1115,1119,1129,1133,1140,1144,1148,1152,1157,1166,1173,1177,1182,1198,1225,1241,1248,1253,1263,1267,1271,1276,1292,1302,1306,1310,1314,1322,1327,1337,1341,1349,1353,1357,1366,1371,1376,1382,1396,1422,1427,1433,1448,1471,1476,1482,1497,1506,1511,1522,1527,1536],{"__ignoreMap":98},[102,1069,1070,1072,1075],{"class":104,"line":105},[102,1071,109],{"class":108},[102,1073,1074],{"class":112}," Person",[102,1076,1077],{"class":119}," {\n",[102,1079,1080],{"class":104,"line":116},[102,1081,139],{"class":108},[102,1083,1084],{"class":104,"line":123},[102,1085,652],{"emptyLinePlaceholder":651},[102,1087,1088],{"class":104,"line":130},[102,1089,1090],{"class":126},"    \u002F\u002F姓名设置可读可写\n",[102,1092,1093,1095,1097,1099,1101,1103],{"class":104,"line":136},[102,1094,374],{"class":108},[102,1096,377],{"class":112},[102,1098,380],{"class":119},[102,1100,383],{"class":112},[102,1102,387],{"class":386},[102,1104,1105],{"class":119},") {\n",[102,1107,1108,1110,1112],{"class":104,"line":142},[102,1109,743],{"class":119},[102,1111,260],{"class":108},[102,1113,1114],{"class":119}," name;\n",[102,1116,1117],{"class":104,"line":148},[102,1118,205],{"class":119},[102,1120,1121,1124,1127],{"class":104,"line":157},[102,1122,1123],{"class":112},"    string",[102,1125,1126],{"class":112}," getName",[102,1128,172],{"class":119},[102,1130,1131],{"class":104,"line":163},[102,1132,178],{"class":119},[102,1134,1135,1137],{"class":104,"line":175},[102,1136,184],{"class":108},[102,1138,1139],{"class":119}," m_Name;\n",[102,1141,1142],{"class":104,"line":181},[102,1143,205],{"class":119},[102,1145,1146],{"class":104,"line":202},[102,1147,652],{"emptyLinePlaceholder":651},[102,1149,1150],{"class":104,"line":208},[102,1151,652],{"emptyLinePlaceholder":651},[102,1153,1154],{"class":104,"line":214},[102,1155,1156],{"class":126},"    \u002F\u002F获取年龄 \n",[102,1158,1159,1161,1164],{"class":104,"line":225},[102,1160,151],{"class":108},[102,1162,1163],{"class":112}," getAge",[102,1165,795],{"class":119},[102,1167,1168,1170],{"class":104,"line":230},[102,1169,184],{"class":108},[102,1171,1172],{"class":119}," m_Age;\n",[102,1174,1175],{"class":104,"line":236},[102,1176,205],{"class":119},[102,1178,1179],{"class":104,"line":242},[102,1180,1181],{"class":126},"    \u002F\u002F设置年龄\n",[102,1183,1184,1186,1189,1191,1193,1196],{"class":104,"line":248},[102,1185,374],{"class":108},[102,1187,1188],{"class":112}," setAge",[102,1190,380],{"class":119},[102,1192,217],{"class":108},[102,1194,1195],{"class":386}," age",[102,1197,1105],{"class":119},[102,1199,1200,1203,1206,1209,1211,1214,1217,1220,1223],{"class":104,"line":254},[102,1201,1202],{"class":108},"        if",[102,1204,1205],{"class":119}," (age ",[102,1207,1208],{"class":108},"\u003C",[102,1210,866],{"class":187},[102,1212,1213],{"class":108}," ||",[102,1215,1216],{"class":119}," age ",[102,1218,1219],{"class":108},">",[102,1221,1222],{"class":187}," 150",[102,1224,1105],{"class":119},[102,1226,1227,1230,1232,1235,1238],{"class":104,"line":269},[102,1228,1229],{"class":119},"            cout ",[102,1231,275],{"class":108},[102,1233,1234],{"class":278}," \"你个老妖精!\"",[102,1236,1237],{"class":108}," \u003C\u003C",[102,1239,1240],{"class":119}," endl;\n",[102,1242,1243,1246],{"class":104,"line":298},[102,1244,1245],{"class":108},"            return",[102,1247,266],{"class":119},[102,1249,1250],{"class":104,"line":502},[102,1251,1252],{"class":119},"        }\n",[102,1254,1255,1258,1260],{"class":104,"line":507},[102,1256,1257],{"class":119},"        m_Age ",[102,1259,260],{"class":108},[102,1261,1262],{"class":119}," age;\n",[102,1264,1265],{"class":104,"line":512},[102,1266,205],{"class":119},[102,1268,1269],{"class":104,"line":521},[102,1270,652],{"emptyLinePlaceholder":651},[102,1272,1273],{"class":104,"line":526},[102,1274,1275],{"class":126},"    \u002F\u002F情人设置为只写\n",[102,1277,1278,1280,1283,1285,1287,1290],{"class":104,"line":532},[102,1279,374],{"class":108},[102,1281,1282],{"class":112}," setLover",[102,1284,380],{"class":119},[102,1286,383],{"class":112},[102,1288,1289],{"class":386}," lover",[102,1291,1105],{"class":119},[102,1293,1294,1297,1299],{"class":104,"line":538},[102,1295,1296],{"class":119},"        m_Lover ",[102,1298,260],{"class":108},[102,1300,1301],{"class":119}," lover;\n",[102,1303,1304],{"class":104,"line":555},[102,1305,205],{"class":119},[102,1307,1308],{"class":104,"line":570},[102,1309,652],{"emptyLinePlaceholder":651},[102,1311,1312],{"class":104,"line":581},[102,1313,710],{"class":108},[102,1315,1316,1319],{"class":104,"line":819},[102,1317,1318],{"class":119},"    string m_Name;",[102,1320,1321],{"class":126}," \u002F\u002F可读可写  姓名\n",[102,1323,1324],{"class":104,"line":828},[102,1325,1326],{"class":119},"    \n",[102,1328,1329,1331,1334],{"class":104,"line":837},[102,1330,151],{"class":108},[102,1332,1333],{"class":119}," m_Age;",[102,1335,1336],{"class":126}," \u002F\u002F只读  年龄\n",[102,1338,1339],{"class":104,"line":842},[102,1340,652],{"emptyLinePlaceholder":651},[102,1342,1343,1346],{"class":104,"line":855},[102,1344,1345],{"class":119},"    string m_Lover;",[102,1347,1348],{"class":126}," \u002F\u002F只写  情人\n",[102,1350,1351],{"class":104,"line":860},[102,1352,211],{"class":119},[102,1354,1355],{"class":104,"line":871},[102,1356,652],{"emptyLinePlaceholder":651},[102,1358,1360,1362,1364],{"class":104,"line":1359},40,[102,1361,217],{"class":108},[102,1363,220],{"class":112},[102,1365,795],{"class":119},[102,1367,1369],{"class":104,"line":1368},41,[102,1370,652],{"emptyLinePlaceholder":651},[102,1372,1374],{"class":104,"line":1373},42,[102,1375,804],{"class":119},[102,1377,1379],{"class":104,"line":1378},43,[102,1380,1381],{"class":126},"    \u002F\u002F姓名设置\n",[102,1383,1385,1388,1390,1392,1394],{"class":104,"line":1384},44,[102,1386,1387],{"class":119},"    p.",[102,1389,544],{"class":112},[102,1391,380],{"class":119},[102,1393,549],{"class":278},[102,1395,552],{"class":119},[102,1397,1399,1402,1404,1407,1409,1412,1415,1418,1420],{"class":104,"line":1398},45,[102,1400,1401],{"class":119},"    cout ",[102,1403,275],{"class":108},[102,1405,1406],{"class":278}," \"姓名： \"",[102,1408,1237],{"class":108},[102,1410,1411],{"class":119}," p.",[102,1413,1414],{"class":112},"getName",[102,1416,1417],{"class":119},"() ",[102,1419,275],{"class":108},[102,1421,1240],{"class":119},[102,1423,1425],{"class":104,"line":1424},46,[102,1426,652],{"emptyLinePlaceholder":651},[102,1428,1430],{"class":104,"line":1429},47,[102,1431,1432],{"class":126},"    \u002F\u002F年龄设置\n",[102,1434,1436,1438,1441,1443,1446],{"class":104,"line":1435},48,[102,1437,1387],{"class":119},[102,1439,1440],{"class":112},"setAge",[102,1442,380],{"class":119},[102,1444,1445],{"class":187},"50",[102,1447,552],{"class":119},[102,1449,1451,1453,1455,1458,1460,1462,1465,1467,1469],{"class":104,"line":1450},49,[102,1452,1401],{"class":119},[102,1454,275],{"class":108},[102,1456,1457],{"class":278}," \"年龄： \"",[102,1459,1237],{"class":108},[102,1461,1411],{"class":119},[102,1463,1464],{"class":112},"getAge",[102,1466,1417],{"class":119},[102,1468,275],{"class":108},[102,1470,1240],{"class":119},[102,1472,1474],{"class":104,"line":1473},50,[102,1475,652],{"emptyLinePlaceholder":651},[102,1477,1479],{"class":104,"line":1478},51,[102,1480,1481],{"class":126},"    \u002F\u002F情人设置\n",[102,1483,1485,1487,1490,1492,1495],{"class":104,"line":1484},52,[102,1486,1387],{"class":119},[102,1488,1489],{"class":112},"setLover",[102,1491,380],{"class":119},[102,1493,1494],{"class":278},"\"苍井\"",[102,1496,552],{"class":119},[102,1498,1500,1503],{"class":104,"line":1499},53,[102,1501,1502],{"class":126},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[102,1504,1505],{"class":126},"  \u002F\u002F只写属性，不可以读取\n",[102,1507,1509],{"class":104,"line":1508},54,[102,1510,652],{"emptyLinePlaceholder":651},[102,1512,1514,1516,1518,1520],{"class":104,"line":1513},55,[102,1515,845],{"class":112},[102,1517,380],{"class":119},[102,1519,850],{"class":278},[102,1521,552],{"class":119},[102,1523,1525],{"class":104,"line":1524},56,[102,1526,652],{"emptyLinePlaceholder":651},[102,1528,1530,1532,1534],{"class":104,"line":1529},57,[102,1531,863],{"class":108},[102,1533,866],{"class":187},[102,1535,266],{"class":119},[102,1537,1539],{"class":104,"line":1538},58,[102,1540,301],{"class":119},[48,1542,1544],{"id":1543},"_814封装案例","8.1.4封装案例",[87,1546,1547],{},[62,1548,1549,1552],{},[18,1550,1551],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[59,1554,1555,1558],{},[62,1556,1557],{},"求出立方体的面积和体积",[62,1559,1560],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[93,1562,1564],{"className":95,"code":1563,"language":97,"meta":98,"style":98},"#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",[83,1565,1566,1572,1582,1589,1593,1597,1602,1633,1637,1647,1657,1667,1671,1680,1684,1721,1725,1734,1738,1754,1758,1763,1772,1776,1783,1787,1796,1800,1807,1811,1820,1824,1831,1835,1840,1858,1862,1910,1915,1924,1928,1933,1937,1946,1950,1954,1959,1963,1969,1975,1981,1985,1989,1994,2017,2021,2075,2079,2087,2092,2098,2104,2118,2126,2147,2159,2165,2188,2194,2217,2231,2251,2257,2268,2291,2313,2318,2324,2338,2352,2357,2371,2376,2382,2387,2401,2406,2411,2425,2438,2443,2456,2461,2466,2471,2484,2489],{"__ignoreMap":98},[102,1567,1568,1570],{"class":104,"line":105},[102,1569,314],{"class":108},[102,1571,317],{"class":278},[102,1573,1574,1576,1578,1580],{"class":104,"line":116},[102,1575,322],{"class":108},[102,1577,325],{"class":108},[102,1579,328],{"class":112},[102,1581,266],{"class":119},[102,1583,1584,1586],{"class":104,"line":123},[102,1585,109],{"class":108},[102,1587,1588],{"class":112}," Cube\n",[102,1590,1591],{"class":104,"line":130},[102,1592,120],{"class":119},[102,1594,1595],{"class":104,"line":136},[102,1596,139],{"class":108},[102,1598,1599],{"class":104,"line":142},[102,1600,1601],{"class":126},"    \u002F\u002F输入长宽高\n",[102,1603,1604,1606,1609,1611,1613,1616,1619,1621,1624,1626,1628,1631],{"class":104,"line":148},[102,1605,374],{"class":108},[102,1607,1608],{"class":112}," setLwh",[102,1610,380],{"class":119},[102,1612,217],{"class":108},[102,1614,1615],{"class":386}," l",[102,1617,1618],{"class":119},",",[102,1620,217],{"class":108},[102,1622,1623],{"class":386}," w",[102,1625,1618],{"class":119},[102,1627,217],{"class":108},[102,1629,1630],{"class":386}," h",[102,1632,390],{"class":119},[102,1634,1635],{"class":104,"line":157},[102,1636,178],{"class":119},[102,1638,1639,1642,1644],{"class":104,"line":163},[102,1640,1641],{"class":119},"        m_L",[102,1643,260],{"class":108},[102,1645,1646],{"class":119},"l;\n",[102,1648,1649,1652,1654],{"class":104,"line":175},[102,1650,1651],{"class":119},"        m_W",[102,1653,260],{"class":108},[102,1655,1656],{"class":119},"w;\n",[102,1658,1659,1662,1664],{"class":104,"line":181},[102,1660,1661],{"class":119},"        m_H",[102,1663,260],{"class":108},[102,1665,1666],{"class":119},"h;\n",[102,1668,1669],{"class":104,"line":202},[102,1670,205],{"class":119},[102,1672,1673,1675,1678],{"class":104,"line":208},[102,1674,151],{"class":108},[102,1676,1677],{"class":112}," mianji",[102,1679,172],{"class":119},[102,1681,1682],{"class":104,"line":214},[102,1683,178],{"class":119},[102,1685,1686,1688,1690,1692,1695,1697,1700,1703,1706,1708,1711,1713,1716,1718],{"class":104,"line":225},[102,1687,184],{"class":108},[102,1689,188],{"class":187},[102,1691,191],{"class":108},[102,1693,1694],{"class":119},"(m_L",[102,1696,191],{"class":108},[102,1698,1699],{"class":119},"m_W ",[102,1701,1702],{"class":108},"+",[102,1704,1705],{"class":119}," m_L",[102,1707,191],{"class":108},[102,1709,1710],{"class":119},"m_H ",[102,1712,1702],{"class":108},[102,1714,1715],{"class":119}," m_W",[102,1717,191],{"class":108},[102,1719,1720],{"class":119},"m_H);\n",[102,1722,1723],{"class":104,"line":230},[102,1724,205],{"class":119},[102,1726,1727,1729,1732],{"class":104,"line":236},[102,1728,151],{"class":108},[102,1730,1731],{"class":112}," tiji",[102,1733,172],{"class":119},[102,1735,1736],{"class":104,"line":242},[102,1737,178],{"class":119},[102,1739,1740,1742,1744,1746,1749,1751],{"class":104,"line":248},[102,1741,184],{"class":108},[102,1743,1705],{"class":119},[102,1745,191],{"class":108},[102,1747,1748],{"class":119},"m_W",[102,1750,191],{"class":108},[102,1752,1753],{"class":119},"m_H;\n",[102,1755,1756],{"class":104,"line":254},[102,1757,205],{"class":119},[102,1759,1760],{"class":104,"line":269},[102,1761,1762],{"class":126},"    \u002F\u002F获取长宽高\n",[102,1764,1765,1767,1770],{"class":104,"line":298},[102,1766,151],{"class":108},[102,1768,1769],{"class":112}," getLength",[102,1771,172],{"class":119},[102,1773,1774],{"class":104,"line":502},[102,1775,178],{"class":119},[102,1777,1778,1780],{"class":104,"line":507},[102,1779,184],{"class":108},[102,1781,1782],{"class":119}," m_L;\n",[102,1784,1785],{"class":104,"line":512},[102,1786,205],{"class":119},[102,1788,1789,1791,1794],{"class":104,"line":521},[102,1790,151],{"class":108},[102,1792,1793],{"class":112}," getWidth",[102,1795,172],{"class":119},[102,1797,1798],{"class":104,"line":526},[102,1799,178],{"class":119},[102,1801,1802,1804],{"class":104,"line":532},[102,1803,184],{"class":108},[102,1805,1806],{"class":119}," m_W;\n",[102,1808,1809],{"class":104,"line":538},[102,1810,205],{"class":119},[102,1812,1813,1815,1818],{"class":104,"line":555},[102,1814,151],{"class":108},[102,1816,1817],{"class":112}," getHeight",[102,1819,172],{"class":119},[102,1821,1822],{"class":104,"line":570},[102,1823,178],{"class":119},[102,1825,1826,1828],{"class":104,"line":581},[102,1827,184],{"class":108},[102,1829,1830],{"class":119}," m_H;\n",[102,1832,1833],{"class":104,"line":819},[102,1834,205],{"class":119},[102,1836,1837],{"class":104,"line":828},[102,1838,1839],{"class":126},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[102,1841,1842,1845,1848,1850,1853,1856],{"class":104,"line":837},[102,1843,1844],{"class":108},"    bool",[102,1846,1847],{"class":112}," isEqual",[102,1849,380],{"class":119},[102,1851,1852],{"class":112},"Cube",[102,1854,1855],{"class":386}," c",[102,1857,390],{"class":119},[102,1859,1860],{"class":104,"line":842},[102,1861,178],{"class":119},[102,1863,1864,1866,1869,1872,1874,1877,1880,1883,1886,1889,1891,1893,1896,1898,1900,1903,1905,1907],{"class":104,"line":855},[102,1865,1202],{"class":108},[102,1867,1868],{"class":119}," (c.",[102,1870,1871],{"class":112},"getLength",[102,1873,1417],{"class":119},[102,1875,1876],{"class":108},"==",[102,1878,1879],{"class":119}," m_L ",[102,1881,1882],{"class":108},"&&",[102,1884,1885],{"class":119}," c.",[102,1887,1888],{"class":112},"getWidth",[102,1890,1417],{"class":119},[102,1892,1876],{"class":108},[102,1894,1895],{"class":119}," m_W ",[102,1897,1882],{"class":108},[102,1899,1885],{"class":119},[102,1901,1902],{"class":112},"getHeight",[102,1904,1417],{"class":119},[102,1906,1876],{"class":108},[102,1908,1909],{"class":119}," m_H)\n",[102,1911,1912],{"class":104,"line":860},[102,1913,1914],{"class":119},"        {\n",[102,1916,1917,1919,1922],{"class":104,"line":871},[102,1918,1245],{"class":108},[102,1920,1921],{"class":187}," true",[102,1923,266],{"class":119},[102,1925,1926],{"class":104,"line":1359},[102,1927,1252],{"class":119},[102,1929,1930],{"class":104,"line":1368},[102,1931,1932],{"class":108},"        else\n",[102,1934,1935],{"class":104,"line":1373},[102,1936,1914],{"class":119},[102,1938,1939,1941,1944],{"class":104,"line":1378},[102,1940,1245],{"class":108},[102,1942,1943],{"class":187}," false",[102,1945,266],{"class":119},[102,1947,1948],{"class":104,"line":1384},[102,1949,1252],{"class":119},[102,1951,1952],{"class":104,"line":1398},[102,1953,205],{"class":119},[102,1955,1956],{"class":104,"line":1424},[102,1957,1958],{"class":126},"    \u002F\u002F私有属性\n",[102,1960,1961],{"class":104,"line":1429},[102,1962,710],{"class":108},[102,1964,1965,1967],{"class":104,"line":1435},[102,1966,151],{"class":108},[102,1968,1782],{"class":119},[102,1970,1971,1973],{"class":104,"line":1450},[102,1972,151],{"class":108},[102,1974,1806],{"class":119},[102,1976,1977,1979],{"class":104,"line":1473},[102,1978,151],{"class":108},[102,1980,1830],{"class":119},[102,1982,1983],{"class":104,"line":1478},[102,1984,652],{"emptyLinePlaceholder":651},[102,1986,1987],{"class":104,"line":1484},[102,1988,211],{"class":119},[102,1990,1991],{"class":104,"line":1499},[102,1992,1993],{"class":126},"\u002F\u002F全局函数判断两个立方体是否相等\n",[102,1995,1996,1999,2001,2003,2005,2008,2010,2012,2015],{"class":104,"line":1508},[102,1997,1998],{"class":108},"bool",[102,2000,1847],{"class":112},[102,2002,380],{"class":119},[102,2004,1852],{"class":112},[102,2006,2007],{"class":386}," c1",[102,2009,1618],{"class":119},[102,2011,1852],{"class":112},[102,2013,2014],{"class":386}," c2",[102,2016,390],{"class":119},[102,2018,2019],{"class":104,"line":1513},[102,2020,120],{"class":119},[102,2022,2023,2025,2028,2030,2032,2034,2037,2039,2042,2044,2046,2048,2050,2052,2054,2056,2058,2060,2062,2064,2066,2068,2070,2072],{"class":104,"line":1524},[102,2024,863],{"class":108},[102,2026,2027],{"class":119}," (c1.",[102,2029,1871],{"class":112},[102,2031,1417],{"class":119},[102,2033,1876],{"class":108},[102,2035,2036],{"class":119}," c2.",[102,2038,1871],{"class":112},[102,2040,2041],{"class":119},"()) ",[102,2043,1882],{"class":108},[102,2045,2027],{"class":119},[102,2047,1888],{"class":112},[102,2049,1417],{"class":119},[102,2051,1876],{"class":108},[102,2053,2036],{"class":119},[102,2055,1888],{"class":112},[102,2057,2041],{"class":119},[102,2059,1882],{"class":108},[102,2061,2027],{"class":119},[102,2063,1902],{"class":112},[102,2065,1417],{"class":119},[102,2067,1876],{"class":108},[102,2069,2036],{"class":119},[102,2071,1902],{"class":112},[102,2073,2074],{"class":119},"());\n",[102,2076,2077],{"class":104,"line":1529},[102,2078,301],{"class":119},[102,2080,2081,2083,2085],{"class":104,"line":1538},[102,2082,217],{"class":108},[102,2084,220],{"class":112},[102,2086,172],{"class":119},[102,2088,2090],{"class":104,"line":2089},59,[102,2091,120],{"class":119},[102,2093,2095],{"class":104,"line":2094},60,[102,2096,2097],{"class":119},"    Cube c1;\n",[102,2099,2101],{"class":104,"line":2100},61,[102,2102,2103],{"class":126},"    \u002F\u002F输入立方体的长宽高\n",[102,2105,2107,2109,2111,2114,2116],{"class":104,"line":2106},62,[102,2108,272],{"class":119},[102,2110,275],{"class":108},[102,2112,2113],{"class":278},"\"请输入第一个立方体的长、宽、高：\"",[102,2115,275],{"class":108},[102,2117,295],{"class":119},[102,2119,2121,2123],{"class":104,"line":2120},63,[102,2122,151],{"class":108},[102,2124,2125],{"class":119}," l,w,h,l1,w1,h1;\n",[102,2127,2129,2132,2135,2138,2140,2143,2145],{"class":104,"line":2128},64,[102,2130,2131],{"class":119},"    cin",[102,2133,2134],{"class":108},">>",[102,2136,2137],{"class":119},"l",[102,2139,2134],{"class":108},[102,2141,2142],{"class":119},"w",[102,2144,2134],{"class":108},[102,2146,1666],{"class":119},[102,2148,2150,2153,2156],{"class":104,"line":2149},65,[102,2151,2152],{"class":119},"    c1.",[102,2154,2155],{"class":112},"setLwh",[102,2157,2158],{"class":119},"(l,w,h);\n",[102,2160,2162],{"class":104,"line":2161},66,[102,2163,2164],{"class":126},"    \u002F\u002F面积\n",[102,2166,2168,2170,2172,2175,2177,2179,2182,2184,2186],{"class":104,"line":2167},67,[102,2169,272],{"class":119},[102,2171,275],{"class":108},[102,2173,2174],{"class":278},"\"立方体的表面积为：\"",[102,2176,275],{"class":108},[102,2178,284],{"class":119},[102,2180,2181],{"class":112},"mianji",[102,2183,290],{"class":119},[102,2185,275],{"class":108},[102,2187,295],{"class":119},[102,2189,2191],{"class":104,"line":2190},68,[102,2192,2193],{"class":126},"    \u002F\u002F体积\n",[102,2195,2197,2199,2201,2204,2206,2208,2211,2213,2215],{"class":104,"line":2196},69,[102,2198,272],{"class":119},[102,2200,275],{"class":108},[102,2202,2203],{"class":278},"\"立方体的体积为：\"",[102,2205,275],{"class":108},[102,2207,284],{"class":119},[102,2209,2210],{"class":112},"tiji",[102,2212,290],{"class":119},[102,2214,275],{"class":108},[102,2216,295],{"class":119},[102,2218,2220,2222,2224,2227,2229],{"class":104,"line":2219},70,[102,2221,272],{"class":119},[102,2223,275],{"class":108},[102,2225,2226],{"class":278},"\"请输入第二个立方体的长、宽、高：\"",[102,2228,275],{"class":108},[102,2230,295],{"class":119},[102,2232,2234,2236,2238,2241,2243,2246,2248],{"class":104,"line":2233},71,[102,2235,2131],{"class":119},[102,2237,2134],{"class":108},[102,2239,2240],{"class":119},"l1",[102,2242,2134],{"class":108},[102,2244,2245],{"class":119},"w1",[102,2247,2134],{"class":108},[102,2249,2250],{"class":119},"h1;\n",[102,2252,2254],{"class":104,"line":2253},72,[102,2255,2256],{"class":119},"    Cube c2;\n",[102,2258,2260,2263,2265],{"class":104,"line":2259},73,[102,2261,2262],{"class":119},"    c2.",[102,2264,2155],{"class":112},[102,2266,2267],{"class":119},"(l1,w1,h1);\n",[102,2269,2271,2273,2275,2278,2280,2283,2285,2287,2289],{"class":104,"line":2270},74,[102,2272,272],{"class":119},[102,2274,275],{"class":108},[102,2276,2277],{"class":278},"\"第二个立方体的表面积为：\"",[102,2279,275],{"class":108},[102,2281,2282],{"class":119},"c2.",[102,2284,2181],{"class":112},[102,2286,290],{"class":119},[102,2288,275],{"class":108},[102,2290,295],{"class":119},[102,2292,2294,2296,2298,2301,2303,2305,2307,2309,2311],{"class":104,"line":2293},75,[102,2295,272],{"class":119},[102,2297,275],{"class":108},[102,2299,2300],{"class":278},"\"第二个立方体的体积为：\"",[102,2302,275],{"class":108},[102,2304,2282],{"class":119},[102,2306,2210],{"class":112},[102,2308,290],{"class":119},[102,2310,275],{"class":108},[102,2312,295],{"class":119},[102,2314,2316],{"class":104,"line":2315},76,[102,2317,652],{"emptyLinePlaceholder":651},[102,2319,2321],{"class":104,"line":2320},77,[102,2322,2323],{"class":126},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[102,2325,2327,2329,2331,2334,2336],{"class":104,"line":2326},78,[102,2328,272],{"class":119},[102,2330,275],{"class":108},[102,2332,2333],{"class":278},"\"内部函数判断结果：\"",[102,2335,275],{"class":108},[102,2337,295],{"class":119},[102,2339,2341,2344,2346,2349],{"class":104,"line":2340},79,[102,2342,2343],{"class":108},"    if",[102,2345,2027],{"class":119},[102,2347,2348],{"class":112},"isEqual",[102,2350,2351],{"class":119},"(c2))\n",[102,2353,2355],{"class":104,"line":2354},80,[102,2356,178],{"class":119},[102,2358,2360,2362,2364,2367,2369],{"class":104,"line":2359},81,[102,2361,470],{"class":119},[102,2363,275],{"class":108},[102,2365,2366],{"class":278},"\"两个立方体相等\"",[102,2368,275],{"class":108},[102,2370,295],{"class":119},[102,2372,2374],{"class":104,"line":2373},82,[102,2375,205],{"class":119},[102,2377,2379],{"class":104,"line":2378},83,[102,2380,2381],{"class":108},"    else\n",[102,2383,2385],{"class":104,"line":2384},84,[102,2386,178],{"class":119},[102,2388,2390,2392,2394,2397,2399],{"class":104,"line":2389},85,[102,2391,470],{"class":119},[102,2393,275],{"class":108},[102,2395,2396],{"class":278},"\"两个立方体不相等\"",[102,2398,275],{"class":108},[102,2400,295],{"class":119},[102,2402,2404],{"class":104,"line":2403},86,[102,2405,205],{"class":119},[102,2407,2409],{"class":104,"line":2408},87,[102,2410,652],{"emptyLinePlaceholder":651},[102,2412,2414,2416,2418,2421,2423],{"class":104,"line":2413},88,[102,2415,272],{"class":119},[102,2417,275],{"class":108},[102,2419,2420],{"class":278},"\"全局函数判断结果：\"",[102,2422,275],{"class":108},[102,2424,295],{"class":119},[102,2426,2428,2430,2433,2435],{"class":104,"line":2427},89,[102,2429,2343],{"class":108},[102,2431,2432],{"class":119}," (",[102,2434,2348],{"class":112},[102,2436,2437],{"class":119},"(c1, c2))\n",[102,2439,2441],{"class":104,"line":2440},90,[102,2442,178],{"class":119},[102,2444,2446,2448,2450,2452,2454],{"class":104,"line":2445},91,[102,2447,470],{"class":119},[102,2449,275],{"class":108},[102,2451,2366],{"class":278},[102,2453,275],{"class":108},[102,2455,295],{"class":119},[102,2457,2459],{"class":104,"line":2458},92,[102,2460,205],{"class":119},[102,2462,2464],{"class":104,"line":2463},93,[102,2465,2381],{"class":108},[102,2467,2469],{"class":104,"line":2468},94,[102,2470,178],{"class":119},[102,2472,2474,2476,2478,2480,2482],{"class":104,"line":2473},95,[102,2475,470],{"class":119},[102,2477,275],{"class":108},[102,2479,2396],{"class":278},[102,2481,275],{"class":108},[102,2483,295],{"class":119},[102,2485,2487],{"class":104,"line":2486},96,[102,2488,205],{"class":119},[102,2490,2492],{"class":104,"line":2491},97,[102,2493,301],{"class":119},[87,2495,2496],{"start":116},[62,2497,2498],{},[18,2499,2500],{},"练习案例2：点和圆的关系",[59,2502,2503],{},[62,2504,2505],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[93,2507,2509],{"className":95,"code":2508,"language":97,"meta":98,"style":98},"#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",[83,2510,2511,2517,2527,2534,2541,2545,2549,2554,2590,2595,2611,2625,2629,2633,2640,2647,2651,2657,2661,2665,2669,2691,2714,2719,2733,2748,2752,2756,2762,2767,2772,2776,2805,2809,2840,2868,2896,2913,2917,2931,2935,2939,2943,2956,2960,2964,2972,2976,2980,2984,2989,2993,3004,3011,3020,3030,3041,3048,3062,3073,3083,3094,3101,3115,3120,3130,3138],{"__ignoreMap":98},[102,2512,2513,2515],{"class":104,"line":105},[102,2514,314],{"class":108},[102,2516,317],{"class":278},[102,2518,2519,2521,2523,2525],{"class":104,"line":116},[102,2520,322],{"class":108},[102,2522,325],{"class":108},[102,2524,328],{"class":112},[102,2526,266],{"class":119},[102,2528,2529,2531],{"class":104,"line":123},[102,2530,314],{"class":108},[102,2532,2533],{"class":278},"\u003Ccmath>\n",[102,2535,2536,2538],{"class":104,"line":130},[102,2537,109],{"class":108},[102,2539,2540],{"class":112}," Point\n",[102,2542,2543],{"class":104,"line":136},[102,2544,120],{"class":119},[102,2546,2547],{"class":104,"line":142},[102,2548,139],{"class":108},[102,2550,2551],{"class":104,"line":148},[102,2552,2553],{"class":126},"    \u002F\u002F赋值\n",[102,2555,2556,2558,2561,2563,2566,2569,2572,2574,2577,2580,2582,2585,2587],{"class":104,"line":157},[102,2557,374],{"class":108},[102,2559,2560],{"class":112}," setPoint",[102,2562,380],{"class":119},[102,2564,2565],{"class":108},"double",[102,2567,2568],{"class":386}," x",[102,2570,2571],{"class":119},", ",[102,2573,2565],{"class":108},[102,2575,2576],{"class":386}," y",[102,2578,2579],{"class":119},") { m_x ",[102,2581,260],{"class":108},[102,2583,2584],{"class":119}," x; m_y ",[102,2586,260],{"class":108},[102,2588,2589],{"class":119}," y; }\n",[102,2591,2592],{"class":104,"line":163},[102,2593,2594],{"class":126},"    \u002F\u002F获取坐标\n",[102,2596,2597,2599,2602,2605,2608],{"class":104,"line":175},[102,2598,166],{"class":108},[102,2600,2601],{"class":112}," getX",[102,2603,2604],{"class":119},"() { ",[102,2606,2607],{"class":108},"return",[102,2609,2610],{"class":119}," m_x; }\n",[102,2612,2613,2615,2618,2620,2622],{"class":104,"line":181},[102,2614,166],{"class":108},[102,2616,2617],{"class":112}," getY",[102,2619,2604],{"class":119},[102,2621,2607],{"class":108},[102,2623,2624],{"class":119}," m_y; }\n",[102,2626,2627],{"class":104,"line":202},[102,2628,652],{"emptyLinePlaceholder":651},[102,2630,2631],{"class":104,"line":208},[102,2632,710],{"class":108},[102,2634,2635,2637],{"class":104,"line":214},[102,2636,166],{"class":108},[102,2638,2639],{"class":119}," m_x;\n",[102,2641,2642,2644],{"class":104,"line":225},[102,2643,166],{"class":108},[102,2645,2646],{"class":119}," m_y;\n",[102,2648,2649],{"class":104,"line":230},[102,2650,211],{"class":119},[102,2652,2653,2655],{"class":104,"line":236},[102,2654,109],{"class":108},[102,2656,113],{"class":112},[102,2658,2659],{"class":104,"line":242},[102,2660,120],{"class":119},[102,2662,2663],{"class":104,"line":248},[102,2664,139],{"class":108},[102,2666,2667],{"class":104,"line":254},[102,2668,2553],{"class":126},[102,2670,2671,2673,2676,2678,2680,2683,2686,2688],{"class":104,"line":269},[102,2672,374],{"class":108},[102,2674,2675],{"class":112}," setRadius",[102,2677,380],{"class":119},[102,2679,2565],{"class":108},[102,2681,2682],{"class":386}," r",[102,2684,2685],{"class":119},") { m_r ",[102,2687,260],{"class":108},[102,2689,2690],{"class":119}," r; }\n",[102,2692,2693,2695,2698,2700,2703,2706,2709,2711],{"class":104,"line":298},[102,2694,374],{"class":108},[102,2696,2697],{"class":112}," setCenter",[102,2699,380],{"class":119},[102,2701,2702],{"class":112},"Point",[102,2704,2705],{"class":386}," center",[102,2707,2708],{"class":119},") { m_center ",[102,2710,260],{"class":108},[102,2712,2713],{"class":119}," center; }\n",[102,2715,2716],{"class":104,"line":502},[102,2717,2718],{"class":126},"    \u002F\u002F获取属性\n",[102,2720,2721,2723,2726,2728,2730],{"class":104,"line":507},[102,2722,166],{"class":108},[102,2724,2725],{"class":112}," getRadius",[102,2727,2604],{"class":119},[102,2729,2607],{"class":108},[102,2731,2732],{"class":119}," m_r; }\n",[102,2734,2735,2738,2741,2743,2745],{"class":104,"line":512},[102,2736,2737],{"class":112},"    Point",[102,2739,2740],{"class":112}," getCenter",[102,2742,2604],{"class":119},[102,2744,2607],{"class":108},[102,2746,2747],{"class":119}," m_center; }\n",[102,2749,2750],{"class":104,"line":521},[102,2751,652],{"emptyLinePlaceholder":651},[102,2753,2754],{"class":104,"line":526},[102,2755,710],{"class":108},[102,2757,2758,2760],{"class":104,"line":532},[102,2759,166],{"class":108},[102,2761,154],{"class":119},[102,2763,2764],{"class":104,"line":538},[102,2765,2766],{"class":126},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[102,2768,2769],{"class":104,"line":555},[102,2770,2771],{"class":119},"    Point m_center;\n",[102,2773,2774],{"class":104,"line":570},[102,2775,211],{"class":119},[102,2777,2778,2781,2784,2786,2789,2792,2795,2797,2799,2801,2803],{"class":104,"line":581},[102,2779,2780],{"class":108},"void",[102,2782,2783],{"class":112}," isInCircle",[102,2785,380],{"class":119},[102,2787,2788],{"class":112},"Circle",[102,2790,2791],{"class":108}," &",[102,2793,2794],{"class":386},"c",[102,2796,1618],{"class":119},[102,2798,2702],{"class":112},[102,2800,2791],{"class":108},[102,2802,14],{"class":386},[102,2804,390],{"class":119},[102,2806,2807],{"class":104,"line":819},[102,2808,120],{"class":119},[102,2810,2811,2813,2816,2818,2820,2823,2826,2829,2831,2834,2836,2838],{"class":104,"line":828},[102,2812,166],{"class":108},[102,2814,2815],{"class":119}," dx ",[102,2817,260],{"class":108},[102,2819,1885],{"class":119},[102,2821,2822],{"class":112},"getCenter",[102,2824,2825],{"class":119},"().",[102,2827,2828],{"class":112},"getX",[102,2830,1417],{"class":119},[102,2832,2833],{"class":108},"-",[102,2835,1411],{"class":119},[102,2837,2828],{"class":112},[102,2839,578],{"class":119},[102,2841,2842,2844,2847,2849,2851,2853,2855,2858,2860,2862,2864,2866],{"class":104,"line":837},[102,2843,166],{"class":108},[102,2845,2846],{"class":119}," dy ",[102,2848,260],{"class":108},[102,2850,1885],{"class":119},[102,2852,2822],{"class":112},[102,2854,2825],{"class":119},[102,2856,2857],{"class":112},"getY",[102,2859,1417],{"class":119},[102,2861,2833],{"class":108},[102,2863,1411],{"class":119},[102,2865,2857],{"class":112},[102,2867,578],{"class":119},[102,2869,2870,2872,2875,2877,2880,2883,2885,2887,2889,2891,2893],{"class":104,"line":842},[102,2871,166],{"class":108},[102,2873,2874],{"class":119}," distance ",[102,2876,260],{"class":108},[102,2878,2879],{"class":112}," sqrt",[102,2881,2882],{"class":119},"(dx ",[102,2884,191],{"class":108},[102,2886,2815],{"class":119},[102,2888,1702],{"class":108},[102,2890,2846],{"class":119},[102,2892,191],{"class":108},[102,2894,2895],{"class":119}," dy);\n",[102,2897,2898,2900,2903,2905,2907,2910],{"class":104,"line":855},[102,2899,2343],{"class":108},[102,2901,2902],{"class":119}," (distance ",[102,2904,1208],{"class":108},[102,2906,1885],{"class":119},[102,2908,2909],{"class":112},"getRadius",[102,2911,2912],{"class":119},"())\n",[102,2914,2915],{"class":104,"line":860},[102,2916,178],{"class":119},[102,2918,2919,2922,2924,2927,2929],{"class":104,"line":871},[102,2920,2921],{"class":119},"        cout ",[102,2923,275],{"class":108},[102,2925,2926],{"class":278}," \"点在圆内\"",[102,2928,1237],{"class":108},[102,2930,1240],{"class":119},[102,2932,2933],{"class":104,"line":1359},[102,2934,205],{"class":119},[102,2936,2937],{"class":104,"line":1368},[102,2938,2381],{"class":108},[102,2940,2941],{"class":104,"line":1373},[102,2942,178],{"class":119},[102,2944,2945,2947,2949,2952,2954],{"class":104,"line":1378},[102,2946,2921],{"class":119},[102,2948,275],{"class":108},[102,2950,2951],{"class":278}," \"点在圆外\"",[102,2953,1237],{"class":108},[102,2955,1240],{"class":119},[102,2957,2958],{"class":104,"line":1384},[102,2959,205],{"class":119},[102,2961,2962],{"class":104,"line":1398},[102,2963,301],{"class":119},[102,2965,2966,2968,2970],{"class":104,"line":1424},[102,2967,217],{"class":108},[102,2969,220],{"class":112},[102,2971,172],{"class":119},[102,2973,2974],{"class":104,"line":1429},[102,2975,120],{"class":119},[102,2977,2978],{"class":104,"line":1435},[102,2979,529],{"class":126},[102,2981,2982],{"class":104,"line":1450},[102,2983,245],{"class":119},[102,2985,2986],{"class":104,"line":1473},[102,2987,2988],{"class":119},"    Point p1;\n",[102,2990,2991],{"class":104,"line":1478},[102,2992,2553],{"class":126},[102,2994,2995,2997,2999,3002],{"class":104,"line":1484},[102,2996,272],{"class":119},[102,2998,275],{"class":108},[102,3000,3001],{"class":278},"\"请输入圆的半径：\"",[102,3003,266],{"class":119},[102,3005,3006,3008],{"class":104,"line":1499},[102,3007,166],{"class":108},[102,3009,3010],{"class":119}," r;\n",[102,3012,3013,3015,3017],{"class":104,"line":1508},[102,3014,2131],{"class":119},[102,3016,2134],{"class":108},[102,3018,3019],{"class":119},"r;\n",[102,3021,3022,3024,3027],{"class":104,"line":1513},[102,3023,2152],{"class":119},[102,3025,3026],{"class":112},"setRadius",[102,3028,3029],{"class":119},"(r);\n",[102,3031,3032,3034,3036,3039],{"class":104,"line":1524},[102,3033,272],{"class":119},[102,3035,275],{"class":108},[102,3037,3038],{"class":278},"\"请输入圆心坐标：\"",[102,3040,266],{"class":119},[102,3042,3043,3045],{"class":104,"line":1529},[102,3044,166],{"class":108},[102,3046,3047],{"class":119}," x, y;\n",[102,3049,3050,3052,3054,3057,3059],{"class":104,"line":1538},[102,3051,2131],{"class":119},[102,3053,2134],{"class":108},[102,3055,3056],{"class":119},"x",[102,3058,2134],{"class":108},[102,3060,3061],{"class":119},"y;\n",[102,3063,3064,3067,3070],{"class":104,"line":2089},[102,3065,3066],{"class":119},"    p1.",[102,3068,3069],{"class":112},"setPoint",[102,3071,3072],{"class":119},"(x, y);\n",[102,3074,3075,3077,3080],{"class":104,"line":2094},[102,3076,2152],{"class":119},[102,3078,3079],{"class":112},"setCenter",[102,3081,3082],{"class":119},"(p1);\n",[102,3084,3085,3087,3089,3092],{"class":104,"line":2100},[102,3086,272],{"class":119},[102,3088,275],{"class":108},[102,3090,3091],{"class":278},"\"请输入测试点坐标：\"",[102,3093,266],{"class":119},[102,3095,3096,3098],{"class":104,"line":2106},[102,3097,166],{"class":108},[102,3099,3100],{"class":119}," x1, y1;\n",[102,3102,3103,3105,3107,3110,3112],{"class":104,"line":2120},[102,3104,2131],{"class":119},[102,3106,2134],{"class":108},[102,3108,3109],{"class":119},"x1",[102,3111,2134],{"class":108},[102,3113,3114],{"class":119},"y1;\n",[102,3116,3117],{"class":104,"line":2128},[102,3118,3119],{"class":119},"    Point p2;\n",[102,3121,3122,3125,3127],{"class":104,"line":2149},[102,3123,3124],{"class":119},"    p2.",[102,3126,3069],{"class":112},[102,3128,3129],{"class":119},"(x1, y1);\n",[102,3131,3132,3135],{"class":104,"line":2161},[102,3133,3134],{"class":112},"    isInCircle",[102,3136,3137],{"class":119},"(c1, p2);\n",[102,3139,3140],{"class":104,"line":2167},[102,3141,301],{"class":119},[14,3143,3144],{},"在类中可以让另一个类作为本来的成员",[14,3146,3147],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,3149,3150],{},"创建point.h",[93,3152,3154],{"className":95,"code":3153,"language":97,"meta":98,"style":98},"#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",[83,3155,3156,3167,3173,3183,3189,3193,3198,3202,3206,3226,3230,3238,3246,3250,3254,3260,3266],{"__ignoreMap":98},[102,3157,3158,3161,3164],{"class":104,"line":105},[102,3159,3160],{"class":108},"#pragma",[102,3162,3163],{"class":112}," once",[102,3165,3166],{"class":126}," \u002F\u002F防止头文件重复包含\n",[102,3168,3169,3171],{"class":104,"line":116},[102,3170,314],{"class":108},[102,3172,317],{"class":278},[102,3174,3175,3177,3179,3181],{"class":104,"line":123},[102,3176,322],{"class":108},[102,3178,325],{"class":108},[102,3180,328],{"class":112},[102,3182,266],{"class":119},[102,3184,3185,3187],{"class":104,"line":130},[102,3186,109],{"class":108},[102,3188,2540],{"class":112},[102,3190,3191],{"class":104,"line":136},[102,3192,120],{"class":119},[102,3194,3195],{"class":104,"line":142},[102,3196,3197],{"class":126},"\u002F\u002F做好声明与变量定义就可以\n",[102,3199,3200],{"class":104,"line":148},[102,3201,139],{"class":108},[102,3203,3204],{"class":104,"line":157},[102,3205,2553],{"class":126},[102,3207,3208,3210,3212,3214,3216,3218,3220,3222,3224],{"class":104,"line":163},[102,3209,374],{"class":108},[102,3211,2560],{"class":112},[102,3213,380],{"class":119},[102,3215,2565],{"class":108},[102,3217,2568],{"class":386},[102,3219,2571],{"class":119},[102,3221,2565],{"class":108},[102,3223,2576],{"class":386},[102,3225,552],{"class":119},[102,3227,3228],{"class":104,"line":175},[102,3229,2594],{"class":126},[102,3231,3232,3234,3236],{"class":104,"line":181},[102,3233,166],{"class":108},[102,3235,2601],{"class":112},[102,3237,578],{"class":119},[102,3239,3240,3242,3244],{"class":104,"line":202},[102,3241,166],{"class":108},[102,3243,2617],{"class":112},[102,3245,578],{"class":119},[102,3247,3248],{"class":104,"line":208},[102,3249,652],{"emptyLinePlaceholder":651},[102,3251,3252],{"class":104,"line":214},[102,3253,710],{"class":108},[102,3255,3256,3258],{"class":104,"line":225},[102,3257,166],{"class":108},[102,3259,2639],{"class":119},[102,3261,3262,3264],{"class":104,"line":230},[102,3263,166],{"class":108},[102,3265,2646],{"class":119},[102,3267,3268],{"class":104,"line":236},[102,3269,211],{"class":119},[14,3271,3272],{},"创建point.cpp",[93,3274,3276],{"className":95,"code":3275,"language":97,"meta":98,"style":98},"#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",[83,3277,3278,3285,3290,3324,3328,3344],{"__ignoreMap":98},[102,3279,3280,3282],{"class":104,"line":105},[102,3281,314],{"class":108},[102,3283,3284],{"class":278},"\u003Cpoint.h>\n",[102,3286,3287],{"class":104,"line":116},[102,3288,3289],{"class":126},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[102,3291,3292,3294,3297,3300,3302,3304,3306,3308,3310,3312,3314,3316,3318,3320,3322],{"class":104,"line":123},[102,3293,374],{"class":108},[102,3295,3296],{"class":112}," Point",[102,3298,3299],{"class":119},"::",[102,3301,3069],{"class":112},[102,3303,380],{"class":119},[102,3305,2565],{"class":108},[102,3307,2568],{"class":386},[102,3309,2571],{"class":119},[102,3311,2565],{"class":108},[102,3313,2576],{"class":386},[102,3315,2579],{"class":119},[102,3317,260],{"class":108},[102,3319,2584],{"class":119},[102,3321,260],{"class":108},[102,3323,2589],{"class":119},[102,3325,3326],{"class":104,"line":130},[102,3327,2594],{"class":126},[102,3329,3330,3332,3334,3336,3338,3340,3342],{"class":104,"line":136},[102,3331,166],{"class":108},[102,3333,3296],{"class":112},[102,3335,3299],{"class":119},[102,3337,2828],{"class":112},[102,3339,2604],{"class":119},[102,3341,2607],{"class":108},[102,3343,2610],{"class":119},[102,3345,3346,3348,3350,3352,3354,3356,3358],{"class":104,"line":142},[102,3347,166],{"class":108},[102,3349,3296],{"class":112},[102,3351,3299],{"class":119},[102,3353,2857],{"class":112},[102,3355,2604],{"class":119},[102,3357,2607],{"class":108},[102,3359,2624],{"class":119},[14,3361,3362],{},"创建circle.h",[93,3364,3366],{"className":95,"code":3365,"language":97,"meta":98,"style":98},"#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",[83,3367,3368,3375,3381,3391,3397,3403,3407,3411,3415,3429,3443,3447,3455,3463,3467,3471,3477,3481,3485],{"__ignoreMap":98},[102,3369,3370,3372],{"class":104,"line":105},[102,3371,3160],{"class":108},[102,3373,3374],{"class":112}," once\n",[102,3376,3377,3379],{"class":104,"line":116},[102,3378,314],{"class":108},[102,3380,317],{"class":278},[102,3382,3383,3385,3387,3389],{"class":104,"line":123},[102,3384,322],{"class":108},[102,3386,325],{"class":108},[102,3388,328],{"class":112},[102,3390,266],{"class":119},[102,3392,3393,3395],{"class":104,"line":130},[102,3394,314],{"class":108},[102,3396,3284],{"class":278},[102,3398,3399,3401],{"class":104,"line":136},[102,3400,109],{"class":108},[102,3402,113],{"class":112},[102,3404,3405],{"class":104,"line":142},[102,3406,120],{"class":119},[102,3408,3409],{"class":104,"line":148},[102,3410,139],{"class":108},[102,3412,3413],{"class":104,"line":157},[102,3414,2553],{"class":126},[102,3416,3417,3419,3421,3423,3425,3427],{"class":104,"line":163},[102,3418,374],{"class":108},[102,3420,2675],{"class":112},[102,3422,380],{"class":119},[102,3424,2565],{"class":108},[102,3426,2682],{"class":386},[102,3428,552],{"class":119},[102,3430,3431,3433,3435,3437,3439,3441],{"class":104,"line":175},[102,3432,374],{"class":108},[102,3434,2697],{"class":112},[102,3436,380],{"class":119},[102,3438,2702],{"class":112},[102,3440,2705],{"class":386},[102,3442,552],{"class":119},[102,3444,3445],{"class":104,"line":181},[102,3446,2718],{"class":126},[102,3448,3449,3451,3453],{"class":104,"line":202},[102,3450,166],{"class":108},[102,3452,2725],{"class":112},[102,3454,578],{"class":119},[102,3456,3457,3459,3461],{"class":104,"line":208},[102,3458,2737],{"class":112},[102,3460,2740],{"class":112},[102,3462,578],{"class":119},[102,3464,3465],{"class":104,"line":214},[102,3466,652],{"emptyLinePlaceholder":651},[102,3468,3469],{"class":104,"line":225},[102,3470,710],{"class":108},[102,3472,3473,3475],{"class":104,"line":230},[102,3474,166],{"class":108},[102,3476,154],{"class":119},[102,3478,3479],{"class":104,"line":236},[102,3480,2766],{"class":126},[102,3482,3483],{"class":104,"line":242},[102,3484,2771],{"class":119},[102,3486,3487],{"class":104,"line":248},[102,3488,211],{"class":119},[14,3490,3491],{},"创建circle.cpp",[93,3493,3495],{"className":95,"code":3494,"language":97,"meta":98,"style":98},"#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",[83,3496,3497,3504,3527,3549,3554,3570],{"__ignoreMap":98},[102,3498,3499,3501],{"class":104,"line":105},[102,3500,314],{"class":108},[102,3502,3503],{"class":278},"\u003Ccircle.h>\n",[102,3505,3506,3508,3511,3513,3515,3517,3519,3521,3523,3525],{"class":104,"line":116},[102,3507,2780],{"class":108},[102,3509,3510],{"class":112}," Circle",[102,3512,3299],{"class":119},[102,3514,3026],{"class":112},[102,3516,380],{"class":119},[102,3518,2565],{"class":108},[102,3520,2682],{"class":386},[102,3522,2685],{"class":119},[102,3524,260],{"class":108},[102,3526,2690],{"class":119},[102,3528,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547],{"class":104,"line":123},[102,3530,2780],{"class":108},[102,3532,3510],{"class":112},[102,3534,3299],{"class":119},[102,3536,3079],{"class":112},[102,3538,380],{"class":119},[102,3540,2702],{"class":112},[102,3542,2705],{"class":386},[102,3544,2708],{"class":119},[102,3546,260],{"class":108},[102,3548,2713],{"class":119},[102,3550,3551],{"class":104,"line":130},[102,3552,3553],{"class":126},"\u002F\u002F获取属性\n",[102,3555,3556,3558,3560,3562,3564,3566,3568],{"class":104,"line":136},[102,3557,2565],{"class":108},[102,3559,3510],{"class":112},[102,3561,3299],{"class":119},[102,3563,2909],{"class":112},[102,3565,2604],{"class":119},[102,3567,2607],{"class":108},[102,3569,2732],{"class":119},[102,3571,3572,3574,3576,3578,3580,3582,3584],{"class":104,"line":142},[102,3573,2702],{"class":112},[102,3575,3510],{"class":112},[102,3577,3299],{"class":119},[102,3579,2822],{"class":112},[102,3581,2604],{"class":119},[102,3583,2607],{"class":108},[102,3585,2747],{"class":119},[14,3587,3588],{},"使用封装的类",[93,3590,3592],{"className":95,"code":3591,"language":97,"meta":98,"style":98},"#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",[83,3593,3594,3600,3610,3616,3622,3646,3650,3676,3702,3726,3740,3744,3756,3760,3764,3768,3780,3784,3788,3796,3800,3804,3808,3812,3816,3826,3832,3840,3848,3858,3864,3876,3884,3892,3902,3908,3920,3924,3932,3938],{"__ignoreMap":98},[102,3595,3596,3598],{"class":104,"line":105},[102,3597,314],{"class":108},[102,3599,317],{"class":278},[102,3601,3602,3604,3606,3608],{"class":104,"line":116},[102,3603,322],{"class":108},[102,3605,325],{"class":108},[102,3607,328],{"class":112},[102,3609,266],{"class":119},[102,3611,3612,3614],{"class":104,"line":123},[102,3613,314],{"class":108},[102,3615,3503],{"class":278},[102,3617,3618,3620],{"class":104,"line":130},[102,3619,314],{"class":108},[102,3621,3284],{"class":278},[102,3623,3624,3626,3628,3630,3632,3634,3636,3638,3640,3642,3644],{"class":104,"line":136},[102,3625,2780],{"class":108},[102,3627,2783],{"class":112},[102,3629,380],{"class":119},[102,3631,2788],{"class":112},[102,3633,2791],{"class":108},[102,3635,2794],{"class":386},[102,3637,1618],{"class":119},[102,3639,2702],{"class":112},[102,3641,2791],{"class":108},[102,3643,14],{"class":386},[102,3645,390],{"class":119},[102,3647,3648],{"class":104,"line":142},[102,3649,120],{"class":119},[102,3651,3652,3654,3656,3658,3660,3662,3664,3666,3668,3670,3672,3674],{"class":104,"line":148},[102,3653,166],{"class":108},[102,3655,2815],{"class":119},[102,3657,260],{"class":108},[102,3659,1885],{"class":119},[102,3661,2822],{"class":112},[102,3663,2825],{"class":119},[102,3665,2828],{"class":112},[102,3667,1417],{"class":119},[102,3669,2833],{"class":108},[102,3671,1411],{"class":119},[102,3673,2828],{"class":112},[102,3675,578],{"class":119},[102,3677,3678,3680,3682,3684,3686,3688,3690,3692,3694,3696,3698,3700],{"class":104,"line":157},[102,3679,166],{"class":108},[102,3681,2846],{"class":119},[102,3683,260],{"class":108},[102,3685,1885],{"class":119},[102,3687,2822],{"class":112},[102,3689,2825],{"class":119},[102,3691,2857],{"class":112},[102,3693,1417],{"class":119},[102,3695,2833],{"class":108},[102,3697,1411],{"class":119},[102,3699,2857],{"class":112},[102,3701,578],{"class":119},[102,3703,3704,3706,3708,3710,3712,3714,3716,3718,3720,3722,3724],{"class":104,"line":163},[102,3705,166],{"class":108},[102,3707,2874],{"class":119},[102,3709,260],{"class":108},[102,3711,2879],{"class":112},[102,3713,2882],{"class":119},[102,3715,191],{"class":108},[102,3717,2815],{"class":119},[102,3719,1702],{"class":108},[102,3721,2846],{"class":119},[102,3723,191],{"class":108},[102,3725,2895],{"class":119},[102,3727,3728,3730,3732,3734,3736,3738],{"class":104,"line":175},[102,3729,2343],{"class":108},[102,3731,2902],{"class":119},[102,3733,1208],{"class":108},[102,3735,1885],{"class":119},[102,3737,2909],{"class":112},[102,3739,2912],{"class":119},[102,3741,3742],{"class":104,"line":181},[102,3743,178],{"class":119},[102,3745,3746,3748,3750,3752,3754],{"class":104,"line":202},[102,3747,2921],{"class":119},[102,3749,275],{"class":108},[102,3751,2926],{"class":278},[102,3753,1237],{"class":108},[102,3755,1240],{"class":119},[102,3757,3758],{"class":104,"line":208},[102,3759,205],{"class":119},[102,3761,3762],{"class":104,"line":214},[102,3763,2381],{"class":108},[102,3765,3766],{"class":104,"line":225},[102,3767,178],{"class":119},[102,3769,3770,3772,3774,3776,3778],{"class":104,"line":230},[102,3771,2921],{"class":119},[102,3773,275],{"class":108},[102,3775,2951],{"class":278},[102,3777,1237],{"class":108},[102,3779,1240],{"class":119},[102,3781,3782],{"class":104,"line":236},[102,3783,205],{"class":119},[102,3785,3786],{"class":104,"line":242},[102,3787,301],{"class":119},[102,3789,3790,3792,3794],{"class":104,"line":248},[102,3791,217],{"class":108},[102,3793,220],{"class":112},[102,3795,172],{"class":119},[102,3797,3798],{"class":104,"line":254},[102,3799,120],{"class":119},[102,3801,3802],{"class":104,"line":269},[102,3803,529],{"class":126},[102,3805,3806],{"class":104,"line":298},[102,3807,245],{"class":119},[102,3809,3810],{"class":104,"line":502},[102,3811,2988],{"class":119},[102,3813,3814],{"class":104,"line":507},[102,3815,2553],{"class":126},[102,3817,3818,3820,3822,3824],{"class":104,"line":512},[102,3819,272],{"class":119},[102,3821,275],{"class":108},[102,3823,3001],{"class":278},[102,3825,266],{"class":119},[102,3827,3828,3830],{"class":104,"line":521},[102,3829,166],{"class":108},[102,3831,3010],{"class":119},[102,3833,3834,3836,3838],{"class":104,"line":526},[102,3835,2131],{"class":119},[102,3837,2134],{"class":108},[102,3839,3019],{"class":119},[102,3841,3842,3844,3846],{"class":104,"line":532},[102,3843,2152],{"class":119},[102,3845,3026],{"class":112},[102,3847,3029],{"class":119},[102,3849,3850,3852,3854,3856],{"class":104,"line":538},[102,3851,272],{"class":119},[102,3853,275],{"class":108},[102,3855,3038],{"class":278},[102,3857,266],{"class":119},[102,3859,3860,3862],{"class":104,"line":555},[102,3861,166],{"class":108},[102,3863,3047],{"class":119},[102,3865,3866,3868,3870,3872,3874],{"class":104,"line":570},[102,3867,2131],{"class":119},[102,3869,2134],{"class":108},[102,3871,3056],{"class":119},[102,3873,2134],{"class":108},[102,3875,3061],{"class":119},[102,3877,3878,3880,3882],{"class":104,"line":581},[102,3879,3066],{"class":119},[102,3881,3069],{"class":112},[102,3883,3072],{"class":119},[102,3885,3886,3888,3890],{"class":104,"line":819},[102,3887,2152],{"class":119},[102,3889,3079],{"class":112},[102,3891,3082],{"class":119},[102,3893,3894,3896,3898,3900],{"class":104,"line":828},[102,3895,272],{"class":119},[102,3897,275],{"class":108},[102,3899,3091],{"class":278},[102,3901,266],{"class":119},[102,3903,3904,3906],{"class":104,"line":837},[102,3905,166],{"class":108},[102,3907,3100],{"class":119},[102,3909,3910,3912,3914,3916,3918],{"class":104,"line":842},[102,3911,2131],{"class":119},[102,3913,2134],{"class":108},[102,3915,3109],{"class":119},[102,3917,2134],{"class":108},[102,3919,3114],{"class":119},[102,3921,3922],{"class":104,"line":855},[102,3923,3119],{"class":119},[102,3925,3926,3928,3930],{"class":104,"line":860},[102,3927,3124],{"class":119},[102,3929,3069],{"class":112},[102,3931,3129],{"class":119},[102,3933,3934,3936],{"class":104,"line":871},[102,3935,3134],{"class":112},[102,3937,3137],{"class":119},[102,3939,3940],{"class":104,"line":1359},[102,3941,301],{"class":119},[43,3943,3945],{"id":3944},"_82对象的初始化清理","8.2对象的初始化清理",[59,3947,3948,3951],{},[62,3949,3950],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[62,3952,3953],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[48,3955,3957],{"id":3956},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,3959,3960,3961,3964],{},"对象的",[18,3962,3963],{},"初始化和清理","也是两个非常重要的安全问题",[14,3966,3967],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,3969,3970],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,3972,3973,3974,3977,3978,3981],{},"c++利用了",[18,3975,3976],{},"构造函数","和",[18,3979,3980],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,3983,3984,3985],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[18,3986,3987],{},"我们不提供构造和析构，编译器会提供",[14,3989,3990],{},[18,3991,3992],{},"编译器提供的构造函数和析构函数是空实现。",[59,3994,3995,3998],{},[62,3996,3997],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[62,3999,4000,4001,4004],{},"析构函数：主要作用在于对象",[18,4002,4003],{},"销毁前","系统自动调用，执行一些清理工作。",[14,4006,4007,4010],{},[18,4008,4009],{},"构造函数语法：",[83,4011,4012],{},"类名(){}",[87,4014,4015,4018,4021,4024,4027],{},[62,4016,4017],{},"构造函数，没有返回值也不写void",[62,4019,4020],{},"函数名称与类名相同",[62,4022,4023],{},"构造函数可以有参数，因此可以发生重载",[62,4025,4026],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[62,4028,4029,4030,4033],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[83,4031,4032],{},"Person(){}",")",[14,4035,4036,81,4039],{},[18,4037,4038],{},"析构函数语法：",[83,4040,4041],{},"~类名(){}",[87,4043,4044,4047,4050,4056],{},[62,4045,4046],{},"析构函数，没有返回值也不写void",[62,4048,4049],{},"函数名称与类名相同,在名称前加上符号  ~",[62,4051,4052,4053],{},"析构函数不可以有参数，因此",[18,4054,4055],{},"不可以发生重载",[62,4057,4058],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[93,4060,4062],{"className":95,"code":4061,"language":97,"meta":98,"style":98},"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",[83,4063,4064,4070,4074,4078,4083,4090,4094,4107,4111,4116,4123,4127,4140,4144,4148,4152,4156,4165,4169,4177,4181,4185,4193,4197,4202,4206,4213,4217,4231,4235,4243],{"__ignoreMap":98},[102,4065,4066,4068],{"class":104,"line":105},[102,4067,109],{"class":108},[102,4069,659],{"class":112},[102,4071,4072],{"class":104,"line":116},[102,4073,120],{"class":119},[102,4075,4076],{"class":104,"line":123},[102,4077,139],{"class":108},[102,4079,4080],{"class":104,"line":130},[102,4081,4082],{"class":126},"    \u002F\u002F构造函数\n",[102,4084,4085,4088],{"class":104,"line":136},[102,4086,4087],{"class":112},"    Person",[102,4089,172],{"class":119},[102,4091,4092],{"class":104,"line":142},[102,4093,178],{"class":119},[102,4095,4096,4098,4100,4103,4105],{"class":104,"line":148},[102,4097,2921],{"class":119},[102,4099,275],{"class":108},[102,4101,4102],{"class":278}," \"Person的构造函数调用\"",[102,4104,1237],{"class":108},[102,4106,1240],{"class":119},[102,4108,4109],{"class":104,"line":157},[102,4110,205],{"class":119},[102,4112,4113],{"class":104,"line":163},[102,4114,4115],{"class":126},"    \u002F\u002F析构函数\n",[102,4117,4118,4121],{"class":104,"line":175},[102,4119,4120],{"class":112},"    ~Person",[102,4122,172],{"class":119},[102,4124,4125],{"class":104,"line":181},[102,4126,178],{"class":119},[102,4128,4129,4131,4133,4136,4138],{"class":104,"line":202},[102,4130,2921],{"class":119},[102,4132,275],{"class":108},[102,4134,4135],{"class":278}," \"Person的析构函数调用\"",[102,4137,1237],{"class":108},[102,4139,1240],{"class":119},[102,4141,4142],{"class":104,"line":208},[102,4143,205],{"class":119},[102,4145,4146],{"class":104,"line":214},[102,4147,652],{"emptyLinePlaceholder":651},[102,4149,4150],{"class":104,"line":225},[102,4151,211],{"class":119},[102,4153,4154],{"class":104,"line":230},[102,4155,652],{"emptyLinePlaceholder":651},[102,4157,4158,4160,4163],{"class":104,"line":236},[102,4159,2780],{"class":108},[102,4161,4162],{"class":112}," test01",[102,4164,172],{"class":119},[102,4166,4167],{"class":104,"line":242},[102,4168,120],{"class":119},[102,4170,4171,4174],{"class":104,"line":248},[102,4172,4173],{"class":119},"    Person p;",[102,4175,4176],{"class":126},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[102,4178,4179],{"class":104,"line":254},[102,4180,301],{"class":119},[102,4182,4183],{"class":104,"line":269},[102,4184,652],{"emptyLinePlaceholder":651},[102,4186,4187,4189,4191],{"class":104,"line":298},[102,4188,217],{"class":108},[102,4190,220],{"class":112},[102,4192,795],{"class":119},[102,4194,4195],{"class":104,"line":502},[102,4196,1326],{"class":119},[102,4198,4199],{"class":104,"line":507},[102,4200,4201],{"class":126},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[102,4203,4204],{"class":104,"line":512},[102,4205,652],{"emptyLinePlaceholder":651},[102,4207,4208,4210],{"class":104,"line":521},[102,4209,4173],{"class":119},[102,4211,4212],{"class":126},"\u002F\u002F只有构造函数\n",[102,4214,4215],{"class":104,"line":526},[102,4216,652],{"emptyLinePlaceholder":651},[102,4218,4219,4221,4223,4225,4228],{"class":104,"line":532},[102,4220,845],{"class":112},[102,4222,380],{"class":119},[102,4224,850],{"class":278},[102,4226,4227],{"class":119},");",[102,4229,4230],{"class":126},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[102,4232,4233],{"class":104,"line":538},[102,4234,652],{"emptyLinePlaceholder":651},[102,4236,4237,4239,4241],{"class":104,"line":555},[102,4238,863],{"class":108},[102,4240,866],{"class":187},[102,4242,266],{"class":119},[102,4244,4245],{"class":104,"line":570},[102,4246,301],{"class":119},[14,4248,4249],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[48,4251,4253],{"id":4252},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,4255,4256],{},"两种分类方式：",[14,4258,4259],{},"​\t按参数分为： 有参构造和无参构造",[14,4261,4262],{},"​\t按类型分为： 普通构造和拷贝构造",[14,4264,4265],{},"三种调用方式：",[14,4267,4268],{},"​\t括号法",[14,4270,4271],{},"​\t显示法",[14,4273,4274],{},"​\t隐式转换法",[93,4276,4278],{"className":95,"code":4277,"language":97,"meta":98,"style":98},"#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",[83,4279,4280,4286,4296,4301,4306,4311,4316,4320,4329,4333,4337,4341,4347,4351,4364,4368,4381,4385,4395,4408,4412,4416,4422,4426,4439,4443,4448,4465,4469,4474,4483,4496,4500,4506,4510,4515,4523,4527,4532,4536,4545,4549,4554,4559,4564,4569,4574,4578,4583,4588,4593,4598,4602,4607,4612,4628,4640,4645,4649,4654,4659,4664,4668,4673,4687,4700,4704,4712,4716,4723,4730,4738],{"__ignoreMap":98},[102,4281,4282,4284],{"class":104,"line":105},[102,4283,314],{"class":108},[102,4285,317],{"class":278},[102,4287,4288,4290,4292,4294],{"class":104,"line":116},[102,4289,322],{"class":108},[102,4291,325],{"class":108},[102,4293,328],{"class":112},[102,4295,266],{"class":119},[102,4297,4298],{"class":104,"line":123},[102,4299,4300],{"class":126},"\u002F\u002F1.构造函数的分类及调用\n",[102,4302,4303],{"class":104,"line":130},[102,4304,4305],{"class":126},"\u002F\u002F分类\n",[102,4307,4308],{"class":104,"line":136},[102,4309,4310],{"class":126},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[102,4312,4313],{"class":104,"line":142},[102,4314,4315],{"class":126},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[102,4317,4318],{"class":104,"line":148},[102,4319,652],{"emptyLinePlaceholder":651},[102,4321,4322,4324,4326],{"class":104,"line":157},[102,4323,109],{"class":108},[102,4325,1074],{"class":112},[102,4327,4328],{"class":119}," \n",[102,4330,4331],{"class":104,"line":163},[102,4332,120],{"class":119},[102,4334,4335],{"class":104,"line":175},[102,4336,139],{"class":108},[102,4338,4339],{"class":104,"line":181},[102,4340,4082],{"class":126},[102,4342,4343,4345],{"class":104,"line":202},[102,4344,4087],{"class":112},[102,4346,172],{"class":119},[102,4348,4349],{"class":104,"line":208},[102,4350,178],{"class":119},[102,4352,4353,4355,4357,4360,4362],{"class":104,"line":214},[102,4354,470],{"class":119},[102,4356,275],{"class":108},[102,4358,4359],{"class":278},"\"Person构造函数无参构造\"",[102,4361,275],{"class":108},[102,4363,295],{"class":119},[102,4365,4366],{"class":104,"line":225},[102,4367,205],{"class":119},[102,4369,4370,4372,4374,4376,4379],{"class":104,"line":230},[102,4371,4087],{"class":112},[102,4373,380],{"class":119},[102,4375,217],{"class":108},[102,4377,4378],{"class":386}," a",[102,4380,390],{"class":119},[102,4382,4383],{"class":104,"line":236},[102,4384,178],{"class":119},[102,4386,4387,4390,4392],{"class":104,"line":242},[102,4388,4389],{"class":119},"        age",[102,4391,260],{"class":108},[102,4393,4394],{"class":119},"a;\n",[102,4396,4397,4399,4401,4404,4406],{"class":104,"line":248},[102,4398,470],{"class":119},[102,4400,275],{"class":108},[102,4402,4403],{"class":278},"\"Person构造函数有参构造\"",[102,4405,275],{"class":108},[102,4407,295],{"class":119},[102,4409,4410],{"class":104,"line":254},[102,4411,205],{"class":119},[102,4413,4414],{"class":104,"line":269},[102,4415,4115],{"class":126},[102,4417,4418,4420],{"class":104,"line":298},[102,4419,4120],{"class":112},[102,4421,172],{"class":119},[102,4423,4424],{"class":104,"line":502},[102,4425,178],{"class":119},[102,4427,4428,4430,4432,4435,4437],{"class":104,"line":507},[102,4429,470],{"class":119},[102,4431,275],{"class":108},[102,4433,4434],{"class":278},"\"Person析构函数被调用\"",[102,4436,275],{"class":108},[102,4438,295],{"class":119},[102,4440,4441],{"class":104,"line":512},[102,4442,205],{"class":119},[102,4444,4445],{"class":104,"line":521},[102,4446,4447],{"class":126},"    \u002F\u002F拷贝构造函数\n",[102,4449,4450,4452,4454,4457,4459,4461,4463],{"class":104,"line":526},[102,4451,4087],{"class":112},[102,4453,380],{"class":119},[102,4455,4456],{"class":108},"const",[102,4458,1074],{"class":112},[102,4460,2791],{"class":108},[102,4462,14],{"class":386},[102,4464,390],{"class":119},[102,4466,4467],{"class":104,"line":532},[102,4468,178],{"class":119},[102,4470,4471],{"class":104,"line":538},[102,4472,4473],{"class":126},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[102,4475,4476,4478,4480],{"class":104,"line":555},[102,4477,4389],{"class":119},[102,4479,260],{"class":108},[102,4481,4482],{"class":119},"p.age;\n",[102,4484,4485,4487,4489,4492,4494],{"class":104,"line":570},[102,4486,470],{"class":119},[102,4488,275],{"class":108},[102,4490,4491],{"class":278},"\"Person拷贝构造函数被调用\"",[102,4493,275],{"class":108},[102,4495,295],{"class":119},[102,4497,4498],{"class":104,"line":581},[102,4499,205],{"class":119},[102,4501,4502,4504],{"class":104,"line":819},[102,4503,151],{"class":108},[102,4505,1262],{"class":119},[102,4507,4508],{"class":104,"line":828},[102,4509,211],{"class":119},[102,4511,4512],{"class":104,"line":837},[102,4513,4514],{"class":126},"\u002F\u002F调用\n",[102,4516,4517,4519,4521],{"class":104,"line":842},[102,4518,2780],{"class":108},[102,4520,4162],{"class":112},[102,4522,172],{"class":119},[102,4524,4525],{"class":104,"line":855},[102,4526,120],{"class":119},[102,4528,4529],{"class":104,"line":860},[102,4530,4531],{"class":126},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[102,4533,4534],{"class":104,"line":871},[102,4535,301],{"class":119},[102,4537,4538,4540,4543],{"class":104,"line":1359},[102,4539,2780],{"class":108},[102,4541,4542],{"class":112}," test02",[102,4544,172],{"class":119},[102,4546,4547],{"class":104,"line":1368},[102,4548,120],{"class":119},[102,4550,4551],{"class":104,"line":1373},[102,4552,4553],{"class":126},"    \u002F\u002F1.括号法\n",[102,4555,4556],{"class":104,"line":1378},[102,4557,4558],{"class":126},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[102,4560,4561],{"class":104,"line":1384},[102,4562,4563],{"class":126},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[102,4565,4566],{"class":104,"line":1398},[102,4567,4568],{"class":126},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[102,4570,4571],{"class":104,"line":1424},[102,4572,4573],{"class":126},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[102,4575,4576],{"class":104,"line":1429},[102,4577,652],{"emptyLinePlaceholder":651},[102,4579,4580],{"class":104,"line":1435},[102,4581,4582],{"class":126},"    \u002F\u002F注意事项\n",[102,4584,4585],{"class":104,"line":1450},[102,4586,4587],{"class":126},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[102,4589,4590],{"class":104,"line":1473},[102,4591,4592],{"class":126},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[102,4594,4595],{"class":104,"line":1478},[102,4596,4597],{"class":126},"    \u002F\u002F Person p4();\n",[102,4599,4600],{"class":104,"line":1484},[102,4601,652],{"emptyLinePlaceholder":651},[102,4603,4604],{"class":104,"line":1499},[102,4605,4606],{"class":126},"    \u002F\u002F2.显示法\n",[102,4608,4609],{"class":104,"line":1508},[102,4610,4611],{"class":119},"    Person p1;\n",[102,4613,4614,4617,4619,4622,4624,4626],{"class":104,"line":1513},[102,4615,4616],{"class":119},"    Person p2",[102,4618,260],{"class":108},[102,4620,4621],{"class":112},"Person",[102,4623,380],{"class":119},[102,4625,263],{"class":187},[102,4627,552],{"class":119},[102,4629,4630,4633,4635,4637],{"class":104,"line":1524},[102,4631,4632],{"class":119},"    Person p3",[102,4634,260],{"class":108},[102,4636,4621],{"class":112},[102,4638,4639],{"class":119},"(p2);\n",[102,4641,4642],{"class":104,"line":1529},[102,4643,4644],{"class":126},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[102,4646,4647],{"class":104,"line":1538},[102,4648,652],{"emptyLinePlaceholder":651},[102,4650,4651],{"class":104,"line":2089},[102,4652,4653],{"class":126},"    \u002F\u002F 注意事项2\n",[102,4655,4656],{"class":104,"line":2094},[102,4657,4658],{"class":126},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[102,4660,4661],{"class":104,"line":2100},[102,4662,4663],{"class":126},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[102,4665,4666],{"class":104,"line":2106},[102,4667,652],{"emptyLinePlaceholder":651},[102,4669,4670],{"class":104,"line":2120},[102,4671,4672],{"class":126},"    \u002F\u002F3.隐士转换法\n",[102,4674,4675,4678,4680,4682,4684],{"class":104,"line":2128},[102,4676,4677],{"class":119},"    Person p4",[102,4679,260],{"class":108},[102,4681,263],{"class":187},[102,4683,992],{"class":119},[102,4685,4686],{"class":126},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[102,4688,4689,4692,4694,4697],{"class":104,"line":2149},[102,4690,4691],{"class":119},"    Person p5",[102,4693,260],{"class":108},[102,4695,4696],{"class":119},"p4;",[102,4698,4699],{"class":126}," \u002F\u002F 这里会调用拷贝构造函数\n",[102,4701,4702],{"class":104,"line":2161},[102,4703,301],{"class":119},[102,4705,4706,4708,4710],{"class":104,"line":2167},[102,4707,217],{"class":108},[102,4709,220],{"class":112},[102,4711,172],{"class":119},[102,4713,4714],{"class":104,"line":2190},[102,4715,120],{"class":119},[102,4717,4718,4721],{"class":104,"line":2196},[102,4719,4720],{"class":112},"    test01",[102,4722,578],{"class":119},[102,4724,4725,4728],{"class":104,"line":2219},[102,4726,4727],{"class":112},"    test02",[102,4729,578],{"class":119},[102,4731,4732,4734,4736],{"class":104,"line":2233},[102,4733,863],{"class":108},[102,4735,866],{"class":187},[102,4737,266],{"class":119},[102,4739,4740],{"class":104,"line":2253},[102,4741,301],{"class":119},[14,4743,4744,4747],{},[18,4745,4746],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[48,4749,4751],{"id":4750},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,4753,4754],{},"C++中拷贝构造函数调用时机通常有三种情况",[59,4756,4757,4760,4763],{},[62,4758,4759],{},"使用一个已经创建完毕的对象来初始化一个新对象",[62,4761,4762],{},"值传递的方式给函数参数传值",[62,4764,4765],{},"以值方式返回局部对象",[93,4767,4769],{"className":95,"code":4768,"language":97,"meta":98,"style":98},"#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",[83,4770,4771,4777,4787,4791,4796,4800,4805,4810,4815,4821,4825,4829,4835,4839,4852,4856,4861,4873,4877,4885,4898,4902,4906,4922,4926,4935,4948,4952,4958,4962,4974,4978,4984,4988,4992,5000,5004,5019,5028,5046,5050,5055,5060,5076,5080,5093,5097,5105,5109,5113,5121,5125,5130,5139,5143,5147,5175,5185,5189,5198,5202,5213,5238,5242,5246,5250,5258,5262,5267,5272,5279,5284,5289,5294,5299,5303,5308,5312,5317,5321,5326,5331,5335,5339,5344,5349,5357],{"__ignoreMap":98},[102,4772,4773,4775],{"class":104,"line":105},[102,4774,314],{"class":108},[102,4776,317],{"class":278},[102,4778,4779,4781,4783,4785],{"class":104,"line":116},[102,4780,322],{"class":108},[102,4782,325],{"class":108},[102,4784,328],{"class":112},[102,4786,266],{"class":119},[102,4788,4789],{"class":104,"line":123},[102,4790,652],{"emptyLinePlaceholder":651},[102,4792,4793],{"class":104,"line":130},[102,4794,4795],{"class":126},"\u002F\u002F拷贝构造函数调用时机\n",[102,4797,4798],{"class":104,"line":136},[102,4799,652],{"emptyLinePlaceholder":651},[102,4801,4802],{"class":104,"line":142},[102,4803,4804],{"class":126},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[102,4806,4807],{"class":104,"line":148},[102,4808,4809],{"class":126},"\u002F\u002F2.值传递的方式给函数参数传值\n",[102,4811,4812],{"class":104,"line":157},[102,4813,4814],{"class":126},"\u002F\u002F3.以值方式返回局部对象\n",[102,4816,4817,4819],{"class":104,"line":163},[102,4818,109],{"class":108},[102,4820,659],{"class":112},[102,4822,4823],{"class":104,"line":175},[102,4824,120],{"class":119},[102,4826,4827],{"class":104,"line":181},[102,4828,139],{"class":108},[102,4830,4831,4833],{"class":104,"line":202},[102,4832,4087],{"class":112},[102,4834,172],{"class":119},[102,4836,4837],{"class":104,"line":208},[102,4838,178],{"class":119},[102,4840,4841,4843,4845,4848,4850],{"class":104,"line":214},[102,4842,2921],{"class":119},[102,4844,275],{"class":108},[102,4846,4847],{"class":278}," \"Person的默认构造函数调用\"",[102,4849,1237],{"class":108},[102,4851,1240],{"class":119},[102,4853,4854],{"class":104,"line":225},[102,4855,205],{"class":119},[102,4857,4858],{"class":104,"line":230},[102,4859,4860],{"class":126},"    \u002F\u002F有参构造\n",[102,4862,4863,4865,4867,4869,4871],{"class":104,"line":236},[102,4864,4087],{"class":112},[102,4866,380],{"class":119},[102,4868,217],{"class":108},[102,4870,1195],{"class":386},[102,4872,390],{"class":119},[102,4874,4875],{"class":104,"line":242},[102,4876,178],{"class":119},[102,4878,4879,4881,4883],{"class":104,"line":248},[102,4880,1257],{"class":119},[102,4882,260],{"class":108},[102,4884,1262],{"class":119},[102,4886,4887,4889,4891,4894,4896],{"class":104,"line":254},[102,4888,2921],{"class":119},[102,4890,275],{"class":108},[102,4892,4893],{"class":278}," \"Person的有参构造函数调用\"",[102,4895,1237],{"class":108},[102,4897,1240],{"class":119},[102,4899,4900],{"class":104,"line":269},[102,4901,205],{"class":119},[102,4903,4904],{"class":104,"line":298},[102,4905,4447],{"class":126},[102,4907,4908,4910,4912,4914,4916,4918,4920],{"class":104,"line":502},[102,4909,4087],{"class":112},[102,4911,380],{"class":119},[102,4913,4456],{"class":108},[102,4915,1074],{"class":112},[102,4917,2791],{"class":108},[102,4919,14],{"class":386},[102,4921,390],{"class":119},[102,4923,4924],{"class":104,"line":507},[102,4925,178],{"class":119},[102,4927,4928,4930,4932],{"class":104,"line":512},[102,4929,1257],{"class":119},[102,4931,260],{"class":108},[102,4933,4934],{"class":119}," p.m_Age;\n",[102,4936,4937,4939,4941,4944,4946],{"class":104,"line":521},[102,4938,2921],{"class":119},[102,4940,275],{"class":108},[102,4942,4943],{"class":278}," \"Person的拷贝构造函数调用\"",[102,4945,1237],{"class":108},[102,4947,1240],{"class":119},[102,4949,4950],{"class":104,"line":526},[102,4951,205],{"class":119},[102,4953,4954,4956],{"class":104,"line":532},[102,4955,4120],{"class":112},[102,4957,172],{"class":119},[102,4959,4960],{"class":104,"line":538},[102,4961,178],{"class":119},[102,4963,4964,4966,4968,4970,4972],{"class":104,"line":555},[102,4965,2921],{"class":119},[102,4967,275],{"class":108},[102,4969,4135],{"class":278},[102,4971,1237],{"class":108},[102,4973,1240],{"class":119},[102,4975,4976],{"class":104,"line":570},[102,4977,205],{"class":119},[102,4979,4980,4982],{"class":104,"line":581},[102,4981,151],{"class":108},[102,4983,1172],{"class":119},[102,4985,4986],{"class":104,"line":819},[102,4987,211],{"class":119},[102,4989,4990],{"class":104,"line":828},[102,4991,4804],{"class":126},[102,4993,4994,4996,4998],{"class":104,"line":837},[102,4995,2780],{"class":108},[102,4997,4162],{"class":112},[102,4999,172],{"class":119},[102,5001,5002],{"class":104,"line":842},[102,5003,120],{"class":119},[102,5005,5006,5009,5012,5014,5017],{"class":104,"line":855},[102,5007,5008],{"class":119},"    Person ",[102,5010,5011],{"class":112},"p1",[102,5013,380],{"class":119},[102,5015,5016],{"class":187},"20",[102,5018,552],{"class":119},[102,5020,5021,5023,5026],{"class":104,"line":860},[102,5022,5008],{"class":119},[102,5024,5025],{"class":112},"p2",[102,5027,3082],{"class":119},[102,5029,5030,5032,5034,5037,5039,5042,5044],{"class":104,"line":871},[102,5031,272],{"class":119},[102,5033,275],{"class":108},[102,5035,5036],{"class":278},"\"P2的年龄为：\"",[102,5038,275],{"class":108},[102,5040,5041],{"class":119},"p2.m_Age",[102,5043,275],{"class":108},[102,5045,295],{"class":119},[102,5047,5048],{"class":104,"line":1359},[102,5049,301],{"class":119},[102,5051,5052],{"class":104,"line":1368},[102,5053,5054],{"class":126},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[102,5056,5057],{"class":104,"line":1373},[102,5058,5059],{"class":126},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[102,5061,5062,5064,5067,5069,5071,5074],{"class":104,"line":1378},[102,5063,2780],{"class":108},[102,5065,5066],{"class":112}," doWork",[102,5068,380],{"class":119},[102,5070,4621],{"class":112},[102,5072,5073],{"class":386}," p",[102,5075,390],{"class":119},[102,5077,5078],{"class":104,"line":1384},[102,5079,120],{"class":119},[102,5081,5082,5084,5086,5089,5091],{"class":104,"line":1398},[102,5083,1401],{"class":119},[102,5085,275],{"class":108},[102,5087,5088],{"class":278}," \"doWork函数调用\"",[102,5090,1237],{"class":108},[102,5092,1240],{"class":119},[102,5094,5095],{"class":104,"line":1424},[102,5096,301],{"class":119},[102,5098,5099,5101,5103],{"class":104,"line":1429},[102,5100,2780],{"class":108},[102,5102,4542],{"class":112},[102,5104,172],{"class":119},[102,5106,5107],{"class":104,"line":1435},[102,5108,120],{"class":119},[102,5110,5111],{"class":104,"line":1450},[102,5112,804],{"class":119},[102,5114,5115,5118],{"class":104,"line":1473},[102,5116,5117],{"class":112},"    doWork",[102,5119,5120],{"class":119},"(p);\n",[102,5122,5123],{"class":104,"line":1478},[102,5124,301],{"class":119},[102,5126,5127],{"class":104,"line":1484},[102,5128,5129],{"class":126},"\u002F\u002F 3.以值方式返回局部对象\n",[102,5131,5132,5134,5137],{"class":104,"line":1499},[102,5133,4621],{"class":112},[102,5135,5136],{"class":112}," doWork2",[102,5138,172],{"class":119},[102,5140,5141],{"class":104,"line":1508},[102,5142,120],{"class":119},[102,5144,5145],{"class":104,"line":1513},[102,5146,4611],{"class":119},[102,5148,5149,5151,5153,5155,5157,5160,5162,5165,5167,5169,5172],{"class":104,"line":1524},[102,5150,272],{"class":119},[102,5152,275],{"class":108},[102,5154,380],{"class":119},[102,5156,217],{"class":108},[102,5158,5159],{"class":108}," *",[102,5161,4033],{"class":119},[102,5163,5164],{"class":108},"&",[102,5166,5011],{"class":119},[102,5168,275],{"class":108},[102,5170,5171],{"class":119},"endl;",[102,5173,5174],{"class":126},"\u002F\u002F打印p1的地址\n",[102,5176,5177,5179,5182],{"class":104,"line":1529},[102,5178,863],{"class":108},[102,5180,5181],{"class":119}," p1;",[102,5183,5184],{"class":126},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[102,5186,5187],{"class":104,"line":1538},[102,5188,301],{"class":119},[102,5190,5191,5193,5196],{"class":104,"line":2089},[102,5192,2780],{"class":108},[102,5194,5195],{"class":112}," test03",[102,5197,172],{"class":119},[102,5199,5200],{"class":104,"line":2094},[102,5201,120],{"class":119},[102,5203,5204,5207,5209,5211],{"class":104,"line":2100},[102,5205,5206],{"class":119},"    Person p ",[102,5208,260],{"class":108},[102,5210,5136],{"class":112},[102,5212,578],{"class":119},[102,5214,5215,5217,5219,5221,5223,5225,5227,5229,5231,5233,5235],{"class":104,"line":2106},[102,5216,272],{"class":119},[102,5218,275],{"class":108},[102,5220,380],{"class":119},[102,5222,217],{"class":108},[102,5224,5159],{"class":108},[102,5226,4033],{"class":119},[102,5228,5164],{"class":108},[102,5230,14],{"class":119},[102,5232,275],{"class":108},[102,5234,5171],{"class":119},[102,5236,5237],{"class":126},"\u002F\u002F打印p的地址\n",[102,5239,5240],{"class":104,"line":2120},[102,5241,301],{"class":119},[102,5243,5244],{"class":104,"line":2128},[102,5245,652],{"emptyLinePlaceholder":651},[102,5247,5248],{"class":104,"line":2149},[102,5249,652],{"emptyLinePlaceholder":651},[102,5251,5252,5254,5256],{"class":104,"line":2161},[102,5253,217],{"class":108},[102,5255,220],{"class":112},[102,5257,172],{"class":119},[102,5259,5260],{"class":104,"line":2167},[102,5261,120],{"class":119},[102,5263,5264],{"class":104,"line":2190},[102,5265,5266],{"class":126},"    \u002F\u002F test01();\n",[102,5268,5269],{"class":104,"line":2196},[102,5270,5271],{"class":126},"    \u002F\u002F test02();\n",[102,5273,5274,5277],{"class":104,"line":2219},[102,5275,5276],{"class":112},"    test03",[102,5278,578],{"class":119},[102,5280,5281],{"class":104,"line":2233},[102,5282,5283],{"class":126},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[102,5285,5286],{"class":104,"line":2253},[102,5287,5288],{"class":126},"\u002F\u002F 输出结果如下：\n",[102,5290,5291],{"class":104,"line":2259},[102,5292,5293],{"class":126},"\u002F\u002F Person的默认构造函数调用\n",[102,5295,5296],{"class":104,"line":2270},[102,5297,5298],{"class":126},"\u002F\u002F 0x7fffffffceec\n",[102,5300,5301],{"class":104,"line":2293},[102,5302,5298],{"class":126},[102,5304,5305],{"class":104,"line":2315},[102,5306,5307],{"class":126},"\u002F\u002F Person的析构函数调用\n",[102,5309,5310],{"class":104,"line":2320},[102,5311,652],{"emptyLinePlaceholder":651},[102,5313,5314],{"class":104,"line":2326},[102,5315,5316],{"class":126},"\u002F\u002F 之前的输出结果如下：\n",[102,5318,5319],{"class":104,"line":2340},[102,5320,5293],{"class":126},[102,5322,5323],{"class":104,"line":2354},[102,5324,5325],{"class":126},"\u002F\u002F 地址\n",[102,5327,5328],{"class":104,"line":2359},[102,5329,5330],{"class":126},"\u002F\u002F Person的拷贝构造函数调用\n",[102,5332,5333],{"class":104,"line":2373},[102,5334,5307],{"class":126},[102,5336,5337],{"class":104,"line":2378},[102,5338,5325],{"class":126},[102,5340,5341],{"class":104,"line":2384},[102,5342,5343],{"class":126},"\u002F\u002F (这两次输出的地址也是不同的) \n",[102,5345,5346],{"class":104,"line":2389},[102,5347,5348],{"class":126},"\u002F\u002F Person的析构函数调用     \n",[102,5350,5351,5353,5355],{"class":104,"line":2403},[102,5352,863],{"class":108},[102,5354,866],{"class":187},[102,5356,266],{"class":119},[102,5358,5359],{"class":104,"line":2408},[102,5360,301],{"class":119},[14,5362,5363],{},"简化版理解",[93,5365,5367],{"className":95,"code":5366,"language":97,"meta":98,"style":98},"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",[83,5368,5369,5377,5381,5387,5400,5411,5415,5427,5440,5448,5452,5468,5481,5490,5494,5499,5505,5518,5522,5526,5533,5537,5541,5546,5554,5558,5575,5588,5601,5605,5610,5618,5622,5626,5631,5636,5652,5660,5667,5673,5677,5681,5686,5694,5698,5702,5725,5732,5736,5740,5748,5752,5762,5785,5789,5793,5797,5805,5809,5814,5819,5825,5829,5839,5843,5851],{"__ignoreMap":98},[102,5370,5371,5373,5375],{"class":104,"line":105},[102,5372,109],{"class":108},[102,5374,1074],{"class":112},[102,5376,1077],{"class":119},[102,5378,5379],{"class":104,"line":116},[102,5380,139],{"class":108},[102,5382,5383,5385],{"class":104,"line":123},[102,5384,4087],{"class":112},[102,5386,795],{"class":119},[102,5388,5389,5391,5393,5396,5398],{"class":104,"line":130},[102,5390,2921],{"class":119},[102,5392,275],{"class":108},[102,5394,5395],{"class":278}," \"无参构造函数!\"",[102,5397,1237],{"class":108},[102,5399,1240],{"class":119},[102,5401,5402,5405,5407,5409],{"class":104,"line":136},[102,5403,5404],{"class":119},"        mAge ",[102,5406,260],{"class":108},[102,5408,866],{"class":187},[102,5410,266],{"class":119},[102,5412,5413],{"class":104,"line":142},[102,5414,205],{"class":119},[102,5416,5417,5419,5421,5423,5425],{"class":104,"line":148},[102,5418,4087],{"class":112},[102,5420,380],{"class":119},[102,5422,217],{"class":108},[102,5424,1195],{"class":386},[102,5426,1105],{"class":119},[102,5428,5429,5431,5433,5436,5438],{"class":104,"line":157},[102,5430,2921],{"class":119},[102,5432,275],{"class":108},[102,5434,5435],{"class":278}," \"有参构造函数!\"",[102,5437,1237],{"class":108},[102,5439,1240],{"class":119},[102,5441,5442,5444,5446],{"class":104,"line":163},[102,5443,5404],{"class":119},[102,5445,260],{"class":108},[102,5447,1262],{"class":119},[102,5449,5450],{"class":104,"line":175},[102,5451,205],{"class":119},[102,5453,5454,5456,5458,5460,5462,5464,5466],{"class":104,"line":181},[102,5455,4087],{"class":112},[102,5457,380],{"class":119},[102,5459,4456],{"class":108},[102,5461,1074],{"class":112},[102,5463,5164],{"class":108},[102,5465,5073],{"class":386},[102,5467,1105],{"class":119},[102,5469,5470,5472,5474,5477,5479],{"class":104,"line":202},[102,5471,2921],{"class":119},[102,5473,275],{"class":108},[102,5475,5476],{"class":278}," \"拷贝构造函数!\"",[102,5478,1237],{"class":108},[102,5480,1240],{"class":119},[102,5482,5483,5485,5487],{"class":104,"line":208},[102,5484,5404],{"class":119},[102,5486,260],{"class":108},[102,5488,5489],{"class":119}," p.mAge;\n",[102,5491,5492],{"class":104,"line":214},[102,5493,205],{"class":119},[102,5495,5496],{"class":104,"line":225},[102,5497,5498],{"class":126},"    \u002F\u002F析构函数在释放内存之前调用\n",[102,5500,5501,5503],{"class":104,"line":230},[102,5502,4120],{"class":112},[102,5504,795],{"class":119},[102,5506,5507,5509,5511,5514,5516],{"class":104,"line":236},[102,5508,2921],{"class":119},[102,5510,275],{"class":108},[102,5512,5513],{"class":278}," \"析构函数!\"",[102,5515,1237],{"class":108},[102,5517,1240],{"class":119},[102,5519,5520],{"class":104,"line":242},[102,5521,205],{"class":119},[102,5523,5524],{"class":104,"line":248},[102,5525,139],{"class":108},[102,5527,5528,5530],{"class":104,"line":254},[102,5529,151],{"class":108},[102,5531,5532],{"class":119}," mAge;\n",[102,5534,5535],{"class":104,"line":269},[102,5536,211],{"class":119},[102,5538,5539],{"class":104,"line":298},[102,5540,652],{"emptyLinePlaceholder":651},[102,5542,5543],{"class":104,"line":502},[102,5544,5545],{"class":126},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[102,5547,5548,5550,5552],{"class":104,"line":507},[102,5549,2780],{"class":108},[102,5551,4162],{"class":112},[102,5553,795],{"class":119},[102,5555,5556],{"class":104,"line":512},[102,5557,652],{"emptyLinePlaceholder":651},[102,5559,5560,5562,5565,5567,5570,5572],{"class":104,"line":521},[102,5561,5008],{"class":119},[102,5563,5564],{"class":112},"man",[102,5566,380],{"class":119},[102,5568,5569],{"class":187},"100",[102,5571,4227],{"class":119},[102,5573,5574],{"class":126}," \u002F\u002Fp对象已经创建完毕\n",[102,5576,5577,5579,5582,5585],{"class":104,"line":526},[102,5578,5008],{"class":119},[102,5580,5581],{"class":112},"newman",[102,5583,5584],{"class":119},"(man);",[102,5586,5587],{"class":126}," \u002F\u002F调用拷贝构造函数\n",[102,5589,5590,5593,5595,5598],{"class":104,"line":532},[102,5591,5592],{"class":119},"    Person newman2 ",[102,5594,260],{"class":108},[102,5596,5597],{"class":119}," man;",[102,5599,5600],{"class":126}," \u002F\u002F拷贝构造\n",[102,5602,5603],{"class":104,"line":538},[102,5604,652],{"emptyLinePlaceholder":651},[102,5606,5607],{"class":104,"line":555},[102,5608,5609],{"class":126},"    \u002F\u002FPerson newman3;\n",[102,5611,5612,5615],{"class":104,"line":570},[102,5613,5614],{"class":126},"    \u002F\u002Fnewman3 = man;",[102,5616,5617],{"class":126}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[102,5619,5620],{"class":104,"line":581},[102,5621,301],{"class":119},[102,5623,5624],{"class":104,"line":819},[102,5625,652],{"emptyLinePlaceholder":651},[102,5627,5628],{"class":104,"line":828},[102,5629,5630],{"class":126},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[102,5632,5633],{"class":104,"line":837},[102,5634,5635],{"class":126},"\u002F\u002F相当于Person p1 = p;\n",[102,5637,5638,5640,5642,5644,5646,5649],{"class":104,"line":842},[102,5639,2780],{"class":108},[102,5641,5066],{"class":112},[102,5643,380],{"class":119},[102,5645,4621],{"class":112},[102,5647,5648],{"class":386}," p1",[102,5650,5651],{"class":119},") {}\n",[102,5653,5654,5656,5658],{"class":104,"line":855},[102,5655,2780],{"class":108},[102,5657,4542],{"class":112},[102,5659,795],{"class":119},[102,5661,5662,5664],{"class":104,"line":860},[102,5663,4173],{"class":119},[102,5665,5666],{"class":126}," \u002F\u002F无参构造函数\n",[102,5668,5669,5671],{"class":104,"line":871},[102,5670,5117],{"class":112},[102,5672,5120],{"class":119},[102,5674,5675],{"class":104,"line":1359},[102,5676,301],{"class":119},[102,5678,5679],{"class":104,"line":1368},[102,5680,652],{"emptyLinePlaceholder":651},[102,5682,5683],{"class":104,"line":1373},[102,5684,5685],{"class":126},"\u002F\u002F3. 以值方式返回局部对象\n",[102,5687,5688,5690,5692],{"class":104,"line":1378},[102,5689,4621],{"class":112},[102,5691,5136],{"class":112},[102,5693,172],{"class":119},[102,5695,5696],{"class":104,"line":1384},[102,5697,120],{"class":119},[102,5699,5700],{"class":104,"line":1398},[102,5701,4611],{"class":119},[102,5703,5704,5706,5708,5710,5712,5714,5716,5718,5721,5723],{"class":104,"line":1424},[102,5705,1401],{"class":119},[102,5707,275],{"class":108},[102,5709,2432],{"class":119},[102,5711,217],{"class":108},[102,5713,5159],{"class":108},[102,5715,4033],{"class":119},[102,5717,5164],{"class":108},[102,5719,5720],{"class":119},"p1 ",[102,5722,275],{"class":108},[102,5724,1240],{"class":119},[102,5726,5727,5729],{"class":104,"line":1429},[102,5728,863],{"class":108},[102,5730,5731],{"class":119}," p1;\n",[102,5733,5734],{"class":104,"line":1435},[102,5735,301],{"class":119},[102,5737,5738],{"class":104,"line":1450},[102,5739,652],{"emptyLinePlaceholder":651},[102,5741,5742,5744,5746],{"class":104,"line":1473},[102,5743,2780],{"class":108},[102,5745,5195],{"class":112},[102,5747,172],{"class":119},[102,5749,5750],{"class":104,"line":1478},[102,5751,120],{"class":119},[102,5753,5754,5756,5758,5760],{"class":104,"line":1484},[102,5755,5206],{"class":119},[102,5757,260],{"class":108},[102,5759,5136],{"class":112},[102,5761,578],{"class":119},[102,5763,5764,5766,5768,5770,5772,5774,5776,5778,5781,5783],{"class":104,"line":1499},[102,5765,1401],{"class":119},[102,5767,275],{"class":108},[102,5769,2432],{"class":119},[102,5771,217],{"class":108},[102,5773,5159],{"class":108},[102,5775,4033],{"class":119},[102,5777,5164],{"class":108},[102,5779,5780],{"class":119},"p ",[102,5782,275],{"class":108},[102,5784,1240],{"class":119},[102,5786,5787],{"class":104,"line":1508},[102,5788,301],{"class":119},[102,5790,5791],{"class":104,"line":1513},[102,5792,652],{"emptyLinePlaceholder":651},[102,5794,5795],{"class":104,"line":1524},[102,5796,652],{"emptyLinePlaceholder":651},[102,5798,5799,5801,5803],{"class":104,"line":1529},[102,5800,217],{"class":108},[102,5802,220],{"class":112},[102,5804,795],{"class":119},[102,5806,5807],{"class":104,"line":1538},[102,5808,652],{"emptyLinePlaceholder":651},[102,5810,5811],{"class":104,"line":2089},[102,5812,5813],{"class":126},"    \u002F\u002Ftest01();\n",[102,5815,5816],{"class":104,"line":2094},[102,5817,5818],{"class":126},"    \u002F\u002Ftest02();\n",[102,5820,5821,5823],{"class":104,"line":2100},[102,5822,5276],{"class":112},[102,5824,578],{"class":119},[102,5826,5827],{"class":104,"line":2106},[102,5828,652],{"emptyLinePlaceholder":651},[102,5830,5831,5833,5835,5837],{"class":104,"line":2120},[102,5832,845],{"class":112},[102,5834,380],{"class":119},[102,5836,850],{"class":278},[102,5838,552],{"class":119},[102,5840,5841],{"class":104,"line":2128},[102,5842,652],{"emptyLinePlaceholder":651},[102,5844,5845,5847,5849],{"class":104,"line":2149},[102,5846,863],{"class":108},[102,5848,866],{"class":187},[102,5850,266],{"class":119},[102,5852,5853],{"class":104,"line":2161},[102,5854,301],{"class":119},[48,5856,5858],{"id":5857},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,5860,5861],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,5863,5864],{},"1．默认构造函数(无参，函数体为空)",[14,5866,5867],{},"2．默认析构函数(无参，函数体为空)",[14,5869,5870],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,5872,5873],{},"构造函数调用规则如下：",[59,5875,5876,5879],{},[62,5877,5878],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[62,5880,5881],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[93,5883,5885],{"className":95,"code":5884,"language":97,"meta":98,"style":98},"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",[83,5886,5887,5895,5899,5904,5910,5922,5926,5931,5943,5953,5965,5969,5973,5989,5998,6010,6014,6018,6024,6036,6040,6044,6050,6054,6058,6066,6070,6083,6088,6096,6100,6118,6122,6126,6134,6138,6143,6151,6166,6179,6183,6188,6195,6211,6224,6228,6232,6240,6244,6250,6254,6264,6268,6276],{"__ignoreMap":98},[102,5888,5889,5891,5893],{"class":104,"line":105},[102,5890,109],{"class":108},[102,5892,1074],{"class":112},[102,5894,1077],{"class":119},[102,5896,5897],{"class":104,"line":116},[102,5898,139],{"class":108},[102,5900,5901],{"class":104,"line":123},[102,5902,5903],{"class":126},"    \u002F\u002F无参（默认）构造函数\n",[102,5905,5906,5908],{"class":104,"line":130},[102,5907,4087],{"class":112},[102,5909,795],{"class":119},[102,5911,5912,5914,5916,5918,5920],{"class":104,"line":136},[102,5913,2921],{"class":119},[102,5915,275],{"class":108},[102,5917,5395],{"class":278},[102,5919,1237],{"class":108},[102,5921,1240],{"class":119},[102,5923,5924],{"class":104,"line":142},[102,5925,205],{"class":119},[102,5927,5928],{"class":104,"line":148},[102,5929,5930],{"class":126},"    \u002F\u002F有参构造函数\n",[102,5932,5933,5935,5937,5939,5941],{"class":104,"line":157},[102,5934,4087],{"class":112},[102,5936,380],{"class":119},[102,5938,217],{"class":108},[102,5940,4378],{"class":386},[102,5942,1105],{"class":119},[102,5944,5945,5948,5950],{"class":104,"line":163},[102,5946,5947],{"class":119},"        age ",[102,5949,260],{"class":108},[102,5951,5952],{"class":119}," a;\n",[102,5954,5955,5957,5959,5961,5963],{"class":104,"line":175},[102,5956,2921],{"class":119},[102,5958,275],{"class":108},[102,5960,5435],{"class":278},[102,5962,1237],{"class":108},[102,5964,1240],{"class":119},[102,5966,5967],{"class":104,"line":181},[102,5968,205],{"class":119},[102,5970,5971],{"class":104,"line":202},[102,5972,4447],{"class":126},[102,5974,5975,5977,5979,5981,5983,5985,5987],{"class":104,"line":208},[102,5976,4087],{"class":112},[102,5978,380],{"class":119},[102,5980,4456],{"class":108},[102,5982,1074],{"class":112},[102,5984,5164],{"class":108},[102,5986,5073],{"class":386},[102,5988,1105],{"class":119},[102,5990,5991,5993,5995],{"class":104,"line":214},[102,5992,5947],{"class":119},[102,5994,260],{"class":108},[102,5996,5997],{"class":119}," p.age;\n",[102,5999,6000,6002,6004,6006,6008],{"class":104,"line":225},[102,6001,2921],{"class":119},[102,6003,275],{"class":108},[102,6005,5476],{"class":278},[102,6007,1237],{"class":108},[102,6009,1240],{"class":119},[102,6011,6012],{"class":104,"line":230},[102,6013,205],{"class":119},[102,6015,6016],{"class":104,"line":236},[102,6017,4115],{"class":126},[102,6019,6020,6022],{"class":104,"line":242},[102,6021,4120],{"class":112},[102,6023,795],{"class":119},[102,6025,6026,6028,6030,6032,6034],{"class":104,"line":248},[102,6027,2921],{"class":119},[102,6029,275],{"class":108},[102,6031,5513],{"class":278},[102,6033,1237],{"class":108},[102,6035,1240],{"class":119},[102,6037,6038],{"class":104,"line":254},[102,6039,205],{"class":119},[102,6041,6042],{"class":104,"line":269},[102,6043,139],{"class":108},[102,6045,6046,6048],{"class":104,"line":298},[102,6047,151],{"class":108},[102,6049,1262],{"class":119},[102,6051,6052],{"class":104,"line":502},[102,6053,211],{"class":119},[102,6055,6056],{"class":104,"line":507},[102,6057,652],{"emptyLinePlaceholder":651},[102,6059,6060,6062,6064],{"class":104,"line":512},[102,6061,2780],{"class":108},[102,6063,4162],{"class":112},[102,6065,172],{"class":119},[102,6067,6068],{"class":104,"line":521},[102,6069,120],{"class":119},[102,6071,6072,6074,6076,6078,6081],{"class":104,"line":526},[102,6073,5008],{"class":119},[102,6075,5011],{"class":112},[102,6077,380],{"class":119},[102,6079,6080],{"class":187},"18",[102,6082,552],{"class":119},[102,6084,6085],{"class":104,"line":532},[102,6086,6087],{"class":126},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[102,6089,6090,6092,6094],{"class":104,"line":538},[102,6091,5008],{"class":119},[102,6093,5025],{"class":112},[102,6095,3082],{"class":119},[102,6097,6098],{"class":104,"line":555},[102,6099,652],{"emptyLinePlaceholder":651},[102,6101,6102,6104,6106,6109,6111,6114,6116],{"class":104,"line":570},[102,6103,1401],{"class":119},[102,6105,275],{"class":108},[102,6107,6108],{"class":278}," \"p2的年龄为： \"",[102,6110,1237],{"class":108},[102,6112,6113],{"class":119}," p2.age ",[102,6115,275],{"class":108},[102,6117,1240],{"class":119},[102,6119,6120],{"class":104,"line":581},[102,6121,301],{"class":119},[102,6123,6124],{"class":104,"line":819},[102,6125,652],{"emptyLinePlaceholder":651},[102,6127,6128,6130,6132],{"class":104,"line":828},[102,6129,2780],{"class":108},[102,6131,4542],{"class":112},[102,6133,172],{"class":119},[102,6135,6136],{"class":104,"line":837},[102,6137,120],{"class":119},[102,6139,6140],{"class":104,"line":842},[102,6141,6142],{"class":126},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[102,6144,6145,6148],{"class":104,"line":855},[102,6146,6147],{"class":119},"    Person p1;",[102,6149,6150],{"class":126}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[102,6152,6153,6155,6157,6159,6161,6163],{"class":104,"line":860},[102,6154,5008],{"class":119},[102,6156,5025],{"class":112},[102,6158,380],{"class":119},[102,6160,263],{"class":187},[102,6162,4227],{"class":119},[102,6164,6165],{"class":126}," \u002F\u002F用户提供的有参\n",[102,6167,6168,6170,6173,6176],{"class":104,"line":871},[102,6169,5008],{"class":119},[102,6171,6172],{"class":112},"p3",[102,6174,6175],{"class":119},"(p2);",[102,6177,6178],{"class":126}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[102,6180,6181],{"class":104,"line":1359},[102,6182,652],{"emptyLinePlaceholder":651},[102,6184,6185],{"class":104,"line":1368},[102,6186,6187],{"class":126},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[102,6189,6190,6193],{"class":104,"line":1373},[102,6191,6192],{"class":119},"    Person p4;",[102,6194,6150],{"class":126},[102,6196,6197,6199,6202,6204,6206,6208],{"class":104,"line":1378},[102,6198,5008],{"class":119},[102,6200,6201],{"class":112},"p5",[102,6203,380],{"class":119},[102,6205,263],{"class":187},[102,6207,4227],{"class":119},[102,6209,6210],{"class":126}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[102,6212,6213,6215,6218,6221],{"class":104,"line":1384},[102,6214,5008],{"class":119},[102,6216,6217],{"class":112},"p6",[102,6219,6220],{"class":119},"(p5);",[102,6222,6223],{"class":126}," \u002F\u002F用户自己提供拷贝构造\n",[102,6225,6226],{"class":104,"line":1398},[102,6227,301],{"class":119},[102,6229,6230],{"class":104,"line":1424},[102,6231,652],{"emptyLinePlaceholder":651},[102,6233,6234,6236,6238],{"class":104,"line":1429},[102,6235,217],{"class":108},[102,6237,220],{"class":112},[102,6239,795],{"class":119},[102,6241,6242],{"class":104,"line":1435},[102,6243,652],{"emptyLinePlaceholder":651},[102,6245,6246,6248],{"class":104,"line":1450},[102,6247,4720],{"class":112},[102,6249,578],{"class":119},[102,6251,6252],{"class":104,"line":1473},[102,6253,652],{"emptyLinePlaceholder":651},[102,6255,6256,6258,6260,6262],{"class":104,"line":1478},[102,6257,845],{"class":112},[102,6259,380],{"class":119},[102,6261,850],{"class":278},[102,6263,552],{"class":119},[102,6265,6266],{"class":104,"line":1484},[102,6267,652],{"emptyLinePlaceholder":651},[102,6269,6270,6272,6274],{"class":104,"line":1499},[102,6271,863],{"class":108},[102,6273,866],{"class":187},[102,6275,266],{"class":119},[102,6277,6278],{"class":104,"line":1508},[102,6279,301],{"class":119},[48,6281,6283],{"id":6282},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,6285,6286],{},"浅拷贝：简单的赋值拷贝操作",[14,6288,6289],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[93,6291,6293],{"className":95,"code":6292,"language":97,"meta":98,"style":98},"#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",[83,6294,6295,6301,6311,6317,6321,6325,6330,6336,6340,6353,6357,6361,6368,6372,6382,6399,6412,6416,6421,6426,6442,6446,6459,6464,6469,6474,6483,6488,6503,6507,6511,6515,6521,6525,6530,6545,6549,6560,6575,6579,6588,6592,6598,6610,6614,6622,6626,6643,6675,6683,6711,6715,6719,6727,6731,6737],{"__ignoreMap":98},[102,6296,6297,6299],{"class":104,"line":105},[102,6298,314],{"class":108},[102,6300,317],{"class":278},[102,6302,6303,6305,6307,6309],{"class":104,"line":116},[102,6304,322],{"class":108},[102,6306,325],{"class":108},[102,6308,328],{"class":112},[102,6310,266],{"class":119},[102,6312,6313,6315],{"class":104,"line":123},[102,6314,109],{"class":108},[102,6316,659],{"class":112},[102,6318,6319],{"class":104,"line":130},[102,6320,120],{"class":119},[102,6322,6323],{"class":104,"line":136},[102,6324,139],{"class":108},[102,6326,6327],{"class":104,"line":142},[102,6328,6329],{"class":126},"    \u002F\u002F默认构造函数\n",[102,6331,6332,6334],{"class":104,"line":148},[102,6333,4087],{"class":112},[102,6335,172],{"class":119},[102,6337,6338],{"class":104,"line":157},[102,6339,178],{"class":119},[102,6341,6342,6344,6346,6349,6351],{"class":104,"line":163},[102,6343,470],{"class":119},[102,6345,275],{"class":108},[102,6347,6348],{"class":278},"\"默认构造函数\"",[102,6350,275],{"class":108},[102,6352,295],{"class":119},[102,6354,6355],{"class":104,"line":175},[102,6356,205],{"class":119},[102,6358,6359],{"class":104,"line":181},[102,6360,5930],{"class":126},[102,6362,6363,6365],{"class":104,"line":202},[102,6364,4120],{"class":112},[102,6366,6367],{"class":119},"(int age,int height)\n",[102,6369,6370],{"class":104,"line":208},[102,6371,178],{"class":119},[102,6373,6374,6377,6379],{"class":104,"line":214},[102,6375,6376],{"class":119},"        m_Age",[102,6378,260],{"class":108},[102,6380,6381],{"class":119},"age;\n",[102,6383,6384,6387,6390,6393,6396],{"class":104,"line":225},[102,6385,6386],{"class":119},"        m_Height",[102,6388,6389],{"class":108},"=new",[102,6391,6392],{"class":108}," int",[102,6394,6395],{"class":119},"(height);",[102,6397,6398],{"class":126},"\u002F\u002F放到堆区\n",[102,6400,6401,6403,6405,6408,6410],{"class":104,"line":230},[102,6402,470],{"class":119},[102,6404,275],{"class":108},[102,6406,6407],{"class":278},"\"有参构造函数\"",[102,6409,275],{"class":108},[102,6411,295],{"class":119},[102,6413,6414],{"class":104,"line":236},[102,6415,205],{"class":119},[102,6417,6418],{"class":104,"line":242},[102,6419,6420],{"class":126},"    \u002F\u002F深拷贝解决上述问题\n",[102,6422,6423],{"class":104,"line":248},[102,6424,6425],{"class":126},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[102,6427,6428,6430,6432,6434,6436,6438,6440],{"class":104,"line":254},[102,6429,4087],{"class":112},[102,6431,380],{"class":119},[102,6433,4456],{"class":108},[102,6435,1074],{"class":112},[102,6437,2791],{"class":108},[102,6439,14],{"class":386},[102,6441,390],{"class":119},[102,6443,6444],{"class":104,"line":269},[102,6445,178],{"class":119},[102,6447,6448,6450,6452,6455,6457],{"class":104,"line":298},[102,6449,470],{"class":119},[102,6451,275],{"class":108},[102,6453,6454],{"class":278},"\"拷贝构造函数\"",[102,6456,275],{"class":108},[102,6458,295],{"class":119},[102,6460,6461],{"class":104,"line":502},[102,6462,6463],{"class":126},"        \u002F\u002F编译器默认的写如下注释部分\n",[102,6465,6466],{"class":104,"line":507},[102,6467,6468],{"class":126},"        \u002F\u002Fm_Age=p.m_Age;\n",[102,6470,6471],{"class":104,"line":512},[102,6472,6473],{"class":126},"        \u002F\u002Fm_Height=p.m_Height;\n",[102,6475,6476,6478,6480],{"class":104,"line":521},[102,6477,6376],{"class":119},[102,6479,260],{"class":108},[102,6481,6482],{"class":119},"p.m_Age;\n",[102,6484,6485],{"class":104,"line":526},[102,6486,6487],{"class":126},"        \u002F\u002F深拷贝操作\n",[102,6489,6490,6492,6494,6496,6498,6500],{"class":104,"line":532},[102,6491,6386],{"class":119},[102,6493,6389],{"class":108},[102,6495,6392],{"class":108},[102,6497,380],{"class":119},[102,6499,191],{"class":108},[102,6501,6502],{"class":119},"p.m_Height);\n",[102,6504,6505],{"class":104,"line":538},[102,6506,205],{"class":119},[102,6508,6509],{"class":104,"line":555},[102,6510,652],{"emptyLinePlaceholder":651},[102,6512,6513],{"class":104,"line":570},[102,6514,4115],{"class":126},[102,6516,6517,6519],{"class":104,"line":581},[102,6518,4120],{"class":112},[102,6520,172],{"class":119},[102,6522,6523],{"class":104,"line":819},[102,6524,178],{"class":119},[102,6526,6527],{"class":104,"line":828},[102,6528,6529],{"class":126},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[102,6531,6532,6534,6537,6540,6543],{"class":104,"line":837},[102,6533,1202],{"class":108},[102,6535,6536],{"class":119},"(m_Height ",[102,6538,6539],{"class":108},"!=",[102,6541,6542],{"class":187}," NULL",[102,6544,390],{"class":119},[102,6546,6547],{"class":104,"line":842},[102,6548,1914],{"class":119},[102,6550,6551,6554,6557],{"class":104,"line":855},[102,6552,6553],{"class":108},"            delete",[102,6555,6556],{"class":119}," m_Height;",[102,6558,6559],{"class":126}," \u002F\u002F释放堆区内存\n",[102,6561,6562,6565,6567,6570,6572],{"class":104,"line":860},[102,6563,6564],{"class":119},"            m_Height",[102,6566,260],{"class":108},[102,6568,6569],{"class":187},"NULL",[102,6571,992],{"class":119},[102,6573,6574],{"class":126}," \u002F\u002F防止野指针\n",[102,6576,6577],{"class":104,"line":871},[102,6578,1252],{"class":119},[102,6580,6581,6583,6585],{"class":104,"line":1359},[102,6582,470],{"class":119},[102,6584,275],{"class":108},[102,6586,6587],{"class":278},"\"Person的析构函数调用\"\n",[102,6589,6590],{"class":104,"line":1368},[102,6591,205],{"class":119},[102,6593,6594,6596],{"class":104,"line":1373},[102,6595,151],{"class":108},[102,6597,1172],{"class":119},[102,6599,6600,6602,6604,6607],{"class":104,"line":1378},[102,6601,151],{"class":108},[102,6603,5159],{"class":108},[102,6605,6606],{"class":119},"m_Height;",[102,6608,6609],{"class":126}," \u002F\u002F定义一个指针，指向身高\n",[102,6611,6612],{"class":104,"line":1384},[102,6613,211],{"class":119},[102,6615,6616,6618,6620],{"class":104,"line":1398},[102,6617,2780],{"class":108},[102,6619,4162],{"class":112},[102,6621,172],{"class":119},[102,6623,6624],{"class":104,"line":1424},[102,6625,120],{"class":119},[102,6627,6628,6630,6632,6634,6636,6638,6641],{"class":104,"line":1429},[102,6629,5008],{"class":119},[102,6631,5011],{"class":112},[102,6633,380],{"class":119},[102,6635,6080],{"class":187},[102,6637,1618],{"class":119},[102,6639,6640],{"class":187},"160",[102,6642,552],{"class":119},[102,6644,6645,6647,6649,6652,6654,6657,6659,6662,6665,6668,6670,6672],{"class":104,"line":1435},[102,6646,272],{"class":119},[102,6648,275],{"class":108},[102,6650,6651],{"class":278},"\"p1的年龄为:\"",[102,6653,275],{"class":108},[102,6655,6656],{"class":119},"p1.m_Age",[102,6658,275],{"class":108},[102,6660,6661],{"class":278},"\"身高为：\"",[102,6663,6664],{"class":108},"\u003C\u003C*",[102,6666,6667],{"class":119},"p1.m_Height",[102,6669,275],{"class":108},[102,6671,5171],{"class":119},[102,6673,6674],{"class":126},"  \u002F\u002F18\n",[102,6676,6677,6679,6681],{"class":104,"line":1450},[102,6678,5008],{"class":119},[102,6680,5025],{"class":112},[102,6682,3082],{"class":119},[102,6684,6685,6687,6689,6692,6694,6696,6698,6700,6702,6705,6707,6709],{"class":104,"line":1473},[102,6686,272],{"class":119},[102,6688,275],{"class":108},[102,6690,6691],{"class":278},"\"p2的年龄为：\"",[102,6693,275],{"class":108},[102,6695,5041],{"class":119},[102,6697,275],{"class":108},[102,6699,6661],{"class":278},[102,6701,6664],{"class":108},[102,6703,6704],{"class":119},"p2.m_Height",[102,6706,275],{"class":108},[102,6708,5171],{"class":119},[102,6710,6674],{"class":126},[102,6712,6713],{"class":104,"line":1478},[102,6714,1326],{"class":119},[102,6716,6717],{"class":104,"line":1484},[102,6718,301],{"class":119},[102,6720,6721,6723,6725],{"class":104,"line":1499},[102,6722,217],{"class":108},[102,6724,220],{"class":112},[102,6726,172],{"class":119},[102,6728,6729],{"class":104,"line":1508},[102,6730,120],{"class":119},[102,6732,6733,6735],{"class":104,"line":1513},[102,6734,4720],{"class":112},[102,6736,578],{"class":119},[102,6738,6739],{"class":104,"line":1524},[102,6740,301],{"class":119},[14,6742,6743],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,6745,6746],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,6748,6749],{},[6750,6751],"img",{"alt":98,"src":6752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,6754,6755],{},"浅拷贝问题要使用深拷贝来解决",[14,6757,6758],{},[6750,6759],{"alt":98,"src":6760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,6762,6763],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[48,6765,6767],{"id":6766},"_826初始化列表","8.2.6初始化列表",[14,6769,6770],{},"作用：初始化属性",[14,6772,80],{},[93,6774,6779],{"className":6775,"code":6777,"language":6778},[6776],"language-text","构造函数():属性1(值1),属性2(值2).....{}\n","text",[83,6780,6777],{"__ignoreMap":98},[14,6782,6783],{},"例子",[93,6785,6787],{"className":95,"code":6786,"language":97,"meta":98,"style":98},"#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",[83,6788,6789,6795,6805,6811,6815,6820,6824,6829,6834,6839,6844,6849,6854,6858,6863,6868,6912,6921,6939,6957,6975,6979,6983,6990,6997,7004,7008,7012,7021,7025,7029,7052,7061,7065,7069,7079,7083,7091],{"__ignoreMap":98},[102,6790,6791,6793],{"class":104,"line":105},[102,6792,314],{"class":108},[102,6794,317],{"class":278},[102,6796,6797,6799,6801,6803],{"class":104,"line":116},[102,6798,322],{"class":108},[102,6800,325],{"class":108},[102,6802,328],{"class":112},[102,6804,266],{"class":119},[102,6806,6807,6809],{"class":104,"line":123},[102,6808,109],{"class":108},[102,6810,659],{"class":112},[102,6812,6813],{"class":104,"line":130},[102,6814,120],{"class":119},[102,6816,6817],{"class":104,"line":136},[102,6818,6819],{"class":108},"    public:\n",[102,6821,6822],{"class":104,"line":142},[102,6823,652],{"emptyLinePlaceholder":651},[102,6825,6826],{"class":104,"line":148},[102,6827,6828],{"class":126},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[102,6830,6831],{"class":104,"line":157},[102,6832,6833],{"class":126},"    \u002F\u002FPerson(int a, int b, int c) {\n",[102,6835,6836],{"class":104,"line":163},[102,6837,6838],{"class":126},"    \u002F\u002F  m_A = a;\n",[102,6840,6841],{"class":104,"line":175},[102,6842,6843],{"class":126},"    \u002F\u002F  m_B = b;\n",[102,6845,6846],{"class":104,"line":181},[102,6847,6848],{"class":126},"    \u002F\u002F  m_C = c;\n",[102,6850,6851],{"class":104,"line":202},[102,6852,6853],{"class":126},"    \u002F\u002F}\n",[102,6855,6856],{"class":104,"line":208},[102,6857,652],{"emptyLinePlaceholder":651},[102,6859,6860],{"class":104,"line":214},[102,6861,6862],{"class":126},"    \u002F\u002F初始化列表方式初始化\n",[102,6864,6865],{"class":104,"line":225},[102,6866,6867],{"class":126},"    \u002F\u002F使用有参构造函数\n",[102,6869,6870,6872,6874,6876,6878,6880,6882,6885,6887,6889,6891,6894,6897,6900,6903,6906,6909],{"class":104,"line":230},[102,6871,4087],{"class":112},[102,6873,380],{"class":119},[102,6875,217],{"class":108},[102,6877,4378],{"class":386},[102,6879,2571],{"class":119},[102,6881,217],{"class":108},[102,6883,6884],{"class":386}," b",[102,6886,2571],{"class":119},[102,6888,217],{"class":108},[102,6890,1855],{"class":386},[102,6892,6893],{"class":119},") :",[102,6895,6896],{"class":112},"m_A",[102,6898,6899],{"class":119},"(a), ",[102,6901,6902],{"class":112},"m_B",[102,6904,6905],{"class":119},"(b), ",[102,6907,6908],{"class":112},"m_C",[102,6910,6911],{"class":119},"(c) {}\n",[102,6913,6914,6916,6919],{"class":104,"line":236},[102,6915,374],{"class":108},[102,6917,6918],{"class":112}," PrintPerson",[102,6920,795],{"class":119},[102,6922,6923,6925,6927,6930,6932,6935,6937],{"class":104,"line":242},[102,6924,2921],{"class":119},[102,6926,275],{"class":108},[102,6928,6929],{"class":278}," \"mA:\"",[102,6931,1237],{"class":108},[102,6933,6934],{"class":119}," m_A ",[102,6936,275],{"class":108},[102,6938,1240],{"class":119},[102,6940,6941,6943,6945,6948,6950,6953,6955],{"class":104,"line":248},[102,6942,2921],{"class":119},[102,6944,275],{"class":108},[102,6946,6947],{"class":278}," \"mB:\"",[102,6949,1237],{"class":108},[102,6951,6952],{"class":119}," m_B ",[102,6954,275],{"class":108},[102,6956,1240],{"class":119},[102,6958,6959,6961,6963,6966,6968,6971,6973],{"class":104,"line":254},[102,6960,2921],{"class":119},[102,6962,275],{"class":108},[102,6964,6965],{"class":278}," \"mC:\"",[102,6967,1237],{"class":108},[102,6969,6970],{"class":119}," m_C ",[102,6972,275],{"class":108},[102,6974,1240],{"class":119},[102,6976,6977],{"class":104,"line":269},[102,6978,205],{"class":119},[102,6980,6981],{"class":104,"line":298},[102,6982,710],{"class":108},[102,6984,6985,6987],{"class":104,"line":502},[102,6986,151],{"class":108},[102,6988,6989],{"class":119}," m_A;\n",[102,6991,6992,6994],{"class":104,"line":507},[102,6993,151],{"class":108},[102,6995,6996],{"class":119}," m_B;\n",[102,6998,6999,7001],{"class":104,"line":512},[102,7000,151],{"class":108},[102,7002,7003],{"class":119}," m_C;\n",[102,7005,7006],{"class":104,"line":521},[102,7007,211],{"class":119},[102,7009,7010],{"class":104,"line":526},[102,7011,652],{"emptyLinePlaceholder":651},[102,7013,7014,7016,7018],{"class":104,"line":532},[102,7015,217],{"class":108},[102,7017,220],{"class":112},[102,7019,7020],{"class":119},"() \n",[102,7022,7023],{"class":104,"line":538},[102,7024,120],{"class":119},[102,7026,7027],{"class":104,"line":555},[102,7028,652],{"emptyLinePlaceholder":651},[102,7030,7031,7033,7035,7037,7040,7042,7045,7047,7050],{"class":104,"line":570},[102,7032,5008],{"class":119},[102,7034,14],{"class":112},[102,7036,380],{"class":119},[102,7038,7039],{"class":187},"1",[102,7041,2571],{"class":119},[102,7043,7044],{"class":187},"2",[102,7046,2571],{"class":119},[102,7048,7049],{"class":187},"3",[102,7051,552],{"class":119},[102,7053,7054,7056,7059],{"class":104,"line":581},[102,7055,1387],{"class":119},[102,7057,7058],{"class":112},"PrintPerson",[102,7060,578],{"class":119},[102,7062,7063],{"class":104,"line":819},[102,7064,652],{"emptyLinePlaceholder":651},[102,7066,7067],{"class":104,"line":828},[102,7068,652],{"emptyLinePlaceholder":651},[102,7070,7071,7073,7075,7077],{"class":104,"line":837},[102,7072,845],{"class":112},[102,7074,380],{"class":119},[102,7076,850],{"class":278},[102,7078,552],{"class":119},[102,7080,7081],{"class":104,"line":842},[102,7082,652],{"emptyLinePlaceholder":651},[102,7084,7085,7087,7089],{"class":104,"line":855},[102,7086,863],{"class":108},[102,7088,866],{"class":187},[102,7090,266],{"class":119},[102,7092,7093],{"class":104,"line":860},[102,7094,301],{"class":119},[14,7096,7097,7098,7101,7102],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[18,7099,7100],{},"参数名就是定义的对象属性","，",[18,7103,7104],{},"属性后面的值为有参构造函数的形参",[93,7106,7108],{"className":95,"code":7107,"language":97,"meta":98,"style":98},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[83,7109,7110],{"__ignoreMap":98},[102,7111,7112,7114,7116,7118,7121,7123,7126,7128,7131,7133,7136,7138,7141,7143],{"class":104,"line":105},[102,7113,4621],{"class":112},[102,7115,380],{"class":119},[102,7117,217],{"class":108},[102,7119,7120],{"class":119}," a.",[102,7122,217],{"class":108},[102,7124,7125],{"class":119}," b,",[102,7127,217],{"class":108},[102,7129,7130],{"class":119}," b):",[102,7132,6896],{"class":112},[102,7134,7135],{"class":119},"(a),",[102,7137,6902],{"class":112},[102,7139,7140],{"class":119},"(c),",[102,7142,6908],{"class":112},[102,7144,7145],{"class":119},"(b) {}\n",[48,7147,7149],{"id":7148},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,7151,7152],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,7154,32],{},[93,7156,7158],{"className":95,"code":7157,"language":97,"meta":98,"style":98},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[83,7159,7160,7165,7170,7174,7179,7183],{"__ignoreMap":98},[102,7161,7162],{"class":104,"line":105},[102,7163,7164],{"class":119},"A{};\n",[102,7166,7167],{"class":104,"line":116},[102,7168,7169],{"class":119},"B\n",[102,7171,7172],{"class":104,"line":123},[102,7173,120],{"class":119},[102,7175,7176],{"class":104,"line":130},[102,7177,7178],{"class":119},"    A a;\n",[102,7180,7181],{"class":104,"line":136},[102,7182,301],{"class":119},[102,7184,7185],{"class":104,"line":142},[102,7186,7187],{"class":126},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,7189,7190],{},"案例",[93,7192,7194],{"className":95,"code":7193,"language":97,"meta":98,"style":98},"\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",[83,7195,7196,7201,7208,7212,7217,7222,7236,7240,7250,7261,7265,7272,7276,7289,7293,7298,7303,7307,7313,7317,7321,7325,7356,7360,7371,7375,7381,7385,7398,7402,7407,7411,7416,7421,7425,7433,7437,7454,7473,7477,7485,7489,7495],{"__ignoreMap":98},[102,7197,7198],{"class":104,"line":105},[102,7199,7200],{"class":126},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[102,7202,7203,7205],{"class":104,"line":116},[102,7204,109],{"class":108},[102,7206,7207],{"class":112}," Phone\n",[102,7209,7210],{"class":104,"line":123},[102,7211,120],{"class":119},[102,7213,7214],{"class":104,"line":130},[102,7215,7216],{"class":119},"public：\n",[102,7218,7219],{"class":104,"line":136},[102,7220,7221],{"class":126},"    \u002F\u002F 赋值(构造函数)\n",[102,7223,7224,7227,7229,7231,7234],{"class":104,"line":142},[102,7225,7226],{"class":112},"    Phone",[102,7228,380],{"class":119},[102,7230,383],{"class":112},[102,7232,7233],{"class":386}," pName",[102,7235,390],{"class":119},[102,7237,7238],{"class":104,"line":148},[102,7239,178],{"class":119},[102,7241,7242,7245,7247],{"class":104,"line":157},[102,7243,7244],{"class":119},"        m_pName",[102,7246,260],{"class":108},[102,7248,7249],{"class":119},"pName;\n",[102,7251,7252,7254,7256,7259],{"class":104,"line":163},[102,7253,470],{"class":119},[102,7255,275],{"class":108},[102,7257,7258],{"class":278},"\"Phone的构造函数调用\"",[102,7260,266],{"class":119},[102,7262,7263],{"class":104,"line":175},[102,7264,205],{"class":119},[102,7266,7267,7270],{"class":104,"line":181},[102,7268,7269],{"class":112},"    ~Phone",[102,7271,172],{"class":119},[102,7273,7274],{"class":104,"line":202},[102,7275,178],{"class":119},[102,7277,7278,7280,7282,7285,7287],{"class":104,"line":208},[102,7279,470],{"class":119},[102,7281,275],{"class":108},[102,7283,7284],{"class":278},"\"Phone析构函数调用\"",[102,7286,275],{"class":108},[102,7288,295],{"class":119},[102,7290,7291],{"class":104,"line":214},[102,7292,205],{"class":119},[102,7294,7295],{"class":104,"line":225},[102,7296,7297],{"class":126},"    \u002F\u002F\n",[102,7299,7300],{"class":104,"line":230},[102,7301,7302],{"class":119},"    string m_PName;\n",[102,7304,7305],{"class":104,"line":236},[102,7306,211],{"class":119},[102,7308,7309,7311],{"class":104,"line":242},[102,7310,109],{"class":108},[102,7312,659],{"class":112},[102,7314,7315],{"class":104,"line":248},[102,7316,120],{"class":119},[102,7318,7319],{"class":104,"line":254},[102,7320,139],{"class":108},[102,7322,7323],{"class":104,"line":269},[102,7324,2553],{"class":126},[102,7326,7327,7329,7331,7333,7335,7337,7339,7342,7345,7347,7350,7353],{"class":104,"line":298},[102,7328,4087],{"class":112},[102,7330,380],{"class":119},[102,7332,383],{"class":112},[102,7334,387],{"class":386},[102,7336,1618],{"class":119},[102,7338,383],{"class":112},[102,7340,7341],{"class":386}," pname",[102,7343,7344],{"class":119},"):",[102,7346,480],{"class":112},[102,7348,7349],{"class":119},"(name),m_phone.",[102,7351,7352],{"class":112},"m_PName",[102,7354,7355],{"class":119},"(pname) \n",[102,7357,7358],{"class":104,"line":502},[102,7359,178],{"class":119},[102,7361,7362,7364,7366,7369],{"class":104,"line":507},[102,7363,470],{"class":119},[102,7365,275],{"class":108},[102,7367,7368],{"class":278},"\"Person的构造函数调用\"",[102,7370,266],{"class":119},[102,7372,7373],{"class":104,"line":512},[102,7374,205],{"class":119},[102,7376,7377,7379],{"class":104,"line":521},[102,7378,4120],{"class":112},[102,7380,172],{"class":119},[102,7382,7383],{"class":104,"line":526},[102,7384,178],{"class":119},[102,7386,7387,7389,7391,7394,7396],{"class":104,"line":532},[102,7388,470],{"class":119},[102,7390,275],{"class":108},[102,7392,7393],{"class":278},"\"Person析构函数调用\"",[102,7395,275],{"class":108},[102,7397,295],{"class":119},[102,7399,7400],{"class":104,"line":538},[102,7401,205],{"class":119},[102,7403,7404],{"class":104,"line":555},[102,7405,7406],{"class":126},"    \u002F\u002F姓名\n",[102,7408,7409],{"class":104,"line":570},[102,7410,357],{"class":119},[102,7412,7413],{"class":104,"line":581},[102,7414,7415],{"class":126},"    \u002F\u002F手机\n",[102,7417,7418],{"class":104,"line":819},[102,7419,7420],{"class":119},"    Phone m_Phone;\n",[102,7422,7423],{"class":104,"line":828},[102,7424,211],{"class":119},[102,7426,7427,7429,7431],{"class":104,"line":837},[102,7428,2780],{"class":108},[102,7430,4162],{"class":112},[102,7432,172],{"class":119},[102,7434,7435],{"class":104,"line":842},[102,7436,120],{"class":119},[102,7438,7439,7441,7443,7445,7447,7449,7452],{"class":104,"line":855},[102,7440,5008],{"class":119},[102,7442,14],{"class":112},[102,7444,380],{"class":119},[102,7446,549],{"class":278},[102,7448,1618],{"class":119},[102,7450,7451],{"class":278},"\"安卓\"",[102,7453,552],{"class":119},[102,7455,7456,7458,7460,7463,7465,7468,7470],{"class":104,"line":860},[102,7457,272],{"class":119},[102,7459,275],{"class":108},[102,7461,7462],{"class":119},"p.Name",[102,7464,275],{"class":108},[102,7466,7467],{"class":278},"\"拿着：\"",[102,7469,275],{"class":108},[102,7471,7472],{"class":119},"p.m_phone.m_PName;\n",[102,7474,7475],{"class":104,"line":871},[102,7476,301],{"class":119},[102,7478,7479,7481,7483],{"class":104,"line":1359},[102,7480,217],{"class":108},[102,7482,220],{"class":112},[102,7484,172],{"class":119},[102,7486,7487],{"class":104,"line":1368},[102,7488,120],{"class":119},[102,7490,7491,7493],{"class":104,"line":1373},[102,7492,4720],{"class":112},[102,7494,578],{"class":119},[102,7496,7497],{"class":104,"line":1378},[102,7498,301],{"class":119},[14,7500,7501],{},"注意：",[93,7503,7505],{"className":95,"code":7504,"language":97,"meta":98,"style":98},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[83,7506,7507,7512],{"__ignoreMap":98},[102,7508,7509],{"class":104,"line":105},[102,7510,7511],{"class":126},"    \u002F\u002F不需要写这个：\n",[102,7513,7514],{"class":104,"line":116},[102,7515,7516],{"class":126},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,7518,7519],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[93,7521,7523],{"className":95,"code":7522,"language":97,"meta":98,"style":98},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[83,7524,7525],{"__ignoreMap":98},[102,7526,7527,7529,7532,7534,7537,7540],{"class":104,"line":105},[102,7528,4621],{"class":112},[102,7530,7531],{"class":119},"(string name.string pname):",[102,7533,480],{"class":112},[102,7535,7536],{"class":119},"(name),",[102,7538,7539],{"class":112},"m_phone",[102,7541,7542],{"class":119},"(pname) {}\n",[14,7544,7545,7546,260,7549],{},"采用的是隐式转换法，实际为如下：\n",[83,7547,7548],{},"m_phone(pname)",[83,7550,7551],{},"Phone m_phone=pname",[14,7553,7554,7557],{},[18,7555,7556],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,7559,7560],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[48,7562,7564],{"id":7563},"_828静态对象","8.2.8静态对象",[14,7566,7567],{},"静态对象在成员对象前static，称为静态对象",[14,7569,7570],{},"静态对象分为两类：",[87,7572,7573],{},[62,7574,7575],{},"静态成员变量",[59,7577,7578,7581,7584],{},[62,7579,7580],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[62,7582,7583],{},"②在编译阶段分配内存",[62,7585,7586],{},"③类内声明，类外初始化",[87,7588,7589],{"start":116},[62,7590,7591],{},"静态成员函数",[59,7593,7594,7597],{},[62,7595,7596],{},"①所有对象共享同一个函数",[62,7598,7599],{},"②静态成员函数只能访问静态成员变量",[7601,7602,7604],"h4",{"id":7603},"_8281静态成员变量","8.2.8.1静态成员变量",[93,7606,7608],{"className":95,"code":7607,"language":97,"meta":98,"style":98},"#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",[83,7609,7610,7616,7626,7632,7636,7640,7645,7650,7655,7664,7668,7672,7676,7684,7688,7692,7697,7710,7714,7722,7726,7732],{"__ignoreMap":98},[102,7611,7612,7614],{"class":104,"line":105},[102,7613,314],{"class":108},[102,7615,317],{"class":278},[102,7617,7618,7620,7622,7624],{"class":104,"line":116},[102,7619,322],{"class":108},[102,7621,325],{"class":108},[102,7623,328],{"class":112},[102,7625,266],{"class":119},[102,7627,7628,7630],{"class":104,"line":123},[102,7629,109],{"class":108},[102,7631,659],{"class":112},[102,7633,7634],{"class":104,"line":130},[102,7635,120],{"class":119},[102,7637,7638],{"class":104,"line":136},[102,7639,139],{"class":108},[102,7641,7642],{"class":104,"line":142},[102,7643,7644],{"class":126},"    \u002F\u002F非静态成员变量\n",[102,7646,7647],{"class":104,"line":148},[102,7648,7649],{"class":126},"    \u002F\u002F int m_A;\n",[102,7651,7652],{"class":104,"line":157},[102,7653,7654],{"class":126},"    \u002F\u002F定义静态成员变量\n",[102,7656,7657,7660,7662],{"class":104,"line":163},[102,7658,7659],{"class":108},"    static",[102,7661,6392],{"class":108},[102,7663,6989],{"class":119},[102,7665,7666],{"class":104,"line":175},[102,7667,652],{"emptyLinePlaceholder":651},[102,7669,7670],{"class":104,"line":181},[102,7671,652],{"emptyLinePlaceholder":651},[102,7673,7674],{"class":104,"line":202},[102,7675,211],{"class":119},[102,7677,7678,7680,7682],{"class":104,"line":208},[102,7679,2780],{"class":108},[102,7681,4162],{"class":112},[102,7683,172],{"class":119},[102,7685,7686],{"class":104,"line":214},[102,7687,120],{"class":119},[102,7689,7690],{"class":104,"line":225},[102,7691,804],{"class":119},[102,7693,7694],{"class":104,"line":230},[102,7695,7696],{"class":126},"    \u002F\u002F输出类成员变量这块内存\n",[102,7698,7699,7701,7703,7706,7708],{"class":104,"line":236},[102,7700,272],{"class":119},[102,7702,275],{"class":108},[102,7704,7705],{"class":119},"p.m_A",[102,7707,275],{"class":108},[102,7709,295],{"class":119},[102,7711,7712],{"class":104,"line":242},[102,7713,301],{"class":119},[102,7715,7716,7718,7720],{"class":104,"line":248},[102,7717,217],{"class":108},[102,7719,220],{"class":112},[102,7721,172],{"class":119},[102,7723,7724],{"class":104,"line":254},[102,7725,120],{"class":119},[102,7727,7728,7730],{"class":104,"line":269},[102,7729,4720],{"class":112},[102,7731,172],{"class":119},[102,7733,7734],{"class":104,"line":298},[102,7735,301],{"class":119},[14,7737,7738],{},"此时输出是报错的：无法解析外部命令",[14,7740,7741],{},"解决这一问题：必须用到类内声明，类外初始化操作",[93,7743,7745],{"className":95,"code":7744,"language":97,"meta":98,"style":98},"#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",[83,7746,7747,7753,7763,7769,7773,7777,7782,7790,7794,7799,7814,7822,7826,7830,7835,7840,7852,7857,7869,7874,7879,7892,7896,7904,7908,7914],{"__ignoreMap":98},[102,7748,7749,7751],{"class":104,"line":105},[102,7750,314],{"class":108},[102,7752,317],{"class":278},[102,7754,7755,7757,7759,7761],{"class":104,"line":116},[102,7756,322],{"class":108},[102,7758,325],{"class":108},[102,7760,328],{"class":112},[102,7762,266],{"class":119},[102,7764,7765,7767],{"class":104,"line":123},[102,7766,109],{"class":108},[102,7768,659],{"class":112},[102,7770,7771],{"class":104,"line":130},[102,7772,120],{"class":119},[102,7774,7775],{"class":104,"line":136},[102,7776,139],{"class":108},[102,7778,7779],{"class":104,"line":142},[102,7780,7781],{"class":126},"    \u002F\u002F类内声明\n",[102,7783,7784,7786,7788],{"class":104,"line":148},[102,7785,7659],{"class":108},[102,7787,6392],{"class":108},[102,7789,6989],{"class":119},[102,7791,7792],{"class":104,"line":157},[102,7793,211],{"class":119},[102,7795,7796],{"class":104,"line":163},[102,7797,7798],{"class":126},"\u002F\u002F类外初始化\n",[102,7800,7801,7803,7805,7808,7810,7812],{"class":104,"line":175},[102,7802,217],{"class":108},[102,7804,1074],{"class":112},[102,7806,7807],{"class":119},"::m_A",[102,7809,260],{"class":108},[102,7811,263],{"class":187},[102,7813,266],{"class":119},[102,7815,7816,7818,7820],{"class":104,"line":181},[102,7817,2780],{"class":108},[102,7819,4162],{"class":112},[102,7821,172],{"class":119},[102,7823,7824],{"class":104,"line":202},[102,7825,120],{"class":119},[102,7827,7828],{"class":104,"line":208},[102,7829,804],{"class":119},[102,7831,7832],{"class":104,"line":214},[102,7833,7834],{"class":126},"    \u002F\u002F访问变量的原内存空间\n",[102,7836,7837],{"class":104,"line":225},[102,7838,7839],{"class":126},"    \u002F\u002F100\n",[102,7841,7842,7844,7846,7848,7850],{"class":104,"line":230},[102,7843,272],{"class":119},[102,7845,275],{"class":108},[102,7847,7705],{"class":119},[102,7849,275],{"class":108},[102,7851,295],{"class":119},[102,7853,7854],{"class":104,"line":236},[102,7855,7856],{"class":119},"    Person p2;\n",[102,7858,7859,7862,7864,7867],{"class":104,"line":242},[102,7860,7861],{"class":119},"    p2.m_A",[102,7863,260],{"class":108},[102,7865,7866],{"class":187},"200",[102,7868,266],{"class":119},[102,7870,7871],{"class":104,"line":248},[102,7872,7873],{"class":126},"    \u002F\u002F继续访问这片空间\n",[102,7875,7876],{"class":104,"line":254},[102,7877,7878],{"class":126},"    \u002F\u002F200\n",[102,7880,7881,7883,7885,7888,7890],{"class":104,"line":269},[102,7882,272],{"class":119},[102,7884,275],{"class":108},[102,7886,7887],{"class":119},"p2.m_A",[102,7889,275],{"class":108},[102,7891,295],{"class":119},[102,7893,7894],{"class":104,"line":298},[102,7895,301],{"class":119},[102,7897,7898,7900,7902],{"class":104,"line":502},[102,7899,217],{"class":108},[102,7901,220],{"class":112},[102,7903,172],{"class":119},[102,7905,7906],{"class":104,"line":507},[102,7907,120],{"class":119},[102,7909,7910,7912],{"class":104,"line":512},[102,7911,4720],{"class":112},[102,7913,578],{"class":119},[102,7915,7916],{"class":104,"line":521},[102,7917,301],{"class":119},[14,7919,7920],{},[18,7921,7922],{},"静态变量的访问",[93,7924,7926],{"className":95,"code":7925,"language":97,"meta":98,"style":98},"#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",[83,7927,7928,7934,7944,7950,7954,7958,7962,7970,7974,7979,7987,7991,7995,8009,8024,8032,8036,8041,8046,8051,8056,8068,8073,8078,8092,8109,8113,8121,8125,8131],{"__ignoreMap":98},[102,7929,7930,7932],{"class":104,"line":105},[102,7931,314],{"class":108},[102,7933,317],{"class":278},[102,7935,7936,7938,7940,7942],{"class":104,"line":116},[102,7937,322],{"class":108},[102,7939,325],{"class":108},[102,7941,328],{"class":112},[102,7943,266],{"class":119},[102,7945,7946,7948],{"class":104,"line":123},[102,7947,109],{"class":108},[102,7949,659],{"class":112},[102,7951,7952],{"class":104,"line":130},[102,7953,120],{"class":119},[102,7955,7956],{"class":104,"line":136},[102,7957,139],{"class":108},[102,7959,7960],{"class":104,"line":142},[102,7961,7781],{"class":126},[102,7963,7964,7966,7968],{"class":104,"line":148},[102,7965,7659],{"class":108},[102,7967,6392],{"class":108},[102,7969,6989],{"class":119},[102,7971,7972],{"class":104,"line":157},[102,7973,710],{"class":108},[102,7975,7976],{"class":104,"line":163},[102,7977,7978],{"class":126},"    \u002F\u002F静态成员变量也是有访问权限的\n",[102,7980,7981,7983,7985],{"class":104,"line":175},[102,7982,7659],{"class":108},[102,7984,6392],{"class":108},[102,7986,6996],{"class":119},[102,7988,7989],{"class":104,"line":181},[102,7990,211],{"class":119},[102,7992,7993],{"class":104,"line":202},[102,7994,7798],{"class":126},[102,7996,7997,7999,8001,8003,8005,8007],{"class":104,"line":208},[102,7998,217],{"class":108},[102,8000,1074],{"class":112},[102,8002,7807],{"class":119},[102,8004,260],{"class":108},[102,8006,263],{"class":187},[102,8008,266],{"class":119},[102,8010,8011,8013,8015,8018,8020,8022],{"class":104,"line":214},[102,8012,217],{"class":108},[102,8014,1074],{"class":112},[102,8016,8017],{"class":119},"::m_B",[102,8019,260],{"class":108},[102,8021,5016],{"class":187},[102,8023,266],{"class":119},[102,8025,8026,8028,8030],{"class":104,"line":225},[102,8027,2780],{"class":108},[102,8029,4542],{"class":112},[102,8031,172],{"class":119},[102,8033,8034],{"class":104,"line":230},[102,8035,120],{"class":119},[102,8037,8038],{"class":104,"line":236},[102,8039,8040],{"class":126},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[102,8042,8043],{"class":104,"line":242},[102,8044,8045],{"class":126},"    \u002F\u002F静态成员变量有两种访问方式：\n",[102,8047,8048],{"class":104,"line":248},[102,8049,8050],{"class":126},"    \u002F\u002F1.通过对象进行访问\n",[102,8052,8053],{"class":104,"line":254},[102,8054,8055],{"class":119},"    Person p;  \n",[102,8057,8058,8060,8062,8064,8066],{"class":104,"line":269},[102,8059,272],{"class":119},[102,8061,275],{"class":108},[102,8063,7705],{"class":119},[102,8065,275],{"class":108},[102,8067,295],{"class":119},[102,8069,8070],{"class":104,"line":298},[102,8071,8072],{"class":126},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[102,8074,8075],{"class":104,"line":502},[102,8076,8077],{"class":126},"    \u002F\u002F2.通过类名进行访问\n",[102,8079,8080,8082,8084,8086,8088,8090],{"class":104,"line":507},[102,8081,272],{"class":119},[102,8083,275],{"class":108},[102,8085,4621],{"class":112},[102,8087,7807],{"class":119},[102,8089,275],{"class":108},[102,8091,295],{"class":119},[102,8093,8094,8096,8098,8100,8102,8104,8106],{"class":104,"line":512},[102,8095,272],{"class":119},[102,8097,275],{"class":108},[102,8099,4621],{"class":112},[102,8101,8017],{"class":119},[102,8103,275],{"class":108},[102,8105,5171],{"class":119},[102,8107,8108],{"class":126}," \u002F\u002F没有访问权限，报错\n",[102,8110,8111],{"class":104,"line":521},[102,8112,301],{"class":119},[102,8114,8115,8117,8119],{"class":104,"line":526},[102,8116,217],{"class":108},[102,8118,220],{"class":112},[102,8120,172],{"class":119},[102,8122,8123],{"class":104,"line":532},[102,8124,120],{"class":119},[102,8126,8127,8129],{"class":104,"line":538},[102,8128,4727],{"class":112},[102,8130,578],{"class":119},[102,8132,8133],{"class":104,"line":555},[102,8134,301],{"class":119},[7601,8136,8138],{"id":8137},"_8282静态成员函数","8.2.8.2静态成员函数",[14,8140,8141],{},"1.静态成员函数定义与访问",[93,8143,8145],{"className":95,"code":8144,"language":97,"meta":98,"style":98},"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",[83,8146,8147,8153,8157,8161,8166,8177,8181,8195,8199,8203,8211,8215,8220,8225,8229,8238,8243,8253],{"__ignoreMap":98},[102,8148,8149,8151],{"class":104,"line":105},[102,8150,109],{"class":108},[102,8152,659],{"class":112},[102,8154,8155],{"class":104,"line":116},[102,8156,120],{"class":119},[102,8158,8159],{"class":104,"line":123},[102,8160,139],{"class":108},[102,8162,8163],{"class":104,"line":130},[102,8164,8165],{"class":126},"    \u002F\u002F在公共权限下定义静态成员函数\n",[102,8167,8168,8170,8173,8175],{"class":104,"line":136},[102,8169,7659],{"class":108},[102,8171,8172],{"class":108}," void",[102,8174,732],{"class":112},[102,8176,172],{"class":119},[102,8178,8179],{"class":104,"line":142},[102,8180,178],{"class":119},[102,8182,8183,8186,8188,8191,8193],{"class":104,"line":148},[102,8184,8185],{"class":119},"        coout",[102,8187,275],{"class":108},[102,8189,8190],{"class":278},"\"静态成员函数的调用\"",[102,8192,275],{"class":108},[102,8194,295],{"class":119},[102,8196,8197],{"class":104,"line":157},[102,8198,205],{"class":119},[102,8200,8201],{"class":104,"line":163},[102,8202,211],{"class":119},[102,8204,8205,8207,8209],{"class":104,"line":175},[102,8206,2780],{"class":108},[102,8208,4162],{"class":112},[102,8210,172],{"class":119},[102,8212,8213],{"class":104,"line":181},[102,8214,120],{"class":119},[102,8216,8217],{"class":104,"line":202},[102,8218,8219],{"class":126},"    \u002F\u002F静态成员函数的调用方式:\n",[102,8221,8222],{"class":104,"line":208},[102,8223,8224],{"class":126},"    \u002F\u002F1.通过对象访问\n",[102,8226,8227],{"class":104,"line":214},[102,8228,804],{"class":119},[102,8230,8231,8233,8236],{"class":104,"line":225},[102,8232,1387],{"class":119},[102,8234,8235],{"class":112},"func",[102,8237,578],{"class":119},[102,8239,8240],{"class":104,"line":230},[102,8241,8242],{"class":126},"    \u002F\u002F2.通过类名访问\n",[102,8244,8245,8247,8249,8251],{"class":104,"line":236},[102,8246,4087],{"class":112},[102,8248,3299],{"class":119},[102,8250,8235],{"class":112},[102,8252,578],{"class":119},[102,8254,8255],{"class":104,"line":242},[102,8256,301],{"class":119},[87,8258,8259],{"start":116},[62,8260,8261],{},"静态成员函数只能访问静态成员变量",[93,8263,8265],{"className":95,"code":8264,"language":97,"meta":98,"style":98},"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",[83,8266,8267,8273,8277,8281,8285,8295,8299,8313,8318,8330,8334,8345,8355,8359,8363,8367,8378,8382,8395,8399,8403,8407,8411,8426,8434,8438,8442,8446,8450,8458,8462,8472,8477,8481,8489,8493,8499],{"__ignoreMap":98},[102,8268,8269,8271],{"class":104,"line":105},[102,8270,109],{"class":108},[102,8272,659],{"class":112},[102,8274,8275],{"class":104,"line":116},[102,8276,120],{"class":119},[102,8278,8279],{"class":104,"line":123},[102,8280,139],{"class":108},[102,8282,8283],{"class":104,"line":130},[102,8284,8165],{"class":126},[102,8286,8287,8289,8291,8293],{"class":104,"line":136},[102,8288,7659],{"class":108},[102,8290,8172],{"class":108},[102,8292,732],{"class":112},[102,8294,172],{"class":119},[102,8296,8297],{"class":104,"line":142},[102,8298,178],{"class":119},[102,8300,8301,8304,8306,8308,8310],{"class":104,"line":148},[102,8302,8303],{"class":119},"        m_A",[102,8305,260],{"class":108},[102,8307,5569],{"class":187},[102,8309,992],{"class":119},[102,8311,8312],{"class":126}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[102,8314,8315],{"class":104,"line":157},[102,8316,8317],{"class":126},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[102,8319,8320,8322,8324,8326,8328],{"class":104,"line":163},[102,8321,8185],{"class":119},[102,8323,275],{"class":108},[102,8325,8190],{"class":278},[102,8327,275],{"class":108},[102,8329,295],{"class":119},[102,8331,8332],{"class":104,"line":175},[102,8333,205],{"class":119},[102,8335,8336,8338,8340,8342],{"class":104,"line":181},[102,8337,7659],{"class":108},[102,8339,6392],{"class":108},[102,8341,951],{"class":119},[102,8343,8344],{"class":126}," \u002F\u002F静态成员变量\n",[102,8346,8347,8349,8352],{"class":104,"line":202},[102,8348,151],{"class":108},[102,8350,8351],{"class":119}," m_B;",[102,8353,8354],{"class":126}," \u002F\u002F非静态成员变量\n",[102,8356,8357],{"class":104,"line":208},[102,8358,652],{"emptyLinePlaceholder":651},[102,8360,8361],{"class":104,"line":214},[102,8362,710],{"class":108},[102,8364,8365],{"class":104,"line":225},[102,8366,7978],{"class":126},[102,8368,8369,8371,8373,8376],{"class":104,"line":230},[102,8370,7659],{"class":108},[102,8372,8172],{"class":108},[102,8374,8375],{"class":112}," func2",[102,8377,172],{"class":119},[102,8379,8380],{"class":104,"line":236},[102,8381,178],{"class":119},[102,8383,8384,8386,8388,8391,8393],{"class":104,"line":242},[102,8385,470],{"class":119},[102,8387,275],{"class":108},[102,8389,8390],{"class":278},"\"这是私有权限下的静态函数调用\"",[102,8392,275],{"class":108},[102,8394,295],{"class":119},[102,8396,8397],{"class":104,"line":248},[102,8398,205],{"class":119},[102,8400,8401],{"class":104,"line":254},[102,8402,652],{"emptyLinePlaceholder":651},[102,8404,8405],{"class":104,"line":269},[102,8406,652],{"emptyLinePlaceholder":651},[102,8408,8409],{"class":104,"line":298},[102,8410,211],{"class":119},[102,8412,8413,8415,8417,8419,8421,8424],{"class":104,"line":502},[102,8414,217],{"class":108},[102,8416,1074],{"class":112},[102,8418,7807],{"class":119},[102,8420,260],{"class":108},[102,8422,8423],{"class":187},"0",[102,8425,266],{"class":119},[102,8427,8428,8430,8432],{"class":104,"line":507},[102,8429,2780],{"class":108},[102,8431,4162],{"class":112},[102,8433,172],{"class":119},[102,8435,8436],{"class":104,"line":512},[102,8437,120],{"class":119},[102,8439,8440],{"class":104,"line":521},[102,8441,8219],{"class":126},[102,8443,8444],{"class":104,"line":526},[102,8445,8224],{"class":126},[102,8447,8448],{"class":104,"line":532},[102,8449,804],{"class":119},[102,8451,8452,8454,8456],{"class":104,"line":538},[102,8453,1387],{"class":119},[102,8455,8235],{"class":112},[102,8457,578],{"class":119},[102,8459,8460],{"class":104,"line":555},[102,8461,8242],{"class":126},[102,8463,8464,8466,8468,8470],{"class":104,"line":570},[102,8465,4087],{"class":112},[102,8467,3299],{"class":119},[102,8469,8235],{"class":112},[102,8471,578],{"class":119},[102,8473,8474],{"class":104,"line":581},[102,8475,8476],{"class":126},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[102,8478,8479],{"class":104,"line":819},[102,8480,301],{"class":119},[102,8482,8483,8485,8487],{"class":104,"line":828},[102,8484,217],{"class":108},[102,8486,220],{"class":112},[102,8488,172],{"class":119},[102,8490,8491],{"class":104,"line":837},[102,8492,120],{"class":119},[102,8494,8495,8497],{"class":104,"line":842},[102,8496,4720],{"class":112},[102,8498,578],{"class":119},[102,8500,8501],{"class":104,"line":855},[102,8502,301],{"class":119},[48,8504,8506],{"id":8505},"_83c对象模型和this指针","8.3C++对象模型和this指针",[7601,8508,8510],{"id":8509},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,8512,8513],{},"在c++中，类内的成员变量和成员函数分开存储",[14,8515,8516],{},"只有非静态成员变量才属于类的对象上",[8518,8519,8521],"h5",{"id":8520},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[93,8523,8525],{"className":95,"code":8524,"language":97,"meta":98,"style":98},"#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",[83,8526,8527,8534,8544,8550,8554,8558,8562,8570,8574,8578,8602,8606,8614,8618,8624],{"__ignoreMap":98},[102,8528,8529,8531],{"class":104,"line":105},[102,8530,314],{"class":108},[102,8532,8533],{"class":278},"\u003Ciostraem>\n",[102,8535,8536,8538,8540,8542],{"class":104,"line":116},[102,8537,322],{"class":108},[102,8539,325],{"class":108},[102,8541,328],{"class":112},[102,8543,266],{"class":119},[102,8545,8546,8548],{"class":104,"line":123},[102,8547,109],{"class":108},[102,8549,659],{"class":112},[102,8551,8552],{"class":104,"line":130},[102,8553,120],{"class":119},[102,8555,8556],{"class":104,"line":136},[102,8557,652],{"emptyLinePlaceholder":651},[102,8559,8560],{"class":104,"line":142},[102,8561,211],{"class":119},[102,8563,8564,8566,8568],{"class":104,"line":148},[102,8565,2780],{"class":108},[102,8567,4162],{"class":112},[102,8569,172],{"class":119},[102,8571,8572],{"class":104,"line":157},[102,8573,120],{"class":119},[102,8575,8576],{"class":104,"line":163},[102,8577,804],{"class":119},[102,8579,8580,8582,8584,8587,8589,8592,8595,8597,8599],{"class":104,"line":175},[102,8581,272],{"class":119},[102,8583,275],{"class":108},[102,8585,8586],{"class":278},"\"size of p=\"",[102,8588,275],{"class":108},[102,8590,8591],{"class":112},"sizeoif",[102,8593,8594],{"class":119},"(p)",[102,8596,275],{"class":108},[102,8598,5171],{"class":119},[102,8600,8601],{"class":126}," \u002F\u002F查看这个空类的占用的内存空间\n",[102,8603,8604],{"class":104,"line":181},[102,8605,301],{"class":119},[102,8607,8608,8610,8612],{"class":104,"line":202},[102,8609,217],{"class":108},[102,8611,220],{"class":112},[102,8613,172],{"class":119},[102,8615,8616],{"class":104,"line":208},[102,8617,120],{"class":119},[102,8619,8620,8622],{"class":104,"line":214},[102,8621,4720],{"class":112},[102,8623,578],{"class":119},[102,8625,8626],{"class":104,"line":225},[102,8627,301],{"class":119},[14,8629,8630],{},"输出结果为：size of p=1",[14,8632,8633],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,8635,8636],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[8518,8638,8640],{"id":8639},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[93,8642,8644],{"className":95,"code":8643,"language":97,"meta":98,"style":98},"#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",[83,8645,8646,8652,8662,8670,8674,8683,8687,8695,8699,8703,8723,8727,8731,8739,8743,8749],{"__ignoreMap":98},[102,8647,8648,8650],{"class":104,"line":105},[102,8649,314],{"class":108},[102,8651,317],{"class":278},[102,8653,8654,8656,8658,8660],{"class":104,"line":116},[102,8655,322],{"class":108},[102,8657,325],{"class":108},[102,8659,328],{"class":112},[102,8661,266],{"class":119},[102,8663,8664,8666,8668],{"class":104,"line":123},[102,8665,109],{"class":108},[102,8667,1074],{"class":112},[102,8669,4328],{"class":119},[102,8671,8672],{"class":104,"line":130},[102,8673,120],{"class":119},[102,8675,8676,8678,8680],{"class":104,"line":136},[102,8677,151],{"class":108},[102,8679,951],{"class":119},[102,8681,8682],{"class":126},"\u002F\u002F非静态成员变量\n",[102,8684,8685],{"class":104,"line":142},[102,8686,211],{"class":119},[102,8688,8689,8691,8693],{"class":104,"line":148},[102,8690,2780],{"class":108},[102,8692,4162],{"class":112},[102,8694,172],{"class":119},[102,8696,8697],{"class":104,"line":157},[102,8698,120],{"class":119},[102,8700,8701],{"class":104,"line":163},[102,8702,804],{"class":119},[102,8704,8705,8707,8709,8711,8714,8716,8718,8720],{"class":104,"line":175},[102,8706,272],{"class":119},[102,8708,275],{"class":108},[102,8710,8586],{"class":278},[102,8712,8713],{"class":108},"\u003C\u003Csizeof",[102,8715,8594],{"class":119},[102,8717,275],{"class":108},[102,8719,5171],{"class":119},[102,8721,8722],{"class":126}," \u002F\u002F查看不是空对象时占用多少内存\n",[102,8724,8725],{"class":104,"line":181},[102,8726,652],{"emptyLinePlaceholder":651},[102,8728,8729],{"class":104,"line":202},[102,8730,301],{"class":119},[102,8732,8733,8735,8737],{"class":104,"line":208},[102,8734,217],{"class":108},[102,8736,220],{"class":112},[102,8738,172],{"class":119},[102,8740,8741],{"class":104,"line":214},[102,8742,120],{"class":119},[102,8744,8745,8747],{"class":104,"line":225},[102,8746,4720],{"class":112},[102,8748,578],{"class":119},[102,8750,8751],{"class":104,"line":230},[102,8752,301],{"class":119},[14,8754,8755],{},"输出结果：size of p=4",[14,8757,8758],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[87,8760,8761],{},[62,8762,8763],{},"如果加上非静态成员变量，Person类修改如下",[93,8765,8767],{"className":95,"code":8766,"language":97,"meta":98,"style":98},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[83,8768,8769,8775,8779,8785,8793,8797,8802],{"__ignoreMap":98},[102,8770,8771,8773],{"class":104,"line":105},[102,8772,109],{"class":108},[102,8774,659],{"class":112},[102,8776,8777],{"class":104,"line":116},[102,8778,120],{"class":119},[102,8780,8781,8783],{"class":104,"line":123},[102,8782,151],{"class":108},[102,8784,6989],{"class":119},[102,8786,8787,8789,8791],{"class":104,"line":130},[102,8788,7659],{"class":108},[102,8790,6392],{"class":108},[102,8792,6996],{"class":119},[102,8794,8795],{"class":104,"line":136},[102,8796,211],{"class":119},[102,8798,8799],{"class":104,"line":142},[102,8800,8801],{"class":126},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[102,8803,8804,8806,8808,8810,8812,8814],{"class":104,"line":148},[102,8805,217],{"class":108},[102,8807,1074],{"class":112},[102,8809,8017],{"class":119},[102,8811,260],{"class":108},[102,8813,8423],{"class":187},[102,8815,266],{"class":119},[14,8817,8818],{},"输出结果：4",[14,8820,8821],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[87,8823,8824],{"start":116},[62,8825,8826],{},"加上非静态成员函数",[93,8828,8830],{"className":95,"code":8829,"language":97,"meta":98,"style":98},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[83,8831,8832,8839,8843,8849,8857,8861,8865,8869],{"__ignoreMap":98},[102,8833,8834,8836],{"class":104,"line":105},[102,8835,109],{"class":108},[102,8837,8838],{"class":112},"  Person\n",[102,8840,8841],{"class":104,"line":116},[102,8842,120],{"class":119},[102,8844,8845,8847],{"class":104,"line":123},[102,8846,151],{"class":108},[102,8848,6989],{"class":119},[102,8850,8851,8853,8855],{"class":104,"line":130},[102,8852,374],{"class":108},[102,8854,732],{"class":112},[102,8856,172],{"class":119},[102,8858,8859],{"class":104,"line":136},[102,8860,178],{"class":119},[102,8862,8863],{"class":104,"line":142},[102,8864,652],{"emptyLinePlaceholder":651},[102,8866,8867],{"class":104,"line":148},[102,8868,205],{"class":119},[102,8870,8871],{"class":104,"line":157},[102,8872,211],{"class":119},[14,8874,8875],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[87,8877,8878],{"start":123},[62,8879,8880],{},"加上静态成员函数",[93,8882,8884],{"className":95,"code":8883,"language":97,"meta":98,"style":98},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[83,8885,8886,8892,8896,8902,8910,8914,8918,8922,8933,8937,8941,8945],{"__ignoreMap":98},[102,8887,8888,8890],{"class":104,"line":105},[102,8889,109],{"class":108},[102,8891,8838],{"class":112},[102,8893,8894],{"class":104,"line":116},[102,8895,120],{"class":119},[102,8897,8898,8900],{"class":104,"line":123},[102,8899,151],{"class":108},[102,8901,6989],{"class":119},[102,8903,8904,8906,8908],{"class":104,"line":130},[102,8905,374],{"class":108},[102,8907,732],{"class":112},[102,8909,172],{"class":119},[102,8911,8912],{"class":104,"line":136},[102,8913,178],{"class":119},[102,8915,8916],{"class":104,"line":142},[102,8917,652],{"emptyLinePlaceholder":651},[102,8919,8920],{"class":104,"line":148},[102,8921,205],{"class":119},[102,8923,8924,8926,8928,8931],{"class":104,"line":157},[102,8925,7659],{"class":108},[102,8927,8172],{"class":108},[102,8929,8930],{"class":112}," func1",[102,8932,172],{"class":119},[102,8934,8935],{"class":104,"line":163},[102,8936,178],{"class":119},[102,8938,8939],{"class":104,"line":175},[102,8940,652],{"emptyLinePlaceholder":651},[102,8942,8943],{"class":104,"line":181},[102,8944,205],{"class":119},[102,8946,8947],{"class":104,"line":202},[102,8948,211],{"class":119},[14,8950,8818],{},[14,8952,8953],{},"解释：静态成员函数也不属于类上",[8955,8956,8957],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html 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":98,"searchDepth":116,"depth":116,"links":8959},[8960,8966],{"id":45,"depth":116,"text":46,"children":8961},[8962,8963,8964,8965],{"id":50,"depth":123,"text":51},{"id":876,"depth":123,"text":877},{"id":1051,"depth":123,"text":1052},{"id":1543,"depth":123,"text":1544},{"id":3944,"depth":116,"text":3945,"children":8967},[8968,8969,8970,8971,8972,8973,8974,8975,8976],{"id":3956,"depth":123,"text":3957},{"id":4252,"depth":123,"text":4253},{"id":4750,"depth":123,"text":4751},{"id":5857,"depth":123,"text":5858},{"id":6282,"depth":123,"text":6283},{"id":6766,"depth":123,"text":6767},{"id":7148,"depth":123,"text":7149},{"id":7563,"depth":123,"text":7564},{"id":8505,"depth":123,"text":8506},"C++面向对象的三大特性为封装、继承、多态","md",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":5,"description":8977},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",[8985,13971,15065,16476,19421,20766,22251,23337,31234,31247,31846,31872,31996,32237,32302,32320,32333,32380,32504,32673,32872,33052,33257,33393,33488,33525,33538,33848,34589,35297,35318,36338,37969,38120,38133,38145,38446,58258,58273,58290,58323,61195,84543,100688,100709,100822,100943,101713,102376,102737,102775,102881,102981,103024,103050,103111,104765,104866,104891,105382,105882,106962,107245,107987,108489,108501,110517,112181,113684,115382,117299,119218,121240,124710,125142,125605,126354,129298,129646,129668,130024,133331,133343,133746,133769,133916,134083,134288,134589,135146,135803,137734,139332,139981,141475,142906,144141,145835,147587,149997,150113,151048,151259,152144,153379,153607,153620,154775,157187,159555,162876,165353,166997,168774,170787,173839,176019,178546,180740],{"id":8986,"title":8987,"body":8988,"description":98,"extension":8978,"meta":13966,"navigation":651,"path":13967,"seo":13968,"stem":13969,"__hash__":13970},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":8989,"toc":13938},[8990,8993,8997,9000,9004,9015,9019,9023,9026,9029,9032,9035,9038,9061,9065,9068,9071,9074,9077,9124,9128,9146,9148,9162,9165,9173,9176,10019,10026,10042,10046,10129,10133,10139,10224,10228,10264,10268,10328,10332,10336,10342,10353,10357,10362,10366,10371,10375,10380,10384,10388,10393,10638,10643,10781,10786,11030,11033,11041,11045,11050,11151,11154,11445,11454,11553,11556,11559,11562,11565,11822,11827,11966,11969,12147,12150,12277,12280,12432,12436,12441,12444,12455,12463,12466,12573,12577,12581,12586,12636,12641,12646,12670,12675,12728,12731,12736,12910,12915,13199,13204,13601,13605,13610,13667,13672,13680,13683,13823,13826,13935],[10,8991,8987],{"id":8992},"_1基础入门",[43,8994,8996],{"id":8995},"_11注释","1.1注释",[14,8998,8999],{},"\u002F\u002F或者\u002F* *\u002F",[43,9001,9003],{"id":9002},"_12命名","1.2命名",[87,9005,9006,9009,9012],{},[62,9007,9008],{},"字母数字下划线",[62,9010,9011],{},"开头必须是字母或_",[62,9013,9014],{},"不能使用关键词",[43,9016,9018],{"id":9017},"_13数据类型","1.3数据类型",[48,9020,9022],{"id":9021},"_131整形","1.3.1整形",[14,9024,9025],{},"short 短整形 2",[14,9027,9028],{},"int 整形 4",[14,9030,9031],{},"long 长整形 win4 linux32位4 linux64位8",[14,9033,9034],{},"long long 长长整形 8",[14,9036,9037],{},"利用sizeof可以求数据类型占用的内存空间大小",[93,9039,9041],{"className":95,"code":9040,"language":97,"meta":98,"style":98},"sizeof(int)\nsizeof(num)\n",[83,9042,9043,9054],{"__ignoreMap":98},[102,9044,9045,9048,9050,9052],{"class":104,"line":105},[102,9046,9047],{"class":108},"sizeof",[102,9049,380],{"class":119},[102,9051,217],{"class":108},[102,9053,390],{"class":119},[102,9055,9056,9058],{"class":104,"line":116},[102,9057,9047],{"class":108},[102,9059,9060],{"class":119},"(num)\n",[48,9062,9064],{"id":9063},"_132浮点型","1.3.2浮点型",[14,9066,9067],{},"float 单精度 4节 7位有效数字",[14,9069,9070],{},"double 双精度 8节 15-16有效数字",[14,9072,9073],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,9075,9076],{},"注意点：",[93,9078,9080],{"className":95,"code":9079,"language":97,"meta":98,"style":98},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[83,9081,9082,9103],{"__ignoreMap":98},[102,9083,9084,9087,9090,9092,9095,9098,9100],{"class":104,"line":105},[102,9085,9086],{"class":108},"float",[102,9088,9089],{"class":119}," f1",[102,9091,260],{"class":108},[102,9093,9094],{"class":187},"3.14",[102,9096,9097],{"class":108},"f",[102,9099,992],{"class":119},[102,9101,9102],{"class":126}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[102,9104,9105,9107,9110,9112,9114,9117,9119,9121],{"class":104,"line":116},[102,9106,9086],{"class":108},[102,9108,9109],{"class":119}," f2",[102,9111,260],{"class":108},[102,9113,7049],{"class":187},[102,9115,9116],{"class":108},"e",[102,9118,7044],{"class":187},[102,9120,992],{"class":119},[102,9122,9123],{"class":126}," \u002F\u002F科学记数法\n",[48,9125,9127],{"id":9126},"_133字符型","1.3.3字符型",[93,9129,9131],{"className":95,"code":9130,"language":97,"meta":98,"style":98},"char ch='a'\n",[83,9132,9133],{"__ignoreMap":98},[102,9134,9135,9138,9141,9143],{"class":104,"line":105},[102,9136,9137],{"class":108},"char",[102,9139,9140],{"class":119}," ch",[102,9142,260],{"class":108},[102,9144,9145],{"class":278},"'a'\n",[14,9147,9076],{},[87,9149,9150,9153,9156,9159],{},[62,9151,9152],{},"在显示字符型变量时，只能单引号，双引号x",[62,9154,9155],{},"单引号内只能一个字符，不能字符串",[62,9157,9158],{},"c和c++字符型变量只占用一个字符",[62,9160,9161],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,9163,9164],{},"ASCII码大致由以下两部分组成：",[87,9166,9167,9170],{},[62,9168,9169],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[62,9171,9172],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,9174,9175],{},"ASCII码表格：",[9177,9178,9179,9222],"table",{},[9180,9181,9182],"thead",{},[9183,9184,9185,9192,9197,9201,9206,9210,9214,9218],"tr",{},[9186,9187,9188,9191],"th",{},[18,9189,9190],{},"ASCII","值",[9186,9193,9194],{},[18,9195,9196],{},"控制字符",[9186,9198,9199,9191],{},[18,9200,9190],{},[9186,9202,9203],{},[18,9204,9205],{},"字符",[9186,9207,9208,9191],{},[18,9209,9190],{},[9186,9211,9212],{},[18,9213,9205],{},[9186,9215,9216,9191],{},[18,9217,9190],{},[9186,9219,9220],{},[18,9221,9205],{},[9223,9224,9225,9251,9276,9301,9325,9350,9375,9399,9424,9449,9474,9498,9523,9547,9572,9598,9624,9648,9673,9696,9721,9745,9770,9795,9819,9843,9868,9894,9919,9943,9968,9993],"tbody",{},[9183,9226,9227,9230,9233,9236,9239,9242,9245,9248],{},[9228,9229,8423],"td",{},[9228,9231,9232],{},"NUT",[9228,9234,9235],{},"32",[9228,9237,9238],{},"(space)",[9228,9240,9241],{},"64",[9228,9243,9244],{},"@",[9228,9246,9247],{},"96",[9228,9249,9250],{},"、",[9183,9252,9253,9255,9258,9261,9264,9267,9270,9273],{},[9228,9254,7039],{},[9228,9256,9257],{},"SOH",[9228,9259,9260],{},"33",[9228,9262,9263],{},"!",[9228,9265,9266],{},"65",[9228,9268,9269],{},"A",[9228,9271,9272],{},"97",[9228,9274,9275],{},"a",[9183,9277,9278,9280,9283,9286,9289,9292,9295,9298],{},[9228,9279,7044],{},[9228,9281,9282],{},"STX",[9228,9284,9285],{},"34",[9228,9287,9288],{},"\"",[9228,9290,9291],{},"66",[9228,9293,9294],{},"B",[9228,9296,9297],{},"98",[9228,9299,9300],{},"b",[9183,9302,9303,9305,9308,9311,9314,9317,9320,9323],{},[9228,9304,7049],{},[9228,9306,9307],{},"ETX",[9228,9309,9310],{},"35",[9228,9312,9313],{},"#",[9228,9315,9316],{},"67",[9228,9318,9319],{},"C",[9228,9321,9322],{},"99",[9228,9324,2794],{},[9183,9326,9327,9330,9333,9336,9339,9342,9345,9347],{},[9228,9328,9329],{},"4",[9228,9331,9332],{},"EOT",[9228,9334,9335],{},"36",[9228,9337,9338],{},"$",[9228,9340,9341],{},"68",[9228,9343,9344],{},"D",[9228,9346,5569],{},[9228,9348,9349],{},"d",[9183,9351,9352,9355,9358,9361,9364,9367,9370,9373],{},[9228,9353,9354],{},"5",[9228,9356,9357],{},"ENQ",[9228,9359,9360],{},"37",[9228,9362,9363],{},"%",[9228,9365,9366],{},"69",[9228,9368,9369],{},"E",[9228,9371,9372],{},"101",[9228,9374,9116],{},[9183,9376,9377,9380,9383,9386,9388,9391,9394,9397],{},[9228,9378,9379],{},"6",[9228,9381,9382],{},"ACK",[9228,9384,9385],{},"38",[9228,9387,5164],{},[9228,9389,9390],{},"70",[9228,9392,9393],{},"F",[9228,9395,9396],{},"102",[9228,9398,9097],{},[9183,9400,9401,9404,9407,9410,9412,9415,9418,9421],{},[9228,9402,9403],{},"7",[9228,9405,9406],{},"BEL",[9228,9408,9409],{},"39",[9228,9411,1618],{},[9228,9413,9414],{},"71",[9228,9416,9417],{},"G",[9228,9419,9420],{},"103",[9228,9422,9423],{},"g",[9183,9425,9426,9429,9432,9435,9437,9440,9443,9446],{},[9228,9427,9428],{},"8",[9228,9430,9431],{},"BS",[9228,9433,9434],{},"40",[9228,9436,380],{},[9228,9438,9439],{},"72",[9228,9441,9442],{},"H",[9228,9444,9445],{},"104",[9228,9447,9448],{},"h",[9183,9450,9451,9454,9457,9460,9462,9465,9468,9471],{},[9228,9452,9453],{},"9",[9228,9455,9456],{},"HT",[9228,9458,9459],{},"41",[9228,9461,4033],{},[9228,9463,9464],{},"73",[9228,9466,9467],{},"I",[9228,9469,9470],{},"105",[9228,9472,9473],{},"i",[9183,9475,9476,9478,9481,9484,9486,9489,9492,9495],{},[9228,9477,263],{},[9228,9479,9480],{},"LF",[9228,9482,9483],{},"42",[9228,9485,191],{},[9228,9487,9488],{},"74",[9228,9490,9491],{},"J",[9228,9493,9494],{},"106",[9228,9496,9497],{},"j",[9183,9499,9500,9503,9506,9509,9511,9514,9517,9520],{},[9228,9501,9502],{},"11",[9228,9504,9505],{},"VT",[9228,9507,9508],{},"43",[9228,9510,1702],{},[9228,9512,9513],{},"75",[9228,9515,9516],{},"K",[9228,9518,9519],{},"107",[9228,9521,9522],{},"k",[9183,9524,9525,9528,9531,9534,9536,9539,9542,9545],{},[9228,9526,9527],{},"12",[9228,9529,9530],{},"FF",[9228,9532,9533],{},"44",[9228,9535,1618],{},[9228,9537,9538],{},"76",[9228,9540,9541],{},"L",[9228,9543,9544],{},"108",[9228,9546,2137],{},[9183,9548,9549,9552,9555,9558,9560,9563,9566,9569],{},[9228,9550,9551],{},"13",[9228,9553,9554],{},"CR",[9228,9556,9557],{},"45",[9228,9559,2833],{},[9228,9561,9562],{},"77",[9228,9564,9565],{},"M",[9228,9567,9568],{},"109",[9228,9570,9571],{},"m",[9183,9573,9574,9577,9580,9583,9586,9589,9592,9595],{},[9228,9575,9576],{},"14",[9228,9578,9579],{},"SO",[9228,9581,9582],{},"46",[9228,9584,9585],{},".",[9228,9587,9588],{},"78",[9228,9590,9591],{},"N",[9228,9593,9594],{},"110",[9228,9596,9597],{},"n",[9183,9599,9600,9603,9606,9609,9612,9615,9618,9621],{},[9228,9601,9602],{},"15",[9228,9604,9605],{},"SI",[9228,9607,9608],{},"47",[9228,9610,9611],{},"\u002F",[9228,9613,9614],{},"79",[9228,9616,9617],{},"O",[9228,9619,9620],{},"111",[9228,9622,9623],{},"o",[9183,9625,9626,9629,9632,9635,9637,9640,9643,9646],{},[9228,9627,9628],{},"16",[9228,9630,9631],{},"DLE",[9228,9633,9634],{},"48",[9228,9636,8423],{},[9228,9638,9639],{},"80",[9228,9641,9642],{},"P",[9228,9644,9645],{},"112",[9228,9647,14],{},[9183,9649,9650,9653,9656,9659,9661,9664,9667,9670],{},[9228,9651,9652],{},"17",[9228,9654,9655],{},"DCI",[9228,9657,9658],{},"49",[9228,9660,7039],{},[9228,9662,9663],{},"81",[9228,9665,9666],{},"Q",[9228,9668,9669],{},"113",[9228,9671,9672],{},"q",[9183,9674,9675,9677,9680,9682,9684,9687,9690,9693],{},[9228,9676,6080],{},[9228,9678,9679],{},"DC2",[9228,9681,1445],{},[9228,9683,7044],{},[9228,9685,9686],{},"82",[9228,9688,9689],{},"R",[9228,9691,9692],{},"114",[9228,9694,9695],{},"r",[9183,9697,9698,9701,9704,9707,9709,9712,9715,9718],{},[9228,9699,9700],{},"19",[9228,9702,9703],{},"DC3",[9228,9705,9706],{},"51",[9228,9708,7049],{},[9228,9710,9711],{},"83",[9228,9713,9714],{},"S",[9228,9716,9717],{},"115",[9228,9719,9720],{},"s",[9183,9722,9723,9725,9728,9731,9733,9736,9739,9742],{},[9228,9724,5016],{},[9228,9726,9727],{},"DC4",[9228,9729,9730],{},"52",[9228,9732,9329],{},[9228,9734,9735],{},"84",[9228,9737,9738],{},"T",[9228,9740,9741],{},"116",[9228,9743,9744],{},"t",[9183,9746,9747,9750,9753,9756,9758,9761,9764,9767],{},[9228,9748,9749],{},"21",[9228,9751,9752],{},"NAK",[9228,9754,9755],{},"53",[9228,9757,9354],{},[9228,9759,9760],{},"85",[9228,9762,9763],{},"U",[9228,9765,9766],{},"117",[9228,9768,9769],{},"u",[9183,9771,9772,9775,9778,9781,9783,9786,9789,9792],{},[9228,9773,9774],{},"22",[9228,9776,9777],{},"SYN",[9228,9779,9780],{},"54",[9228,9782,9379],{},[9228,9784,9785],{},"86",[9228,9787,9788],{},"V",[9228,9790,9791],{},"118",[9228,9793,9794],{},"v",[9183,9796,9797,9800,9803,9806,9808,9811,9814,9817],{},[9228,9798,9799],{},"23",[9228,9801,9802],{},"TB",[9228,9804,9805],{},"55",[9228,9807,9403],{},[9228,9809,9810],{},"87",[9228,9812,9813],{},"W",[9228,9815,9816],{},"119",[9228,9818,2142],{},[9183,9820,9821,9824,9827,9830,9832,9835,9838,9841],{},[9228,9822,9823],{},"24",[9228,9825,9826],{},"CAN",[9228,9828,9829],{},"56",[9228,9831,9428],{},[9228,9833,9834],{},"88",[9228,9836,9837],{},"X",[9228,9839,9840],{},"120",[9228,9842,3056],{},[9183,9844,9845,9848,9851,9854,9856,9859,9862,9865],{},[9228,9846,9847],{},"25",[9228,9849,9850],{},"EM",[9228,9852,9853],{},"57",[9228,9855,9453],{},[9228,9857,9858],{},"89",[9228,9860,9861],{},"Y",[9228,9863,9864],{},"121",[9228,9866,9867],{},"y",[9183,9869,9870,9873,9876,9879,9882,9885,9888,9891],{},[9228,9871,9872],{},"26",[9228,9874,9875],{},"SUB",[9228,9877,9878],{},"58",[9228,9880,9881],{},":",[9228,9883,9884],{},"90",[9228,9886,9887],{},"Z",[9228,9889,9890],{},"122",[9228,9892,9893],{},"z",[9183,9895,9896,9899,9902,9905,9907,9910,9913,9916],{},[9228,9897,9898],{},"27",[9228,9900,9901],{},"ESC",[9228,9903,9904],{},"59",[9228,9906,992],{},[9228,9908,9909],{},"91",[9228,9911,9912],{},"[",[9228,9914,9915],{},"123",[9228,9917,9918],{},"{",[9183,9920,9921,9924,9927,9930,9932,9935,9937,9940],{},[9228,9922,9923],{},"28",[9228,9925,9926],{},"FS",[9228,9928,9929],{},"60",[9228,9931,1208],{},[9228,9933,9934],{},"92",[9228,9936,9611],{},[9228,9938,9939],{},"124",[9228,9941,9942],{},"|",[9183,9944,9945,9948,9951,9954,9956,9959,9962,9965],{},[9228,9946,9947],{},"29",[9228,9949,9950],{},"GS",[9228,9952,9953],{},"61",[9228,9955,260],{},[9228,9957,9958],{},"93",[9228,9960,9961],{},"]",[9228,9963,9964],{},"125",[9228,9966,9967],{},"}",[9183,9969,9970,9973,9976,9979,9981,9984,9987,9990],{},[9228,9971,9972],{},"30",[9228,9974,9975],{},"RS",[9228,9977,9978],{},"62",[9228,9980,1219],{},[9228,9982,9983],{},"94",[9228,9985,9986],{},"^",[9228,9988,9989],{},"126",[9228,9991,9992],{},"`",[9183,9994,9995,9998,10001,10004,10007,10010,10013,10016],{},[9228,9996,9997],{},"31",[9228,9999,10000],{},"US",[9228,10002,10003],{},"63",[9228,10005,10006],{},"?",[9228,10008,10009],{},"95",[9228,10011,10012],{},"_",[9228,10014,10015],{},"127",[9228,10017,10018],{},"DEL",[14,10020,10021,10022,10025],{},"ASCII 码大致由以下",[18,10023,10024],{},"两部分组","成：",[59,10027,10028,10035],{},[62,10029,10030,10031,10034],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[18,10032,10033],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[62,10036,10037,10038,10041],{},"ASCII 打印字符：数字 ",[18,10039,10040],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[48,10043,10045],{"id":10044},"_134转义字符","1.3.4转义字符",[93,10047,10049],{"className":95,"code":10048,"language":97,"meta":98,"style":98},"\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",[83,10050,10051,10056,10071,10084,10089,10102,10107],{"__ignoreMap":98},[102,10052,10053],{"class":104,"line":105},[102,10054,10055],{"class":126},"\u002F\u002F换行符\n",[102,10057,10058,10061,10063,10066,10068],{"class":104,"line":116},[102,10059,10060],{"class":119},"cout ",[102,10062,275],{"class":108},[102,10064,10065],{"class":278},"\"hello world\u002Fn\"",[102,10067,992],{"class":119},[102,10069,10070],{"class":126}," \u002F\u002F就等同于如下：\n",[102,10072,10073,10075,10077,10080,10082],{"class":104,"line":123},[102,10074,10060],{"class":119},[102,10076,275],{"class":108},[102,10078,10079],{"class":278},"\"hello world\"",[102,10081,275],{"class":108},[102,10083,295],{"class":119},[102,10085,10086],{"class":104,"line":130},[102,10087,10088],{"class":126},"\u002F\u002F反斜杠\n",[102,10090,10091,10093,10095,10098,10100],{"class":104,"line":136},[102,10092,10060],{"class":119},[102,10094,275],{"class":108},[102,10096,10097],{"class":278},"\"\u002F\u002F\"",[102,10099,275],{"class":108},[102,10101,295],{"class":119},[102,10103,10104],{"class":104,"line":142},[102,10105,10106],{"class":126},"\u002F\u002F水平制表符\n",[102,10108,10109,10111,10113,10116,10119,10122,10124,10126],{"class":104,"line":148},[102,10110,10060],{"class":119},[102,10112,275],{"class":108},[102,10114,10115],{"class":278},"\"aaaa",[102,10117,10118],{"class":187},"\\t",[102,10120,10121],{"class":278},"helloworld\"",[102,10123,275],{"class":108},[102,10125,5171],{"class":119},[102,10127,10128],{"class":126}," \u002F\u002F输出窗口时有对齐效果\n",[48,10130,10132],{"id":10131},"_135字符串型","1.3.5字符串型",[14,10134,10135,10136,10138],{},"char 变量名",[102,10137],{},"=\"字符串值\"",[93,10140,10142],{"className":95,"code":10141,"language":97,"meta":98,"style":98},"\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",[83,10143,10144,10149,10154,10159,10164,10177,10190,10195,10200,10211],{"__ignoreMap":98},[102,10145,10146],{"class":104,"line":105},[102,10147,10148],{"class":126},"\u002F\u002Fc风格字符串\n",[102,10150,10151],{"class":104,"line":116},[102,10152,10153],{"class":126},"\u002F\u002F注意事项：\n",[102,10155,10156],{"class":104,"line":123},[102,10157,10158],{"class":126},"\u002F\u002F1.char字符串名[]\n",[102,10160,10161],{"class":104,"line":130},[102,10162,10163],{"class":126},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[102,10165,10166,10168,10171,10173,10175],{"class":104,"line":136},[102,10167,9137],{"class":108},[102,10169,10170],{"class":119}," str[]",[102,10172,260],{"class":108},[102,10174,10079],{"class":278},[102,10176,266],{"class":119},[102,10178,10179,10181,10183,10186,10188],{"class":104,"line":142},[102,10180,10060],{"class":119},[102,10182,275],{"class":108},[102,10184,10185],{"class":119},"str",[102,10187,275],{"class":108},[102,10189,295],{"class":119},[102,10191,10192],{"class":104,"line":148},[102,10193,10194],{"class":126},"\u002F\u002Fc++风格字符串\n",[102,10196,10197],{"class":104,"line":157},[102,10198,10199],{"class":126},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[102,10201,10202,10205,10207,10209],{"class":104,"line":163},[102,10203,10204],{"class":119},"string str2",[102,10206,260],{"class":108},[102,10208,10079],{"class":278},[102,10210,266],{"class":119},[102,10212,10213,10215,10217,10220,10222],{"class":104,"line":175},[102,10214,10060],{"class":119},[102,10216,275],{"class":108},[102,10218,10219],{"class":119},"str2",[102,10221,275],{"class":108},[102,10223,295],{"class":119},[48,10225,10227],{"id":10226},"_136布尔类型bool","1.3.6布尔类型bool",[93,10229,10231],{"className":95,"code":10230,"language":97,"meta":98,"style":98},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[83,10232,10233,10247],{"__ignoreMap":98},[102,10234,10235,10237,10240,10242,10245],{"class":104,"line":105},[102,10236,1998],{"class":108},[102,10238,10239],{"class":119}," flag",[102,10241,260],{"class":108},[102,10243,10244],{"class":187},"true",[102,10246,266],{"class":119},[102,10248,10249,10252,10254,10257,10259,10261],{"class":104,"line":116},[102,10250,10251],{"class":119},"cout",[102,10253,8713],{"class":108},[102,10255,10256],{"class":119},"(flag)",[102,10258,275],{"class":108},[102,10260,5171],{"class":119},[102,10262,10263],{"class":126}," \u002F\u002F查看布尔占内存空间\n",[43,10265,10267],{"id":10266},"_14键盘输入cin","1.4键盘输入cin",[93,10269,10271],{"className":95,"code":10270,"language":97,"meta":98,"style":98},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[83,10272,10273,10285,10302,10311],{"__ignoreMap":98},[102,10274,10275,10277,10279,10281,10283],{"class":104,"line":105},[102,10276,217],{"class":108},[102,10278,4378],{"class":119},[102,10280,260],{"class":108},[102,10282,8423],{"class":187},[102,10284,266],{"class":119},[102,10286,10287,10289,10291,10294,10296,10298,10300],{"class":104,"line":116},[102,10288,10251],{"class":119},[102,10290,275],{"class":108},[102,10292,10293],{"class":278},"\"请给整型变量a赋值\"",[102,10295,275],{"class":108},[102,10297,9275],{"class":119},[102,10299,275],{"class":108},[102,10301,295],{"class":119},[102,10303,10304,10307,10309],{"class":104,"line":123},[102,10305,10306],{"class":119},"cin ",[102,10308,2134],{"class":108},[102,10310,5952],{"class":119},[102,10312,10313,10315,10317,10320,10322,10324,10326],{"class":104,"line":130},[102,10314,10060],{"class":119},[102,10316,275],{"class":108},[102,10318,10319],{"class":278}," \"整型变量a=\"",[102,10321,1237],{"class":108},[102,10323,9275],{"class":119},[102,10325,275],{"class":108},[102,10327,295],{"class":119},[43,10329,10331],{"id":10330},"_15运算符","1.5运算符",[48,10333,10335],{"id":10334},"_151算术运算符","1.5.1算术运算符",[14,10337,10338,10341],{},[6750,10339],{"alt":98,"src":10340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[87,10343,10344,10347,10350],{},[62,10345,10346],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[62,10348,10349],{},"两个小数不可以做取模运算",[62,10351,10352],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[48,10354,10356],{"id":10355},"_152赋值运算符","1.5.2赋值运算符",[14,10358,10359],{},[6750,10360],{"alt":98,"src":10361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[48,10363,10365],{"id":10364},"_153比较运算符","1.5.3比较运算符",[14,10367,10368],{},[6750,10369],{"alt":98,"src":10370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[48,10372,10374],{"id":10373},"_154逻辑运算符","1.5.4逻辑运算符",[14,10376,10377],{},[6750,10378],{"alt":98,"src":10379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[43,10381,10383],{"id":10382},"_16程序流程结构","1.6程序流程结构",[48,10385,10387],{"id":10386},"_161选择结构","1.6.1选择结构",[87,10389,10390],{},[62,10391,10392],{},"if语句\n单行、多行、多条件if语句",[93,10394,10396],{"className":95,"code":10395,"language":97,"meta":98,"style":98},"\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",[83,10397,10398,10403,10418,10422,10435,10439,10444,10453,10466,10470,10483,10487,10492,10496,10509,10513,10518,10537,10541,10554,10558,10584,10588,10604,10608,10612,10616,10629,10633],{"__ignoreMap":98},[102,10399,10400],{"class":104,"line":105},[102,10401,10402],{"class":126},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[102,10404,10405,10408,10411,10413,10416],{"class":104,"line":116},[102,10406,10407],{"class":108},"if",[102,10409,10410],{"class":119},"(score",[102,10412,1219],{"class":108},[102,10414,10415],{"class":187},"600",[102,10417,390],{"class":119},[102,10419,10420],{"class":104,"line":123},[102,10421,120],{"class":119},[102,10423,10424,10426,10428,10431,10433],{"class":104,"line":130},[102,10425,272],{"class":119},[102,10427,275],{"class":108},[102,10429,10430],{"class":278},"'这是单行if语句'",[102,10432,275],{"class":108},[102,10434,295],{"class":119},[102,10436,10437],{"class":104,"line":136},[102,10438,301],{"class":119},[102,10440,10441],{"class":104,"line":142},[102,10442,10443],{"class":126},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[102,10445,10446,10448,10450],{"class":104,"line":148},[102,10447,10306],{"class":119},[102,10449,2134],{"class":108},[102,10451,10452],{"class":119}," score\n",[102,10454,10455,10457,10459,10462,10464],{"class":104,"line":157},[102,10456,10407],{"class":108},[102,10458,10410],{"class":119},[102,10460,10461],{"class":108},"\u003C=",[102,10463,10415],{"class":187},[102,10465,390],{"class":119},[102,10467,10468],{"class":104,"line":163},[102,10469,120],{"class":119},[102,10471,10472,10474,10476,10479,10481],{"class":104,"line":175},[102,10473,272],{"class":119},[102,10475,2134],{"class":108},[102,10477,10478],{"class":278},"\"小于等于600\"",[102,10480,275],{"class":108},[102,10482,295],{"class":119},[102,10484,10485],{"class":104,"line":181},[102,10486,301],{"class":119},[102,10488,10489],{"class":104,"line":202},[102,10490,10491],{"class":108},"else\n",[102,10493,10494],{"class":104,"line":208},[102,10495,120],{"class":119},[102,10497,10498,10500,10502,10505,10507],{"class":104,"line":214},[102,10499,272],{"class":119},[102,10501,2134],{"class":108},[102,10503,10504],{"class":278},"\"大于600\"",[102,10506,2134],{"class":108},[102,10508,295],{"class":119},[102,10510,10511],{"class":104,"line":225},[102,10512,301],{"class":119},[102,10514,10515],{"class":104,"line":230},[102,10516,10517],{"class":126},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[102,10519,10520,10522,10524,10526,10528,10531,10533,10535],{"class":104,"line":236},[102,10521,10407],{"class":108},[102,10523,2432],{"class":119},[102,10525,8423],{"class":187},[102,10527,1208],{"class":108},[102,10529,10530],{"class":119},"num",[102,10532,1208],{"class":108},[102,10534,5569],{"class":187},[102,10536,390],{"class":119},[102,10538,10539],{"class":104,"line":242},[102,10540,120],{"class":119},[102,10542,10543,10545,10547,10550,10552],{"class":104,"line":248},[102,10544,272],{"class":119},[102,10546,275],{"class":108},[102,10548,10549],{"class":278},"\"小于100\"",[102,10551,275],{"class":108},[102,10553,295],{"class":119},[102,10555,10556],{"class":104,"line":254},[102,10557,301],{"class":119},[102,10559,10560,10563,10566,10569,10572,10574,10576,10578,10580,10582],{"class":104,"line":269},[102,10561,10562],{"class":108},"else",[102,10564,10565],{"class":108}," if",[102,10567,10568],{"class":119}," (nmu",[102,10570,10571],{"class":108},">=",[102,10573,5569],{"class":187},[102,10575,1882],{"class":108},[102,10577,10530],{"class":119},[102,10579,1208],{"class":108},[102,10581,7866],{"class":187},[102,10583,390],{"class":119},[102,10585,10586],{"class":104,"line":298},[102,10587,120],{"class":119},[102,10589,10590,10592,10594,10597,10599,10601],{"class":104,"line":502},[102,10591,272],{"class":119},[102,10593,275],{"class":108},[102,10595,10596],{"class":278},"\"不小于100且小于200\"",[102,10598,275],{"class":108},[102,10600,5171],{"class":119},[102,10602,10603],{"class":126}," \u002F\u002F可以无限else if,python中是elif：\n",[102,10605,10606],{"class":104,"line":507},[102,10607,301],{"class":119},[102,10609,10610],{"class":104,"line":512},[102,10611,10491],{"class":108},[102,10613,10614],{"class":104,"line":521},[102,10615,120],{"class":119},[102,10617,10618,10620,10622,10625,10627],{"class":104,"line":526},[102,10619,272],{"class":119},[102,10621,275],{"class":108},[102,10623,10624],{"class":278},"\"不小于200\"",[102,10626,275],{"class":108},[102,10628,295],{"class":119},[102,10630,10631],{"class":104,"line":532},[102,10632,301],{"class":119},[102,10634,10635],{"class":104,"line":538},[102,10636,10637],{"class":126},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[87,10639,10640],{"start":116},[62,10641,10642],{},"三目运算符",[93,10644,10646],{"className":95,"code":10645,"language":97,"meta":98,"style":98},"\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",[83,10647,10648,10653,10658,10684,10706,10723,10728,10751,10766],{"__ignoreMap":98},[102,10649,10650],{"class":104,"line":105},[102,10651,10652],{"class":126},"\u002F\u002F创建三个变量a,b,c\n",[102,10654,10655],{"class":104,"line":116},[102,10656,10657],{"class":126},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[102,10659,10660,10662,10664,10666,10668,10671,10673,10675,10678,10680,10682],{"class":104,"line":123},[102,10661,217],{"class":108},[102,10663,4378],{"class":119},[102,10665,260],{"class":108},[102,10667,5016],{"class":187},[102,10669,10670],{"class":119},",b",[102,10672,260],{"class":108},[102,10674,263],{"class":187},[102,10676,10677],{"class":119},",c",[102,10679,260],{"class":108},[102,10681,8423],{"class":187},[102,10683,266],{"class":119},[102,10685,10686,10688,10690,10693,10695,10697,10699,10701,10703],{"class":104,"line":130},[102,10687,2794],{"class":119},[102,10689,260],{"class":108},[102,10691,10692],{"class":119},"(a",[102,10694,1219],{"class":108},[102,10696,9300],{"class":119},[102,10698,10006],{"class":108},[102,10700,9275],{"class":119},[102,10702,9881],{"class":108},[102,10704,10705],{"class":119},"b)\n",[102,10707,10708,10710,10712,10715,10717,10719,10721],{"class":104,"line":136},[102,10709,10251],{"class":119},[102,10711,275],{"class":108},[102,10713,10714],{"class":278},"\"c=\"",[102,10716,275],{"class":108},[102,10718,2794],{"class":119},[102,10720,275],{"class":108},[102,10722,295],{"class":119},[102,10724,10725],{"class":104,"line":142},[102,10726,10727],{"class":126},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[102,10729,10730,10732,10734,10736,10738,10740,10742,10745,10747,10749],{"class":104,"line":148},[102,10731,10692],{"class":119},[102,10733,1219],{"class":108},[102,10735,9300],{"class":119},[102,10737,10006],{"class":108},[102,10739,9275],{"class":119},[102,10741,9881],{"class":108},[102,10743,10744],{"class":119},"b)",[102,10746,260],{"class":108},[102,10748,5569],{"class":187},[102,10750,266],{"class":119},[102,10752,10753,10755,10757,10759,10761,10763],{"class":104,"line":157},[102,10754,10251],{"class":119},[102,10756,275],{"class":108},[102,10758,9275],{"class":119},[102,10760,275],{"class":108},[102,10762,5171],{"class":119},[102,10764,10765],{"class":126}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[102,10767,10768,10770,10772,10774,10776,10778],{"class":104,"line":163},[102,10769,10251],{"class":119},[102,10771,275],{"class":108},[102,10773,9300],{"class":119},[102,10775,275],{"class":108},[102,10777,5171],{"class":119},[102,10779,10780],{"class":126}," \u002F\u002F10   a>b,b还是原值\n",[87,10782,10783],{"start":123},[62,10784,10785],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[93,10787,10789],{"className":95,"code":10788,"language":97,"meta":98,"style":98},"\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",[83,10790,10791,10796,10802,10812,10820,10824,10837,10850,10859,10867,10871,10895,10916,10938,10959,10981,11002,11022,11026],{"__ignoreMap":98},[102,10792,10793],{"class":104,"line":105},[102,10794,10795],{"class":126},"\u002F\u002F案例-电影打分\n",[102,10797,10798,10800],{"class":104,"line":116},[102,10799,314],{"class":108},[102,10801,317],{"class":278},[102,10803,10804,10806,10808,10810],{"class":104,"line":123},[102,10805,322],{"class":108},[102,10807,325],{"class":108},[102,10809,328],{"class":112},[102,10811,266],{"class":119},[102,10813,10814,10816,10818],{"class":104,"line":130},[102,10815,217],{"class":108},[102,10817,220],{"class":112},[102,10819,172],{"class":119},[102,10821,10822],{"class":104,"line":136},[102,10823,120],{"class":119},[102,10825,10826,10828,10831,10833,10835],{"class":104,"line":142},[102,10827,151],{"class":108},[102,10829,10830],{"class":119}," score",[102,10832,260],{"class":108},[102,10834,8423],{"class":187},[102,10836,266],{"class":119},[102,10838,10839,10841,10843,10846,10848],{"class":104,"line":148},[102,10840,272],{"class":119},[102,10842,275],{"class":108},[102,10844,10845],{"class":278},"\"电影打分：\"",[102,10847,275],{"class":108},[102,10849,295],{"class":119},[102,10851,10852,10854,10856],{"class":104,"line":157},[102,10853,2131],{"class":119},[102,10855,2134],{"class":108},[102,10857,10858],{"class":119},"score;\n",[102,10860,10861,10864],{"class":104,"line":163},[102,10862,10863],{"class":108},"    switch",[102,10865,10866],{"class":119},"(score)\n",[102,10868,10869],{"class":104,"line":175},[102,10870,178],{"class":119},[102,10872,10873,10876,10878,10881,10883,10886,10888,10890,10893],{"class":104,"line":181},[102,10874,10875],{"class":108},"        case",[102,10877,989],{"class":187},[102,10879,10880],{"class":119},":cout",[102,10882,275],{"class":108},[102,10884,10885],{"class":278},"\"经典\"",[102,10887,275],{"class":108},[102,10889,5171],{"class":119},[102,10891,10892],{"class":108},"break",[102,10894,266],{"class":119},[102,10896,10897,10899,10902,10904,10906,10908,10910,10912,10914],{"class":104,"line":202},[102,10898,10875],{"class":108},[102,10900,10901],{"class":187}," 9",[102,10903,10880],{"class":119},[102,10905,275],{"class":108},[102,10907,10885],{"class":278},[102,10909,275],{"class":108},[102,10911,5171],{"class":119},[102,10913,10892],{"class":108},[102,10915,266],{"class":119},[102,10917,10918,10920,10923,10925,10927,10930,10932,10934,10936],{"class":104,"line":208},[102,10919,10875],{"class":108},[102,10921,10922],{"class":187}," 8",[102,10924,10880],{"class":119},[102,10926,275],{"class":108},[102,10928,10929],{"class":278},"\"非常好\"",[102,10931,275],{"class":108},[102,10933,5171],{"class":119},[102,10935,10892],{"class":108},[102,10937,266],{"class":119},[102,10939,10940,10942,10945,10947,10949,10951,10953,10955,10957],{"class":104,"line":214},[102,10941,10875],{"class":108},[102,10943,10944],{"class":187}," 7",[102,10946,10880],{"class":119},[102,10948,275],{"class":108},[102,10950,10929],{"class":278},[102,10952,275],{"class":108},[102,10954,5171],{"class":119},[102,10956,10892],{"class":108},[102,10958,266],{"class":119},[102,10960,10961,10963,10966,10968,10970,10973,10975,10977,10979],{"class":104,"line":225},[102,10962,10875],{"class":108},[102,10964,10965],{"class":187}," 6",[102,10967,10880],{"class":119},[102,10969,275],{"class":108},[102,10971,10972],{"class":278},"\"一般\"",[102,10974,275],{"class":108},[102,10976,5171],{"class":119},[102,10978,10892],{"class":108},[102,10980,266],{"class":119},[102,10982,10983,10985,10988,10990,10992,10994,10996,10998,11000],{"class":104,"line":230},[102,10984,10875],{"class":108},[102,10986,10987],{"class":187}," 5",[102,10989,10880],{"class":119},[102,10991,275],{"class":108},[102,10993,10972],{"class":278},[102,10995,275],{"class":108},[102,10997,5171],{"class":119},[102,10999,10892],{"class":108},[102,11001,266],{"class":119},[102,11003,11004,11007,11009,11011,11014,11016,11018,11020],{"class":104,"line":236},[102,11005,11006],{"class":108},"        default",[102,11008,10880],{"class":119},[102,11010,275],{"class":108},[102,11012,11013],{"class":278},"\"烂片\"",[102,11015,275],{"class":108},[102,11017,5171],{"class":119},[102,11019,10892],{"class":108},[102,11021,266],{"class":119},[102,11023,11024],{"class":104,"line":242},[102,11025,205],{"class":119},[102,11027,11028],{"class":104,"line":248},[102,11029,301],{"class":119},[14,11031,11032],{},"if和switch区别：",[59,11034,11035,11038],{},[62,11036,11037],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[62,11039,11040],{},"switch优点：结构清晰，执行效率高",[48,11042,11044],{"id":11043},"_162循环结构","1.6.2循环结构",[87,11046,11047],{},[62,11048,11049],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[93,11051,11053],{"className":95,"code":11052,"language":97,"meta":98,"style":98},"\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",[83,11054,11055,11060,11068,11072,11085,11099,11103,11123,11133,11137,11147],{"__ignoreMap":98},[102,11056,11057],{"class":104,"line":105},[102,11058,11059],{"class":126},"\u002F\u002F打印0-9数字\n",[102,11061,11062,11064,11066],{"class":104,"line":116},[102,11063,217],{"class":108},[102,11065,220],{"class":112},[102,11067,172],{"class":119},[102,11069,11070],{"class":104,"line":123},[102,11071,120],{"class":119},[102,11073,11074,11076,11079,11081,11083],{"class":104,"line":130},[102,11075,151],{"class":108},[102,11077,11078],{"class":119}," num",[102,11080,260],{"class":108},[102,11082,8423],{"class":187},[102,11084,266],{"class":119},[102,11086,11087,11090,11093,11095,11097],{"class":104,"line":136},[102,11088,11089],{"class":108},"    while",[102,11091,11092],{"class":119},"(num",[102,11094,1208],{"class":108},[102,11096,263],{"class":187},[102,11098,390],{"class":119},[102,11100,11101],{"class":104,"line":142},[102,11102,178],{"class":119},[102,11104,11105,11108,11111,11113,11115,11117,11120],{"class":104,"line":148},[102,11106,11107],{"class":112},"       std",[102,11109,11110],{"class":119},"::cout",[102,11112,275],{"class":108},[102,11114,10530],{"class":119},[102,11116,275],{"class":108},[102,11118,11119],{"class":112},"std",[102,11121,11122],{"class":119},"::endl;\n",[102,11124,11125,11128,11131],{"class":104,"line":157},[102,11126,11127],{"class":119},"        num",[102,11129,11130],{"class":108},"++",[102,11132,266],{"class":119},[102,11134,11135],{"class":104,"line":163},[102,11136,205],{"class":119},[102,11138,11139,11141,11143,11145],{"class":104,"line":175},[102,11140,845],{"class":112},[102,11142,380],{"class":119},[102,11144,850],{"class":278},[102,11146,390],{"class":119},[102,11148,11149],{"class":104,"line":181},[102,11150,301],{"class":119},[14,11152,11153],{},"注意：写好循环条件，避免死循环情况",[93,11155,11157],{"className":95,"code":11156,"language":97,"meta":98,"style":98},"\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",[83,11158,11159,11164,11171,11178,11188,11196,11200,11205,11230,11234,11239,11247,11273,11278,11283,11296,11306,11310,11320,11325,11337,11341,11355,11359,11374,11378,11391,11395,11399,11403,11416,11423,11427,11432,11437,11441],{"__ignoreMap":98},[102,11160,11161],{"class":104,"line":105},[102,11162,11163],{"class":126},"\u002F\u002F循环结构-猜数字\n",[102,11165,11166,11168],{"class":104,"line":116},[102,11167,314],{"class":108},[102,11169,11170],{"class":278}," \u003Ciostream>\n",[102,11172,11173,11175],{"class":104,"line":123},[102,11174,314],{"class":108},[102,11176,11177],{"class":278}," \u003Cctime>\n",[102,11179,11180,11182,11184,11186],{"class":104,"line":130},[102,11181,322],{"class":108},[102,11183,325],{"class":108},[102,11185,328],{"class":112},[102,11187,266],{"class":119},[102,11189,11190,11192,11194],{"class":104,"line":136},[102,11191,217],{"class":108},[102,11193,220],{"class":112},[102,11195,172],{"class":119},[102,11197,11198],{"class":104,"line":142},[102,11199,120],{"class":119},[102,11201,11202],{"class":104,"line":148},[102,11203,11204],{"class":126},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[102,11206,11207,11210,11213,11216,11218,11220,11223,11225,11227],{"class":104,"line":157},[102,11208,11209],{"class":112},"    srand",[102,11211,11212],{"class":119},"((",[102,11214,11215],{"class":108},"unsigned",[102,11217,6392],{"class":108},[102,11219,4033],{"class":119},[102,11221,11222],{"class":112},"time",[102,11224,380],{"class":119},[102,11226,6569],{"class":187},[102,11228,11229],{"class":119},"));\n",[102,11231,11232],{"class":104,"line":163},[102,11233,652],{"emptyLinePlaceholder":651},[102,11235,11236],{"class":104,"line":175},[102,11237,11238],{"class":126},"    \u002F\u002F1.系统生成随机数\n",[102,11240,11241,11244],{"class":104,"line":181},[102,11242,11243],{"class":126},"    \u002F\u002Frand()%100",[102,11245,11246],{"class":126}," \u002F\u002F生成0-99的随机数\n",[102,11248,11249,11251,11253,11255,11258,11260,11262,11264,11266,11268,11270],{"class":104,"line":202},[102,11250,151],{"class":108},[102,11252,11078],{"class":119},[102,11254,260],{"class":108},[102,11256,11257],{"class":112},"rand",[102,11259,290],{"class":119},[102,11261,9363],{"class":108},[102,11263,5569],{"class":187},[102,11265,1702],{"class":108},[102,11267,7039],{"class":187},[102,11269,992],{"class":119},[102,11271,11272],{"class":126}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[102,11274,11275],{"class":104,"line":208},[102,11276,11277],{"class":126},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[102,11279,11280],{"class":104,"line":214},[102,11281,11282],{"class":126},"    \u002F\u002F2.玩家猜测\n",[102,11284,11285,11287,11290,11292,11294],{"class":104,"line":225},[102,11286,151],{"class":108},[102,11288,11289],{"class":119}," val",[102,11291,260],{"class":108},[102,11293,8423],{"class":187},[102,11295,266],{"class":119},[102,11297,11298,11300,11302,11304],{"class":104,"line":230},[102,11299,11089],{"class":108},[102,11301,2432],{"class":119},[102,11303,7039],{"class":187},[102,11305,390],{"class":119},[102,11307,11308],{"class":104,"line":236},[102,11309,178],{"class":119},[102,11311,11312,11315,11317],{"class":104,"line":242},[102,11313,11314],{"class":119},"        cin",[102,11316,2134],{"class":108},[102,11318,11319],{"class":119},"val;\n",[102,11321,11322],{"class":104,"line":248},[102,11323,11324],{"class":126},"        \u002F\u002F3.判断玩家猜测\n",[102,11326,11327,11329,11332,11334],{"class":104,"line":254},[102,11328,1202],{"class":108},[102,11330,11331],{"class":119},"(val",[102,11333,1208],{"class":108},[102,11335,11336],{"class":119},"num) \n",[102,11338,11339],{"class":104,"line":269},[102,11340,1914],{"class":119},[102,11342,11343,11346,11348,11351,11353],{"class":104,"line":298},[102,11344,11345],{"class":119},"            cout",[102,11347,275],{"class":108},[102,11349,11350],{"class":278},"\"猜小了！\"",[102,11352,275],{"class":108},[102,11354,295],{"class":119},[102,11356,11357],{"class":104,"line":502},[102,11358,1252],{"class":119},[102,11360,11361,11364,11366,11369,11371],{"class":104,"line":507},[102,11362,11363],{"class":108},"        else",[102,11365,10565],{"class":108},[102,11367,11368],{"class":119}," (val",[102,11370,1219],{"class":108},[102,11372,11373],{"class":119},"num)\n",[102,11375,11376],{"class":104,"line":512},[102,11377,1914],{"class":119},[102,11379,11380,11382,11384,11387,11389],{"class":104,"line":521},[102,11381,11345],{"class":119},[102,11383,275],{"class":108},[102,11385,11386],{"class":278},"\"猜大了！\"",[102,11388,275],{"class":108},[102,11390,295],{"class":119},[102,11392,11393],{"class":104,"line":526},[102,11394,1252],{"class":119},[102,11396,11397],{"class":104,"line":532},[102,11398,1932],{"class":108},[102,11400,11401],{"class":104,"line":538},[102,11402,1914],{"class":119},[102,11404,11405,11407,11409,11412,11414],{"class":104,"line":555},[102,11406,11345],{"class":119},[102,11408,275],{"class":108},[102,11410,11411],{"class":278},"\"猜对了！\"",[102,11413,275],{"class":108},[102,11415,295],{"class":119},[102,11417,11418,11421],{"class":104,"line":570},[102,11419,11420],{"class":108},"            break",[102,11422,266],{"class":119},[102,11424,11425],{"class":104,"line":581},[102,11426,1252],{"class":119},[102,11428,11429],{"class":104,"line":819},[102,11430,11431],{"class":126},"        \u002F\u002F猜对 退出游戏\n",[102,11433,11434],{"class":104,"line":828},[102,11435,11436],{"class":126},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[102,11438,11439],{"class":104,"line":837},[102,11440,205],{"class":119},[102,11442,11443],{"class":104,"line":842},[102,11444,301],{"class":119},[87,11446,11447],{"start":116},[62,11448,11449,11450,11453],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[18,11451,11452],{},"do...while会先执行一次循环语句","，在判断循环语句",[93,11455,11457],{"className":95,"code":11456,"language":97,"meta":98,"style":98},"\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",[83,11458,11459,11464,11472,11476,11488,11495,11499,11516,11523,11527,11539,11549],{"__ignoreMap":98},[102,11460,11461],{"class":104,"line":105},[102,11462,11463],{"class":126},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[102,11465,11466,11468,11470],{"class":104,"line":116},[102,11467,217],{"class":108},[102,11469,220],{"class":112},[102,11471,172],{"class":119},[102,11473,11474],{"class":104,"line":123},[102,11475,120],{"class":119},[102,11477,11478,11480,11482,11484,11486],{"class":104,"line":130},[102,11479,151],{"class":108},[102,11481,11078],{"class":119},[102,11483,260],{"class":108},[102,11485,8423],{"class":187},[102,11487,266],{"class":119},[102,11489,11490,11493],{"class":104,"line":136},[102,11491,11492],{"class":108},"    do",[102,11494,4328],{"class":119},[102,11496,11497],{"class":104,"line":142},[102,11498,178],{"class":119},[102,11500,11501,11504,11506,11508,11510,11512,11514],{"class":104,"line":148},[102,11502,11503],{"class":112},"        std",[102,11505,11110],{"class":119},[102,11507,275],{"class":108},[102,11509,10530],{"class":119},[102,11511,275],{"class":108},[102,11513,11119],{"class":112},[102,11515,11122],{"class":119},[102,11517,11518,11520],{"class":104,"line":157},[102,11519,11127],{"class":119},[102,11521,11522],{"class":108},"++\n",[102,11524,11525],{"class":104,"line":163},[102,11526,205],{"class":119},[102,11528,11529,11531,11533,11535,11537],{"class":104,"line":175},[102,11530,11089],{"class":108},[102,11532,11092],{"class":119},[102,11534,1208],{"class":108},[102,11536,263],{"class":187},[102,11538,552],{"class":119},[102,11540,11541,11543,11545,11547],{"class":104,"line":181},[102,11542,845],{"class":112},[102,11544,380],{"class":119},[102,11546,850],{"class":278},[102,11548,552],{"class":119},[102,11550,11551],{"class":104,"line":202},[102,11552,301],{"class":119},[14,11554,11555],{},"案例-水仙花数",[14,11557,11558],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,11560,11561],{},"例如：1^3+5^3+3^3=153",[14,11563,11564],{},"请用do...while语句，求出所有3位数的水仙花数",[93,11566,11568],{"className":95,"code":11567,"language":97,"meta":98,"style":98},"#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",[83,11569,11570,11576,11586,11594,11598,11603,11615,11621,11625,11630,11646,11661,11676,11691,11710,11725,11772,11776,11788,11792,11800,11804,11818],{"__ignoreMap":98},[102,11571,11572,11574],{"class":104,"line":105},[102,11573,314],{"class":108},[102,11575,11170],{"class":278},[102,11577,11578,11580,11582,11584],{"class":104,"line":116},[102,11579,322],{"class":108},[102,11581,325],{"class":108},[102,11583,328],{"class":112},[102,11585,266],{"class":119},[102,11587,11588,11590,11592],{"class":104,"line":123},[102,11589,217],{"class":108},[102,11591,220],{"class":112},[102,11593,172],{"class":119},[102,11595,11596],{"class":104,"line":130},[102,11597,120],{"class":119},[102,11599,11600],{"class":104,"line":136},[102,11601,11602],{"class":126},"    \u002F\u002F1.先打印所有三位数字\n",[102,11604,11605,11607,11609,11611,11613],{"class":104,"line":142},[102,11606,151],{"class":108},[102,11608,11078],{"class":119},[102,11610,260],{"class":108},[102,11612,5569],{"class":187},[102,11614,266],{"class":119},[102,11616,11617,11619],{"class":104,"line":148},[102,11618,11492],{"class":108},[102,11620,4328],{"class":119},[102,11622,11623],{"class":104,"line":157},[102,11624,178],{"class":119},[102,11626,11627],{"class":104,"line":163},[102,11628,11629],{"class":126},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[102,11631,11632,11635,11637,11639,11641,11643],{"class":104,"line":175},[102,11633,11634],{"class":108},"        int",[102,11636,4378],{"class":119},[102,11638,260],{"class":108},[102,11640,8423],{"class":187},[102,11642,992],{"class":119},[102,11644,11645],{"class":126}," \u002F\u002F个位\n",[102,11647,11648,11650,11652,11654,11656,11658],{"class":104,"line":181},[102,11649,11634],{"class":108},[102,11651,6884],{"class":119},[102,11653,260],{"class":108},[102,11655,8423],{"class":187},[102,11657,992],{"class":119},[102,11659,11660],{"class":126}," \u002F\u002F十位\n",[102,11662,11663,11665,11667,11669,11671,11673],{"class":104,"line":202},[102,11664,11634],{"class":108},[102,11666,1855],{"class":119},[102,11668,260],{"class":108},[102,11670,8423],{"class":187},[102,11672,992],{"class":119},[102,11674,11675],{"class":126}," \u002F\u002F百位\n",[102,11677,11678,11681,11683,11685,11687,11689],{"class":104,"line":208},[102,11679,11680],{"class":119},"        a",[102,11682,260],{"class":108},[102,11684,10530],{"class":119},[102,11686,9363],{"class":108},[102,11688,263],{"class":187},[102,11690,266],{"class":119},[102,11692,11693,11696,11698,11700,11702,11704,11706,11708],{"class":104,"line":214},[102,11694,11695],{"class":119},"        b",[102,11697,260],{"class":108},[102,11699,10530],{"class":119},[102,11701,9611],{"class":108},[102,11703,263],{"class":187},[102,11705,9363],{"class":108},[102,11707,263],{"class":187},[102,11709,266],{"class":119},[102,11711,11712,11715,11717,11719,11721,11723],{"class":104,"line":225},[102,11713,11714],{"class":119},"        c",[102,11716,260],{"class":108},[102,11718,10530],{"class":119},[102,11720,9611],{"class":108},[102,11722,5569],{"class":187},[102,11724,266],{"class":119},[102,11726,11727,11729,11731,11733,11735,11737,11739,11741,11743,11745,11747,11749,11751,11753,11755,11757,11759,11761,11764,11766,11769],{"class":104,"line":230},[102,11728,1202],{"class":108},[102,11730,10692],{"class":119},[102,11732,191],{"class":108},[102,11734,9275],{"class":119},[102,11736,191],{"class":108},[102,11738,9275],{"class":119},[102,11740,1702],{"class":108},[102,11742,9300],{"class":119},[102,11744,191],{"class":108},[102,11746,9300],{"class":119},[102,11748,191],{"class":108},[102,11750,9300],{"class":119},[102,11752,1702],{"class":108},[102,11754,2794],{"class":119},[102,11756,191],{"class":108},[102,11758,2794],{"class":119},[102,11760,191],{"class":108},[102,11762,11763],{"class":119},"c ",[102,11765,1876],{"class":108},[102,11767,11768],{"class":119}," num)",[102,11770,11771],{"class":126}," \u002F\u002F如果是水仙花数，才打印\n",[102,11773,11774],{"class":104,"line":236},[102,11775,1914],{"class":119},[102,11777,11778,11780,11782,11784,11786],{"class":104,"line":242},[102,11779,11345],{"class":119},[102,11781,275],{"class":108},[102,11783,10530],{"class":119},[102,11785,275],{"class":108},[102,11787,295],{"class":119},[102,11789,11790],{"class":104,"line":248},[102,11791,1252],{"class":119},[102,11793,11794,11796,11798],{"class":104,"line":254},[102,11795,11127],{"class":119},[102,11797,11130],{"class":108},[102,11799,266],{"class":119},[102,11801,11802],{"class":104,"line":269},[102,11803,205],{"class":119},[102,11805,11806,11808,11811,11813,11816],{"class":104,"line":298},[102,11807,11089],{"class":108},[102,11809,11810],{"class":119}," (num ",[102,11812,1208],{"class":108},[102,11814,11815],{"class":187}," 1000",[102,11817,552],{"class":119},[102,11819,11820],{"class":104,"line":502},[102,11821,301],{"class":119},[87,11823,11824],{"start":123},[62,11825,11826],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[93,11828,11830],{"className":95,"code":11829,"language":97,"meta":98,"style":98},"\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",[83,11831,11832,11837,11866,11870,11882,11886,11891,11902,11909,11913,11926,11930,11937,11941,11953,11962],{"__ignoreMap":98},[102,11833,11834],{"class":104,"line":105},[102,11835,11836],{"class":126},"\u002F\u002F从数字0-9打印\n",[102,11838,11839,11842,11844,11846,11849,11851,11853,11856,11858,11860,11862,11864],{"class":104,"line":116},[102,11840,11841],{"class":108},"for",[102,11843,380],{"class":119},[102,11845,217],{"class":108},[102,11847,11848],{"class":119}," i",[102,11850,260],{"class":108},[102,11852,8423],{"class":187},[102,11854,11855],{"class":119},";i",[102,11857,1208],{"class":108},[102,11859,263],{"class":187},[102,11861,11855],{"class":119},[102,11863,11130],{"class":108},[102,11865,390],{"class":119},[102,11867,11868],{"class":104,"line":123},[102,11869,120],{"class":119},[102,11871,11872,11874,11876,11878,11880],{"class":104,"line":130},[102,11873,272],{"class":119},[102,11875,275],{"class":108},[102,11877,9473],{"class":119},[102,11879,275],{"class":108},[102,11881,295],{"class":119},[102,11883,11884],{"class":104,"line":136},[102,11885,301],{"class":119},[102,11887,11888],{"class":104,"line":142},[102,11889,11890],{"class":126},"\u002F\u002F上式可以进行拆分\n",[102,11892,11893,11895,11897,11899],{"class":104,"line":148},[102,11894,217],{"class":108},[102,11896,11848],{"class":119},[102,11898,260],{"class":108},[102,11900,11901],{"class":187},"0\n",[102,11903,11904,11906],{"class":104,"line":157},[102,11905,11841],{"class":108},[102,11907,11908],{"class":119},"(;;;)\n",[102,11910,11911],{"class":104,"line":163},[102,11912,120],{"class":119},[102,11914,11915,11917,11920,11922,11924],{"class":104,"line":175},[102,11916,2343],{"class":108},[102,11918,11919],{"class":119},"(i",[102,11921,10571],{"class":108},[102,11923,263],{"class":187},[102,11925,390],{"class":119},[102,11927,11928],{"class":104,"line":181},[102,11929,178],{"class":119},[102,11931,11932,11935],{"class":104,"line":202},[102,11933,11934],{"class":108},"        break",[102,11936,266],{"class":119},[102,11938,11939],{"class":104,"line":208},[102,11940,205],{"class":119},[102,11942,11943,11945,11947,11949,11951],{"class":104,"line":214},[102,11944,272],{"class":119},[102,11946,275],{"class":108},[102,11948,9473],{"class":119},[102,11950,275],{"class":108},[102,11952,295],{"class":119},[102,11954,11955,11958,11960],{"class":104,"line":225},[102,11956,11957],{"class":119},"    i",[102,11959,11130],{"class":108},[102,11961,266],{"class":119},[102,11963,11964],{"class":104,"line":230},[102,11965,301],{"class":119},[14,11967,11968],{},"小练习",[93,11970,11972],{"className":95,"code":11971,"language":97,"meta":98,"style":98},"#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",[83,11973,11974,11980,11990,11998,12002,12007,12012,12040,12044,12049,12054,12094,12098,12111,12115,12119,12123,12135,12139,12143],{"__ignoreMap":98},[102,11975,11976,11978],{"class":104,"line":105},[102,11977,314],{"class":108},[102,11979,317],{"class":278},[102,11981,11982,11984,11986,11988],{"class":104,"line":116},[102,11983,322],{"class":108},[102,11985,325],{"class":108},[102,11987,328],{"class":112},[102,11989,266],{"class":119},[102,11991,11992,11994,11996],{"class":104,"line":123},[102,11993,217],{"class":108},[102,11995,220],{"class":112},[102,11997,172],{"class":119},[102,11999,12000],{"class":104,"line":130},[102,12001,120],{"class":119},[102,12003,12004],{"class":104,"line":136},[102,12005,12006],{"class":126},"    \u002F\u002F敲桌子案例\n",[102,12008,12009],{"class":104,"line":142},[102,12010,12011],{"class":126},"    \u002F\u002F1.先输出1-100的数字\n",[102,12013,12014,12017,12019,12021,12023,12025,12027,12030,12032,12034,12036,12038],{"class":104,"line":148},[102,12015,12016],{"class":108},"    for",[102,12018,380],{"class":119},[102,12020,217],{"class":108},[102,12022,11848],{"class":119},[102,12024,260],{"class":108},[102,12026,7039],{"class":187},[102,12028,12029],{"class":119},"; i",[102,12031,10461],{"class":108},[102,12033,5569],{"class":187},[102,12035,12029],{"class":119},[102,12037,11130],{"class":108},[102,12039,390],{"class":119},[102,12041,12042],{"class":104,"line":157},[102,12043,178],{"class":119},[102,12045,12046],{"class":104,"line":163},[102,12047,12048],{"class":126},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[102,12050,12051],{"class":104,"line":175},[102,12052,12053],{"class":126},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[102,12055,12056,12058,12060,12062,12064,12066,12068,12070,12072,12074,12076,12078,12080,12082,12084,12086,12088,12090,12092],{"class":104,"line":181},[102,12057,1202],{"class":108},[102,12059,11919],{"class":119},[102,12061,9363],{"class":108},[102,12063,9403],{"class":187},[102,12065,1876],{"class":108},[102,12067,8423],{"class":187},[102,12069,1213],{"class":108},[102,12071,11848],{"class":119},[102,12073,9363],{"class":108},[102,12075,263],{"class":187},[102,12077,1876],{"class":108},[102,12079,9403],{"class":187},[102,12081,1213],{"class":108},[102,12083,11848],{"class":119},[102,12085,9611],{"class":108},[102,12087,263],{"class":187},[102,12089,1876],{"class":108},[102,12091,9403],{"class":187},[102,12093,390],{"class":119},[102,12095,12096],{"class":104,"line":202},[102,12097,1914],{"class":119},[102,12099,12100,12102,12104,12107,12109],{"class":104,"line":208},[102,12101,11345],{"class":119},[102,12103,275],{"class":108},[102,12105,12106],{"class":278},"\"敲桌子\"",[102,12108,275],{"class":108},[102,12110,295],{"class":119},[102,12112,12113],{"class":104,"line":214},[102,12114,1252],{"class":119},[102,12116,12117],{"class":104,"line":225},[102,12118,1932],{"class":108},[102,12120,12121],{"class":104,"line":230},[102,12122,1914],{"class":119},[102,12124,12125,12127,12129,12131,12133],{"class":104,"line":236},[102,12126,11345],{"class":119},[102,12128,275],{"class":108},[102,12130,9473],{"class":119},[102,12132,275],{"class":108},[102,12134,295],{"class":119},[102,12136,12137],{"class":104,"line":242},[102,12138,1252],{"class":119},[102,12140,12141],{"class":104,"line":248},[102,12142,205],{"class":119},[102,12144,12145],{"class":104,"line":254},[102,12146,301],{"class":119},[14,12148,12149],{},"嵌套实现星图",[93,12151,12153],{"className":95,"code":12152,"language":97,"meta":98,"style":98},"#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",[83,12154,12155,12161,12171,12179,12183,12209,12213,12242,12246,12257,12261,12269,12273],{"__ignoreMap":98},[102,12156,12157,12159],{"class":104,"line":105},[102,12158,314],{"class":108},[102,12160,317],{"class":278},[102,12162,12163,12165,12167,12169],{"class":104,"line":116},[102,12164,322],{"class":108},[102,12166,325],{"class":108},[102,12168,328],{"class":112},[102,12170,266],{"class":119},[102,12172,12173,12175,12177],{"class":104,"line":123},[102,12174,217],{"class":108},[102,12176,220],{"class":112},[102,12178,172],{"class":119},[102,12180,12181],{"class":104,"line":130},[102,12182,120],{"class":119},[102,12184,12185,12187,12189,12191,12193,12195,12197,12199,12201,12203,12205,12207],{"class":104,"line":136},[102,12186,12016],{"class":108},[102,12188,2432],{"class":119},[102,12190,217],{"class":108},[102,12192,11848],{"class":119},[102,12194,260],{"class":108},[102,12196,8423],{"class":187},[102,12198,11855],{"class":119},[102,12200,1208],{"class":108},[102,12202,263],{"class":187},[102,12204,11855],{"class":119},[102,12206,11130],{"class":108},[102,12208,390],{"class":119},[102,12210,12211],{"class":104,"line":142},[102,12212,178],{"class":119},[102,12214,12215,12218,12220,12222,12225,12227,12229,12232,12234,12236,12238,12240],{"class":104,"line":148},[102,12216,12217],{"class":108},"        for",[102,12219,2432],{"class":119},[102,12221,217],{"class":108},[102,12223,12224],{"class":119}," j",[102,12226,260],{"class":108},[102,12228,8423],{"class":187},[102,12230,12231],{"class":119},";j",[102,12233,1208],{"class":108},[102,12235,263],{"class":187},[102,12237,12231],{"class":119},[102,12239,11130],{"class":108},[102,12241,390],{"class":119},[102,12243,12244],{"class":104,"line":157},[102,12245,1914],{"class":119},[102,12247,12248,12250,12252,12255],{"class":104,"line":163},[102,12249,11345],{"class":119},[102,12251,275],{"class":108},[102,12253,12254],{"class":278},"\"*\"",[102,12256,266],{"class":119},[102,12258,12259],{"class":104,"line":175},[102,12260,1252],{"class":119},[102,12262,12263,12265,12267],{"class":104,"line":181},[102,12264,470],{"class":119},[102,12266,275],{"class":108},[102,12268,295],{"class":119},[102,12270,12271],{"class":104,"line":202},[102,12272,205],{"class":119},[102,12274,12275],{"class":104,"line":208},[102,12276,301],{"class":119},[14,12278,12279],{},"乘法口诀表",[93,12281,12283],{"className":95,"code":12282,"language":97,"meta":98,"style":98},"#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",[83,12284,12285,12291,12301,12309,12313,12339,12343,12368,12372,12412,12416,12424,12428],{"__ignoreMap":98},[102,12286,12287,12289],{"class":104,"line":105},[102,12288,314],{"class":108},[102,12290,11170],{"class":278},[102,12292,12293,12295,12297,12299],{"class":104,"line":116},[102,12294,322],{"class":108},[102,12296,325],{"class":108},[102,12298,328],{"class":112},[102,12300,266],{"class":119},[102,12302,12303,12305,12307],{"class":104,"line":123},[102,12304,217],{"class":108},[102,12306,220],{"class":112},[102,12308,172],{"class":119},[102,12310,12311],{"class":104,"line":130},[102,12312,120],{"class":119},[102,12314,12315,12317,12319,12321,12323,12325,12327,12329,12331,12333,12335,12337],{"class":104,"line":136},[102,12316,12016],{"class":108},[102,12318,380],{"class":119},[102,12320,217],{"class":108},[102,12322,11848],{"class":119},[102,12324,260],{"class":108},[102,12326,7039],{"class":187},[102,12328,11855],{"class":119},[102,12330,1208],{"class":108},[102,12332,263],{"class":187},[102,12334,11855],{"class":119},[102,12336,11130],{"class":108},[102,12338,390],{"class":119},[102,12340,12341],{"class":104,"line":142},[102,12342,178],{"class":119},[102,12344,12345,12347,12349,12351,12353,12355,12357,12359,12361,12364,12366],{"class":104,"line":148},[102,12346,12217],{"class":108},[102,12348,380],{"class":119},[102,12350,217],{"class":108},[102,12352,12224],{"class":119},[102,12354,260],{"class":108},[102,12356,7039],{"class":187},[102,12358,12231],{"class":119},[102,12360,10461],{"class":108},[102,12362,12363],{"class":119},"i;j",[102,12365,11130],{"class":108},[102,12367,390],{"class":119},[102,12369,12370],{"class":104,"line":157},[102,12371,1914],{"class":119},[102,12373,12374,12376,12378,12380,12382,12384,12386,12388,12390,12393,12395,12397,12399,12401,12403,12406,12408,12410],{"class":104,"line":163},[102,12375,11345],{"class":119},[102,12377,275],{"class":108},[102,12379,9497],{"class":119},[102,12381,275],{"class":108},[102,12383,12254],{"class":278},[102,12385,275],{"class":108},[102,12387,9473],{"class":119},[102,12389,275],{"class":108},[102,12391,12392],{"class":278},"\"=\"",[102,12394,275],{"class":108},[102,12396,9473],{"class":119},[102,12398,191],{"class":108},[102,12400,9497],{"class":119},[102,12402,275],{"class":108},[102,12404,12405],{"class":278},"'",[102,12407,10118],{"class":187},[102,12409,12405],{"class":278},[102,12411,266],{"class":119},[102,12413,12414],{"class":104,"line":175},[102,12415,1252],{"class":119},[102,12417,12418,12420,12422],{"class":104,"line":181},[102,12419,470],{"class":119},[102,12421,275],{"class":108},[102,12423,295],{"class":119},[102,12425,12426],{"class":104,"line":202},[102,12427,205],{"class":119},[102,12429,12430],{"class":104,"line":208},[102,12431,301],{"class":119},[48,12433,12435],{"id":12434},"_163跳出语句","1.6.3跳出语句",[87,12437,12438],{},[62,12439,12440],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,12442,12443],{},"break使用时机：",[59,12445,12446,12449,12452],{},[62,12447,12448],{},"出现在switch条件语句中，作用是终止case并跳出switch",[62,12450,12451],{},"出现在循环结构中，作用是跳出当前的循环结构",[62,12453,12454],{},"出现在嵌套循环中，跳出最近的内层循环语句",[87,12456,12457,12460],{"start":116},[62,12458,12459],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[62,12461,12462],{},"goto语句\n语法：goto 标记;",[14,12464,12465],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[93,12467,12469],{"className":95,"code":12468,"language":97,"meta":98,"style":98},"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",[83,12470,12471,12479,12483,12496,12506,12519,12532,12545,12553,12569],{"__ignoreMap":98},[102,12472,12473,12475,12477],{"class":104,"line":105},[102,12474,217],{"class":108},[102,12476,220],{"class":112},[102,12478,172],{"class":119},[102,12480,12481],{"class":104,"line":116},[102,12482,120],{"class":119},[102,12484,12485,12487,12489,12492,12494],{"class":104,"line":123},[102,12486,272],{"class":119},[102,12488,275],{"class":108},[102,12490,12491],{"class":278},"\"1\"",[102,12493,275],{"class":108},[102,12495,295],{"class":119},[102,12497,12498,12501,12504],{"class":104,"line":130},[102,12499,12500],{"class":108},"    goto",[102,12502,12503],{"class":112}," FLAG",[102,12505,266],{"class":119},[102,12507,12508,12510,12512,12515,12517],{"class":104,"line":136},[102,12509,272],{"class":119},[102,12511,275],{"class":108},[102,12513,12514],{"class":278},"\"2\"",[102,12516,275],{"class":108},[102,12518,295],{"class":119},[102,12520,12521,12523,12525,12528,12530],{"class":104,"line":142},[102,12522,272],{"class":119},[102,12524,275],{"class":108},[102,12526,12527],{"class":278},"\"3\"",[102,12529,275],{"class":108},[102,12531,295],{"class":119},[102,12533,12534,12536,12538,12541,12543],{"class":104,"line":148},[102,12535,272],{"class":119},[102,12537,275],{"class":108},[102,12539,12540],{"class":278},"\"4\"",[102,12542,275],{"class":108},[102,12544,295],{"class":119},[102,12546,12547,12550],{"class":104,"line":157},[102,12548,12549],{"class":112},"    FLAG",[102,12551,12552],{"class":119},":\n",[102,12554,12555,12557,12559,12562,12564,12566],{"class":104,"line":163},[102,12556,272],{"class":119},[102,12558,275],{"class":108},[102,12560,12561],{"class":278},"\"5\"",[102,12563,275],{"class":108},[102,12565,5171],{"class":119},[102,12567,12568],{"class":126},"\u002F\u002F跳过了2,3,4,直接到5\n",[102,12570,12571],{"class":104,"line":175},[102,12572,301],{"class":119},[43,12574,12576],{"id":12575},"_17数组","1.7数组",[48,12578,12580],{"id":12579},"_171一维数组","1.7.1一维数组",[87,12582,12583],{},[62,12584,12585],{},"一维数组定义方式",[9177,12587,12588,12598],{},[9180,12589,12590],{},[9183,12591,12592,12595],{},[9186,12593,12594],{},"方式",[9186,12596,12597],{},"注意事项",[9223,12599,12600,12614,12624],{},[9183,12601,12602,12608],{},[9228,12603,12604,12605,992],{},"数据类型 数组名",[102,12606,12607],{},"数组长度",[9228,12609,12610,12611,12613],{},"这种方式是先定义再arr",[102,12612,9473],{},"赋值",[9183,12615,12616,12621],{},[9228,12617,12604,12618,12620],{},[102,12619,12607],{},"={值1,值2....};",[9228,12622,12623],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[9183,12625,12626,12630],{},[9228,12627,12604,12628,12620],{},[102,12629],{},[9228,12631,12632,12633,12635],{},"int arr",[102,12634],{},";这是不正确的，按照这样的方式定义必须有初始长度",[87,12637,12638],{"start":116},[62,12639,12640],{},"一维数组数组名\n用途：",[59,12642,12643],{},[62,12644,12645],{},"1.可以统计整个数组在内存中的长度：",[93,12647,12649],{"className":95,"code":12648,"language":97,"meta":98,"style":98},"sizeof(arr);\nsizeof(arr[0]);\n",[83,12650,12651,12658],{"__ignoreMap":98},[102,12652,12653,12655],{"class":104,"line":105},[102,12654,9047],{"class":108},[102,12656,12657],{"class":119},"(arr);\n",[102,12659,12660,12662,12665,12667],{"class":104,"line":116},[102,12661,9047],{"class":108},[102,12663,12664],{"class":119},"(arr[",[102,12666,8423],{"class":187},[102,12668,12669],{"class":119},"]);\n",[59,12671,12672],{},[62,12673,12674],{},"2.可以获取数组在内存中的首地址:",[93,12676,12678],{"className":95,"code":12677,"language":97,"meta":98,"style":98},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[83,12679,12680,12685,12698,12703],{"__ignoreMap":98},[102,12681,12682],{"class":104,"line":105},[102,12683,12684],{"class":126},"\u002F\u002F查看16进制的首地址\n",[102,12686,12687,12689,12691,12694,12696],{"class":104,"line":116},[102,12688,10251],{"class":119},[102,12690,275],{"class":108},[102,12692,12693],{"class":119},"arr",[102,12695,275],{"class":108},[102,12697,295],{"class":119},[102,12699,12700],{"class":104,"line":123},[102,12701,12702],{"class":126},"\u002F\u002F看10进制数\n",[102,12704,12705,12707,12709,12711,12713,12715,12717,12720,12722,12724,12726],{"class":104,"line":130},[102,12706,10251],{"class":119},[102,12708,275],{"class":108},[102,12710,380],{"class":119},[102,12712,217],{"class":108},[102,12714,4033],{"class":119},[102,12716,5164],{"class":108},[102,12718,12719],{"class":119},"arr[",[102,12721,8423],{"class":187},[102,12723,9961],{"class":119},[102,12725,275],{"class":108},[102,12727,295],{"class":119},[14,12729,12730],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[59,12732,12733],{},[62,12734,12735],{},"1️⃣五只小猪称体重",[93,12737,12739],{"className":95,"code":12738,"language":97,"meta":98,"style":98},"#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",[83,12740,12741,12747,12757,12765,12769,12808,12821,12847,12851,12863,12867,12877,12881,12885,12898,12906],{"__ignoreMap":98},[102,12742,12743,12745],{"class":104,"line":105},[102,12744,314],{"class":108},[102,12746,317],{"class":278},[102,12748,12749,12751,12753,12755],{"class":104,"line":116},[102,12750,322],{"class":108},[102,12752,325],{"class":108},[102,12754,328],{"class":112},[102,12756,266],{"class":119},[102,12758,12759,12761,12763],{"class":104,"line":123},[102,12760,217],{"class":108},[102,12762,220],{"class":112},[102,12764,172],{"class":119},[102,12766,12767],{"class":104,"line":130},[102,12768,120],{"class":119},[102,12770,12771,12773,12776,12778,12780,12782,12784,12787,12789,12792,12794,12796,12798,12801,12803,12806],{"class":104,"line":136},[102,12772,151],{"class":108},[102,12774,12775],{"class":119}," arr[",[102,12777,9354],{"class":187},[102,12779,9961],{"class":119},[102,12781,260],{"class":108},[102,12783,9918],{"class":119},[102,12785,12786],{"class":187},"300",[102,12788,1618],{"class":119},[102,12790,12791],{"class":187},"350",[102,12793,1618],{"class":119},[102,12795,7866],{"class":187},[102,12797,1618],{"class":119},[102,12799,12800],{"class":187},"400",[102,12802,1618],{"class":119},[102,12804,12805],{"class":187},"250",[102,12807,211],{"class":119},[102,12809,12810,12812,12815,12817,12819],{"class":104,"line":142},[102,12811,151],{"class":108},[102,12813,12814],{"class":119}," tmp",[102,12816,260],{"class":108},[102,12818,8423],{"class":187},[102,12820,266],{"class":119},[102,12822,12823,12825,12827,12829,12831,12833,12835,12837,12839,12841,12843,12845],{"class":104,"line":148},[102,12824,12016],{"class":108},[102,12826,2432],{"class":119},[102,12828,217],{"class":108},[102,12830,11848],{"class":119},[102,12832,260],{"class":108},[102,12834,8423],{"class":187},[102,12836,11855],{"class":119},[102,12838,1208],{"class":108},[102,12840,9354],{"class":187},[102,12842,11855],{"class":119},[102,12844,11130],{"class":108},[102,12846,390],{"class":119},[102,12848,12849],{"class":104,"line":157},[102,12850,178],{"class":119},[102,12852,12853,12855,12858,12860],{"class":104,"line":163},[102,12854,1202],{"class":108},[102,12856,12857],{"class":119},"(tmp",[102,12859,1208],{"class":108},[102,12861,12862],{"class":119},"arr[i])\n",[102,12864,12865],{"class":104,"line":175},[102,12866,1914],{"class":119},[102,12868,12869,12872,12874],{"class":104,"line":181},[102,12870,12871],{"class":119},"            tmp",[102,12873,260],{"class":108},[102,12875,12876],{"class":119},"arr[i];\n",[102,12878,12879],{"class":104,"line":202},[102,12880,1252],{"class":119},[102,12882,12883],{"class":104,"line":208},[102,12884,205],{"class":119},[102,12886,12887,12889,12891,12894,12896],{"class":104,"line":214},[102,12888,272],{"class":119},[102,12890,275],{"class":108},[102,12892,12893],{"class":119},"tmp",[102,12895,275],{"class":108},[102,12897,295],{"class":119},[102,12899,12900,12902,12904],{"class":104,"line":225},[102,12901,863],{"class":108},[102,12903,866],{"class":187},[102,12905,266],{"class":119},[102,12907,12908],{"class":104,"line":230},[102,12909,301],{"class":119},[59,12911,12912],{},[62,12913,12914],{},"2️⃣数组元素逆置",[93,12916,12918],{"className":95,"code":12917,"language":97,"meta":98,"style":98},"\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",[83,12919,12920,12925,12931,12941,12949,12953,12988,13004,13036,13049,13054,13059,13071,13081,13091,13096,13105,13115,13120,13125,13152,13156,13171,13175,13186,13195],{"__ignoreMap":98},[102,12921,12922],{"class":104,"line":105},[102,12923,12924],{"class":126},"\u002F\u002F元素逆置\n",[102,12926,12927,12929],{"class":104,"line":116},[102,12928,314],{"class":108},[102,12930,317],{"class":278},[102,12932,12933,12935,12937,12939],{"class":104,"line":123},[102,12934,322],{"class":108},[102,12936,325],{"class":108},[102,12938,328],{"class":112},[102,12940,266],{"class":119},[102,12942,12943,12945,12947],{"class":104,"line":130},[102,12944,217],{"class":108},[102,12946,220],{"class":112},[102,12948,172],{"class":119},[102,12950,12951],{"class":104,"line":136},[102,12952,120],{"class":119},[102,12954,12955,12958,12960,12962,12964,12966,12968,12970,12972,12974,12976,12978,12980,12982,12984,12986],{"class":104,"line":142},[102,12956,12957],{"class":108},"   int",[102,12959,12775],{"class":119},[102,12961,9354],{"class":187},[102,12963,9961],{"class":119},[102,12965,260],{"class":108},[102,12967,9918],{"class":119},[102,12969,7039],{"class":187},[102,12971,1618],{"class":119},[102,12973,7044],{"class":187},[102,12975,1618],{"class":119},[102,12977,7049],{"class":187},[102,12979,1618],{"class":119},[102,12981,9329],{"class":187},[102,12983,1618],{"class":119},[102,12985,9354],{"class":187},[102,12987,211],{"class":119},[102,12989,12990,12992,12995,12997,12999,13001],{"class":104,"line":148},[102,12991,12957],{"class":108},[102,12993,12994],{"class":119}," start",[102,12996,260],{"class":108},[102,12998,8423],{"class":187},[102,13000,992],{"class":119},[102,13002,13003],{"class":126},"\u002F\u002F起始下标\n",[102,13005,13006,13008,13011,13014,13017,13020,13022,13024,13027,13029,13031,13033],{"class":104,"line":157},[102,13007,12957],{"class":108},[102,13009,13010],{"class":119}," end",[102,13012,13013],{"class":108},"=sizeof",[102,13015,13016],{"class":119},"(arr)",[102,13018,13019],{"class":108},"\u002Fsizeof",[102,13021,12664],{"class":119},[102,13023,8423],{"class":187},[102,13025,13026],{"class":119},"])",[102,13028,2833],{"class":108},[102,13030,7039],{"class":187},[102,13032,992],{"class":119},[102,13034,13035],{"class":126},"\u002F\u002F结束下标\n",[102,13037,13038,13041,13044,13046],{"class":104,"line":163},[102,13039,13040],{"class":108},"   while",[102,13042,13043],{"class":119}," (start",[102,13045,1208],{"class":108},[102,13047,13048],{"class":119},"end)\n",[102,13050,13051],{"class":104,"line":175},[102,13052,13053],{"class":119},"   {\n",[102,13055,13056],{"class":104,"line":181},[102,13057,13058],{"class":126},"    \u002F\u002F实现元素互换代码\n",[102,13060,13061,13063,13066,13068],{"class":104,"line":202},[102,13062,151],{"class":108},[102,13064,13065],{"class":119}," temp",[102,13067,260],{"class":108},[102,13069,13070],{"class":119},"arr[start];\n",[102,13072,13073,13076,13078],{"class":104,"line":208},[102,13074,13075],{"class":119},"    arr[start]",[102,13077,260],{"class":108},[102,13079,13080],{"class":119},"arr[end];\n",[102,13082,13083,13086,13088],{"class":104,"line":214},[102,13084,13085],{"class":119},"    arr[end]",[102,13087,260],{"class":108},[102,13089,13090],{"class":119},"temp;\n",[102,13092,13093],{"class":104,"line":225},[102,13094,13095],{"class":126},"    \u002F\u002F下标更新\n",[102,13097,13098,13101,13103],{"class":104,"line":230},[102,13099,13100],{"class":119},"    start",[102,13102,11130],{"class":108},[102,13104,266],{"class":119},[102,13106,13107,13110,13113],{"class":104,"line":236},[102,13108,13109],{"class":119},"    end",[102,13111,13112],{"class":108},"--",[102,13114,266],{"class":119},[102,13116,13117],{"class":104,"line":242},[102,13118,13119],{"class":119},"   }\n",[102,13121,13122],{"class":104,"line":248},[102,13123,13124],{"class":126},"   \u002F\u002F输出逆置后的数组\n",[102,13126,13127,13130,13132,13134,13136,13138,13140,13142,13144,13146,13148,13150],{"class":104,"line":254},[102,13128,13129],{"class":108},"   for",[102,13131,2432],{"class":119},[102,13133,217],{"class":108},[102,13135,11848],{"class":119},[102,13137,260],{"class":108},[102,13139,8423],{"class":187},[102,13141,11855],{"class":119},[102,13143,1208],{"class":108},[102,13145,9354],{"class":187},[102,13147,11855],{"class":119},[102,13149,11130],{"class":108},[102,13151,390],{"class":119},[102,13153,13154],{"class":104,"line":269},[102,13155,13053],{"class":119},[102,13157,13158,13160,13162,13165,13167,13169],{"class":104,"line":298},[102,13159,272],{"class":119},[102,13161,275],{"class":108},[102,13163,13164],{"class":119},"arr[i]",[102,13166,275],{"class":108},[102,13168,485],{"class":278},[102,13170,266],{"class":119},[102,13172,13173],{"class":104,"line":502},[102,13174,13119],{"class":119},[102,13176,13177,13180,13182,13184],{"class":104,"line":507},[102,13178,13179],{"class":112},"   system",[102,13181,380],{"class":119},[102,13183,850],{"class":278},[102,13185,552],{"class":119},[102,13187,13188,13191,13193],{"class":104,"line":512},[102,13189,13190],{"class":108},"   return",[102,13192,866],{"class":187},[102,13194,266],{"class":119},[102,13196,13197],{"class":104,"line":521},[102,13198,301],{"class":119},[59,13200,13201],{},[62,13202,13203],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[93,13205,13207],{"className":95,"code":13206,"language":97,"meta":98,"style":98},"\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",[83,13208,13209,13214,13220,13230,13238,13242,13294,13307,13333,13337,13351,13355,13360,13365,13395,13399,13404,13438,13442,13447,13467,13472,13484,13500,13515,13520,13524,13528,13541,13567,13571,13585,13589,13597],{"__ignoreMap":98},[102,13210,13211],{"class":104,"line":105},[102,13212,13213],{"class":126},"\u002F\u002F冒泡排序,升序\n",[102,13215,13216,13218],{"class":104,"line":116},[102,13217,314],{"class":108},[102,13219,317],{"class":278},[102,13221,13222,13224,13226,13228],{"class":104,"line":123},[102,13223,322],{"class":108},[102,13225,325],{"class":108},[102,13227,328],{"class":112},[102,13229,266],{"class":119},[102,13231,13232,13234,13236],{"class":104,"line":130},[102,13233,217],{"class":108},[102,13235,220],{"class":112},[102,13237,172],{"class":119},[102,13239,13240],{"class":104,"line":136},[102,13241,120],{"class":119},[102,13243,13244,13246,13248,13250,13253,13255,13258,13260,13262,13264,13266,13268,13270,13272,13274,13276,13278,13280,13282,13284,13286,13288,13290,13292],{"class":104,"line":142},[102,13245,151],{"class":108},[102,13247,12775],{"class":119},[102,13249,9453],{"class":187},[102,13251,13252],{"class":119},"] ",[102,13254,260],{"class":108},[102,13256,13257],{"class":119}," {",[102,13259,9329],{"class":187},[102,13261,1618],{"class":119},[102,13263,7044],{"class":187},[102,13265,1618],{"class":119},[102,13267,9428],{"class":187},[102,13269,1618],{"class":119},[102,13271,8423],{"class":187},[102,13273,1618],{"class":119},[102,13275,9354],{"class":187},[102,13277,1618],{"class":119},[102,13279,9403],{"class":187},[102,13281,1618],{"class":119},[102,13283,7039],{"class":187},[102,13285,1618],{"class":119},[102,13287,7049],{"class":187},[102,13289,1618],{"class":119},[102,13291,9453],{"class":187},[102,13293,211],{"class":119},[102,13295,13296,13298,13300,13303,13305],{"class":104,"line":148},[102,13297,272],{"class":119},[102,13299,275],{"class":108},[102,13301,13302],{"class":278},"\"排序前：\"",[102,13304,275],{"class":108},[102,13306,295],{"class":119},[102,13308,13309,13311,13313,13315,13317,13319,13321,13323,13325,13327,13329,13331],{"class":104,"line":157},[102,13310,12016],{"class":108},[102,13312,2432],{"class":119},[102,13314,217],{"class":108},[102,13316,11848],{"class":119},[102,13318,260],{"class":108},[102,13320,8423],{"class":187},[102,13322,11855],{"class":119},[102,13324,1208],{"class":108},[102,13326,9453],{"class":187},[102,13328,11855],{"class":119},[102,13330,11130],{"class":108},[102,13332,390],{"class":119},[102,13334,13335],{"class":104,"line":163},[102,13336,178],{"class":119},[102,13338,13339,13341,13343,13345,13347,13349],{"class":104,"line":175},[102,13340,470],{"class":119},[102,13342,275],{"class":108},[102,13344,13164],{"class":119},[102,13346,275],{"class":108},[102,13348,485],{"class":278},[102,13350,266],{"class":119},[102,13352,13353],{"class":104,"line":181},[102,13354,205],{"class":119},[102,13356,13357],{"class":104,"line":202},[102,13358,13359],{"class":126},"    \u002F\u002F开始冒泡排序\n",[102,13361,13362],{"class":104,"line":208},[102,13363,13364],{"class":126},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[102,13366,13367,13369,13371,13373,13375,13377,13379,13381,13383,13385,13387,13389,13391,13393],{"class":104,"line":214},[102,13368,12016],{"class":108},[102,13370,2432],{"class":119},[102,13372,217],{"class":108},[102,13374,11848],{"class":119},[102,13376,260],{"class":108},[102,13378,8423],{"class":187},[102,13380,11855],{"class":119},[102,13382,1208],{"class":108},[102,13384,9453],{"class":187},[102,13386,2833],{"class":108},[102,13388,7039],{"class":187},[102,13390,11855],{"class":119},[102,13392,11130],{"class":108},[102,13394,390],{"class":119},[102,13396,13397],{"class":104,"line":225},[102,13398,178],{"class":119},[102,13400,13401],{"class":104,"line":230},[102,13402,13403],{"class":126},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[102,13405,13406,13408,13410,13412,13414,13416,13418,13420,13422,13424,13426,13428,13430,13432,13434,13436],{"class":104,"line":236},[102,13407,12217],{"class":108},[102,13409,2432],{"class":119},[102,13411,217],{"class":108},[102,13413,12224],{"class":119},[102,13415,260],{"class":108},[102,13417,8423],{"class":187},[102,13419,12231],{"class":119},[102,13421,1208],{"class":108},[102,13423,9453],{"class":187},[102,13425,2833],{"class":108},[102,13427,9473],{"class":119},[102,13429,2833],{"class":108},[102,13431,7039],{"class":187},[102,13433,12231],{"class":119},[102,13435,11130],{"class":108},[102,13437,390],{"class":119},[102,13439,13440],{"class":104,"line":242},[102,13441,1914],{"class":119},[102,13443,13444],{"class":104,"line":248},[102,13445,13446],{"class":126},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[102,13448,13449,13452,13455,13457,13460,13462,13464],{"class":104,"line":254},[102,13450,13451],{"class":108},"            if",[102,13453,13454],{"class":119},"(arr[j]",[102,13456,1219],{"class":108},[102,13458,13459],{"class":119},"arr[j",[102,13461,1702],{"class":108},[102,13463,7039],{"class":187},[102,13465,13466],{"class":119},"])\n",[102,13468,13469],{"class":104,"line":269},[102,13470,13471],{"class":119},"            {\n",[102,13473,13474,13477,13479,13481],{"class":104,"line":298},[102,13475,13476],{"class":108},"                int",[102,13478,13065],{"class":119},[102,13480,260],{"class":108},[102,13482,13483],{"class":119},"arr[j];\n",[102,13485,13486,13489,13491,13493,13495,13497],{"class":104,"line":502},[102,13487,13488],{"class":119},"                arr[j]",[102,13490,260],{"class":108},[102,13492,13459],{"class":119},[102,13494,1702],{"class":108},[102,13496,7039],{"class":187},[102,13498,13499],{"class":119},"];\n",[102,13501,13502,13505,13507,13509,13511,13513],{"class":104,"line":507},[102,13503,13504],{"class":119},"                arr[j",[102,13506,1702],{"class":108},[102,13508,7039],{"class":187},[102,13510,9961],{"class":119},[102,13512,260],{"class":108},[102,13514,13090],{"class":119},[102,13516,13517],{"class":104,"line":512},[102,13518,13519],{"class":119},"            }\n",[102,13521,13522],{"class":104,"line":521},[102,13523,1252],{"class":119},[102,13525,13526],{"class":104,"line":526},[102,13527,205],{"class":119},[102,13529,13530,13532,13534,13537,13539],{"class":104,"line":532},[102,13531,272],{"class":119},[102,13533,275],{"class":108},[102,13535,13536],{"class":278},"\"排序后：\"",[102,13538,275],{"class":108},[102,13540,295],{"class":119},[102,13542,13543,13545,13547,13549,13551,13553,13555,13557,13559,13561,13563,13565],{"class":104,"line":538},[102,13544,12016],{"class":108},[102,13546,2432],{"class":119},[102,13548,217],{"class":108},[102,13550,11848],{"class":119},[102,13552,260],{"class":108},[102,13554,8423],{"class":187},[102,13556,11855],{"class":119},[102,13558,1208],{"class":108},[102,13560,9453],{"class":187},[102,13562,11855],{"class":119},[102,13564,11130],{"class":108},[102,13566,390],{"class":119},[102,13568,13569],{"class":104,"line":555},[102,13570,178],{"class":119},[102,13572,13573,13575,13577,13579,13581,13583],{"class":104,"line":570},[102,13574,470],{"class":119},[102,13576,275],{"class":108},[102,13578,13164],{"class":119},[102,13580,275],{"class":108},[102,13582,485],{"class":278},[102,13584,266],{"class":119},[102,13586,13587],{"class":104,"line":581},[102,13588,205],{"class":119},[102,13590,13591,13593,13595],{"class":104,"line":819},[102,13592,863],{"class":108},[102,13594,866],{"class":187},[102,13596,266],{"class":119},[102,13598,13599],{"class":104,"line":828},[102,13600,301],{"class":119},[48,13602,13604],{"id":13603},"_172二维数组","1.7.2二维数组",[87,13606,13607],{},[62,13608,13609],{},"二维数组的四种定义方式",[9177,13611,13612,13621],{},[9180,13613,13614],{},[9183,13615,13616,13619],{},[9186,13617,13618],{},"序号",[9186,13620,12594],{},[9223,13622,13623,13633,13642,13651,13660],{},[9183,13624,13625,13627],{},[9228,13626,7039],{},[9228,13628,13629,13630,992],{},"数据类型 数组名[行数]",[102,13631,13632],{},"列数",[9183,13634,13635,13637],{},[9228,13636,7044],{},[9228,13638,13629,13639,13641],{},[102,13640,13632],{},"={ {数据1,数据2}，{数据3，数据4}... }",[9183,13643,13644,13646],{},[9228,13645,7049],{},[9228,13647,13629,13648,13650],{},[102,13649,13632],{},"={数据1,数据2,数据3...}",[9183,13652,13653,13655],{},[9228,13654,9329],{},[9228,13656,13657,13658,13650],{},"数据类型 数组名[]",[102,13659,13632],{},[9183,13661,13662,13665],{},[9228,13663,13664],{},"注意：不能只省略列数",[9228,13666],{},[87,13668,13669],{"start":116},[62,13670,13671],{},"二维数组数组名",[59,13673,13674,13677],{},[62,13675,13676],{},"1.查看二维数组所占内存空间",[62,13678,13679],{},"2.获取二维数组首地址",[14,13681,13682],{},"已知二维数组，求二维数组的行数与列数",[93,13684,13686],{"className":95,"code":13685,"language":97,"meta":98,"style":98},"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",[83,13687,13688,13696,13700,13718,13722,13740,13756,13761,13786,13819],{"__ignoreMap":98},[102,13689,13690,13692,13694],{"class":104,"line":105},[102,13691,217],{"class":108},[102,13693,220],{"class":112},[102,13695,172],{"class":119},[102,13697,13698],{"class":104,"line":116},[102,13699,120],{"class":119},[102,13701,13702,13704,13706,13708,13711,13713,13715],{"class":104,"line":123},[102,13703,151],{"class":108},[102,13705,12775],{"class":119},[102,13707,7044],{"class":187},[102,13709,13710],{"class":119},"][",[102,13712,7049],{"class":187},[102,13714,9961],{"class":119},[102,13716,13717],{"class":108},"=\n",[102,13719,13720],{"class":104,"line":130},[102,13721,178],{"class":119},[102,13723,13724,13727,13729,13731,13733,13735,13737],{"class":104,"line":136},[102,13725,13726],{"class":119},"        {",[102,13728,7039],{"class":187},[102,13730,1618],{"class":119},[102,13732,7044],{"class":187},[102,13734,1618],{"class":119},[102,13736,7049],{"class":187},[102,13738,13739],{"class":119},"},\n",[102,13741,13742,13744,13746,13748,13750,13752,13754],{"class":104,"line":142},[102,13743,13726],{"class":119},[102,13745,9329],{"class":187},[102,13747,1618],{"class":119},[102,13749,9354],{"class":187},[102,13751,1618],{"class":119},[102,13753,9379],{"class":187},[102,13755,301],{"class":119},[102,13757,13758],{"class":104,"line":148},[102,13759,13760],{"class":119},"    };\n",[102,13762,13763,13765,13767,13770,13772,13774,13776,13778,13780,13782,13784],{"class":104,"line":157},[102,13764,272],{"class":119},[102,13766,275],{"class":108},[102,13768,13769],{"class":278},"\"二维数组的行数\"",[102,13771,8713],{"class":108},[102,13773,13016],{"class":119},[102,13775,13019],{"class":108},[102,13777,12664],{"class":119},[102,13779,8423],{"class":187},[102,13781,13026],{"class":119},[102,13783,275],{"class":108},[102,13785,295],{"class":119},[102,13787,13788,13790,13792,13795,13797,13799,13801,13803,13805,13807,13809,13811,13813,13815,13817],{"class":104,"line":163},[102,13789,272],{"class":119},[102,13791,275],{"class":108},[102,13793,13794],{"class":278},"\"二维数组的列数\"",[102,13796,8713],{"class":108},[102,13798,12664],{"class":119},[102,13800,8423],{"class":187},[102,13802,13026],{"class":119},[102,13804,13019],{"class":108},[102,13806,12664],{"class":119},[102,13808,8423],{"class":187},[102,13810,13710],{"class":119},[102,13812,8423],{"class":187},[102,13814,13026],{"class":119},[102,13816,275],{"class":108},[102,13818,295],{"class":119},[102,13820,13821],{"class":104,"line":175},[102,13822,301],{"class":119},[14,13824,13825],{},"查看二维数组首地址",[93,13827,13829],{"className":95,"code":13828,"language":97,"meta":98,"style":98},"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",[83,13830,13831,13848,13874,13899],{"__ignoreMap":98},[102,13832,13833,13835,13837,13840,13842,13844,13846],{"class":104,"line":105},[102,13834,10251],{"class":119},[102,13836,275],{"class":108},[102,13838,13839],{"class":278},"\"二维数组首地址：\"",[102,13841,275],{"class":108},[102,13843,12693],{"class":119},[102,13845,275],{"class":108},[102,13847,295],{"class":119},[102,13849,13850,13852,13854,13857,13859,13861,13863,13866,13868,13870,13872],{"class":104,"line":116},[102,13851,10251],{"class":119},[102,13853,275],{"class":108},[102,13855,13856],{"class":278},"\"二维数组第一行的首地址：\"",[102,13858,275],{"class":108},[102,13860,380],{"class":119},[102,13862,217],{"class":108},[102,13864,13865],{"class":119},")arr[",[102,13867,8423],{"class":187},[102,13869,9961],{"class":119},[102,13871,275],{"class":108},[102,13873,295],{"class":119},[102,13875,13876,13878,13880,13883,13885,13887,13889,13891,13893,13895,13897],{"class":104,"line":123},[102,13877,10251],{"class":119},[102,13879,275],{"class":108},[102,13881,13882],{"class":278},"\"二维数组第二行的首地址：\"",[102,13884,275],{"class":108},[102,13886,380],{"class":119},[102,13888,217],{"class":108},[102,13890,13865],{"class":119},[102,13892,7039],{"class":187},[102,13894,9961],{"class":119},[102,13896,275],{"class":108},[102,13898,295],{"class":119},[102,13900,13901,13903,13905,13908,13910,13912,13914,13916,13918,13920,13922,13924,13926,13928,13930,13932],{"class":104,"line":130},[102,13902,10251],{"class":119},[102,13904,275],{"class":108},[102,13906,13907],{"class":278},"\"二维数组第一个元素的首地址:\"",[102,13909,275],{"class":108},[102,13911,380],{"class":119},[102,13913,217],{"class":108},[102,13915,4033],{"class":119},[102,13917,5164],{"class":108},[102,13919,12719],{"class":119},[102,13921,8423],{"class":187},[102,13923,13710],{"class":119},[102,13925,8423],{"class":187},[102,13927,9961],{"class":119},[102,13929,275],{"class":108},[102,13931,5171],{"class":119},[102,13933,13934],{"class":126},"\u002F\u002F对于数，要加取址符\n",[8955,13936,13937],{},"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":98,"searchDepth":116,"depth":116,"links":13939},[13940,13941,13942,13950,13951,13957,13962],{"id":8995,"depth":116,"text":8996},{"id":9002,"depth":116,"text":9003},{"id":9017,"depth":116,"text":9018,"children":13943},[13944,13945,13946,13947,13948,13949],{"id":9021,"depth":123,"text":9022},{"id":9063,"depth":123,"text":9064},{"id":9126,"depth":123,"text":9127},{"id":10044,"depth":123,"text":10045},{"id":10131,"depth":123,"text":10132},{"id":10226,"depth":123,"text":10227},{"id":10266,"depth":116,"text":10267},{"id":10330,"depth":116,"text":10331,"children":13952},[13953,13954,13955,13956],{"id":10334,"depth":123,"text":10335},{"id":10355,"depth":123,"text":10356},{"id":10364,"depth":123,"text":10365},{"id":10373,"depth":123,"text":10374},{"id":10382,"depth":116,"text":10383,"children":13958},[13959,13960,13961],{"id":10386,"depth":123,"text":10387},{"id":11043,"depth":123,"text":11044},{"id":12434,"depth":123,"text":12435},{"id":12575,"depth":116,"text":12576,"children":13963},[13964,13965],{"id":12579,"depth":123,"text":12580},{"id":13603,"depth":123,"text":13604},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":8987,"description":98},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":13972,"title":13973,"body":13974,"description":98,"extension":8978,"meta":15060,"navigation":651,"path":15061,"seo":15062,"stem":15063,"__hash__":15064},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":13975,"toc":15052},[13976,13979,13983,13990,13996,13999,14064,14068,14071,14147,14151,14154,14157,14160,14372,14376,14381,14442,14447,14512,14517,14607,14610,14715,14719,14722,14728,14870,14874,14877,14891,14894,14939,14942,15049],[10,13977,13973],{"id":13978},"_2函数",[43,13980,13982],{"id":13981},"_21函数概述","2.1函数概述",[87,13984,13985,13988],{},[62,13986,13987],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[62,13989,80],{},[93,13991,13994],{"className":13992,"code":13993,"language":6778,"meta":98},[6776],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[83,13995,13993],{"__ignoreMap":98},[14,13997,13998],{},"小案例",[93,14000,14002],{"className":95,"code":14001,"language":97,"meta":98,"style":98},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[83,14003,14004,14009,14032,14036,14053,14060],{"__ignoreMap":98},[102,14005,14006],{"class":104,"line":105},[102,14007,14008],{"class":126},"\u002F\u002Fnum1,num2形参\n",[102,14010,14011,14013,14016,14018,14020,14023,14025,14027,14030],{"class":104,"line":116},[102,14012,217],{"class":108},[102,14014,14015],{"class":112}," add",[102,14017,380],{"class":119},[102,14019,217],{"class":108},[102,14021,14022],{"class":386}," num1",[102,14024,1618],{"class":119},[102,14026,217],{"class":108},[102,14028,14029],{"class":386}," num2",[102,14031,390],{"class":119},[102,14033,14034],{"class":104,"line":123},[102,14035,120],{"class":119},[102,14037,14038,14040,14043,14045,14048,14050],{"class":104,"line":130},[102,14039,151],{"class":108},[102,14041,14042],{"class":119}," sum",[102,14044,260],{"class":108},[102,14046,14047],{"class":119},"num1",[102,14049,1702],{"class":108},[102,14051,14052],{"class":119},"num2;\n",[102,14054,14055,14057],{"class":104,"line":136},[102,14056,863],{"class":108},[102,14058,14059],{"class":119}," sum;\n",[102,14061,14062],{"class":104,"line":142},[102,14063,301],{"class":119},[43,14065,14067],{"id":14066},"_22函数调用","2.2函数调用",[14,14069,14070],{},"调用刚刚写的求和函数",[93,14072,14074],{"className":95,"code":14073,"language":97,"meta":98,"style":98},"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",[83,14075,14076,14084,14088,14093,14105,14117,14126,14131,14143],{"__ignoreMap":98},[102,14077,14078,14080,14082],{"class":104,"line":105},[102,14079,217],{"class":108},[102,14081,220],{"class":112},[102,14083,172],{"class":119},[102,14085,14086],{"class":104,"line":116},[102,14087,120],{"class":119},[102,14089,14090],{"class":104,"line":123},[102,14091,14092],{"class":126},"    \u002F\u002Fa,b实参\n",[102,14094,14095,14097,14099,14101,14103],{"class":104,"line":130},[102,14096,151],{"class":108},[102,14098,4378],{"class":119},[102,14100,260],{"class":108},[102,14102,8423],{"class":187},[102,14104,266],{"class":119},[102,14106,14107,14109,14111,14113,14115],{"class":104,"line":136},[102,14108,151],{"class":108},[102,14110,6884],{"class":119},[102,14112,260],{"class":108},[102,14114,8423],{"class":187},[102,14116,266],{"class":119},[102,14118,14119,14121,14123],{"class":104,"line":142},[102,14120,2131],{"class":119},[102,14122,2134],{"class":108},[102,14124,14125],{"class":119},"a,b;\n",[102,14127,14128],{"class":104,"line":148},[102,14129,14130],{"class":126},"    \u002F\u002F调用函数时，实参值传给了形参\n",[102,14132,14133,14135,14137,14140],{"class":104,"line":157},[102,14134,272],{"class":119},[102,14136,275],{"class":108},[102,14138,14139],{"class":112},"add",[102,14141,14142],{"class":119},"(a,b);\n",[102,14144,14145],{"class":104,"line":163},[102,14146,301],{"class":119},[43,14148,14150],{"id":14149},"_23值传递","2.3值传递",[14,14152,14153],{},"值传递就是函数调用时实参将数值传给形参",[14,14155,14156],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,14158,14159],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[93,14161,14163],{"className":95,"code":14162,"language":97,"meta":98,"style":98},"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",[83,14164,14165,14186,14190,14203,14220,14238,14249,14258,14267,14280,14296,14312,14321,14325,14333,14337,14349,14361,14368],{"__ignoreMap":98},[102,14166,14167,14169,14172,14174,14176,14178,14180,14182,14184],{"class":104,"line":105},[102,14168,2780],{"class":108},[102,14170,14171],{"class":112}," swap",[102,14173,380],{"class":119},[102,14175,217],{"class":108},[102,14177,14022],{"class":386},[102,14179,1618],{"class":119},[102,14181,217],{"class":108},[102,14183,14029],{"class":386},[102,14185,390],{"class":119},[102,14187,14188],{"class":104,"line":116},[102,14189,120],{"class":119},[102,14191,14192,14194,14196,14199,14201],{"class":104,"line":123},[102,14193,272],{"class":119},[102,14195,275],{"class":108},[102,14197,14198],{"class":278},"\"交换前：\"",[102,14200,275],{"class":108},[102,14202,295],{"class":119},[102,14204,14205,14207,14209,14212,14214,14216,14218],{"class":104,"line":130},[102,14206,272],{"class":119},[102,14208,275],{"class":108},[102,14210,14211],{"class":278},"\"num1=\"",[102,14213,275],{"class":108},[102,14215,14047],{"class":119},[102,14217,275],{"class":108},[102,14219,295],{"class":119},[102,14221,14222,14224,14226,14229,14231,14234,14236],{"class":104,"line":136},[102,14223,272],{"class":119},[102,14225,275],{"class":108},[102,14227,14228],{"class":278},"\"num2=\"",[102,14230,275],{"class":108},[102,14232,14233],{"class":119},"num2",[102,14235,275],{"class":108},[102,14237,295],{"class":119},[102,14239,14240,14242,14244,14246],{"class":104,"line":142},[102,14241,151],{"class":108},[102,14243,13065],{"class":119},[102,14245,260],{"class":108},[102,14247,14248],{"class":119},"num1;\n",[102,14250,14251,14254,14256],{"class":104,"line":148},[102,14252,14253],{"class":119},"    num1",[102,14255,260],{"class":108},[102,14257,14052],{"class":119},[102,14259,14260,14263,14265],{"class":104,"line":157},[102,14261,14262],{"class":119},"    num2",[102,14264,260],{"class":108},[102,14266,13090],{"class":119},[102,14268,14269,14271,14273,14276,14278],{"class":104,"line":163},[102,14270,272],{"class":119},[102,14272,275],{"class":108},[102,14274,14275],{"class":278},"\"交换后：\"",[102,14277,275],{"class":108},[102,14279,295],{"class":119},[102,14281,14282,14284,14286,14288,14290,14292,14294],{"class":104,"line":175},[102,14283,272],{"class":119},[102,14285,275],{"class":108},[102,14287,14211],{"class":278},[102,14289,275],{"class":108},[102,14291,14047],{"class":119},[102,14293,275],{"class":108},[102,14295,295],{"class":119},[102,14297,14298,14300,14302,14304,14306,14308,14310],{"class":104,"line":181},[102,14299,272],{"class":119},[102,14301,275],{"class":108},[102,14303,14228],{"class":278},[102,14305,275],{"class":108},[102,14307,14233],{"class":119},[102,14309,275],{"class":108},[102,14311,295],{"class":119},[102,14313,14314,14316,14318],{"class":104,"line":202},[102,14315,863],{"class":108},[102,14317,992],{"class":119},[102,14319,14320],{"class":126},"\u002F\u002F或者不写\n",[102,14322,14323],{"class":104,"line":208},[102,14324,301],{"class":119},[102,14326,14327,14329,14331],{"class":104,"line":214},[102,14328,217],{"class":108},[102,14330,220],{"class":112},[102,14332,172],{"class":119},[102,14334,14335],{"class":104,"line":225},[102,14336,120],{"class":119},[102,14338,14339,14341,14343,14345,14347],{"class":104,"line":230},[102,14340,151],{"class":108},[102,14342,4378],{"class":119},[102,14344,260],{"class":108},[102,14346,263],{"class":187},[102,14348,266],{"class":119},[102,14350,14351,14353,14355,14357,14359],{"class":104,"line":236},[102,14352,151],{"class":108},[102,14354,6884],{"class":119},[102,14356,260],{"class":108},[102,14358,5016],{"class":187},[102,14360,266],{"class":119},[102,14362,14363,14366],{"class":104,"line":242},[102,14364,14365],{"class":112},"    swap",[102,14367,14142],{"class":119},[102,14369,14370],{"class":104,"line":248},[102,14371,301],{"class":119},[43,14373,14375],{"id":14374},"_24函数的常见形式","2.4函数的常见形式",[87,14377,14378],{},[62,14379,14380],{},"无参无返",[93,14382,14384],{"className":95,"code":14383,"language":97,"meta":98,"style":98},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[83,14385,14386,14394,14398,14411,14415,14423,14427,14432,14438],{"__ignoreMap":98},[102,14387,14388,14390,14392],{"class":104,"line":105},[102,14389,2780],{"class":108},[102,14391,4162],{"class":112},[102,14393,172],{"class":119},[102,14395,14396],{"class":104,"line":116},[102,14397,120],{"class":119},[102,14399,14400,14402,14404,14407,14409],{"class":104,"line":123},[102,14401,272],{"class":119},[102,14403,275],{"class":108},[102,14405,14406],{"class":278},"\"你好\"",[102,14408,275],{"class":108},[102,14410,295],{"class":119},[102,14412,14413],{"class":104,"line":130},[102,14414,301],{"class":119},[102,14416,14417,14419,14421],{"class":104,"line":136},[102,14418,217],{"class":108},[102,14420,220],{"class":112},[102,14422,172],{"class":119},[102,14424,14425],{"class":104,"line":142},[102,14426,120],{"class":119},[102,14428,14429],{"class":104,"line":148},[102,14430,14431],{"class":126},"    \u002F\u002F函数调用\n",[102,14433,14434,14436],{"class":104,"line":157},[102,14435,4720],{"class":112},[102,14437,578],{"class":119},[102,14439,14440],{"class":104,"line":163},[102,14441,301],{"class":119},[87,14443,14444],{"start":116},[62,14445,14446],{},"有参无返",[93,14448,14450],{"className":95,"code":14449,"language":97,"meta":98,"style":98},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[83,14451,14452,14466,14470,14482,14486,14494,14498,14508],{"__ignoreMap":98},[102,14453,14454,14456,14458,14460,14462,14464],{"class":104,"line":105},[102,14455,2780],{"class":108},[102,14457,4542],{"class":112},[102,14459,380],{"class":119},[102,14461,217],{"class":108},[102,14463,4378],{"class":386},[102,14465,390],{"class":119},[102,14467,14468],{"class":104,"line":116},[102,14469,120],{"class":119},[102,14471,14472,14474,14476,14478,14480],{"class":104,"line":123},[102,14473,272],{"class":119},[102,14475,275],{"class":108},[102,14477,14406],{"class":278},[102,14479,275],{"class":108},[102,14481,295],{"class":119},[102,14483,14484],{"class":104,"line":130},[102,14485,301],{"class":119},[102,14487,14488,14490,14492],{"class":104,"line":136},[102,14489,217],{"class":108},[102,14491,220],{"class":112},[102,14493,172],{"class":119},[102,14495,14496],{"class":104,"line":142},[102,14497,120],{"class":119},[102,14499,14500,14502,14504,14506],{"class":104,"line":148},[102,14501,4727],{"class":112},[102,14503,380],{"class":119},[102,14505,5569],{"class":187},[102,14507,552],{"class":119},[102,14509,14510],{"class":104,"line":157},[102,14511,301],{"class":119},[87,14513,14514],{"start":123},[62,14515,14516],{},"无参有返",[93,14518,14520],{"className":95,"code":14519,"language":97,"meta":98,"style":98},"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",[83,14521,14522,14530,14534,14546,14555,14559,14567,14571,14584,14603],{"__ignoreMap":98},[102,14523,14524,14526,14528],{"class":104,"line":105},[102,14525,217],{"class":108},[102,14527,5195],{"class":112},[102,14529,172],{"class":119},[102,14531,14532],{"class":104,"line":116},[102,14533,120],{"class":119},[102,14535,14536,14538,14540,14542,14544],{"class":104,"line":123},[102,14537,272],{"class":119},[102,14539,275],{"class":108},[102,14541,14406],{"class":278},[102,14543,275],{"class":108},[102,14545,295],{"class":119},[102,14547,14548,14550,14553],{"class":104,"line":130},[102,14549,863],{"class":108},[102,14551,14552],{"class":187}," 100",[102,14554,266],{"class":119},[102,14556,14557],{"class":104,"line":136},[102,14558,301],{"class":119},[102,14560,14561,14563,14565],{"class":104,"line":142},[102,14562,217],{"class":108},[102,14564,220],{"class":112},[102,14566,172],{"class":119},[102,14568,14569],{"class":104,"line":148},[102,14570,120],{"class":119},[102,14572,14573,14575,14577,14579,14582],{"class":104,"line":157},[102,14574,151],{"class":108},[102,14576,14022],{"class":119},[102,14578,260],{"class":108},[102,14580,14581],{"class":112},"test03",[102,14583,578],{"class":119},[102,14585,14586,14588,14590,14592,14594,14596,14598,14600],{"class":104,"line":163},[102,14587,272],{"class":119},[102,14589,275],{"class":108},[102,14591,14211],{"class":278},[102,14593,275],{"class":108},[102,14595,14047],{"class":119},[102,14597,275],{"class":108},[102,14599,5171],{"class":119},[102,14601,14602],{"class":126}," \u002F\u002F100\n",[102,14604,14605],{"class":104,"line":175},[102,14606,301],{"class":119},[14,14608,14609],{},"4.有参有返",[93,14611,14613],{"className":95,"code":14612,"language":97,"meta":98,"style":98},"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",[83,14614,14615,14630,14634,14647,14653,14657,14666,14670,14682,14696,14711],{"__ignoreMap":98},[102,14616,14617,14619,14622,14624,14626,14628],{"class":104,"line":105},[102,14618,217],{"class":108},[102,14620,14621],{"class":112}," test04",[102,14623,380],{"class":119},[102,14625,217],{"class":108},[102,14627,4378],{"class":386},[102,14629,390],{"class":119},[102,14631,14632],{"class":104,"line":116},[102,14633,120],{"class":119},[102,14635,14636,14638,14640,14643,14645],{"class":104,"line":123},[102,14637,272],{"class":119},[102,14639,275],{"class":108},[102,14641,14642],{"class":278},"\"hello\"",[102,14644,275],{"class":108},[102,14646,295],{"class":119},[102,14648,14649,14651],{"class":104,"line":130},[102,14650,863],{"class":108},[102,14652,5952],{"class":119},[102,14654,14655],{"class":104,"line":136},[102,14656,301],{"class":119},[102,14658,14659,14661,14664],{"class":104,"line":142},[102,14660,217],{"class":108},[102,14662,14663],{"class":112}," mian",[102,14665,172],{"class":119},[102,14667,14668],{"class":104,"line":148},[102,14669,120],{"class":119},[102,14671,14672,14674,14676,14678,14680],{"class":104,"line":157},[102,14673,151],{"class":108},[102,14675,6884],{"class":119},[102,14677,260],{"class":108},[102,14679,7039],{"class":187},[102,14681,266],{"class":119},[102,14683,14684,14686,14688,14690,14693],{"class":104,"line":163},[102,14685,151],{"class":108},[102,14687,1855],{"class":119},[102,14689,260],{"class":108},[102,14691,14692],{"class":112},"test04",[102,14694,14695],{"class":119},"(b);\n",[102,14697,14698,14700,14702,14704,14706,14708],{"class":104,"line":175},[102,14699,272],{"class":119},[102,14701,275],{"class":108},[102,14703,2794],{"class":119},[102,14705,275],{"class":108},[102,14707,5171],{"class":119},[102,14709,14710],{"class":126}," \u002F\u002F1\n",[102,14712,14713],{"class":104,"line":181},[102,14714,301],{"class":119},[43,14716,14718],{"id":14717},"_25函数的声明","2.5函数的声明",[14,14720,14721],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,14723,14724,14725],{},"函数的",[18,14726,14727],{},"声明可以多次，但是函数的定义只能有一次",[93,14729,14731],{"className":95,"code":14730,"language":97,"meta":98,"style":98},"\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",[83,14732,14733,14738,14743,14767,14775,14779,14791,14803,14819,14823,14843,14847,14866],{"__ignoreMap":98},[102,14734,14735],{"class":104,"line":105},[102,14736,14737],{"class":126},"\u002F\u002F函数声明\n",[102,14739,14740],{"class":104,"line":116},[102,14741,14742],{"class":126},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[102,14744,14745,14747,14750,14752,14754,14756,14758,14760,14762,14764],{"class":104,"line":123},[102,14746,217],{"class":108},[102,14748,14749],{"class":112}," max",[102,14751,380],{"class":119},[102,14753,217],{"class":108},[102,14755,4378],{"class":386},[102,14757,1618],{"class":119},[102,14759,217],{"class":108},[102,14761,6884],{"class":386},[102,14763,4227],{"class":119},[102,14765,14766],{"class":126},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[102,14768,14769,14771,14773],{"class":104,"line":130},[102,14770,217],{"class":108},[102,14772,220],{"class":112},[102,14774,7020],{"class":119},[102,14776,14777],{"class":104,"line":136},[102,14778,120],{"class":119},[102,14780,14781,14783,14785,14787,14789],{"class":104,"line":142},[102,14782,151],{"class":108},[102,14784,4378],{"class":119},[102,14786,260],{"class":108},[102,14788,263],{"class":187},[102,14790,266],{"class":119},[102,14792,14793,14795,14797,14799,14801],{"class":104,"line":148},[102,14794,151],{"class":108},[102,14796,6884],{"class":119},[102,14798,260],{"class":108},[102,14800,5016],{"class":187},[102,14802,266],{"class":119},[102,14804,14805,14807,14809,14812,14815,14817],{"class":104,"line":157},[102,14806,272],{"class":119},[102,14808,275],{"class":108},[102,14810,14811],{"class":112},"max",[102,14813,14814],{"class":119},"(a,b)",[102,14816,275],{"class":108},[102,14818,295],{"class":119},[102,14820,14821],{"class":104,"line":163},[102,14822,301],{"class":119},[102,14824,14825,14827,14829,14831,14833,14835,14837,14839,14841],{"class":104,"line":175},[102,14826,217],{"class":108},[102,14828,14749],{"class":112},[102,14830,380],{"class":119},[102,14832,217],{"class":108},[102,14834,4378],{"class":386},[102,14836,1618],{"class":119},[102,14838,217],{"class":108},[102,14840,6884],{"class":386},[102,14842,390],{"class":119},[102,14844,14845],{"class":104,"line":181},[102,14846,120],{"class":119},[102,14848,14849,14851,14853,14855,14857,14859,14861,14863],{"class":104,"line":202},[102,14850,863],{"class":108},[102,14852,4378],{"class":119},[102,14854,1219],{"class":108},[102,14856,9300],{"class":119},[102,14858,10006],{"class":108},[102,14860,9275],{"class":119},[102,14862,9881],{"class":108},[102,14864,14865],{"class":119},"b;\n",[102,14867,14868],{"class":104,"line":208},[102,14869,301],{"class":119},[43,14871,14873],{"id":14872},"_26函数的分文件编写","2.6函数的分文件编写",[14,14875,14876],{},"4个步骤：",[59,14878,14879,14882,14885,14888],{},[62,14880,14881],{},"1.创建后缀名为.h的头文件",[62,14883,14884],{},"2.创建后缀名为.cpp的源文件",[62,14886,14887],{},"3.在头文件中写函数的定义",[62,14889,14890],{},"4.在源文件中写函数的定义\n示例：",[14,14892,14893],{},"头文件：swap.h",[93,14895,14897],{"className":95,"code":14896,"language":97,"meta":98,"style":98},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[83,14898,14899,14905,14915,14919],{"__ignoreMap":98},[102,14900,14901,14903],{"class":104,"line":105},[102,14902,314],{"class":108},[102,14904,317],{"class":278},[102,14906,14907,14909,14911,14913],{"class":104,"line":116},[102,14908,322],{"class":108},[102,14910,325],{"class":108},[102,14912,328],{"class":112},[102,14914,266],{"class":119},[102,14916,14917],{"class":104,"line":123},[102,14918,14737],{"class":126},[102,14920,14921,14923,14925,14927,14929,14931,14933,14935,14937],{"class":104,"line":130},[102,14922,2780],{"class":108},[102,14924,14171],{"class":112},[102,14926,380],{"class":119},[102,14928,217],{"class":108},[102,14930,4378],{"class":386},[102,14932,1618],{"class":119},[102,14934,217],{"class":108},[102,14936,6884],{"class":386},[102,14938,552],{"class":119},[14,14940,14941],{},"源文件：swap.cpp",[93,14943,14945],{"className":95,"code":14944,"language":97,"meta":98,"style":98},"#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",[83,14946,14947,14954,14959,14979,14983,14993,15002,15011,15028,15045],{"__ignoreMap":98},[102,14948,14949,14951],{"class":104,"line":105},[102,14950,314],{"class":108},[102,14952,14953],{"class":278}," \"swap.h\"\n",[102,14955,14956],{"class":104,"line":116},[102,14957,14958],{"class":126},"\u002F\u002F函数的定义\n",[102,14960,14961,14963,14965,14967,14969,14971,14973,14975,14977],{"class":104,"line":123},[102,14962,2780],{"class":108},[102,14964,14171],{"class":112},[102,14966,380],{"class":119},[102,14968,217],{"class":108},[102,14970,4378],{"class":386},[102,14972,1618],{"class":119},[102,14974,217],{"class":108},[102,14976,6884],{"class":386},[102,14978,390],{"class":119},[102,14980,14981],{"class":104,"line":130},[102,14982,120],{"class":119},[102,14984,14985,14987,14989,14991],{"class":104,"line":136},[102,14986,151],{"class":108},[102,14988,13065],{"class":119},[102,14990,260],{"class":108},[102,14992,4394],{"class":119},[102,14994,14995,14998,15000],{"class":104,"line":142},[102,14996,14997],{"class":119},"    a",[102,14999,260],{"class":108},[102,15001,14865],{"class":119},[102,15003,15004,15007,15009],{"class":104,"line":148},[102,15005,15006],{"class":119},"    b",[102,15008,260],{"class":108},[102,15010,13090],{"class":119},[102,15012,15013,15015,15017,15020,15022,15024,15026],{"class":104,"line":157},[102,15014,272],{"class":119},[102,15016,275],{"class":108},[102,15018,15019],{"class":278},"\"a=\"",[102,15021,275],{"class":108},[102,15023,9275],{"class":119},[102,15025,275],{"class":108},[102,15027,295],{"class":119},[102,15029,15030,15032,15034,15037,15039,15041,15043],{"class":104,"line":163},[102,15031,272],{"class":119},[102,15033,275],{"class":108},[102,15035,15036],{"class":278},"\"b=\"",[102,15038,275],{"class":108},[102,15040,9300],{"class":119},[102,15042,275],{"class":108},[102,15044,295],{"class":119},[102,15046,15047],{"class":104,"line":175},[102,15048,301],{"class":119},[8955,15050,15051],{},"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":98,"searchDepth":116,"depth":116,"links":15053},[15054,15055,15056,15057,15058,15059],{"id":13981,"depth":116,"text":13982},{"id":14066,"depth":116,"text":14067},{"id":14149,"depth":116,"text":14150},{"id":14374,"depth":116,"text":14375},{"id":14717,"depth":116,"text":14718},{"id":14872,"depth":116,"text":14873},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":13973,"description":98},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":15066,"title":15067,"body":15068,"description":15075,"extension":8978,"meta":16471,"navigation":651,"path":16472,"seo":16473,"stem":16474,"__hash__":16475},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":15069,"toc":16461},[15070,15073,15076,15080,15241,15245,15248,15251,15254,15257,15394,15398,15401,15404,15407,15472,15476,15481,15548,15551,15555,15558,15569,15574,15593,15596,15601,15619,15622,15626,15645,15648,15652,15886,15890,15893,15896,15899,16060,16063,16067,16070,16076,16459],[10,15071,15067],{"id":15072},"_3指针",[14,15074,15075],{},"通过指针保存一个地址，指针就是个地址",[43,15077,15079],{"id":15078},"_31定义指针","3.1定义指针",[93,15081,15083],{"className":95,"code":15082,"language":97,"meta":98,"style":98},"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",[83,15084,15085,15093,15097,15102,15114,15119,15127,15137,15155,15175,15179,15184,15189,15194,15208,15223,15237],{"__ignoreMap":98},[102,15086,15087,15089,15091],{"class":104,"line":105},[102,15088,217],{"class":108},[102,15090,220],{"class":112},[102,15092,172],{"class":119},[102,15094,15095],{"class":104,"line":116},[102,15096,120],{"class":119},[102,15098,15099],{"class":104,"line":123},[102,15100,15101],{"class":126},"    \u002F\u002F1.定义指针\n",[102,15103,15104,15106,15108,15110,15112],{"class":104,"line":130},[102,15105,151],{"class":108},[102,15107,4378],{"class":119},[102,15109,260],{"class":108},[102,15111,263],{"class":187},[102,15113,266],{"class":119},[102,15115,15116],{"class":104,"line":136},[102,15117,15118],{"class":126},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[102,15120,15121,15124],{"class":104,"line":142},[102,15122,15123],{"class":108},"    int*",[102,15125,15126],{"class":119},"p;\n",[102,15128,15129,15132,15135],{"class":104,"line":148},[102,15130,15131],{"class":119},"    p",[102,15133,15134],{"class":108},"=&",[102,15136,4394],{"class":119},[102,15138,15139,15141,15143,15146,15149,15151,15153],{"class":104,"line":157},[102,15140,272],{"class":119},[102,15142,275],{"class":108},[102,15144,15145],{"class":278},"\"a的地址为：\"",[102,15147,15148],{"class":108},"\u003C\u003C&",[102,15150,9275],{"class":119},[102,15152,275],{"class":108},[102,15154,295],{"class":119},[102,15156,15157,15159,15161,15164,15166,15168,15170,15172],{"class":104,"line":163},[102,15158,272],{"class":119},[102,15160,275],{"class":108},[102,15162,15163],{"class":278},"\"指针p为：\"",[102,15165,275],{"class":108},[102,15167,14],{"class":119},[102,15169,275],{"class":108},[102,15171,5171],{"class":119},[102,15173,15174],{"class":126},"\u002F\u002F指针p表示的就是a的地址\n",[102,15176,15177],{"class":104,"line":175},[102,15178,652],{"emptyLinePlaceholder":651},[102,15180,15181],{"class":104,"line":181},[102,15182,15183],{"class":126},"    \u002F\u002F2.使用指针\n",[102,15185,15186],{"class":104,"line":202},[102,15187,15188],{"class":126},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[102,15190,15191],{"class":104,"line":208},[102,15192,15193],{"class":126},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[102,15195,15196,15199,15201,15203,15206],{"class":104,"line":214},[102,15197,15198],{"class":108},"    *",[102,15200,14],{"class":119},[102,15202,260],{"class":108},[102,15204,15205],{"class":187},"1000",[102,15207,266],{"class":119},[102,15209,15210,15212,15214,15216,15218,15220],{"class":104,"line":225},[102,15211,272],{"class":119},[102,15213,6664],{"class":108},[102,15215,14],{"class":119},[102,15217,275],{"class":108},[102,15219,5171],{"class":119},[102,15221,15222],{"class":126},"\u002F\u002F1000\n",[102,15224,15225,15227,15229,15231,15233,15235],{"class":104,"line":230},[102,15226,272],{"class":119},[102,15228,275],{"class":108},[102,15230,9275],{"class":119},[102,15232,275],{"class":108},[102,15234,5171],{"class":119},[102,15236,15222],{"class":126},[102,15238,15239],{"class":104,"line":236},[102,15240,301],{"class":119},[43,15242,15244],{"id":15243},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,15246,15247],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,15249,15250],{},"在32位操作系统下：占用4个字节空间",[14,15252,15253],{},"在64位操作系统下：占用8个字节空间",[14,15255,15256],{},"上方是不管啥数据类型的",[93,15258,15260],{"className":95,"code":15259,"language":97,"meta":98,"style":98},"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",[83,15261,15262,15270,15274,15279,15291,15296,15301,15306,15318,15338,15364,15390],{"__ignoreMap":98},[102,15263,15264,15266,15268],{"class":104,"line":105},[102,15265,217],{"class":108},[102,15267,220],{"class":112},[102,15269,172],{"class":119},[102,15271,15272],{"class":104,"line":116},[102,15273,120],{"class":119},[102,15275,15276],{"class":104,"line":123},[102,15277,15278],{"class":126},"    \u002F\u002F指针所占内存空间\n",[102,15280,15281,15283,15285,15287,15289],{"class":104,"line":130},[102,15282,151],{"class":108},[102,15284,4378],{"class":119},[102,15286,260],{"class":108},[102,15288,263],{"class":187},[102,15290,266],{"class":119},[102,15292,15293],{"class":104,"line":136},[102,15294,15295],{"class":126},"    \u002F\u002Fint *p;\n",[102,15297,15298],{"class":104,"line":142},[102,15299,15300],{"class":126},"    \u002F\u002Fp=&a;\n",[102,15302,15303],{"class":104,"line":148},[102,15304,15305],{"class":126},"    \u002F\u002F上述可以写为以下：\n",[102,15307,15308,15310,15312,15314,15316],{"class":104,"line":157},[102,15309,151],{"class":108},[102,15311,5159],{"class":108},[102,15313,14],{"class":119},[102,15315,15134],{"class":108},[102,15317,4394],{"class":119},[102,15319,15320,15322,15324,15327,15329,15331,15333,15335],{"class":104,"line":163},[102,15321,1401],{"class":119},[102,15323,275],{"class":108},[102,15325,15326],{"class":278},"\"sizeof(int *)\"",[102,15328,8713],{"class":108},[102,15330,8594],{"class":119},[102,15332,275],{"class":108},[102,15334,5171],{"class":119},[102,15336,15337],{"class":126},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[102,15339,15340,15342,15344,15346,15348,15350,15352,15354,15356,15358,15361],{"class":104,"line":175},[102,15341,1401],{"class":119},[102,15343,275],{"class":108},[102,15345,15326],{"class":278},[102,15347,8713],{"class":108},[102,15349,380],{"class":119},[102,15351,217],{"class":108},[102,15353,5159],{"class":108},[102,15355,4033],{"class":119},[102,15357,275],{"class":108},[102,15359,15360],{"class":119},"endl",[102,15362,15363],{"class":126},"  \u002F\u002F4字节(32位的话)\n",[102,15365,15366,15368,15370,15373,15375,15377,15379,15381,15383,15385,15387],{"class":104,"line":181},[102,15367,1401],{"class":119},[102,15369,275],{"class":108},[102,15371,15372],{"class":278},"\"sizeof(char *)\"",[102,15374,8713],{"class":108},[102,15376,380],{"class":119},[102,15378,9137],{"class":108},[102,15380,5159],{"class":108},[102,15382,4033],{"class":119},[102,15384,275],{"class":108},[102,15386,5171],{"class":119},[102,15388,15389],{"class":126}," \u002F\u002F4字节(32位的话)\n",[102,15391,15392],{"class":104,"line":202},[102,15393,301],{"class":119},[43,15395,15397],{"id":15396},"_33空指针","3.3空指针",[14,15399,15400],{},"空指针：指针变量指向内存中编号为0的空间",[14,15402,15403],{},"用途：初始化指针变量",[14,15405,15406],{},"注意：空指针指向的内存是不可以访问的",[93,15408,15410],{"className":95,"code":15409,"language":97,"meta":98,"style":98},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[83,15411,15412,15420,15424,15429,15443,15448,15463,15468],{"__ignoreMap":98},[102,15413,15414,15416,15418],{"class":104,"line":105},[102,15415,217],{"class":108},[102,15417,220],{"class":112},[102,15419,172],{"class":119},[102,15421,15422],{"class":104,"line":116},[102,15423,120],{"class":119},[102,15425,15426],{"class":104,"line":123},[102,15427,15428],{"class":126},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[102,15430,15431,15433,15435,15437,15439,15441],{"class":104,"line":130},[102,15432,151],{"class":108},[102,15434,5159],{"class":108},[102,15436,14],{"class":119},[102,15438,260],{"class":108},[102,15440,6569],{"class":187},[102,15442,266],{"class":119},[102,15444,15445],{"class":104,"line":136},[102,15446,15447],{"class":126},"    \u002F\u002F2.空指针不能进行访问\n",[102,15449,15450,15452,15454,15456,15458,15460],{"class":104,"line":142},[102,15451,15198],{"class":108},[102,15453,14],{"class":119},[102,15455,260],{"class":108},[102,15457,5569],{"class":187},[102,15459,992],{"class":119},[102,15461,15462],{"class":126},"\u002F\u002F直接报错，压根不能访问\n",[102,15464,15465],{"class":104,"line":148},[102,15466,15467],{"class":126},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[102,15469,15470],{"class":104,"line":157},[102,15471,301],{"class":119},[43,15473,15475],{"id":15474},"_34野指针","3.4野指针",[14,15477,15478],{},[18,15479,15480],{},"指针变量指向非法的内存空间",[93,15482,15484],{"className":95,"code":15483,"language":97,"meta":98,"style":98},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[83,15485,15486,15494,15498,15527,15532,15544],{"__ignoreMap":98},[102,15487,15488,15490,15492],{"class":104,"line":105},[102,15489,217],{"class":108},[102,15491,220],{"class":112},[102,15493,172],{"class":119},[102,15495,15496],{"class":104,"line":116},[102,15497,120],{"class":119},[102,15499,15500,15502,15504,15506,15508,15510,15512,15514,15516,15519,15522,15524],{"class":104,"line":123},[102,15501,151],{"class":108},[102,15503,5159],{"class":108},[102,15505,14],{"class":119},[102,15507,260],{"class":108},[102,15509,380],{"class":119},[102,15511,217],{"class":108},[102,15513,5159],{"class":108},[102,15515,4033],{"class":119},[102,15517,15518],{"class":108},"0x",[102,15520,15521],{"class":187},"1100",[102,15523,992],{"class":119},[102,15525,15526],{"class":126}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[102,15528,15529],{"class":104,"line":130},[102,15530,15531],{"class":126},"    \u002F\u002F访问野指针报错\n",[102,15533,15534,15536,15538,15540,15542],{"class":104,"line":136},[102,15535,272],{"class":119},[102,15537,6664],{"class":108},[102,15539,14],{"class":119},[102,15541,275],{"class":108},[102,15543,295],{"class":119},[102,15545,15546],{"class":104,"line":142},[102,15547,301],{"class":119},[14,15549,15550],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[43,15552,15554],{"id":15553},"_35const修饰指针","3.5const修饰指针",[14,15556,15557],{},"三种情况：",[59,15559,15560,15563,15566],{},[62,15561,15562],{},"const修饰指针 常量指针",[62,15564,15565],{},"const修饰常量 指针常量",[62,15567,15568],{},"const即修饰指针，又修饰常量",[87,15570,15571],{},[62,15572,15573],{},"常量指针",[93,15575,15577],{"className":95,"code":15576,"language":97,"meta":98,"style":98},"const int *p=&a;\n",[83,15578,15579],{"__ignoreMap":98},[102,15580,15581,15583,15585,15587,15589,15591],{"class":104,"line":105},[102,15582,4456],{"class":108},[102,15584,6392],{"class":108},[102,15586,5159],{"class":108},[102,15588,14],{"class":119},[102,15590,15134],{"class":108},[102,15592,4394],{"class":119},[14,15594,15595],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[87,15597,15598],{"start":116},[62,15599,15600],{},"指针常量",[93,15602,15604],{"className":95,"code":15603,"language":97,"meta":98,"style":98},"int *const p=&a;\n",[83,15605,15606],{"__ignoreMap":98},[102,15607,15608,15610,15613,15615,15617],{"class":104,"line":105},[102,15609,217],{"class":108},[102,15611,15612],{"class":108}," *const",[102,15614,5073],{"class":119},[102,15616,15134],{"class":108},[102,15618,4394],{"class":119},[14,15620,15621],{},"指针的指向不可以改，指针指向的值可以改",[87,15623,15624],{"start":123},[62,15625,15568],{},[93,15627,15629],{"className":95,"code":15628,"language":97,"meta":98,"style":98},"const int *const p=&a;\n",[83,15630,15631],{"__ignoreMap":98},[102,15632,15633,15635,15637,15639,15641,15643],{"class":104,"line":105},[102,15634,4456],{"class":108},[102,15636,6392],{"class":108},[102,15638,15612],{"class":108},[102,15640,5073],{"class":119},[102,15642,15134],{"class":108},[102,15644,4394],{"class":119},[14,15646,15647],{},"指针的指向和指针指向的值都不可以改变",[43,15649,15651],{"id":15650},"_36指针和数组","3.6指针和数组",[93,15653,15655],{"className":95,"code":15654,"language":97,"meta":98,"style":98},"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",[83,15656,15657,15665,15669,15674,15728,15749,15765,15781,15792,15809,15814,15827,15853,15857,15869,15878,15882],{"__ignoreMap":98},[102,15658,15659,15661,15663],{"class":104,"line":105},[102,15660,217],{"class":108},[102,15662,220],{"class":112},[102,15664,172],{"class":119},[102,15666,15667],{"class":104,"line":116},[102,15668,120],{"class":119},[102,15670,15671],{"class":104,"line":123},[102,15672,15673],{"class":126},"    \u002F\u002F利用指针访问数组中的元素\n",[102,15675,15676,15678,15680,15682,15684,15686,15688,15690,15692,15694,15696,15698,15700,15702,15704,15706,15708,15710,15712,15714,15716,15718,15720,15722,15724,15726],{"class":104,"line":130},[102,15677,151],{"class":108},[102,15679,12775],{"class":119},[102,15681,263],{"class":187},[102,15683,9961],{"class":119},[102,15685,260],{"class":108},[102,15687,9918],{"class":119},[102,15689,7039],{"class":187},[102,15691,1618],{"class":119},[102,15693,7044],{"class":187},[102,15695,1618],{"class":119},[102,15697,7049],{"class":187},[102,15699,1618],{"class":119},[102,15701,9329],{"class":187},[102,15703,1618],{"class":119},[102,15705,9354],{"class":187},[102,15707,1618],{"class":119},[102,15709,9379],{"class":187},[102,15711,1618],{"class":119},[102,15713,9403],{"class":187},[102,15715,1618],{"class":119},[102,15717,9428],{"class":187},[102,15719,1618],{"class":119},[102,15721,9453],{"class":187},[102,15723,1618],{"class":119},[102,15725,263],{"class":187},[102,15727,211],{"class":119},[102,15729,15730,15732,15734,15737,15739,15741,15743,15745,15747],{"class":104,"line":136},[102,15731,272],{"class":119},[102,15733,275],{"class":108},[102,15735,15736],{"class":278},"\"数组的第一个元素为：\"",[102,15738,275],{"class":108},[102,15740,12719],{"class":119},[102,15742,8423],{"class":187},[102,15744,9961],{"class":119},[102,15746,275],{"class":108},[102,15748,295],{"class":119},[102,15750,15751,15753,15755,15757,15759,15762],{"class":104,"line":142},[102,15752,151],{"class":108},[102,15754,5159],{"class":108},[102,15756,14],{"class":119},[102,15758,260],{"class":108},[102,15760,15761],{"class":119},"arr;",[102,15763,15764],{"class":126},"\u002F\u002F注意数才要加取地址符号&\n",[102,15766,15767,15769,15771,15773,15775,15777,15779],{"class":104,"line":148},[102,15768,272],{"class":119},[102,15770,275],{"class":108},[102,15772,15736],{"class":278},[102,15774,6664],{"class":108},[102,15776,14],{"class":119},[102,15778,275],{"class":108},[102,15780,295],{"class":119},[102,15782,15783,15785,15787,15789],{"class":104,"line":157},[102,15784,15131],{"class":119},[102,15786,11130],{"class":108},[102,15788,992],{"class":119},[102,15790,15791],{"class":126}," \u002F\u002F让指针向后偏移4个字节\n",[102,15793,15794,15796,15798,15801,15803,15805,15807],{"class":104,"line":163},[102,15795,272],{"class":119},[102,15797,275],{"class":108},[102,15799,15800],{"class":278},"\"数组的第二个元素为：\"",[102,15802,6664],{"class":108},[102,15804,14],{"class":119},[102,15806,275],{"class":108},[102,15808,295],{"class":119},[102,15810,15811],{"class":104,"line":175},[102,15812,15813],{"class":126},"    \u002F\u002F利用指针遍历数组\n",[102,15815,15816,15818,15820,15822,15824],{"class":104,"line":181},[102,15817,151],{"class":108},[102,15819,5159],{"class":108},[102,15821,5025],{"class":119},[102,15823,260],{"class":108},[102,15825,15826],{"class":119},"arr;\n",[102,15828,15829,15831,15833,15835,15837,15839,15841,15843,15845,15847,15849,15851],{"class":104,"line":202},[102,15830,12016],{"class":108},[102,15832,2432],{"class":119},[102,15834,217],{"class":108},[102,15836,11848],{"class":119},[102,15838,260],{"class":108},[102,15840,8423],{"class":187},[102,15842,11855],{"class":119},[102,15844,1208],{"class":108},[102,15846,263],{"class":187},[102,15848,11855],{"class":119},[102,15850,11130],{"class":108},[102,15852,390],{"class":119},[102,15854,15855],{"class":104,"line":208},[102,15856,178],{"class":119},[102,15858,15859,15861,15863,15865,15867],{"class":104,"line":214},[102,15860,470],{"class":119},[102,15862,6664],{"class":108},[102,15864,5025],{"class":119},[102,15866,275],{"class":108},[102,15868,295],{"class":119},[102,15870,15871,15874,15876],{"class":104,"line":225},[102,15872,15873],{"class":119},"        p2",[102,15875,11130],{"class":108},[102,15877,266],{"class":119},[102,15879,15880],{"class":104,"line":230},[102,15881,205],{"class":119},[102,15883,15884],{"class":104,"line":236},[102,15885,301],{"class":119},[43,15887,15889],{"id":15888},"_37指针和函数","3.7指针和函数",[14,15891,15892],{},"利用指针做函数参数，可以修改实参的值",[14,15894,15895],{},"值传递：只改变形参，不改变实参",[14,15897,15898],{},"地址传递：",[93,15900,15902],{"className":95,"code":15901,"language":97,"meta":98,"style":98},"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",[83,15903,15904,15928,15932,15944,15955,15965,15969,15977,15981,15993,16005,16010,16026,16041,16056],{"__ignoreMap":98},[102,15905,15906,15908,15910,15912,15914,15916,15918,15920,15922,15924,15926],{"class":104,"line":105},[102,15907,2780],{"class":108},[102,15909,14171],{"class":112},[102,15911,380],{"class":119},[102,15913,217],{"class":108},[102,15915,5159],{"class":108},[102,15917,5011],{"class":386},[102,15919,1618],{"class":119},[102,15921,217],{"class":108},[102,15923,5159],{"class":108},[102,15925,5025],{"class":386},[102,15927,390],{"class":119},[102,15929,15930],{"class":104,"line":116},[102,15931,120],{"class":119},[102,15933,15934,15936,15938,15941],{"class":104,"line":123},[102,15935,151],{"class":108},[102,15937,13065],{"class":119},[102,15939,15940],{"class":108},"=*",[102,15942,15943],{"class":119},"p1;\n",[102,15945,15946,15948,15950,15952],{"class":104,"line":130},[102,15947,15198],{"class":108},[102,15949,5011],{"class":119},[102,15951,15940],{"class":108},[102,15953,15954],{"class":119},"p2;\n",[102,15956,15957,15959,15961,15963],{"class":104,"line":136},[102,15958,15198],{"class":108},[102,15960,5025],{"class":119},[102,15962,260],{"class":108},[102,15964,13090],{"class":119},[102,15966,15967],{"class":104,"line":142},[102,15968,301],{"class":119},[102,15970,15971,15973,15975],{"class":104,"line":148},[102,15972,217],{"class":108},[102,15974,220],{"class":112},[102,15976,172],{"class":119},[102,15978,15979],{"class":104,"line":157},[102,15980,120],{"class":119},[102,15982,15983,15985,15987,15989,15991],{"class":104,"line":163},[102,15984,151],{"class":108},[102,15986,4378],{"class":119},[102,15988,260],{"class":108},[102,15990,263],{"class":187},[102,15992,266],{"class":119},[102,15994,15995,15997,15999,16001,16003],{"class":104,"line":175},[102,15996,151],{"class":108},[102,15998,6884],{"class":119},[102,16000,260],{"class":108},[102,16002,5016],{"class":187},[102,16004,266],{"class":119},[102,16006,16007],{"class":104,"line":181},[102,16008,16009],{"class":126},"    \u002F\u002F地址传递\n",[102,16011,16012,16014,16016,16018,16021,16023],{"class":104,"line":202},[102,16013,14365],{"class":112},[102,16015,380],{"class":119},[102,16017,5164],{"class":108},[102,16019,16020],{"class":119},"a,",[102,16022,5164],{"class":108},[102,16024,16025],{"class":119},"b);\n",[102,16027,16028,16030,16032,16034,16036,16038],{"class":104,"line":208},[102,16029,272],{"class":119},[102,16031,275],{"class":108},[102,16033,9275],{"class":119},[102,16035,275],{"class":108},[102,16037,5171],{"class":119},[102,16039,16040],{"class":126},"\u002F\u002F20\n",[102,16042,16043,16045,16047,16049,16051,16053],{"class":104,"line":214},[102,16044,272],{"class":119},[102,16046,275],{"class":108},[102,16048,9300],{"class":119},[102,16050,275],{"class":108},[102,16052,5171],{"class":119},[102,16054,16055],{"class":126},"\u002F\u002F10\n",[102,16057,16058],{"class":104,"line":225},[102,16059,301],{"class":119},[14,16061,16062],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[43,16064,16066],{"id":16065},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,16068,16069],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,16071,16072,16073,16075],{},"例如数组：int arr",[102,16074,263],{},"={4,3,6,9,1,2,10,8,7,5}",[93,16077,16079],{"className":95,"code":16078,"language":97,"meta":98,"style":98},"#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",[83,16080,16081,16087,16097,16121,16125,16156,16160,16194,16198,16216,16220,16231,16246,16261,16265,16269,16273,16277,16281,16289,16293,16298,16352,16364,16376,16381,16389,16393,16398,16423,16427,16442,16451,16455],{"__ignoreMap":98},[102,16082,16083,16085],{"class":104,"line":105},[102,16084,314],{"class":108},[102,16086,317],{"class":278},[102,16088,16089,16091,16093,16095],{"class":104,"line":116},[102,16090,322],{"class":108},[102,16092,325],{"class":108},[102,16094,328],{"class":112},[102,16096,266],{"class":119},[102,16098,16099,16101,16104,16106,16108,16110,16112,16114,16116,16119],{"class":104,"line":123},[102,16100,2780],{"class":108},[102,16102,16103],{"class":112}," bubbleSort",[102,16105,380],{"class":119},[102,16107,217],{"class":108},[102,16109,5159],{"class":108},[102,16111,14],{"class":386},[102,16113,1618],{"class":119},[102,16115,217],{"class":108},[102,16117,16118],{"class":386}," len",[102,16120,390],{"class":119},[102,16122,16123],{"class":104,"line":130},[102,16124,120],{"class":119},[102,16126,16127,16129,16131,16133,16135,16137,16139,16141,16143,16146,16148,16150,16152,16154],{"class":104,"line":136},[102,16128,12016],{"class":108},[102,16130,380],{"class":119},[102,16132,217],{"class":108},[102,16134,11848],{"class":119},[102,16136,260],{"class":108},[102,16138,8423],{"class":187},[102,16140,11855],{"class":119},[102,16142,1208],{"class":108},[102,16144,16145],{"class":119},"len",[102,16147,2833],{"class":108},[102,16149,7039],{"class":187},[102,16151,11855],{"class":119},[102,16153,11130],{"class":108},[102,16155,390],{"class":119},[102,16157,16158],{"class":104,"line":142},[102,16159,178],{"class":119},[102,16161,16162,16164,16166,16168,16170,16172,16174,16176,16178,16180,16182,16184,16186,16188,16190,16192],{"class":104,"line":148},[102,16163,12217],{"class":108},[102,16165,380],{"class":119},[102,16167,217],{"class":108},[102,16169,12224],{"class":119},[102,16171,260],{"class":108},[102,16173,8423],{"class":187},[102,16175,12231],{"class":119},[102,16177,1208],{"class":108},[102,16179,16145],{"class":119},[102,16181,2833],{"class":108},[102,16183,9473],{"class":119},[102,16185,2833],{"class":108},[102,16187,7039],{"class":187},[102,16189,12231],{"class":119},[102,16191,11130],{"class":108},[102,16193,390],{"class":119},[102,16195,16196],{"class":104,"line":157},[102,16197,1914],{"class":119},[102,16199,16200,16202,16205,16207,16210,16212,16214],{"class":104,"line":163},[102,16201,13451],{"class":108},[102,16203,16204],{"class":119},"(p[j]",[102,16206,1219],{"class":108},[102,16208,16209],{"class":119},"p[j",[102,16211,1702],{"class":108},[102,16213,7039],{"class":187},[102,16215,13466],{"class":119},[102,16217,16218],{"class":104,"line":175},[102,16219,13471],{"class":119},[102,16221,16222,16224,16226,16228],{"class":104,"line":181},[102,16223,13476],{"class":108},[102,16225,13065],{"class":119},[102,16227,260],{"class":108},[102,16229,16230],{"class":119},"p[j];\n",[102,16232,16233,16236,16238,16240,16242,16244],{"class":104,"line":202},[102,16234,16235],{"class":119},"                p[j]",[102,16237,260],{"class":108},[102,16239,16209],{"class":119},[102,16241,1702],{"class":108},[102,16243,7039],{"class":187},[102,16245,13499],{"class":119},[102,16247,16248,16251,16253,16255,16257,16259],{"class":104,"line":208},[102,16249,16250],{"class":119},"                p[j",[102,16252,1702],{"class":108},[102,16254,7039],{"class":187},[102,16256,9961],{"class":119},[102,16258,260],{"class":108},[102,16260,13090],{"class":119},[102,16262,16263],{"class":104,"line":214},[102,16264,13519],{"class":119},[102,16266,16267],{"class":104,"line":225},[102,16268,1252],{"class":119},[102,16270,16271],{"class":104,"line":230},[102,16272,205],{"class":119},[102,16274,16275],{"class":104,"line":236},[102,16276,301],{"class":119},[102,16278,16279],{"class":104,"line":242},[102,16280,652],{"emptyLinePlaceholder":651},[102,16282,16283,16285,16287],{"class":104,"line":248},[102,16284,217],{"class":108},[102,16286,220],{"class":112},[102,16288,172],{"class":119},[102,16290,16291],{"class":104,"line":254},[102,16292,120],{"class":119},[102,16294,16295],{"class":104,"line":269},[102,16296,16297],{"class":126},"    \u002F\u002F 1.创建数组\n",[102,16299,16300,16302,16304,16306,16308,16310,16312,16314,16316,16318,16320,16322,16324,16326,16328,16330,16332,16334,16336,16338,16340,16342,16344,16346,16348,16350],{"class":104,"line":298},[102,16301,151],{"class":108},[102,16303,12775],{"class":119},[102,16305,263],{"class":187},[102,16307,9961],{"class":119},[102,16309,260],{"class":108},[102,16311,9918],{"class":119},[102,16313,9329],{"class":187},[102,16315,1618],{"class":119},[102,16317,7049],{"class":187},[102,16319,1618],{"class":119},[102,16321,9379],{"class":187},[102,16323,1618],{"class":119},[102,16325,9453],{"class":187},[102,16327,1618],{"class":119},[102,16329,7039],{"class":187},[102,16331,1618],{"class":119},[102,16333,7044],{"class":187},[102,16335,1618],{"class":119},[102,16337,263],{"class":187},[102,16339,1618],{"class":119},[102,16341,9428],{"class":187},[102,16343,1618],{"class":119},[102,16345,9403],{"class":187},[102,16347,1618],{"class":119},[102,16349,9354],{"class":187},[102,16351,211],{"class":119},[102,16353,16354,16356,16358,16360,16362],{"class":104,"line":502},[102,16355,151],{"class":108},[102,16357,16118],{"class":119},[102,16359,260],{"class":108},[102,16361,263],{"class":187},[102,16363,266],{"class":119},[102,16365,16366,16368,16370,16372,16374],{"class":104,"line":507},[102,16367,151],{"class":108},[102,16369,5159],{"class":108},[102,16371,14],{"class":119},[102,16373,260],{"class":108},[102,16375,15826],{"class":119},[102,16377,16378],{"class":104,"line":512},[102,16379,16380],{"class":126},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[102,16382,16383,16386],{"class":104,"line":521},[102,16384,16385],{"class":112},"    bubbleSort",[102,16387,16388],{"class":119},"(p,len);\n",[102,16390,16391],{"class":104,"line":526},[102,16392,652],{"emptyLinePlaceholder":651},[102,16394,16395],{"class":104,"line":532},[102,16396,16397],{"class":126},"    \u002F\u002F 3.打印排序后的数组\n",[102,16399,16400,16402,16404,16406,16408,16410,16412,16414,16416,16419,16421],{"class":104,"line":538},[102,16401,12016],{"class":108},[102,16403,2432],{"class":119},[102,16405,217],{"class":108},[102,16407,11848],{"class":119},[102,16409,260],{"class":108},[102,16411,8423],{"class":187},[102,16413,12029],{"class":119},[102,16415,1208],{"class":108},[102,16417,16418],{"class":119},"len; i",[102,16420,11130],{"class":108},[102,16422,390],{"class":119},[102,16424,16425],{"class":104,"line":555},[102,16426,178],{"class":119},[102,16428,16429,16431,16433,16435,16437,16440],{"class":104,"line":570},[102,16430,470],{"class":119},[102,16432,6664],{"class":108},[102,16434,14],{"class":119},[102,16436,275],{"class":108},[102,16438,16439],{"class":278},"\"\"",[102,16441,266],{"class":119},[102,16443,16444,16447,16449],{"class":104,"line":581},[102,16445,16446],{"class":119},"        p",[102,16448,11130],{"class":108},[102,16450,266],{"class":119},[102,16452,16453],{"class":104,"line":819},[102,16454,205],{"class":119},[102,16456,16457],{"class":104,"line":828},[102,16458,301],{"class":119},[8955,16460,8957],{},{"title":98,"searchDepth":116,"depth":116,"links":16462},[16463,16464,16465,16466,16467,16468,16469,16470],{"id":15078,"depth":116,"text":15079},{"id":15243,"depth":116,"text":15244},{"id":15396,"depth":116,"text":15397},{"id":15474,"depth":116,"text":15475},{"id":15553,"depth":116,"text":15554},{"id":15650,"depth":116,"text":15651},{"id":15888,"depth":116,"text":15889},{"id":16065,"depth":116,"text":16066},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":15067,"description":15075},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":16477,"title":16478,"body":16479,"description":16486,"extension":8978,"meta":19416,"navigation":651,"path":19417,"seo":19418,"stem":19419,"__hash__":19420},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":16480,"toc":19407},[16481,16484,16487,16491,16494,16497,16508,16830,16833,16837,16840,16847,17102,17106,17109,17112,17267,17271,17274,17277,17483,17487,17490,17791,17793,17801,17805,17808,17959,17961,17972,18029,18033,18038,18673,18681,18684,18776,18779,19398,19404],[10,16482,16478],{"id":16483},"_4结构体",[14,16485,16486],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[43,16488,16490],{"id":16489},"_41结构体定义与使用","4.1结构体定义与使用",[14,16492,16493],{},"语法：struct 结构体名 {结构体成员列表}；",[14,16495,16496],{},"通过结构体创建变量的方式：",[59,16498,16499,16502,16505],{},[62,16500,16501],{},"struct 结构体名 变量名",[62,16503,16504],{},"struct 结构体名 变量名={成员1值，成员2值...}",[62,16506,16507],{},"定义结构体时顺便创建变量",[93,16509,16511],{"className":95,"code":16510,"language":97,"meta":98,"style":98},"#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",[83,16512,16513,16519,16529,16535,16540,16546,16550,16555,16559,16563,16568,16573,16579,16584,16591,16595,16602,16606,16610,16614,16618,16622,16626,16632,16636,16642,16650,16658,16662,16667,16672,16683,16688,16699,16710,16721,16726,16749,16753,16758,16784,16788,16793,16804,16815,16826],{"__ignoreMap":98},[102,16514,16515,16517],{"class":104,"line":105},[102,16516,314],{"class":108},[102,16518,317],{"class":278},[102,16520,16521,16523,16525,16527],{"class":104,"line":116},[102,16522,322],{"class":108},[102,16524,325],{"class":108},[102,16526,328],{"class":112},[102,16528,266],{"class":119},[102,16530,16531,16533],{"class":104,"line":123},[102,16532,314],{"class":108},[102,16534,337],{"class":278},[102,16536,16537],{"class":104,"line":130},[102,16538,16539],{"class":126},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[102,16541,16542,16544],{"class":104,"line":136},[102,16543,937],{"class":108},[102,16545,344],{"class":112},[102,16547,16548],{"class":104,"line":142},[102,16549,120],{"class":119},[102,16551,16552],{"class":104,"line":148},[102,16553,16554],{"class":126},"    \u002F\u002F成员列表\n",[102,16556,16557],{"class":104,"line":157},[102,16558,652],{"emptyLinePlaceholder":651},[102,16560,16561],{"class":104,"line":163},[102,16562,7406],{"class":126},[102,16564,16565],{"class":104,"line":175},[102,16566,16567],{"class":119},"    string name;\n",[102,16569,16570],{"class":104,"line":181},[102,16571,16572],{"class":126},"    \u002F\u002F年龄\n",[102,16574,16575,16577],{"class":104,"line":202},[102,16576,151],{"class":108},[102,16578,1262],{"class":119},[102,16580,16581],{"class":104,"line":208},[102,16582,16583],{"class":126},"    \u002F\u002F分数\n",[102,16585,16586,16588],{"class":104,"line":214},[102,16587,151],{"class":108},[102,16589,16590],{"class":119}," score;\n",[102,16592,16593],{"class":104,"line":225},[102,16594,211],{"class":119},[102,16596,16597,16599],{"class":104,"line":230},[102,16598,937],{"class":108},[102,16600,16601],{"class":112}," School\n",[102,16603,16604],{"class":104,"line":236},[102,16605,120],{"class":119},[102,16607,16608],{"class":104,"line":242},[102,16609,16554],{"class":126},[102,16611,16612],{"class":104,"line":248},[102,16613,652],{"emptyLinePlaceholder":651},[102,16615,16616],{"class":104,"line":254},[102,16617,7406],{"class":126},[102,16619,16620],{"class":104,"line":269},[102,16621,16567],{"class":119},[102,16623,16624],{"class":104,"line":298},[102,16625,16572],{"class":126},[102,16627,16628,16630],{"class":104,"line":502},[102,16629,151],{"class":108},[102,16631,1262],{"class":119},[102,16633,16634],{"class":104,"line":507},[102,16635,16583],{"class":126},[102,16637,16638,16640],{"class":104,"line":512},[102,16639,151],{"class":108},[102,16641,16590],{"class":119},[102,16643,16644,16647],{"class":104,"line":521},[102,16645,16646],{"class":119},"} s3;",[102,16648,16649],{"class":126}," \u002F\u002F创建结构体时就创建了变量\n",[102,16651,16652,16654,16656],{"class":104,"line":526},[102,16653,217],{"class":108},[102,16655,220],{"class":112},[102,16657,172],{"class":119},[102,16659,16660],{"class":104,"line":532},[102,16661,120],{"class":119},[102,16663,16664],{"class":104,"line":538},[102,16665,16666],{"class":126},"    \u002F\u002F2.通过学生类型创建具体学生\n",[102,16668,16669],{"class":104,"line":555},[102,16670,16671],{"class":126},"    \u002F\u002F2.1 struct Student s1;\n",[102,16673,16674,16677,16680],{"class":104,"line":570},[102,16675,16676],{"class":108},"    struct",[102,16678,16679],{"class":112}," Student",[102,16681,16682],{"class":119}," s1;\n",[102,16684,16685],{"class":104,"line":581},[102,16686,16687],{"class":126},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[102,16689,16690,16693,16695,16697],{"class":104,"line":819},[102,16691,16692],{"class":119},"    s1.name",[102,16694,260],{"class":108},[102,16696,549],{"class":278},[102,16698,266],{"class":119},[102,16700,16701,16704,16706,16708],{"class":104,"line":828},[102,16702,16703],{"class":119},"    s1.age",[102,16705,260],{"class":108},[102,16707,6080],{"class":187},[102,16709,266],{"class":119},[102,16711,16712,16715,16717,16719],{"class":104,"line":837},[102,16713,16714],{"class":119},"    s1.score",[102,16716,260],{"class":108},[102,16718,9291],{"class":187},[102,16720,266],{"class":119},[102,16722,16723],{"class":104,"line":842},[102,16724,16725],{"class":126},"    \u002F\u002F输出结果\n",[102,16727,16728,16730,16732,16735,16737,16740,16742,16745,16747],{"class":104,"line":855},[102,16729,272],{"class":119},[102,16731,275],{"class":108},[102,16733,16734],{"class":119},"s1.name",[102,16736,275],{"class":108},[102,16738,16739],{"class":119},"s1.age",[102,16741,275],{"class":108},[102,16743,16744],{"class":119},"s1.score",[102,16746,275],{"class":108},[102,16748,295],{"class":119},[102,16750,16751],{"class":104,"line":860},[102,16752,652],{"emptyLinePlaceholder":651},[102,16754,16755],{"class":104,"line":871},[102,16756,16757],{"class":126},"    \u002F\u002F2.2 struct Student s2={...}\n",[102,16759,16760,16762,16764,16767,16769,16771,16774,16776,16778,16780,16782],{"class":104,"line":1359},[102,16761,16676],{"class":108},[102,16763,16679],{"class":112},[102,16765,16766],{"class":119}," s2",[102,16768,260],{"class":108},[102,16770,9918],{"class":119},[102,16772,16773],{"class":278},"\"王五\"",[102,16775,1618],{"class":119},[102,16777,6080],{"class":187},[102,16779,1618],{"class":119},[102,16781,9291],{"class":187},[102,16783,211],{"class":119},[102,16785,16786],{"class":104,"line":1368},[102,16787,652],{"emptyLinePlaceholder":651},[102,16789,16790],{"class":104,"line":1373},[102,16791,16792],{"class":126},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[102,16794,16795,16798,16800,16802],{"class":104,"line":1378},[102,16796,16797],{"class":119},"    s3.name",[102,16799,260],{"class":108},[102,16801,12491],{"class":278},[102,16803,266],{"class":119},[102,16805,16806,16809,16811,16813],{"class":104,"line":1384},[102,16807,16808],{"class":119},"    s3.age",[102,16810,260],{"class":108},[102,16812,6080],{"class":187},[102,16814,266],{"class":119},[102,16816,16817,16820,16822,16824],{"class":104,"line":1398},[102,16818,16819],{"class":119},"    s3.score",[102,16821,260],{"class":108},[102,16823,5016],{"class":187},[102,16825,266],{"class":119},[102,16827,16828],{"class":104,"line":1424},[102,16829,301],{"class":119},[14,16831,16832],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[43,16834,16836],{"id":16835},"_42结构体数组","4.2结构体数组",[14,16838,16839],{},"将自定义的结构体放入到数组中方便维护",[14,16841,16842,16843,16846],{},"语法：struct 结构体名 数组名",[102,16844,16845],{},"元素个数","={ {}，{},...{} };",[93,16848,16850],{"className":95,"code":16849,"language":97,"meta":98,"style":98},"#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",[83,16851,16852,16858,16868,16874,16879,16885,16889,16893,16899,16905,16909,16913,16921,16925,16930,16945,16949,16965,16981,16985,16990,17006,17021,17036,17041,17067,17071,17094,17098],{"__ignoreMap":98},[102,16853,16854,16856],{"class":104,"line":105},[102,16855,314],{"class":108},[102,16857,317],{"class":278},[102,16859,16860,16862,16864,16866],{"class":104,"line":116},[102,16861,322],{"class":108},[102,16863,325],{"class":108},[102,16865,328],{"class":112},[102,16867,266],{"class":119},[102,16869,16870,16872],{"class":104,"line":123},[102,16871,314],{"class":108},[102,16873,337],{"class":278},[102,16875,16876],{"class":104,"line":130},[102,16877,16878],{"class":126},"\u002F\u002F1.定义结构体\n",[102,16880,16881,16883],{"class":104,"line":136},[102,16882,937],{"class":108},[102,16884,344],{"class":112},[102,16886,16887],{"class":104,"line":142},[102,16888,120],{"class":119},[102,16890,16891],{"class":104,"line":148},[102,16892,16567],{"class":119},[102,16894,16895,16897],{"class":104,"line":157},[102,16896,151],{"class":108},[102,16898,1262],{"class":119},[102,16900,16901,16903],{"class":104,"line":163},[102,16902,151],{"class":108},[102,16904,16590],{"class":119},[102,16906,16907],{"class":104,"line":175},[102,16908,652],{"emptyLinePlaceholder":651},[102,16910,16911],{"class":104,"line":181},[102,16912,211],{"class":119},[102,16914,16915,16917,16919],{"class":104,"line":202},[102,16916,217],{"class":108},[102,16918,220],{"class":112},[102,16920,172],{"class":119},[102,16922,16923],{"class":104,"line":208},[102,16924,120],{"class":119},[102,16926,16927],{"class":104,"line":214},[102,16928,16929],{"class":126},"    \u002F\u002F2.创建结构体数组\n",[102,16931,16932,16934,16936,16939,16941,16943],{"class":104,"line":225},[102,16933,16676],{"class":108},[102,16935,16679],{"class":112},[102,16937,16938],{"class":119}," stuArray[",[102,16940,7044],{"class":187},[102,16942,9961],{"class":119},[102,16944,13717],{"class":108},[102,16946,16947],{"class":104,"line":230},[102,16948,178],{"class":119},[102,16950,16951,16953,16955,16957,16959,16961,16963],{"class":104,"line":236},[102,16952,13726],{"class":119},[102,16954,549],{"class":278},[102,16956,1618],{"class":119},[102,16958,6080],{"class":187},[102,16960,1618],{"class":119},[102,16962,5569],{"class":187},[102,16964,13739],{"class":119},[102,16966,16967,16969,16971,16973,16975,16977,16979],{"class":104,"line":242},[102,16968,13726],{"class":119},[102,16970,12491],{"class":278},[102,16972,1618],{"class":119},[102,16974,9602],{"class":187},[102,16976,1618],{"class":119},[102,16978,9602],{"class":187},[102,16980,301],{"class":119},[102,16982,16983],{"class":104,"line":248},[102,16984,205],{"class":119},[102,16986,16987],{"class":104,"line":254},[102,16988,16989],{"class":126},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[102,16991,16992,16995,16997,17000,17002,17004],{"class":104,"line":269},[102,16993,16994],{"class":119},"    stuArray[",[102,16996,7039],{"class":187},[102,16998,16999],{"class":119},"].name",[102,17001,260],{"class":108},[102,17003,12514],{"class":278},[102,17005,266],{"class":119},[102,17007,17008,17010,17012,17015,17017,17019],{"class":104,"line":298},[102,17009,16994],{"class":119},[102,17011,7039],{"class":187},[102,17013,17014],{"class":119},"].age",[102,17016,260],{"class":108},[102,17018,7044],{"class":187},[102,17020,266],{"class":119},[102,17022,17023,17025,17027,17030,17032,17034],{"class":104,"line":502},[102,17024,16994],{"class":119},[102,17026,7039],{"class":187},[102,17028,17029],{"class":119},"].score",[102,17031,260],{"class":108},[102,17033,7044],{"class":187},[102,17035,266],{"class":119},[102,17037,17038],{"class":104,"line":507},[102,17039,17040],{"class":126},"    \u002F\u002F4.遍历结构体数组\n",[102,17042,17043,17045,17047,17049,17051,17053,17055,17057,17059,17061,17063,17065],{"class":104,"line":512},[102,17044,12016],{"class":108},[102,17046,2432],{"class":119},[102,17048,217],{"class":108},[102,17050,11848],{"class":119},[102,17052,260],{"class":108},[102,17054,8423],{"class":187},[102,17056,11855],{"class":119},[102,17058,1208],{"class":108},[102,17060,7044],{"class":187},[102,17062,11855],{"class":119},[102,17064,11130],{"class":108},[102,17066,390],{"class":119},[102,17068,17069],{"class":104,"line":521},[102,17070,178],{"class":119},[102,17072,17073,17075,17077,17080,17082,17085,17087,17090,17092],{"class":104,"line":526},[102,17074,470],{"class":119},[102,17076,275],{"class":108},[102,17078,17079],{"class":119},"stuArray[i].name",[102,17081,275],{"class":108},[102,17083,17084],{"class":119},"stuArray[i].age",[102,17086,275],{"class":108},[102,17088,17089],{"class":119},"stuArray[i].score",[102,17091,275],{"class":108},[102,17093,295],{"class":119},[102,17095,17096],{"class":104,"line":532},[102,17097,205],{"class":119},[102,17099,17100],{"class":104,"line":538},[102,17101,301],{"class":119},[43,17103,17105],{"id":17104},"_43结构体指针","4.3结构体指针",[14,17107,17108],{},"作用：通过指针访问结构体中的成员",[14,17110,17111],{},"利用操作符->可以通过结构体指针访问结构体属性",[93,17113,17115],{"className":95,"code":17114,"language":97,"meta":98,"style":98},"#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",[83,17116,17117,17123,17133,17139,17143,17149,17153,17157,17163,17169,17173,17181,17185,17190,17215,17220,17235,17240,17263],{"__ignoreMap":98},[102,17118,17119,17121],{"class":104,"line":105},[102,17120,314],{"class":108},[102,17122,317],{"class":278},[102,17124,17125,17127,17129,17131],{"class":104,"line":116},[102,17126,322],{"class":108},[102,17128,325],{"class":108},[102,17130,328],{"class":112},[102,17132,266],{"class":119},[102,17134,17135,17137],{"class":104,"line":123},[102,17136,314],{"class":108},[102,17138,337],{"class":278},[102,17140,17141],{"class":104,"line":130},[102,17142,16878],{"class":126},[102,17144,17145,17147],{"class":104,"line":136},[102,17146,937],{"class":108},[102,17148,344],{"class":112},[102,17150,17151],{"class":104,"line":142},[102,17152,120],{"class":119},[102,17154,17155],{"class":104,"line":148},[102,17156,16567],{"class":119},[102,17158,17159,17161],{"class":104,"line":157},[102,17160,151],{"class":108},[102,17162,1262],{"class":119},[102,17164,17165,17167],{"class":104,"line":163},[102,17166,151],{"class":108},[102,17168,16590],{"class":119},[102,17170,17171],{"class":104,"line":175},[102,17172,211],{"class":119},[102,17174,17175,17177,17179],{"class":104,"line":181},[102,17176,217],{"class":108},[102,17178,220],{"class":112},[102,17180,172],{"class":119},[102,17182,17183],{"class":104,"line":202},[102,17184,120],{"class":119},[102,17186,17187],{"class":104,"line":208},[102,17188,17189],{"class":126},"    \u002F\u002F创建学生结构体变量\n",[102,17191,17192,17194,17196,17199,17201,17203,17205,17207,17209,17211,17213],{"class":104,"line":214},[102,17193,16676],{"class":108},[102,17195,16679],{"class":112},[102,17197,17198],{"class":119}," s",[102,17200,260],{"class":108},[102,17202,9918],{"class":119},[102,17204,549],{"class":278},[102,17206,1618],{"class":119},[102,17208,6080],{"class":187},[102,17210,1618],{"class":119},[102,17212,7866],{"class":187},[102,17214,211],{"class":119},[102,17216,17217],{"class":104,"line":225},[102,17218,17219],{"class":126},"    \u002F\u002F通过指针指向结构体变量\n",[102,17221,17222,17224,17226,17228,17230,17232],{"class":104,"line":230},[102,17223,16676],{"class":108},[102,17225,16679],{"class":112},[102,17227,5159],{"class":108},[102,17229,14],{"class":119},[102,17231,15134],{"class":108},[102,17233,17234],{"class":119},"s\n",[102,17236,17237],{"class":104,"line":236},[102,17238,17239],{"class":126},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[102,17241,17242,17244,17246,17249,17251,17254,17256,17259,17261],{"class":104,"line":242},[102,17243,272],{"class":119},[102,17245,275],{"class":108},[102,17247,17248],{"class":119},"p->name",[102,17250,275],{"class":108},[102,17252,17253],{"class":119},"p->age",[102,17255,275],{"class":108},[102,17257,17258],{"class":119},"p->score",[102,17260,275],{"class":108},[102,17262,295],{"class":119},[102,17264,17265],{"class":104,"line":248},[102,17266,301],{"class":119},[43,17268,17270],{"id":17269},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,17272,17273],{},"作用：结构体中的成员可以是另一个结构体",[14,17275,17276],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[93,17278,17280],{"className":95,"code":17279,"language":97,"meta":98,"style":98},"#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",[83,17281,17282,17288,17298,17304,17309,17317,17321,17325,17331,17337,17341,17346,17353,17357,17364,17368,17374,17379,17383,17391,17395,17400,17405,17410,17421,17433,17444,17457,17468,17479],{"__ignoreMap":98},[102,17283,17284,17286],{"class":104,"line":105},[102,17285,314],{"class":108},[102,17287,317],{"class":278},[102,17289,17290,17292,17294,17296],{"class":104,"line":116},[102,17291,322],{"class":108},[102,17293,325],{"class":108},[102,17295,328],{"class":112},[102,17297,266],{"class":119},[102,17299,17300,17302],{"class":104,"line":123},[102,17301,314],{"class":108},[102,17303,337],{"class":278},[102,17305,17306],{"class":104,"line":130},[102,17307,17308],{"class":126},"\u002F\u002F定义学生结构体\n",[102,17310,17311,17313,17315],{"class":104,"line":136},[102,17312,937],{"class":108},[102,17314,16679],{"class":112},[102,17316,4328],{"class":119},[102,17318,17319],{"class":104,"line":142},[102,17320,120],{"class":119},[102,17322,17323],{"class":104,"line":148},[102,17324,16567],{"class":119},[102,17326,17327,17329],{"class":104,"line":157},[102,17328,151],{"class":108},[102,17330,1262],{"class":119},[102,17332,17333,17335],{"class":104,"line":163},[102,17334,151],{"class":108},[102,17336,16590],{"class":119},[102,17338,17339],{"class":104,"line":175},[102,17340,301],{"class":119},[102,17342,17343],{"class":104,"line":181},[102,17344,17345],{"class":126},"\u002F\u002F定义老师结构体\n",[102,17347,17348,17350],{"class":104,"line":202},[102,17349,937],{"class":108},[102,17351,17352],{"class":112}," Teacher\n",[102,17354,17355],{"class":104,"line":208},[102,17356,120],{"class":119},[102,17358,17359,17361],{"class":104,"line":214},[102,17360,151],{"class":108},[102,17362,17363],{"class":119}," id;\n",[102,17365,17366],{"class":104,"line":225},[102,17367,16567],{"class":119},[102,17369,17370,17372],{"class":104,"line":230},[102,17371,151],{"class":108},[102,17373,1262],{"class":119},[102,17375,17376],{"class":104,"line":236},[102,17377,17378],{"class":119},"    Student stu;\n",[102,17380,17381],{"class":104,"line":242},[102,17382,301],{"class":119},[102,17384,17385,17387,17389],{"class":104,"line":248},[102,17386,217],{"class":108},[102,17388,220],{"class":112},[102,17390,7020],{"class":119},[102,17392,17393],{"class":104,"line":254},[102,17394,120],{"class":119},[102,17396,17397],{"class":104,"line":269},[102,17398,17399],{"class":126},"    \u002F\u002F结构体嵌套结构体\n",[102,17401,17402],{"class":104,"line":298},[102,17403,17404],{"class":126},"    \u002F\u002F创建老师\n",[102,17406,17407],{"class":104,"line":502},[102,17408,17409],{"class":119},"    Teacher t;\n",[102,17411,17412,17415,17417,17419],{"class":104,"line":507},[102,17413,17414],{"class":119},"    t.id",[102,17416,260],{"class":108},[102,17418,5569],{"class":187},[102,17420,266],{"class":119},[102,17422,17423,17426,17428,17431],{"class":104,"line":512},[102,17424,17425],{"class":119},"    t.name",[102,17427,260],{"class":108},[102,17429,17430],{"class":278},"\"老王\"",[102,17432,266],{"class":119},[102,17434,17435,17438,17440,17442],{"class":104,"line":521},[102,17436,17437],{"class":119},"    t.age",[102,17439,260],{"class":108},[102,17441,6080],{"class":187},[102,17443,266],{"class":119},[102,17445,17446,17449,17451,17454],{"class":104,"line":526},[102,17447,17448],{"class":119},"    t.stu.name",[102,17450,260],{"class":108},[102,17452,17453],{"class":278},"\"小王\"",[102,17455,17456],{"class":119},"；\n",[102,17458,17459,17462,17464,17466],{"class":104,"line":532},[102,17460,17461],{"class":119},"    t.stu.age",[102,17463,260],{"class":108},[102,17465,5016],{"class":187},[102,17467,266],{"class":119},[102,17469,17470,17473,17475,17477],{"class":104,"line":538},[102,17471,17472],{"class":119},"    t.stu.score",[102,17474,260],{"class":108},[102,17476,9379],{"class":187},[102,17478,266],{"class":119},[102,17480,17481],{"class":104,"line":555},[102,17482,301],{"class":119},[43,17484,17486],{"id":17485},"_45结构体做函数参数","4.5结构体做函数参数",[14,17488,17489],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[93,17491,17493],{"className":95,"code":17492,"language":97,"meta":98,"style":98},"#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",[83,17494,17495,17501,17511,17517,17523,17527,17531,17537,17543,17547,17552,17557,17574,17578,17610,17614,17619,17638,17642,17673,17677,17685,17689,17698,17709,17721,17733,17746,17754,17767,17779,17787],{"__ignoreMap":98},[102,17496,17497,17499],{"class":104,"line":105},[102,17498,314],{"class":108},[102,17500,317],{"class":278},[102,17502,17503,17505,17507,17509],{"class":104,"line":116},[102,17504,322],{"class":108},[102,17506,325],{"class":108},[102,17508,328],{"class":112},[102,17510,266],{"class":119},[102,17512,17513,17515],{"class":104,"line":123},[102,17514,314],{"class":108},[102,17516,337],{"class":278},[102,17518,17519,17521],{"class":104,"line":130},[102,17520,937],{"class":108},[102,17522,344],{"class":112},[102,17524,17525],{"class":104,"line":136},[102,17526,120],{"class":119},[102,17528,17529],{"class":104,"line":142},[102,17530,16567],{"class":119},[102,17532,17533,17535],{"class":104,"line":148},[102,17534,151],{"class":108},[102,17536,1262],{"class":119},[102,17538,17539,17541],{"class":104,"line":157},[102,17540,151],{"class":108},[102,17542,16590],{"class":119},[102,17544,17545],{"class":104,"line":163},[102,17546,211],{"class":119},[102,17548,17549],{"class":104,"line":175},[102,17550,17551],{"class":126},"\u002F\u002F打印学生信息的函数\n",[102,17553,17554],{"class":104,"line":181},[102,17555,17556],{"class":126},"\u002F\u002F值传递\n",[102,17558,17559,17561,17564,17566,17568,17570,17572],{"class":104,"line":202},[102,17560,2780],{"class":108},[102,17562,17563],{"class":112}," printStudent1",[102,17565,380],{"class":119},[102,17567,937],{"class":108},[102,17569,16679],{"class":112},[102,17571,17198],{"class":386},[102,17573,390],{"class":119},[102,17575,17576],{"class":104,"line":208},[102,17577,120],{"class":119},[102,17579,17580,17582,17584,17587,17589,17592,17594,17597,17599,17601,17603,17606,17608],{"class":104,"line":214},[102,17581,1401],{"class":119},[102,17583,275],{"class":108},[102,17585,17586],{"class":119}," s.name ",[102,17588,275],{"class":108},[102,17590,17591],{"class":278}," \" \"",[102,17593,1237],{"class":108},[102,17595,17596],{"class":119}," s.age ",[102,17598,275],{"class":108},[102,17600,17591],{"class":278},[102,17602,1237],{"class":108},[102,17604,17605],{"class":119}," s.score ",[102,17607,275],{"class":108},[102,17609,1240],{"class":119},[102,17611,17612],{"class":104,"line":225},[102,17613,301],{"class":119},[102,17615,17616],{"class":104,"line":230},[102,17617,17618],{"class":126},"\u002F\u002F地址传递\n",[102,17620,17621,17623,17626,17628,17630,17632,17634,17636],{"class":104,"line":236},[102,17622,2780],{"class":108},[102,17624,17625],{"class":112}," printStudent2",[102,17627,380],{"class":119},[102,17629,937],{"class":108},[102,17631,16679],{"class":112},[102,17633,5159],{"class":108},[102,17635,9720],{"class":386},[102,17637,390],{"class":119},[102,17639,17640],{"class":104,"line":242},[102,17641,120],{"class":119},[102,17643,17644,17646,17648,17651,17653,17655,17657,17660,17662,17664,17666,17669,17671],{"class":104,"line":248},[102,17645,1401],{"class":119},[102,17647,275],{"class":108},[102,17649,17650],{"class":119}," s->name ",[102,17652,275],{"class":108},[102,17654,17591],{"class":278},[102,17656,1237],{"class":108},[102,17658,17659],{"class":119}," s->age ",[102,17661,275],{"class":108},[102,17663,17591],{"class":278},[102,17665,1237],{"class":108},[102,17667,17668],{"class":119}," s->score ",[102,17670,275],{"class":108},[102,17672,1240],{"class":119},[102,17674,17675],{"class":104,"line":254},[102,17676,301],{"class":119},[102,17678,17679,17681,17683],{"class":104,"line":269},[102,17680,217],{"class":108},[102,17682,220],{"class":112},[102,17684,172],{"class":119},[102,17686,17687],{"class":104,"line":298},[102,17688,120],{"class":119},[102,17690,17691,17693,17695],{"class":104,"line":502},[102,17692,16676],{"class":108},[102,17694,16679],{"class":112},[102,17696,17697],{"class":119}," s;\n",[102,17699,17700,17703,17705,17707],{"class":104,"line":507},[102,17701,17702],{"class":119},"    s.name ",[102,17704,260],{"class":108},[102,17706,748],{"class":278},[102,17708,266],{"class":119},[102,17710,17711,17714,17716,17719],{"class":104,"line":512},[102,17712,17713],{"class":119},"    s.age ",[102,17715,260],{"class":108},[102,17717,17718],{"class":187}," 20",[102,17720,266],{"class":119},[102,17722,17723,17726,17728,17731],{"class":104,"line":521},[102,17724,17725],{"class":119},"    s.score ",[102,17727,260],{"class":108},[102,17729,17730],{"class":187}," 85",[102,17732,266],{"class":119},[102,17734,17735,17737,17739,17742,17744],{"class":104,"line":526},[102,17736,272],{"class":119},[102,17738,275],{"class":108},[102,17740,17741],{"class":278},"\"值传递:\"",[102,17743,275],{"class":108},[102,17745,295],{"class":119},[102,17747,17748,17751],{"class":104,"line":532},[102,17749,17750],{"class":112},"    printStudent1",[102,17752,17753],{"class":119},"(s);\n",[102,17755,17756,17758,17760,17763,17765],{"class":104,"line":538},[102,17757,272],{"class":119},[102,17759,275],{"class":108},[102,17761,17762],{"class":278},"\"地址传递:\"",[102,17764,275],{"class":108},[102,17766,295],{"class":119},[102,17768,17769,17772,17774,17776],{"class":104,"line":555},[102,17770,17771],{"class":112},"    printStudent2",[102,17773,380],{"class":119},[102,17775,5164],{"class":108},[102,17777,17778],{"class":119},"s); \n",[102,17780,17781,17783,17785],{"class":104,"line":570},[102,17782,863],{"class":108},[102,17784,866],{"class":187},[102,17786,266],{"class":119},[102,17788,17789],{"class":104,"line":581},[102,17790,301],{"class":119},[14,17792,7501],{},[59,17794,17795,17798],{},[62,17796,17797],{},"1.先定义结构体，不要在函数中写结构体的定义",[62,17799,17800],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[43,17802,17804],{"id":17803},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,17806,17807],{},"用const防止误操作",[93,17809,17811],{"className":95,"code":17810,"language":97,"meta":98,"style":98},"#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",[83,17812,17813,17819,17829,17835,17840,17844,17848,17854,17860,17864,17880,17884,17907,17911,17919,17923,17944,17951,17955],{"__ignoreMap":98},[102,17814,17815,17817],{"class":104,"line":105},[102,17816,314],{"class":108},[102,17818,317],{"class":278},[102,17820,17821,17823,17825,17827],{"class":104,"line":116},[102,17822,322],{"class":108},[102,17824,325],{"class":108},[102,17826,328],{"class":112},[102,17828,266],{"class":119},[102,17830,17831,17833],{"class":104,"line":123},[102,17832,314],{"class":108},[102,17834,337],{"class":278},[102,17836,17837],{"class":104,"line":130},[102,17838,17839],{"class":119},"sctuct Student\n",[102,17841,17842],{"class":104,"line":136},[102,17843,120],{"class":119},[102,17845,17846],{"class":104,"line":142},[102,17847,16567],{"class":119},[102,17849,17850,17852],{"class":104,"line":148},[102,17851,151],{"class":108},[102,17853,1262],{"class":119},[102,17855,17856,17858],{"class":104,"line":157},[102,17857,151],{"class":108},[102,17859,16590],{"class":119},[102,17861,17862],{"class":104,"line":163},[102,17863,211],{"class":119},[102,17865,17866,17868,17871,17873,17876,17878],{"class":104,"line":175},[102,17867,2780],{"class":108},[102,17869,17870],{"class":112}," printStudents",[102,17872,380],{"class":119},[102,17874,17875],{"class":112},"student",[102,17877,17198],{"class":386},[102,17879,390],{"class":119},[102,17881,17882],{"class":104,"line":181},[102,17883,120],{"class":119},[102,17885,17886,17888,17890,17893,17895,17898,17900,17903,17905],{"class":104,"line":202},[102,17887,272],{"class":119},[102,17889,275],{"class":108},[102,17891,17892],{"class":119},"s.name",[102,17894,275],{"class":108},[102,17896,17897],{"class":119},"s.age",[102,17899,275],{"class":108},[102,17901,17902],{"class":119},"s.score",[102,17904,275],{"class":108},[102,17906,295],{"class":119},[102,17908,17909],{"class":104,"line":208},[102,17910,301],{"class":119},[102,17912,17913,17915,17917],{"class":104,"line":214},[102,17914,217],{"class":108},[102,17916,220],{"class":112},[102,17918,7020],{"class":119},[102,17920,17921],{"class":104,"line":225},[102,17922,120],{"class":119},[102,17924,17925,17928,17930,17932,17934,17936,17938,17940,17942],{"class":104,"line":230},[102,17926,17927],{"class":119},"    Student s",[102,17929,260],{"class":108},[102,17931,9918],{"class":119},[102,17933,549],{"class":278},[102,17935,1618],{"class":119},[102,17937,6080],{"class":187},[102,17939,1618],{"class":119},[102,17941,6080],{"class":187},[102,17943,211],{"class":119},[102,17945,17946,17949],{"class":104,"line":236},[102,17947,17948],{"class":112},"    printStudent",[102,17950,17753],{"class":119},[102,17952,17953],{"class":104,"line":242},[102,17954,652],{"emptyLinePlaceholder":651},[102,17956,17957],{"class":104,"line":248},[102,17958,301],{"class":119},[14,17960,7501],{},[59,17962,17963,17966,17969],{},[62,17964,17965],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[62,17967,17968],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[62,17970,17971],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[93,17973,17975],{"className":95,"code":17974,"language":97,"meta":98,"style":98},"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",[83,17976,17977,17996,18000,18005,18025],{"__ignoreMap":98},[102,17978,17979,17981,17983,17985,17987,17990,17992,17994],{"class":104,"line":105},[102,17980,2780],{"class":108},[102,17982,17870],{"class":112},[102,17984,380],{"class":119},[102,17986,4456],{"class":108},[102,17988,17989],{"class":112}," student",[102,17991,5159],{"class":108},[102,17993,9720],{"class":386},[102,17995,390],{"class":119},[102,17997,17998],{"class":104,"line":116},[102,17999,120],{"class":119},[102,18001,18002],{"class":104,"line":123},[102,18003,18004],{"class":126},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[102,18006,18007,18009,18011,18013,18015,18017,18019,18021,18023],{"class":104,"line":130},[102,18008,272],{"class":119},[102,18010,275],{"class":108},[102,18012,17892],{"class":119},[102,18014,275],{"class":108},[102,18016,17897],{"class":119},[102,18018,275],{"class":108},[102,18020,17902],{"class":119},[102,18022,275],{"class":108},[102,18024,295],{"class":119},[102,18026,18027],{"class":104,"line":136},[102,18028,301],{"class":119},[43,18030,18032],{"id":18031},"_47案例","4.7案例",[87,18034,18035],{},[62,18036,18037],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[93,18039,18041],{"className":95,"code":18040,"language":97,"meta":98,"style":98},"#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",[83,18042,18043,18049,18059,18065,18072,18076,18082,18086,18091,18097,18103,18107,18111,18117,18121,18126,18131,18144,18148,18153,18179,18183,18195,18222,18226,18238,18248,18252,18257,18286,18290,18302,18311,18338,18349,18359,18363,18367,18371,18376,18399,18403,18427,18431,18449,18475,18479,18502,18524,18547,18551,18555,18559,18567,18571,18576,18596,18601,18614,18619,18645,18653,18658,18665,18669],{"__ignoreMap":98},[102,18044,18045,18047],{"class":104,"line":105},[102,18046,314],{"class":108},[102,18048,317],{"class":278},[102,18050,18051,18053,18055,18057],{"class":104,"line":116},[102,18052,322],{"class":108},[102,18054,325],{"class":108},[102,18056,328],{"class":112},[102,18058,266],{"class":119},[102,18060,18061,18063],{"class":104,"line":123},[102,18062,314],{"class":108},[102,18064,337],{"class":278},[102,18066,18067,18069],{"class":104,"line":130},[102,18068,314],{"class":108},[102,18070,18071],{"class":278},"\u003Cctime>\n",[102,18073,18074],{"class":104,"line":136},[102,18075,17308],{"class":126},[102,18077,18078,18080],{"class":104,"line":142},[102,18079,937],{"class":108},[102,18081,344],{"class":112},[102,18083,18084],{"class":104,"line":148},[102,18085,120],{"class":119},[102,18087,18088],{"class":104,"line":157},[102,18089,18090],{"class":119},"    string sName;\n",[102,18092,18093,18095],{"class":104,"line":163},[102,18094,151],{"class":108},[102,18096,1262],{"class":119},[102,18098,18099,18101],{"class":104,"line":175},[102,18100,151],{"class":108},[102,18102,16590],{"class":119},[102,18104,18105],{"class":104,"line":181},[102,18106,211],{"class":119},[102,18108,18109],{"class":104,"line":202},[102,18110,17345],{"class":126},[102,18112,18113,18115],{"class":104,"line":208},[102,18114,937],{"class":108},[102,18116,17352],{"class":112},[102,18118,18119],{"class":104,"line":214},[102,18120,120],{"class":119},[102,18122,18123],{"class":104,"line":225},[102,18124,18125],{"class":119},"    string tName;\n",[102,18127,18128],{"class":104,"line":230},[102,18129,18130],{"class":126},"    \u002F\u002F学生数组\n",[102,18132,18133,18135,18137,18140,18142],{"class":104,"line":236},[102,18134,16676],{"class":108},[102,18136,16679],{"class":112},[102,18138,18139],{"class":119}," sArray[",[102,18141,9354],{"class":187},[102,18143,13499],{"class":119},[102,18145,18146],{"class":104,"line":242},[102,18147,211],{"class":119},[102,18149,18150],{"class":104,"line":248},[102,18151,18152],{"class":126},"\u002F\u002F给老师和学生赋值的函数\n",[102,18154,18155,18157,18160,18162,18164,18167,18170,18173,18175,18177],{"class":104,"line":254},[102,18156,2780],{"class":108},[102,18158,18159],{"class":112}," allocateSpace",[102,18161,380],{"class":119},[102,18163,937],{"class":108},[102,18165,18166],{"class":112}," Teacher",[102,18168,18169],{"class":386}," tArray",[102,18171,18172],{"class":119},"[],",[102,18174,217],{"class":108},[102,18176,16118],{"class":386},[102,18178,390],{"class":119},[102,18180,18181],{"class":104,"line":269},[102,18182,120],{"class":119},[102,18184,18185,18188,18190,18193],{"class":104,"line":298},[102,18186,18187],{"class":119},"    string nameSeed",[102,18189,260],{"class":108},[102,18191,18192],{"class":278},"\"ABCDE\"",[102,18194,266],{"class":119},[102,18196,18197,18199,18201,18203,18206,18208,18210,18213,18215,18218,18220],{"class":104,"line":502},[102,18198,12016],{"class":108},[102,18200,2432],{"class":119},[102,18202,217],{"class":108},[102,18204,18205],{"class":119}," i ",[102,18207,260],{"class":108},[102,18209,866],{"class":187},[102,18211,18212],{"class":119},"; i ",[102,18214,1208],{"class":108},[102,18216,18217],{"class":119}," len; i",[102,18219,11130],{"class":108},[102,18221,390],{"class":119},[102,18223,18224],{"class":104,"line":507},[102,18225,178],{"class":119},[102,18227,18228,18231,18233,18236],{"class":104,"line":512},[102,18229,18230],{"class":119},"        tArray[i].tName ",[102,18232,260],{"class":108},[102,18234,18235],{"class":278}," \"Teacher_\"",[102,18237,266],{"class":119},[102,18239,18240,18242,18245],{"class":104,"line":521},[102,18241,18230],{"class":119},[102,18243,18244],{"class":108},"+=",[102,18246,18247],{"class":119},"nameSeed[i];\n",[102,18249,18250],{"class":104,"line":526},[102,18251,652],{"emptyLinePlaceholder":651},[102,18253,18254],{"class":104,"line":532},[102,18255,18256],{"class":126},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[102,18258,18259,18261,18263,18265,18268,18270,18272,18275,18277,18279,18282,18284],{"class":104,"line":538},[102,18260,12217],{"class":108},[102,18262,2432],{"class":119},[102,18264,217],{"class":108},[102,18266,18267],{"class":119}," j ",[102,18269,260],{"class":108},[102,18271,866],{"class":187},[102,18273,18274],{"class":119},"; j ",[102,18276,1208],{"class":108},[102,18278,10987],{"class":187},[102,18280,18281],{"class":119},"; j",[102,18283,11130],{"class":108},[102,18285,390],{"class":119},[102,18287,18288],{"class":104,"line":555},[102,18289,1914],{"class":119},[102,18291,18292,18295,18297,18300],{"class":104,"line":570},[102,18293,18294],{"class":119},"            tArray[i].sArray[j].sName ",[102,18296,260],{"class":108},[102,18298,18299],{"class":278}," \"Student_\"",[102,18301,266],{"class":119},[102,18303,18304,18306,18308],{"class":104,"line":581},[102,18305,18294],{"class":119},[102,18307,18244],{"class":108},[102,18309,18310],{"class":119}," nameSeed[j];\n",[102,18312,18313,18316,18319,18321,18323,18325,18327,18329,18331,18333,18335],{"class":104,"line":819},[102,18314,18315],{"class":108},"            int",[102,18317,18318],{"class":119}," random",[102,18320,260],{"class":108},[102,18322,11257],{"class":112},[102,18324,290],{"class":119},[102,18326,9363],{"class":108},[102,18328,9929],{"class":187},[102,18330,1702],{"class":108},[102,18332,9434],{"class":187},[102,18334,992],{"class":119},[102,18336,18337],{"class":126},"\u002F\u002F40~99\n",[102,18339,18340,18343,18345,18347],{"class":104,"line":828},[102,18341,18342],{"class":119},"            tArray[i].sArray[j].age ",[102,18344,260],{"class":108},[102,18346,17718],{"class":187},[102,18348,266],{"class":119},[102,18350,18351,18354,18356],{"class":104,"line":837},[102,18352,18353],{"class":119},"            tArray[i].sArray[j].score ",[102,18355,260],{"class":108},[102,18357,18358],{"class":119}," random;\n",[102,18360,18361],{"class":104,"line":842},[102,18362,1252],{"class":119},[102,18364,18365],{"class":104,"line":855},[102,18366,205],{"class":119},[102,18368,18369],{"class":104,"line":860},[102,18370,301],{"class":119},[102,18372,18373],{"class":104,"line":871},[102,18374,18375],{"class":126},"\u002F\u002F打印所有信息的函数\n",[102,18377,18378,18380,18382,18384,18386,18388,18390,18393,18395,18397],{"class":104,"line":1359},[102,18379,2780],{"class":108},[102,18381,459],{"class":112},[102,18383,380],{"class":119},[102,18385,937],{"class":108},[102,18387,18166],{"class":112},[102,18389,18169],{"class":386},[102,18391,18392],{"class":119},"[], ",[102,18394,217],{"class":108},[102,18396,16118],{"class":386},[102,18398,390],{"class":119},[102,18400,18401],{"class":104,"line":1368},[102,18402,120],{"class":119},[102,18404,18405,18407,18409,18411,18413,18415,18417,18419,18421,18423,18425],{"class":104,"line":1373},[102,18406,12016],{"class":108},[102,18408,2432],{"class":119},[102,18410,217],{"class":108},[102,18412,18205],{"class":119},[102,18414,260],{"class":108},[102,18416,866],{"class":187},[102,18418,18212],{"class":119},[102,18420,1208],{"class":108},[102,18422,18217],{"class":119},[102,18424,11130],{"class":108},[102,18426,390],{"class":119},[102,18428,18429],{"class":104,"line":1378},[102,18430,178],{"class":119},[102,18432,18433,18435,18437,18440,18442,18445,18447],{"class":104,"line":1384},[102,18434,2921],{"class":119},[102,18436,275],{"class":108},[102,18438,18439],{"class":278}," \"Teacher: \"",[102,18441,1237],{"class":108},[102,18443,18444],{"class":119}," tArray[i].tName ",[102,18446,275],{"class":108},[102,18448,1240],{"class":119},[102,18450,18451,18453,18455,18457,18459,18461,18463,18465,18467,18469,18471,18473],{"class":104,"line":1398},[102,18452,12217],{"class":108},[102,18454,2432],{"class":119},[102,18456,217],{"class":108},[102,18458,18267],{"class":119},[102,18460,260],{"class":108},[102,18462,866],{"class":187},[102,18464,18274],{"class":119},[102,18466,1208],{"class":108},[102,18468,10987],{"class":187},[102,18470,18281],{"class":119},[102,18472,11130],{"class":108},[102,18474,390],{"class":119},[102,18476,18477],{"class":104,"line":1424},[102,18478,1914],{"class":119},[102,18480,18481,18483,18485,18488,18490,18493,18495,18498,18500],{"class":104,"line":1429},[102,18482,1229],{"class":119},[102,18484,275],{"class":108},[102,18486,18487],{"class":278}," \"",[102,18489,10118],{"class":187},[102,18491,18492],{"class":278},"Student: \"",[102,18494,1237],{"class":108},[102,18496,18497],{"class":119}," tArray[i].sArray[j].sName",[102,18499,275],{"class":108},[102,18501,295],{"class":119},[102,18503,18504,18506,18508,18510,18512,18515,18517,18520,18522],{"class":104,"line":1435},[102,18505,1229],{"class":119},[102,18507,275],{"class":108},[102,18509,18487],{"class":278},[102,18511,10118],{"class":187},[102,18513,18514],{"class":278},"Age: \"",[102,18516,1237],{"class":108},[102,18518,18519],{"class":119}," tArray[i].sArray[j].age ",[102,18521,275],{"class":108},[102,18523,1240],{"class":119},[102,18525,18526,18528,18530,18532,18534,18537,18539,18542,18544],{"class":104,"line":1450},[102,18527,1229],{"class":119},[102,18529,275],{"class":108},[102,18531,18487],{"class":278},[102,18533,10118],{"class":187},[102,18535,18536],{"class":278},"Score: \"",[102,18538,1237],{"class":108},[102,18540,18541],{"class":119}," tArray[i].sArray[j].score ",[102,18543,275],{"class":108},[102,18545,18546],{"class":119}," endl;   \n",[102,18548,18549],{"class":104,"line":1473},[102,18550,1252],{"class":119},[102,18552,18553],{"class":104,"line":1478},[102,18554,205],{"class":119},[102,18556,18557],{"class":104,"line":1484},[102,18558,301],{"class":119},[102,18560,18561,18563,18565],{"class":104,"line":1499},[102,18562,217],{"class":108},[102,18564,220],{"class":112},[102,18566,172],{"class":119},[102,18568,18569],{"class":104,"line":1508},[102,18570,120],{"class":119},[102,18572,18573],{"class":104,"line":1513},[102,18574,18575],{"class":126},"    \u002F\u002F随机数种子\n",[102,18577,18578,18580,18582,18584,18586,18588,18590,18592,18594],{"class":104,"line":1524},[102,18579,11209],{"class":112},[102,18581,11212],{"class":119},[102,18583,11215],{"class":108},[102,18585,6392],{"class":108},[102,18587,4033],{"class":119},[102,18589,11222],{"class":112},[102,18591,380],{"class":119},[102,18593,6569],{"class":187},[102,18595,11229],{"class":119},[102,18597,18598],{"class":104,"line":1529},[102,18599,18600],{"class":126},"    \u002F\u002F1.创建3名老师的数组\n",[102,18602,18603,18605,18607,18610,18612],{"class":104,"line":1538},[102,18604,16676],{"class":108},[102,18606,18166],{"class":112},[102,18608,18609],{"class":119}," tArray[",[102,18611,7049],{"class":187},[102,18613,13499],{"class":119},[102,18615,18616],{"class":104,"line":2089},[102,18617,18618],{"class":126},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[102,18620,18621,18623,18626,18628,18631,18634,18636,18638,18641,18643],{"class":104,"line":2094},[102,18622,151],{"class":108},[102,18624,18625],{"class":119}," len ",[102,18627,260],{"class":108},[102,18629,18630],{"class":108}," sizeof",[102,18632,18633],{"class":119},"(tArray) ",[102,18635,9611],{"class":108},[102,18637,18630],{"class":108},[102,18639,18640],{"class":119},"(tArray[",[102,18642,8423],{"class":187},[102,18644,12669],{"class":119},[102,18646,18647,18650],{"class":104,"line":2100},[102,18648,18649],{"class":112},"    allocateSpace",[102,18651,18652],{"class":119},"(tArray, len);\n",[102,18654,18655],{"class":104,"line":2106},[102,18656,18657],{"class":126},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[102,18659,18660,18663],{"class":104,"line":2120},[102,18661,18662],{"class":112},"    printInfo",[102,18664,18652],{"class":119},[102,18666,18667],{"class":104,"line":2128},[102,18668,652],{"emptyLinePlaceholder":651},[102,18670,18671],{"class":104,"line":2149},[102,18672,301],{"class":119},[87,18674,18675],{"start":116},[62,18676,18677,18680],{},[18,18678,18679],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,18682,18683],{},"五名英雄信息如下：",[93,18685,18687],{"className":622,"code":18686,"language":624,"meta":98,"style":98},"        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n",[83,18688,18689,18707,18724,18741,18758],{"__ignoreMap":98},[102,18690,18691,18693,18696,18698,18700,18702,18705],{"class":104,"line":105},[102,18692,13726],{"class":119},[102,18694,18695],{"class":278},"\"刘备\"",[102,18697,1618],{"class":119},[102,18699,9799],{"class":187},[102,18701,1618],{"class":119},[102,18703,18704],{"class":278},"\"男\"",[102,18706,13739],{"class":119},[102,18708,18709,18711,18714,18716,18718,18720,18722],{"class":104,"line":116},[102,18710,13726],{"class":119},[102,18712,18713],{"class":278},"\"关羽\"",[102,18715,1618],{"class":119},[102,18717,9774],{"class":187},[102,18719,1618],{"class":119},[102,18721,18704],{"class":278},[102,18723,13739],{"class":119},[102,18725,18726,18728,18731,18733,18735,18737,18739],{"class":104,"line":123},[102,18727,13726],{"class":119},[102,18729,18730],{"class":278},"\"张飞\"",[102,18732,1618],{"class":119},[102,18734,5016],{"class":187},[102,18736,1618],{"class":119},[102,18738,18704],{"class":278},[102,18740,13739],{"class":119},[102,18742,18743,18745,18748,18750,18752,18754,18756],{"class":104,"line":130},[102,18744,13726],{"class":119},[102,18746,18747],{"class":278},"\"赵云\"",[102,18749,1618],{"class":119},[102,18751,9749],{"class":187},[102,18753,1618],{"class":119},[102,18755,18704],{"class":278},[102,18757,13739],{"class":119},[102,18759,18760,18762,18765,18767,18769,18771,18774],{"class":104,"line":136},[102,18761,13726],{"class":119},[102,18763,18764],{"class":278},"\"貂蝉\"",[102,18766,1618],{"class":119},[102,18768,9700],{"class":187},[102,18770,1618],{"class":119},[102,18772,18773],{"class":278},"\"女\"",[102,18775,13739],{"class":119},[14,18777,18778],{},"代码：",[93,18780,18782],{"className":95,"code":18781,"language":97,"meta":98,"style":98},"#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",[83,18783,18784,18790,18800,18806,18813,18817,18821,18827,18832,18836,18841,18864,18868,18893,18897,18930,18935,18964,18969,18984,19010,19030,19035,19040,19044,19048,19053,19075,19079,19103,19107,19169,19173,19177,19185,19189,19194,19205,19209,19225,19241,19257,19273,19289,19293,19313,19334,19339,19352,19359,19364,19370,19375,19388,19394],{"__ignoreMap":98},[102,18785,18786,18788],{"class":104,"line":105},[102,18787,314],{"class":108},[102,18789,317],{"class":278},[102,18791,18792,18794,18796,18798],{"class":104,"line":116},[102,18793,322],{"class":108},[102,18795,325],{"class":108},[102,18797,328],{"class":112},[102,18799,266],{"class":119},[102,18801,18802,18804],{"class":104,"line":123},[102,18803,314],{"class":108},[102,18805,337],{"class":278},[102,18807,18808,18810],{"class":104,"line":130},[102,18809,937],{"class":108},[102,18811,18812],{"class":112}," Sanguo\n",[102,18814,18815],{"class":104,"line":136},[102,18816,120],{"class":119},[102,18818,18819],{"class":104,"line":142},[102,18820,16567],{"class":119},[102,18822,18823,18825],{"class":104,"line":148},[102,18824,151],{"class":108},[102,18826,1262],{"class":119},[102,18828,18829],{"class":104,"line":157},[102,18830,18831],{"class":119},"    string gender;\n",[102,18833,18834],{"class":104,"line":163},[102,18835,211],{"class":119},[102,18837,18838],{"class":104,"line":175},[102,18839,18840],{"class":126},"\u002F\u002F定义排序函数\n",[102,18842,18843,18845,18847,18849,18852,18854,18856,18858,18860,18862],{"class":104,"line":181},[102,18844,2780],{"class":108},[102,18846,16103],{"class":112},[102,18848,380],{"class":119},[102,18850,18851],{"class":112},"Sanguo",[102,18853,5159],{"class":108},[102,18855,9720],{"class":386},[102,18857,1618],{"class":119},[102,18859,217],{"class":108},[102,18861,16118],{"class":386},[102,18863,390],{"class":119},[102,18865,18866],{"class":104,"line":202},[102,18867,120],{"class":119},[102,18869,18870,18872,18874,18876,18878,18880,18882,18884,18886,18889,18891],{"class":104,"line":208},[102,18871,12016],{"class":108},[102,18873,380],{"class":119},[102,18875,217],{"class":108},[102,18877,11848],{"class":119},[102,18879,260],{"class":108},[102,18881,8423],{"class":187},[102,18883,11855],{"class":119},[102,18885,1208],{"class":108},[102,18887,18888],{"class":119},"len;i",[102,18890,11130],{"class":108},[102,18892,390],{"class":119},[102,18894,18895],{"class":104,"line":214},[102,18896,178],{"class":119},[102,18898,18899,18902,18904,18906,18908,18910,18912,18914,18916,18918,18920,18922,18924,18926,18928],{"class":104,"line":225},[102,18900,18901],{"class":108},"     for",[102,18903,2432],{"class":119},[102,18905,217],{"class":108},[102,18907,12224],{"class":119},[102,18909,260],{"class":108},[102,18911,8423],{"class":187},[102,18913,12231],{"class":119},[102,18915,1208],{"class":108},[102,18917,16145],{"class":119},[102,18919,2833],{"class":108},[102,18921,7039],{"class":187},[102,18923,2833],{"class":108},[102,18925,12363],{"class":119},[102,18927,11130],{"class":108},[102,18929,390],{"class":119},[102,18931,18932],{"class":104,"line":230},[102,18933,18934],{"class":119},"     {\n",[102,18936,18937,18940,18943,18945,18948,18950,18953,18955,18957,18959,18961],{"class":104,"line":236},[102,18938,18939],{"class":108},"         if",[102,18941,18942],{"class":119}," ((s",[102,18944,1702],{"class":108},[102,18946,18947],{"class":119},"j)->age ",[102,18949,1219],{"class":108},[102,18951,18952],{"class":119}," (s",[102,18954,1702],{"class":108},[102,18956,9497],{"class":119},[102,18958,1702],{"class":108},[102,18960,7039],{"class":187},[102,18962,18963],{"class":119},")->age)\n",[102,18965,18966],{"class":104,"line":242},[102,18967,18968],{"class":119},"         {\n",[102,18970,18971,18974,18976,18979,18981],{"class":104,"line":248},[102,18972,18973],{"class":119},"             Sanguo temp",[102,18975,15940],{"class":108},[102,18977,18978],{"class":119},"(s",[102,18980,1702],{"class":108},[102,18982,18983],{"class":119},"j);\n",[102,18985,18986,18989,18991,18993,18996,18998,19000,19002,19004,19006,19008],{"class":104,"line":254},[102,18987,18988],{"class":108},"             *",[102,18990,18978],{"class":119},[102,18992,1702],{"class":108},[102,18994,18995],{"class":119},"j)",[102,18997,15940],{"class":108},[102,18999,18978],{"class":119},[102,19001,1702],{"class":108},[102,19003,9497],{"class":119},[102,19005,1702],{"class":108},[102,19007,7039],{"class":187},[102,19009,552],{"class":119},[102,19011,19012,19014,19016,19018,19020,19022,19024,19026,19028],{"class":104,"line":269},[102,19013,18988],{"class":108},[102,19015,18978],{"class":119},[102,19017,1702],{"class":108},[102,19019,9497],{"class":119},[102,19021,1702],{"class":108},[102,19023,7039],{"class":187},[102,19025,4033],{"class":119},[102,19027,260],{"class":108},[102,19029,13090],{"class":119},[102,19031,19032],{"class":104,"line":298},[102,19033,19034],{"class":119},"         }\n",[102,19036,19037],{"class":104,"line":502},[102,19038,19039],{"class":119},"     }\n",[102,19041,19042],{"class":104,"line":507},[102,19043,205],{"class":119},[102,19045,19046],{"class":104,"line":512},[102,19047,301],{"class":119},[102,19049,19050],{"class":104,"line":521},[102,19051,19052],{"class":126},"\u002F\u002F定义打印函数\n",[102,19054,19055,19057,19059,19061,19063,19065,19067,19069,19071,19073],{"class":104,"line":526},[102,19056,2780],{"class":108},[102,19058,459],{"class":112},[102,19060,380],{"class":119},[102,19062,18851],{"class":112},[102,19064,5159],{"class":108},[102,19066,9720],{"class":386},[102,19068,1618],{"class":119},[102,19070,217],{"class":108},[102,19072,16118],{"class":386},[102,19074,390],{"class":119},[102,19076,19077],{"class":104,"line":532},[102,19078,120],{"class":119},[102,19080,19081,19083,19085,19087,19089,19091,19093,19095,19097,19099,19101],{"class":104,"line":538},[102,19082,12016],{"class":108},[102,19084,2432],{"class":119},[102,19086,217],{"class":108},[102,19088,11848],{"class":119},[102,19090,260],{"class":108},[102,19092,8423],{"class":187},[102,19094,11855],{"class":119},[102,19096,1208],{"class":108},[102,19098,18888],{"class":119},[102,19100,11130],{"class":108},[102,19102,390],{"class":119},[102,19104,19105],{"class":104,"line":555},[102,19106,178],{"class":119},[102,19108,19109,19111,19113,19115,19117,19120,19122,19124,19126,19129,19131,19133,19135,19138,19140,19142,19144,19147,19149,19151,19153,19156,19158,19160,19162,19165,19167],{"class":104,"line":570},[102,19110,470],{"class":119},[102,19112,275],{"class":108},[102,19114,9288],{"class":278},[102,19116,10118],{"class":187},[102,19118,19119],{"class":278},"姓名：\"",[102,19121,275],{"class":108},[102,19123,18978],{"class":119},[102,19125,1702],{"class":108},[102,19127,19128],{"class":119},"i)->name",[102,19130,275],{"class":108},[102,19132,9288],{"class":278},[102,19134,10118],{"class":187},[102,19136,19137],{"class":278},"年龄：\"",[102,19139,275],{"class":108},[102,19141,18978],{"class":119},[102,19143,1702],{"class":108},[102,19145,19146],{"class":119},"i)->age",[102,19148,275],{"class":108},[102,19150,9288],{"class":278},[102,19152,10118],{"class":187},[102,19154,19155],{"class":278},"性别：\"",[102,19157,275],{"class":108},[102,19159,18978],{"class":119},[102,19161,1702],{"class":108},[102,19163,19164],{"class":119},"i)->gender",[102,19166,275],{"class":108},[102,19168,295],{"class":119},[102,19170,19171],{"class":104,"line":581},[102,19172,205],{"class":119},[102,19174,19175],{"class":104,"line":819},[102,19176,301],{"class":119},[102,19178,19179,19181,19183],{"class":104,"line":828},[102,19180,217],{"class":108},[102,19182,220],{"class":112},[102,19184,172],{"class":119},[102,19186,19187],{"class":104,"line":837},[102,19188,120],{"class":119},[102,19190,19191],{"class":104,"line":842},[102,19192,19193],{"class":126},"    \u002F\u002F定义结构体变量\n",[102,19195,19196,19199,19201,19203],{"class":104,"line":855},[102,19197,19198],{"class":119},"    Sanguo s1[",[102,19200,9354],{"class":187},[102,19202,9961],{"class":119},[102,19204,13717],{"class":108},[102,19206,19207],{"class":104,"line":860},[102,19208,178],{"class":119},[102,19210,19211,19213,19215,19217,19219,19221,19223],{"class":104,"line":871},[102,19212,13726],{"class":119},[102,19214,18695],{"class":278},[102,19216,1618],{"class":119},[102,19218,9799],{"class":187},[102,19220,1618],{"class":119},[102,19222,18704],{"class":278},[102,19224,13739],{"class":119},[102,19226,19227,19229,19231,19233,19235,19237,19239],{"class":104,"line":1359},[102,19228,13726],{"class":119},[102,19230,18713],{"class":278},[102,19232,1618],{"class":119},[102,19234,9774],{"class":187},[102,19236,1618],{"class":119},[102,19238,18704],{"class":278},[102,19240,13739],{"class":119},[102,19242,19243,19245,19247,19249,19251,19253,19255],{"class":104,"line":1368},[102,19244,13726],{"class":119},[102,19246,18730],{"class":278},[102,19248,1618],{"class":119},[102,19250,5016],{"class":187},[102,19252,1618],{"class":119},[102,19254,18704],{"class":278},[102,19256,13739],{"class":119},[102,19258,19259,19261,19263,19265,19267,19269,19271],{"class":104,"line":1373},[102,19260,13726],{"class":119},[102,19262,18747],{"class":278},[102,19264,1618],{"class":119},[102,19266,9749],{"class":187},[102,19268,1618],{"class":119},[102,19270,18704],{"class":278},[102,19272,13739],{"class":119},[102,19274,19275,19277,19279,19281,19283,19285,19287],{"class":104,"line":1378},[102,19276,13726],{"class":119},[102,19278,18764],{"class":278},[102,19280,1618],{"class":119},[102,19282,9700],{"class":187},[102,19284,1618],{"class":119},[102,19286,18773],{"class":278},[102,19288,13739],{"class":119},[102,19290,19291],{"class":104,"line":1384},[102,19292,13760],{"class":119},[102,19294,19295,19297,19299,19301,19304,19306,19309,19311],{"class":104,"line":1398},[102,19296,151],{"class":108},[102,19298,16118],{"class":119},[102,19300,13013],{"class":108},[102,19302,19303],{"class":119},"(s1)",[102,19305,13019],{"class":108},[102,19307,19308],{"class":119},"(s1[",[102,19310,8423],{"class":187},[102,19312,12669],{"class":119},[102,19314,19315,19318,19320,19323,19325,19327,19330,19332],{"class":104,"line":1424},[102,19316,19317],{"class":119},"    Sanguo ",[102,19319,191],{"class":108},[102,19321,19322],{"class":119},"s ",[102,19324,260],{"class":108},[102,19326,2791],{"class":108},[102,19328,19329],{"class":119},"s1[",[102,19331,8423],{"class":187},[102,19333,13499],{"class":119},[102,19335,19336],{"class":104,"line":1429},[102,19337,19338],{"class":126},"    \u002F\u002F排序前：\n",[102,19340,19341,19343,19345,19348,19350],{"class":104,"line":1435},[102,19342,1401],{"class":119},[102,19344,275],{"class":108},[102,19346,19347],{"class":278}," \"排序前：\"",[102,19349,1237],{"class":108},[102,19351,1240],{"class":119},[102,19353,19354,19356],{"class":104,"line":1450},[102,19355,18662],{"class":112},[102,19357,19358],{"class":119},"(s,len);\n",[102,19360,19361],{"class":104,"line":1473},[102,19362,19363],{"class":126},"    \u002F\u002F调用排序函数\n",[102,19365,19366,19368],{"class":104,"line":1478},[102,19367,16385],{"class":112},[102,19369,19358],{"class":119},[102,19371,19372],{"class":104,"line":1484},[102,19373,19374],{"class":126},"    \u002F\u002F排序后\n",[102,19376,19377,19379,19381,19384,19386],{"class":104,"line":1499},[102,19378,1401],{"class":119},[102,19380,275],{"class":108},[102,19382,19383],{"class":278}," \"排序后：\"",[102,19385,1237],{"class":108},[102,19387,1240],{"class":119},[102,19389,19390,19392],{"class":104,"line":1508},[102,19391,18662],{"class":112},[102,19393,19358],{"class":119},[102,19395,19396],{"class":104,"line":1513},[102,19397,301],{"class":119},[14,19399,19400,19401,19403],{},"注意：使用指针时直接用传首地址**&s",[102,19402,8423],{},"**",[8955,19405,19406],{},"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":98,"searchDepth":116,"depth":116,"links":19408},[19409,19410,19411,19412,19413,19414,19415],{"id":16489,"depth":116,"text":16490},{"id":16835,"depth":116,"text":16836},{"id":17104,"depth":116,"text":17105},{"id":17269,"depth":116,"text":17270},{"id":17485,"depth":116,"text":17486},{"id":17803,"depth":116,"text":17804},{"id":18031,"depth":116,"text":18032},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":16478,"description":16486},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":19422,"title":19423,"body":19424,"description":98,"extension":8978,"meta":20761,"navigation":651,"path":20762,"seo":20763,"stem":20764,"__hash__":20765},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":19425,"toc":20755},[19426,19429,19433,19439,19453,19458,19461,19465,19472,19478,19481,19488,19494,19499,19502,19505,19508,20070,20073,20087,20091,20096,20112,20250,20253,20259,20262,20267,20275,20382,20385,20390,20393,20398,20401,20407,20410,20752],[10,19427,19423],{"id":19428},"_5程序内存模型",[43,19430,19432],{"id":19431},"_51内存分区模型","5.1内存分区模型",[14,19434,19435,19436],{},"C++程序在执行时，将内存大方向划分为",[18,19437,19438],{},"4个区域",[59,19440,19441,19444,19447,19450],{},[62,19442,19443],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[62,19445,19446],{},"全局区：存放全局变量和静态变量以及常量",[62,19448,19449],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[62,19451,19452],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,19454,19455],{},[18,19456,19457],{},"内存四区意义：",[14,19459,19460],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[48,19462,19464],{"id":19463},"_511程序运行前","5.1.1程序运行前",[14,19466,19467,19468,19471],{},"​\t在程序编译后，生成了exe可执行程序，",[18,19469,19470],{},"未执行该程序前","分为两个区域",[14,19473,19474,19475],{},"​\t",[18,19476,19477],{},"代码区：",[14,19479,19480],{},"​\t\t存放 CPU 执行的机器指令",[14,19482,19483,19484,19487],{},"​\t\t代码区是",[18,19485,19486],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,19489,19483,19490,19493],{},[18,19491,19492],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,19495,19474,19496],{},[18,19497,19498],{},"全局区：",[14,19500,19501],{},"​\t\t全局变量和静态变量存放在此.",[14,19503,19504],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,19506,19507],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[93,19509,19511],{"className":95,"code":19510,"language":97,"meta":98,"style":98},"\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",[83,19512,19513,19518,19531,19544,19548,19553,19568,19583,19587,19595,19599,19604,19617,19630,19634,19639,19665,19691,19695,19722,19748,19752,19757,19772,19787,19791,19817,19843,19847,19872,19897,19901,19927,19953,19957,19973,19988,20014,20040,20044,20054,20058,20066],{"__ignoreMap":98},[102,19514,19515],{"class":104,"line":105},[102,19516,19517],{"class":126},"\u002F\u002F全局变量\n",[102,19519,19520,19522,19525,19527,19529],{"class":104,"line":116},[102,19521,217],{"class":108},[102,19523,19524],{"class":119}," g_a ",[102,19526,260],{"class":108},[102,19528,989],{"class":187},[102,19530,266],{"class":119},[102,19532,19533,19535,19538,19540,19542],{"class":104,"line":123},[102,19534,217],{"class":108},[102,19536,19537],{"class":119}," g_b ",[102,19539,260],{"class":108},[102,19541,989],{"class":187},[102,19543,266],{"class":119},[102,19545,19546],{"class":104,"line":130},[102,19547,652],{"emptyLinePlaceholder":651},[102,19549,19550],{"class":104,"line":136},[102,19551,19552],{"class":126},"\u002F\u002F全局常量\n",[102,19554,19555,19557,19559,19562,19564,19566],{"class":104,"line":142},[102,19556,4456],{"class":108},[102,19558,6392],{"class":108},[102,19560,19561],{"class":119}," c_g_a ",[102,19563,260],{"class":108},[102,19565,989],{"class":187},[102,19567,266],{"class":119},[102,19569,19570,19572,19574,19577,19579,19581],{"class":104,"line":148},[102,19571,4456],{"class":108},[102,19573,6392],{"class":108},[102,19575,19576],{"class":119}," c_g_b ",[102,19578,260],{"class":108},[102,19580,989],{"class":187},[102,19582,266],{"class":119},[102,19584,19585],{"class":104,"line":157},[102,19586,652],{"emptyLinePlaceholder":651},[102,19588,19589,19591,19593],{"class":104,"line":163},[102,19590,217],{"class":108},[102,19592,220],{"class":112},[102,19594,795],{"class":119},[102,19596,19597],{"class":104,"line":175},[102,19598,652],{"emptyLinePlaceholder":651},[102,19600,19601],{"class":104,"line":181},[102,19602,19603],{"class":126},"    \u002F\u002F局部变量\n",[102,19605,19606,19608,19611,19613,19615],{"class":104,"line":202},[102,19607,151],{"class":108},[102,19609,19610],{"class":119}," a ",[102,19612,260],{"class":108},[102,19614,989],{"class":187},[102,19616,266],{"class":119},[102,19618,19619,19621,19624,19626,19628],{"class":104,"line":208},[102,19620,151],{"class":108},[102,19622,19623],{"class":119}," b ",[102,19625,260],{"class":108},[102,19627,989],{"class":187},[102,19629,266],{"class":119},[102,19631,19632],{"class":104,"line":214},[102,19633,652],{"emptyLinePlaceholder":651},[102,19635,19636],{"class":104,"line":225},[102,19637,19638],{"class":126},"    \u002F\u002F打印地址\n",[102,19640,19641,19643,19645,19648,19650,19652,19654,19656,19658,19661,19663],{"class":104,"line":230},[102,19642,1401],{"class":119},[102,19644,275],{"class":108},[102,19646,19647],{"class":278}," \"局部变量a地址为： \"",[102,19649,1237],{"class":108},[102,19651,2432],{"class":119},[102,19653,217],{"class":108},[102,19655,4033],{"class":119},[102,19657,5164],{"class":108},[102,19659,19660],{"class":119},"a ",[102,19662,275],{"class":108},[102,19664,1240],{"class":119},[102,19666,19667,19669,19671,19674,19676,19678,19680,19682,19684,19687,19689],{"class":104,"line":236},[102,19668,1401],{"class":119},[102,19670,275],{"class":108},[102,19672,19673],{"class":278}," \"局部变量b地址为： \"",[102,19675,1237],{"class":108},[102,19677,2432],{"class":119},[102,19679,217],{"class":108},[102,19681,4033],{"class":119},[102,19683,5164],{"class":108},[102,19685,19686],{"class":119},"b ",[102,19688,275],{"class":108},[102,19690,1240],{"class":119},[102,19692,19693],{"class":104,"line":242},[102,19694,652],{"emptyLinePlaceholder":651},[102,19696,19697,19699,19701,19704,19706,19709,19711,19713,19715,19718,19720],{"class":104,"line":248},[102,19698,1401],{"class":119},[102,19700,275],{"class":108},[102,19702,19703],{"class":278}," \"全局变量g_a地址为： \"",[102,19705,1237],{"class":108},[102,19707,19708],{"class":119},"  (",[102,19710,217],{"class":108},[102,19712,4033],{"class":119},[102,19714,5164],{"class":108},[102,19716,19717],{"class":119},"g_a ",[102,19719,275],{"class":108},[102,19721,1240],{"class":119},[102,19723,19724,19726,19728,19731,19733,19735,19737,19739,19741,19744,19746],{"class":104,"line":254},[102,19725,1401],{"class":119},[102,19727,275],{"class":108},[102,19729,19730],{"class":278}," \"全局变量g_b地址为： \"",[102,19732,1237],{"class":108},[102,19734,19708],{"class":119},[102,19736,217],{"class":108},[102,19738,4033],{"class":119},[102,19740,5164],{"class":108},[102,19742,19743],{"class":119},"g_b ",[102,19745,275],{"class":108},[102,19747,1240],{"class":119},[102,19749,19750],{"class":104,"line":269},[102,19751,652],{"emptyLinePlaceholder":651},[102,19753,19754],{"class":104,"line":298},[102,19755,19756],{"class":126},"    \u002F\u002F静态变量\n",[102,19758,19759,19761,19763,19766,19768,19770],{"class":104,"line":502},[102,19760,7659],{"class":108},[102,19762,6392],{"class":108},[102,19764,19765],{"class":119}," s_a ",[102,19767,260],{"class":108},[102,19769,989],{"class":187},[102,19771,266],{"class":119},[102,19773,19774,19776,19778,19781,19783,19785],{"class":104,"line":507},[102,19775,7659],{"class":108},[102,19777,6392],{"class":108},[102,19779,19780],{"class":119}," s_b ",[102,19782,260],{"class":108},[102,19784,989],{"class":187},[102,19786,266],{"class":119},[102,19788,19789],{"class":104,"line":512},[102,19790,652],{"emptyLinePlaceholder":651},[102,19792,19793,19795,19797,19800,19802,19804,19806,19808,19810,19813,19815],{"class":104,"line":521},[102,19794,1401],{"class":119},[102,19796,275],{"class":108},[102,19798,19799],{"class":278}," \"静态变量s_a地址为： \"",[102,19801,1237],{"class":108},[102,19803,2432],{"class":119},[102,19805,217],{"class":108},[102,19807,4033],{"class":119},[102,19809,5164],{"class":108},[102,19811,19812],{"class":119},"s_a ",[102,19814,275],{"class":108},[102,19816,1240],{"class":119},[102,19818,19819,19821,19823,19826,19828,19830,19832,19834,19836,19839,19841],{"class":104,"line":526},[102,19820,1401],{"class":119},[102,19822,275],{"class":108},[102,19824,19825],{"class":278}," \"静态变量s_b地址为： \"",[102,19827,1237],{"class":108},[102,19829,2432],{"class":119},[102,19831,217],{"class":108},[102,19833,4033],{"class":119},[102,19835,5164],{"class":108},[102,19837,19838],{"class":119},"s_b ",[102,19840,275],{"class":108},[102,19842,1240],{"class":119},[102,19844,19845],{"class":104,"line":532},[102,19846,652],{"emptyLinePlaceholder":651},[102,19848,19849,19851,19853,19856,19858,19860,19862,19864,19866,19868,19870],{"class":104,"line":538},[102,19850,1401],{"class":119},[102,19852,275],{"class":108},[102,19854,19855],{"class":278}," \"字符串常量地址为： \"",[102,19857,1237],{"class":108},[102,19859,2432],{"class":119},[102,19861,217],{"class":108},[102,19863,4033],{"class":119},[102,19865,5164],{"class":108},[102,19867,10079],{"class":278},[102,19869,1237],{"class":108},[102,19871,1240],{"class":119},[102,19873,19874,19876,19878,19880,19882,19884,19886,19888,19890,19893,19895],{"class":104,"line":555},[102,19875,1401],{"class":119},[102,19877,275],{"class":108},[102,19879,19855],{"class":278},[102,19881,1237],{"class":108},[102,19883,2432],{"class":119},[102,19885,217],{"class":108},[102,19887,4033],{"class":119},[102,19889,5164],{"class":108},[102,19891,19892],{"class":278},"\"hello world1\"",[102,19894,1237],{"class":108},[102,19896,1240],{"class":119},[102,19898,19899],{"class":104,"line":570},[102,19900,652],{"emptyLinePlaceholder":651},[102,19902,19903,19905,19907,19910,19912,19914,19916,19918,19920,19923,19925],{"class":104,"line":581},[102,19904,1401],{"class":119},[102,19906,275],{"class":108},[102,19908,19909],{"class":278}," \"全局常量c_g_a地址为： \"",[102,19911,1237],{"class":108},[102,19913,2432],{"class":119},[102,19915,217],{"class":108},[102,19917,4033],{"class":119},[102,19919,5164],{"class":108},[102,19921,19922],{"class":119},"c_g_a ",[102,19924,275],{"class":108},[102,19926,1240],{"class":119},[102,19928,19929,19931,19933,19936,19938,19940,19942,19944,19946,19949,19951],{"class":104,"line":819},[102,19930,1401],{"class":119},[102,19932,275],{"class":108},[102,19934,19935],{"class":278}," \"全局常量c_g_b地址为： \"",[102,19937,1237],{"class":108},[102,19939,2432],{"class":119},[102,19941,217],{"class":108},[102,19943,4033],{"class":119},[102,19945,5164],{"class":108},[102,19947,19948],{"class":119},"c_g_b ",[102,19950,275],{"class":108},[102,19952,1240],{"class":119},[102,19954,19955],{"class":104,"line":828},[102,19956,652],{"emptyLinePlaceholder":651},[102,19958,19959,19962,19964,19967,19969,19971],{"class":104,"line":837},[102,19960,19961],{"class":108},"    const",[102,19963,6392],{"class":108},[102,19965,19966],{"class":119}," c_l_a ",[102,19968,260],{"class":108},[102,19970,989],{"class":187},[102,19972,266],{"class":119},[102,19974,19975,19977,19979,19982,19984,19986],{"class":104,"line":842},[102,19976,19961],{"class":108},[102,19978,6392],{"class":108},[102,19980,19981],{"class":119}," c_l_b ",[102,19983,260],{"class":108},[102,19985,989],{"class":187},[102,19987,266],{"class":119},[102,19989,19990,19992,19994,19997,19999,20001,20003,20005,20007,20010,20012],{"class":104,"line":855},[102,19991,1401],{"class":119},[102,19993,275],{"class":108},[102,19995,19996],{"class":278}," \"局部常量c_l_a地址为： \"",[102,19998,1237],{"class":108},[102,20000,2432],{"class":119},[102,20002,217],{"class":108},[102,20004,4033],{"class":119},[102,20006,5164],{"class":108},[102,20008,20009],{"class":119},"c_l_a ",[102,20011,275],{"class":108},[102,20013,1240],{"class":119},[102,20015,20016,20018,20020,20023,20025,20027,20029,20031,20033,20036,20038],{"class":104,"line":860},[102,20017,1401],{"class":119},[102,20019,275],{"class":108},[102,20021,20022],{"class":278}," \"局部常量c_l_b地址为： \"",[102,20024,1237],{"class":108},[102,20026,2432],{"class":119},[102,20028,217],{"class":108},[102,20030,4033],{"class":119},[102,20032,5164],{"class":108},[102,20034,20035],{"class":119},"c_l_b ",[102,20037,275],{"class":108},[102,20039,1240],{"class":119},[102,20041,20042],{"class":104,"line":871},[102,20043,652],{"emptyLinePlaceholder":651},[102,20045,20046,20048,20050,20052],{"class":104,"line":1359},[102,20047,845],{"class":112},[102,20049,380],{"class":119},[102,20051,850],{"class":278},[102,20053,552],{"class":119},[102,20055,20056],{"class":104,"line":1368},[102,20057,652],{"emptyLinePlaceholder":651},[102,20059,20060,20062,20064],{"class":104,"line":1373},[102,20061,863],{"class":108},[102,20063,866],{"class":187},[102,20065,266],{"class":119},[102,20067,20068],{"class":104,"line":1378},[102,20069,301],{"class":119},[14,20071,20072],{},"总结：",[59,20074,20075,20078,20081,20084],{},[62,20076,20077],{},"c++中程序运行前分为全局区和代码区",[62,20079,20080],{},"代码区特点是共享和只读",[62,20082,20083],{},"全局区中存放全局变量、静态变量、常量",[62,20085,20086],{},"常量区中存放const修饰的全局常量和字符串常量",[48,20088,20090],{"id":20089},"_512程序运行后","5.1.2程序运行后",[87,20092,20093],{},[62,20094,20095],{},"栈区：",[59,20097,20098,20105],{},[62,20099,20100,20101,20104],{},"由编译器自动分配释放, 存放",[18,20102,20103],{},"函数的参数值,局部变量","等",[62,20106,20107,20108,20111],{},"注意事项：",[18,20109,20110],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[93,20113,20115],{"className":95,"code":20114,"language":97,"meta":98,"style":98},"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",[83,20116,20117,20127,20131,20146,20158,20162,20166,20174,20179,20193,20211,20228,20238,20246],{"__ignoreMap":98},[102,20118,20119,20121,20123,20125],{"class":104,"line":105},[102,20120,217],{"class":108},[102,20122,5159],{"class":108},[102,20124,732],{"class":112},[102,20126,172],{"class":119},[102,20128,20129],{"class":104,"line":116},[102,20130,120],{"class":119},[102,20132,20133,20135,20137,20139,20141,20143],{"class":104,"line":123},[102,20134,151],{"class":108},[102,20136,19610],{"class":119},[102,20138,260],{"class":108},[102,20140,989],{"class":187},[102,20142,992],{"class":119},[102,20144,20145],{"class":126}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[102,20147,20148,20150,20152,20155],{"class":104,"line":130},[102,20149,863],{"class":108},[102,20151,2791],{"class":108},[102,20153,20154],{"class":119},"a;",[102,20156,20157],{"class":126}," \u002F\u002F放回局部变量的地址\n",[102,20159,20160],{"class":104,"line":136},[102,20161,301],{"class":119},[102,20163,20164],{"class":104,"line":142},[102,20165,652],{"emptyLinePlaceholder":651},[102,20167,20168,20170,20172],{"class":104,"line":148},[102,20169,217],{"class":108},[102,20171,220],{"class":112},[102,20173,795],{"class":119},[102,20175,20176],{"class":104,"line":157},[102,20177,20178],{"class":126},"    \u002F\u002F接受func的返回值\n",[102,20180,20181,20183,20185,20187,20189,20191],{"class":104,"line":163},[102,20182,151],{"class":108},[102,20184,5159],{"class":108},[102,20186,5780],{"class":119},[102,20188,260],{"class":108},[102,20190,732],{"class":112},[102,20192,578],{"class":119},[102,20194,20195,20197,20199,20201,20203,20205,20208],{"class":104,"line":175},[102,20196,1401],{"class":119},[102,20198,275],{"class":108},[102,20200,5159],{"class":108},[102,20202,5780],{"class":119},[102,20204,275],{"class":108},[102,20206,20207],{"class":119}," endl;",[102,20209,20210],{"class":126}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[102,20212,20213,20215,20217,20219,20221,20223,20225],{"class":104,"line":181},[102,20214,1401],{"class":119},[102,20216,275],{"class":108},[102,20218,5159],{"class":108},[102,20220,5780],{"class":119},[102,20222,275],{"class":108},[102,20224,20207],{"class":119},[102,20226,20227],{"class":126}," \u002F\u002F第二次这个数据不再保留\n",[102,20229,20230,20232,20234,20236],{"class":104,"line":202},[102,20231,845],{"class":112},[102,20233,380],{"class":119},[102,20235,850],{"class":278},[102,20237,552],{"class":119},[102,20239,20240,20242,20244],{"class":104,"line":208},[102,20241,863],{"class":108},[102,20243,866],{"class":187},[102,20245,266],{"class":119},[102,20247,20248],{"class":104,"line":214},[102,20249,301],{"class":119},[14,20251,20252],{},"输出结果：",[14,20254,20255],{},[6750,20256],{"alt":20257,"src":20258},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,20260,20261],{},"总结：不要返回局部变量的地址",[87,20263,20264],{"start":116},[62,20265,20266],{},"堆区",[59,20268,20269,20272],{},[62,20270,20271],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[62,20273,20274],{},"在c++中主要利用new在堆区开辟内存",[93,20276,20278],{"className":95,"code":20277,"language":97,"meta":98,"style":98},"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",[83,20279,20280,20294,20298,20303,20324,20331,20335,20343,20347,20352,20366,20378],{"__ignoreMap":98},[102,20281,20282,20284,20287,20289,20291],{"class":104,"line":105},[102,20283,217],{"class":108},[102,20285,20286],{"class":108},"  *",[102,20288,8235],{"class":112},[102,20290,290],{"class":119},[102,20292,20293],{"class":126},"  \u002F\u002F函数返回指针\n",[102,20295,20296],{"class":104,"line":116},[102,20297,120],{"class":119},[102,20299,20300],{"class":104,"line":123},[102,20301,20302],{"class":126},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[102,20304,20305,20307,20309,20311,20313,20316,20318,20320,20322],{"class":104,"line":130},[102,20306,12957],{"class":108},[102,20308,5159],{"class":108},[102,20310,14],{"class":119},[102,20312,260],{"class":108},[102,20314,20315],{"class":108}," new",[102,20317,6392],{"class":108},[102,20319,380],{"class":119},[102,20321,263],{"class":187},[102,20323,552],{"class":119},[102,20325,20326,20328],{"class":104,"line":136},[102,20327,13190],{"class":108},[102,20329,20330],{"class":119}," p;\n",[102,20332,20333],{"class":104,"line":142},[102,20334,301],{"class":119},[102,20336,20337,20339,20341],{"class":104,"line":148},[102,20338,217],{"class":108},[102,20340,220],{"class":112},[102,20342,172],{"class":119},[102,20344,20345],{"class":104,"line":157},[102,20346,120],{"class":119},[102,20348,20349],{"class":104,"line":163},[102,20350,20351],{"class":126},"    \u002F\u002F在堆区开辟数据\n",[102,20353,20354,20356,20358,20360,20362,20364],{"class":104,"line":175},[102,20355,151],{"class":108},[102,20357,5159],{"class":108},[102,20359,14],{"class":119},[102,20361,260],{"class":108},[102,20363,8235],{"class":112},[102,20365,578],{"class":119},[102,20367,20368,20370,20372,20374,20376],{"class":104,"line":181},[102,20369,272],{"class":119},[102,20371,6664],{"class":108},[102,20373,14],{"class":119},[102,20375,275],{"class":108},[102,20377,295],{"class":119},[102,20379,20380],{"class":104,"line":202},[102,20381,301],{"class":119},[14,20383,20384],{},"图片展示：",[14,20386,20387],{},[6750,20388],{"alt":20257,"src":20389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,20391,20392],{},"堆区内存由程序员管生死！！！",[87,20394,20395],{"start":123},[62,20396,20397],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,20399,20400],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,20402,20403,20404],{},"​语法：",[83,20405,20406],{}," new 数据类型",[14,20408,20409],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[93,20411,20413],{"className":95,"code":20412,"language":97,"meta":98,"style":98},"\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",[83,20414,20415,20420,20430,20434,20439,20444,20465,20469,20477,20481,20495,20507,20519,20531,20536,20541,20552,20556,20561,20569,20573,20578,20600,20626,20630,20648,20652,20678,20682,20694,20698,20703,20708,20716,20720,20724,20732,20736,20742,20748],{"__ignoreMap":98},[102,20416,20417],{"class":104,"line":105},[102,20418,20419],{"class":126},"\u002F\u002F1.new的基本语法\n",[102,20421,20422,20424,20426,20428],{"class":104,"line":116},[102,20423,217],{"class":108},[102,20425,5159],{"class":108},[102,20427,8235],{"class":112},[102,20429,172],{"class":119},[102,20431,20432],{"class":104,"line":123},[102,20433,120],{"class":119},[102,20435,20436],{"class":104,"line":130},[102,20437,20438],{"class":126},"    \u002F\u002F在堆区创建整型数据\n",[102,20440,20441],{"class":104,"line":136},[102,20442,20443],{"class":126},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[102,20445,20446,20448,20450,20452,20454,20456,20458,20460,20462],{"class":104,"line":142},[102,20447,151],{"class":108},[102,20449,5159],{"class":108},[102,20451,14],{"class":119},[102,20453,6389],{"class":108},[102,20455,6392],{"class":108},[102,20457,380],{"class":119},[102,20459,263],{"class":187},[102,20461,4227],{"class":119},[102,20463,20464],{"class":126},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[102,20466,20467],{"class":104,"line":148},[102,20468,301],{"class":119},[102,20470,20471,20473,20475],{"class":104,"line":157},[102,20472,2780],{"class":108},[102,20474,4162],{"class":112},[102,20476,172],{"class":119},[102,20478,20479],{"class":104,"line":163},[102,20480,120],{"class":119},[102,20482,20483,20485,20487,20489,20491,20493],{"class":104,"line":175},[102,20484,151],{"class":108},[102,20486,5159],{"class":108},[102,20488,14],{"class":119},[102,20490,260],{"class":108},[102,20492,8235],{"class":112},[102,20494,578],{"class":119},[102,20496,20497,20499,20501,20503,20505],{"class":104,"line":181},[102,20498,272],{"class":119},[102,20500,6664],{"class":108},[102,20502,14],{"class":119},[102,20504,275],{"class":108},[102,20506,295],{"class":119},[102,20508,20509,20511,20513,20515,20517],{"class":104,"line":202},[102,20510,272],{"class":119},[102,20512,6664],{"class":108},[102,20514,14],{"class":119},[102,20516,275],{"class":108},[102,20518,295],{"class":119},[102,20520,20521,20523,20525,20527,20529],{"class":104,"line":208},[102,20522,272],{"class":119},[102,20524,6664],{"class":108},[102,20526,14],{"class":119},[102,20528,275],{"class":108},[102,20530,295],{"class":119},[102,20532,20533],{"class":104,"line":214},[102,20534,20535],{"class":126},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[102,20537,20538],{"class":104,"line":225},[102,20539,20540],{"class":126},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[102,20542,20543,20546,20549],{"class":104,"line":230},[102,20544,20545],{"class":108},"    delete",[102,20547,20548],{"class":119}," p;",[102,20550,20551],{"class":126},"\u002F\u002F删除这块地址\n",[102,20553,20554],{"class":104,"line":236},[102,20555,301],{"class":119},[102,20557,20558],{"class":104,"line":242},[102,20559,20560],{"class":126},"\u002F\u002F2.在堆区利用new开辟数组\n",[102,20562,20563,20565,20567],{"class":104,"line":248},[102,20564,2780],{"class":108},[102,20566,4542],{"class":112},[102,20568,172],{"class":119},[102,20570,20571],{"class":104,"line":254},[102,20572,120],{"class":119},[102,20574,20575],{"class":104,"line":269},[102,20576,20577],{"class":126},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[102,20579,20580,20582,20584,20586,20588,20590,20592,20594,20597],{"class":104,"line":298},[102,20581,151],{"class":108},[102,20583,5159],{"class":108},[102,20585,12693],{"class":119},[102,20587,6389],{"class":108},[102,20589,6392],{"class":108},[102,20591,9912],{"class":119},[102,20593,263],{"class":187},[102,20595,20596],{"class":119},"];",[102,20598,20599],{"class":126},"\u002F\u002F10代表数组有10个元素\n",[102,20601,20602,20604,20606,20608,20610,20612,20614,20616,20618,20620,20622,20624],{"class":104,"line":502},[102,20603,12016],{"class":108},[102,20605,2432],{"class":119},[102,20607,217],{"class":108},[102,20609,11848],{"class":119},[102,20611,260],{"class":108},[102,20613,8423],{"class":187},[102,20615,11855],{"class":119},[102,20617,1208],{"class":108},[102,20619,263],{"class":187},[102,20621,11855],{"class":119},[102,20623,11130],{"class":108},[102,20625,390],{"class":119},[102,20627,20628],{"class":104,"line":507},[102,20629,178],{"class":119},[102,20631,20632,20635,20637,20639,20641,20643,20645],{"class":104,"line":512},[102,20633,20634],{"class":119},"        arr[i]",[102,20636,260],{"class":108},[102,20638,9473],{"class":119},[102,20640,1702],{"class":108},[102,20642,5569],{"class":187},[102,20644,992],{"class":119},[102,20646,20647],{"class":126},"\u002F\u002F给10个元素赋值100～109\n",[102,20649,20650],{"class":104,"line":521},[102,20651,205],{"class":119},[102,20653,20654,20656,20658,20660,20662,20664,20666,20668,20670,20672,20674,20676],{"class":104,"line":526},[102,20655,12016],{"class":108},[102,20657,2432],{"class":119},[102,20659,217],{"class":108},[102,20661,11848],{"class":119},[102,20663,260],{"class":108},[102,20665,8423],{"class":187},[102,20667,11855],{"class":119},[102,20669,1208],{"class":108},[102,20671,263],{"class":187},[102,20673,11855],{"class":119},[102,20675,11130],{"class":108},[102,20677,390],{"class":119},[102,20679,20680],{"class":104,"line":532},[102,20681,178],{"class":119},[102,20683,20684,20686,20688,20690,20692],{"class":104,"line":538},[102,20685,470],{"class":119},[102,20687,275],{"class":108},[102,20689,13164],{"class":119},[102,20691,275],{"class":108},[102,20693,295],{"class":119},[102,20695,20696],{"class":104,"line":555},[102,20697,205],{"class":119},[102,20699,20700],{"class":104,"line":570},[102,20701,20702],{"class":126},"    \u002F\u002F释放堆区数组\n",[102,20704,20705],{"class":104,"line":581},[102,20706,20707],{"class":126},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[102,20709,20710,20713],{"class":104,"line":819},[102,20711,20712],{"class":108},"    delete[]",[102,20714,20715],{"class":119}," arr;\n",[102,20717,20718],{"class":104,"line":828},[102,20719,301],{"class":119},[102,20721,20722],{"class":104,"line":837},[102,20723,652],{"emptyLinePlaceholder":651},[102,20725,20726,20728,20730],{"class":104,"line":842},[102,20727,217],{"class":108},[102,20729,220],{"class":112},[102,20731,172],{"class":119},[102,20733,20734],{"class":104,"line":855},[102,20735,120],{"class":119},[102,20737,20738,20740],{"class":104,"line":860},[102,20739,4720],{"class":112},[102,20741,578],{"class":119},[102,20743,20744,20746],{"class":104,"line":871},[102,20745,4727],{"class":112},[102,20747,578],{"class":119},[102,20749,20750],{"class":104,"line":1359},[102,20751,301],{"class":119},[8955,20753,20754],{},"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":98,"searchDepth":116,"depth":116,"links":20756},[20757],{"id":19431,"depth":116,"text":19432,"children":20758},[20759,20760],{"id":19463,"depth":123,"text":19464},{"id":20089,"depth":123,"text":20090},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":19423,"description":98},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":20767,"title":20768,"body":20769,"description":98,"extension":8978,"meta":22246,"navigation":651,"path":22247,"seo":22248,"stem":22249,"__hash__":22250},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":20770,"toc":22238},[20771,20774,20778,20781,20784,20953,20957,20962,20979,20984,21136,21140,21143,21146,21538,21542,21545,21550,21553,21864,21868,21874,22033,22035,22043,22047,22050,22057,22235],[10,20772,20768],{"id":20773},"_6引用",[43,20775,20777],{"id":20776},"_61引用基本用法","6.1引用基本用法",[14,20779,20780],{},"引用的本质：给变量起别名",[14,20782,20783],{},"语法：数据类型 &别名=原名",[93,20785,20787],{"className":95,"code":20786,"language":97,"meta":98,"style":98},"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",[83,20788,20789,20797,20801,20813,20825,20829,20848,20867,20871,20882,20886,20905,20923,20927,20937,20941,20949],{"__ignoreMap":98},[102,20790,20791,20793,20795],{"class":104,"line":105},[102,20792,217],{"class":108},[102,20794,220],{"class":112},[102,20796,795],{"class":119},[102,20798,20799],{"class":104,"line":116},[102,20800,652],{"emptyLinePlaceholder":651},[102,20802,20803,20805,20807,20809,20811],{"class":104,"line":123},[102,20804,151],{"class":108},[102,20806,19610],{"class":119},[102,20808,260],{"class":108},[102,20810,989],{"class":187},[102,20812,266],{"class":119},[102,20814,20815,20817,20819,20821,20823],{"class":104,"line":130},[102,20816,151],{"class":108},[102,20818,2791],{"class":108},[102,20820,19686],{"class":119},[102,20822,260],{"class":108},[102,20824,5952],{"class":119},[102,20826,20827],{"class":104,"line":136},[102,20828,652],{"emptyLinePlaceholder":651},[102,20830,20831,20833,20835,20838,20840,20842,20844,20846],{"class":104,"line":142},[102,20832,1401],{"class":119},[102,20834,275],{"class":108},[102,20836,20837],{"class":278}," \"a = \"",[102,20839,1237],{"class":108},[102,20841,19610],{"class":119},[102,20843,275],{"class":108},[102,20845,20207],{"class":119},[102,20847,16055],{"class":126},[102,20849,20850,20852,20854,20857,20859,20861,20863,20865],{"class":104,"line":148},[102,20851,1401],{"class":119},[102,20853,275],{"class":108},[102,20855,20856],{"class":278}," \"b = \"",[102,20858,1237],{"class":108},[102,20860,19623],{"class":119},[102,20862,275],{"class":108},[102,20864,20207],{"class":119},[102,20866,16055],{"class":126},[102,20868,20869],{"class":104,"line":157},[102,20870,652],{"emptyLinePlaceholder":651},[102,20872,20873,20876,20878,20880],{"class":104,"line":163},[102,20874,20875],{"class":119},"    b ",[102,20877,260],{"class":108},[102,20879,14552],{"class":187},[102,20881,266],{"class":119},[102,20883,20884],{"class":104,"line":175},[102,20885,652],{"emptyLinePlaceholder":651},[102,20887,20888,20890,20892,20894,20896,20898,20900,20902],{"class":104,"line":181},[102,20889,1401],{"class":119},[102,20891,275],{"class":108},[102,20893,20837],{"class":278},[102,20895,1237],{"class":108},[102,20897,19610],{"class":119},[102,20899,275],{"class":108},[102,20901,20207],{"class":119},[102,20903,20904],{"class":126},"\u002F\u002F100\n",[102,20906,20907,20909,20911,20913,20915,20917,20919,20921],{"class":104,"line":202},[102,20908,1401],{"class":119},[102,20910,275],{"class":108},[102,20912,20856],{"class":278},[102,20914,1237],{"class":108},[102,20916,19623],{"class":119},[102,20918,275],{"class":108},[102,20920,20207],{"class":119},[102,20922,20904],{"class":126},[102,20924,20925],{"class":104,"line":208},[102,20926,652],{"emptyLinePlaceholder":651},[102,20928,20929,20931,20933,20935],{"class":104,"line":214},[102,20930,845],{"class":112},[102,20932,380],{"class":119},[102,20934,850],{"class":278},[102,20936,552],{"class":119},[102,20938,20939],{"class":104,"line":225},[102,20940,652],{"emptyLinePlaceholder":651},[102,20942,20943,20945,20947],{"class":104,"line":230},[102,20944,863],{"class":108},[102,20946,866],{"class":187},[102,20948,266],{"class":119},[102,20950,20951],{"class":104,"line":236},[102,20952,301],{"class":119},[43,20954,20956],{"id":20955},"_62引用的注意事项","6.2引用的注意事项",[87,20958,20959],{},[62,20960,20961],{},"引用必须要初始化",[93,20963,20965],{"className":95,"code":20964,"language":97,"meta":98,"style":98},"int &b;\u002F\u002F非常错误！\n",[83,20966,20967],{"__ignoreMap":98},[102,20968,20969,20971,20973,20976],{"class":104,"line":105},[102,20970,217],{"class":108},[102,20972,2791],{"class":108},[102,20974,20975],{"class":119},"b;",[102,20977,20978],{"class":126},"\u002F\u002F非常错误！\n",[87,20980,20981],{"start":116},[62,20982,20983],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[93,20985,20987],{"className":95,"code":20986,"language":97,"meta":98,"style":98},"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",[83,20988,20989,20997,21009,21021,21029,21045,21058,21076,21094,21114,21124,21132],{"__ignoreMap":98},[102,20990,20991,20993,20995],{"class":104,"line":105},[102,20992,217],{"class":108},[102,20994,220],{"class":112},[102,20996,795],{"class":119},[102,20998,20999,21001,21003,21005,21007],{"class":104,"line":116},[102,21000,151],{"class":108},[102,21002,19610],{"class":119},[102,21004,260],{"class":108},[102,21006,989],{"class":187},[102,21008,266],{"class":119},[102,21010,21011,21013,21015,21017,21019],{"class":104,"line":123},[102,21012,151],{"class":108},[102,21014,19623],{"class":119},[102,21016,260],{"class":108},[102,21018,17718],{"class":187},[102,21020,266],{"class":119},[102,21022,21023,21026],{"class":104,"line":130},[102,21024,21025],{"class":126},"    \u002F\u002Fint &c;",[102,21027,21028],{"class":126}," \u002F\u002F错误，引用必须初始化\n",[102,21030,21031,21033,21035,21037,21039,21042],{"class":104,"line":136},[102,21032,151],{"class":108},[102,21034,2791],{"class":108},[102,21036,11763],{"class":119},[102,21038,260],{"class":108},[102,21040,21041],{"class":119}," a;",[102,21043,21044],{"class":126}," \u002F\u002F一旦初始化后，就不可以更改\n",[102,21046,21047,21050,21052,21055],{"class":104,"line":142},[102,21048,21049],{"class":119},"    c ",[102,21051,260],{"class":108},[102,21053,21054],{"class":119}," b;",[102,21056,21057],{"class":126}," \u002F\u002F这是赋值操作，不是更改引用\n",[102,21059,21060,21062,21064,21066,21068,21070,21072,21074],{"class":104,"line":148},[102,21061,1401],{"class":119},[102,21063,275],{"class":108},[102,21065,20837],{"class":278},[102,21067,1237],{"class":108},[102,21069,19610],{"class":119},[102,21071,275],{"class":108},[102,21073,20207],{"class":119},[102,21075,16040],{"class":126},[102,21077,21078,21080,21082,21084,21086,21088,21090,21092],{"class":104,"line":157},[102,21079,1401],{"class":119},[102,21081,275],{"class":108},[102,21083,20856],{"class":278},[102,21085,1237],{"class":108},[102,21087,19623],{"class":119},[102,21089,275],{"class":108},[102,21091,20207],{"class":119},[102,21093,16040],{"class":126},[102,21095,21096,21098,21100,21103,21105,21108,21110,21112],{"class":104,"line":163},[102,21097,1401],{"class":119},[102,21099,275],{"class":108},[102,21101,21102],{"class":278}," \"c = \"",[102,21104,1237],{"class":108},[102,21106,21107],{"class":119}," c ",[102,21109,275],{"class":108},[102,21111,20207],{"class":119},[102,21113,16040],{"class":126},[102,21115,21116,21118,21120,21122],{"class":104,"line":175},[102,21117,845],{"class":112},[102,21119,380],{"class":119},[102,21121,850],{"class":278},[102,21123,552],{"class":119},[102,21125,21126,21128,21130],{"class":104,"line":181},[102,21127,863],{"class":108},[102,21129,866],{"class":187},[102,21131,266],{"class":119},[102,21133,21134],{"class":104,"line":202},[102,21135,301],{"class":119},[43,21137,21139],{"id":21138},"_63引用做函数参数","6.3引用做函数参数",[14,21141,21142],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,21144,21145],{},"优点：可以简化指针修改实参",[93,21147,21149],{"className":95,"code":21148,"language":97,"meta":98,"style":98},"\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",[83,21150,21151,21156,21177,21188,21198,21207,21211,21215,21220,21242,21254,21266,21276,21280,21284,21289,21311,21321,21329,21337,21341,21345,21353,21357,21369,21381,21385,21396,21422,21426,21446,21470,21474,21484,21508,21512,21522,21526,21534],{"__ignoreMap":98},[102,21152,21153],{"class":104,"line":105},[102,21154,21155],{"class":126},"\u002F\u002F1. 值传递\n",[102,21157,21158,21160,21163,21165,21167,21169,21171,21173,21175],{"class":104,"line":116},[102,21159,2780],{"class":108},[102,21161,21162],{"class":112}," mySwap01",[102,21164,380],{"class":119},[102,21166,217],{"class":108},[102,21168,4378],{"class":386},[102,21170,2571],{"class":119},[102,21172,217],{"class":108},[102,21174,6884],{"class":386},[102,21176,1105],{"class":119},[102,21178,21179,21181,21184,21186],{"class":104,"line":123},[102,21180,151],{"class":108},[102,21182,21183],{"class":119}," temp ",[102,21185,260],{"class":108},[102,21187,5952],{"class":119},[102,21189,21190,21193,21195],{"class":104,"line":130},[102,21191,21192],{"class":119},"    a ",[102,21194,260],{"class":108},[102,21196,21197],{"class":119}," b;\n",[102,21199,21200,21202,21204],{"class":104,"line":136},[102,21201,20875],{"class":119},[102,21203,260],{"class":108},[102,21205,21206],{"class":119}," temp;\n",[102,21208,21209],{"class":104,"line":142},[102,21210,301],{"class":119},[102,21212,21213],{"class":104,"line":148},[102,21214,652],{"emptyLinePlaceholder":651},[102,21216,21217],{"class":104,"line":157},[102,21218,21219],{"class":126},"\u002F\u002F2. 地址传递\n",[102,21221,21222,21224,21227,21229,21232,21234,21236,21238,21240],{"class":104,"line":163},[102,21223,2780],{"class":108},[102,21225,21226],{"class":112}," mySwap02",[102,21228,380],{"class":119},[102,21230,21231],{"class":108},"int*",[102,21233,4378],{"class":386},[102,21235,2571],{"class":119},[102,21237,21231],{"class":108},[102,21239,6884],{"class":386},[102,21241,1105],{"class":119},[102,21243,21244,21246,21248,21250,21252],{"class":104,"line":175},[102,21245,151],{"class":108},[102,21247,21183],{"class":119},[102,21249,260],{"class":108},[102,21251,5159],{"class":108},[102,21253,4394],{"class":119},[102,21255,21256,21258,21260,21262,21264],{"class":104,"line":181},[102,21257,15198],{"class":108},[102,21259,19660],{"class":119},[102,21261,260],{"class":108},[102,21263,5159],{"class":108},[102,21265,14865],{"class":119},[102,21267,21268,21270,21272,21274],{"class":104,"line":202},[102,21269,15198],{"class":108},[102,21271,19686],{"class":119},[102,21273,260],{"class":108},[102,21275,21206],{"class":119},[102,21277,21278],{"class":104,"line":208},[102,21279,301],{"class":119},[102,21281,21282],{"class":104,"line":214},[102,21283,652],{"emptyLinePlaceholder":651},[102,21285,21286],{"class":104,"line":225},[102,21287,21288],{"class":126},"\u002F\u002F3. 引用传递\n",[102,21290,21291,21293,21296,21298,21301,21303,21305,21307,21309],{"class":104,"line":230},[102,21292,2780],{"class":108},[102,21294,21295],{"class":112}," mySwap03",[102,21297,380],{"class":119},[102,21299,21300],{"class":108},"int&",[102,21302,4378],{"class":386},[102,21304,2571],{"class":119},[102,21306,21300],{"class":108},[102,21308,6884],{"class":386},[102,21310,1105],{"class":119},[102,21312,21313,21315,21317,21319],{"class":104,"line":236},[102,21314,151],{"class":108},[102,21316,21183],{"class":119},[102,21318,260],{"class":108},[102,21320,5952],{"class":119},[102,21322,21323,21325,21327],{"class":104,"line":242},[102,21324,21192],{"class":119},[102,21326,260],{"class":108},[102,21328,21197],{"class":119},[102,21330,21331,21333,21335],{"class":104,"line":248},[102,21332,20875],{"class":119},[102,21334,260],{"class":108},[102,21336,21206],{"class":119},[102,21338,21339],{"class":104,"line":254},[102,21340,301],{"class":119},[102,21342,21343],{"class":104,"line":269},[102,21344,652],{"emptyLinePlaceholder":651},[102,21346,21347,21349,21351],{"class":104,"line":298},[102,21348,217],{"class":108},[102,21350,220],{"class":112},[102,21352,795],{"class":119},[102,21354,21355],{"class":104,"line":502},[102,21356,652],{"emptyLinePlaceholder":651},[102,21358,21359,21361,21363,21365,21367],{"class":104,"line":507},[102,21360,151],{"class":108},[102,21362,19610],{"class":119},[102,21364,260],{"class":108},[102,21366,989],{"class":187},[102,21368,266],{"class":119},[102,21370,21371,21373,21375,21377,21379],{"class":104,"line":512},[102,21372,151],{"class":108},[102,21374,19623],{"class":119},[102,21376,260],{"class":108},[102,21378,17718],{"class":187},[102,21380,266],{"class":119},[102,21382,21383],{"class":104,"line":521},[102,21384,652],{"emptyLinePlaceholder":651},[102,21386,21387,21390,21393],{"class":104,"line":526},[102,21388,21389],{"class":112},"    mySwap01",[102,21391,21392],{"class":119},"(a, b);",[102,21394,21395],{"class":126},"\u002F\u002F值传递，形参不会修饰实参\n",[102,21397,21398,21400,21402,21405,21407,21409,21411,21414,21416,21418,21420],{"class":104,"line":532},[102,21399,1401],{"class":119},[102,21401,275],{"class":108},[102,21403,21404],{"class":278}," \"a:\"",[102,21406,1237],{"class":108},[102,21408,19610],{"class":119},[102,21410,275],{"class":108},[102,21412,21413],{"class":278}," \" b:\"",[102,21415,1237],{"class":108},[102,21417,19623],{"class":119},[102,21419,275],{"class":108},[102,21421,1240],{"class":119},[102,21423,21424],{"class":104,"line":538},[102,21425,652],{"emptyLinePlaceholder":651},[102,21427,21428,21431,21433,21435,21438,21440,21443],{"class":104,"line":555},[102,21429,21430],{"class":112},"    mySwap02",[102,21432,380],{"class":119},[102,21434,5164],{"class":108},[102,21436,21437],{"class":119},"a, ",[102,21439,5164],{"class":108},[102,21441,21442],{"class":119},"b);",[102,21444,21445],{"class":126},"\u002F\u002F地址传递，形参会修饰实参\n",[102,21447,21448,21450,21452,21454,21456,21458,21460,21462,21464,21466,21468],{"class":104,"line":570},[102,21449,1401],{"class":119},[102,21451,275],{"class":108},[102,21453,21404],{"class":278},[102,21455,1237],{"class":108},[102,21457,19610],{"class":119},[102,21459,275],{"class":108},[102,21461,21413],{"class":278},[102,21463,1237],{"class":108},[102,21465,19623],{"class":119},[102,21467,275],{"class":108},[102,21469,1240],{"class":119},[102,21471,21472],{"class":104,"line":581},[102,21473,652],{"emptyLinePlaceholder":651},[102,21475,21476,21479,21481],{"class":104,"line":819},[102,21477,21478],{"class":112},"    mySwap03",[102,21480,21392],{"class":119},[102,21482,21483],{"class":126},"\u002F\u002F引用传递，形参会修饰实参\n",[102,21485,21486,21488,21490,21492,21494,21496,21498,21500,21502,21504,21506],{"class":104,"line":828},[102,21487,1401],{"class":119},[102,21489,275],{"class":108},[102,21491,21404],{"class":278},[102,21493,1237],{"class":108},[102,21495,19610],{"class":119},[102,21497,275],{"class":108},[102,21499,21413],{"class":278},[102,21501,1237],{"class":108},[102,21503,19623],{"class":119},[102,21505,275],{"class":108},[102,21507,1240],{"class":119},[102,21509,21510],{"class":104,"line":837},[102,21511,652],{"emptyLinePlaceholder":651},[102,21513,21514,21516,21518,21520],{"class":104,"line":842},[102,21515,845],{"class":112},[102,21517,380],{"class":119},[102,21519,850],{"class":278},[102,21521,552],{"class":119},[102,21523,21524],{"class":104,"line":855},[102,21525,652],{"emptyLinePlaceholder":651},[102,21527,21528,21530,21532],{"class":104,"line":860},[102,21529,863],{"class":108},[102,21531,866],{"class":187},[102,21533,266],{"class":119},[102,21535,21536],{"class":104,"line":871},[102,21537,301],{"class":119},[43,21539,21541],{"id":21540},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,21543,21544],{},"作用：引用是可以作为函数的返回值存在的",[14,21546,7501,21547],{},[18,21548,21549],{},"不要返回局部变量引用",[14,21551,21552],{},"用法：函数调用作为左值",[93,21554,21556],{"className":622,"code":21555,"language":624,"meta":98,"style":98},"\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",[83,21557,21558,21563,21571,21586,21592,21596,21600,21605,21613,21630,21636,21640,21644,21652,21656,21661,21675,21695,21714,21718,21723,21736,21756,21774,21778,21793,21797,21816,21834,21838,21848,21852,21860],{"__ignoreMap":98},[102,21559,21560],{"class":104,"line":105},[102,21561,21562],{"class":126},"\u002F\u002F返回局部变量引用\n",[102,21564,21565,21567,21569],{"class":104,"line":116},[102,21566,21300],{"class":108},[102,21568,4162],{"class":112},[102,21570,795],{"class":119},[102,21572,21573,21575,21577,21579,21581,21583],{"class":104,"line":123},[102,21574,151],{"class":108},[102,21576,19610],{"class":119},[102,21578,260],{"class":108},[102,21580,989],{"class":187},[102,21582,992],{"class":119},[102,21584,21585],{"class":126}," \u002F\u002F局部变量\n",[102,21587,21588,21590],{"class":104,"line":130},[102,21589,863],{"class":108},[102,21591,5952],{"class":119},[102,21593,21594],{"class":104,"line":136},[102,21595,301],{"class":119},[102,21597,21598],{"class":104,"line":142},[102,21599,652],{"emptyLinePlaceholder":651},[102,21601,21602],{"class":104,"line":148},[102,21603,21604],{"class":126},"\u002F\u002F返回静态变量引用\n",[102,21606,21607,21609,21611],{"class":104,"line":157},[102,21608,21300],{"class":108},[102,21610,4542],{"class":112},[102,21612,795],{"class":119},[102,21614,21615,21617,21619,21621,21623,21625,21627],{"class":104,"line":163},[102,21616,7659],{"class":108},[102,21618,6392],{"class":108},[102,21620,19610],{"class":119},[102,21622,260],{"class":108},[102,21624,17718],{"class":187},[102,21626,992],{"class":119},[102,21628,21629],{"class":126},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[102,21631,21632,21634],{"class":104,"line":175},[102,21633,863],{"class":108},[102,21635,5952],{"class":119},[102,21637,21638],{"class":104,"line":181},[102,21639,301],{"class":119},[102,21641,21642],{"class":104,"line":202},[102,21643,652],{"emptyLinePlaceholder":651},[102,21645,21646,21648,21650],{"class":104,"line":208},[102,21647,217],{"class":108},[102,21649,220],{"class":112},[102,21651,795],{"class":119},[102,21653,21654],{"class":104,"line":214},[102,21655,652],{"emptyLinePlaceholder":651},[102,21657,21658],{"class":104,"line":225},[102,21659,21660],{"class":126},"    \u002F\u002F不能返回局部变量的引用\n",[102,21662,21663,21666,21669,21671,21673],{"class":104,"line":230},[102,21664,21665],{"class":108},"    int&",[102,21667,21668],{"class":119}," ref ",[102,21670,260],{"class":108},[102,21672,4162],{"class":112},[102,21674,578],{"class":119},[102,21676,21677,21679,21681,21684,21686,21688,21690,21692],{"class":104,"line":236},[102,21678,1401],{"class":119},[102,21680,275],{"class":108},[102,21682,21683],{"class":278}," \"ref = \"",[102,21685,1237],{"class":108},[102,21687,21668],{"class":119},[102,21689,275],{"class":108},[102,21691,20207],{"class":119},[102,21693,21694],{"class":126},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[102,21696,21697,21699,21701,21703,21705,21707,21709,21711],{"class":104,"line":242},[102,21698,1401],{"class":119},[102,21700,275],{"class":108},[102,21702,21683],{"class":278},[102,21704,1237],{"class":108},[102,21706,21668],{"class":119},[102,21708,275],{"class":108},[102,21710,20207],{"class":119},[102,21712,21713],{"class":126},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[102,21715,21716],{"class":104,"line":248},[102,21717,652],{"emptyLinePlaceholder":651},[102,21719,21720],{"class":104,"line":254},[102,21721,21722],{"class":126},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[102,21724,21725,21727,21730,21732,21734],{"class":104,"line":269},[102,21726,21665],{"class":108},[102,21728,21729],{"class":119}," ref2 ",[102,21731,260],{"class":108},[102,21733,4542],{"class":112},[102,21735,578],{"class":119},[102,21737,21738,21740,21742,21745,21747,21749,21751,21753],{"class":104,"line":298},[102,21739,1401],{"class":119},[102,21741,275],{"class":108},[102,21743,21744],{"class":278}," \"ref2 = \"",[102,21746,1237],{"class":108},[102,21748,21729],{"class":119},[102,21750,275],{"class":108},[102,21752,20207],{"class":119},[102,21754,21755],{"class":126}," \u002F\u002F20\n",[102,21757,21758,21760,21762,21764,21766,21768,21770,21772],{"class":104,"line":502},[102,21759,1401],{"class":119},[102,21761,275],{"class":108},[102,21763,21744],{"class":278},[102,21765,1237],{"class":108},[102,21767,21729],{"class":119},[102,21769,275],{"class":108},[102,21771,20207],{"class":119},[102,21773,21755],{"class":126},[102,21775,21776],{"class":104,"line":507},[102,21777,652],{"emptyLinePlaceholder":651},[102,21779,21780,21782,21784,21786,21788,21790],{"class":104,"line":512},[102,21781,4727],{"class":112},[102,21783,1417],{"class":119},[102,21785,260],{"class":108},[102,21787,11815],{"class":187},[102,21789,992],{"class":119},[102,21791,21792],{"class":126},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[102,21794,21795],{"class":104,"line":521},[102,21796,652],{"emptyLinePlaceholder":651},[102,21798,21799,21801,21803,21805,21807,21809,21811,21813],{"class":104,"line":526},[102,21800,1401],{"class":119},[102,21802,275],{"class":108},[102,21804,21744],{"class":278},[102,21806,1237],{"class":108},[102,21808,21729],{"class":119},[102,21810,275],{"class":108},[102,21812,20207],{"class":119},[102,21814,21815],{"class":126}," \u002F\u002F1000\n",[102,21817,21818,21820,21822,21824,21826,21828,21830,21832],{"class":104,"line":532},[102,21819,1401],{"class":119},[102,21821,275],{"class":108},[102,21823,21744],{"class":278},[102,21825,1237],{"class":108},[102,21827,21729],{"class":119},[102,21829,275],{"class":108},[102,21831,20207],{"class":119},[102,21833,21815],{"class":126},[102,21835,21836],{"class":104,"line":538},[102,21837,652],{"emptyLinePlaceholder":651},[102,21839,21840,21842,21844,21846],{"class":104,"line":555},[102,21841,845],{"class":112},[102,21843,380],{"class":119},[102,21845,850],{"class":278},[102,21847,552],{"class":119},[102,21849,21850],{"class":104,"line":570},[102,21851,652],{"emptyLinePlaceholder":651},[102,21853,21854,21856,21858],{"class":104,"line":581},[102,21855,863],{"class":108},[102,21857,866],{"class":187},[102,21859,266],{"class":119},[102,21861,21862],{"class":104,"line":819},[102,21863,301],{"class":119},[43,21865,21867],{"id":21866},"_65引用的本质","6.5引用的本质",[14,21869,21870,21871],{},"本质：",[18,21872,21873],{},"引用的本质在c++内部实现是一个指针常量.",[93,21875,21877],{"className":95,"code":21876,"language":97,"meta":98,"style":98},"\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",[83,21878,21879,21884,21900,21914,21918,21927,21939,21943,21948,21959,21972,21976,21992,22009,22013,22021,22029],{"__ignoreMap":98},[102,21880,21881],{"class":104,"line":105},[102,21882,21883],{"class":126},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[102,21885,21886,21888,21890,21892,21894,21897],{"class":104,"line":116},[102,21887,2780],{"class":108},[102,21889,732],{"class":112},[102,21891,380],{"class":119},[102,21893,21300],{"class":108},[102,21895,21896],{"class":386}," ref",[102,21898,21899],{"class":119},"){\n",[102,21901,21902,21905,21907,21909,21911],{"class":104,"line":123},[102,21903,21904],{"class":119},"    ref ",[102,21906,260],{"class":108},[102,21908,14552],{"class":187},[102,21910,992],{"class":119},[102,21912,21913],{"class":126}," \u002F\u002F ref是引用，转换为*ref = 100\n",[102,21915,21916],{"class":104,"line":130},[102,21917,301],{"class":119},[102,21919,21920,21922,21924],{"class":104,"line":136},[102,21921,217],{"class":108},[102,21923,220],{"class":112},[102,21925,21926],{"class":119},"(){\n",[102,21928,21929,21931,21933,21935,21937],{"class":104,"line":142},[102,21930,151],{"class":108},[102,21932,19610],{"class":119},[102,21934,260],{"class":108},[102,21936,989],{"class":187},[102,21938,266],{"class":119},[102,21940,21941],{"class":104,"line":148},[102,21942,1326],{"class":119},[102,21944,21945],{"class":104,"line":157},[102,21946,21947],{"class":126},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[102,21949,21950,21952,21954,21956],{"class":104,"line":163},[102,21951,21665],{"class":108},[102,21953,21668],{"class":119},[102,21955,260],{"class":108},[102,21957,21958],{"class":119}," a; \n",[102,21960,21961,21963,21965,21967,21969],{"class":104,"line":175},[102,21962,21904],{"class":119},[102,21964,260],{"class":108},[102,21966,17718],{"class":187},[102,21968,992],{"class":119},[102,21970,21971],{"class":126}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[102,21973,21974],{"class":104,"line":181},[102,21975,1326],{"class":119},[102,21977,21978,21980,21982,21984,21986,21988,21990],{"class":104,"line":202},[102,21979,1401],{"class":119},[102,21981,275],{"class":108},[102,21983,21404],{"class":278},[102,21985,1237],{"class":108},[102,21987,19610],{"class":119},[102,21989,275],{"class":108},[102,21991,1240],{"class":119},[102,21993,21994,21996,21998,22001,22003,22005,22007],{"class":104,"line":208},[102,21995,1401],{"class":119},[102,21997,275],{"class":108},[102,21999,22000],{"class":278}," \"ref:\"",[102,22002,1237],{"class":108},[102,22004,21668],{"class":119},[102,22006,275],{"class":108},[102,22008,1240],{"class":119},[102,22010,22011],{"class":104,"line":214},[102,22012,1326],{"class":119},[102,22014,22015,22018],{"class":104,"line":225},[102,22016,22017],{"class":112},"    func",[102,22019,22020],{"class":119},"(a);\n",[102,22022,22023,22025,22027],{"class":104,"line":230},[102,22024,863],{"class":108},[102,22026,866],{"class":187},[102,22028,266],{"class":119},[102,22030,22031],{"class":104,"line":236},[102,22032,301],{"class":119},[14,22034,20072],{},[87,22036,22037,22040],{},[62,22038,22039],{},"引用的本质，就是一个指针常量",[62,22041,22042],{},"引用一旦初始化，就不可以发生改变",[43,22044,22046],{"id":22045},"_66常量引用","6.6常量引用",[14,22048,22049],{},"作用：常量引用主要用来修饰形参",[14,22051,22052,22053,22056],{},"在函数形参列表中，可以加",[18,22054,22055],{},"const修饰形参","，防止形参改变实参",[93,22058,22060],{"className":95,"code":22059,"language":97,"meta":98,"style":98},"\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",[83,22061,22062,22067,22072,22091,22096,22109,22113,22117,22125,22129,22134,22139,22153,22157,22165,22177,22181,22186,22198,22205,22209,22219,22223,22231],{"__ignoreMap":98},[102,22063,22064],{"class":104,"line":105},[102,22065,22066],{"class":126},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[102,22068,22069],{"class":104,"line":116},[102,22070,22071],{"class":126},"\u002F\u002F加上const就不能修改实参的\n",[102,22073,22074,22076,22079,22081,22083,22086,22089],{"class":104,"line":123},[102,22075,2780],{"class":108},[102,22077,22078],{"class":112}," showValue",[102,22080,380],{"class":119},[102,22082,4456],{"class":108},[102,22084,22085],{"class":108}," int&",[102,22087,22088],{"class":386}," v",[102,22090,1105],{"class":119},[102,22092,22093],{"class":104,"line":130},[102,22094,22095],{"class":126},"    \u002F\u002Fv += 100;\n",[102,22097,22098,22100,22102,22105,22107],{"class":104,"line":136},[102,22099,1401],{"class":119},[102,22101,275],{"class":108},[102,22103,22104],{"class":119}," v ",[102,22106,275],{"class":108},[102,22108,1240],{"class":119},[102,22110,22111],{"class":104,"line":142},[102,22112,301],{"class":119},[102,22114,22115],{"class":104,"line":148},[102,22116,652],{"emptyLinePlaceholder":651},[102,22118,22119,22121,22123],{"class":104,"line":157},[102,22120,217],{"class":108},[102,22122,220],{"class":112},[102,22124,795],{"class":119},[102,22126,22127],{"class":104,"line":163},[102,22128,652],{"emptyLinePlaceholder":651},[102,22130,22131],{"class":104,"line":175},[102,22132,22133],{"class":126},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[102,22135,22136],{"class":104,"line":181},[102,22137,22138],{"class":126},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[102,22140,22141,22143,22145,22147,22149,22151],{"class":104,"line":202},[102,22142,19961],{"class":108},[102,22144,22085],{"class":108},[102,22146,21668],{"class":119},[102,22148,260],{"class":108},[102,22150,989],{"class":187},[102,22152,266],{"class":119},[102,22154,22155],{"class":104,"line":208},[102,22156,652],{"emptyLinePlaceholder":651},[102,22158,22159,22162],{"class":104,"line":214},[102,22160,22161],{"class":126},"    \u002F\u002Fref = 100;",[102,22163,22164],{"class":126},"  \u002F\u002F加入const后不可以修改变量\n",[102,22166,22167,22169,22171,22173,22175],{"class":104,"line":225},[102,22168,1401],{"class":119},[102,22170,275],{"class":108},[102,22172,21668],{"class":119},[102,22174,275],{"class":108},[102,22176,1240],{"class":119},[102,22178,22179],{"class":104,"line":230},[102,22180,652],{"emptyLinePlaceholder":651},[102,22182,22183],{"class":104,"line":236},[102,22184,22185],{"class":126},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[102,22187,22188,22190,22192,22194,22196],{"class":104,"line":242},[102,22189,151],{"class":108},[102,22191,19610],{"class":119},[102,22193,260],{"class":108},[102,22195,989],{"class":187},[102,22197,266],{"class":119},[102,22199,22200,22203],{"class":104,"line":248},[102,22201,22202],{"class":112},"    showValue",[102,22204,22020],{"class":119},[102,22206,22207],{"class":104,"line":254},[102,22208,652],{"emptyLinePlaceholder":651},[102,22210,22211,22213,22215,22217],{"class":104,"line":269},[102,22212,845],{"class":112},[102,22214,380],{"class":119},[102,22216,850],{"class":278},[102,22218,552],{"class":119},[102,22220,22221],{"class":104,"line":298},[102,22222,652],{"emptyLinePlaceholder":651},[102,22224,22225,22227,22229],{"class":104,"line":502},[102,22226,863],{"class":108},[102,22228,866],{"class":187},[102,22230,266],{"class":119},[102,22232,22233],{"class":104,"line":507},[102,22234,301],{"class":119},[8955,22236,22237],{},"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":98,"searchDepth":116,"depth":116,"links":22239},[22240,22241,22242,22243,22244,22245],{"id":20776,"depth":116,"text":20777},{"id":20955,"depth":116,"text":20956},{"id":21138,"depth":116,"text":21139},{"id":21540,"depth":116,"text":21541},{"id":21866,"depth":116,"text":21867},{"id":22045,"depth":116,"text":22046},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":20768,"description":98},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":22252,"title":22253,"body":22254,"description":98,"extension":8978,"meta":23332,"navigation":651,"path":23333,"seo":23334,"stem":23335,"__hash__":23336},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":22255,"toc":23324},[22256,22259,22263,22266,22271,22502,22504,22515,22519,22522,22529,22633,22636,22640,22643,22647,22650,22655,22677,22683,23009,23012,23016,23024,23321],[10,22257,22253],{"id":22258},"_7函数高级部分",[43,22260,22262],{"id":22261},"_71函数默认参数","7.1函数默认参数",[14,22264,22265],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,22267,80,22268],{},[83,22269,22270],{}," 返回值类型  函数名 （参数= 默认值）{}",[93,22272,22274],{"className":95,"code":22273,"language":97,"meta":98,"style":98},"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",[83,22275,22276,22311,22326,22330,22334,22339,22344,22372,22392,22402,22406,22410,22418,22422,22450,22472,22476,22486,22490,22498],{"__ignoreMap":98},[102,22277,22278,22280,22282,22284,22286,22288,22290,22292,22294,22297,22299,22301,22303,22305,22307,22309],{"class":104,"line":105},[102,22279,217],{"class":108},[102,22281,732],{"class":112},[102,22283,380],{"class":119},[102,22285,217],{"class":108},[102,22287,4378],{"class":386},[102,22289,2571],{"class":119},[102,22291,217],{"class":108},[102,22293,6884],{"class":386},[102,22295,22296],{"class":108}," =",[102,22298,989],{"class":187},[102,22300,2571],{"class":119},[102,22302,217],{"class":108},[102,22304,1855],{"class":386},[102,22306,22296],{"class":108},[102,22308,989],{"class":187},[102,22310,1105],{"class":119},[102,22312,22313,22315,22317,22319,22321,22323],{"class":104,"line":116},[102,22314,863],{"class":108},[102,22316,19610],{"class":119},[102,22318,1702],{"class":108},[102,22320,19623],{"class":119},[102,22322,1702],{"class":108},[102,22324,22325],{"class":119}," c;\n",[102,22327,22328],{"class":104,"line":123},[102,22329,301],{"class":119},[102,22331,22332],{"class":104,"line":130},[102,22333,652],{"emptyLinePlaceholder":651},[102,22335,22336],{"class":104,"line":136},[102,22337,22338],{"class":126},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[102,22340,22341],{"class":104,"line":142},[102,22342,22343],{"class":126},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[102,22345,22346,22348,22350,22352,22354,22356,22358,22360,22362,22364,22366,22368,22370],{"class":104,"line":148},[102,22347,217],{"class":108},[102,22349,8375],{"class":112},[102,22351,380],{"class":119},[102,22353,217],{"class":108},[102,22355,4378],{"class":386},[102,22357,22296],{"class":108},[102,22359,989],{"class":187},[102,22361,2571],{"class":119},[102,22363,217],{"class":108},[102,22365,6884],{"class":386},[102,22367,22296],{"class":108},[102,22369,989],{"class":187},[102,22371,552],{"class":119},[102,22373,22374,22376,22378,22380,22382,22384,22386,22388,22390],{"class":104,"line":157},[102,22375,217],{"class":108},[102,22377,8375],{"class":112},[102,22379,380],{"class":119},[102,22381,217],{"class":108},[102,22383,4378],{"class":386},[102,22385,2571],{"class":119},[102,22387,217],{"class":108},[102,22389,6884],{"class":386},[102,22391,1105],{"class":119},[102,22393,22394,22396,22398,22400],{"class":104,"line":163},[102,22395,863],{"class":108},[102,22397,19610],{"class":119},[102,22399,1702],{"class":108},[102,22401,21197],{"class":119},[102,22403,22404],{"class":104,"line":175},[102,22405,301],{"class":119},[102,22407,22408],{"class":104,"line":181},[102,22409,652],{"emptyLinePlaceholder":651},[102,22411,22412,22414,22416],{"class":104,"line":202},[102,22413,217],{"class":108},[102,22415,220],{"class":112},[102,22417,795],{"class":119},[102,22419,22420],{"class":104,"line":208},[102,22421,652],{"emptyLinePlaceholder":651},[102,22423,22424,22426,22428,22431,22433,22435,22437,22439,22441,22443,22446,22448],{"class":104,"line":214},[102,22425,1401],{"class":119},[102,22427,275],{"class":108},[102,22429,22430],{"class":278}," \"ret = \"",[102,22432,1237],{"class":108},[102,22434,732],{"class":112},[102,22436,380],{"class":119},[102,22438,5016],{"class":187},[102,22440,2571],{"class":119},[102,22442,5016],{"class":187},[102,22444,22445],{"class":119},") ",[102,22447,275],{"class":108},[102,22449,1240],{"class":119},[102,22451,22452,22454,22456,22458,22460,22462,22464,22466,22468,22470],{"class":104,"line":225},[102,22453,1401],{"class":119},[102,22455,275],{"class":108},[102,22457,22430],{"class":278},[102,22459,1237],{"class":108},[102,22461,732],{"class":112},[102,22463,380],{"class":119},[102,22465,5569],{"class":187},[102,22467,22445],{"class":119},[102,22469,275],{"class":108},[102,22471,1240],{"class":119},[102,22473,22474],{"class":104,"line":230},[102,22475,652],{"emptyLinePlaceholder":651},[102,22477,22478,22480,22482,22484],{"class":104,"line":236},[102,22479,845],{"class":112},[102,22481,380],{"class":119},[102,22483,850],{"class":278},[102,22485,552],{"class":119},[102,22487,22488],{"class":104,"line":242},[102,22489,652],{"emptyLinePlaceholder":651},[102,22491,22492,22494,22496],{"class":104,"line":248},[102,22493,863],{"class":108},[102,22495,866],{"class":187},[102,22497,266],{"class":119},[102,22499,22500],{"class":104,"line":254},[102,22501,301],{"class":119},[14,22503,20072],{},[87,22505,22506,22509,22512],{},[62,22507,22508],{},"我传就用我；没传就用你",[62,22510,22511],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[62,22513,22514],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[43,22516,22518],{"id":22517},"_72函数的占位参数","7.2函数的占位参数",[14,22520,22521],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,22523,22524,81,22526],{},[18,22525,80],{},[83,22527,22528],{},"返回值类型 函数名 (数据类型){}",[93,22530,22532],{"className":95,"code":22531,"language":97,"meta":98,"style":98},"\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",[83,22533,22534,22539,22557,22570,22574,22582,22586,22603,22607,22617,22621,22629],{"__ignoreMap":98},[102,22535,22536],{"class":104,"line":105},[102,22537,22538],{"class":126},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[102,22540,22541,22543,22545,22547,22549,22551,22553,22555],{"class":104,"line":116},[102,22542,2780],{"class":108},[102,22544,732],{"class":112},[102,22546,380],{"class":119},[102,22548,217],{"class":108},[102,22550,4378],{"class":386},[102,22552,2571],{"class":119},[102,22554,217],{"class":108},[102,22556,1105],{"class":119},[102,22558,22559,22561,22563,22566,22568],{"class":104,"line":123},[102,22560,1401],{"class":119},[102,22562,275],{"class":108},[102,22564,22565],{"class":278}," \"this is func\"",[102,22567,1237],{"class":108},[102,22569,1240],{"class":119},[102,22571,22572],{"class":104,"line":130},[102,22573,301],{"class":119},[102,22575,22576,22578,22580],{"class":104,"line":136},[102,22577,217],{"class":108},[102,22579,220],{"class":112},[102,22581,795],{"class":119},[102,22583,22584],{"class":104,"line":142},[102,22585,652],{"emptyLinePlaceholder":651},[102,22587,22588,22590,22592,22594,22596,22598,22600],{"class":104,"line":148},[102,22589,22017],{"class":112},[102,22591,380],{"class":119},[102,22593,263],{"class":187},[102,22595,1618],{"class":119},[102,22597,263],{"class":187},[102,22599,4227],{"class":119},[102,22601,22602],{"class":126}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[102,22604,22605],{"class":104,"line":157},[102,22606,652],{"emptyLinePlaceholder":651},[102,22608,22609,22611,22613,22615],{"class":104,"line":163},[102,22610,845],{"class":112},[102,22612,380],{"class":119},[102,22614,850],{"class":278},[102,22616,552],{"class":119},[102,22618,22619],{"class":104,"line":175},[102,22620,652],{"emptyLinePlaceholder":651},[102,22622,22623,22625,22627],{"class":104,"line":181},[102,22624,863],{"class":108},[102,22626,866],{"class":187},[102,22628,266],{"class":119},[102,22630,22631],{"class":104,"line":202},[102,22632,301],{"class":119},[14,22634,22635],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[43,22637,22639],{"id":22638},"_73函数重载","7.3函数重载",[14,22641,22642],{},"意思是函数名是可以相同的",[48,22644,22646],{"id":22645},"_731基本语法","7.3.1基本语法",[14,22648,22649],{},"作用：函数名可以相同，提高复用性",[14,22651,22652],{},[18,22653,22654],{},"函数重载满足条件：",[59,22656,22657,22660,22663],{},[62,22658,22659],{},"同一个作用域下",[62,22661,22662],{},"函数名称相同",[62,22664,22665,22666,22669,22670,22673,22674],{},"函数参数",[18,22667,22668],{},"类型不同","  或者 ",[18,22671,22672],{},"个数不同"," 或者 ",[18,22675,22676],{},"顺序不同",[14,22678,22679,22682],{},[18,22680,22681],{},"注意:","  函数的返回值不可以作为函数重载的条件",[93,22684,22686],{"className":622,"code":22685,"language":624,"meta":98,"style":98},"\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",[83,22687,22688,22693,22701,22705,22718,22722,22736,22740,22753,22757,22771,22775,22788,22792,22813,22817,22830,22834,22854,22858,22871,22875,22879,22884,22889,22894,22899,22904,22908,22912,22920,22924,22930,22940,22950,22964,22979,22983,22993,22997,23005],{"__ignoreMap":98},[102,22689,22690],{"class":104,"line":105},[102,22691,22692],{"class":126},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[102,22694,22695,22697,22699],{"class":104,"line":116},[102,22696,2780],{"class":108},[102,22698,732],{"class":112},[102,22700,172],{"class":119},[102,22702,22703],{"class":104,"line":123},[102,22704,120],{"class":119},[102,22706,22707,22709,22711,22714,22716],{"class":104,"line":130},[102,22708,1401],{"class":119},[102,22710,275],{"class":108},[102,22712,22713],{"class":278}," \"func 的调用！\"",[102,22715,1237],{"class":108},[102,22717,1240],{"class":119},[102,22719,22720],{"class":104,"line":136},[102,22721,301],{"class":119},[102,22723,22724,22726,22728,22730,22732,22734],{"class":104,"line":142},[102,22725,2780],{"class":108},[102,22727,732],{"class":112},[102,22729,380],{"class":119},[102,22731,217],{"class":108},[102,22733,4378],{"class":386},[102,22735,390],{"class":119},[102,22737,22738],{"class":104,"line":148},[102,22739,120],{"class":119},[102,22741,22742,22744,22746,22749,22751],{"class":104,"line":157},[102,22743,1401],{"class":119},[102,22745,275],{"class":108},[102,22747,22748],{"class":278}," \"func (int a) 的调用！\"",[102,22750,1237],{"class":108},[102,22752,1240],{"class":119},[102,22754,22755],{"class":104,"line":163},[102,22756,301],{"class":119},[102,22758,22759,22761,22763,22765,22767,22769],{"class":104,"line":175},[102,22760,2780],{"class":108},[102,22762,732],{"class":112},[102,22764,380],{"class":119},[102,22766,2565],{"class":108},[102,22768,4378],{"class":386},[102,22770,390],{"class":119},[102,22772,22773],{"class":104,"line":181},[102,22774,120],{"class":119},[102,22776,22777,22779,22781,22784,22786],{"class":104,"line":202},[102,22778,1401],{"class":119},[102,22780,275],{"class":108},[102,22782,22783],{"class":278}," \"func (double a)的调用！\"",[102,22785,1237],{"class":108},[102,22787,1240],{"class":119},[102,22789,22790],{"class":104,"line":208},[102,22791,301],{"class":119},[102,22793,22794,22796,22798,22800,22802,22804,22807,22809,22811],{"class":104,"line":214},[102,22795,2780],{"class":108},[102,22797,732],{"class":112},[102,22799,380],{"class":119},[102,22801,217],{"class":108},[102,22803,4378],{"class":386},[102,22805,22806],{"class":119}," ,",[102,22808,2565],{"class":108},[102,22810,6884],{"class":386},[102,22812,390],{"class":119},[102,22814,22815],{"class":104,"line":225},[102,22816,120],{"class":119},[102,22818,22819,22821,22823,22826,22828],{"class":104,"line":230},[102,22820,1401],{"class":119},[102,22822,275],{"class":108},[102,22824,22825],{"class":278}," \"func (int a ,double b) 的调用！\"",[102,22827,1237],{"class":108},[102,22829,1240],{"class":119},[102,22831,22832],{"class":104,"line":236},[102,22833,301],{"class":119},[102,22835,22836,22838,22840,22842,22844,22846,22848,22850,22852],{"class":104,"line":242},[102,22837,2780],{"class":108},[102,22839,732],{"class":112},[102,22841,380],{"class":119},[102,22843,2565],{"class":108},[102,22845,4378],{"class":386},[102,22847,22806],{"class":119},[102,22849,217],{"class":108},[102,22851,6884],{"class":386},[102,22853,390],{"class":119},[102,22855,22856],{"class":104,"line":248},[102,22857,120],{"class":119},[102,22859,22860,22862,22864,22867,22869],{"class":104,"line":254},[102,22861,1401],{"class":119},[102,22863,275],{"class":108},[102,22865,22866],{"class":278}," \"func (double a ,int b)的调用！\"",[102,22868,1237],{"class":108},[102,22870,1240],{"class":119},[102,22872,22873],{"class":104,"line":269},[102,22874,301],{"class":119},[102,22876,22877],{"class":104,"line":298},[102,22878,652],{"emptyLinePlaceholder":651},[102,22880,22881],{"class":104,"line":502},[102,22882,22883],{"class":126},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[102,22885,22886],{"class":104,"line":507},[102,22887,22888],{"class":126},"\u002F\u002Fint func(double a, int b)\n",[102,22890,22891],{"class":104,"line":512},[102,22892,22893],{"class":126},"\u002F\u002F{\n",[102,22895,22896],{"class":104,"line":521},[102,22897,22898],{"class":126},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[102,22900,22901],{"class":104,"line":526},[102,22902,22903],{"class":126},"\u002F\u002F}\n",[102,22905,22906],{"class":104,"line":532},[102,22907,652],{"emptyLinePlaceholder":651},[102,22909,22910],{"class":104,"line":538},[102,22911,652],{"emptyLinePlaceholder":651},[102,22913,22914,22916,22918],{"class":104,"line":555},[102,22915,217],{"class":108},[102,22917,220],{"class":112},[102,22919,795],{"class":119},[102,22921,22922],{"class":104,"line":570},[102,22923,652],{"emptyLinePlaceholder":651},[102,22925,22926,22928],{"class":104,"line":581},[102,22927,22017],{"class":112},[102,22929,578],{"class":119},[102,22931,22932,22934,22936,22938],{"class":104,"line":819},[102,22933,22017],{"class":112},[102,22935,380],{"class":119},[102,22937,263],{"class":187},[102,22939,552],{"class":119},[102,22941,22942,22944,22946,22948],{"class":104,"line":828},[102,22943,22017],{"class":112},[102,22945,380],{"class":119},[102,22947,9094],{"class":187},[102,22949,552],{"class":119},[102,22951,22952,22954,22956,22958,22960,22962],{"class":104,"line":837},[102,22953,22017],{"class":112},[102,22955,380],{"class":119},[102,22957,263],{"class":187},[102,22959,1618],{"class":119},[102,22961,9094],{"class":187},[102,22963,552],{"class":119},[102,22965,22966,22968,22970,22972,22975,22977],{"class":104,"line":842},[102,22967,22017],{"class":112},[102,22969,380],{"class":119},[102,22971,9094],{"class":187},[102,22973,22974],{"class":119}," , ",[102,22976,263],{"class":187},[102,22978,552],{"class":119},[102,22980,22981],{"class":104,"line":855},[102,22982,1326],{"class":119},[102,22984,22985,22987,22989,22991],{"class":104,"line":860},[102,22986,845],{"class":112},[102,22988,380],{"class":119},[102,22990,850],{"class":278},[102,22992,552],{"class":119},[102,22994,22995],{"class":104,"line":871},[102,22996,652],{"emptyLinePlaceholder":651},[102,22998,22999,23001,23003],{"class":104,"line":1359},[102,23000,863],{"class":108},[102,23002,866],{"class":187},[102,23004,266],{"class":119},[102,23006,23007],{"class":104,"line":1368},[102,23008,301],{"class":119},[14,23010,23011],{},"重点：函数返回值不可以作为函数重载条件！",[48,23013,23015],{"id":23014},"_732注意事项","7.3.2注意事项",[59,23017,23018,23021],{},[62,23019,23020],{},"引用作为重载条件!!!",[62,23022,23023],{},"函数重载碰到函数默认参数",[93,23025,23027],{"className":95,"code":23026,"language":97,"meta":98,"style":98},"\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",[83,23028,23029,23034,23039,23043,23059,23063,23076,23080,23084,23102,23106,23119,23123,23127,23131,23136,23140,23164,23168,23181,23185,23189,23203,23207,23220,23224,23228,23236,23240,23252,23262,23275,23279,23283,23291,23295,23305,23309,23317],{"__ignoreMap":98},[102,23030,23031],{"class":104,"line":105},[102,23032,23033],{"class":126},"\u002F\u002F函数重载注意事项\n",[102,23035,23036],{"class":104,"line":116},[102,23037,23038],{"class":126},"\u002F\u002F1、引用作为重载条件\n",[102,23040,23041],{"class":104,"line":123},[102,23042,652],{"emptyLinePlaceholder":651},[102,23044,23045,23047,23049,23051,23053,23055,23057],{"class":104,"line":130},[102,23046,2780],{"class":108},[102,23048,732],{"class":112},[102,23050,380],{"class":119},[102,23052,217],{"class":108},[102,23054,2791],{"class":108},[102,23056,9275],{"class":386},[102,23058,390],{"class":119},[102,23060,23061],{"class":104,"line":136},[102,23062,120],{"class":119},[102,23064,23065,23067,23069,23072,23074],{"class":104,"line":142},[102,23066,1401],{"class":119},[102,23068,275],{"class":108},[102,23070,23071],{"class":278}," \"func (int &a) 调用 \"",[102,23073,1237],{"class":108},[102,23075,1240],{"class":119},[102,23077,23078],{"class":104,"line":148},[102,23079,301],{"class":119},[102,23081,23082],{"class":104,"line":157},[102,23083,652],{"emptyLinePlaceholder":651},[102,23085,23086,23088,23090,23092,23094,23096,23098,23100],{"class":104,"line":163},[102,23087,2780],{"class":108},[102,23089,732],{"class":112},[102,23091,380],{"class":119},[102,23093,4456],{"class":108},[102,23095,6392],{"class":108},[102,23097,2791],{"class":108},[102,23099,9275],{"class":386},[102,23101,390],{"class":119},[102,23103,23104],{"class":104,"line":175},[102,23105,120],{"class":119},[102,23107,23108,23110,23112,23115,23117],{"class":104,"line":181},[102,23109,1401],{"class":119},[102,23111,275],{"class":108},[102,23113,23114],{"class":278}," \"func (const int &a) 调用 \"",[102,23116,1237],{"class":108},[102,23118,1240],{"class":119},[102,23120,23121],{"class":104,"line":202},[102,23122,301],{"class":119},[102,23124,23125],{"class":104,"line":208},[102,23126,652],{"emptyLinePlaceholder":651},[102,23128,23129],{"class":104,"line":214},[102,23130,652],{"emptyLinePlaceholder":651},[102,23132,23133],{"class":104,"line":225},[102,23134,23135],{"class":126},"\u002F\u002F2、函数重载碰到函数默认参数\n",[102,23137,23138],{"class":104,"line":230},[102,23139,652],{"emptyLinePlaceholder":651},[102,23141,23142,23144,23146,23148,23150,23152,23154,23156,23158,23160,23162],{"class":104,"line":236},[102,23143,2780],{"class":108},[102,23145,8375],{"class":112},[102,23147,380],{"class":119},[102,23149,217],{"class":108},[102,23151,4378],{"class":386},[102,23153,2571],{"class":119},[102,23155,217],{"class":108},[102,23157,6884],{"class":386},[102,23159,22296],{"class":108},[102,23161,989],{"class":187},[102,23163,390],{"class":119},[102,23165,23166],{"class":104,"line":242},[102,23167,120],{"class":119},[102,23169,23170,23172,23174,23177,23179],{"class":104,"line":248},[102,23171,1401],{"class":119},[102,23173,275],{"class":108},[102,23175,23176],{"class":278}," \"func2(int a, int b = 10) 调用\"",[102,23178,1237],{"class":108},[102,23180,1240],{"class":119},[102,23182,23183],{"class":104,"line":254},[102,23184,301],{"class":119},[102,23186,23187],{"class":104,"line":269},[102,23188,652],{"emptyLinePlaceholder":651},[102,23190,23191,23193,23195,23197,23199,23201],{"class":104,"line":298},[102,23192,2780],{"class":108},[102,23194,8375],{"class":112},[102,23196,380],{"class":119},[102,23198,217],{"class":108},[102,23200,4378],{"class":386},[102,23202,390],{"class":119},[102,23204,23205],{"class":104,"line":502},[102,23206,120],{"class":119},[102,23208,23209,23211,23213,23216,23218],{"class":104,"line":507},[102,23210,1401],{"class":119},[102,23212,275],{"class":108},[102,23214,23215],{"class":278}," \"func2(int a) 调用\"",[102,23217,1237],{"class":108},[102,23219,1240],{"class":119},[102,23221,23222],{"class":104,"line":512},[102,23223,301],{"class":119},[102,23225,23226],{"class":104,"line":521},[102,23227,652],{"emptyLinePlaceholder":651},[102,23229,23230,23232,23234],{"class":104,"line":526},[102,23231,217],{"class":108},[102,23233,220],{"class":112},[102,23235,795],{"class":119},[102,23237,23238],{"class":104,"line":532},[102,23239,1326],{"class":119},[102,23241,23242,23244,23246,23248,23250],{"class":104,"line":538},[102,23243,151],{"class":108},[102,23245,19610],{"class":119},[102,23247,260],{"class":108},[102,23249,989],{"class":187},[102,23251,266],{"class":119},[102,23253,23254,23256,23259],{"class":104,"line":555},[102,23255,22017],{"class":112},[102,23257,23258],{"class":119},"(a);",[102,23260,23261],{"class":126}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[102,23263,23264,23266,23268,23270,23272],{"class":104,"line":570},[102,23265,22017],{"class":112},[102,23267,380],{"class":119},[102,23269,263],{"class":187},[102,23271,4227],{"class":119},[102,23273,23274],{"class":126},"\u002F\u002F调用有const   10是个常量\n",[102,23276,23277],{"class":104,"line":581},[102,23278,652],{"emptyLinePlaceholder":651},[102,23280,23281],{"class":104,"line":819},[102,23282,652],{"emptyLinePlaceholder":651},[102,23284,23285,23288],{"class":104,"line":828},[102,23286,23287],{"class":126},"    \u002F\u002Ffunc2(10);",[102,23289,23290],{"class":126}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[102,23292,23293],{"class":104,"line":837},[102,23294,652],{"emptyLinePlaceholder":651},[102,23296,23297,23299,23301,23303],{"class":104,"line":842},[102,23298,845],{"class":112},[102,23300,380],{"class":119},[102,23302,850],{"class":278},[102,23304,552],{"class":119},[102,23306,23307],{"class":104,"line":855},[102,23308,652],{"emptyLinePlaceholder":651},[102,23310,23311,23313,23315],{"class":104,"line":860},[102,23312,863],{"class":108},[102,23314,866],{"class":187},[102,23316,266],{"class":119},[102,23318,23319],{"class":104,"line":871},[102,23320,301],{"class":119},[8955,23322,23323],{},"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":98,"searchDepth":116,"depth":116,"links":23325},[23326,23327,23328],{"id":22261,"depth":116,"text":22262},{"id":22517,"depth":116,"text":22518},{"id":22638,"depth":116,"text":22639,"children":23329},[23330,23331],{"id":22645,"depth":123,"text":22646},{"id":23014,"depth":123,"text":23015},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":22253,"description":98},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":4,"title":5,"body":23338,"description":8977,"extension":8978,"meta":31232,"navigation":651,"path":8980,"seo":31233,"stem":8982,"__hash__":8983},{"type":7,"value":23339,"toc":31213},[23340,23342,23346,23350,23354,23356,23358,23360,23362,23364,23366,23368,23374,23378,23380,23386,23390,23526,23528,23754,23756,23758,23760,23764,23766,23768,23776,23780,23990,23992,23998,24000,24006,24140,24142,24144,24146,24150,24550,24552,24558,24564,25360,25366,25370,25922,25924,25926,25928,26042,26044,26126,26128,26252,26254,26344,26346,26698,26700,26706,26708,26712,26714,26716,26722,26726,26730,26738,26744,26758,26764,26776,26950,26952,26954,26956,26958,26960,26962,26964,26966,26968,27388,27392,27394,27396,27404,27952,27954,28412,28414,28416,28418,28420,28422,28424,28430,28804,28806,28808,28810,29218,29220,29222,29226,29228,29232,29234,29236,29238,29240,29245,29247,29525,29531,29565,29567,29569,29571,29599,29601,29881,29883,29895,29897,29915,29921,29925,29927,29929,29931,29933,29937,29945,29949,29955,29957,30081,30083,30085,30249,30253,30455,30457,30459,30565,30569,30799,30801,30803,30805,30807,30809,30909,30911,30913,30915,30917,31025,31027,31029,31033,31083,31085,31087,31091,31135,31137,31141,31207,31209,31211],[10,23341,5],{"id":12},[14,23343,16,23344],{},[18,23345,20],{},[14,23347,23,23348,27],{},[18,23349,26],{},[14,23351,23352],{},[18,23353,32],{},[14,23355,35],{},[14,23357,38],{},[14,23359,41],{},[43,23361,46],{"id":45},[48,23363,51],{"id":50},[14,23365,54],{},[14,23367,57],{},[59,23369,23370,23372],{},[62,23371,64],{},[62,23373,67],{},[14,23375,23376],{},[18,23377,72],{},[14,23379,75],{},[14,23381,23382,81,23384],{},[18,23383,80],{},[83,23385,85],{},[87,23387,23388],{},[62,23389,91],{},[93,23391,23392],{"className":95,"code":96,"language":97,"meta":98,"style":98},[83,23393,23394,23400,23404,23408,23412,23416,23420,23426,23430,23438,23442,23456,23460,23464,23472,23476,23480,23484,23488,23492,23502,23522],{"__ignoreMap":98},[102,23395,23396,23398],{"class":104,"line":105},[102,23397,109],{"class":108},[102,23399,113],{"class":112},[102,23401,23402],{"class":104,"line":116},[102,23403,120],{"class":119},[102,23405,23406],{"class":104,"line":123},[102,23407,127],{"class":126},[102,23409,23410],{"class":104,"line":130},[102,23411,133],{"class":126},[102,23413,23414],{"class":104,"line":136},[102,23415,139],{"class":108},[102,23417,23418],{"class":104,"line":142},[102,23419,145],{"class":126},[102,23421,23422,23424],{"class":104,"line":148},[102,23423,151],{"class":108},[102,23425,154],{"class":119},[102,23427,23428],{"class":104,"line":157},[102,23429,160],{"class":126},[102,23431,23432,23434,23436],{"class":104,"line":163},[102,23433,166],{"class":108},[102,23435,169],{"class":112},[102,23437,172],{"class":119},[102,23439,23440],{"class":104,"line":175},[102,23441,178],{"class":119},[102,23443,23444,23446,23448,23450,23452,23454],{"class":104,"line":181},[102,23445,184],{"class":108},[102,23447,188],{"class":187},[102,23449,191],{"class":108},[102,23451,194],{"class":119},[102,23453,191],{"class":108},[102,23455,199],{"class":119},[102,23457,23458],{"class":104,"line":202},[102,23459,205],{"class":119},[102,23461,23462],{"class":104,"line":208},[102,23463,211],{"class":119},[102,23465,23466,23468,23470],{"class":104,"line":214},[102,23467,217],{"class":108},[102,23469,220],{"class":112},[102,23471,172],{"class":119},[102,23473,23474],{"class":104,"line":225},[102,23475,120],{"class":119},[102,23477,23478],{"class":104,"line":230},[102,23479,233],{"class":126},[102,23481,23482],{"class":104,"line":236},[102,23483,239],{"class":126},[102,23485,23486],{"class":104,"line":242},[102,23487,245],{"class":119},[102,23489,23490],{"class":104,"line":248},[102,23491,251],{"class":126},[102,23493,23494,23496,23498,23500],{"class":104,"line":254},[102,23495,257],{"class":119},[102,23497,260],{"class":108},[102,23499,263],{"class":187},[102,23501,266],{"class":119},[102,23503,23504,23506,23508,23510,23512,23514,23516,23518,23520],{"class":104,"line":269},[102,23505,272],{"class":119},[102,23507,275],{"class":108},[102,23509,279],{"class":278},[102,23511,275],{"class":108},[102,23513,284],{"class":119},[102,23515,287],{"class":112},[102,23517,290],{"class":119},[102,23519,275],{"class":108},[102,23521,295],{"class":119},[102,23523,23524],{"class":104,"line":298},[102,23525,301],{"class":119},[14,23527,304],{},[93,23529,23530],{"className":95,"code":307,"language":97,"meta":98,"style":98},[83,23531,23532,23538,23548,23554,23560,23564,23568,23572,23578,23582,23596,23600,23608,23612,23616,23630,23634,23642,23646,23650,23658,23662,23690,23694,23698,23706,23710,23714,23718,23730,23742,23750],{"__ignoreMap":98},[102,23533,23534,23536],{"class":104,"line":105},[102,23535,314],{"class":108},[102,23537,317],{"class":278},[102,23539,23540,23542,23544,23546],{"class":104,"line":116},[102,23541,322],{"class":108},[102,23543,325],{"class":108},[102,23545,328],{"class":112},[102,23547,266],{"class":119},[102,23549,23550,23552],{"class":104,"line":123},[102,23551,314],{"class":108},[102,23553,337],{"class":278},[102,23555,23556,23558],{"class":104,"line":130},[102,23557,109],{"class":108},[102,23559,344],{"class":112},[102,23561,23562],{"class":104,"line":136},[102,23563,120],{"class":119},[102,23565,23566],{"class":104,"line":142},[102,23567,139],{"class":108},[102,23569,23570],{"class":104,"line":148},[102,23571,357],{"class":119},[102,23573,23574,23576],{"class":104,"line":157},[102,23575,151],{"class":108},[102,23577,364],{"class":119},[102,23579,23580],{"class":104,"line":163},[102,23581,369],{"class":126},[102,23583,23584,23586,23588,23590,23592,23594],{"class":104,"line":175},[102,23585,374],{"class":108},[102,23587,377],{"class":112},[102,23589,380],{"class":119},[102,23591,383],{"class":112},[102,23593,387],{"class":386},[102,23595,390],{"class":119},[102,23597,23598],{"class":104,"line":181},[102,23599,178],{"class":119},[102,23601,23602,23604,23606],{"class":104,"line":202},[102,23603,399],{"class":119},[102,23605,260],{"class":108},[102,23607,404],{"class":119},[102,23609,23610],{"class":104,"line":208},[102,23611,205],{"class":119},[102,23613,23614],{"class":104,"line":214},[102,23615,413],{"class":126},[102,23617,23618,23620,23622,23624,23626,23628],{"class":104,"line":225},[102,23619,374],{"class":108},[102,23621,420],{"class":112},[102,23623,380],{"class":119},[102,23625,217],{"class":108},[102,23627,427],{"class":386},[102,23629,390],{"class":119},[102,23631,23632],{"class":104,"line":230},[102,23633,178],{"class":119},[102,23635,23636,23638,23640],{"class":104,"line":236},[102,23637,438],{"class":119},[102,23639,260],{"class":108},[102,23641,443],{"class":119},[102,23643,23644],{"class":104,"line":242},[102,23645,205],{"class":119},[102,23647,23648],{"class":104,"line":248},[102,23649,452],{"class":126},[102,23651,23652,23654,23656],{"class":104,"line":254},[102,23653,374],{"class":108},[102,23655,459],{"class":112},[102,23657,172],{"class":119},[102,23659,23660],{"class":104,"line":269},[102,23661,178],{"class":119},[102,23663,23664,23666,23668,23670,23672,23674,23676,23678,23680,23682,23684,23686,23688],{"class":104,"line":298},[102,23665,470],{"class":119},[102,23667,275],{"class":108},[102,23669,475],{"class":278},[102,23671,275],{"class":108},[102,23673,480],{"class":119},[102,23675,275],{"class":108},[102,23677,485],{"class":278},[102,23679,275],{"class":108},[102,23681,490],{"class":278},[102,23683,275],{"class":108},[102,23685,495],{"class":119},[102,23687,275],{"class":108},[102,23689,295],{"class":119},[102,23691,23692],{"class":104,"line":502},[102,23693,205],{"class":119},[102,23695,23696],{"class":104,"line":507},[102,23697,211],{"class":119},[102,23699,23700,23702,23704],{"class":104,"line":512},[102,23701,217],{"class":108},[102,23703,220],{"class":112},[102,23705,172],{"class":119},[102,23707,23708],{"class":104,"line":521},[102,23709,120],{"class":119},[102,23711,23712],{"class":104,"line":526},[102,23713,529],{"class":126},[102,23715,23716],{"class":104,"line":532},[102,23717,535],{"class":119},[102,23719,23720,23722,23724,23726,23728],{"class":104,"line":538},[102,23721,541],{"class":119},[102,23723,544],{"class":112},[102,23725,380],{"class":119},[102,23727,549],{"class":278},[102,23729,552],{"class":119},[102,23731,23732,23734,23736,23738,23740],{"class":104,"line":555},[102,23733,541],{"class":119},[102,23735,560],{"class":112},[102,23737,380],{"class":119},[102,23739,565],{"class":187},[102,23741,552],{"class":119},[102,23743,23744,23746,23748],{"class":104,"line":570},[102,23745,541],{"class":119},[102,23747,575],{"class":112},[102,23749,578],{"class":119},[102,23751,23752],{"class":104,"line":581},[102,23753,301],{"class":119},[14,23755,586],{},[14,23757,589],{},[14,23759,592],{},[14,23761,23762],{},[18,23763,597],{},[14,23765,600],{},[14,23767,603],{},[87,23769,23770,23772,23774],{},[62,23771,608],{},[62,23773,611],{},[62,23775,614],{},[14,23777,23778],{},[18,23779,619],{},[93,23781,23782],{"className":622,"code":623,"language":624,"meta":98,"style":98},[83,23783,23784,23788,23792,23796,23800,23804,23810,23814,23818,23822,23826,23830,23834,23838,23842,23846,23850,23854,23860,23864,23868,23876,23880,23890,23900,23910,23914,23918,23922,23930,23934,23938,23948,23954,23960,23964,23974,23978,23986],{"__ignoreMap":98},[102,23785,23786],{"class":104,"line":105},[102,23787,631],{"class":126},[102,23789,23790],{"class":104,"line":116},[102,23791,636],{"class":126},[102,23793,23794],{"class":104,"line":123},[102,23795,641],{"class":126},[102,23797,23798],{"class":104,"line":130},[102,23799,646],{"class":126},[102,23801,23802],{"class":104,"line":136},[102,23803,652],{"emptyLinePlaceholder":651},[102,23805,23806,23808],{"class":104,"line":142},[102,23807,109],{"class":108},[102,23809,659],{"class":112},[102,23811,23812],{"class":104,"line":148},[102,23813,120],{"class":119},[102,23815,23816],{"class":104,"line":157},[102,23817,668],{"class":126},[102,23819,23820],{"class":104,"line":163},[102,23821,139],{"class":108},[102,23823,23824],{"class":104,"line":175},[102,23825,677],{"class":119},[102,23827,23828],{"class":104,"line":181},[102,23829,652],{"emptyLinePlaceholder":651},[102,23831,23832],{"class":104,"line":202},[102,23833,686],{"class":126},[102,23835,23836],{"class":104,"line":208},[102,23837,691],{"class":108},[102,23839,23840],{"class":104,"line":214},[102,23841,696],{"class":119},[102,23843,23844],{"class":104,"line":225},[102,23845,652],{"emptyLinePlaceholder":651},[102,23847,23848],{"class":104,"line":230},[102,23849,705],{"class":126},[102,23851,23852],{"class":104,"line":236},[102,23853,710],{"class":108},[102,23855,23856,23858],{"class":104,"line":242},[102,23857,151],{"class":108},[102,23859,717],{"class":119},[102,23861,23862],{"class":104,"line":248},[102,23863,652],{"emptyLinePlaceholder":651},[102,23865,23866],{"class":104,"line":254},[102,23867,139],{"class":108},[102,23869,23870,23872,23874],{"class":104,"line":269},[102,23871,374],{"class":108},[102,23873,732],{"class":112},[102,23875,172],{"class":119},[102,23877,23878],{"class":104,"line":298},[102,23879,178],{"class":119},[102,23881,23882,23884,23886,23888],{"class":104,"line":502},[102,23883,743],{"class":119},[102,23885,260],{"class":108},[102,23887,748],{"class":278},[102,23889,266],{"class":119},[102,23891,23892,23894,23896,23898],{"class":104,"line":507},[102,23893,755],{"class":119},[102,23895,260],{"class":108},[102,23897,760],{"class":278},[102,23899,266],{"class":119},[102,23901,23902,23904,23906,23908],{"class":104,"line":512},[102,23903,767],{"class":119},[102,23905,260],{"class":108},[102,23907,772],{"class":187},[102,23909,266],{"class":119},[102,23911,23912],{"class":104,"line":521},[102,23913,205],{"class":119},[102,23915,23916],{"class":104,"line":526},[102,23917,211],{"class":119},[102,23919,23920],{"class":104,"line":532},[102,23921,652],{"emptyLinePlaceholder":651},[102,23923,23924,23926,23928],{"class":104,"line":538},[102,23925,217],{"class":108},[102,23927,220],{"class":112},[102,23929,795],{"class":119},[102,23931,23932],{"class":104,"line":555},[102,23933,652],{"emptyLinePlaceholder":651},[102,23935,23936],{"class":104,"line":570},[102,23937,804],{"class":119},[102,23939,23940,23942,23944,23946],{"class":104,"line":581},[102,23941,809],{"class":119},[102,23943,260],{"class":108},[102,23945,814],{"class":278},[102,23947,266],{"class":119},[102,23949,23950,23952],{"class":104,"line":819},[102,23951,822],{"class":126},[102,23953,825],{"class":126},[102,23955,23956,23958],{"class":104,"line":828},[102,23957,831],{"class":126},[102,23959,834],{"class":126},[102,23961,23962],{"class":104,"line":837},[102,23963,652],{"emptyLinePlaceholder":651},[102,23965,23966,23968,23970,23972],{"class":104,"line":842},[102,23967,845],{"class":112},[102,23969,380],{"class":119},[102,23971,850],{"class":278},[102,23973,552],{"class":119},[102,23975,23976],{"class":104,"line":855},[102,23977,652],{"emptyLinePlaceholder":651},[102,23979,23980,23982,23984],{"class":104,"line":860},[102,23981,863],{"class":108},[102,23983,866],{"class":187},[102,23985,266],{"class":119},[102,23987,23988],{"class":104,"line":871},[102,23989,301],{"class":119},[48,23991,877],{"id":876},[14,23993,880,23994,884,23996],{},[18,23995,883],{},[18,23997,887],{},[14,23999,890],{},[59,24001,24002,24004],{},[62,24003,895],{},[62,24005,898],{},[93,24007,24008],{"className":622,"code":901,"language":624,"meta":98,"style":98},[83,24009,24010,24016,24020,24028,24032,24036,24042,24046,24054,24058,24062,24070,24074,24078,24090,24094,24098,24110,24114,24124,24128,24136],{"__ignoreMap":98},[102,24011,24012,24014],{"class":104,"line":105},[102,24013,109],{"class":108},[102,24015,910],{"class":112},[102,24017,24018],{"class":104,"line":116},[102,24019,120],{"class":119},[102,24021,24022,24024,24026],{"class":104,"line":123},[102,24023,151],{"class":108},[102,24025,921],{"class":119},[102,24027,924],{"class":126},[102,24029,24030],{"class":104,"line":130},[102,24031,211],{"class":119},[102,24033,24034],{"class":104,"line":136},[102,24035,652],{"emptyLinePlaceholder":651},[102,24037,24038,24040],{"class":104,"line":142},[102,24039,937],{"class":108},[102,24041,940],{"class":112},[102,24043,24044],{"class":104,"line":148},[102,24045,120],{"class":119},[102,24047,24048,24050,24052],{"class":104,"line":157},[102,24049,151],{"class":108},[102,24051,951],{"class":119},[102,24053,954],{"class":126},[102,24055,24056],{"class":104,"line":163},[102,24057,211],{"class":119},[102,24059,24060],{"class":104,"line":175},[102,24061,652],{"emptyLinePlaceholder":651},[102,24063,24064,24066,24068],{"class":104,"line":181},[102,24065,217],{"class":108},[102,24067,220],{"class":112},[102,24069,795],{"class":119},[102,24071,24072],{"class":104,"line":202},[102,24073,652],{"emptyLinePlaceholder":651},[102,24075,24076],{"class":104,"line":208},[102,24077,979],{"class":119},[102,24079,24080,24082,24084,24086,24088],{"class":104,"line":214},[102,24081,984],{"class":119},[102,24083,260],{"class":108},[102,24085,989],{"class":187},[102,24087,992],{"class":119},[102,24089,995],{"class":126},[102,24091,24092],{"class":104,"line":225},[102,24093,652],{"emptyLinePlaceholder":651},[102,24095,24096],{"class":104,"line":230},[102,24097,1004],{"class":119},[102,24099,24100,24102,24104,24106,24108],{"class":104,"line":236},[102,24101,1009],{"class":119},[102,24103,260],{"class":108},[102,24105,989],{"class":187},[102,24107,992],{"class":119},[102,24109,1018],{"class":126},[102,24111,24112],{"class":104,"line":242},[102,24113,652],{"emptyLinePlaceholder":651},[102,24115,24116,24118,24120,24122],{"class":104,"line":248},[102,24117,845],{"class":112},[102,24119,380],{"class":119},[102,24121,850],{"class":278},[102,24123,552],{"class":119},[102,24125,24126],{"class":104,"line":254},[102,24127,652],{"emptyLinePlaceholder":651},[102,24129,24130,24132,24134],{"class":104,"line":269},[102,24131,863],{"class":108},[102,24133,866],{"class":187},[102,24135,266],{"class":119},[102,24137,24138],{"class":104,"line":298},[102,24139,301],{"class":119},[48,24141,1052],{"id":1051},[14,24143,1055],{},[14,24145,1058],{},[14,24147,24148],{},[18,24149,619],{},[93,24151,24152],{"className":622,"code":1065,"language":624,"meta":98,"style":98},[83,24153,24154,24162,24166,24170,24174,24188,24196,24200,24208,24212,24218,24222,24226,24230,24234,24242,24248,24252,24256,24270,24290,24302,24308,24312,24320,24324,24328,24332,24346,24354,24358,24362,24366,24372,24376,24384,24388,24394,24398,24402,24410,24414,24418,24422,24434,24454,24458,24462,24474,24494,24498,24502,24514,24520,24524,24534,24538,24546],{"__ignoreMap":98},[102,24155,24156,24158,24160],{"class":104,"line":105},[102,24157,109],{"class":108},[102,24159,1074],{"class":112},[102,24161,1077],{"class":119},[102,24163,24164],{"class":104,"line":116},[102,24165,139],{"class":108},[102,24167,24168],{"class":104,"line":123},[102,24169,652],{"emptyLinePlaceholder":651},[102,24171,24172],{"class":104,"line":130},[102,24173,1090],{"class":126},[102,24175,24176,24178,24180,24182,24184,24186],{"class":104,"line":136},[102,24177,374],{"class":108},[102,24179,377],{"class":112},[102,24181,380],{"class":119},[102,24183,383],{"class":112},[102,24185,387],{"class":386},[102,24187,1105],{"class":119},[102,24189,24190,24192,24194],{"class":104,"line":142},[102,24191,743],{"class":119},[102,24193,260],{"class":108},[102,24195,1114],{"class":119},[102,24197,24198],{"class":104,"line":148},[102,24199,205],{"class":119},[102,24201,24202,24204,24206],{"class":104,"line":157},[102,24203,1123],{"class":112},[102,24205,1126],{"class":112},[102,24207,172],{"class":119},[102,24209,24210],{"class":104,"line":163},[102,24211,178],{"class":119},[102,24213,24214,24216],{"class":104,"line":175},[102,24215,184],{"class":108},[102,24217,1139],{"class":119},[102,24219,24220],{"class":104,"line":181},[102,24221,205],{"class":119},[102,24223,24224],{"class":104,"line":202},[102,24225,652],{"emptyLinePlaceholder":651},[102,24227,24228],{"class":104,"line":208},[102,24229,652],{"emptyLinePlaceholder":651},[102,24231,24232],{"class":104,"line":214},[102,24233,1156],{"class":126},[102,24235,24236,24238,24240],{"class":104,"line":225},[102,24237,151],{"class":108},[102,24239,1163],{"class":112},[102,24241,795],{"class":119},[102,24243,24244,24246],{"class":104,"line":230},[102,24245,184],{"class":108},[102,24247,1172],{"class":119},[102,24249,24250],{"class":104,"line":236},[102,24251,205],{"class":119},[102,24253,24254],{"class":104,"line":242},[102,24255,1181],{"class":126},[102,24257,24258,24260,24262,24264,24266,24268],{"class":104,"line":248},[102,24259,374],{"class":108},[102,24261,1188],{"class":112},[102,24263,380],{"class":119},[102,24265,217],{"class":108},[102,24267,1195],{"class":386},[102,24269,1105],{"class":119},[102,24271,24272,24274,24276,24278,24280,24282,24284,24286,24288],{"class":104,"line":254},[102,24273,1202],{"class":108},[102,24275,1205],{"class":119},[102,24277,1208],{"class":108},[102,24279,866],{"class":187},[102,24281,1213],{"class":108},[102,24283,1216],{"class":119},[102,24285,1219],{"class":108},[102,24287,1222],{"class":187},[102,24289,1105],{"class":119},[102,24291,24292,24294,24296,24298,24300],{"class":104,"line":269},[102,24293,1229],{"class":119},[102,24295,275],{"class":108},[102,24297,1234],{"class":278},[102,24299,1237],{"class":108},[102,24301,1240],{"class":119},[102,24303,24304,24306],{"class":104,"line":298},[102,24305,1245],{"class":108},[102,24307,266],{"class":119},[102,24309,24310],{"class":104,"line":502},[102,24311,1252],{"class":119},[102,24313,24314,24316,24318],{"class":104,"line":507},[102,24315,1257],{"class":119},[102,24317,260],{"class":108},[102,24319,1262],{"class":119},[102,24321,24322],{"class":104,"line":512},[102,24323,205],{"class":119},[102,24325,24326],{"class":104,"line":521},[102,24327,652],{"emptyLinePlaceholder":651},[102,24329,24330],{"class":104,"line":526},[102,24331,1275],{"class":126},[102,24333,24334,24336,24338,24340,24342,24344],{"class":104,"line":532},[102,24335,374],{"class":108},[102,24337,1282],{"class":112},[102,24339,380],{"class":119},[102,24341,383],{"class":112},[102,24343,1289],{"class":386},[102,24345,1105],{"class":119},[102,24347,24348,24350,24352],{"class":104,"line":538},[102,24349,1296],{"class":119},[102,24351,260],{"class":108},[102,24353,1301],{"class":119},[102,24355,24356],{"class":104,"line":555},[102,24357,205],{"class":119},[102,24359,24360],{"class":104,"line":570},[102,24361,652],{"emptyLinePlaceholder":651},[102,24363,24364],{"class":104,"line":581},[102,24365,710],{"class":108},[102,24367,24368,24370],{"class":104,"line":819},[102,24369,1318],{"class":119},[102,24371,1321],{"class":126},[102,24373,24374],{"class":104,"line":828},[102,24375,1326],{"class":119},[102,24377,24378,24380,24382],{"class":104,"line":837},[102,24379,151],{"class":108},[102,24381,1333],{"class":119},[102,24383,1336],{"class":126},[102,24385,24386],{"class":104,"line":842},[102,24387,652],{"emptyLinePlaceholder":651},[102,24389,24390,24392],{"class":104,"line":855},[102,24391,1345],{"class":119},[102,24393,1348],{"class":126},[102,24395,24396],{"class":104,"line":860},[102,24397,211],{"class":119},[102,24399,24400],{"class":104,"line":871},[102,24401,652],{"emptyLinePlaceholder":651},[102,24403,24404,24406,24408],{"class":104,"line":1359},[102,24405,217],{"class":108},[102,24407,220],{"class":112},[102,24409,795],{"class":119},[102,24411,24412],{"class":104,"line":1368},[102,24413,652],{"emptyLinePlaceholder":651},[102,24415,24416],{"class":104,"line":1373},[102,24417,804],{"class":119},[102,24419,24420],{"class":104,"line":1378},[102,24421,1381],{"class":126},[102,24423,24424,24426,24428,24430,24432],{"class":104,"line":1384},[102,24425,1387],{"class":119},[102,24427,544],{"class":112},[102,24429,380],{"class":119},[102,24431,549],{"class":278},[102,24433,552],{"class":119},[102,24435,24436,24438,24440,24442,24444,24446,24448,24450,24452],{"class":104,"line":1398},[102,24437,1401],{"class":119},[102,24439,275],{"class":108},[102,24441,1406],{"class":278},[102,24443,1237],{"class":108},[102,24445,1411],{"class":119},[102,24447,1414],{"class":112},[102,24449,1417],{"class":119},[102,24451,275],{"class":108},[102,24453,1240],{"class":119},[102,24455,24456],{"class":104,"line":1424},[102,24457,652],{"emptyLinePlaceholder":651},[102,24459,24460],{"class":104,"line":1429},[102,24461,1432],{"class":126},[102,24463,24464,24466,24468,24470,24472],{"class":104,"line":1435},[102,24465,1387],{"class":119},[102,24467,1440],{"class":112},[102,24469,380],{"class":119},[102,24471,1445],{"class":187},[102,24473,552],{"class":119},[102,24475,24476,24478,24480,24482,24484,24486,24488,24490,24492],{"class":104,"line":1450},[102,24477,1401],{"class":119},[102,24479,275],{"class":108},[102,24481,1457],{"class":278},[102,24483,1237],{"class":108},[102,24485,1411],{"class":119},[102,24487,1464],{"class":112},[102,24489,1417],{"class":119},[102,24491,275],{"class":108},[102,24493,1240],{"class":119},[102,24495,24496],{"class":104,"line":1473},[102,24497,652],{"emptyLinePlaceholder":651},[102,24499,24500],{"class":104,"line":1478},[102,24501,1481],{"class":126},[102,24503,24504,24506,24508,24510,24512],{"class":104,"line":1484},[102,24505,1387],{"class":119},[102,24507,1489],{"class":112},[102,24509,380],{"class":119},[102,24511,1494],{"class":278},[102,24513,552],{"class":119},[102,24515,24516,24518],{"class":104,"line":1499},[102,24517,1502],{"class":126},[102,24519,1505],{"class":126},[102,24521,24522],{"class":104,"line":1508},[102,24523,652],{"emptyLinePlaceholder":651},[102,24525,24526,24528,24530,24532],{"class":104,"line":1513},[102,24527,845],{"class":112},[102,24529,380],{"class":119},[102,24531,850],{"class":278},[102,24533,552],{"class":119},[102,24535,24536],{"class":104,"line":1524},[102,24537,652],{"emptyLinePlaceholder":651},[102,24539,24540,24542,24544],{"class":104,"line":1529},[102,24541,863],{"class":108},[102,24543,866],{"class":187},[102,24545,266],{"class":119},[102,24547,24548],{"class":104,"line":1538},[102,24549,301],{"class":119},[48,24551,1544],{"id":1543},[87,24553,24554],{},[62,24555,24556,1552],{},[18,24557,1551],{},[59,24559,24560,24562],{},[62,24561,1557],{},[62,24563,1560],{},[93,24565,24566],{"className":95,"code":1563,"language":97,"meta":98,"style":98},[83,24567,24568,24574,24584,24590,24594,24598,24602,24628,24632,24640,24648,24656,24660,24668,24672,24702,24706,24714,24718,24732,24736,24740,24748,24752,24758,24762,24770,24774,24780,24784,24792,24796,24802,24806,24810,24824,24828,24866,24870,24878,24882,24886,24890,24898,24902,24906,24910,24914,24920,24926,24932,24936,24940,24944,24964,24968,25018,25022,25030,25034,25038,25042,25054,25060,25076,25084,25088,25108,25112,25132,25144,25160,25164,25172,25192,25212,25216,25220,25232,25242,25246,25258,25262,25266,25270,25282,25286,25290,25302,25312,25316,25328,25332,25336,25340,25352,25356],{"__ignoreMap":98},[102,24569,24570,24572],{"class":104,"line":105},[102,24571,314],{"class":108},[102,24573,317],{"class":278},[102,24575,24576,24578,24580,24582],{"class":104,"line":116},[102,24577,322],{"class":108},[102,24579,325],{"class":108},[102,24581,328],{"class":112},[102,24583,266],{"class":119},[102,24585,24586,24588],{"class":104,"line":123},[102,24587,109],{"class":108},[102,24589,1588],{"class":112},[102,24591,24592],{"class":104,"line":130},[102,24593,120],{"class":119},[102,24595,24596],{"class":104,"line":136},[102,24597,139],{"class":108},[102,24599,24600],{"class":104,"line":142},[102,24601,1601],{"class":126},[102,24603,24604,24606,24608,24610,24612,24614,24616,24618,24620,24622,24624,24626],{"class":104,"line":148},[102,24605,374],{"class":108},[102,24607,1608],{"class":112},[102,24609,380],{"class":119},[102,24611,217],{"class":108},[102,24613,1615],{"class":386},[102,24615,1618],{"class":119},[102,24617,217],{"class":108},[102,24619,1623],{"class":386},[102,24621,1618],{"class":119},[102,24623,217],{"class":108},[102,24625,1630],{"class":386},[102,24627,390],{"class":119},[102,24629,24630],{"class":104,"line":157},[102,24631,178],{"class":119},[102,24633,24634,24636,24638],{"class":104,"line":163},[102,24635,1641],{"class":119},[102,24637,260],{"class":108},[102,24639,1646],{"class":119},[102,24641,24642,24644,24646],{"class":104,"line":175},[102,24643,1651],{"class":119},[102,24645,260],{"class":108},[102,24647,1656],{"class":119},[102,24649,24650,24652,24654],{"class":104,"line":181},[102,24651,1661],{"class":119},[102,24653,260],{"class":108},[102,24655,1666],{"class":119},[102,24657,24658],{"class":104,"line":202},[102,24659,205],{"class":119},[102,24661,24662,24664,24666],{"class":104,"line":208},[102,24663,151],{"class":108},[102,24665,1677],{"class":112},[102,24667,172],{"class":119},[102,24669,24670],{"class":104,"line":214},[102,24671,178],{"class":119},[102,24673,24674,24676,24678,24680,24682,24684,24686,24688,24690,24692,24694,24696,24698,24700],{"class":104,"line":225},[102,24675,184],{"class":108},[102,24677,188],{"class":187},[102,24679,191],{"class":108},[102,24681,1694],{"class":119},[102,24683,191],{"class":108},[102,24685,1699],{"class":119},[102,24687,1702],{"class":108},[102,24689,1705],{"class":119},[102,24691,191],{"class":108},[102,24693,1710],{"class":119},[102,24695,1702],{"class":108},[102,24697,1715],{"class":119},[102,24699,191],{"class":108},[102,24701,1720],{"class":119},[102,24703,24704],{"class":104,"line":230},[102,24705,205],{"class":119},[102,24707,24708,24710,24712],{"class":104,"line":236},[102,24709,151],{"class":108},[102,24711,1731],{"class":112},[102,24713,172],{"class":119},[102,24715,24716],{"class":104,"line":242},[102,24717,178],{"class":119},[102,24719,24720,24722,24724,24726,24728,24730],{"class":104,"line":248},[102,24721,184],{"class":108},[102,24723,1705],{"class":119},[102,24725,191],{"class":108},[102,24727,1748],{"class":119},[102,24729,191],{"class":108},[102,24731,1753],{"class":119},[102,24733,24734],{"class":104,"line":254},[102,24735,205],{"class":119},[102,24737,24738],{"class":104,"line":269},[102,24739,1762],{"class":126},[102,24741,24742,24744,24746],{"class":104,"line":298},[102,24743,151],{"class":108},[102,24745,1769],{"class":112},[102,24747,172],{"class":119},[102,24749,24750],{"class":104,"line":502},[102,24751,178],{"class":119},[102,24753,24754,24756],{"class":104,"line":507},[102,24755,184],{"class":108},[102,24757,1782],{"class":119},[102,24759,24760],{"class":104,"line":512},[102,24761,205],{"class":119},[102,24763,24764,24766,24768],{"class":104,"line":521},[102,24765,151],{"class":108},[102,24767,1793],{"class":112},[102,24769,172],{"class":119},[102,24771,24772],{"class":104,"line":526},[102,24773,178],{"class":119},[102,24775,24776,24778],{"class":104,"line":532},[102,24777,184],{"class":108},[102,24779,1806],{"class":119},[102,24781,24782],{"class":104,"line":538},[102,24783,205],{"class":119},[102,24785,24786,24788,24790],{"class":104,"line":555},[102,24787,151],{"class":108},[102,24789,1817],{"class":112},[102,24791,172],{"class":119},[102,24793,24794],{"class":104,"line":570},[102,24795,178],{"class":119},[102,24797,24798,24800],{"class":104,"line":581},[102,24799,184],{"class":108},[102,24801,1830],{"class":119},[102,24803,24804],{"class":104,"line":819},[102,24805,205],{"class":119},[102,24807,24808],{"class":104,"line":828},[102,24809,1839],{"class":126},[102,24811,24812,24814,24816,24818,24820,24822],{"class":104,"line":837},[102,24813,1844],{"class":108},[102,24815,1847],{"class":112},[102,24817,380],{"class":119},[102,24819,1852],{"class":112},[102,24821,1855],{"class":386},[102,24823,390],{"class":119},[102,24825,24826],{"class":104,"line":842},[102,24827,178],{"class":119},[102,24829,24830,24832,24834,24836,24838,24840,24842,24844,24846,24848,24850,24852,24854,24856,24858,24860,24862,24864],{"class":104,"line":855},[102,24831,1202],{"class":108},[102,24833,1868],{"class":119},[102,24835,1871],{"class":112},[102,24837,1417],{"class":119},[102,24839,1876],{"class":108},[102,24841,1879],{"class":119},[102,24843,1882],{"class":108},[102,24845,1885],{"class":119},[102,24847,1888],{"class":112},[102,24849,1417],{"class":119},[102,24851,1876],{"class":108},[102,24853,1895],{"class":119},[102,24855,1882],{"class":108},[102,24857,1885],{"class":119},[102,24859,1902],{"class":112},[102,24861,1417],{"class":119},[102,24863,1876],{"class":108},[102,24865,1909],{"class":119},[102,24867,24868],{"class":104,"line":860},[102,24869,1914],{"class":119},[102,24871,24872,24874,24876],{"class":104,"line":871},[102,24873,1245],{"class":108},[102,24875,1921],{"class":187},[102,24877,266],{"class":119},[102,24879,24880],{"class":104,"line":1359},[102,24881,1252],{"class":119},[102,24883,24884],{"class":104,"line":1368},[102,24885,1932],{"class":108},[102,24887,24888],{"class":104,"line":1373},[102,24889,1914],{"class":119},[102,24891,24892,24894,24896],{"class":104,"line":1378},[102,24893,1245],{"class":108},[102,24895,1943],{"class":187},[102,24897,266],{"class":119},[102,24899,24900],{"class":104,"line":1384},[102,24901,1252],{"class":119},[102,24903,24904],{"class":104,"line":1398},[102,24905,205],{"class":119},[102,24907,24908],{"class":104,"line":1424},[102,24909,1958],{"class":126},[102,24911,24912],{"class":104,"line":1429},[102,24913,710],{"class":108},[102,24915,24916,24918],{"class":104,"line":1435},[102,24917,151],{"class":108},[102,24919,1782],{"class":119},[102,24921,24922,24924],{"class":104,"line":1450},[102,24923,151],{"class":108},[102,24925,1806],{"class":119},[102,24927,24928,24930],{"class":104,"line":1473},[102,24929,151],{"class":108},[102,24931,1830],{"class":119},[102,24933,24934],{"class":104,"line":1478},[102,24935,652],{"emptyLinePlaceholder":651},[102,24937,24938],{"class":104,"line":1484},[102,24939,211],{"class":119},[102,24941,24942],{"class":104,"line":1499},[102,24943,1993],{"class":126},[102,24945,24946,24948,24950,24952,24954,24956,24958,24960,24962],{"class":104,"line":1508},[102,24947,1998],{"class":108},[102,24949,1847],{"class":112},[102,24951,380],{"class":119},[102,24953,1852],{"class":112},[102,24955,2007],{"class":386},[102,24957,1618],{"class":119},[102,24959,1852],{"class":112},[102,24961,2014],{"class":386},[102,24963,390],{"class":119},[102,24965,24966],{"class":104,"line":1513},[102,24967,120],{"class":119},[102,24969,24970,24972,24974,24976,24978,24980,24982,24984,24986,24988,24990,24992,24994,24996,24998,25000,25002,25004,25006,25008,25010,25012,25014,25016],{"class":104,"line":1524},[102,24971,863],{"class":108},[102,24973,2027],{"class":119},[102,24975,1871],{"class":112},[102,24977,1417],{"class":119},[102,24979,1876],{"class":108},[102,24981,2036],{"class":119},[102,24983,1871],{"class":112},[102,24985,2041],{"class":119},[102,24987,1882],{"class":108},[102,24989,2027],{"class":119},[102,24991,1888],{"class":112},[102,24993,1417],{"class":119},[102,24995,1876],{"class":108},[102,24997,2036],{"class":119},[102,24999,1888],{"class":112},[102,25001,2041],{"class":119},[102,25003,1882],{"class":108},[102,25005,2027],{"class":119},[102,25007,1902],{"class":112},[102,25009,1417],{"class":119},[102,25011,1876],{"class":108},[102,25013,2036],{"class":119},[102,25015,1902],{"class":112},[102,25017,2074],{"class":119},[102,25019,25020],{"class":104,"line":1529},[102,25021,301],{"class":119},[102,25023,25024,25026,25028],{"class":104,"line":1538},[102,25025,217],{"class":108},[102,25027,220],{"class":112},[102,25029,172],{"class":119},[102,25031,25032],{"class":104,"line":2089},[102,25033,120],{"class":119},[102,25035,25036],{"class":104,"line":2094},[102,25037,2097],{"class":119},[102,25039,25040],{"class":104,"line":2100},[102,25041,2103],{"class":126},[102,25043,25044,25046,25048,25050,25052],{"class":104,"line":2106},[102,25045,272],{"class":119},[102,25047,275],{"class":108},[102,25049,2113],{"class":278},[102,25051,275],{"class":108},[102,25053,295],{"class":119},[102,25055,25056,25058],{"class":104,"line":2120},[102,25057,151],{"class":108},[102,25059,2125],{"class":119},[102,25061,25062,25064,25066,25068,25070,25072,25074],{"class":104,"line":2128},[102,25063,2131],{"class":119},[102,25065,2134],{"class":108},[102,25067,2137],{"class":119},[102,25069,2134],{"class":108},[102,25071,2142],{"class":119},[102,25073,2134],{"class":108},[102,25075,1666],{"class":119},[102,25077,25078,25080,25082],{"class":104,"line":2149},[102,25079,2152],{"class":119},[102,25081,2155],{"class":112},[102,25083,2158],{"class":119},[102,25085,25086],{"class":104,"line":2161},[102,25087,2164],{"class":126},[102,25089,25090,25092,25094,25096,25098,25100,25102,25104,25106],{"class":104,"line":2167},[102,25091,272],{"class":119},[102,25093,275],{"class":108},[102,25095,2174],{"class":278},[102,25097,275],{"class":108},[102,25099,284],{"class":119},[102,25101,2181],{"class":112},[102,25103,290],{"class":119},[102,25105,275],{"class":108},[102,25107,295],{"class":119},[102,25109,25110],{"class":104,"line":2190},[102,25111,2193],{"class":126},[102,25113,25114,25116,25118,25120,25122,25124,25126,25128,25130],{"class":104,"line":2196},[102,25115,272],{"class":119},[102,25117,275],{"class":108},[102,25119,2203],{"class":278},[102,25121,275],{"class":108},[102,25123,284],{"class":119},[102,25125,2210],{"class":112},[102,25127,290],{"class":119},[102,25129,275],{"class":108},[102,25131,295],{"class":119},[102,25133,25134,25136,25138,25140,25142],{"class":104,"line":2219},[102,25135,272],{"class":119},[102,25137,275],{"class":108},[102,25139,2226],{"class":278},[102,25141,275],{"class":108},[102,25143,295],{"class":119},[102,25145,25146,25148,25150,25152,25154,25156,25158],{"class":104,"line":2233},[102,25147,2131],{"class":119},[102,25149,2134],{"class":108},[102,25151,2240],{"class":119},[102,25153,2134],{"class":108},[102,25155,2245],{"class":119},[102,25157,2134],{"class":108},[102,25159,2250],{"class":119},[102,25161,25162],{"class":104,"line":2253},[102,25163,2256],{"class":119},[102,25165,25166,25168,25170],{"class":104,"line":2259},[102,25167,2262],{"class":119},[102,25169,2155],{"class":112},[102,25171,2267],{"class":119},[102,25173,25174,25176,25178,25180,25182,25184,25186,25188,25190],{"class":104,"line":2270},[102,25175,272],{"class":119},[102,25177,275],{"class":108},[102,25179,2277],{"class":278},[102,25181,275],{"class":108},[102,25183,2282],{"class":119},[102,25185,2181],{"class":112},[102,25187,290],{"class":119},[102,25189,275],{"class":108},[102,25191,295],{"class":119},[102,25193,25194,25196,25198,25200,25202,25204,25206,25208,25210],{"class":104,"line":2293},[102,25195,272],{"class":119},[102,25197,275],{"class":108},[102,25199,2300],{"class":278},[102,25201,275],{"class":108},[102,25203,2282],{"class":119},[102,25205,2210],{"class":112},[102,25207,290],{"class":119},[102,25209,275],{"class":108},[102,25211,295],{"class":119},[102,25213,25214],{"class":104,"line":2315},[102,25215,652],{"emptyLinePlaceholder":651},[102,25217,25218],{"class":104,"line":2320},[102,25219,2323],{"class":126},[102,25221,25222,25224,25226,25228,25230],{"class":104,"line":2326},[102,25223,272],{"class":119},[102,25225,275],{"class":108},[102,25227,2333],{"class":278},[102,25229,275],{"class":108},[102,25231,295],{"class":119},[102,25233,25234,25236,25238,25240],{"class":104,"line":2340},[102,25235,2343],{"class":108},[102,25237,2027],{"class":119},[102,25239,2348],{"class":112},[102,25241,2351],{"class":119},[102,25243,25244],{"class":104,"line":2354},[102,25245,178],{"class":119},[102,25247,25248,25250,25252,25254,25256],{"class":104,"line":2359},[102,25249,470],{"class":119},[102,25251,275],{"class":108},[102,25253,2366],{"class":278},[102,25255,275],{"class":108},[102,25257,295],{"class":119},[102,25259,25260],{"class":104,"line":2373},[102,25261,205],{"class":119},[102,25263,25264],{"class":104,"line":2378},[102,25265,2381],{"class":108},[102,25267,25268],{"class":104,"line":2384},[102,25269,178],{"class":119},[102,25271,25272,25274,25276,25278,25280],{"class":104,"line":2389},[102,25273,470],{"class":119},[102,25275,275],{"class":108},[102,25277,2396],{"class":278},[102,25279,275],{"class":108},[102,25281,295],{"class":119},[102,25283,25284],{"class":104,"line":2403},[102,25285,205],{"class":119},[102,25287,25288],{"class":104,"line":2408},[102,25289,652],{"emptyLinePlaceholder":651},[102,25291,25292,25294,25296,25298,25300],{"class":104,"line":2413},[102,25293,272],{"class":119},[102,25295,275],{"class":108},[102,25297,2420],{"class":278},[102,25299,275],{"class":108},[102,25301,295],{"class":119},[102,25303,25304,25306,25308,25310],{"class":104,"line":2427},[102,25305,2343],{"class":108},[102,25307,2432],{"class":119},[102,25309,2348],{"class":112},[102,25311,2437],{"class":119},[102,25313,25314],{"class":104,"line":2440},[102,25315,178],{"class":119},[102,25317,25318,25320,25322,25324,25326],{"class":104,"line":2445},[102,25319,470],{"class":119},[102,25321,275],{"class":108},[102,25323,2366],{"class":278},[102,25325,275],{"class":108},[102,25327,295],{"class":119},[102,25329,25330],{"class":104,"line":2458},[102,25331,205],{"class":119},[102,25333,25334],{"class":104,"line":2463},[102,25335,2381],{"class":108},[102,25337,25338],{"class":104,"line":2468},[102,25339,178],{"class":119},[102,25341,25342,25344,25346,25348,25350],{"class":104,"line":2473},[102,25343,470],{"class":119},[102,25345,275],{"class":108},[102,25347,2396],{"class":278},[102,25349,275],{"class":108},[102,25351,295],{"class":119},[102,25353,25354],{"class":104,"line":2486},[102,25355,205],{"class":119},[102,25357,25358],{"class":104,"line":2491},[102,25359,301],{"class":119},[87,25361,25362],{"start":116},[62,25363,25364],{},[18,25365,2500],{},[59,25367,25368],{},[62,25369,2505],{},[93,25371,25372],{"className":95,"code":2508,"language":97,"meta":98,"style":98},[83,25373,25374,25380,25390,25396,25402,25406,25410,25414,25442,25446,25458,25470,25474,25478,25484,25490,25494,25500,25504,25508,25512,25530,25548,25552,25564,25576,25580,25584,25590,25594,25598,25602,25626,25630,25656,25682,25706,25720,25724,25736,25740,25744,25748,25760,25764,25768,25776,25780,25784,25788,25792,25796,25806,25812,25820,25828,25838,25844,25856,25864,25872,25882,25888,25900,25904,25912,25918],{"__ignoreMap":98},[102,25375,25376,25378],{"class":104,"line":105},[102,25377,314],{"class":108},[102,25379,317],{"class":278},[102,25381,25382,25384,25386,25388],{"class":104,"line":116},[102,25383,322],{"class":108},[102,25385,325],{"class":108},[102,25387,328],{"class":112},[102,25389,266],{"class":119},[102,25391,25392,25394],{"class":104,"line":123},[102,25393,314],{"class":108},[102,25395,2533],{"class":278},[102,25397,25398,25400],{"class":104,"line":130},[102,25399,109],{"class":108},[102,25401,2540],{"class":112},[102,25403,25404],{"class":104,"line":136},[102,25405,120],{"class":119},[102,25407,25408],{"class":104,"line":142},[102,25409,139],{"class":108},[102,25411,25412],{"class":104,"line":148},[102,25413,2553],{"class":126},[102,25415,25416,25418,25420,25422,25424,25426,25428,25430,25432,25434,25436,25438,25440],{"class":104,"line":157},[102,25417,374],{"class":108},[102,25419,2560],{"class":112},[102,25421,380],{"class":119},[102,25423,2565],{"class":108},[102,25425,2568],{"class":386},[102,25427,2571],{"class":119},[102,25429,2565],{"class":108},[102,25431,2576],{"class":386},[102,25433,2579],{"class":119},[102,25435,260],{"class":108},[102,25437,2584],{"class":119},[102,25439,260],{"class":108},[102,25441,2589],{"class":119},[102,25443,25444],{"class":104,"line":163},[102,25445,2594],{"class":126},[102,25447,25448,25450,25452,25454,25456],{"class":104,"line":175},[102,25449,166],{"class":108},[102,25451,2601],{"class":112},[102,25453,2604],{"class":119},[102,25455,2607],{"class":108},[102,25457,2610],{"class":119},[102,25459,25460,25462,25464,25466,25468],{"class":104,"line":181},[102,25461,166],{"class":108},[102,25463,2617],{"class":112},[102,25465,2604],{"class":119},[102,25467,2607],{"class":108},[102,25469,2624],{"class":119},[102,25471,25472],{"class":104,"line":202},[102,25473,652],{"emptyLinePlaceholder":651},[102,25475,25476],{"class":104,"line":208},[102,25477,710],{"class":108},[102,25479,25480,25482],{"class":104,"line":214},[102,25481,166],{"class":108},[102,25483,2639],{"class":119},[102,25485,25486,25488],{"class":104,"line":225},[102,25487,166],{"class":108},[102,25489,2646],{"class":119},[102,25491,25492],{"class":104,"line":230},[102,25493,211],{"class":119},[102,25495,25496,25498],{"class":104,"line":236},[102,25497,109],{"class":108},[102,25499,113],{"class":112},[102,25501,25502],{"class":104,"line":242},[102,25503,120],{"class":119},[102,25505,25506],{"class":104,"line":248},[102,25507,139],{"class":108},[102,25509,25510],{"class":104,"line":254},[102,25511,2553],{"class":126},[102,25513,25514,25516,25518,25520,25522,25524,25526,25528],{"class":104,"line":269},[102,25515,374],{"class":108},[102,25517,2675],{"class":112},[102,25519,380],{"class":119},[102,25521,2565],{"class":108},[102,25523,2682],{"class":386},[102,25525,2685],{"class":119},[102,25527,260],{"class":108},[102,25529,2690],{"class":119},[102,25531,25532,25534,25536,25538,25540,25542,25544,25546],{"class":104,"line":298},[102,25533,374],{"class":108},[102,25535,2697],{"class":112},[102,25537,380],{"class":119},[102,25539,2702],{"class":112},[102,25541,2705],{"class":386},[102,25543,2708],{"class":119},[102,25545,260],{"class":108},[102,25547,2713],{"class":119},[102,25549,25550],{"class":104,"line":502},[102,25551,2718],{"class":126},[102,25553,25554,25556,25558,25560,25562],{"class":104,"line":507},[102,25555,166],{"class":108},[102,25557,2725],{"class":112},[102,25559,2604],{"class":119},[102,25561,2607],{"class":108},[102,25563,2732],{"class":119},[102,25565,25566,25568,25570,25572,25574],{"class":104,"line":512},[102,25567,2737],{"class":112},[102,25569,2740],{"class":112},[102,25571,2604],{"class":119},[102,25573,2607],{"class":108},[102,25575,2747],{"class":119},[102,25577,25578],{"class":104,"line":521},[102,25579,652],{"emptyLinePlaceholder":651},[102,25581,25582],{"class":104,"line":526},[102,25583,710],{"class":108},[102,25585,25586,25588],{"class":104,"line":532},[102,25587,166],{"class":108},[102,25589,154],{"class":119},[102,25591,25592],{"class":104,"line":538},[102,25593,2766],{"class":126},[102,25595,25596],{"class":104,"line":555},[102,25597,2771],{"class":119},[102,25599,25600],{"class":104,"line":570},[102,25601,211],{"class":119},[102,25603,25604,25606,25608,25610,25612,25614,25616,25618,25620,25622,25624],{"class":104,"line":581},[102,25605,2780],{"class":108},[102,25607,2783],{"class":112},[102,25609,380],{"class":119},[102,25611,2788],{"class":112},[102,25613,2791],{"class":108},[102,25615,2794],{"class":386},[102,25617,1618],{"class":119},[102,25619,2702],{"class":112},[102,25621,2791],{"class":108},[102,25623,14],{"class":386},[102,25625,390],{"class":119},[102,25627,25628],{"class":104,"line":819},[102,25629,120],{"class":119},[102,25631,25632,25634,25636,25638,25640,25642,25644,25646,25648,25650,25652,25654],{"class":104,"line":828},[102,25633,166],{"class":108},[102,25635,2815],{"class":119},[102,25637,260],{"class":108},[102,25639,1885],{"class":119},[102,25641,2822],{"class":112},[102,25643,2825],{"class":119},[102,25645,2828],{"class":112},[102,25647,1417],{"class":119},[102,25649,2833],{"class":108},[102,25651,1411],{"class":119},[102,25653,2828],{"class":112},[102,25655,578],{"class":119},[102,25657,25658,25660,25662,25664,25666,25668,25670,25672,25674,25676,25678,25680],{"class":104,"line":837},[102,25659,166],{"class":108},[102,25661,2846],{"class":119},[102,25663,260],{"class":108},[102,25665,1885],{"class":119},[102,25667,2822],{"class":112},[102,25669,2825],{"class":119},[102,25671,2857],{"class":112},[102,25673,1417],{"class":119},[102,25675,2833],{"class":108},[102,25677,1411],{"class":119},[102,25679,2857],{"class":112},[102,25681,578],{"class":119},[102,25683,25684,25686,25688,25690,25692,25694,25696,25698,25700,25702,25704],{"class":104,"line":842},[102,25685,166],{"class":108},[102,25687,2874],{"class":119},[102,25689,260],{"class":108},[102,25691,2879],{"class":112},[102,25693,2882],{"class":119},[102,25695,191],{"class":108},[102,25697,2815],{"class":119},[102,25699,1702],{"class":108},[102,25701,2846],{"class":119},[102,25703,191],{"class":108},[102,25705,2895],{"class":119},[102,25707,25708,25710,25712,25714,25716,25718],{"class":104,"line":855},[102,25709,2343],{"class":108},[102,25711,2902],{"class":119},[102,25713,1208],{"class":108},[102,25715,1885],{"class":119},[102,25717,2909],{"class":112},[102,25719,2912],{"class":119},[102,25721,25722],{"class":104,"line":860},[102,25723,178],{"class":119},[102,25725,25726,25728,25730,25732,25734],{"class":104,"line":871},[102,25727,2921],{"class":119},[102,25729,275],{"class":108},[102,25731,2926],{"class":278},[102,25733,1237],{"class":108},[102,25735,1240],{"class":119},[102,25737,25738],{"class":104,"line":1359},[102,25739,205],{"class":119},[102,25741,25742],{"class":104,"line":1368},[102,25743,2381],{"class":108},[102,25745,25746],{"class":104,"line":1373},[102,25747,178],{"class":119},[102,25749,25750,25752,25754,25756,25758],{"class":104,"line":1378},[102,25751,2921],{"class":119},[102,25753,275],{"class":108},[102,25755,2951],{"class":278},[102,25757,1237],{"class":108},[102,25759,1240],{"class":119},[102,25761,25762],{"class":104,"line":1384},[102,25763,205],{"class":119},[102,25765,25766],{"class":104,"line":1398},[102,25767,301],{"class":119},[102,25769,25770,25772,25774],{"class":104,"line":1424},[102,25771,217],{"class":108},[102,25773,220],{"class":112},[102,25775,172],{"class":119},[102,25777,25778],{"class":104,"line":1429},[102,25779,120],{"class":119},[102,25781,25782],{"class":104,"line":1435},[102,25783,529],{"class":126},[102,25785,25786],{"class":104,"line":1450},[102,25787,245],{"class":119},[102,25789,25790],{"class":104,"line":1473},[102,25791,2988],{"class":119},[102,25793,25794],{"class":104,"line":1478},[102,25795,2553],{"class":126},[102,25797,25798,25800,25802,25804],{"class":104,"line":1484},[102,25799,272],{"class":119},[102,25801,275],{"class":108},[102,25803,3001],{"class":278},[102,25805,266],{"class":119},[102,25807,25808,25810],{"class":104,"line":1499},[102,25809,166],{"class":108},[102,25811,3010],{"class":119},[102,25813,25814,25816,25818],{"class":104,"line":1508},[102,25815,2131],{"class":119},[102,25817,2134],{"class":108},[102,25819,3019],{"class":119},[102,25821,25822,25824,25826],{"class":104,"line":1513},[102,25823,2152],{"class":119},[102,25825,3026],{"class":112},[102,25827,3029],{"class":119},[102,25829,25830,25832,25834,25836],{"class":104,"line":1524},[102,25831,272],{"class":119},[102,25833,275],{"class":108},[102,25835,3038],{"class":278},[102,25837,266],{"class":119},[102,25839,25840,25842],{"class":104,"line":1529},[102,25841,166],{"class":108},[102,25843,3047],{"class":119},[102,25845,25846,25848,25850,25852,25854],{"class":104,"line":1538},[102,25847,2131],{"class":119},[102,25849,2134],{"class":108},[102,25851,3056],{"class":119},[102,25853,2134],{"class":108},[102,25855,3061],{"class":119},[102,25857,25858,25860,25862],{"class":104,"line":2089},[102,25859,3066],{"class":119},[102,25861,3069],{"class":112},[102,25863,3072],{"class":119},[102,25865,25866,25868,25870],{"class":104,"line":2094},[102,25867,2152],{"class":119},[102,25869,3079],{"class":112},[102,25871,3082],{"class":119},[102,25873,25874,25876,25878,25880],{"class":104,"line":2100},[102,25875,272],{"class":119},[102,25877,275],{"class":108},[102,25879,3091],{"class":278},[102,25881,266],{"class":119},[102,25883,25884,25886],{"class":104,"line":2106},[102,25885,166],{"class":108},[102,25887,3100],{"class":119},[102,25889,25890,25892,25894,25896,25898],{"class":104,"line":2120},[102,25891,2131],{"class":119},[102,25893,2134],{"class":108},[102,25895,3109],{"class":119},[102,25897,2134],{"class":108},[102,25899,3114],{"class":119},[102,25901,25902],{"class":104,"line":2128},[102,25903,3119],{"class":119},[102,25905,25906,25908,25910],{"class":104,"line":2149},[102,25907,3124],{"class":119},[102,25909,3069],{"class":112},[102,25911,3129],{"class":119},[102,25913,25914,25916],{"class":104,"line":2161},[102,25915,3134],{"class":112},[102,25917,3137],{"class":119},[102,25919,25920],{"class":104,"line":2167},[102,25921,301],{"class":119},[14,25923,3144],{},[14,25925,3147],{},[14,25927,3150],{},[93,25929,25930],{"className":95,"code":3153,"language":97,"meta":98,"style":98},[83,25931,25932,25940,25946,25956,25962,25966,25970,25974,25978,25998,26002,26010,26018,26022,26026,26032,26038],{"__ignoreMap":98},[102,25933,25934,25936,25938],{"class":104,"line":105},[102,25935,3160],{"class":108},[102,25937,3163],{"class":112},[102,25939,3166],{"class":126},[102,25941,25942,25944],{"class":104,"line":116},[102,25943,314],{"class":108},[102,25945,317],{"class":278},[102,25947,25948,25950,25952,25954],{"class":104,"line":123},[102,25949,322],{"class":108},[102,25951,325],{"class":108},[102,25953,328],{"class":112},[102,25955,266],{"class":119},[102,25957,25958,25960],{"class":104,"line":130},[102,25959,109],{"class":108},[102,25961,2540],{"class":112},[102,25963,25964],{"class":104,"line":136},[102,25965,120],{"class":119},[102,25967,25968],{"class":104,"line":142},[102,25969,3197],{"class":126},[102,25971,25972],{"class":104,"line":148},[102,25973,139],{"class":108},[102,25975,25976],{"class":104,"line":157},[102,25977,2553],{"class":126},[102,25979,25980,25982,25984,25986,25988,25990,25992,25994,25996],{"class":104,"line":163},[102,25981,374],{"class":108},[102,25983,2560],{"class":112},[102,25985,380],{"class":119},[102,25987,2565],{"class":108},[102,25989,2568],{"class":386},[102,25991,2571],{"class":119},[102,25993,2565],{"class":108},[102,25995,2576],{"class":386},[102,25997,552],{"class":119},[102,25999,26000],{"class":104,"line":175},[102,26001,2594],{"class":126},[102,26003,26004,26006,26008],{"class":104,"line":181},[102,26005,166],{"class":108},[102,26007,2601],{"class":112},[102,26009,578],{"class":119},[102,26011,26012,26014,26016],{"class":104,"line":202},[102,26013,166],{"class":108},[102,26015,2617],{"class":112},[102,26017,578],{"class":119},[102,26019,26020],{"class":104,"line":208},[102,26021,652],{"emptyLinePlaceholder":651},[102,26023,26024],{"class":104,"line":214},[102,26025,710],{"class":108},[102,26027,26028,26030],{"class":104,"line":225},[102,26029,166],{"class":108},[102,26031,2639],{"class":119},[102,26033,26034,26036],{"class":104,"line":230},[102,26035,166],{"class":108},[102,26037,2646],{"class":119},[102,26039,26040],{"class":104,"line":236},[102,26041,211],{"class":119},[14,26043,3272],{},[93,26045,26046],{"className":95,"code":3275,"language":97,"meta":98,"style":98},[83,26047,26048,26054,26058,26090,26094,26110],{"__ignoreMap":98},[102,26049,26050,26052],{"class":104,"line":105},[102,26051,314],{"class":108},[102,26053,3284],{"class":278},[102,26055,26056],{"class":104,"line":116},[102,26057,3289],{"class":126},[102,26059,26060,26062,26064,26066,26068,26070,26072,26074,26076,26078,26080,26082,26084,26086,26088],{"class":104,"line":123},[102,26061,374],{"class":108},[102,26063,3296],{"class":112},[102,26065,3299],{"class":119},[102,26067,3069],{"class":112},[102,26069,380],{"class":119},[102,26071,2565],{"class":108},[102,26073,2568],{"class":386},[102,26075,2571],{"class":119},[102,26077,2565],{"class":108},[102,26079,2576],{"class":386},[102,26081,2579],{"class":119},[102,26083,260],{"class":108},[102,26085,2584],{"class":119},[102,26087,260],{"class":108},[102,26089,2589],{"class":119},[102,26091,26092],{"class":104,"line":130},[102,26093,2594],{"class":126},[102,26095,26096,26098,26100,26102,26104,26106,26108],{"class":104,"line":136},[102,26097,166],{"class":108},[102,26099,3296],{"class":112},[102,26101,3299],{"class":119},[102,26103,2828],{"class":112},[102,26105,2604],{"class":119},[102,26107,2607],{"class":108},[102,26109,2610],{"class":119},[102,26111,26112,26114,26116,26118,26120,26122,26124],{"class":104,"line":142},[102,26113,166],{"class":108},[102,26115,3296],{"class":112},[102,26117,3299],{"class":119},[102,26119,2857],{"class":112},[102,26121,2604],{"class":119},[102,26123,2607],{"class":108},[102,26125,2624],{"class":119},[14,26127,3362],{},[93,26129,26130],{"className":95,"code":3365,"language":97,"meta":98,"style":98},[83,26131,26132,26138,26144,26154,26160,26166,26170,26174,26178,26192,26206,26210,26218,26226,26230,26234,26240,26244,26248],{"__ignoreMap":98},[102,26133,26134,26136],{"class":104,"line":105},[102,26135,3160],{"class":108},[102,26137,3374],{"class":112},[102,26139,26140,26142],{"class":104,"line":116},[102,26141,314],{"class":108},[102,26143,317],{"class":278},[102,26145,26146,26148,26150,26152],{"class":104,"line":123},[102,26147,322],{"class":108},[102,26149,325],{"class":108},[102,26151,328],{"class":112},[102,26153,266],{"class":119},[102,26155,26156,26158],{"class":104,"line":130},[102,26157,314],{"class":108},[102,26159,3284],{"class":278},[102,26161,26162,26164],{"class":104,"line":136},[102,26163,109],{"class":108},[102,26165,113],{"class":112},[102,26167,26168],{"class":104,"line":142},[102,26169,120],{"class":119},[102,26171,26172],{"class":104,"line":148},[102,26173,139],{"class":108},[102,26175,26176],{"class":104,"line":157},[102,26177,2553],{"class":126},[102,26179,26180,26182,26184,26186,26188,26190],{"class":104,"line":163},[102,26181,374],{"class":108},[102,26183,2675],{"class":112},[102,26185,380],{"class":119},[102,26187,2565],{"class":108},[102,26189,2682],{"class":386},[102,26191,552],{"class":119},[102,26193,26194,26196,26198,26200,26202,26204],{"class":104,"line":175},[102,26195,374],{"class":108},[102,26197,2697],{"class":112},[102,26199,380],{"class":119},[102,26201,2702],{"class":112},[102,26203,2705],{"class":386},[102,26205,552],{"class":119},[102,26207,26208],{"class":104,"line":181},[102,26209,2718],{"class":126},[102,26211,26212,26214,26216],{"class":104,"line":202},[102,26213,166],{"class":108},[102,26215,2725],{"class":112},[102,26217,578],{"class":119},[102,26219,26220,26222,26224],{"class":104,"line":208},[102,26221,2737],{"class":112},[102,26223,2740],{"class":112},[102,26225,578],{"class":119},[102,26227,26228],{"class":104,"line":214},[102,26229,652],{"emptyLinePlaceholder":651},[102,26231,26232],{"class":104,"line":225},[102,26233,710],{"class":108},[102,26235,26236,26238],{"class":104,"line":230},[102,26237,166],{"class":108},[102,26239,154],{"class":119},[102,26241,26242],{"class":104,"line":236},[102,26243,2766],{"class":126},[102,26245,26246],{"class":104,"line":242},[102,26247,2771],{"class":119},[102,26249,26250],{"class":104,"line":248},[102,26251,211],{"class":119},[14,26253,3491],{},[93,26255,26256],{"className":95,"code":3494,"language":97,"meta":98,"style":98},[83,26257,26258,26264,26286,26308,26312,26328],{"__ignoreMap":98},[102,26259,26260,26262],{"class":104,"line":105},[102,26261,314],{"class":108},[102,26263,3503],{"class":278},[102,26265,26266,26268,26270,26272,26274,26276,26278,26280,26282,26284],{"class":104,"line":116},[102,26267,2780],{"class":108},[102,26269,3510],{"class":112},[102,26271,3299],{"class":119},[102,26273,3026],{"class":112},[102,26275,380],{"class":119},[102,26277,2565],{"class":108},[102,26279,2682],{"class":386},[102,26281,2685],{"class":119},[102,26283,260],{"class":108},[102,26285,2690],{"class":119},[102,26287,26288,26290,26292,26294,26296,26298,26300,26302,26304,26306],{"class":104,"line":123},[102,26289,2780],{"class":108},[102,26291,3510],{"class":112},[102,26293,3299],{"class":119},[102,26295,3079],{"class":112},[102,26297,380],{"class":119},[102,26299,2702],{"class":112},[102,26301,2705],{"class":386},[102,26303,2708],{"class":119},[102,26305,260],{"class":108},[102,26307,2713],{"class":119},[102,26309,26310],{"class":104,"line":130},[102,26311,3553],{"class":126},[102,26313,26314,26316,26318,26320,26322,26324,26326],{"class":104,"line":136},[102,26315,2565],{"class":108},[102,26317,3510],{"class":112},[102,26319,3299],{"class":119},[102,26321,2909],{"class":112},[102,26323,2604],{"class":119},[102,26325,2607],{"class":108},[102,26327,2732],{"class":119},[102,26329,26330,26332,26334,26336,26338,26340,26342],{"class":104,"line":142},[102,26331,2702],{"class":112},[102,26333,3510],{"class":112},[102,26335,3299],{"class":119},[102,26337,2822],{"class":112},[102,26339,2604],{"class":119},[102,26341,2607],{"class":108},[102,26343,2747],{"class":119},[14,26345,3588],{},[93,26347,26348],{"className":95,"code":3591,"language":97,"meta":98,"style":98},[83,26349,26350,26356,26366,26372,26378,26402,26406,26432,26458,26482,26496,26500,26512,26516,26520,26524,26536,26540,26544,26552,26556,26560,26564,26568,26572,26582,26588,26596,26604,26614,26620,26632,26640,26648,26658,26664,26676,26680,26688,26694],{"__ignoreMap":98},[102,26351,26352,26354],{"class":104,"line":105},[102,26353,314],{"class":108},[102,26355,317],{"class":278},[102,26357,26358,26360,26362,26364],{"class":104,"line":116},[102,26359,322],{"class":108},[102,26361,325],{"class":108},[102,26363,328],{"class":112},[102,26365,266],{"class":119},[102,26367,26368,26370],{"class":104,"line":123},[102,26369,314],{"class":108},[102,26371,3503],{"class":278},[102,26373,26374,26376],{"class":104,"line":130},[102,26375,314],{"class":108},[102,26377,3284],{"class":278},[102,26379,26380,26382,26384,26386,26388,26390,26392,26394,26396,26398,26400],{"class":104,"line":136},[102,26381,2780],{"class":108},[102,26383,2783],{"class":112},[102,26385,380],{"class":119},[102,26387,2788],{"class":112},[102,26389,2791],{"class":108},[102,26391,2794],{"class":386},[102,26393,1618],{"class":119},[102,26395,2702],{"class":112},[102,26397,2791],{"class":108},[102,26399,14],{"class":386},[102,26401,390],{"class":119},[102,26403,26404],{"class":104,"line":142},[102,26405,120],{"class":119},[102,26407,26408,26410,26412,26414,26416,26418,26420,26422,26424,26426,26428,26430],{"class":104,"line":148},[102,26409,166],{"class":108},[102,26411,2815],{"class":119},[102,26413,260],{"class":108},[102,26415,1885],{"class":119},[102,26417,2822],{"class":112},[102,26419,2825],{"class":119},[102,26421,2828],{"class":112},[102,26423,1417],{"class":119},[102,26425,2833],{"class":108},[102,26427,1411],{"class":119},[102,26429,2828],{"class":112},[102,26431,578],{"class":119},[102,26433,26434,26436,26438,26440,26442,26444,26446,26448,26450,26452,26454,26456],{"class":104,"line":157},[102,26435,166],{"class":108},[102,26437,2846],{"class":119},[102,26439,260],{"class":108},[102,26441,1885],{"class":119},[102,26443,2822],{"class":112},[102,26445,2825],{"class":119},[102,26447,2857],{"class":112},[102,26449,1417],{"class":119},[102,26451,2833],{"class":108},[102,26453,1411],{"class":119},[102,26455,2857],{"class":112},[102,26457,578],{"class":119},[102,26459,26460,26462,26464,26466,26468,26470,26472,26474,26476,26478,26480],{"class":104,"line":163},[102,26461,166],{"class":108},[102,26463,2874],{"class":119},[102,26465,260],{"class":108},[102,26467,2879],{"class":112},[102,26469,2882],{"class":119},[102,26471,191],{"class":108},[102,26473,2815],{"class":119},[102,26475,1702],{"class":108},[102,26477,2846],{"class":119},[102,26479,191],{"class":108},[102,26481,2895],{"class":119},[102,26483,26484,26486,26488,26490,26492,26494],{"class":104,"line":175},[102,26485,2343],{"class":108},[102,26487,2902],{"class":119},[102,26489,1208],{"class":108},[102,26491,1885],{"class":119},[102,26493,2909],{"class":112},[102,26495,2912],{"class":119},[102,26497,26498],{"class":104,"line":181},[102,26499,178],{"class":119},[102,26501,26502,26504,26506,26508,26510],{"class":104,"line":202},[102,26503,2921],{"class":119},[102,26505,275],{"class":108},[102,26507,2926],{"class":278},[102,26509,1237],{"class":108},[102,26511,1240],{"class":119},[102,26513,26514],{"class":104,"line":208},[102,26515,205],{"class":119},[102,26517,26518],{"class":104,"line":214},[102,26519,2381],{"class":108},[102,26521,26522],{"class":104,"line":225},[102,26523,178],{"class":119},[102,26525,26526,26528,26530,26532,26534],{"class":104,"line":230},[102,26527,2921],{"class":119},[102,26529,275],{"class":108},[102,26531,2951],{"class":278},[102,26533,1237],{"class":108},[102,26535,1240],{"class":119},[102,26537,26538],{"class":104,"line":236},[102,26539,205],{"class":119},[102,26541,26542],{"class":104,"line":242},[102,26543,301],{"class":119},[102,26545,26546,26548,26550],{"class":104,"line":248},[102,26547,217],{"class":108},[102,26549,220],{"class":112},[102,26551,172],{"class":119},[102,26553,26554],{"class":104,"line":254},[102,26555,120],{"class":119},[102,26557,26558],{"class":104,"line":269},[102,26559,529],{"class":126},[102,26561,26562],{"class":104,"line":298},[102,26563,245],{"class":119},[102,26565,26566],{"class":104,"line":502},[102,26567,2988],{"class":119},[102,26569,26570],{"class":104,"line":507},[102,26571,2553],{"class":126},[102,26573,26574,26576,26578,26580],{"class":104,"line":512},[102,26575,272],{"class":119},[102,26577,275],{"class":108},[102,26579,3001],{"class":278},[102,26581,266],{"class":119},[102,26583,26584,26586],{"class":104,"line":521},[102,26585,166],{"class":108},[102,26587,3010],{"class":119},[102,26589,26590,26592,26594],{"class":104,"line":526},[102,26591,2131],{"class":119},[102,26593,2134],{"class":108},[102,26595,3019],{"class":119},[102,26597,26598,26600,26602],{"class":104,"line":532},[102,26599,2152],{"class":119},[102,26601,3026],{"class":112},[102,26603,3029],{"class":119},[102,26605,26606,26608,26610,26612],{"class":104,"line":538},[102,26607,272],{"class":119},[102,26609,275],{"class":108},[102,26611,3038],{"class":278},[102,26613,266],{"class":119},[102,26615,26616,26618],{"class":104,"line":555},[102,26617,166],{"class":108},[102,26619,3047],{"class":119},[102,26621,26622,26624,26626,26628,26630],{"class":104,"line":570},[102,26623,2131],{"class":119},[102,26625,2134],{"class":108},[102,26627,3056],{"class":119},[102,26629,2134],{"class":108},[102,26631,3061],{"class":119},[102,26633,26634,26636,26638],{"class":104,"line":581},[102,26635,3066],{"class":119},[102,26637,3069],{"class":112},[102,26639,3072],{"class":119},[102,26641,26642,26644,26646],{"class":104,"line":819},[102,26643,2152],{"class":119},[102,26645,3079],{"class":112},[102,26647,3082],{"class":119},[102,26649,26650,26652,26654,26656],{"class":104,"line":828},[102,26651,272],{"class":119},[102,26653,275],{"class":108},[102,26655,3091],{"class":278},[102,26657,266],{"class":119},[102,26659,26660,26662],{"class":104,"line":837},[102,26661,166],{"class":108},[102,26663,3100],{"class":119},[102,26665,26666,26668,26670,26672,26674],{"class":104,"line":842},[102,26667,2131],{"class":119},[102,26669,2134],{"class":108},[102,26671,3109],{"class":119},[102,26673,2134],{"class":108},[102,26675,3114],{"class":119},[102,26677,26678],{"class":104,"line":855},[102,26679,3119],{"class":119},[102,26681,26682,26684,26686],{"class":104,"line":860},[102,26683,3124],{"class":119},[102,26685,3069],{"class":112},[102,26687,3129],{"class":119},[102,26689,26690,26692],{"class":104,"line":871},[102,26691,3134],{"class":112},[102,26693,3137],{"class":119},[102,26695,26696],{"class":104,"line":1359},[102,26697,301],{"class":119},[43,26699,3945],{"id":3944},[59,26701,26702,26704],{},[62,26703,3950],{},[62,26705,3953],{},[48,26707,3957],{"id":3956},[14,26709,3960,26710,3964],{},[18,26711,3963],{},[14,26713,3967],{},[14,26715,3970],{},[14,26717,3973,26718,3977,26720,3981],{},[18,26719,3976],{},[18,26721,3980],{},[14,26723,3984,26724],{},[18,26725,3987],{},[14,26727,26728],{},[18,26729,3992],{},[59,26731,26732,26734],{},[62,26733,3997],{},[62,26735,4000,26736,4004],{},[18,26737,4003],{},[14,26739,26740,26742],{},[18,26741,4009],{},[83,26743,4012],{},[87,26745,26746,26748,26750,26752,26754],{},[62,26747,4017],{},[62,26749,4020],{},[62,26751,4023],{},[62,26753,4026],{},[62,26755,4029,26756,4033],{},[83,26757,4032],{},[14,26759,26760,81,26762],{},[18,26761,4038],{},[83,26763,4041],{},[87,26765,26766,26768,26770,26774],{},[62,26767,4046],{},[62,26769,4049],{},[62,26771,4052,26772],{},[18,26773,4055],{},[62,26775,4058],{},[93,26777,26778],{"className":95,"code":4061,"language":97,"meta":98,"style":98},[83,26779,26780,26786,26790,26794,26798,26804,26808,26820,26824,26828,26834,26838,26850,26854,26858,26862,26866,26874,26878,26884,26888,26892,26900,26904,26908,26912,26918,26922,26934,26938,26946],{"__ignoreMap":98},[102,26781,26782,26784],{"class":104,"line":105},[102,26783,109],{"class":108},[102,26785,659],{"class":112},[102,26787,26788],{"class":104,"line":116},[102,26789,120],{"class":119},[102,26791,26792],{"class":104,"line":123},[102,26793,139],{"class":108},[102,26795,26796],{"class":104,"line":130},[102,26797,4082],{"class":126},[102,26799,26800,26802],{"class":104,"line":136},[102,26801,4087],{"class":112},[102,26803,172],{"class":119},[102,26805,26806],{"class":104,"line":142},[102,26807,178],{"class":119},[102,26809,26810,26812,26814,26816,26818],{"class":104,"line":148},[102,26811,2921],{"class":119},[102,26813,275],{"class":108},[102,26815,4102],{"class":278},[102,26817,1237],{"class":108},[102,26819,1240],{"class":119},[102,26821,26822],{"class":104,"line":157},[102,26823,205],{"class":119},[102,26825,26826],{"class":104,"line":163},[102,26827,4115],{"class":126},[102,26829,26830,26832],{"class":104,"line":175},[102,26831,4120],{"class":112},[102,26833,172],{"class":119},[102,26835,26836],{"class":104,"line":181},[102,26837,178],{"class":119},[102,26839,26840,26842,26844,26846,26848],{"class":104,"line":202},[102,26841,2921],{"class":119},[102,26843,275],{"class":108},[102,26845,4135],{"class":278},[102,26847,1237],{"class":108},[102,26849,1240],{"class":119},[102,26851,26852],{"class":104,"line":208},[102,26853,205],{"class":119},[102,26855,26856],{"class":104,"line":214},[102,26857,652],{"emptyLinePlaceholder":651},[102,26859,26860],{"class":104,"line":225},[102,26861,211],{"class":119},[102,26863,26864],{"class":104,"line":230},[102,26865,652],{"emptyLinePlaceholder":651},[102,26867,26868,26870,26872],{"class":104,"line":236},[102,26869,2780],{"class":108},[102,26871,4162],{"class":112},[102,26873,172],{"class":119},[102,26875,26876],{"class":104,"line":242},[102,26877,120],{"class":119},[102,26879,26880,26882],{"class":104,"line":248},[102,26881,4173],{"class":119},[102,26883,4176],{"class":126},[102,26885,26886],{"class":104,"line":254},[102,26887,301],{"class":119},[102,26889,26890],{"class":104,"line":269},[102,26891,652],{"emptyLinePlaceholder":651},[102,26893,26894,26896,26898],{"class":104,"line":298},[102,26895,217],{"class":108},[102,26897,220],{"class":112},[102,26899,795],{"class":119},[102,26901,26902],{"class":104,"line":502},[102,26903,1326],{"class":119},[102,26905,26906],{"class":104,"line":507},[102,26907,4201],{"class":126},[102,26909,26910],{"class":104,"line":512},[102,26911,652],{"emptyLinePlaceholder":651},[102,26913,26914,26916],{"class":104,"line":521},[102,26915,4173],{"class":119},[102,26917,4212],{"class":126},[102,26919,26920],{"class":104,"line":526},[102,26921,652],{"emptyLinePlaceholder":651},[102,26923,26924,26926,26928,26930,26932],{"class":104,"line":532},[102,26925,845],{"class":112},[102,26927,380],{"class":119},[102,26929,850],{"class":278},[102,26931,4227],{"class":119},[102,26933,4230],{"class":126},[102,26935,26936],{"class":104,"line":538},[102,26937,652],{"emptyLinePlaceholder":651},[102,26939,26940,26942,26944],{"class":104,"line":555},[102,26941,863],{"class":108},[102,26943,866],{"class":187},[102,26945,266],{"class":119},[102,26947,26948],{"class":104,"line":570},[102,26949,301],{"class":119},[14,26951,4249],{},[48,26953,4253],{"id":4252},[14,26955,4256],{},[14,26957,4259],{},[14,26959,4262],{},[14,26961,4265],{},[14,26963,4268],{},[14,26965,4271],{},[14,26967,4274],{},[93,26969,26970],{"className":95,"code":4277,"language":97,"meta":98,"style":98},[83,26971,26972,26978,26988,26992,26996,27000,27004,27008,27016,27020,27024,27028,27034,27038,27050,27054,27066,27070,27078,27090,27094,27098,27104,27108,27120,27124,27128,27144,27148,27152,27160,27172,27176,27182,27186,27190,27198,27202,27206,27210,27218,27222,27226,27230,27234,27238,27242,27246,27250,27254,27258,27262,27266,27270,27274,27288,27298,27302,27306,27310,27314,27318,27322,27326,27338,27348,27352,27360,27364,27370,27376,27384],{"__ignoreMap":98},[102,26973,26974,26976],{"class":104,"line":105},[102,26975,314],{"class":108},[102,26977,317],{"class":278},[102,26979,26980,26982,26984,26986],{"class":104,"line":116},[102,26981,322],{"class":108},[102,26983,325],{"class":108},[102,26985,328],{"class":112},[102,26987,266],{"class":119},[102,26989,26990],{"class":104,"line":123},[102,26991,4300],{"class":126},[102,26993,26994],{"class":104,"line":130},[102,26995,4305],{"class":126},[102,26997,26998],{"class":104,"line":136},[102,26999,4310],{"class":126},[102,27001,27002],{"class":104,"line":142},[102,27003,4315],{"class":126},[102,27005,27006],{"class":104,"line":148},[102,27007,652],{"emptyLinePlaceholder":651},[102,27009,27010,27012,27014],{"class":104,"line":157},[102,27011,109],{"class":108},[102,27013,1074],{"class":112},[102,27015,4328],{"class":119},[102,27017,27018],{"class":104,"line":163},[102,27019,120],{"class":119},[102,27021,27022],{"class":104,"line":175},[102,27023,139],{"class":108},[102,27025,27026],{"class":104,"line":181},[102,27027,4082],{"class":126},[102,27029,27030,27032],{"class":104,"line":202},[102,27031,4087],{"class":112},[102,27033,172],{"class":119},[102,27035,27036],{"class":104,"line":208},[102,27037,178],{"class":119},[102,27039,27040,27042,27044,27046,27048],{"class":104,"line":214},[102,27041,470],{"class":119},[102,27043,275],{"class":108},[102,27045,4359],{"class":278},[102,27047,275],{"class":108},[102,27049,295],{"class":119},[102,27051,27052],{"class":104,"line":225},[102,27053,205],{"class":119},[102,27055,27056,27058,27060,27062,27064],{"class":104,"line":230},[102,27057,4087],{"class":112},[102,27059,380],{"class":119},[102,27061,217],{"class":108},[102,27063,4378],{"class":386},[102,27065,390],{"class":119},[102,27067,27068],{"class":104,"line":236},[102,27069,178],{"class":119},[102,27071,27072,27074,27076],{"class":104,"line":242},[102,27073,4389],{"class":119},[102,27075,260],{"class":108},[102,27077,4394],{"class":119},[102,27079,27080,27082,27084,27086,27088],{"class":104,"line":248},[102,27081,470],{"class":119},[102,27083,275],{"class":108},[102,27085,4403],{"class":278},[102,27087,275],{"class":108},[102,27089,295],{"class":119},[102,27091,27092],{"class":104,"line":254},[102,27093,205],{"class":119},[102,27095,27096],{"class":104,"line":269},[102,27097,4115],{"class":126},[102,27099,27100,27102],{"class":104,"line":298},[102,27101,4120],{"class":112},[102,27103,172],{"class":119},[102,27105,27106],{"class":104,"line":502},[102,27107,178],{"class":119},[102,27109,27110,27112,27114,27116,27118],{"class":104,"line":507},[102,27111,470],{"class":119},[102,27113,275],{"class":108},[102,27115,4434],{"class":278},[102,27117,275],{"class":108},[102,27119,295],{"class":119},[102,27121,27122],{"class":104,"line":512},[102,27123,205],{"class":119},[102,27125,27126],{"class":104,"line":521},[102,27127,4447],{"class":126},[102,27129,27130,27132,27134,27136,27138,27140,27142],{"class":104,"line":526},[102,27131,4087],{"class":112},[102,27133,380],{"class":119},[102,27135,4456],{"class":108},[102,27137,1074],{"class":112},[102,27139,2791],{"class":108},[102,27141,14],{"class":386},[102,27143,390],{"class":119},[102,27145,27146],{"class":104,"line":532},[102,27147,178],{"class":119},[102,27149,27150],{"class":104,"line":538},[102,27151,4473],{"class":126},[102,27153,27154,27156,27158],{"class":104,"line":555},[102,27155,4389],{"class":119},[102,27157,260],{"class":108},[102,27159,4482],{"class":119},[102,27161,27162,27164,27166,27168,27170],{"class":104,"line":570},[102,27163,470],{"class":119},[102,27165,275],{"class":108},[102,27167,4491],{"class":278},[102,27169,275],{"class":108},[102,27171,295],{"class":119},[102,27173,27174],{"class":104,"line":581},[102,27175,205],{"class":119},[102,27177,27178,27180],{"class":104,"line":819},[102,27179,151],{"class":108},[102,27181,1262],{"class":119},[102,27183,27184],{"class":104,"line":828},[102,27185,211],{"class":119},[102,27187,27188],{"class":104,"line":837},[102,27189,4514],{"class":126},[102,27191,27192,27194,27196],{"class":104,"line":842},[102,27193,2780],{"class":108},[102,27195,4162],{"class":112},[102,27197,172],{"class":119},[102,27199,27200],{"class":104,"line":855},[102,27201,120],{"class":119},[102,27203,27204],{"class":104,"line":860},[102,27205,4531],{"class":126},[102,27207,27208],{"class":104,"line":871},[102,27209,301],{"class":119},[102,27211,27212,27214,27216],{"class":104,"line":1359},[102,27213,2780],{"class":108},[102,27215,4542],{"class":112},[102,27217,172],{"class":119},[102,27219,27220],{"class":104,"line":1368},[102,27221,120],{"class":119},[102,27223,27224],{"class":104,"line":1373},[102,27225,4553],{"class":126},[102,27227,27228],{"class":104,"line":1378},[102,27229,4558],{"class":126},[102,27231,27232],{"class":104,"line":1384},[102,27233,4563],{"class":126},[102,27235,27236],{"class":104,"line":1398},[102,27237,4568],{"class":126},[102,27239,27240],{"class":104,"line":1424},[102,27241,4573],{"class":126},[102,27243,27244],{"class":104,"line":1429},[102,27245,652],{"emptyLinePlaceholder":651},[102,27247,27248],{"class":104,"line":1435},[102,27249,4582],{"class":126},[102,27251,27252],{"class":104,"line":1450},[102,27253,4587],{"class":126},[102,27255,27256],{"class":104,"line":1473},[102,27257,4592],{"class":126},[102,27259,27260],{"class":104,"line":1478},[102,27261,4597],{"class":126},[102,27263,27264],{"class":104,"line":1484},[102,27265,652],{"emptyLinePlaceholder":651},[102,27267,27268],{"class":104,"line":1499},[102,27269,4606],{"class":126},[102,27271,27272],{"class":104,"line":1508},[102,27273,4611],{"class":119},[102,27275,27276,27278,27280,27282,27284,27286],{"class":104,"line":1513},[102,27277,4616],{"class":119},[102,27279,260],{"class":108},[102,27281,4621],{"class":112},[102,27283,380],{"class":119},[102,27285,263],{"class":187},[102,27287,552],{"class":119},[102,27289,27290,27292,27294,27296],{"class":104,"line":1524},[102,27291,4632],{"class":119},[102,27293,260],{"class":108},[102,27295,4621],{"class":112},[102,27297,4639],{"class":119},[102,27299,27300],{"class":104,"line":1529},[102,27301,4644],{"class":126},[102,27303,27304],{"class":104,"line":1538},[102,27305,652],{"emptyLinePlaceholder":651},[102,27307,27308],{"class":104,"line":2089},[102,27309,4653],{"class":126},[102,27311,27312],{"class":104,"line":2094},[102,27313,4658],{"class":126},[102,27315,27316],{"class":104,"line":2100},[102,27317,4663],{"class":126},[102,27319,27320],{"class":104,"line":2106},[102,27321,652],{"emptyLinePlaceholder":651},[102,27323,27324],{"class":104,"line":2120},[102,27325,4672],{"class":126},[102,27327,27328,27330,27332,27334,27336],{"class":104,"line":2128},[102,27329,4677],{"class":119},[102,27331,260],{"class":108},[102,27333,263],{"class":187},[102,27335,992],{"class":119},[102,27337,4686],{"class":126},[102,27339,27340,27342,27344,27346],{"class":104,"line":2149},[102,27341,4691],{"class":119},[102,27343,260],{"class":108},[102,27345,4696],{"class":119},[102,27347,4699],{"class":126},[102,27349,27350],{"class":104,"line":2161},[102,27351,301],{"class":119},[102,27353,27354,27356,27358],{"class":104,"line":2167},[102,27355,217],{"class":108},[102,27357,220],{"class":112},[102,27359,172],{"class":119},[102,27361,27362],{"class":104,"line":2190},[102,27363,120],{"class":119},[102,27365,27366,27368],{"class":104,"line":2196},[102,27367,4720],{"class":112},[102,27369,578],{"class":119},[102,27371,27372,27374],{"class":104,"line":2219},[102,27373,4727],{"class":112},[102,27375,578],{"class":119},[102,27377,27378,27380,27382],{"class":104,"line":2233},[102,27379,863],{"class":108},[102,27381,866],{"class":187},[102,27383,266],{"class":119},[102,27385,27386],{"class":104,"line":2253},[102,27387,301],{"class":119},[14,27389,27390,4747],{},[18,27391,4746],{},[48,27393,4751],{"id":4750},[14,27395,4754],{},[59,27397,27398,27400,27402],{},[62,27399,4759],{},[62,27401,4762],{},[62,27403,4765],{},[93,27405,27406],{"className":95,"code":4768,"language":97,"meta":98,"style":98},[83,27407,27408,27414,27424,27428,27432,27436,27440,27444,27448,27454,27458,27462,27468,27472,27484,27488,27492,27504,27508,27516,27528,27532,27536,27552,27556,27564,27576,27580,27586,27590,27602,27606,27612,27616,27620,27628,27632,27644,27652,27668,27672,27676,27680,27694,27698,27710,27714,27722,27726,27730,27736,27740,27744,27752,27756,27760,27784,27792,27796,27804,27808,27818,27842,27846,27850,27854,27862,27866,27870,27874,27880,27884,27888,27892,27896,27900,27904,27908,27912,27916,27920,27924,27928,27932,27936,27940,27948],{"__ignoreMap":98},[102,27409,27410,27412],{"class":104,"line":105},[102,27411,314],{"class":108},[102,27413,317],{"class":278},[102,27415,27416,27418,27420,27422],{"class":104,"line":116},[102,27417,322],{"class":108},[102,27419,325],{"class":108},[102,27421,328],{"class":112},[102,27423,266],{"class":119},[102,27425,27426],{"class":104,"line":123},[102,27427,652],{"emptyLinePlaceholder":651},[102,27429,27430],{"class":104,"line":130},[102,27431,4795],{"class":126},[102,27433,27434],{"class":104,"line":136},[102,27435,652],{"emptyLinePlaceholder":651},[102,27437,27438],{"class":104,"line":142},[102,27439,4804],{"class":126},[102,27441,27442],{"class":104,"line":148},[102,27443,4809],{"class":126},[102,27445,27446],{"class":104,"line":157},[102,27447,4814],{"class":126},[102,27449,27450,27452],{"class":104,"line":163},[102,27451,109],{"class":108},[102,27453,659],{"class":112},[102,27455,27456],{"class":104,"line":175},[102,27457,120],{"class":119},[102,27459,27460],{"class":104,"line":181},[102,27461,139],{"class":108},[102,27463,27464,27466],{"class":104,"line":202},[102,27465,4087],{"class":112},[102,27467,172],{"class":119},[102,27469,27470],{"class":104,"line":208},[102,27471,178],{"class":119},[102,27473,27474,27476,27478,27480,27482],{"class":104,"line":214},[102,27475,2921],{"class":119},[102,27477,275],{"class":108},[102,27479,4847],{"class":278},[102,27481,1237],{"class":108},[102,27483,1240],{"class":119},[102,27485,27486],{"class":104,"line":225},[102,27487,205],{"class":119},[102,27489,27490],{"class":104,"line":230},[102,27491,4860],{"class":126},[102,27493,27494,27496,27498,27500,27502],{"class":104,"line":236},[102,27495,4087],{"class":112},[102,27497,380],{"class":119},[102,27499,217],{"class":108},[102,27501,1195],{"class":386},[102,27503,390],{"class":119},[102,27505,27506],{"class":104,"line":242},[102,27507,178],{"class":119},[102,27509,27510,27512,27514],{"class":104,"line":248},[102,27511,1257],{"class":119},[102,27513,260],{"class":108},[102,27515,1262],{"class":119},[102,27517,27518,27520,27522,27524,27526],{"class":104,"line":254},[102,27519,2921],{"class":119},[102,27521,275],{"class":108},[102,27523,4893],{"class":278},[102,27525,1237],{"class":108},[102,27527,1240],{"class":119},[102,27529,27530],{"class":104,"line":269},[102,27531,205],{"class":119},[102,27533,27534],{"class":104,"line":298},[102,27535,4447],{"class":126},[102,27537,27538,27540,27542,27544,27546,27548,27550],{"class":104,"line":502},[102,27539,4087],{"class":112},[102,27541,380],{"class":119},[102,27543,4456],{"class":108},[102,27545,1074],{"class":112},[102,27547,2791],{"class":108},[102,27549,14],{"class":386},[102,27551,390],{"class":119},[102,27553,27554],{"class":104,"line":507},[102,27555,178],{"class":119},[102,27557,27558,27560,27562],{"class":104,"line":512},[102,27559,1257],{"class":119},[102,27561,260],{"class":108},[102,27563,4934],{"class":119},[102,27565,27566,27568,27570,27572,27574],{"class":104,"line":521},[102,27567,2921],{"class":119},[102,27569,275],{"class":108},[102,27571,4943],{"class":278},[102,27573,1237],{"class":108},[102,27575,1240],{"class":119},[102,27577,27578],{"class":104,"line":526},[102,27579,205],{"class":119},[102,27581,27582,27584],{"class":104,"line":532},[102,27583,4120],{"class":112},[102,27585,172],{"class":119},[102,27587,27588],{"class":104,"line":538},[102,27589,178],{"class":119},[102,27591,27592,27594,27596,27598,27600],{"class":104,"line":555},[102,27593,2921],{"class":119},[102,27595,275],{"class":108},[102,27597,4135],{"class":278},[102,27599,1237],{"class":108},[102,27601,1240],{"class":119},[102,27603,27604],{"class":104,"line":570},[102,27605,205],{"class":119},[102,27607,27608,27610],{"class":104,"line":581},[102,27609,151],{"class":108},[102,27611,1172],{"class":119},[102,27613,27614],{"class":104,"line":819},[102,27615,211],{"class":119},[102,27617,27618],{"class":104,"line":828},[102,27619,4804],{"class":126},[102,27621,27622,27624,27626],{"class":104,"line":837},[102,27623,2780],{"class":108},[102,27625,4162],{"class":112},[102,27627,172],{"class":119},[102,27629,27630],{"class":104,"line":842},[102,27631,120],{"class":119},[102,27633,27634,27636,27638,27640,27642],{"class":104,"line":855},[102,27635,5008],{"class":119},[102,27637,5011],{"class":112},[102,27639,380],{"class":119},[102,27641,5016],{"class":187},[102,27643,552],{"class":119},[102,27645,27646,27648,27650],{"class":104,"line":860},[102,27647,5008],{"class":119},[102,27649,5025],{"class":112},[102,27651,3082],{"class":119},[102,27653,27654,27656,27658,27660,27662,27664,27666],{"class":104,"line":871},[102,27655,272],{"class":119},[102,27657,275],{"class":108},[102,27659,5036],{"class":278},[102,27661,275],{"class":108},[102,27663,5041],{"class":119},[102,27665,275],{"class":108},[102,27667,295],{"class":119},[102,27669,27670],{"class":104,"line":1359},[102,27671,301],{"class":119},[102,27673,27674],{"class":104,"line":1368},[102,27675,5054],{"class":126},[102,27677,27678],{"class":104,"line":1373},[102,27679,5059],{"class":126},[102,27681,27682,27684,27686,27688,27690,27692],{"class":104,"line":1378},[102,27683,2780],{"class":108},[102,27685,5066],{"class":112},[102,27687,380],{"class":119},[102,27689,4621],{"class":112},[102,27691,5073],{"class":386},[102,27693,390],{"class":119},[102,27695,27696],{"class":104,"line":1384},[102,27697,120],{"class":119},[102,27699,27700,27702,27704,27706,27708],{"class":104,"line":1398},[102,27701,1401],{"class":119},[102,27703,275],{"class":108},[102,27705,5088],{"class":278},[102,27707,1237],{"class":108},[102,27709,1240],{"class":119},[102,27711,27712],{"class":104,"line":1424},[102,27713,301],{"class":119},[102,27715,27716,27718,27720],{"class":104,"line":1429},[102,27717,2780],{"class":108},[102,27719,4542],{"class":112},[102,27721,172],{"class":119},[102,27723,27724],{"class":104,"line":1435},[102,27725,120],{"class":119},[102,27727,27728],{"class":104,"line":1450},[102,27729,804],{"class":119},[102,27731,27732,27734],{"class":104,"line":1473},[102,27733,5117],{"class":112},[102,27735,5120],{"class":119},[102,27737,27738],{"class":104,"line":1478},[102,27739,301],{"class":119},[102,27741,27742],{"class":104,"line":1484},[102,27743,5129],{"class":126},[102,27745,27746,27748,27750],{"class":104,"line":1499},[102,27747,4621],{"class":112},[102,27749,5136],{"class":112},[102,27751,172],{"class":119},[102,27753,27754],{"class":104,"line":1508},[102,27755,120],{"class":119},[102,27757,27758],{"class":104,"line":1513},[102,27759,4611],{"class":119},[102,27761,27762,27764,27766,27768,27770,27772,27774,27776,27778,27780,27782],{"class":104,"line":1524},[102,27763,272],{"class":119},[102,27765,275],{"class":108},[102,27767,380],{"class":119},[102,27769,217],{"class":108},[102,27771,5159],{"class":108},[102,27773,4033],{"class":119},[102,27775,5164],{"class":108},[102,27777,5011],{"class":119},[102,27779,275],{"class":108},[102,27781,5171],{"class":119},[102,27783,5174],{"class":126},[102,27785,27786,27788,27790],{"class":104,"line":1529},[102,27787,863],{"class":108},[102,27789,5181],{"class":119},[102,27791,5184],{"class":126},[102,27793,27794],{"class":104,"line":1538},[102,27795,301],{"class":119},[102,27797,27798,27800,27802],{"class":104,"line":2089},[102,27799,2780],{"class":108},[102,27801,5195],{"class":112},[102,27803,172],{"class":119},[102,27805,27806],{"class":104,"line":2094},[102,27807,120],{"class":119},[102,27809,27810,27812,27814,27816],{"class":104,"line":2100},[102,27811,5206],{"class":119},[102,27813,260],{"class":108},[102,27815,5136],{"class":112},[102,27817,578],{"class":119},[102,27819,27820,27822,27824,27826,27828,27830,27832,27834,27836,27838,27840],{"class":104,"line":2106},[102,27821,272],{"class":119},[102,27823,275],{"class":108},[102,27825,380],{"class":119},[102,27827,217],{"class":108},[102,27829,5159],{"class":108},[102,27831,4033],{"class":119},[102,27833,5164],{"class":108},[102,27835,14],{"class":119},[102,27837,275],{"class":108},[102,27839,5171],{"class":119},[102,27841,5237],{"class":126},[102,27843,27844],{"class":104,"line":2120},[102,27845,301],{"class":119},[102,27847,27848],{"class":104,"line":2128},[102,27849,652],{"emptyLinePlaceholder":651},[102,27851,27852],{"class":104,"line":2149},[102,27853,652],{"emptyLinePlaceholder":651},[102,27855,27856,27858,27860],{"class":104,"line":2161},[102,27857,217],{"class":108},[102,27859,220],{"class":112},[102,27861,172],{"class":119},[102,27863,27864],{"class":104,"line":2167},[102,27865,120],{"class":119},[102,27867,27868],{"class":104,"line":2190},[102,27869,5266],{"class":126},[102,27871,27872],{"class":104,"line":2196},[102,27873,5271],{"class":126},[102,27875,27876,27878],{"class":104,"line":2219},[102,27877,5276],{"class":112},[102,27879,578],{"class":119},[102,27881,27882],{"class":104,"line":2233},[102,27883,5283],{"class":126},[102,27885,27886],{"class":104,"line":2253},[102,27887,5288],{"class":126},[102,27889,27890],{"class":104,"line":2259},[102,27891,5293],{"class":126},[102,27893,27894],{"class":104,"line":2270},[102,27895,5298],{"class":126},[102,27897,27898],{"class":104,"line":2293},[102,27899,5298],{"class":126},[102,27901,27902],{"class":104,"line":2315},[102,27903,5307],{"class":126},[102,27905,27906],{"class":104,"line":2320},[102,27907,652],{"emptyLinePlaceholder":651},[102,27909,27910],{"class":104,"line":2326},[102,27911,5316],{"class":126},[102,27913,27914],{"class":104,"line":2340},[102,27915,5293],{"class":126},[102,27917,27918],{"class":104,"line":2354},[102,27919,5325],{"class":126},[102,27921,27922],{"class":104,"line":2359},[102,27923,5330],{"class":126},[102,27925,27926],{"class":104,"line":2373},[102,27927,5307],{"class":126},[102,27929,27930],{"class":104,"line":2378},[102,27931,5325],{"class":126},[102,27933,27934],{"class":104,"line":2384},[102,27935,5343],{"class":126},[102,27937,27938],{"class":104,"line":2389},[102,27939,5348],{"class":126},[102,27941,27942,27944,27946],{"class":104,"line":2403},[102,27943,863],{"class":108},[102,27945,866],{"class":187},[102,27947,266],{"class":119},[102,27949,27950],{"class":104,"line":2408},[102,27951,301],{"class":119},[14,27953,5363],{},[93,27955,27956],{"className":95,"code":5366,"language":97,"meta":98,"style":98},[83,27957,27958,27966,27970,27976,27988,27998,28002,28014,28026,28034,28038,28054,28066,28074,28078,28082,28088,28100,28104,28108,28114,28118,28122,28126,28134,28138,28152,28162,28172,28176,28180,28186,28190,28194,28198,28202,28216,28224,28230,28236,28240,28244,28248,28256,28260,28264,28286,28292,28296,28300,28308,28312,28322,28344,28348,28352,28356,28364,28368,28372,28376,28382,28386,28396,28400,28408],{"__ignoreMap":98},[102,27959,27960,27962,27964],{"class":104,"line":105},[102,27961,109],{"class":108},[102,27963,1074],{"class":112},[102,27965,1077],{"class":119},[102,27967,27968],{"class":104,"line":116},[102,27969,139],{"class":108},[102,27971,27972,27974],{"class":104,"line":123},[102,27973,4087],{"class":112},[102,27975,795],{"class":119},[102,27977,27978,27980,27982,27984,27986],{"class":104,"line":130},[102,27979,2921],{"class":119},[102,27981,275],{"class":108},[102,27983,5395],{"class":278},[102,27985,1237],{"class":108},[102,27987,1240],{"class":119},[102,27989,27990,27992,27994,27996],{"class":104,"line":136},[102,27991,5404],{"class":119},[102,27993,260],{"class":108},[102,27995,866],{"class":187},[102,27997,266],{"class":119},[102,27999,28000],{"class":104,"line":142},[102,28001,205],{"class":119},[102,28003,28004,28006,28008,28010,28012],{"class":104,"line":148},[102,28005,4087],{"class":112},[102,28007,380],{"class":119},[102,28009,217],{"class":108},[102,28011,1195],{"class":386},[102,28013,1105],{"class":119},[102,28015,28016,28018,28020,28022,28024],{"class":104,"line":157},[102,28017,2921],{"class":119},[102,28019,275],{"class":108},[102,28021,5435],{"class":278},[102,28023,1237],{"class":108},[102,28025,1240],{"class":119},[102,28027,28028,28030,28032],{"class":104,"line":163},[102,28029,5404],{"class":119},[102,28031,260],{"class":108},[102,28033,1262],{"class":119},[102,28035,28036],{"class":104,"line":175},[102,28037,205],{"class":119},[102,28039,28040,28042,28044,28046,28048,28050,28052],{"class":104,"line":181},[102,28041,4087],{"class":112},[102,28043,380],{"class":119},[102,28045,4456],{"class":108},[102,28047,1074],{"class":112},[102,28049,5164],{"class":108},[102,28051,5073],{"class":386},[102,28053,1105],{"class":119},[102,28055,28056,28058,28060,28062,28064],{"class":104,"line":202},[102,28057,2921],{"class":119},[102,28059,275],{"class":108},[102,28061,5476],{"class":278},[102,28063,1237],{"class":108},[102,28065,1240],{"class":119},[102,28067,28068,28070,28072],{"class":104,"line":208},[102,28069,5404],{"class":119},[102,28071,260],{"class":108},[102,28073,5489],{"class":119},[102,28075,28076],{"class":104,"line":214},[102,28077,205],{"class":119},[102,28079,28080],{"class":104,"line":225},[102,28081,5498],{"class":126},[102,28083,28084,28086],{"class":104,"line":230},[102,28085,4120],{"class":112},[102,28087,795],{"class":119},[102,28089,28090,28092,28094,28096,28098],{"class":104,"line":236},[102,28091,2921],{"class":119},[102,28093,275],{"class":108},[102,28095,5513],{"class":278},[102,28097,1237],{"class":108},[102,28099,1240],{"class":119},[102,28101,28102],{"class":104,"line":242},[102,28103,205],{"class":119},[102,28105,28106],{"class":104,"line":248},[102,28107,139],{"class":108},[102,28109,28110,28112],{"class":104,"line":254},[102,28111,151],{"class":108},[102,28113,5532],{"class":119},[102,28115,28116],{"class":104,"line":269},[102,28117,211],{"class":119},[102,28119,28120],{"class":104,"line":298},[102,28121,652],{"emptyLinePlaceholder":651},[102,28123,28124],{"class":104,"line":502},[102,28125,5545],{"class":126},[102,28127,28128,28130,28132],{"class":104,"line":507},[102,28129,2780],{"class":108},[102,28131,4162],{"class":112},[102,28133,795],{"class":119},[102,28135,28136],{"class":104,"line":512},[102,28137,652],{"emptyLinePlaceholder":651},[102,28139,28140,28142,28144,28146,28148,28150],{"class":104,"line":521},[102,28141,5008],{"class":119},[102,28143,5564],{"class":112},[102,28145,380],{"class":119},[102,28147,5569],{"class":187},[102,28149,4227],{"class":119},[102,28151,5574],{"class":126},[102,28153,28154,28156,28158,28160],{"class":104,"line":526},[102,28155,5008],{"class":119},[102,28157,5581],{"class":112},[102,28159,5584],{"class":119},[102,28161,5587],{"class":126},[102,28163,28164,28166,28168,28170],{"class":104,"line":532},[102,28165,5592],{"class":119},[102,28167,260],{"class":108},[102,28169,5597],{"class":119},[102,28171,5600],{"class":126},[102,28173,28174],{"class":104,"line":538},[102,28175,652],{"emptyLinePlaceholder":651},[102,28177,28178],{"class":104,"line":555},[102,28179,5609],{"class":126},[102,28181,28182,28184],{"class":104,"line":570},[102,28183,5614],{"class":126},[102,28185,5617],{"class":126},[102,28187,28188],{"class":104,"line":581},[102,28189,301],{"class":119},[102,28191,28192],{"class":104,"line":819},[102,28193,652],{"emptyLinePlaceholder":651},[102,28195,28196],{"class":104,"line":828},[102,28197,5630],{"class":126},[102,28199,28200],{"class":104,"line":837},[102,28201,5635],{"class":126},[102,28203,28204,28206,28208,28210,28212,28214],{"class":104,"line":842},[102,28205,2780],{"class":108},[102,28207,5066],{"class":112},[102,28209,380],{"class":119},[102,28211,4621],{"class":112},[102,28213,5648],{"class":386},[102,28215,5651],{"class":119},[102,28217,28218,28220,28222],{"class":104,"line":855},[102,28219,2780],{"class":108},[102,28221,4542],{"class":112},[102,28223,795],{"class":119},[102,28225,28226,28228],{"class":104,"line":860},[102,28227,4173],{"class":119},[102,28229,5666],{"class":126},[102,28231,28232,28234],{"class":104,"line":871},[102,28233,5117],{"class":112},[102,28235,5120],{"class":119},[102,28237,28238],{"class":104,"line":1359},[102,28239,301],{"class":119},[102,28241,28242],{"class":104,"line":1368},[102,28243,652],{"emptyLinePlaceholder":651},[102,28245,28246],{"class":104,"line":1373},[102,28247,5685],{"class":126},[102,28249,28250,28252,28254],{"class":104,"line":1378},[102,28251,4621],{"class":112},[102,28253,5136],{"class":112},[102,28255,172],{"class":119},[102,28257,28258],{"class":104,"line":1384},[102,28259,120],{"class":119},[102,28261,28262],{"class":104,"line":1398},[102,28263,4611],{"class":119},[102,28265,28266,28268,28270,28272,28274,28276,28278,28280,28282,28284],{"class":104,"line":1424},[102,28267,1401],{"class":119},[102,28269,275],{"class":108},[102,28271,2432],{"class":119},[102,28273,217],{"class":108},[102,28275,5159],{"class":108},[102,28277,4033],{"class":119},[102,28279,5164],{"class":108},[102,28281,5720],{"class":119},[102,28283,275],{"class":108},[102,28285,1240],{"class":119},[102,28287,28288,28290],{"class":104,"line":1429},[102,28289,863],{"class":108},[102,28291,5731],{"class":119},[102,28293,28294],{"class":104,"line":1435},[102,28295,301],{"class":119},[102,28297,28298],{"class":104,"line":1450},[102,28299,652],{"emptyLinePlaceholder":651},[102,28301,28302,28304,28306],{"class":104,"line":1473},[102,28303,2780],{"class":108},[102,28305,5195],{"class":112},[102,28307,172],{"class":119},[102,28309,28310],{"class":104,"line":1478},[102,28311,120],{"class":119},[102,28313,28314,28316,28318,28320],{"class":104,"line":1484},[102,28315,5206],{"class":119},[102,28317,260],{"class":108},[102,28319,5136],{"class":112},[102,28321,578],{"class":119},[102,28323,28324,28326,28328,28330,28332,28334,28336,28338,28340,28342],{"class":104,"line":1499},[102,28325,1401],{"class":119},[102,28327,275],{"class":108},[102,28329,2432],{"class":119},[102,28331,217],{"class":108},[102,28333,5159],{"class":108},[102,28335,4033],{"class":119},[102,28337,5164],{"class":108},[102,28339,5780],{"class":119},[102,28341,275],{"class":108},[102,28343,1240],{"class":119},[102,28345,28346],{"class":104,"line":1508},[102,28347,301],{"class":119},[102,28349,28350],{"class":104,"line":1513},[102,28351,652],{"emptyLinePlaceholder":651},[102,28353,28354],{"class":104,"line":1524},[102,28355,652],{"emptyLinePlaceholder":651},[102,28357,28358,28360,28362],{"class":104,"line":1529},[102,28359,217],{"class":108},[102,28361,220],{"class":112},[102,28363,795],{"class":119},[102,28365,28366],{"class":104,"line":1538},[102,28367,652],{"emptyLinePlaceholder":651},[102,28369,28370],{"class":104,"line":2089},[102,28371,5813],{"class":126},[102,28373,28374],{"class":104,"line":2094},[102,28375,5818],{"class":126},[102,28377,28378,28380],{"class":104,"line":2100},[102,28379,5276],{"class":112},[102,28381,578],{"class":119},[102,28383,28384],{"class":104,"line":2106},[102,28385,652],{"emptyLinePlaceholder":651},[102,28387,28388,28390,28392,28394],{"class":104,"line":2120},[102,28389,845],{"class":112},[102,28391,380],{"class":119},[102,28393,850],{"class":278},[102,28395,552],{"class":119},[102,28397,28398],{"class":104,"line":2128},[102,28399,652],{"emptyLinePlaceholder":651},[102,28401,28402,28404,28406],{"class":104,"line":2149},[102,28403,863],{"class":108},[102,28405,866],{"class":187},[102,28407,266],{"class":119},[102,28409,28410],{"class":104,"line":2161},[102,28411,301],{"class":119},[48,28413,5858],{"id":5857},[14,28415,5861],{},[14,28417,5864],{},[14,28419,5867],{},[14,28421,5870],{},[14,28423,5873],{},[59,28425,28426,28428],{},[62,28427,5878],{},[62,28429,5881],{},[93,28431,28432],{"className":95,"code":5884,"language":97,"meta":98,"style":98},[83,28433,28434,28442,28446,28450,28456,28468,28472,28476,28488,28496,28508,28512,28516,28532,28540,28552,28556,28560,28566,28578,28582,28586,28592,28596,28600,28608,28612,28624,28628,28636,28640,28656,28660,28664,28672,28676,28680,28686,28700,28710,28714,28718,28724,28738,28748,28752,28756,28764,28768,28774,28778,28788,28792,28800],{"__ignoreMap":98},[102,28435,28436,28438,28440],{"class":104,"line":105},[102,28437,109],{"class":108},[102,28439,1074],{"class":112},[102,28441,1077],{"class":119},[102,28443,28444],{"class":104,"line":116},[102,28445,139],{"class":108},[102,28447,28448],{"class":104,"line":123},[102,28449,5903],{"class":126},[102,28451,28452,28454],{"class":104,"line":130},[102,28453,4087],{"class":112},[102,28455,795],{"class":119},[102,28457,28458,28460,28462,28464,28466],{"class":104,"line":136},[102,28459,2921],{"class":119},[102,28461,275],{"class":108},[102,28463,5395],{"class":278},[102,28465,1237],{"class":108},[102,28467,1240],{"class":119},[102,28469,28470],{"class":104,"line":142},[102,28471,205],{"class":119},[102,28473,28474],{"class":104,"line":148},[102,28475,5930],{"class":126},[102,28477,28478,28480,28482,28484,28486],{"class":104,"line":157},[102,28479,4087],{"class":112},[102,28481,380],{"class":119},[102,28483,217],{"class":108},[102,28485,4378],{"class":386},[102,28487,1105],{"class":119},[102,28489,28490,28492,28494],{"class":104,"line":163},[102,28491,5947],{"class":119},[102,28493,260],{"class":108},[102,28495,5952],{"class":119},[102,28497,28498,28500,28502,28504,28506],{"class":104,"line":175},[102,28499,2921],{"class":119},[102,28501,275],{"class":108},[102,28503,5435],{"class":278},[102,28505,1237],{"class":108},[102,28507,1240],{"class":119},[102,28509,28510],{"class":104,"line":181},[102,28511,205],{"class":119},[102,28513,28514],{"class":104,"line":202},[102,28515,4447],{"class":126},[102,28517,28518,28520,28522,28524,28526,28528,28530],{"class":104,"line":208},[102,28519,4087],{"class":112},[102,28521,380],{"class":119},[102,28523,4456],{"class":108},[102,28525,1074],{"class":112},[102,28527,5164],{"class":108},[102,28529,5073],{"class":386},[102,28531,1105],{"class":119},[102,28533,28534,28536,28538],{"class":104,"line":214},[102,28535,5947],{"class":119},[102,28537,260],{"class":108},[102,28539,5997],{"class":119},[102,28541,28542,28544,28546,28548,28550],{"class":104,"line":225},[102,28543,2921],{"class":119},[102,28545,275],{"class":108},[102,28547,5476],{"class":278},[102,28549,1237],{"class":108},[102,28551,1240],{"class":119},[102,28553,28554],{"class":104,"line":230},[102,28555,205],{"class":119},[102,28557,28558],{"class":104,"line":236},[102,28559,4115],{"class":126},[102,28561,28562,28564],{"class":104,"line":242},[102,28563,4120],{"class":112},[102,28565,795],{"class":119},[102,28567,28568,28570,28572,28574,28576],{"class":104,"line":248},[102,28569,2921],{"class":119},[102,28571,275],{"class":108},[102,28573,5513],{"class":278},[102,28575,1237],{"class":108},[102,28577,1240],{"class":119},[102,28579,28580],{"class":104,"line":254},[102,28581,205],{"class":119},[102,28583,28584],{"class":104,"line":269},[102,28585,139],{"class":108},[102,28587,28588,28590],{"class":104,"line":298},[102,28589,151],{"class":108},[102,28591,1262],{"class":119},[102,28593,28594],{"class":104,"line":502},[102,28595,211],{"class":119},[102,28597,28598],{"class":104,"line":507},[102,28599,652],{"emptyLinePlaceholder":651},[102,28601,28602,28604,28606],{"class":104,"line":512},[102,28603,2780],{"class":108},[102,28605,4162],{"class":112},[102,28607,172],{"class":119},[102,28609,28610],{"class":104,"line":521},[102,28611,120],{"class":119},[102,28613,28614,28616,28618,28620,28622],{"class":104,"line":526},[102,28615,5008],{"class":119},[102,28617,5011],{"class":112},[102,28619,380],{"class":119},[102,28621,6080],{"class":187},[102,28623,552],{"class":119},[102,28625,28626],{"class":104,"line":532},[102,28627,6087],{"class":126},[102,28629,28630,28632,28634],{"class":104,"line":538},[102,28631,5008],{"class":119},[102,28633,5025],{"class":112},[102,28635,3082],{"class":119},[102,28637,28638],{"class":104,"line":555},[102,28639,652],{"emptyLinePlaceholder":651},[102,28641,28642,28644,28646,28648,28650,28652,28654],{"class":104,"line":570},[102,28643,1401],{"class":119},[102,28645,275],{"class":108},[102,28647,6108],{"class":278},[102,28649,1237],{"class":108},[102,28651,6113],{"class":119},[102,28653,275],{"class":108},[102,28655,1240],{"class":119},[102,28657,28658],{"class":104,"line":581},[102,28659,301],{"class":119},[102,28661,28662],{"class":104,"line":819},[102,28663,652],{"emptyLinePlaceholder":651},[102,28665,28666,28668,28670],{"class":104,"line":828},[102,28667,2780],{"class":108},[102,28669,4542],{"class":112},[102,28671,172],{"class":119},[102,28673,28674],{"class":104,"line":837},[102,28675,120],{"class":119},[102,28677,28678],{"class":104,"line":842},[102,28679,6142],{"class":126},[102,28681,28682,28684],{"class":104,"line":855},[102,28683,6147],{"class":119},[102,28685,6150],{"class":126},[102,28687,28688,28690,28692,28694,28696,28698],{"class":104,"line":860},[102,28689,5008],{"class":119},[102,28691,5025],{"class":112},[102,28693,380],{"class":119},[102,28695,263],{"class":187},[102,28697,4227],{"class":119},[102,28699,6165],{"class":126},[102,28701,28702,28704,28706,28708],{"class":104,"line":871},[102,28703,5008],{"class":119},[102,28705,6172],{"class":112},[102,28707,6175],{"class":119},[102,28709,6178],{"class":126},[102,28711,28712],{"class":104,"line":1359},[102,28713,652],{"emptyLinePlaceholder":651},[102,28715,28716],{"class":104,"line":1368},[102,28717,6187],{"class":126},[102,28719,28720,28722],{"class":104,"line":1373},[102,28721,6192],{"class":119},[102,28723,6150],{"class":126},[102,28725,28726,28728,28730,28732,28734,28736],{"class":104,"line":1378},[102,28727,5008],{"class":119},[102,28729,6201],{"class":112},[102,28731,380],{"class":119},[102,28733,263],{"class":187},[102,28735,4227],{"class":119},[102,28737,6210],{"class":126},[102,28739,28740,28742,28744,28746],{"class":104,"line":1384},[102,28741,5008],{"class":119},[102,28743,6217],{"class":112},[102,28745,6220],{"class":119},[102,28747,6223],{"class":126},[102,28749,28750],{"class":104,"line":1398},[102,28751,301],{"class":119},[102,28753,28754],{"class":104,"line":1424},[102,28755,652],{"emptyLinePlaceholder":651},[102,28757,28758,28760,28762],{"class":104,"line":1429},[102,28759,217],{"class":108},[102,28761,220],{"class":112},[102,28763,795],{"class":119},[102,28765,28766],{"class":104,"line":1435},[102,28767,652],{"emptyLinePlaceholder":651},[102,28769,28770,28772],{"class":104,"line":1450},[102,28771,4720],{"class":112},[102,28773,578],{"class":119},[102,28775,28776],{"class":104,"line":1473},[102,28777,652],{"emptyLinePlaceholder":651},[102,28779,28780,28782,28784,28786],{"class":104,"line":1478},[102,28781,845],{"class":112},[102,28783,380],{"class":119},[102,28785,850],{"class":278},[102,28787,552],{"class":119},[102,28789,28790],{"class":104,"line":1484},[102,28791,652],{"emptyLinePlaceholder":651},[102,28793,28794,28796,28798],{"class":104,"line":1499},[102,28795,863],{"class":108},[102,28797,866],{"class":187},[102,28799,266],{"class":119},[102,28801,28802],{"class":104,"line":1508},[102,28803,301],{"class":119},[48,28805,6283],{"id":6282},[14,28807,6286],{},[14,28809,6289],{},[93,28811,28812],{"className":95,"code":6292,"language":97,"meta":98,"style":98},[83,28813,28814,28820,28830,28836,28840,28844,28848,28854,28858,28870,28874,28878,28884,28888,28896,28908,28920,28924,28928,28932,28948,28952,28964,28968,28972,28976,28984,28988,29002,29006,29010,29014,29020,29024,29028,29040,29044,29052,29064,29068,29076,29080,29086,29096,29100,29108,29112,29128,29154,29162,29188,29192,29196,29204,29208,29214],{"__ignoreMap":98},[102,28815,28816,28818],{"class":104,"line":105},[102,28817,314],{"class":108},[102,28819,317],{"class":278},[102,28821,28822,28824,28826,28828],{"class":104,"line":116},[102,28823,322],{"class":108},[102,28825,325],{"class":108},[102,28827,328],{"class":112},[102,28829,266],{"class":119},[102,28831,28832,28834],{"class":104,"line":123},[102,28833,109],{"class":108},[102,28835,659],{"class":112},[102,28837,28838],{"class":104,"line":130},[102,28839,120],{"class":119},[102,28841,28842],{"class":104,"line":136},[102,28843,139],{"class":108},[102,28845,28846],{"class":104,"line":142},[102,28847,6329],{"class":126},[102,28849,28850,28852],{"class":104,"line":148},[102,28851,4087],{"class":112},[102,28853,172],{"class":119},[102,28855,28856],{"class":104,"line":157},[102,28857,178],{"class":119},[102,28859,28860,28862,28864,28866,28868],{"class":104,"line":163},[102,28861,470],{"class":119},[102,28863,275],{"class":108},[102,28865,6348],{"class":278},[102,28867,275],{"class":108},[102,28869,295],{"class":119},[102,28871,28872],{"class":104,"line":175},[102,28873,205],{"class":119},[102,28875,28876],{"class":104,"line":181},[102,28877,5930],{"class":126},[102,28879,28880,28882],{"class":104,"line":202},[102,28881,4120],{"class":112},[102,28883,6367],{"class":119},[102,28885,28886],{"class":104,"line":208},[102,28887,178],{"class":119},[102,28889,28890,28892,28894],{"class":104,"line":214},[102,28891,6376],{"class":119},[102,28893,260],{"class":108},[102,28895,6381],{"class":119},[102,28897,28898,28900,28902,28904,28906],{"class":104,"line":225},[102,28899,6386],{"class":119},[102,28901,6389],{"class":108},[102,28903,6392],{"class":108},[102,28905,6395],{"class":119},[102,28907,6398],{"class":126},[102,28909,28910,28912,28914,28916,28918],{"class":104,"line":230},[102,28911,470],{"class":119},[102,28913,275],{"class":108},[102,28915,6407],{"class":278},[102,28917,275],{"class":108},[102,28919,295],{"class":119},[102,28921,28922],{"class":104,"line":236},[102,28923,205],{"class":119},[102,28925,28926],{"class":104,"line":242},[102,28927,6420],{"class":126},[102,28929,28930],{"class":104,"line":248},[102,28931,6425],{"class":126},[102,28933,28934,28936,28938,28940,28942,28944,28946],{"class":104,"line":254},[102,28935,4087],{"class":112},[102,28937,380],{"class":119},[102,28939,4456],{"class":108},[102,28941,1074],{"class":112},[102,28943,2791],{"class":108},[102,28945,14],{"class":386},[102,28947,390],{"class":119},[102,28949,28950],{"class":104,"line":269},[102,28951,178],{"class":119},[102,28953,28954,28956,28958,28960,28962],{"class":104,"line":298},[102,28955,470],{"class":119},[102,28957,275],{"class":108},[102,28959,6454],{"class":278},[102,28961,275],{"class":108},[102,28963,295],{"class":119},[102,28965,28966],{"class":104,"line":502},[102,28967,6463],{"class":126},[102,28969,28970],{"class":104,"line":507},[102,28971,6468],{"class":126},[102,28973,28974],{"class":104,"line":512},[102,28975,6473],{"class":126},[102,28977,28978,28980,28982],{"class":104,"line":521},[102,28979,6376],{"class":119},[102,28981,260],{"class":108},[102,28983,6482],{"class":119},[102,28985,28986],{"class":104,"line":526},[102,28987,6487],{"class":126},[102,28989,28990,28992,28994,28996,28998,29000],{"class":104,"line":532},[102,28991,6386],{"class":119},[102,28993,6389],{"class":108},[102,28995,6392],{"class":108},[102,28997,380],{"class":119},[102,28999,191],{"class":108},[102,29001,6502],{"class":119},[102,29003,29004],{"class":104,"line":538},[102,29005,205],{"class":119},[102,29007,29008],{"class":104,"line":555},[102,29009,652],{"emptyLinePlaceholder":651},[102,29011,29012],{"class":104,"line":570},[102,29013,4115],{"class":126},[102,29015,29016,29018],{"class":104,"line":581},[102,29017,4120],{"class":112},[102,29019,172],{"class":119},[102,29021,29022],{"class":104,"line":819},[102,29023,178],{"class":119},[102,29025,29026],{"class":104,"line":828},[102,29027,6529],{"class":126},[102,29029,29030,29032,29034,29036,29038],{"class":104,"line":837},[102,29031,1202],{"class":108},[102,29033,6536],{"class":119},[102,29035,6539],{"class":108},[102,29037,6542],{"class":187},[102,29039,390],{"class":119},[102,29041,29042],{"class":104,"line":842},[102,29043,1914],{"class":119},[102,29045,29046,29048,29050],{"class":104,"line":855},[102,29047,6553],{"class":108},[102,29049,6556],{"class":119},[102,29051,6559],{"class":126},[102,29053,29054,29056,29058,29060,29062],{"class":104,"line":860},[102,29055,6564],{"class":119},[102,29057,260],{"class":108},[102,29059,6569],{"class":187},[102,29061,992],{"class":119},[102,29063,6574],{"class":126},[102,29065,29066],{"class":104,"line":871},[102,29067,1252],{"class":119},[102,29069,29070,29072,29074],{"class":104,"line":1359},[102,29071,470],{"class":119},[102,29073,275],{"class":108},[102,29075,6587],{"class":278},[102,29077,29078],{"class":104,"line":1368},[102,29079,205],{"class":119},[102,29081,29082,29084],{"class":104,"line":1373},[102,29083,151],{"class":108},[102,29085,1172],{"class":119},[102,29087,29088,29090,29092,29094],{"class":104,"line":1378},[102,29089,151],{"class":108},[102,29091,5159],{"class":108},[102,29093,6606],{"class":119},[102,29095,6609],{"class":126},[102,29097,29098],{"class":104,"line":1384},[102,29099,211],{"class":119},[102,29101,29102,29104,29106],{"class":104,"line":1398},[102,29103,2780],{"class":108},[102,29105,4162],{"class":112},[102,29107,172],{"class":119},[102,29109,29110],{"class":104,"line":1424},[102,29111,120],{"class":119},[102,29113,29114,29116,29118,29120,29122,29124,29126],{"class":104,"line":1429},[102,29115,5008],{"class":119},[102,29117,5011],{"class":112},[102,29119,380],{"class":119},[102,29121,6080],{"class":187},[102,29123,1618],{"class":119},[102,29125,6640],{"class":187},[102,29127,552],{"class":119},[102,29129,29130,29132,29134,29136,29138,29140,29142,29144,29146,29148,29150,29152],{"class":104,"line":1435},[102,29131,272],{"class":119},[102,29133,275],{"class":108},[102,29135,6651],{"class":278},[102,29137,275],{"class":108},[102,29139,6656],{"class":119},[102,29141,275],{"class":108},[102,29143,6661],{"class":278},[102,29145,6664],{"class":108},[102,29147,6667],{"class":119},[102,29149,275],{"class":108},[102,29151,5171],{"class":119},[102,29153,6674],{"class":126},[102,29155,29156,29158,29160],{"class":104,"line":1450},[102,29157,5008],{"class":119},[102,29159,5025],{"class":112},[102,29161,3082],{"class":119},[102,29163,29164,29166,29168,29170,29172,29174,29176,29178,29180,29182,29184,29186],{"class":104,"line":1473},[102,29165,272],{"class":119},[102,29167,275],{"class":108},[102,29169,6691],{"class":278},[102,29171,275],{"class":108},[102,29173,5041],{"class":119},[102,29175,275],{"class":108},[102,29177,6661],{"class":278},[102,29179,6664],{"class":108},[102,29181,6704],{"class":119},[102,29183,275],{"class":108},[102,29185,5171],{"class":119},[102,29187,6674],{"class":126},[102,29189,29190],{"class":104,"line":1478},[102,29191,1326],{"class":119},[102,29193,29194],{"class":104,"line":1484},[102,29195,301],{"class":119},[102,29197,29198,29200,29202],{"class":104,"line":1499},[102,29199,217],{"class":108},[102,29201,220],{"class":112},[102,29203,172],{"class":119},[102,29205,29206],{"class":104,"line":1508},[102,29207,120],{"class":119},[102,29209,29210,29212],{"class":104,"line":1513},[102,29211,4720],{"class":112},[102,29213,578],{"class":119},[102,29215,29216],{"class":104,"line":1524},[102,29217,301],{"class":119},[14,29219,6743],{},[14,29221,6746],{},[14,29223,29224],{},[6750,29225],{"alt":98,"src":6752},[14,29227,6755],{},[14,29229,29230],{},[6750,29231],{"alt":98,"src":6760},[14,29233,6763],{},[48,29235,6767],{"id":6766},[14,29237,6770],{},[14,29239,80],{},[93,29241,29243],{"className":29242,"code":6777,"language":6778},[6776],[83,29244,6777],{"__ignoreMap":98},[14,29246,6783],{},[93,29248,29249],{"className":95,"code":6786,"language":97,"meta":98,"style":98},[83,29250,29251,29257,29267,29273,29277,29281,29285,29289,29293,29297,29301,29305,29309,29313,29317,29321,29357,29365,29381,29397,29413,29417,29421,29427,29433,29439,29443,29447,29455,29459,29463,29483,29491,29495,29499,29509,29513,29521],{"__ignoreMap":98},[102,29252,29253,29255],{"class":104,"line":105},[102,29254,314],{"class":108},[102,29256,317],{"class":278},[102,29258,29259,29261,29263,29265],{"class":104,"line":116},[102,29260,322],{"class":108},[102,29262,325],{"class":108},[102,29264,328],{"class":112},[102,29266,266],{"class":119},[102,29268,29269,29271],{"class":104,"line":123},[102,29270,109],{"class":108},[102,29272,659],{"class":112},[102,29274,29275],{"class":104,"line":130},[102,29276,120],{"class":119},[102,29278,29279],{"class":104,"line":136},[102,29280,6819],{"class":108},[102,29282,29283],{"class":104,"line":142},[102,29284,652],{"emptyLinePlaceholder":651},[102,29286,29287],{"class":104,"line":148},[102,29288,6828],{"class":126},[102,29290,29291],{"class":104,"line":157},[102,29292,6833],{"class":126},[102,29294,29295],{"class":104,"line":163},[102,29296,6838],{"class":126},[102,29298,29299],{"class":104,"line":175},[102,29300,6843],{"class":126},[102,29302,29303],{"class":104,"line":181},[102,29304,6848],{"class":126},[102,29306,29307],{"class":104,"line":202},[102,29308,6853],{"class":126},[102,29310,29311],{"class":104,"line":208},[102,29312,652],{"emptyLinePlaceholder":651},[102,29314,29315],{"class":104,"line":214},[102,29316,6862],{"class":126},[102,29318,29319],{"class":104,"line":225},[102,29320,6867],{"class":126},[102,29322,29323,29325,29327,29329,29331,29333,29335,29337,29339,29341,29343,29345,29347,29349,29351,29353,29355],{"class":104,"line":230},[102,29324,4087],{"class":112},[102,29326,380],{"class":119},[102,29328,217],{"class":108},[102,29330,4378],{"class":386},[102,29332,2571],{"class":119},[102,29334,217],{"class":108},[102,29336,6884],{"class":386},[102,29338,2571],{"class":119},[102,29340,217],{"class":108},[102,29342,1855],{"class":386},[102,29344,6893],{"class":119},[102,29346,6896],{"class":112},[102,29348,6899],{"class":119},[102,29350,6902],{"class":112},[102,29352,6905],{"class":119},[102,29354,6908],{"class":112},[102,29356,6911],{"class":119},[102,29358,29359,29361,29363],{"class":104,"line":236},[102,29360,374],{"class":108},[102,29362,6918],{"class":112},[102,29364,795],{"class":119},[102,29366,29367,29369,29371,29373,29375,29377,29379],{"class":104,"line":242},[102,29368,2921],{"class":119},[102,29370,275],{"class":108},[102,29372,6929],{"class":278},[102,29374,1237],{"class":108},[102,29376,6934],{"class":119},[102,29378,275],{"class":108},[102,29380,1240],{"class":119},[102,29382,29383,29385,29387,29389,29391,29393,29395],{"class":104,"line":248},[102,29384,2921],{"class":119},[102,29386,275],{"class":108},[102,29388,6947],{"class":278},[102,29390,1237],{"class":108},[102,29392,6952],{"class":119},[102,29394,275],{"class":108},[102,29396,1240],{"class":119},[102,29398,29399,29401,29403,29405,29407,29409,29411],{"class":104,"line":254},[102,29400,2921],{"class":119},[102,29402,275],{"class":108},[102,29404,6965],{"class":278},[102,29406,1237],{"class":108},[102,29408,6970],{"class":119},[102,29410,275],{"class":108},[102,29412,1240],{"class":119},[102,29414,29415],{"class":104,"line":269},[102,29416,205],{"class":119},[102,29418,29419],{"class":104,"line":298},[102,29420,710],{"class":108},[102,29422,29423,29425],{"class":104,"line":502},[102,29424,151],{"class":108},[102,29426,6989],{"class":119},[102,29428,29429,29431],{"class":104,"line":507},[102,29430,151],{"class":108},[102,29432,6996],{"class":119},[102,29434,29435,29437],{"class":104,"line":512},[102,29436,151],{"class":108},[102,29438,7003],{"class":119},[102,29440,29441],{"class":104,"line":521},[102,29442,211],{"class":119},[102,29444,29445],{"class":104,"line":526},[102,29446,652],{"emptyLinePlaceholder":651},[102,29448,29449,29451,29453],{"class":104,"line":532},[102,29450,217],{"class":108},[102,29452,220],{"class":112},[102,29454,7020],{"class":119},[102,29456,29457],{"class":104,"line":538},[102,29458,120],{"class":119},[102,29460,29461],{"class":104,"line":555},[102,29462,652],{"emptyLinePlaceholder":651},[102,29464,29465,29467,29469,29471,29473,29475,29477,29479,29481],{"class":104,"line":570},[102,29466,5008],{"class":119},[102,29468,14],{"class":112},[102,29470,380],{"class":119},[102,29472,7039],{"class":187},[102,29474,2571],{"class":119},[102,29476,7044],{"class":187},[102,29478,2571],{"class":119},[102,29480,7049],{"class":187},[102,29482,552],{"class":119},[102,29484,29485,29487,29489],{"class":104,"line":581},[102,29486,1387],{"class":119},[102,29488,7058],{"class":112},[102,29490,578],{"class":119},[102,29492,29493],{"class":104,"line":819},[102,29494,652],{"emptyLinePlaceholder":651},[102,29496,29497],{"class":104,"line":828},[102,29498,652],{"emptyLinePlaceholder":651},[102,29500,29501,29503,29505,29507],{"class":104,"line":837},[102,29502,845],{"class":112},[102,29504,380],{"class":119},[102,29506,850],{"class":278},[102,29508,552],{"class":119},[102,29510,29511],{"class":104,"line":842},[102,29512,652],{"emptyLinePlaceholder":651},[102,29514,29515,29517,29519],{"class":104,"line":855},[102,29516,863],{"class":108},[102,29518,866],{"class":187},[102,29520,266],{"class":119},[102,29522,29523],{"class":104,"line":860},[102,29524,301],{"class":119},[14,29526,7097,29527,7101,29529],{},[18,29528,7100],{},[18,29530,7104],{},[93,29532,29533],{"className":95,"code":7107,"language":97,"meta":98,"style":98},[83,29534,29535],{"__ignoreMap":98},[102,29536,29537,29539,29541,29543,29545,29547,29549,29551,29553,29555,29557,29559,29561,29563],{"class":104,"line":105},[102,29538,4621],{"class":112},[102,29540,380],{"class":119},[102,29542,217],{"class":108},[102,29544,7120],{"class":119},[102,29546,217],{"class":108},[102,29548,7125],{"class":119},[102,29550,217],{"class":108},[102,29552,7130],{"class":119},[102,29554,6896],{"class":112},[102,29556,7135],{"class":119},[102,29558,6902],{"class":112},[102,29560,7140],{"class":119},[102,29562,6908],{"class":112},[102,29564,7145],{"class":119},[48,29566,7149],{"id":7148},[14,29568,7152],{},[14,29570,32],{},[93,29572,29573],{"className":95,"code":7157,"language":97,"meta":98,"style":98},[83,29574,29575,29579,29583,29587,29591,29595],{"__ignoreMap":98},[102,29576,29577],{"class":104,"line":105},[102,29578,7164],{"class":119},[102,29580,29581],{"class":104,"line":116},[102,29582,7169],{"class":119},[102,29584,29585],{"class":104,"line":123},[102,29586,120],{"class":119},[102,29588,29589],{"class":104,"line":130},[102,29590,7178],{"class":119},[102,29592,29593],{"class":104,"line":136},[102,29594,301],{"class":119},[102,29596,29597],{"class":104,"line":142},[102,29598,7187],{"class":126},[14,29600,7190],{},[93,29602,29603],{"className":95,"code":7193,"language":97,"meta":98,"style":98},[83,29604,29605,29609,29615,29619,29623,29627,29639,29643,29651,29661,29665,29671,29675,29687,29691,29695,29699,29703,29709,29713,29717,29721,29747,29751,29761,29765,29771,29775,29787,29791,29795,29799,29803,29807,29811,29819,29823,29839,29855,29859,29867,29871,29877],{"__ignoreMap":98},[102,29606,29607],{"class":104,"line":105},[102,29608,7200],{"class":126},[102,29610,29611,29613],{"class":104,"line":116},[102,29612,109],{"class":108},[102,29614,7207],{"class":112},[102,29616,29617],{"class":104,"line":123},[102,29618,120],{"class":119},[102,29620,29621],{"class":104,"line":130},[102,29622,7216],{"class":119},[102,29624,29625],{"class":104,"line":136},[102,29626,7221],{"class":126},[102,29628,29629,29631,29633,29635,29637],{"class":104,"line":142},[102,29630,7226],{"class":112},[102,29632,380],{"class":119},[102,29634,383],{"class":112},[102,29636,7233],{"class":386},[102,29638,390],{"class":119},[102,29640,29641],{"class":104,"line":148},[102,29642,178],{"class":119},[102,29644,29645,29647,29649],{"class":104,"line":157},[102,29646,7244],{"class":119},[102,29648,260],{"class":108},[102,29650,7249],{"class":119},[102,29652,29653,29655,29657,29659],{"class":104,"line":163},[102,29654,470],{"class":119},[102,29656,275],{"class":108},[102,29658,7258],{"class":278},[102,29660,266],{"class":119},[102,29662,29663],{"class":104,"line":175},[102,29664,205],{"class":119},[102,29666,29667,29669],{"class":104,"line":181},[102,29668,7269],{"class":112},[102,29670,172],{"class":119},[102,29672,29673],{"class":104,"line":202},[102,29674,178],{"class":119},[102,29676,29677,29679,29681,29683,29685],{"class":104,"line":208},[102,29678,470],{"class":119},[102,29680,275],{"class":108},[102,29682,7284],{"class":278},[102,29684,275],{"class":108},[102,29686,295],{"class":119},[102,29688,29689],{"class":104,"line":214},[102,29690,205],{"class":119},[102,29692,29693],{"class":104,"line":225},[102,29694,7297],{"class":126},[102,29696,29697],{"class":104,"line":230},[102,29698,7302],{"class":119},[102,29700,29701],{"class":104,"line":236},[102,29702,211],{"class":119},[102,29704,29705,29707],{"class":104,"line":242},[102,29706,109],{"class":108},[102,29708,659],{"class":112},[102,29710,29711],{"class":104,"line":248},[102,29712,120],{"class":119},[102,29714,29715],{"class":104,"line":254},[102,29716,139],{"class":108},[102,29718,29719],{"class":104,"line":269},[102,29720,2553],{"class":126},[102,29722,29723,29725,29727,29729,29731,29733,29735,29737,29739,29741,29743,29745],{"class":104,"line":298},[102,29724,4087],{"class":112},[102,29726,380],{"class":119},[102,29728,383],{"class":112},[102,29730,387],{"class":386},[102,29732,1618],{"class":119},[102,29734,383],{"class":112},[102,29736,7341],{"class":386},[102,29738,7344],{"class":119},[102,29740,480],{"class":112},[102,29742,7349],{"class":119},[102,29744,7352],{"class":112},[102,29746,7355],{"class":119},[102,29748,29749],{"class":104,"line":502},[102,29750,178],{"class":119},[102,29752,29753,29755,29757,29759],{"class":104,"line":507},[102,29754,470],{"class":119},[102,29756,275],{"class":108},[102,29758,7368],{"class":278},[102,29760,266],{"class":119},[102,29762,29763],{"class":104,"line":512},[102,29764,205],{"class":119},[102,29766,29767,29769],{"class":104,"line":521},[102,29768,4120],{"class":112},[102,29770,172],{"class":119},[102,29772,29773],{"class":104,"line":526},[102,29774,178],{"class":119},[102,29776,29777,29779,29781,29783,29785],{"class":104,"line":532},[102,29778,470],{"class":119},[102,29780,275],{"class":108},[102,29782,7393],{"class":278},[102,29784,275],{"class":108},[102,29786,295],{"class":119},[102,29788,29789],{"class":104,"line":538},[102,29790,205],{"class":119},[102,29792,29793],{"class":104,"line":555},[102,29794,7406],{"class":126},[102,29796,29797],{"class":104,"line":570},[102,29798,357],{"class":119},[102,29800,29801],{"class":104,"line":581},[102,29802,7415],{"class":126},[102,29804,29805],{"class":104,"line":819},[102,29806,7420],{"class":119},[102,29808,29809],{"class":104,"line":828},[102,29810,211],{"class":119},[102,29812,29813,29815,29817],{"class":104,"line":837},[102,29814,2780],{"class":108},[102,29816,4162],{"class":112},[102,29818,172],{"class":119},[102,29820,29821],{"class":104,"line":842},[102,29822,120],{"class":119},[102,29824,29825,29827,29829,29831,29833,29835,29837],{"class":104,"line":855},[102,29826,5008],{"class":119},[102,29828,14],{"class":112},[102,29830,380],{"class":119},[102,29832,549],{"class":278},[102,29834,1618],{"class":119},[102,29836,7451],{"class":278},[102,29838,552],{"class":119},[102,29840,29841,29843,29845,29847,29849,29851,29853],{"class":104,"line":860},[102,29842,272],{"class":119},[102,29844,275],{"class":108},[102,29846,7462],{"class":119},[102,29848,275],{"class":108},[102,29850,7467],{"class":278},[102,29852,275],{"class":108},[102,29854,7472],{"class":119},[102,29856,29857],{"class":104,"line":871},[102,29858,301],{"class":119},[102,29860,29861,29863,29865],{"class":104,"line":1359},[102,29862,217],{"class":108},[102,29864,220],{"class":112},[102,29866,172],{"class":119},[102,29868,29869],{"class":104,"line":1368},[102,29870,120],{"class":119},[102,29872,29873,29875],{"class":104,"line":1373},[102,29874,4720],{"class":112},[102,29876,578],{"class":119},[102,29878,29879],{"class":104,"line":1378},[102,29880,301],{"class":119},[14,29882,7501],{},[93,29884,29885],{"className":95,"code":7504,"language":97,"meta":98,"style":98},[83,29886,29887,29891],{"__ignoreMap":98},[102,29888,29889],{"class":104,"line":105},[102,29890,7511],{"class":126},[102,29892,29893],{"class":104,"line":116},[102,29894,7516],{"class":126},[14,29896,7519],{},[93,29898,29899],{"className":95,"code":7522,"language":97,"meta":98,"style":98},[83,29900,29901],{"__ignoreMap":98},[102,29902,29903,29905,29907,29909,29911,29913],{"class":104,"line":105},[102,29904,4621],{"class":112},[102,29906,7531],{"class":119},[102,29908,480],{"class":112},[102,29910,7536],{"class":119},[102,29912,7539],{"class":112},[102,29914,7542],{"class":119},[14,29916,7545,29917,260,29919],{},[83,29918,7548],{},[83,29920,7551],{},[14,29922,29923,7557],{},[18,29924,7556],{},[14,29926,7560],{},[48,29928,7564],{"id":7563},[14,29930,7567],{},[14,29932,7570],{},[87,29934,29935],{},[62,29936,7575],{},[59,29938,29939,29941,29943],{},[62,29940,7580],{},[62,29942,7583],{},[62,29944,7586],{},[87,29946,29947],{"start":116},[62,29948,7591],{},[59,29950,29951,29953],{},[62,29952,7596],{},[62,29954,7599],{},[7601,29956,7604],{"id":7603},[93,29958,29959],{"className":95,"code":7607,"language":97,"meta":98,"style":98},[83,29960,29961,29967,29977,29983,29987,29991,29995,29999,30003,30011,30015,30019,30023,30031,30035,30039,30043,30055,30059,30067,30071,30077],{"__ignoreMap":98},[102,29962,29963,29965],{"class":104,"line":105},[102,29964,314],{"class":108},[102,29966,317],{"class":278},[102,29968,29969,29971,29973,29975],{"class":104,"line":116},[102,29970,322],{"class":108},[102,29972,325],{"class":108},[102,29974,328],{"class":112},[102,29976,266],{"class":119},[102,29978,29979,29981],{"class":104,"line":123},[102,29980,109],{"class":108},[102,29982,659],{"class":112},[102,29984,29985],{"class":104,"line":130},[102,29986,120],{"class":119},[102,29988,29989],{"class":104,"line":136},[102,29990,139],{"class":108},[102,29992,29993],{"class":104,"line":142},[102,29994,7644],{"class":126},[102,29996,29997],{"class":104,"line":148},[102,29998,7649],{"class":126},[102,30000,30001],{"class":104,"line":157},[102,30002,7654],{"class":126},[102,30004,30005,30007,30009],{"class":104,"line":163},[102,30006,7659],{"class":108},[102,30008,6392],{"class":108},[102,30010,6989],{"class":119},[102,30012,30013],{"class":104,"line":175},[102,30014,652],{"emptyLinePlaceholder":651},[102,30016,30017],{"class":104,"line":181},[102,30018,652],{"emptyLinePlaceholder":651},[102,30020,30021],{"class":104,"line":202},[102,30022,211],{"class":119},[102,30024,30025,30027,30029],{"class":104,"line":208},[102,30026,2780],{"class":108},[102,30028,4162],{"class":112},[102,30030,172],{"class":119},[102,30032,30033],{"class":104,"line":214},[102,30034,120],{"class":119},[102,30036,30037],{"class":104,"line":225},[102,30038,804],{"class":119},[102,30040,30041],{"class":104,"line":230},[102,30042,7696],{"class":126},[102,30044,30045,30047,30049,30051,30053],{"class":104,"line":236},[102,30046,272],{"class":119},[102,30048,275],{"class":108},[102,30050,7705],{"class":119},[102,30052,275],{"class":108},[102,30054,295],{"class":119},[102,30056,30057],{"class":104,"line":242},[102,30058,301],{"class":119},[102,30060,30061,30063,30065],{"class":104,"line":248},[102,30062,217],{"class":108},[102,30064,220],{"class":112},[102,30066,172],{"class":119},[102,30068,30069],{"class":104,"line":254},[102,30070,120],{"class":119},[102,30072,30073,30075],{"class":104,"line":269},[102,30074,4720],{"class":112},[102,30076,172],{"class":119},[102,30078,30079],{"class":104,"line":298},[102,30080,301],{"class":119},[14,30082,7738],{},[14,30084,7741],{},[93,30086,30087],{"className":95,"code":7744,"language":97,"meta":98,"style":98},[83,30088,30089,30095,30105,30111,30115,30119,30123,30131,30135,30139,30153,30161,30165,30169,30173,30177,30189,30193,30203,30207,30211,30223,30227,30235,30239,30245],{"__ignoreMap":98},[102,30090,30091,30093],{"class":104,"line":105},[102,30092,314],{"class":108},[102,30094,317],{"class":278},[102,30096,30097,30099,30101,30103],{"class":104,"line":116},[102,30098,322],{"class":108},[102,30100,325],{"class":108},[102,30102,328],{"class":112},[102,30104,266],{"class":119},[102,30106,30107,30109],{"class":104,"line":123},[102,30108,109],{"class":108},[102,30110,659],{"class":112},[102,30112,30113],{"class":104,"line":130},[102,30114,120],{"class":119},[102,30116,30117],{"class":104,"line":136},[102,30118,139],{"class":108},[102,30120,30121],{"class":104,"line":142},[102,30122,7781],{"class":126},[102,30124,30125,30127,30129],{"class":104,"line":148},[102,30126,7659],{"class":108},[102,30128,6392],{"class":108},[102,30130,6989],{"class":119},[102,30132,30133],{"class":104,"line":157},[102,30134,211],{"class":119},[102,30136,30137],{"class":104,"line":163},[102,30138,7798],{"class":126},[102,30140,30141,30143,30145,30147,30149,30151],{"class":104,"line":175},[102,30142,217],{"class":108},[102,30144,1074],{"class":112},[102,30146,7807],{"class":119},[102,30148,260],{"class":108},[102,30150,263],{"class":187},[102,30152,266],{"class":119},[102,30154,30155,30157,30159],{"class":104,"line":181},[102,30156,2780],{"class":108},[102,30158,4162],{"class":112},[102,30160,172],{"class":119},[102,30162,30163],{"class":104,"line":202},[102,30164,120],{"class":119},[102,30166,30167],{"class":104,"line":208},[102,30168,804],{"class":119},[102,30170,30171],{"class":104,"line":214},[102,30172,7834],{"class":126},[102,30174,30175],{"class":104,"line":225},[102,30176,7839],{"class":126},[102,30178,30179,30181,30183,30185,30187],{"class":104,"line":230},[102,30180,272],{"class":119},[102,30182,275],{"class":108},[102,30184,7705],{"class":119},[102,30186,275],{"class":108},[102,30188,295],{"class":119},[102,30190,30191],{"class":104,"line":236},[102,30192,7856],{"class":119},[102,30194,30195,30197,30199,30201],{"class":104,"line":242},[102,30196,7861],{"class":119},[102,30198,260],{"class":108},[102,30200,7866],{"class":187},[102,30202,266],{"class":119},[102,30204,30205],{"class":104,"line":248},[102,30206,7873],{"class":126},[102,30208,30209],{"class":104,"line":254},[102,30210,7878],{"class":126},[102,30212,30213,30215,30217,30219,30221],{"class":104,"line":269},[102,30214,272],{"class":119},[102,30216,275],{"class":108},[102,30218,7887],{"class":119},[102,30220,275],{"class":108},[102,30222,295],{"class":119},[102,30224,30225],{"class":104,"line":298},[102,30226,301],{"class":119},[102,30228,30229,30231,30233],{"class":104,"line":502},[102,30230,217],{"class":108},[102,30232,220],{"class":112},[102,30234,172],{"class":119},[102,30236,30237],{"class":104,"line":507},[102,30238,120],{"class":119},[102,30240,30241,30243],{"class":104,"line":512},[102,30242,4720],{"class":112},[102,30244,578],{"class":119},[102,30246,30247],{"class":104,"line":521},[102,30248,301],{"class":119},[14,30250,30251],{},[18,30252,7922],{},[93,30254,30255],{"className":95,"code":7925,"language":97,"meta":98,"style":98},[83,30256,30257,30263,30273,30279,30283,30287,30291,30299,30303,30307,30315,30319,30323,30337,30351,30359,30363,30367,30371,30375,30379,30391,30395,30399,30413,30429,30433,30441,30445,30451],{"__ignoreMap":98},[102,30258,30259,30261],{"class":104,"line":105},[102,30260,314],{"class":108},[102,30262,317],{"class":278},[102,30264,30265,30267,30269,30271],{"class":104,"line":116},[102,30266,322],{"class":108},[102,30268,325],{"class":108},[102,30270,328],{"class":112},[102,30272,266],{"class":119},[102,30274,30275,30277],{"class":104,"line":123},[102,30276,109],{"class":108},[102,30278,659],{"class":112},[102,30280,30281],{"class":104,"line":130},[102,30282,120],{"class":119},[102,30284,30285],{"class":104,"line":136},[102,30286,139],{"class":108},[102,30288,30289],{"class":104,"line":142},[102,30290,7781],{"class":126},[102,30292,30293,30295,30297],{"class":104,"line":148},[102,30294,7659],{"class":108},[102,30296,6392],{"class":108},[102,30298,6989],{"class":119},[102,30300,30301],{"class":104,"line":157},[102,30302,710],{"class":108},[102,30304,30305],{"class":104,"line":163},[102,30306,7978],{"class":126},[102,30308,30309,30311,30313],{"class":104,"line":175},[102,30310,7659],{"class":108},[102,30312,6392],{"class":108},[102,30314,6996],{"class":119},[102,30316,30317],{"class":104,"line":181},[102,30318,211],{"class":119},[102,30320,30321],{"class":104,"line":202},[102,30322,7798],{"class":126},[102,30324,30325,30327,30329,30331,30333,30335],{"class":104,"line":208},[102,30326,217],{"class":108},[102,30328,1074],{"class":112},[102,30330,7807],{"class":119},[102,30332,260],{"class":108},[102,30334,263],{"class":187},[102,30336,266],{"class":119},[102,30338,30339,30341,30343,30345,30347,30349],{"class":104,"line":214},[102,30340,217],{"class":108},[102,30342,1074],{"class":112},[102,30344,8017],{"class":119},[102,30346,260],{"class":108},[102,30348,5016],{"class":187},[102,30350,266],{"class":119},[102,30352,30353,30355,30357],{"class":104,"line":225},[102,30354,2780],{"class":108},[102,30356,4542],{"class":112},[102,30358,172],{"class":119},[102,30360,30361],{"class":104,"line":230},[102,30362,120],{"class":119},[102,30364,30365],{"class":104,"line":236},[102,30366,8040],{"class":126},[102,30368,30369],{"class":104,"line":242},[102,30370,8045],{"class":126},[102,30372,30373],{"class":104,"line":248},[102,30374,8050],{"class":126},[102,30376,30377],{"class":104,"line":254},[102,30378,8055],{"class":119},[102,30380,30381,30383,30385,30387,30389],{"class":104,"line":269},[102,30382,272],{"class":119},[102,30384,275],{"class":108},[102,30386,7705],{"class":119},[102,30388,275],{"class":108},[102,30390,295],{"class":119},[102,30392,30393],{"class":104,"line":298},[102,30394,8072],{"class":126},[102,30396,30397],{"class":104,"line":502},[102,30398,8077],{"class":126},[102,30400,30401,30403,30405,30407,30409,30411],{"class":104,"line":507},[102,30402,272],{"class":119},[102,30404,275],{"class":108},[102,30406,4621],{"class":112},[102,30408,7807],{"class":119},[102,30410,275],{"class":108},[102,30412,295],{"class":119},[102,30414,30415,30417,30419,30421,30423,30425,30427],{"class":104,"line":512},[102,30416,272],{"class":119},[102,30418,275],{"class":108},[102,30420,4621],{"class":112},[102,30422,8017],{"class":119},[102,30424,275],{"class":108},[102,30426,5171],{"class":119},[102,30428,8108],{"class":126},[102,30430,30431],{"class":104,"line":521},[102,30432,301],{"class":119},[102,30434,30435,30437,30439],{"class":104,"line":526},[102,30436,217],{"class":108},[102,30438,220],{"class":112},[102,30440,172],{"class":119},[102,30442,30443],{"class":104,"line":532},[102,30444,120],{"class":119},[102,30446,30447,30449],{"class":104,"line":538},[102,30448,4727],{"class":112},[102,30450,578],{"class":119},[102,30452,30453],{"class":104,"line":555},[102,30454,301],{"class":119},[7601,30456,8138],{"id":8137},[14,30458,8141],{},[93,30460,30461],{"className":95,"code":8144,"language":97,"meta":98,"style":98},[83,30462,30463,30469,30473,30477,30481,30491,30495,30507,30511,30515,30523,30527,30531,30535,30539,30547,30551,30561],{"__ignoreMap":98},[102,30464,30465,30467],{"class":104,"line":105},[102,30466,109],{"class":108},[102,30468,659],{"class":112},[102,30470,30471],{"class":104,"line":116},[102,30472,120],{"class":119},[102,30474,30475],{"class":104,"line":123},[102,30476,139],{"class":108},[102,30478,30479],{"class":104,"line":130},[102,30480,8165],{"class":126},[102,30482,30483,30485,30487,30489],{"class":104,"line":136},[102,30484,7659],{"class":108},[102,30486,8172],{"class":108},[102,30488,732],{"class":112},[102,30490,172],{"class":119},[102,30492,30493],{"class":104,"line":142},[102,30494,178],{"class":119},[102,30496,30497,30499,30501,30503,30505],{"class":104,"line":148},[102,30498,8185],{"class":119},[102,30500,275],{"class":108},[102,30502,8190],{"class":278},[102,30504,275],{"class":108},[102,30506,295],{"class":119},[102,30508,30509],{"class":104,"line":157},[102,30510,205],{"class":119},[102,30512,30513],{"class":104,"line":163},[102,30514,211],{"class":119},[102,30516,30517,30519,30521],{"class":104,"line":175},[102,30518,2780],{"class":108},[102,30520,4162],{"class":112},[102,30522,172],{"class":119},[102,30524,30525],{"class":104,"line":181},[102,30526,120],{"class":119},[102,30528,30529],{"class":104,"line":202},[102,30530,8219],{"class":126},[102,30532,30533],{"class":104,"line":208},[102,30534,8224],{"class":126},[102,30536,30537],{"class":104,"line":214},[102,30538,804],{"class":119},[102,30540,30541,30543,30545],{"class":104,"line":225},[102,30542,1387],{"class":119},[102,30544,8235],{"class":112},[102,30546,578],{"class":119},[102,30548,30549],{"class":104,"line":230},[102,30550,8242],{"class":126},[102,30552,30553,30555,30557,30559],{"class":104,"line":236},[102,30554,4087],{"class":112},[102,30556,3299],{"class":119},[102,30558,8235],{"class":112},[102,30560,578],{"class":119},[102,30562,30563],{"class":104,"line":242},[102,30564,301],{"class":119},[87,30566,30567],{"start":116},[62,30568,8261],{},[93,30570,30571],{"className":95,"code":8264,"language":97,"meta":98,"style":98},[83,30572,30573,30579,30583,30587,30591,30601,30605,30617,30621,30633,30637,30647,30655,30659,30663,30667,30677,30681,30693,30697,30701,30705,30709,30723,30731,30735,30739,30743,30747,30755,30759,30769,30773,30777,30785,30789,30795],{"__ignoreMap":98},[102,30574,30575,30577],{"class":104,"line":105},[102,30576,109],{"class":108},[102,30578,659],{"class":112},[102,30580,30581],{"class":104,"line":116},[102,30582,120],{"class":119},[102,30584,30585],{"class":104,"line":123},[102,30586,139],{"class":108},[102,30588,30589],{"class":104,"line":130},[102,30590,8165],{"class":126},[102,30592,30593,30595,30597,30599],{"class":104,"line":136},[102,30594,7659],{"class":108},[102,30596,8172],{"class":108},[102,30598,732],{"class":112},[102,30600,172],{"class":119},[102,30602,30603],{"class":104,"line":142},[102,30604,178],{"class":119},[102,30606,30607,30609,30611,30613,30615],{"class":104,"line":148},[102,30608,8303],{"class":119},[102,30610,260],{"class":108},[102,30612,5569],{"class":187},[102,30614,992],{"class":119},[102,30616,8312],{"class":126},[102,30618,30619],{"class":104,"line":157},[102,30620,8317],{"class":126},[102,30622,30623,30625,30627,30629,30631],{"class":104,"line":163},[102,30624,8185],{"class":119},[102,30626,275],{"class":108},[102,30628,8190],{"class":278},[102,30630,275],{"class":108},[102,30632,295],{"class":119},[102,30634,30635],{"class":104,"line":175},[102,30636,205],{"class":119},[102,30638,30639,30641,30643,30645],{"class":104,"line":181},[102,30640,7659],{"class":108},[102,30642,6392],{"class":108},[102,30644,951],{"class":119},[102,30646,8344],{"class":126},[102,30648,30649,30651,30653],{"class":104,"line":202},[102,30650,151],{"class":108},[102,30652,8351],{"class":119},[102,30654,8354],{"class":126},[102,30656,30657],{"class":104,"line":208},[102,30658,652],{"emptyLinePlaceholder":651},[102,30660,30661],{"class":104,"line":214},[102,30662,710],{"class":108},[102,30664,30665],{"class":104,"line":225},[102,30666,7978],{"class":126},[102,30668,30669,30671,30673,30675],{"class":104,"line":230},[102,30670,7659],{"class":108},[102,30672,8172],{"class":108},[102,30674,8375],{"class":112},[102,30676,172],{"class":119},[102,30678,30679],{"class":104,"line":236},[102,30680,178],{"class":119},[102,30682,30683,30685,30687,30689,30691],{"class":104,"line":242},[102,30684,470],{"class":119},[102,30686,275],{"class":108},[102,30688,8390],{"class":278},[102,30690,275],{"class":108},[102,30692,295],{"class":119},[102,30694,30695],{"class":104,"line":248},[102,30696,205],{"class":119},[102,30698,30699],{"class":104,"line":254},[102,30700,652],{"emptyLinePlaceholder":651},[102,30702,30703],{"class":104,"line":269},[102,30704,652],{"emptyLinePlaceholder":651},[102,30706,30707],{"class":104,"line":298},[102,30708,211],{"class":119},[102,30710,30711,30713,30715,30717,30719,30721],{"class":104,"line":502},[102,30712,217],{"class":108},[102,30714,1074],{"class":112},[102,30716,7807],{"class":119},[102,30718,260],{"class":108},[102,30720,8423],{"class":187},[102,30722,266],{"class":119},[102,30724,30725,30727,30729],{"class":104,"line":507},[102,30726,2780],{"class":108},[102,30728,4162],{"class":112},[102,30730,172],{"class":119},[102,30732,30733],{"class":104,"line":512},[102,30734,120],{"class":119},[102,30736,30737],{"class":104,"line":521},[102,30738,8219],{"class":126},[102,30740,30741],{"class":104,"line":526},[102,30742,8224],{"class":126},[102,30744,30745],{"class":104,"line":532},[102,30746,804],{"class":119},[102,30748,30749,30751,30753],{"class":104,"line":538},[102,30750,1387],{"class":119},[102,30752,8235],{"class":112},[102,30754,578],{"class":119},[102,30756,30757],{"class":104,"line":555},[102,30758,8242],{"class":126},[102,30760,30761,30763,30765,30767],{"class":104,"line":570},[102,30762,4087],{"class":112},[102,30764,3299],{"class":119},[102,30766,8235],{"class":112},[102,30768,578],{"class":119},[102,30770,30771],{"class":104,"line":581},[102,30772,8476],{"class":126},[102,30774,30775],{"class":104,"line":819},[102,30776,301],{"class":119},[102,30778,30779,30781,30783],{"class":104,"line":828},[102,30780,217],{"class":108},[102,30782,220],{"class":112},[102,30784,172],{"class":119},[102,30786,30787],{"class":104,"line":837},[102,30788,120],{"class":119},[102,30790,30791,30793],{"class":104,"line":842},[102,30792,4720],{"class":112},[102,30794,578],{"class":119},[102,30796,30797],{"class":104,"line":855},[102,30798,301],{"class":119},[48,30800,8506],{"id":8505},[7601,30802,8510],{"id":8509},[14,30804,8513],{},[14,30806,8516],{},[8518,30808,8521],{"id":8520},[93,30810,30811],{"className":95,"code":8524,"language":97,"meta":98,"style":98},[83,30812,30813,30819,30829,30835,30839,30843,30847,30855,30859,30863,30883,30887,30895,30899,30905],{"__ignoreMap":98},[102,30814,30815,30817],{"class":104,"line":105},[102,30816,314],{"class":108},[102,30818,8533],{"class":278},[102,30820,30821,30823,30825,30827],{"class":104,"line":116},[102,30822,322],{"class":108},[102,30824,325],{"class":108},[102,30826,328],{"class":112},[102,30828,266],{"class":119},[102,30830,30831,30833],{"class":104,"line":123},[102,30832,109],{"class":108},[102,30834,659],{"class":112},[102,30836,30837],{"class":104,"line":130},[102,30838,120],{"class":119},[102,30840,30841],{"class":104,"line":136},[102,30842,652],{"emptyLinePlaceholder":651},[102,30844,30845],{"class":104,"line":142},[102,30846,211],{"class":119},[102,30848,30849,30851,30853],{"class":104,"line":148},[102,30850,2780],{"class":108},[102,30852,4162],{"class":112},[102,30854,172],{"class":119},[102,30856,30857],{"class":104,"line":157},[102,30858,120],{"class":119},[102,30860,30861],{"class":104,"line":163},[102,30862,804],{"class":119},[102,30864,30865,30867,30869,30871,30873,30875,30877,30879,30881],{"class":104,"line":175},[102,30866,272],{"class":119},[102,30868,275],{"class":108},[102,30870,8586],{"class":278},[102,30872,275],{"class":108},[102,30874,8591],{"class":112},[102,30876,8594],{"class":119},[102,30878,275],{"class":108},[102,30880,5171],{"class":119},[102,30882,8601],{"class":126},[102,30884,30885],{"class":104,"line":181},[102,30886,301],{"class":119},[102,30888,30889,30891,30893],{"class":104,"line":202},[102,30890,217],{"class":108},[102,30892,220],{"class":112},[102,30894,172],{"class":119},[102,30896,30897],{"class":104,"line":208},[102,30898,120],{"class":119},[102,30900,30901,30903],{"class":104,"line":214},[102,30902,4720],{"class":112},[102,30904,578],{"class":119},[102,30906,30907],{"class":104,"line":225},[102,30908,301],{"class":119},[14,30910,8630],{},[14,30912,8633],{},[14,30914,8636],{},[8518,30916,8640],{"id":8639},[93,30918,30919],{"className":95,"code":8643,"language":97,"meta":98,"style":98},[83,30920,30921,30927,30937,30945,30949,30957,30961,30969,30973,30977,30995,30999,31003,31011,31015,31021],{"__ignoreMap":98},[102,30922,30923,30925],{"class":104,"line":105},[102,30924,314],{"class":108},[102,30926,317],{"class":278},[102,30928,30929,30931,30933,30935],{"class":104,"line":116},[102,30930,322],{"class":108},[102,30932,325],{"class":108},[102,30934,328],{"class":112},[102,30936,266],{"class":119},[102,30938,30939,30941,30943],{"class":104,"line":123},[102,30940,109],{"class":108},[102,30942,1074],{"class":112},[102,30944,4328],{"class":119},[102,30946,30947],{"class":104,"line":130},[102,30948,120],{"class":119},[102,30950,30951,30953,30955],{"class":104,"line":136},[102,30952,151],{"class":108},[102,30954,951],{"class":119},[102,30956,8682],{"class":126},[102,30958,30959],{"class":104,"line":142},[102,30960,211],{"class":119},[102,30962,30963,30965,30967],{"class":104,"line":148},[102,30964,2780],{"class":108},[102,30966,4162],{"class":112},[102,30968,172],{"class":119},[102,30970,30971],{"class":104,"line":157},[102,30972,120],{"class":119},[102,30974,30975],{"class":104,"line":163},[102,30976,804],{"class":119},[102,30978,30979,30981,30983,30985,30987,30989,30991,30993],{"class":104,"line":175},[102,30980,272],{"class":119},[102,30982,275],{"class":108},[102,30984,8586],{"class":278},[102,30986,8713],{"class":108},[102,30988,8594],{"class":119},[102,30990,275],{"class":108},[102,30992,5171],{"class":119},[102,30994,8722],{"class":126},[102,30996,30997],{"class":104,"line":181},[102,30998,652],{"emptyLinePlaceholder":651},[102,31000,31001],{"class":104,"line":202},[102,31002,301],{"class":119},[102,31004,31005,31007,31009],{"class":104,"line":208},[102,31006,217],{"class":108},[102,31008,220],{"class":112},[102,31010,172],{"class":119},[102,31012,31013],{"class":104,"line":214},[102,31014,120],{"class":119},[102,31016,31017,31019],{"class":104,"line":225},[102,31018,4720],{"class":112},[102,31020,578],{"class":119},[102,31022,31023],{"class":104,"line":230},[102,31024,301],{"class":119},[14,31026,8755],{},[14,31028,8758],{},[87,31030,31031],{},[62,31032,8763],{},[93,31034,31035],{"className":95,"code":8766,"language":97,"meta":98,"style":98},[83,31036,31037,31043,31047,31053,31061,31065,31069],{"__ignoreMap":98},[102,31038,31039,31041],{"class":104,"line":105},[102,31040,109],{"class":108},[102,31042,659],{"class":112},[102,31044,31045],{"class":104,"line":116},[102,31046,120],{"class":119},[102,31048,31049,31051],{"class":104,"line":123},[102,31050,151],{"class":108},[102,31052,6989],{"class":119},[102,31054,31055,31057,31059],{"class":104,"line":130},[102,31056,7659],{"class":108},[102,31058,6392],{"class":108},[102,31060,6996],{"class":119},[102,31062,31063],{"class":104,"line":136},[102,31064,211],{"class":119},[102,31066,31067],{"class":104,"line":142},[102,31068,8801],{"class":126},[102,31070,31071,31073,31075,31077,31079,31081],{"class":104,"line":148},[102,31072,217],{"class":108},[102,31074,1074],{"class":112},[102,31076,8017],{"class":119},[102,31078,260],{"class":108},[102,31080,8423],{"class":187},[102,31082,266],{"class":119},[14,31084,8818],{},[14,31086,8821],{},[87,31088,31089],{"start":116},[62,31090,8826],{},[93,31092,31093],{"className":95,"code":8829,"language":97,"meta":98,"style":98},[83,31094,31095,31101,31105,31111,31119,31123,31127,31131],{"__ignoreMap":98},[102,31096,31097,31099],{"class":104,"line":105},[102,31098,109],{"class":108},[102,31100,8838],{"class":112},[102,31102,31103],{"class":104,"line":116},[102,31104,120],{"class":119},[102,31106,31107,31109],{"class":104,"line":123},[102,31108,151],{"class":108},[102,31110,6989],{"class":119},[102,31112,31113,31115,31117],{"class":104,"line":130},[102,31114,374],{"class":108},[102,31116,732],{"class":112},[102,31118,172],{"class":119},[102,31120,31121],{"class":104,"line":136},[102,31122,178],{"class":119},[102,31124,31125],{"class":104,"line":142},[102,31126,652],{"emptyLinePlaceholder":651},[102,31128,31129],{"class":104,"line":148},[102,31130,205],{"class":119},[102,31132,31133],{"class":104,"line":157},[102,31134,211],{"class":119},[14,31136,8875],{},[87,31138,31139],{"start":123},[62,31140,8880],{},[93,31142,31143],{"className":95,"code":8883,"language":97,"meta":98,"style":98},[83,31144,31145,31151,31155,31161,31169,31173,31177,31181,31191,31195,31199,31203],{"__ignoreMap":98},[102,31146,31147,31149],{"class":104,"line":105},[102,31148,109],{"class":108},[102,31150,8838],{"class":112},[102,31152,31153],{"class":104,"line":116},[102,31154,120],{"class":119},[102,31156,31157,31159],{"class":104,"line":123},[102,31158,151],{"class":108},[102,31160,6989],{"class":119},[102,31162,31163,31165,31167],{"class":104,"line":130},[102,31164,374],{"class":108},[102,31166,732],{"class":112},[102,31168,172],{"class":119},[102,31170,31171],{"class":104,"line":136},[102,31172,178],{"class":119},[102,31174,31175],{"class":104,"line":142},[102,31176,652],{"emptyLinePlaceholder":651},[102,31178,31179],{"class":104,"line":148},[102,31180,205],{"class":119},[102,31182,31183,31185,31187,31189],{"class":104,"line":157},[102,31184,7659],{"class":108},[102,31186,8172],{"class":108},[102,31188,8930],{"class":112},[102,31190,172],{"class":119},[102,31192,31193],{"class":104,"line":163},[102,31194,178],{"class":119},[102,31196,31197],{"class":104,"line":175},[102,31198,652],{"emptyLinePlaceholder":651},[102,31200,31201],{"class":104,"line":181},[102,31202,205],{"class":119},[102,31204,31205],{"class":104,"line":202},[102,31206,211],{"class":119},[14,31208,8818],{},[14,31210,8953],{},[8955,31212,8957],{},{"title":98,"searchDepth":116,"depth":116,"links":31214},[31215,31221],{"id":45,"depth":116,"text":46,"children":31216},[31217,31218,31219,31220],{"id":50,"depth":123,"text":51},{"id":876,"depth":123,"text":877},{"id":1051,"depth":123,"text":1052},{"id":1543,"depth":123,"text":1544},{"id":3944,"depth":116,"text":3945,"children":31222},[31223,31224,31225,31226,31227,31228,31229,31230,31231],{"id":3956,"depth":123,"text":3957},{"id":4252,"depth":123,"text":4253},{"id":4750,"depth":123,"text":4751},{"id":5857,"depth":123,"text":5858},{"id":6282,"depth":123,"text":6283},{"id":6766,"depth":123,"text":6767},{"id":7148,"depth":123,"text":7149},{"id":7563,"depth":123,"text":7564},{"id":8505,"depth":123,"text":8506},{},{"title":5,"description":8977},{"id":31235,"title":97,"body":31236,"description":31240,"extension":8978,"meta":31241,"navigation":651,"path":31243,"seo":31244,"stem":31245,"__hash__":31246},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":31237,"toc":31238},[],{"title":98,"searchDepth":116,"depth":116,"links":31239},[],null,{"category":31242},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":97,"description":31240},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":31248,"title":31249,"body":31250,"description":98,"extension":8978,"meta":31841,"navigation":651,"path":31842,"seo":31843,"stem":31844,"__hash__":31845},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":31251,"toc":31823},[31252,31255,31259,31262,31265,31268,31286,31291,31294,31297,31300,31303,31308,31311,31316,31319,31322,31326,31329,31332,31338,31341,31359,31363,31367,31370,31375,31378,31382,31385,31398,31401,31405,31408,31411,31414,31439,31442,31451,31462,31477,31509,31513,31520,31528,31532,31535,31538,31543,31547,31550,31553,31558,31561,31565,31568,31571,31576,31579,31583,31588,31592,31659,31663,31666,31669,31672,31675,31678,31684,31705,31708,31722,31731,31735,31738,31741,31746,31749,31754,31759,31762,31765,31770,31775,31778,31783,31788,31791,31796,31801,31804,31807,31812,31815,31820],[10,31253,31249],{"id":31254},"_1强化学习基本认识",[43,31256,31258],{"id":31257},"_11什么是强化学习","1.1.什么是强化学习",[14,31260,31261],{},"强化学习有两部分组成：智能体和环境；",[14,31263,31264],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,31266,31267],{},"强化学习与监督学习的区别:",[87,31269,31270,31273,31276,31279],{},[62,31271,31272],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[62,31274,31275],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[62,31277,31278],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[62,31280,31281,31282,31285],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[18,31283,31284],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,31287,31288],{},[6750,31289],{"alt":98,"src":31290},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,31292,31293],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,31295,31296],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,31298,31299],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,31301,31302],{},"获取奖励",[14,31304,31305],{},[6750,31306],{"alt":98,"src":31307},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,31309,31310],{},"强化学习可以分成标准强化学习和深度强化学习",[14,31312,31313],{},[6750,31314],{"alt":98,"src":31315},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,31317,31318],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,31320,31321],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[43,31323,31325],{"id":31324},"_12强化学习应用场景","1.2.强化学习应用场景",[14,31327,31328],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,31330,31331],{},"具身智能中的应用",[14,31333,31334,31337],{},[18,31335,31336],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,31339,31340],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,31342,31343,31344,31347,31348,31351,31352,31355,31356],{},"机器人是",[18,31345,31346],{},"躯体","，深度学习是",[18,31349,31350],{},"神经元****网络","，VLA是",[18,31353,31354],{},"通用的行为逻辑","，而强化学习是",[18,31357,31358],{},"教练",[43,31360,31362],{"id":31361},"_13序列决策","1.3.序列决策",[48,31364,31366],{"id":31365},"_131智能体与环境","1.3.1.智能体与环境",[14,31368,31369],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,31371,31372],{},[6750,31373],{"alt":98,"src":31374},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,31376,31377],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[48,31379,31381],{"id":31380},"_132奖励","1.3.2.奖励",[14,31383,31384],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,31386,31387,31388,31397],{},"取某个策略的表现如何。强化学习的目的就是",[18,31389,31390,31391,31396],{},"最大化",[18,31392,31393],{},[18,31394,31395],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,31399,31400],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[48,31402,31404],{"id":31403},"_133序列决策","1.3.3.序列决策",[14,31406,31407],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,31409,31410],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,31412,31413],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,31415,31416,31420,31421,31423,31424,31426,31427,31429,31430,81,31433,81,31436],{},[31417,31418,31419],"em",{},"Ht"," = ",[31417,31422,9623],{},"1*, a",[31417,31425,7039],{},", r",[31417,31428,7039],{},", . . . ,* ",[31417,31431,31432],{},"ot",[31417,31434,31435],{},", at ,",[31417,31437,31438],{},"rt",[14,31440,31441],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,31443,31444,31420,31447,2432,31449,4033],{},[31417,31445,31446],{},"st",[31417,31448,9097],{},[31417,31450,31419],{},[14,31452,31453,31454,31457,31458,31461],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[18,31455,31456],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[18,31459,31460],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,31463,31464,31465,31468,31469,31472,31473,31476],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[18,31466,31467],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[18,31470,31471],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[31417,31474,31475],{},"S, A, T, R, Ω, O, γ",")。",[14,31478,31479,31480,31482,31483,31485,31486,380,31488,31491,31492,31494,31495,380,31498,31501,31502,31504,31505,31508],{},"其中 ",[31417,31481,9714],{}," 表示状态空间，为隐变量，",[31417,31484,9269],{}," 为动作空间，",[31417,31487,9738],{},[31417,31489,31490],{},"s ′ |s, a",") 为状态转移概率，",[31417,31493,9689],{}," 为奖励函数，",[31417,31496,31497],{},"Ω",[31417,31499,31500],{},"o|s, a",") 为观测概率，",[31417,31503,9617],{}," 为观测空间，",[31417,31506,31507],{},"γ"," 为折扣因子。",[43,31510,31512],{"id":31511},"_14动作空间","1.4.动作空间",[14,31514,31515,31516,31519],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[18,31517,31518],{},"动作空间"," ，动作空间分为:",[87,31521,31522,31525],{},[62,31523,31524],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[62,31526,31527],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[43,31529,31531],{"id":31530},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,31533,31534],{},"由策略、价值函数、模型三部分组成",[14,31536,31537],{},"这三者组成马尔可夫决策过程",[14,31539,31540],{},[6750,31541],{"alt":98,"src":31542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[48,31544,31546],{"id":31545},"_151策略","1.5.1.策略",[14,31548,31549],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,31551,31552],{},"策略可分为两种：",[14,31554,31555],{},[6750,31556],{"alt":98,"src":31557},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,31559,31560],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[48,31562,31564],{"id":31563},"_152价值函数","1.5.2.价值函数",[14,31566,31567],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,31569,31570],{},"价值函数中有一个折扣因子，类似于存款利息",[14,31572,31573],{},[6750,31574],{"alt":98,"src":31575},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,31577,31578],{},"进入某个状态采取的最优动作可以通过Q函数得到",[48,31580,31582],{"id":31581},"_153模型","1.5.3.模型",[14,31584,31585],{},[6750,31586],{"alt":98,"src":31587},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[43,31589,31591],{"id":31590},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[9177,31593,31594,31605],{},[9180,31595,31596],{},[9183,31597,31598,31602],{},[9186,31599,31601],{"align":31600},"left","类型",[9186,31603,31604],{"align":31600},"特点",[9223,31606,31607,31617,31627,31637,31649],{},[9183,31608,31609,31614],{},[9228,31610,31611],{"align":31600},[18,31612,31613],{},"基于价值的智能体",[9228,31615,31616],{"align":31600},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[9183,31618,31619,31624],{},[9228,31620,31621],{"align":31600},[18,31622,31623],{},"基于策略的智能体",[9228,31625,31626],{"align":31600},"直接学习策略，没有学习价值函数",[9183,31628,31629,31634],{},[9228,31630,31631],{"align":31600},[18,31632,31633],{},"演员-评论员智能体",[9228,31635,31636],{"align":31600},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[9183,31638,31639,31644],{},[9228,31640,31641],{"align":31600},[18,31642,31643],{},"有模型强化学习智能体",[9228,31645,31646],{"align":31600},[6750,31647],{"alt":98,"src":31648},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[9183,31650,31651,31656],{},[9228,31652,31653],{"align":31600},[18,31654,31655],{},"免模型强化学习智能体",[9228,31657,31658],{"align":31600},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[43,31660,31662],{"id":31661},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,31664,31665],{},"学习和规划是序列决策的两个基本问题",[14,31667,31668],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,31670,31671],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,31673,31674],{},"强化学习用到的库：Gym",[14,31676,31677],{},"Gym可以检验强化学习算法的优劣",[14,31679,31680,31683],{},[18,31681,31682],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[93,31685,31689],{"className":31686,"code":31687,"language":31688,"meta":98,"style":98},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[83,31690,31691],{"__ignoreMap":98},[102,31692,31693,31696,31699,31702],{"class":104,"line":105},[102,31694,31695],{"class":112},"pip",[102,31697,31698],{"class":278}," install",[102,31700,31701],{"class":278}," gym==",[102,31703,31704],{"class":187},"0.25.2\n",[14,31706,31707],{},"显示图形界面需要",[93,31709,31711],{"className":31686,"code":31710,"language":31688,"meta":98,"style":98},"pip install pygame\n",[83,31712,31713],{"__ignoreMap":98},[102,31714,31715,31717,31719],{"class":104,"line":105},[102,31716,31695],{"class":112},[102,31718,31698],{"class":278},[102,31720,31721],{"class":278}," pygame\n",[14,31723,31724,31725],{},"有关Gym库的相关文档介绍：",[9275,31726,31730],{"href":31727,"rel":31728},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[31729],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[43,31732,31734],{"id":31733},"_18一些补充基础概念","1.8.一些补充基础概念",[14,31736,31737],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,31739,31740],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,31742,31743],{},[6750,31744],{"alt":98,"src":31745},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,31747,31748],{},"折扣率需要自己来设定",[14,31750,31751],{},[6750,31752],{"alt":98,"src":31753},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[87,31755,31756],{},[62,31757,31758],{},"状态转移函数：",[14,31760,31761],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,31763,31764],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,31766,31767],{},[6750,31768],{"alt":98,"src":31769},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[87,31771,31772],{"start":116},[62,31773,31774],{},"动作价值函数：",[14,31776,31777],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,31779,31780],{},[6750,31781],{"alt":98,"src":31782},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[87,31784,31785],{"start":123},[62,31786,31787],{},"最优动作价值函数：",[14,31789,31790],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[14,31792,31793],{},[6750,31794],{"alt":98,"src":31795},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[87,31797,31798],{"start":130},[62,31799,31800],{},"状态价值函数:",[14,31802,31803],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,31805,31806],{},"它衡量的是“一个具体动作”的长期价值",[14,31808,31809],{},[6750,31810],{"alt":98,"src":31811},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,31813,31814],{},"几个价值函数之间的比较：",[14,31816,31817],{},[6750,31818],{"alt":98,"src":31819},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[8955,31821,31822],{},"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":98,"searchDepth":116,"depth":116,"links":31824},[31825,31826,31827,31832,31833,31838,31839,31840],{"id":31257,"depth":116,"text":31258},{"id":31324,"depth":116,"text":31325},{"id":31361,"depth":116,"text":31362,"children":31828},[31829,31830,31831],{"id":31365,"depth":123,"text":31366},{"id":31380,"depth":123,"text":31381},{"id":31403,"depth":123,"text":31404},{"id":31511,"depth":116,"text":31512},{"id":31530,"depth":116,"text":31531,"children":31834},[31835,31836,31837],{"id":31545,"depth":123,"text":31546},{"id":31563,"depth":123,"text":31564},{"id":31581,"depth":123,"text":31582},{"id":31590,"depth":116,"text":31591},{"id":31661,"depth":116,"text":31662},{"id":31733,"depth":116,"text":31734},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":31249,"description":98},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":31847,"title":31848,"body":31849,"description":31856,"extension":8978,"meta":31867,"navigation":651,"path":31868,"seo":31869,"stem":31870,"__hash__":31871},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":31850,"toc":31865},[31851,31854,31857,31862],[10,31852,31848],{"id":31853},"_2马尔可夫决策过程",[14,31855,31856],{},"这是强化学习的基本框架",[14,31858,31859],{},[6750,31860],{"alt":98,"src":31861},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,31863,31864],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":98,"searchDepth":116,"depth":116,"links":31866},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":31848,"description":31856},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":31873,"title":31874,"body":31875,"description":98,"extension":8978,"meta":31991,"navigation":651,"path":31992,"seo":31993,"stem":31994,"__hash__":31995},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":31876,"toc":31986},[31877,31880,31884,31887,31892,31897,31900,31905,31908,31913,31916,31920,31925,31928,31933,31938,31943,31946,31950,31955,31958,31963,31968,31973,31978,31981],[10,31878,31874],{"id":31879},"_3动作价值函数",[43,31881,31883],{"id":31882},"_31dqn","3.1.DQN",[14,31885,31886],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,31888,31889],{},[6750,31890],{"alt":98,"src":31891},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,31893,31894],{},[6750,31895],{"alt":98,"src":31896},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,31898,31899],{},"DQN算法的描述：",[14,31901,31902],{},[6750,31903],{"alt":98,"src":31904},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,31906,31907],{},"这里的Dense指的是全连接层",[14,31909,31910],{},[6750,31911],{"alt":98,"src":31912},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,31914,31915],{},"当前观测的状态为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算法",[43,31917,31919],{"id":31918},"_32dqn的举例","3.2.DQN的举例",[14,31921,31922],{},[6750,31923],{"alt":98,"src":31924},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,31926,31927],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,31929,31930],{},[6750,31931],{"alt":98,"src":31932},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,31934,31935],{},[6750,31936],{"alt":98,"src":31937},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,31939,31940],{},[6750,31941],{"alt":98,"src":31942},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,31944,31945],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[43,31947,31949],{"id":31948},"_33td算法","3.3.TD算法",[14,31951,31952],{},[6750,31953],{"alt":98,"src":31954},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,31956,31957],{},"强化学习TD算法公式的粗略解释：",[14,31959,31960],{},[6750,31961],{"alt":98,"src":31962},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,31964,31965],{},[6750,31966],{"alt":98,"src":31967},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,31969,31970],{},[6750,31971],{"alt":98,"src":31972},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,31974,31975],{},[6750,31976],{"alt":98,"src":31977},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,31979,31980],{},"TD算法总结：",[14,31982,31983],{},[6750,31984],{"alt":98,"src":31985},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":98,"searchDepth":116,"depth":116,"links":31987},[31988,31989,31990],{"id":31882,"depth":116,"text":31883},{"id":31918,"depth":116,"text":31919},{"id":31948,"depth":116,"text":31949},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":31874,"description":98},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":31997,"title":31998,"body":31999,"description":98,"extension":8978,"meta":32232,"navigation":651,"path":32233,"seo":32234,"stem":32235,"__hash__":32236},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":32000,"toc":32228},[32001,32004,32008,32011,32014,32019,32024,32027,32032,32037,32040,32045,32048,32053,32056,32061,32064,32069,32072,32077,32082,32085,32090,32093,32096,32101,32104,32109,32114,32118,32121,32124,32129,32134,32137,32142,32147,32150,32155,32158,32161,32166,32169,32174,32177,32182,32187,32190,32195,32200,32203,32208,32211,32216,32219],[10,32002,31998],{"id":32003},"_4策略学习",[43,32005,32007],{"id":32006},"_41概念描述","4.1.概念描述",[14,32009,32010],{},"用神经网络（策略网络）近似策略函数",[14,32012,32013],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,32015,32016],{},[6750,32017],{"alt":98,"src":32018},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,32020,32021],{},[6750,32022],{"alt":98,"src":32023},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,32025,32026],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,32028,32029],{},[6750,32030],{"alt":98,"src":32031},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,32033,32034],{},[6750,32035],{"alt":98,"src":32036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,32038,32039],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,32041,32042],{},[6750,32043],{"alt":98,"src":32044},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,32046,32047],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,32049,32050],{},[6750,32051],{"alt":98,"src":32052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,32054,32055],{},"改进theta要用到策略梯度算法",[14,32057,32058],{},[6750,32059],{"alt":98,"src":32060},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,32062,32063],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,32065,32066],{},[6750,32067],{"alt":98,"src":32068},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,32070,32071],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,32073,32074],{},[6750,32075],{"alt":98,"src":32076},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,32078,32079],{},[6750,32080],{"alt":98,"src":32081},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,32083,32084],{},"梯度公式总结：",[14,32086,32087],{},[6750,32088],{"alt":98,"src":32089},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,32091,32092],{},"两个公式的分别应用场景：",[14,32094,32095],{},"对于离散的动作：",[14,32097,32098],{},[6750,32099],{"alt":98,"src":32100},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,32102,32103],{},"对于连续的动作：",[14,32105,32106],{},[6750,32107],{"alt":98,"src":32108},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,32110,32111],{},[6750,32112],{"alt":98,"src":32113},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[43,32115,32117],{"id":32116},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,32119,32120],{},"使用蒙特卡洛来近似计算策略梯度",[14,32122,32123],{},"蒙特卡洛法的解释如下：",[14,32125,32126],{},[6750,32127],{"alt":98,"src":32128},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,32130,32131],{},[6750,32132],{"alt":98,"src":32133},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,32135,32136],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[87,32138,32139],{},[62,32140,32141],{},"方法一：reinforce算法",[14,32143,32144],{},[6750,32145],{"alt":98,"src":32146},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,32148,32149],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[87,32151,32152],{"start":116},[62,32153,32154],{},"方法二：actor-critic算法",[14,32156,32157],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,32159,32160],{},"两个网络的构建：",[14,32162,32163],{},[6750,32164],{"alt":98,"src":32165},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,32167,32168],{},"actor网路：",[14,32170,32171],{},[6750,32172],{"alt":98,"src":32173},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,32175,32176],{},"critic网络",[14,32178,32179],{},[6750,32180],{"alt":98,"src":32181},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[87,32183,32184],{"start":123},[62,32185,32186],{},"网络的训练",[14,32188,32189],{},"网络描述",[14,32191,32192],{},[6750,32193],{"alt":98,"src":32194},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,32196,32197],{},[6750,32198],{"alt":98,"src":32199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,32201,32202],{},"TD算法更新梯度：",[14,32204,32205],{},[6750,32206],{"alt":98,"src":32207},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,32209,32210],{},"策略网络更新梯度：",[14,32212,32213],{},[6750,32214],{"alt":98,"src":32215},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,32217,32218],{},"训练整个流程的具体描述：",[14,32220,32221,32224,32225],{},[6750,32222],{"alt":98,"src":32223},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[6750,32226],{"alt":98,"src":32227},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":98,"searchDepth":116,"depth":116,"links":32229},[32230,32231],{"id":32006,"depth":116,"text":32007},{"id":32116,"depth":116,"text":32117},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":31998,"description":98},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":32238,"title":32239,"body":32240,"description":32247,"extension":8978,"meta":32297,"navigation":651,"path":32298,"seo":32299,"stem":32300,"__hash__":32301},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":32241,"toc":32293},[32242,32245,32248,32252,32255,32260,32264,32267,32272,32275,32280,32285,32288],[10,32243,32239],{"id":32244},"_5alphago算法",[14,32246,32247],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[43,32249,32251],{"id":32250},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,32253,32254],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,32256,32257],{},[6750,32258],{"alt":98,"src":32259},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[43,32261,32263],{"id":32262},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,32265,32266],{},"采用强化学习的方式训练策略网络",[14,32268,32269],{},[6750,32270],{"alt":98,"src":32271},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,32273,32274],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,32276,32277],{},[6750,32278],{"alt":98,"src":32279},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,32281,32282],{},[6750,32283],{"alt":98,"src":32284},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,32286,32287],{},"强化学习训练策略网络的总结：",[14,32289,32290],{},[6750,32291],{"alt":98,"src":32292},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":98,"searchDepth":116,"depth":116,"links":32294},[32295,32296],{"id":32250,"depth":116,"text":32251},{"id":32262,"depth":116,"text":32263},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":32239,"description":32247},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":32303,"title":32304,"body":32305,"description":32312,"extension":8978,"meta":32315,"navigation":651,"path":32316,"seo":32317,"stem":32318,"__hash__":32319},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":32306,"toc":32313},[32307,32310],[10,32308,32304],{"id":32309},"_6价值网络",[14,32311,32312],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":98,"searchDepth":116,"depth":116,"links":32314},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":32304,"description":32312},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":32321,"title":32322,"body":32323,"description":32327,"extension":8978,"meta":32328,"navigation":651,"path":32329,"seo":32330,"stem":32331,"__hash__":32332},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":32324,"toc":32325},[],{"title":98,"searchDepth":116,"depth":116,"links":32326},[],"记录自己的强化学习笔记。",{"category":31242},"\u002Fwiki\u002F2025-12-04",{"title":32322,"description":32327},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":32334,"title":32335,"body":32336,"description":31240,"extension":8978,"meta":32375,"navigation":651,"path":32376,"seo":32377,"stem":32378,"__hash__":32379},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":32337,"toc":32373},[32338,32341,32344,32350,32353,32359,32362,32367,32370],[10,32339,32335],{"id":32340},"_1-项目概览与官方资源",[14,32342,32343],{},"官方文档：",[14,32345,32346],{},[9275,32347,32348],{"href":32348,"rel":32349},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[31729],[14,32351,32352],{},"官方代码仓库：",[14,32354,32355],{},[9275,32356,32357],{"href":32357,"rel":32358},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[31729],[14,32360,32361],{},"复现大体流程：",[14,32363,32364],{},[6750,32365],{"alt":98,"src":32366},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,32368,32369],{},"本教程的目标是打通这条链路：",[14,32371,32372],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":98,"searchDepth":116,"depth":116,"links":32374},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":32335,"description":31240},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":32381,"title":32382,"body":32383,"description":31240,"extension":8978,"meta":32499,"navigation":651,"path":32500,"seo":32501,"stem":32502,"__hash__":32503},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":32384,"toc":32494},[32385,32388,32392,32395,32402,32406,32409,32418,32428,32432,32462,32465,32491],[10,32386,32382],{"id":32387},"_2-环境准备与设备连接",[43,32389,32391],{"id":32390},"_21-系统与环境","2.1 系统与环境",[14,32393,32394],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,32396,32397,32398,32401],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[83,32399,32400],{},"lerobot"," 依赖。",[43,32403,32405],{"id":32404},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,32407,32408],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[93,32410,32412],{"className":31686,"code":32411,"language":31688,"meta":98,"style":98},"lerobot-find-out\n",[83,32413,32414],{"__ignoreMap":98},[102,32415,32416],{"class":104,"line":105},[102,32417,32411],{"class":112},[14,32419,32420,32421,9250,32424,32427],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[83,32422,32423],{},"\u002Fdev\u002FttyACM0",[83,32425,32426],{},"\u002Fdev\u002FttyACM1","）。",[43,32429,32431],{"id":32430},"_23-串口授权","2.3 串口授权",[93,32433,32435],{"className":31686,"code":32434,"language":31688,"meta":98,"style":98},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[83,32436,32437,32451],{"__ignoreMap":98},[102,32438,32439,32442,32445,32448],{"class":104,"line":105},[102,32440,32441],{"class":112},"sudo",[102,32443,32444],{"class":278}," chmod",[102,32446,32447],{"class":187}," 666",[102,32449,32450],{"class":278}," \u002Fdev\u002FttyACM0\n",[102,32452,32453,32455,32457,32459],{"class":104,"line":116},[102,32454,32441],{"class":112},[102,32456,32444],{"class":278},[102,32458,32447],{"class":187},[102,32460,32461],{"class":278}," \u002Fdev\u002FttyACM1\n",[14,32463,32464],{},"说明：",[59,32466,32467,32472,32478,32488],{},[62,32468,32469,32471],{},[83,32470,32441],{},"：以 root 权限执行命令。",[62,32473,32474,32477],{},[83,32475,32476],{},"chmod","：修改设备节点权限。",[62,32479,32480,32483,32484,32487],{},[83,32481,32482],{},"666","：",[83,32485,32486],{},"rw-rw-rw-","，所有用户可读写。",[62,32489,32490],{},"串口号必须替换为你机器上的真实端口。",[8955,32492,32493],{},"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":98,"searchDepth":116,"depth":116,"links":32495},[32496,32497,32498],{"id":32390,"depth":116,"text":32391},{"id":32404,"depth":116,"text":32405},{"id":32430,"depth":116,"text":32431},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":32382,"description":31240},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":32505,"title":32506,"body":32507,"description":31240,"extension":8978,"meta":32668,"navigation":651,"path":32669,"seo":32670,"stem":32671,"__hash__":32672},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":32508,"toc":32664},[32509,32513,32517,32523,32526,32583,32586,32590,32593,32661],[10,32510,32512],{"id":32511},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[43,32514,32516],{"id":32515},"_31-配置电机-id","3.1 配置电机 ID",[14,32518,32519,32520,32522],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[83,32521,7039],{},"，需要改成机械臂链路里不冲突的编号。",[14,32524,32525],{},"方式一：用 LeRobot 命令逐步写入。",[93,32527,32529],{"className":31686,"code":32528,"language":31688,"meta":98,"style":98},"# 主臂舵机配置 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",[83,32530,32531,32536,32544,32551,32556,32560,32565,32571,32578],{"__ignoreMap":98},[102,32532,32533],{"class":104,"line":105},[102,32534,32535],{"class":126},"# 主臂舵机配置 ID\n",[102,32537,32538,32541],{"class":104,"line":116},[102,32539,32540],{"class":112},"lerobot-setup-motors",[102,32542,32543],{"class":187}," \\\n",[102,32545,32546,32549],{"class":104,"line":123},[102,32547,32548],{"class":187},"  --teleop.type=so101_leader",[102,32550,32543],{"class":187},[102,32552,32553],{"class":104,"line":130},[102,32554,32555],{"class":187},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[102,32557,32558],{"class":104,"line":136},[102,32559,652],{"emptyLinePlaceholder":651},[102,32561,32562],{"class":104,"line":142},[102,32563,32564],{"class":126},"# 从臂舵机配置 ID\n",[102,32566,32567,32569],{"class":104,"line":148},[102,32568,32540],{"class":112},[102,32570,32543],{"class":187},[102,32572,32573,32576],{"class":104,"line":157},[102,32574,32575],{"class":187},"  --robot.type=so101_follower",[102,32577,32543],{"class":187},[102,32579,32580],{"class":104,"line":163},[102,32581,32582],{"class":187},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,32584,32585],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[43,32587,32589],{"id":32588},"_32-机械臂校准","3.2 机械臂校准",[14,32591,32592],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[93,32594,32596],{"className":31686,"code":32595,"language":31688,"meta":98,"style":98},"# 主臂校准\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",[83,32597,32598,32603,32610,32616,32623,32628,32632,32637,32643,32649,32656],{"__ignoreMap":98},[102,32599,32600],{"class":104,"line":105},[102,32601,32602],{"class":126},"# 主臂校准\n",[102,32604,32605,32608],{"class":104,"line":116},[102,32606,32607],{"class":112},"lerobot-calibrate",[102,32609,32543],{"class":187},[102,32611,32612,32614],{"class":104,"line":123},[102,32613,32548],{"class":187},[102,32615,32543],{"class":187},[102,32617,32618,32621],{"class":104,"line":130},[102,32619,32620],{"class":187},"  --teleop.port=\u002Fdev\u002FttyACM0",[102,32622,32543],{"class":187},[102,32624,32625],{"class":104,"line":136},[102,32626,32627],{"class":187},"  --teleop.id=my_awesome_leader_arm\n",[102,32629,32630],{"class":104,"line":142},[102,32631,652],{"emptyLinePlaceholder":651},[102,32633,32634],{"class":104,"line":148},[102,32635,32636],{"class":126},"# 从臂校准\n",[102,32638,32639,32641],{"class":104,"line":157},[102,32640,32607],{"class":112},[102,32642,32543],{"class":187},[102,32644,32645,32647],{"class":104,"line":163},[102,32646,32575],{"class":187},[102,32648,32543],{"class":187},[102,32650,32651,32654],{"class":104,"line":175},[102,32652,32653],{"class":187},"  --robot.port=\u002Fdev\u002FttyACM1",[102,32655,32543],{"class":187},[102,32657,32658],{"class":104,"line":181},[102,32659,32660],{"class":187},"  --robot.id=my_awesome_follower_arm\n",[8955,32662,32663],{},"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":98,"searchDepth":116,"depth":116,"links":32665},[32666,32667],{"id":32515,"depth":116,"text":32516},{"id":32588,"depth":116,"text":32589},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":32506,"description":31240},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":32674,"title":32675,"body":32676,"description":31240,"extension":8978,"meta":32867,"navigation":651,"path":32868,"seo":32869,"stem":32870,"__hash__":32871},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":32677,"toc":32863},[32678,32681,32685,32732,32736,32749,32812,32815,32860],[10,32679,32675],{"id":32680},"_4-遥操与相机接入",[43,32682,32684],{"id":32683},"_41-不带相机遥操","4.1 不带相机遥操",[93,32686,32688],{"className":31686,"code":32687,"language":31688,"meta":98,"style":98},"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",[83,32689,32690,32697,32703,32709,32716,32722,32728],{"__ignoreMap":98},[102,32691,32692,32695],{"class":104,"line":105},[102,32693,32694],{"class":112},"lerobot-teleoperate",[102,32696,32543],{"class":187},[102,32698,32699,32701],{"class":104,"line":116},[102,32700,32575],{"class":187},[102,32702,32543],{"class":187},[102,32704,32705,32707],{"class":104,"line":123},[102,32706,32653],{"class":187},[102,32708,32543],{"class":187},[102,32710,32711,32714],{"class":104,"line":130},[102,32712,32713],{"class":187},"  --robot.id=my_awesome_follower_arm",[102,32715,32543],{"class":187},[102,32717,32718,32720],{"class":104,"line":136},[102,32719,32548],{"class":187},[102,32721,32543],{"class":187},[102,32723,32724,32726],{"class":104,"line":142},[102,32725,32620],{"class":187},[102,32727,32543],{"class":187},[102,32729,32730],{"class":104,"line":148},[102,32731,32627],{"class":187},[43,32733,32735],{"id":32734},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[93,32737,32739],{"className":31686,"code":32738,"language":31688,"meta":98,"style":98},"lerobot-find-cameras opencv\n",[83,32740,32741],{"__ignoreMap":98},[102,32742,32743,32746],{"class":104,"line":105},[102,32744,32745],{"class":112},"lerobot-find-cameras",[102,32747,32748],{"class":278}," opencv\n",[93,32750,32752],{"className":31686,"code":32751,"language":31688,"meta":98,"style":98},"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",[83,32753,32754,32760,32766,32772,32778,32788,32794,32800,32807],{"__ignoreMap":98},[102,32755,32756,32758],{"class":104,"line":105},[102,32757,32694],{"class":112},[102,32759,32543],{"class":187},[102,32761,32762,32764],{"class":104,"line":116},[102,32763,32575],{"class":187},[102,32765,32543],{"class":187},[102,32767,32768,32770],{"class":104,"line":123},[102,32769,32653],{"class":187},[102,32771,32543],{"class":187},[102,32773,32774,32776],{"class":104,"line":130},[102,32775,32713],{"class":187},[102,32777,32543],{"class":187},[102,32779,32780,32783,32786],{"class":104,"line":136},[102,32781,32782],{"class":187},"  --robot.cameras=",[102,32784,32785],{"class":278},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[102,32787,32543],{"class":187},[102,32789,32790,32792],{"class":104,"line":142},[102,32791,32548],{"class":187},[102,32793,32543],{"class":187},[102,32795,32796,32798],{"class":104,"line":148},[102,32797,32620],{"class":187},[102,32799,32543],{"class":187},[102,32801,32802,32805],{"class":104,"line":157},[102,32803,32804],{"class":187},"  --teleop.id=my_awesome_leader_arm",[102,32806,32543],{"class":187},[102,32808,32809],{"class":104,"line":163},[102,32810,32811],{"class":187},"  --display_data=true\n",[14,32813,32814],{},"相机参数说明：",[59,32816,32817,32823,32829,32838,32848,32854],{},[62,32818,32819,32822],{},[83,32820,32821],{},"front","：相机名称。",[62,32824,32825,32828],{},[83,32826,32827],{},"type: opencv","：相机驱动类型。",[62,32830,32831,32834,32835,32427],{},[83,32832,32833],{},"index_or_path","：设备编号或设备路径（如 ",[83,32836,32837],{},"\u002Fdev\u002Fvideo4",[62,32839,32840,32843,32844,32847],{},[83,32841,32842],{},"width"," \u002F ",[83,32845,32846],{},"height","：图像分辨率。",[62,32849,32850,32853],{},[83,32851,32852],{},"fps","：采样帧率。",[62,32855,32856,32859],{},[83,32857,32858],{},"--display_data=true","：启用实时可视化。",[8955,32861,32862],{},"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":98,"searchDepth":116,"depth":116,"links":32864},[32865,32866],{"id":32683,"depth":116,"text":32684},{"id":32734,"depth":116,"text":32735},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":32675,"description":31240},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":32873,"title":32874,"body":32875,"description":31240,"extension":8978,"meta":33047,"navigation":651,"path":33048,"seo":33049,"stem":33050,"__hash__":33051},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":32876,"toc":33042},[32877,32881,32885,32890,32895,32898,32940,32946,32950,32999,33004,33008,33011,33019,33024,33029,33034,33039],[10,32878,32880],{"id":32879},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[43,32882,32884],{"id":32883},"_51-生成访问令牌","5.1 生成访问令牌",[14,32886,32887],{},[6750,32888],{"alt":98,"src":32889},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,32891,32892],{},[6750,32893],{"alt":98,"src":32894},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,32896,32897],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[93,32899,32901],{"className":31686,"code":32900,"language":31688,"meta":98,"style":98},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[83,32902,32903,32916],{"__ignoreMap":98},[102,32904,32905,32908,32911,32913],{"class":104,"line":105},[102,32906,32907],{"class":108},"export",[102,32909,32910],{"class":119}," HF_TOKEN",[102,32912,260],{"class":108},[102,32914,32915],{"class":278},"\"your_huggingface_token\"\n",[102,32917,32918,32921,32924,32927,32930,32932,32935,32937],{"class":104,"line":116},[102,32919,32920],{"class":112},"hf",[102,32922,32923],{"class":278}," auth",[102,32925,32926],{"class":278}," login",[102,32928,32929],{"class":187}," --token",[102,32931,18487],{"class":278},[102,32933,32934],{"class":119},"$HF_TOKEN",[102,32936,9288],{"class":278},[102,32938,32939],{"class":187}," --add-to-git-credential\n",[14,32941,32942,32945],{},[83,32943,32944],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[43,32947,32949],{"id":32948},"_52-验证登录","5.2 验证登录",[93,32951,32953],{"className":31686,"code":32952,"language":31688,"meta":98,"style":98},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[83,32954,32955,32986],{"__ignoreMap":98},[102,32956,32957,32960,32962,32965,32967,32969,32972,32975,32978,32981,32984],{"class":104,"line":105},[102,32958,32959],{"class":119},"HF_USER",[102,32961,260],{"class":108},[102,32963,32964],{"class":119},"$(",[102,32966,32920],{"class":112},[102,32968,32923],{"class":278},[102,32970,32971],{"class":278}," whoami",[102,32973,32974],{"class":108}," |",[102,32976,32977],{"class":112}," head",[102,32979,32980],{"class":187}," -n",[102,32982,32983],{"class":187}," 1",[102,32985,390],{"class":119},[102,32987,32988,32991,32993,32996],{"class":104,"line":116},[102,32989,32990],{"class":187},"echo",[102,32992,18487],{"class":278},[102,32994,32995],{"class":119},"$HF_USER",[102,32997,32998],{"class":278},"\"\n",[14,33000,33001],{},[6750,33002],{"alt":98,"src":33003},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[43,33005,33007],{"id":33006},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,33009,33010],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[59,33012,33013,33016],{},[62,33014,33015],{},"Dataset Repo（用于上传演示数据）",[62,33017,33018],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,33020,33021],{},[6750,33022],{"alt":98,"src":33023},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,33025,33026],{},[6750,33027],{"alt":98,"src":33028},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,33030,33031],{},[6750,33032],{"alt":98,"src":33033},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,33035,33036],{},[6750,33037],{"alt":98,"src":33038},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[8955,33040,33041],{},"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":98,"searchDepth":116,"depth":116,"links":33043},[33044,33045,33046],{"id":32883,"depth":116,"text":32884},{"id":32948,"depth":116,"text":32949},{"id":33006,"depth":116,"text":33007},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":32874,"description":31240},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":33053,"title":33054,"body":33055,"description":31240,"extension":8978,"meta":33252,"navigation":651,"path":33253,"seo":33254,"stem":33255,"__hash__":33256},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":33056,"toc":33247},[33057,33061,33065,33161,33169,33174,33178,33194,33197,33201,33244],[10,33058,33060],{"id":33059},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[43,33062,33064],{"id":33063},"_61-录制示教数据","6.1 录制示教数据",[93,33066,33068],{"className":31686,"code":33067,"language":31688,"meta":98,"style":98},"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",[83,33069,33070,33077,33083,33089,33095,33104,33110,33116,33122,33129,33139,33146,33156],{"__ignoreMap":98},[102,33071,33072,33075],{"class":104,"line":105},[102,33073,33074],{"class":112},"lerobot-record",[102,33076,32543],{"class":187},[102,33078,33079,33081],{"class":104,"line":116},[102,33080,32575],{"class":187},[102,33082,32543],{"class":187},[102,33084,33085,33087],{"class":104,"line":123},[102,33086,32653],{"class":187},[102,33088,32543],{"class":187},[102,33090,33091,33093],{"class":104,"line":130},[102,33092,32713],{"class":187},[102,33094,32543],{"class":187},[102,33096,33097,33099,33102],{"class":104,"line":136},[102,33098,32782],{"class":187},[102,33100,33101],{"class":278},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[102,33103,32543],{"class":187},[102,33105,33106,33108],{"class":104,"line":142},[102,33107,32548],{"class":187},[102,33109,32543],{"class":187},[102,33111,33112,33114],{"class":104,"line":148},[102,33113,32620],{"class":187},[102,33115,32543],{"class":187},[102,33117,33118,33120],{"class":104,"line":157},[102,33119,32804],{"class":187},[102,33121,32543],{"class":187},[102,33123,33124,33127],{"class":104,"line":163},[102,33125,33126],{"class":187},"  --display_data=true",[102,33128,32543],{"class":187},[102,33130,33131,33134,33137],{"class":104,"line":175},[102,33132,33133],{"class":187},"  --dataset.repo_id=",[102,33135,33136],{"class":278},"\"Embodied-AI-6\u002Fso101_test\"",[102,33138,32543],{"class":187},[102,33140,33141,33144],{"class":104,"line":181},[102,33142,33143],{"class":187},"  --dataset.num_episodes=10",[102,33145,32543],{"class":187},[102,33147,33148,33151,33154],{"class":104,"line":202},[102,33149,33150],{"class":187},"  --dataset.single_task=",[102,33152,33153],{"class":278},"\"Grab the green cube\"",[102,33155,32543],{"class":187},[102,33157,33158],{"class":104,"line":208},[102,33159,33160],{"class":187},"  --resume=true\n",[59,33162,33163],{},[62,33164,33165,33168],{},[83,33166,33167],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,33170,33171],{},[6750,33172],{"alt":98,"src":33173},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[43,33175,33177],{"id":33176},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[93,33179,33181],{"className":31686,"code":33180,"language":31688,"meta":98,"style":98},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[83,33182,33183],{"__ignoreMap":98},[102,33184,33185,33188,33191],{"class":104,"line":105},[102,33186,33187],{"class":112},"rm",[102,33189,33190],{"class":187}," -rf",[102,33192,33193],{"class":278}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,33195,33196],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[43,33198,33200],{"id":33199},"_63-回放指定-episode","6.3 回放指定 episode",[93,33202,33204],{"className":31686,"code":33203,"language":31688,"meta":98,"style":98},"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",[83,33205,33206,33213,33219,33225,33231,33239],{"__ignoreMap":98},[102,33207,33208,33211],{"class":104,"line":105},[102,33209,33210],{"class":112},"lerobot-replay",[102,33212,32543],{"class":187},[102,33214,33215,33217],{"class":104,"line":116},[102,33216,32575],{"class":187},[102,33218,32543],{"class":187},[102,33220,33221,33223],{"class":104,"line":123},[102,33222,32653],{"class":187},[102,33224,32543],{"class":187},[102,33226,33227,33229],{"class":104,"line":130},[102,33228,32713],{"class":187},[102,33230,32543],{"class":187},[102,33232,33233,33235,33237],{"class":104,"line":136},[102,33234,33133],{"class":187},[102,33236,33136],{"class":278},[102,33238,32543],{"class":187},[102,33240,33241],{"class":104,"line":142},[102,33242,33243],{"class":187},"  --dataset.episode=0\n",[8955,33245,33246],{},"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":98,"searchDepth":116,"depth":116,"links":33248},[33249,33250,33251],{"id":33063,"depth":116,"text":33064},{"id":33176,"depth":116,"text":33177},{"id":33199,"depth":116,"text":33200},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":33054,"description":31240},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":33258,"title":33259,"body":33260,"description":31240,"extension":8978,"meta":33388,"navigation":651,"path":33389,"seo":33390,"stem":33391,"__hash__":33392},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":33261,"toc":33386},[33262,33266,33329,33332,33379,33384],[10,33263,33265],{"id":33264},"_7-act-模型训练","7. ACT 模型训练",[93,33267,33269],{"className":31686,"code":33268,"language":31688,"meta":98,"style":98},"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",[83,33270,33271,33278,33286,33293,33300,33307,33314,33321],{"__ignoreMap":98},[102,33272,33273,33276],{"class":104,"line":105},[102,33274,33275],{"class":112},"lerobot-train",[102,33277,32543],{"class":187},[102,33279,33280,33282,33284],{"class":104,"line":116},[102,33281,33133],{"class":187},[102,33283,33136],{"class":278},[102,33285,32543],{"class":187},[102,33287,33288,33291],{"class":104,"line":123},[102,33289,33290],{"class":187},"  --policy.type=act",[102,33292,32543],{"class":187},[102,33294,33295,33298],{"class":104,"line":130},[102,33296,33297],{"class":187},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[102,33299,32543],{"class":187},[102,33301,33302,33305],{"class":104,"line":136},[102,33303,33304],{"class":187},"  --job_name=act_so101_test",[102,33306,32543],{"class":187},[102,33308,33309,33312],{"class":104,"line":142},[102,33310,33311],{"class":187},"  --policy.device=cuda",[102,33313,32543],{"class":187},[102,33315,33316,33319],{"class":104,"line":148},[102,33317,33318],{"class":187},"  --wandb.enable=false",[102,33320,32543],{"class":187},[102,33322,33323,33326],{"class":104,"line":157},[102,33324,33325],{"class":187},"  --policy.repo_id=",[102,33327,33328],{"class":278},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,33330,33331],{},"参数说明：",[59,33333,33334,33340,33346,33352,33358,33367,33373],{},[62,33335,33336,33339],{},[83,33337,33338],{},"--dataset.repo_id","：训练数据集仓库。",[62,33341,33342,33345],{},[83,33343,33344],{},"--policy.type=act","：策略模型类型为 ACT。",[62,33347,33348,33351],{},[83,33349,33350],{},"--output_dir","：本地训练输出目录。",[62,33353,33354,33357],{},[83,33355,33356],{},"--job_name","：训练任务名称。",[62,33359,33360,33363,33364,32427],{},[83,33361,33362],{},"--policy.device","：训练设备（如 ",[83,33365,33366],{},"cuda",[62,33368,33369,33372],{},[83,33370,33371],{},"--wandb.enable","：是否启用 WandB 可视化。",[62,33374,33375,33378],{},[83,33376,33377],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,33380,33381],{},[6750,33382],{"alt":98,"src":33383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[8955,33385,33246],{},{"title":98,"searchDepth":116,"depth":116,"links":33387},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":33259,"description":31240},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":33394,"title":33395,"body":33396,"description":31240,"extension":8978,"meta":33483,"navigation":651,"path":33484,"seo":33485,"stem":33486,"__hash__":33487},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":33397,"toc":33481},[33398,33401,33404,33471,33479],[10,33399,33395],{"id":33400},"_8-策略部署与自动采集",[14,33402,33403],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[93,33405,33407],{"className":31686,"code":33406,"language":31688,"meta":98,"style":98},"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",[83,33408,33409,33415,33421,33427,33435,33441,33448,33456,33464],{"__ignoreMap":98},[102,33410,33411,33413],{"class":104,"line":105},[102,33412,33074],{"class":112},[102,33414,32543],{"class":187},[102,33416,33417,33419],{"class":104,"line":116},[102,33418,32575],{"class":187},[102,33420,32543],{"class":187},[102,33422,33423,33425],{"class":104,"line":123},[102,33424,32653],{"class":187},[102,33426,32543],{"class":187},[102,33428,33429,33431,33433],{"class":104,"line":130},[102,33430,32782],{"class":187},[102,33432,33101],{"class":278},[102,33434,32543],{"class":187},[102,33436,33437,33439],{"class":104,"line":136},[102,33438,32713],{"class":187},[102,33440,32543],{"class":187},[102,33442,33443,33446],{"class":104,"line":142},[102,33444,33445],{"class":187},"  --display_data=false",[102,33447,32543],{"class":187},[102,33449,33450,33452,33454],{"class":104,"line":148},[102,33451,33133],{"class":187},[102,33453,33136],{"class":278},[102,33455,32543],{"class":187},[102,33457,33458,33460,33462],{"class":104,"line":157},[102,33459,33150],{"class":187},[102,33461,33153],{"class":278},[102,33463,32543],{"class":187},[102,33465,33466,33469],{"class":104,"line":163},[102,33467,33468],{"class":187},"  --policy.path=",[102,33470,33328],{"class":278},[59,33472,33473],{},[62,33474,33475,33478],{},[83,33476,33477],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[8955,33480,33246],{},{"title":98,"searchDepth":116,"depth":116,"links":33482},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":33395,"description":31240},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":33489,"title":33490,"body":33491,"description":31240,"extension":8978,"meta":33520,"navigation":651,"path":33521,"seo":33522,"stem":33523,"__hash__":33524},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":33492,"toc":33518},[33493,33497,33500,33506,33509,33515],[10,33494,33496],{"id":33495},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,33498,33499],{},"项目地址：",[14,33501,33502],{},[9275,33503,33504],{"href":33504,"rel":33505},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[31729],[14,33507,33508],{},"参考教程：",[14,33510,33511],{},[9275,33512,33513],{"href":33513,"rel":33514},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[31729],[14,33516,33517],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":98,"searchDepth":116,"depth":116,"links":33519},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":33490,"description":31240},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":33526,"title":33527,"body":33528,"description":33532,"extension":8978,"meta":33533,"navigation":651,"path":33534,"seo":33535,"stem":33536,"__hash__":33537},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":33529,"toc":33530},[],{"title":98,"searchDepth":116,"depth":116,"links":33531},[],"act复现",{"category":31242},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":33527,"description":33532},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":33539,"title":33540,"body":33541,"description":98,"extension":8978,"meta":33843,"navigation":651,"path":33844,"seo":33845,"stem":33846,"__hash__":33847},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":33542,"toc":33835},[33543,33546,33550,33560,33567,33574,33577,33584,33587,33590,33594,33606,33610,33656,33659,33662,33665,33668,33671,33675,33713,33719,33723,33777,33782,33785,33788,33793,33796,33801,33804,33807,33811,33814,33817,33821],[10,33544,33540],{"id":33545},"_1简介",[48,33547,33549],{"id":33548},"_11什么是-docker","1.1什么是 Docker？",[14,33551,33552,33553,33556,33557],{},"Docker 是一个开源的 ",[18,33554,33555],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[18,33558,33559],{},"一次构建，到处运行。",[14,33561,33562,33563,33566],{},"“ ",[18,33564,33565],{},"一次构建，到处运行"," ”也就是说：",[87,33568,33569],{},[62,33570,33571],{},[18,33572,33573],{},"之前：",[14,33575,33576],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[87,33578,33579],{},[62,33580,33581],{},[18,33582,33583],{},"使用docker后：",[14,33585,33586],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,33588,33589],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[48,33591,33593],{"id":33592},"_12它是怎么工作的","1.2.它是怎么工作的？",[59,33595,33596,33599],{},[62,33597,33598],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[62,33600,33601,33602,33605],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[18,33603,33604],{},"无论在哪运行都一样稳定"," 。",[48,33607,33609],{"id":33608},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[9177,33611,33612,33622],{},[9180,33613,33614],{},[9183,33615,33616,33619],{},[9186,33617,33618],{"align":31600},"概念",[9186,33620,33621],{"align":31600},"解释",[9223,33623,33624,33632,33640,33648],{},[9183,33625,33626,33629],{},[9228,33627,33628],{"align":31600},"镜像",[9228,33630,33631],{"align":31600},"Image，运行容器的模板，像是一个应用快照",[9183,33633,33634,33637],{},[9228,33635,33636],{"align":31600},"容器",[9228,33638,33639],{"align":31600},"Container，运行中的镜像实例，有自己的文件系统、网络等",[9183,33641,33642,33645],{},[9228,33643,33644],{"align":31600},"Dockerfile",[9228,33646,33647],{"align":31600},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[9183,33649,33650,33653],{},[9228,33651,33652],{"align":31600},"仓库",[9228,33654,33655],{"align":31600},"Registry，存放镜像的地方，比如 Docker Hub",[14,33657,33658],{},"抽象化理解:",[14,33660,33661],{},"Docker镜像≈C++类",[14,33663,33664],{},"Docker容器≈C++类实例(即对象)",[14,33666,33667],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,33669,33670],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[48,33672,33674],{"id":33673},"_14类比理解","1.4.类比理解",[9177,33676,33677,33687],{},[9180,33678,33679],{},[9183,33680,33681,33684],{},[9186,33682,33683],{"align":31600},"传统部署",[9186,33685,33686],{"align":31600},"Docker部署",[9223,33688,33689,33697,33705],{},[9183,33690,33691,33694],{},[9228,33692,33693],{"align":31600},"手动安装依赖、调试版本不一致问题",[9228,33695,33696],{"align":31600},"一次打包环境和代码",[9183,33698,33699,33702],{},[9228,33700,33701],{"align":31600},"程序“裸奔”跑在系统上",[9228,33703,33704],{"align":31600},"程序“穿着容器”隔离运行",[9183,33706,33707,33710],{},[9228,33708,33709],{"align":31600},"容易“在我电脑上能跑”",[9228,33711,33712],{"align":31600},"保证“无论在哪都能跑”",[14,33714,33715,33716],{},"就像快递包裹： ",[18,33717,33718],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[48,33720,33722],{"id":33721},"_15docker-的核心优势","1.5.Docker 的核心优势",[9177,33724,33725,33735],{},[9180,33726,33727],{},[9183,33728,33729,33732],{},[9186,33730,33731],{"align":31600},"优势",[9186,33733,33734],{"align":31600},"说明",[9223,33736,33737,33745,33753,33761,33769],{},[9183,33738,33739,33742],{},[9228,33740,33741],{"align":31600},"轻量级",[9228,33743,33744],{"align":31600},"基于系统内核共享，启动速度快，占资源少",[9183,33746,33747,33750],{},[9228,33748,33749],{"align":31600},"跨平台",[9228,33751,33752],{"align":31600},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[9183,33754,33755,33758],{},[9228,33756,33757],{"align":31600},"易于迁移部署",[9228,33759,33760],{"align":31600},"应用和环境一起封装，不怕依赖不一致",[9183,33762,33763,33766],{},[9228,33764,33765],{"align":31600},"易于版本控制",[9228,33767,33768],{"align":31600},"镜像版本可控，支持回滚",[9183,33770,33771,33774],{},[9228,33772,33773],{"align":31600},"生态丰富",[9228,33775,33776],{"align":31600},"Docker Hub 上有成千上万的现成镜像可用",[87,33778,33779],{},[62,33780,33781],{},"在Linux上可以几乎实现无性能损失。",[14,33783,33784],{},"docker里的发行版和本机共用Linux内核。",[14,33786,33787],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[87,33789,33790],{},[62,33791,33792],{},"可以快速部署在绝大多数Linux发行版",[14,33794,33795],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[87,33797,33798],{},[62,33799,33800],{},"配置环境简单",[14,33802,33803],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,33805,33806],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[87,33808,33809],{},[62,33810,33773],{},[14,33812,33813],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,33815,33816],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[48,33818,33820],{"id":33819},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[59,33822,33823,33826,33829,33832],{},[62,33824,33825],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[62,33827,33828],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[62,33830,33831],{},"微服务架构：每个服务一个容器，灵活组合",[62,33833,33834],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":98,"searchDepth":116,"depth":116,"links":33836},[33837,33838,33839,33840,33841,33842],{"id":33548,"depth":123,"text":33549},{"id":33592,"depth":123,"text":33593},{"id":33608,"depth":123,"text":33609},{"id":33673,"depth":123,"text":33674},{"id":33721,"depth":123,"text":33722},{"id":33819,"depth":123,"text":33820},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":33540,"description":98},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":33849,"title":33850,"body":33851,"description":98,"extension":8978,"meta":34584,"navigation":651,"path":34585,"seo":34586,"stem":34587,"__hash__":34588},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":33852,"toc":34579},[33853,33856,33860,33863,33866,33872,33878,33882,33891,33894,33951,33954,34005,34008,34091,34094,34131,34135,34146,34159,34166,34169,34249,34252,34302,34305,34328,34332,34339,34342,34358,34364,34367,34383,34389,34392,34408,34422,34428,34448,34454,34457,34469,34475,34478,34492,34498,34501,34521,34526,34529,34532,34536,34539,34542,34545,34552,34555,34558,34561,34566,34571,34576],[10,33854,33850],{"id":33855},"_2安装docker",[48,33857,33859],{"id":33858},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,33861,33862],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,33864,33865],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,33867,33868],{},[9275,33869,33870],{"href":33870,"rel":33871},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[31729],[14,33873,33874],{},[9275,33875,33876],{"href":33876,"rel":33877},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[31729],[7601,33879,33881],{"id":33880},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,33883,33884,33885,33890],{},"以下内容根据 ",[9275,33886,33889],{"href":33887,"rel":33888},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[31729],"官方文档"," 修改而来。",[14,33892,33893],{},"如果你过去安装过 docker，先删掉：",[93,33895,33897],{"className":31686,"code":33896,"language":31688,"meta":98,"style":98},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[83,33898,33899],{"__ignoreMap":98},[102,33900,33901,33903,33906,33909,33912,33915,33918,33921,33924,33927,33930,33933,33936,33939,33942,33945,33948],{"class":104,"line":105},[102,33902,11841],{"class":108},[102,33904,33905],{"class":119}," pkg ",[102,33907,33908],{"class":108},"in",[102,33910,33911],{"class":278}," docker.io",[102,33913,33914],{"class":278}," docker-doc",[102,33916,33917],{"class":278}," docker-compose",[102,33919,33920],{"class":278}," docker-compose-v2",[102,33922,33923],{"class":278}," podman-docker",[102,33925,33926],{"class":278}," containerd",[102,33928,33929],{"class":278}," runc",[102,33931,33932],{"class":119},"; ",[102,33934,33935],{"class":108},"do",[102,33937,33938],{"class":112}," sudo",[102,33940,33941],{"class":278}," apt-get",[102,33943,33944],{"class":278}," remove",[102,33946,33947],{"class":119}," $pkg; ",[102,33949,33950],{"class":108},"done\n",[14,33952,33953],{},"首先安装依赖和GPG：",[93,33955,33959],{"className":33956,"code":33957,"language":33958,"meta":98,"style":98},"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",[83,33960,33961,33966,33971,33976,33981,33986,33991,33995,34000],{"__ignoreMap":98},[102,33962,33963],{"class":104,"line":105},[102,33964,33965],{},"# Add Docker's official GPG key:\n",[102,33967,33968],{"class":104,"line":116},[102,33969,33970],{},"sudo apt-get update\n",[102,33972,33973],{"class":104,"line":123},[102,33974,33975],{},"sudo apt-get install ca-certificates curl\n",[102,33977,33978],{"class":104,"line":130},[102,33979,33980],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[102,33982,33983],{"class":104,"line":136},[102,33984,33985],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[102,33987,33988],{"class":104,"line":142},[102,33989,33990],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[102,33992,33993],{"class":104,"line":148},[102,33994,652],{"emptyLinePlaceholder":651},[102,33996,33997],{"class":104,"line":157},[102,33998,33999],{},"# 如果上面这行报错就弄下面这行\n",[102,34001,34002],{"class":104,"line":163},[102,34003,34004],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,34006,34007],{},"信任 Docker 的 GPG 公钥并添加仓库：",[93,34009,34011],{"className":31686,"code":34010,"language":31688,"meta":98,"style":98},"# 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",[83,34012,34013,34018,34024,34041,34074],{"__ignoreMap":98},[102,34014,34015],{"class":104,"line":105},[102,34016,34017],{"class":126},"# Add the repository to Apt sources:\n",[102,34019,34020,34022],{"class":104,"line":116},[102,34021,32990],{"class":187},[102,34023,32543],{"class":187},[102,34025,34026,34029,34032,34035,34038],{"class":104,"line":123},[102,34027,34028],{"class":278},"  \"deb [arch=$(",[102,34030,34031],{"class":112},"dpkg",[102,34033,34034],{"class":187}," --print-architecture",[102,34036,34037],{"class":278},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[102,34039,34040],{"class":187},"\\\n",[102,34042,34043,34046,34048,34050,34053,34056,34058,34060,34063,34065,34067,34070,34072],{"class":104,"line":130},[102,34044,34045],{"class":278},"  \"",[102,34047,32964],{"class":119},[102,34049,9585],{"class":187},[102,34051,34052],{"class":278}," \u002Fetc\u002Fos-release",[102,34054,34055],{"class":119}," && ",[102,34057,32990],{"class":187},[102,34059,18487],{"class":278},[102,34061,34062],{"class":119},"$VERSION_CODENAME",[102,34064,9288],{"class":278},[102,34066,4033],{"class":119},[102,34068,34069],{"class":278},"\" stable\"",[102,34071,32974],{"class":108},[102,34073,32543],{"class":187},[102,34075,34076,34079,34082,34085,34088],{"class":104,"line":136},[102,34077,34078],{"class":112},"  sudo",[102,34080,34081],{"class":278}," tee",[102,34083,34084],{"class":278}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[102,34086,34087],{"class":108}," >",[102,34089,34090],{"class":278}," \u002Fdev\u002Fnull\n",[14,34092,34093],{},"最后安装",[93,34095,34097],{"className":31686,"code":34096,"language":31688,"meta":98,"style":98},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[83,34098,34099,34108],{"__ignoreMap":98},[102,34100,34101,34103,34105],{"class":104,"line":105},[102,34102,32441],{"class":112},[102,34104,33941],{"class":278},[102,34106,34107],{"class":278}," update\n",[102,34109,34110,34112,34114,34116,34119,34122,34125,34128],{"class":104,"line":116},[102,34111,32441],{"class":112},[102,34113,33941],{"class":278},[102,34115,31698],{"class":278},[102,34117,34118],{"class":278}," docker-ce",[102,34120,34121],{"class":278}," docker-ce-cli",[102,34123,34124],{"class":278}," containerd.io",[102,34126,34127],{"class":278}," docker-buildx-plugin",[102,34129,34130],{"class":278}," docker-compose-plugin\n",[7601,34132,34134],{"id":34133},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,34136,34137,34138,34141,34142,34145],{},"查看自己自己包管理工具版本（dnf是 ",[18,34139,34140],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[18,34143,34144],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[93,34147,34149],{"className":31686,"code":34148,"language":31688,"meta":98,"style":98},"dnf --version\n",[83,34150,34151],{"__ignoreMap":98},[102,34152,34153,34156],{"class":104,"line":105},[102,34154,34155],{"class":112},"dnf",[102,34157,34158],{"class":187}," --version\n",[14,34160,33884,34161,34165],{},[9275,34162,33889],{"href":34163,"rel":34164},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[31729]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,34167,34168],{},"如果你之前安装过 docker，请先删掉",[93,34170,34172],{"className":31686,"code":34171,"language":31688,"meta":98,"style":98},"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",[83,34173,34174,34188,34195,34202,34209,34216,34223,34230,34237,34244],{"__ignoreMap":98},[102,34175,34176,34178,34181,34183,34186],{"class":104,"line":105},[102,34177,32441],{"class":112},[102,34179,34180],{"class":278}," dnf",[102,34182,33944],{"class":278},[102,34184,34185],{"class":278}," docker",[102,34187,32543],{"class":187},[102,34189,34190,34193],{"class":104,"line":116},[102,34191,34192],{"class":278},"                  docker-client",[102,34194,32543],{"class":187},[102,34196,34197,34200],{"class":104,"line":123},[102,34198,34199],{"class":278},"                  docker-client-latest",[102,34201,32543],{"class":187},[102,34203,34204,34207],{"class":104,"line":130},[102,34205,34206],{"class":278},"                  docker-common",[102,34208,32543],{"class":187},[102,34210,34211,34214],{"class":104,"line":136},[102,34212,34213],{"class":278},"                  docker-latest",[102,34215,32543],{"class":187},[102,34217,34218,34221],{"class":104,"line":142},[102,34219,34220],{"class":278},"                  docker-latest-logrotate",[102,34222,32543],{"class":187},[102,34224,34225,34228],{"class":104,"line":148},[102,34226,34227],{"class":278},"                  docker-logrotate",[102,34229,32543],{"class":187},[102,34231,34232,34235],{"class":104,"line":157},[102,34233,34234],{"class":278},"                  docker-selinux",[102,34236,32543],{"class":187},[102,34238,34239,34242],{"class":104,"line":163},[102,34240,34241],{"class":278},"                  docker-engine-selinux",[102,34243,32543],{"class":187},[102,34245,34246],{"class":104,"line":175},[102,34247,34248],{"class":278},"                  docker-engine\n",[14,34250,34251],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[93,34253,34255],{"className":31686,"code":34254,"language":31688,"meta":98,"style":98},"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",[83,34256,34257,34271,34286],{"__ignoreMap":98},[102,34258,34259,34261,34263,34266,34268],{"class":104,"line":105},[102,34260,32441],{"class":112},[102,34262,34180],{"class":278},[102,34264,34265],{"class":187}," -y",[102,34267,31698],{"class":278},[102,34269,34270],{"class":278}," dnf-plugins-core\n",[102,34272,34273,34275,34277,34280,34283],{"class":104,"line":116},[102,34274,32441],{"class":112},[102,34276,34180],{"class":278},[102,34278,34279],{"class":278}," config-manager",[102,34281,34282],{"class":278}," addrepo",[102,34284,34285],{"class":187}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[102,34287,34288,34290,34293,34296,34299],{"class":104,"line":123},[102,34289,32441],{"class":112},[102,34291,34292],{"class":278}," sed",[102,34294,34295],{"class":187}," -i",[102,34297,34298],{"class":278}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[102,34300,34301],{"class":278}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,34303,34304],{},"最后安装：",[93,34306,34308],{"className":31686,"code":34307,"language":31688,"meta":98,"style":98},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[83,34309,34310],{"__ignoreMap":98},[102,34311,34312,34314,34316,34318,34320,34322,34324,34326],{"class":104,"line":105},[102,34313,32441],{"class":112},[102,34315,34180],{"class":278},[102,34317,31698],{"class":278},[102,34319,34118],{"class":278},[102,34321,34121],{"class":278},[102,34323,34124],{"class":278},[102,34325,34127],{"class":278},[102,34327,34130],{"class":278},[48,34329,34331],{"id":34330},"_22配置环境","2.2.配置环境",[7601,34333,34335,34338],{"id":34334},"_221检查-docker-服务状态",[18,34336,34337],{},"2.2.1.检查 Docker 服务状态"," ：",[14,34340,34341],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[93,34343,34345],{"className":31686,"code":34344,"language":31688,"meta":98,"style":98},"systemctl status docker\n",[83,34346,34347],{"__ignoreMap":98},[102,34348,34349,34352,34355],{"class":104,"line":105},[102,34350,34351],{"class":112},"systemctl",[102,34353,34354],{"class":278}," status",[102,34356,34357],{"class":278}," docker\n",[7601,34359,34361,34338],{"id":34360},"_222启动-docker-服务",[18,34362,34363],{},"2.2.2.启动 Docker 服务",[14,34365,34366],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[93,34368,34370],{"className":31686,"code":34369,"language":31688,"meta":98,"style":98},"sudo systemctl start docker\n",[83,34371,34372],{"__ignoreMap":98},[102,34373,34374,34376,34379,34381],{"class":104,"line":105},[102,34375,32441],{"class":112},[102,34377,34378],{"class":278}," systemctl",[102,34380,12994],{"class":278},[102,34382,34357],{"class":278},[7601,34384,34386,34338],{"id":34385},"_223设置-docker-开机自启",[18,34387,34388],{},"2.2.3.设置 Docker 开机自启",[14,34390,34391],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[93,34393,34395],{"className":31686,"code":34394,"language":31688,"meta":98,"style":98},"sudo systemctl enable docker\n",[83,34396,34397],{"__ignoreMap":98},[102,34398,34399,34401,34403,34406],{"class":104,"line":105},[102,34400,32441],{"class":112},[102,34402,34378],{"class":278},[102,34404,34405],{"class":278}," enable",[102,34407,34357],{"class":278},[7601,34409,34411,81,34414,81,34419,34338],{"id":34410},"_224将用户添加到-docker-组",[18,34412,34413],{},"2.2.4.将用户添加到",[18,34415,34416],{},[83,34417,34418],{},"docker",[18,34420,34421],{},"组",[14,34423,34424,34425,34427],{},"使用以下命令将当前用户添加到 ",[83,34426,34418],{}," 组：",[93,34429,34431],{"className":31686,"code":34430,"language":31688,"meta":98,"style":98},"sudo usermod -aG docker $USER\n",[83,34432,34433],{"__ignoreMap":98},[102,34434,34435,34437,34440,34443,34445],{"class":104,"line":105},[102,34436,32441],{"class":112},[102,34438,34439],{"class":278}," usermod",[102,34441,34442],{"class":187}," -aG",[102,34444,34185],{"class":278},[102,34446,34447],{"class":119}," $USER\n",[7601,34449,34451,34338],{"id":34450},"_225退出并重新登录",[18,34452,34453],{},"2.2.5.退出并重新登录",[14,34455,34456],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[93,34458,34460],{"className":31686,"code":34459,"language":31688,"meta":98,"style":98},"newgrp docker\n",[83,34461,34462],{"__ignoreMap":98},[102,34463,34464,34467],{"class":104,"line":105},[102,34465,34466],{"class":112},"newgrp",[102,34468,34357],{"class":278},[7601,34470,34472,34338],{"id":34471},"_226重新启动-docker-服务如果需要",[18,34473,34474],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,34476,34477],{},"确保 Docker 服务正在运行，可以使用以下命令：",[93,34479,34480],{"className":31686,"code":34369,"language":31688,"meta":98,"style":98},[83,34481,34482],{"__ignoreMap":98},[102,34483,34484,34486,34488,34490],{"class":104,"line":105},[102,34485,32441],{"class":112},[102,34487,34378],{"class":278},[102,34489,12994],{"class":278},[102,34491,34357],{"class":278},[7601,34493,34495,34338],{"id":34494},"_227重启电脑后检查-docker-服务状态",[18,34496,34497],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,34499,34500],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[93,34502,34504],{"className":31686,"code":34503,"language":31688,"meta":98,"style":98},"sudo reboot\nsystemctl status docker\n",[83,34505,34506,34513],{"__ignoreMap":98},[102,34507,34508,34510],{"class":104,"line":105},[102,34509,32441],{"class":112},[102,34511,34512],{"class":278}," reboot\n",[102,34514,34515,34517,34519],{"class":104,"line":116},[102,34516,34351],{"class":112},[102,34518,34354],{"class":278},[102,34520,34357],{"class":278},[14,34522,34523],{},[6750,34524],{"alt":98,"src":34525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,34527,34528],{},"第三行显示enabled说明开机自启动成功",[14,34530,34531],{},"按q退出",[48,34533,34535],{"id":34534},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,34537,34538],{},"优先使用linux来使用docker是比较好的",[14,34540,34541],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,34543,34544],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,34546,34547,34548],{},"官方下载安装:",[9275,34549,34550],{"href":34550,"rel":34551},"https:\u002F\u002Fwww.docker.com\u002F",[31729],[14,34553,34554],{},"Windows的Docker显卡直通与USB直通:",[14,34556,34557],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,34559,34560],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,34562,34563],{},[6750,34564],{"alt":98,"src":34565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,34567,34568],{},[6750,34569],{"alt":98,"src":34570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,34572,34573],{},[6750,34574],{"alt":98,"src":34575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[8955,34577,34578],{},"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":98,"searchDepth":116,"depth":116,"links":34580},[34581,34582,34583],{"id":33858,"depth":123,"text":33859},{"id":34330,"depth":123,"text":34331},{"id":34534,"depth":123,"text":34535},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":33850,"description":98},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":34590,"title":34591,"body":34592,"description":34599,"extension":8978,"meta":35292,"navigation":651,"path":35293,"seo":35294,"stem":35295,"__hash__":35296},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":34593,"toc":35286},[34594,34597,34600,34604,34609,34614,34617,34645,34650,34659,34662,34667,34671,34678,34683,34689,34693,34696,34700,34705,34797,34802,34820,34825,34846,34851,34867,34871,34876,34905,34910,34956,34961,35005,35013,35030,35035,35051,35056,35070,35073,35076,35079,35082,35111,35114,35119,35123,35126,35129,35135,35138,35141,35144,35206,35213,35218,35221,35239,35243,35246,35263,35266,35269,35283],[10,34595,34591],{"id":34596},"_3docker直通",[14,34598,34599],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[48,34601,34603],{"id":34602},"_31usb直通","3.1.USB直通",[14,34605,34606],{},[6750,34607],{"alt":98,"src":34608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[87,34610,34611],{},[62,34612,34613],{},"方法一(不是很推荐新手)：",[14,34615,34616],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[93,34618,34620],{"className":31686,"code":34619,"language":31688,"meta":98,"style":98},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[83,34621,34622,34630,34635],{"__ignoreMap":98},[102,34623,34624,34627],{"class":104,"line":105},[102,34625,34626],{"class":112},"ls",[102,34628,34629],{"class":278}," \u002Fdev\n",[102,34631,34632],{"class":104,"line":116},[102,34633,34634],{"class":126},"#例如\n",[102,34636,34637,34640,34642],{"class":104,"line":123},[102,34638,34639],{"class":119},"--device",[102,34641,260],{"class":108},[102,34643,34644],{"class":278},"\u002Fdev\u002Ftty_USB0\n",[87,34646,34647],{"start":116},[62,34648,34649],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[93,34651,34653],{"className":31686,"code":34652,"language":31688,"meta":98,"style":98},"--privileged\n",[83,34654,34655],{"__ignoreMap":98},[102,34656,34657],{"class":104,"line":105},[102,34658,34652],{"class":112},[14,34660,34661],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,34663,34664],{},[6750,34665],{"alt":98,"src":34666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[48,34668,34670],{"id":34669},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,34672,34673,34674,34677],{},"NVIDIA Container Toolkit使用户 ",[18,34675,34676],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,34679,34680],{},[6750,34681],{"alt":98,"src":34682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,34684,34685],{},[9275,34686,34687],{"href":34687,"rel":34688},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[31729],[7601,34690,34692],{"id":34691},"_321安装","3.2.1.安装",[14,34694,34695],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[8518,34697,34699],{"id":34698},"_3211ubuntu","3.2.1.1.Ubuntu",[87,34701,34702],{},[62,34703,34704],{},"配置存储库 并更新",[93,34706,34708],{"className":31686,"code":34707,"language":31688,"meta":98,"style":98},"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",[83,34709,34710,34739,34759,34771,34783,34789],{"__ignoreMap":98},[102,34711,34712,34715,34718,34721,34723,34725,34728,34731,34734,34737],{"class":104,"line":105},[102,34713,34714],{"class":112},"curl",[102,34716,34717],{"class":187}," -fsSL",[102,34719,34720],{"class":278}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[102,34722,32974],{"class":108},[102,34724,33938],{"class":112},[102,34726,34727],{"class":278}," gpg",[102,34729,34730],{"class":187}," --dearmor",[102,34732,34733],{"class":187}," -o",[102,34735,34736],{"class":278}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[102,34738,32543],{"class":187},[102,34740,34741,34744,34746,34749,34752,34755,34757],{"class":104,"line":116},[102,34742,34743],{"class":119},"  && ",[102,34745,34714],{"class":112},[102,34747,34748],{"class":187}," -s",[102,34750,34751],{"class":187}," -L",[102,34753,34754],{"class":278}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[102,34756,32974],{"class":108},[102,34758,32543],{"class":187},[102,34760,34761,34764,34767,34769],{"class":104,"line":123},[102,34762,34763],{"class":112},"    sed",[102,34765,34766],{"class":278}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[102,34768,32974],{"class":108},[102,34770,32543],{"class":187},[102,34772,34773,34776,34778,34781],{"class":104,"line":130},[102,34774,34775],{"class":112},"    sudo",[102,34777,34081],{"class":278},[102,34779,34780],{"class":278}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[102,34782,32543],{"class":187},[102,34784,34785,34787],{"class":104,"line":136},[102,34786,34743],{"class":119},[102,34788,34040],{"class":187},[102,34790,34791,34793,34795],{"class":104,"line":142},[102,34792,34775],{"class":112},[102,34794,33941],{"class":278},[102,34796,34107],{"class":278},[87,34798,34799],{"start":116},[62,34800,34801],{},"安装nvidia-docker2",[93,34803,34805],{"className":31686,"code":34804,"language":31688,"meta":98,"style":98},"sudo apt-get install -y nvidia-docker2\n",[83,34806,34807],{"__ignoreMap":98},[102,34808,34809,34811,34813,34815,34817],{"class":104,"line":105},[102,34810,32441],{"class":112},[102,34812,33941],{"class":278},[102,34814,31698],{"class":278},[102,34816,34265],{"class":187},[102,34818,34819],{"class":278}," nvidia-docker2\n",[87,34821,34822],{"start":123},[62,34823,34824],{},"使用nvidia-ctk命令配置container runtime",[93,34826,34828],{"className":31686,"code":34827,"language":31688,"meta":98,"style":98},"sudo nvidia-ctk runtime configure --runtime=docker\n",[83,34829,34830],{"__ignoreMap":98},[102,34831,34832,34834,34837,34840,34843],{"class":104,"line":105},[102,34833,32441],{"class":112},[102,34835,34836],{"class":278}," nvidia-ctk",[102,34838,34839],{"class":278}," runtime",[102,34841,34842],{"class":278}," configure",[102,34844,34845],{"class":187}," --runtime=docker\n",[87,34847,34848],{"start":130},[62,34849,34850],{},"重启docker服务:",[93,34852,34854],{"className":31686,"code":34853,"language":31688,"meta":98,"style":98},"sudo systemctl restart docker\n",[83,34855,34856],{"__ignoreMap":98},[102,34857,34858,34860,34862,34865],{"class":104,"line":105},[102,34859,32441],{"class":112},[102,34861,34378],{"class":278},[102,34863,34864],{"class":278}," restart",[102,34866,34357],{"class":278},[8518,34868,34870],{"id":34869},"_3212fedora","3.2.1.2.Fedora",[87,34872,34873],{},[62,34874,34875],{},"配置存储库",[93,34877,34879],{"className":31686,"code":34878,"language":31688,"meta":98,"style":98},"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",[83,34880,34881,34896],{"__ignoreMap":98},[102,34882,34883,34885,34887,34889,34892,34894],{"class":104,"line":105},[102,34884,34714],{"class":112},[102,34886,34748],{"class":187},[102,34888,34751],{"class":187},[102,34890,34891],{"class":278}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[102,34893,32974],{"class":108},[102,34895,32543],{"class":187},[102,34897,34898,34900,34902],{"class":104,"line":116},[102,34899,32441],{"class":112},[102,34901,34081],{"class":278},[102,34903,34904],{"class":278}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[87,34906,34907],{"start":116},[62,34908,34909],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[93,34911,34913],{"className":31686,"code":34912,"language":31688,"meta":98,"style":98},"# 如果是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",[83,34914,34915,34920,34934,34938,34943],{"__ignoreMap":98},[102,34916,34917],{"class":104,"line":105},[102,34918,34919],{"class":126},"# 如果是RHEL或者Rocky（DNF4）\n",[102,34921,34922,34924,34926,34928,34931],{"class":104,"line":116},[102,34923,32441],{"class":112},[102,34925,34180],{"class":278},[102,34927,34279],{"class":278},[102,34929,34930],{"class":187}," --add-repo",[102,34932,34933],{"class":278}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[102,34935,34936],{"class":104,"line":123},[102,34937,652],{"emptyLinePlaceholder":651},[102,34939,34940],{"class":104,"line":130},[102,34941,34942],{"class":126},"# 如果是Feodra41+（DNF5）\n",[102,34944,34945,34947,34949,34951,34953],{"class":104,"line":136},[102,34946,32441],{"class":112},[102,34948,34180],{"class":278},[102,34950,34279],{"class":278},[102,34952,34282],{"class":278},[102,34954,34955],{"class":187}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[87,34957,34958],{"start":123},[62,34959,34960],{},"安装NVIDIA Container Toolki包",[93,34962,34964],{"className":31686,"code":34963,"language":31688,"meta":98,"style":98},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[83,34965,34966,34971,34984,34988,34993],{"__ignoreMap":98},[102,34967,34968],{"class":104,"line":105},[102,34969,34970],{"class":126},"# 如果是RHEL或者Rocky\n",[102,34972,34973,34975,34977,34979,34981],{"class":104,"line":116},[102,34974,32441],{"class":112},[102,34976,34180],{"class":278},[102,34978,31698],{"class":278},[102,34980,34265],{"class":187},[102,34982,34983],{"class":278}," nvidia-container-toolkit\n",[102,34985,34986],{"class":104,"line":123},[102,34987,652],{"emptyLinePlaceholder":651},[102,34989,34990],{"class":104,"line":130},[102,34991,34992],{"class":126},"# 如果是Fedora\n",[102,34994,34995,34997,34999,35001,35003],{"class":104,"line":136},[102,34996,32441],{"class":112},[102,34998,34180],{"class":278},[102,35000,31698],{"class":278},[102,35002,34265],{"class":187},[102,35004,34983],{"class":278},[87,35006,35007],{"start":130},[62,35008,35009,35010,35012],{},"安装nvidia-docker2 ： 在Fedora上使用",[83,35011,34155],{},"进行安装",[93,35014,35016],{"className":31686,"code":35015,"language":31688,"meta":98,"style":98},"sudo dnf install -y nvidia-docker2\n",[83,35017,35018],{"__ignoreMap":98},[102,35019,35020,35022,35024,35026,35028],{"class":104,"line":105},[102,35021,32441],{"class":112},[102,35023,34180],{"class":278},[102,35025,31698],{"class":278},[102,35027,34265],{"class":187},[102,35029,34819],{"class":278},[87,35031,35032],{"start":136},[62,35033,35034],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[93,35036,35037],{"className":31686,"code":34827,"language":31688,"meta":98,"style":98},[83,35038,35039],{"__ignoreMap":98},[102,35040,35041,35043,35045,35047,35049],{"class":104,"line":105},[102,35042,32441],{"class":112},[102,35044,34836],{"class":278},[102,35046,34839],{"class":278},[102,35048,34842],{"class":278},[102,35050,34845],{"class":187},[87,35052,35053],{"start":142},[62,35054,35055],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[93,35057,35058],{"className":31686,"code":34853,"language":31688,"meta":98,"style":98},[83,35059,35060],{"__ignoreMap":98},[102,35061,35062,35064,35066,35068],{"class":104,"line":105},[102,35063,32441],{"class":112},[102,35065,34378],{"class":278},[102,35067,34864],{"class":278},[102,35069,34357],{"class":278},[14,35071,35072],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,35074,35075],{},"方法：",[14,35077,35078],{},"1️⃣nvidia-smi",[14,35080,35081],{},"2️⃣运行nvidia cuda 容器进行测试",[93,35083,35085],{"className":31686,"code":35084,"language":31688,"meta":98,"style":98},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[83,35086,35087],{"__ignoreMap":98},[102,35088,35089,35091,35093,35096,35099,35102,35105,35108],{"class":104,"line":105},[102,35090,32441],{"class":112},[102,35092,34185],{"class":278},[102,35094,35095],{"class":278}," run",[102,35097,35098],{"class":187}," --rm",[102,35100,35101],{"class":187}," --gpus",[102,35103,35104],{"class":278}," all",[102,35106,35107],{"class":278}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[102,35109,35110],{"class":278}," nvidia-smi\n",[14,35112,35113],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,35115,35116],{},[6750,35117],{"alt":98,"src":35118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[48,35120,35122],{"id":35121},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,35124,35125],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,35127,35128],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,35130,35131],{},[9275,35132,35133],{"href":35133,"rel":35134},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[31729],[14,35136,35137],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,35139,35140],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,35142,35143],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[9177,35145,35146,35162],{},[9180,35147,35148],{},[9183,35149,35150,35153,35156,35159],{},[9186,35151,35152],{"align":31600},"镜像类型",[9186,35154,35155],{"align":31600},"适用场景",[9186,35157,35158],{"align":31600},"示例标签",[9186,35160,35161],{"align":31600},"大小",[9223,35163,35164,35178,35192],{},[9183,35165,35166,35169,35172,35175],{},[9228,35167,35168],{"align":31600},"base",[9228,35170,35171],{"align":31600},"仅需 CUDA 运行时库",[9228,35173,35174],{"align":31600},"12.4.0-base-ubuntu22.04",[9228,35176,35177],{"align":31600},"~240MB",[9183,35179,35180,35183,35186,35189],{},[9228,35181,35182],{"align":31600},"runtime",[9228,35184,35185],{"align":31600},"部署编译后的应用（含数学库）",[9228,35187,35188],{"align":31600},"12.4.0-runtime-ubuntu22.04",[9228,35190,35191],{"align":31600},"~2GB",[9183,35193,35194,35197,35200,35203],{},[9228,35195,35196],{"align":31600},"devel",[9228,35198,35199],{"align":31600},"开发环境（含编译工具）",[9228,35201,35202],{"align":31600},"12.4.0-devel-ubuntu22.04",[9228,35204,35205],{"align":31600},"~3GB",[14,35207,35208,35209,35212],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[83,35210,35211],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,35214,35215],{},[6750,35216],{"alt":98,"src":35217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,35219,35220],{},"在dockerfile里就可以开头这么写：",[93,35222,35224],{"className":31686,"code":35223,"language":31688,"meta":98,"style":98},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[83,35225,35226,35231],{"__ignoreMap":98},[102,35227,35228],{"class":104,"line":105},[102,35229,35230],{"class":126},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[102,35232,35233,35236],{"class":104,"line":116},[102,35234,35235],{"class":112},"FROM",[102,35237,35238],{"class":278}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[48,35240,35242],{"id":35241},"_34配置以太网","3.4.配置以太网",[14,35244,35245],{},"指定网络模式",[93,35247,35249],{"className":31686,"code":35248,"language":31688,"meta":98,"style":98},"--net=host \\\n",[83,35250,35251],{"__ignoreMap":98},[102,35252,35253,35256,35258,35261],{"class":104,"line":105},[102,35254,35255],{"class":119},"--net",[102,35257,260],{"class":108},[102,35259,35260],{"class":278},"host",[102,35262,32543],{"class":112},[14,35264,35265],{},"启动参数里加上这行即可。具体在下方",[14,35267,35268],{},"--net选项：指定网络模式，该选项有以下参数可选：",[59,35270,35271,35274,35277,35280],{},[62,35272,35273],{},"--net=bridge:默认选项，表示连接到默认的网桥",[62,35275,35276],{},"--net=host:容器使用宿主机的网络",[62,35278,35279],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[62,35281,35282],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[8955,35284,35285],{},"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":98,"searchDepth":116,"depth":116,"links":35287},[35288,35289,35290,35291],{"id":34602,"depth":123,"text":34603},{"id":34669,"depth":123,"text":34670},{"id":35121,"depth":123,"text":35122},{"id":35241,"depth":123,"text":35242},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":34591,"description":34599},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":35298,"title":35299,"body":35300,"description":35307,"extension":8978,"meta":35313,"navigation":651,"path":35314,"seo":35315,"stem":35316,"__hash__":35317},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":35301,"toc":35311},[35302,35305,35308],[10,35303,35299],{"id":35304},"_4dockerhub换源",[14,35306,35307],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,35309,35310],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":98,"searchDepth":116,"depth":116,"links":35312},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":35299,"description":35307},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":35319,"title":35320,"body":35321,"description":98,"extension":8978,"meta":36333,"navigation":651,"path":36334,"seo":36335,"stem":36336,"__hash__":36337},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":35322,"toc":36328},[35323,35326,35330,35336,35340,35343,35683,35686,35689,35692,35697,35702,35705,35708,35711,35714,35733,35736,35747,35753,35935,35945,35961,36224,36226,36251,36266,36275,36325],[10,35324,35320],{"id":35325},"_5docker命令学习",[48,35327,35329],{"id":35328},"_51参考文档","5.1.参考文档",[14,35331,35332],{},[9275,35333,35334],{"href":35334,"rel":35335},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[31729],[48,35337,35339],{"id":35338},"_52常用命令","5.2.常用命令",[14,35341,35342],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[9177,35344,35345,35358],{},[9180,35346,35347],{},[9183,35348,35349,35352,35355],{},[9186,35350,35351],{"align":31600},"命令",[9186,35353,35354],{"align":31600},"描述",[9186,35356,35357],{"align":31600},"示例",[9223,35359,35360,35371,35382,35393,35404,35415,35426,35437,35447,35458,35469,35480,35490,35501,35512,35523,35533,35543,35553,35563,35574,35585,35596,35607,35618,35629,35639,35650,35661,35672],{},[9183,35361,35362,35365,35368],{},[9228,35363,35364],{"align":31600},"docker run",[9228,35366,35367],{"align":31600},"创建并启动一个新的容器。",[9228,35369,35370],{"align":31600},"docker run -it ubuntu bash",[9183,35372,35373,35376,35379],{},[9228,35374,35375],{"align":31600},"docker build",[9228,35377,35378],{"align":31600},"通过指定的 Dockerfile 创建一个新的镜像。",[9228,35380,35381],{"align":31600},"docker build -t myimage .",[9183,35383,35384,35387,35390],{},[9228,35385,35386],{"align":31600},"docker pull",[9228,35388,35389],{"align":31600},"从 Docker 仓库拉取镜像。",[9228,35391,35392],{"align":31600},"docker pull ubuntu",[9183,35394,35395,35398,35401],{},[9228,35396,35397],{"align":31600},"docker push",[9228,35399,35400],{"align":31600},"将本地镜像推送到 Docker 仓库。",[9228,35402,35403],{"align":31600},"docker push myimage",[9183,35405,35406,35409,35412],{},[9228,35407,35408],{"align":31600},"docker stop",[9228,35410,35411],{"align":31600},"停止一个正在运行的容器。",[9228,35413,35414],{"align":31600},"docker stop container_id",[9183,35416,35417,35420,35423],{},[9228,35418,35419],{"align":31600},"docker start",[9228,35421,35422],{"align":31600},"启动一个已经存在的容器。",[9228,35424,35425],{"align":31600},"docker start container_id",[9183,35427,35428,35431,35434],{},[9228,35429,35430],{"align":31600},"docker restart",[9228,35432,35433],{"align":31600},"重新启动容器。",[9228,35435,35436],{"align":31600},"docker restart container_id",[9183,35438,35439,35442,35445],{},[9228,35440,35441],{"align":31600},"docker ps",[9228,35443,35444],{"align":31600},"列出当前正在运行的容器。",[9228,35446,35441],{"align":31600},[9183,35448,35449,35452,35455],{},[9228,35450,35451],{"align":31600},"docker rm",[9228,35453,35454],{"align":31600},"删除一个或多个停止的容器。",[9228,35456,35457],{"align":31600},"docker rm container_id",[9183,35459,35460,35463,35466],{},[9228,35461,35462],{"align":31600},"docker exec",[9228,35464,35465],{"align":31600},"在一个正在运行的容器中执行命令。",[9228,35467,35468],{"align":31600},"docker exec -it container_id bash",[9183,35470,35471,35474,35477],{},[9228,35472,35473],{"align":31600},"docker logs",[9228,35475,35476],{"align":31600},"查看容器的日志输出。",[9228,35478,35479],{"align":31600},"docker logs container_id",[9183,35481,35482,35485,35488],{},[9228,35483,35484],{"align":31600},"docker images",[9228,35486,35487],{"align":31600},"列出本地所有镜像。",[9228,35489,35484],{"align":31600},[9183,35491,35492,35495,35498],{},[9228,35493,35494],{"align":31600},"docker rmi",[9228,35496,35497],{"align":31600},"删除一个或多个镜像。",[9228,35499,35500],{"align":31600},"docker rmi myimage",[9183,35502,35503,35506,35509],{},[9228,35504,35505],{"align":31600},"docker network",[9228,35507,35508],{"align":31600},"管理 Docker 网络。",[9228,35510,35511],{"align":31600},"docker network ls",[9183,35513,35514,35517,35520],{},[9228,35515,35516],{"align":31600},"docker volume",[9228,35518,35519],{"align":31600},"管理 Docker 数据卷。",[9228,35521,35522],{"align":31600},"docker volume ls",[9183,35524,35525,35528,35531],{},[9228,35526,35527],{"align":31600},"docker-compose up",[9228,35529,35530],{"align":31600},"启动 docker-compose.yml 中定义的所有服务。",[9228,35532,35527],{"align":31600},[9183,35534,35535,35538,35541],{},[9228,35536,35537],{"align":31600},"docker-compose down",[9228,35539,35540],{"align":31600},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[9228,35542,35537],{"align":31600},[9183,35544,35545,35548,35551],{},[9228,35546,35547],{"align":31600},"docker info",[9228,35549,35550],{"align":31600},"显示 Docker 系统的详细信息。",[9228,35552,35547],{"align":31600},[9183,35554,35555,35558,35561],{},[9228,35556,35557],{"align":31600},"docker stats",[9228,35559,35560],{"align":31600},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[9228,35562,35557],{"align":31600},[9183,35564,35565,35568,35571],{},[9228,35566,35567],{"align":31600},"docker inspect",[9228,35569,35570],{"align":31600},"查看容器或镜像的详细信息（JSON 格式）。",[9228,35572,35573],{"align":31600},"docker inspect container_id",[9183,35575,35576,35579,35582],{},[9228,35577,35578],{"align":31600},"docker save",[9228,35580,35581],{"align":31600},"将一个镜像保存为 tar 文件。",[9228,35583,35584],{"align":31600},"docker save -o myimage.tar myimage",[9183,35586,35587,35590,35593],{},[9228,35588,35589],{"align":31600},"docker load",[9228,35591,35592],{"align":31600},"从 tar 文件中加载镜像。",[9228,35594,35595],{"align":31600},"docker load -i myimage.tar",[9183,35597,35598,35601,35604],{},[9228,35599,35600],{"align":31600},"docker tag",[9228,35602,35603],{"align":31600},"为镜像添加标签（tag）。",[9228,35605,35606],{"align":31600},"docker tag myimage myimage:v1",[9183,35608,35609,35612,35615],{},[9228,35610,35611],{"align":31600},"docker buildx build",[9228,35613,35614],{"align":31600},"使用 Buildx 构建多架构镜像。",[9228,35616,35617],{"align":31600},"docker buildx build -t myimage .",[9183,35619,35620,35623,35626],{},[9228,35621,35622],{"align":31600},"docker buildx create",[9228,35624,35625],{"align":31600},"创建一个新的 Buildx 构建实例。",[9228,35627,35628],{"align":31600},"docker buildx create –use",[9183,35630,35631,35634,35637],{},[9228,35632,35633],{"align":31600},"docker buildx ls",[9228,35635,35636],{"align":31600},"列出所有可用的 Buildx 构建实例。",[9228,35638,35633],{"align":31600},[9183,35640,35641,35644,35647],{},[9228,35642,35643],{"align":31600},"docker buildx use",[9228,35645,35646],{"align":31600},"设置当前的 Buildx 构建实例。",[9228,35648,35649],{"align":31600},"docker buildx use mybuilder",[9183,35651,35652,35655,35658],{},[9228,35653,35654],{"align":31600},"docker buildx bake",[9228,35656,35657],{"align":31600},"使用 Bake 文件批量构建镜像。",[9228,35659,35660],{"align":31600},"docker buildx bake -f bake.hcl",[9183,35662,35663,35666,35669],{},[9228,35664,35665],{"align":31600},"docker buildx build –push",[9228,35667,35668],{"align":31600},"构建镜像并推送到镜像仓库。",[9228,35670,35671],{"align":31600},"docker buildx build –push -t myimage .",[9183,35673,35674,35677,35680],{},[9228,35675,35676],{"align":31600},"docker buildx build –platform",[9228,35678,35679],{"align":31600},"构建镜像并为多个平台生成支持。",[9228,35681,35682],{"align":31600},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,35684,35685],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,35687,35688],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,35690,35691],{},"docker images 可以查看已经下载的镜像",[14,35693,35694],{},[6750,35695],{"alt":98,"src":35696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,35698,35699],{},[18,35700,35701],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,35703,35704],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,35706,35707],{},"docker container logs 查看容器日志",[14,35709,35710],{},"docker top 查看容器里的进程",[14,35712,35713],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[93,35715,35717],{"className":31686,"code":35716,"language":31688,"meta":98,"style":98},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[83,35718,35719],{"__ignoreMap":98},[102,35720,35721,35724,35727,35730],{"class":104,"line":105},[102,35722,35723],{"class":112},"如：docker",[102,35725,35726],{"class":278}," cp",[102,35728,35729],{"class":278}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[102,35731,35732],{"class":278}," \u002Fmydata\u002Fnginx\n",[14,35734,35735],{},"docker run时在启动容器的时候会有几个常用的选项：",[59,35737,35738,35741,35744],{},[62,35739,35740],{},"-d选项：表示后台运行",[62,35742,35743],{},"-P选项：随机端口映射",[62,35745,35746],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[48,35748,35750],{"id":35749},"_53run命令的参数非常重要",[18,35751,35752],{},"5.3.run命令的参数（非常重要）",[9177,35754,35755,35768],{},[9180,35756,35757],{},[9183,35758,35759,35762,35765],{},[9186,35760,35761],{"align":31600},"参数\u002F配置",[9186,35763,35764],{"align":31600},"功能说明",[9186,35766,35767],{"align":31600},"重要性与参考依据",[9223,35769,35770,35781,35792,35803,35814,35825,35836,35847,35858,35869,35880,35891,35902,35913,35924],{},[9183,35771,35772,35775,35778],{},[9228,35773,35774],{"align":31600},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[9228,35776,35777],{"align":31600},"指定容器名称，便于后续管理",[9228,35779,35780],{"align":31600},"替代随机生成的容器名。",[9183,35782,35783,35786,35789],{},[9228,35784,35785],{"align":31600},"–gpus all",[9228,35787,35788],{"align":31600},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[9228,35790,35791],{"align":31600},"用于CUDA加速等GPU依赖任务。",[9183,35793,35794,35797,35800],{},[9228,35795,35796],{"align":31600},"-e NVIDIA_DRIVER_CAPABILITIES=all",[9228,35798,35799],{"align":31600},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[9228,35801,35802],{"align":31600},"确保容器内GPU功能完整67。",[9183,35804,35805,35808,35811],{},[9228,35806,35807],{"align":31600},"-dit",[9228,35809,35810],{"align":31600},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[9228,35812,35813],{"align":31600},"允许容器在后台运行并支持交互操作。",[9183,35815,35816,35819,35822],{},[9228,35817,35818],{"align":31600},"–privileged",[9228,35820,35821],{"align":31600},"赋予容器完全主机权限（可访问设备、内核模块等）",[9228,35823,35824],{"align":31600},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[9183,35826,35827,35830,35833],{},[9228,35828,35829],{"align":31600},"–net=host",[9228,35831,35832],{"align":31600},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[9228,35834,35835],{"align":31600},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[9183,35837,35838,35841,35844],{},[9228,35839,35840],{"align":31600},"–group-add audio–group-add video–group-add dialout",[9228,35842,35843],{"align":31600},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[9228,35845,35846],{"align":31600},"避免权限问题（如避免无法调用摄像头、麦克风）。",[9183,35848,35849,35852,35855],{},[9228,35850,35851],{"align":31600},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[9228,35853,35854],{"align":31600},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[9228,35856,35857],{"align":31600},"支持容器内运行图形界面应用（如OpenCV可视化）。",[9183,35859,35860,35863,35866],{},[9228,35861,35862],{"align":31600},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[9228,35864,35865],{"align":31600},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[9228,35867,35868],{"align":31600},"实现容器内图形显示。",[9183,35870,35871,35874,35877],{},[9228,35872,35873],{"align":31600},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[9228,35875,35876],{"align":31600},"挂载X11认证文件（只读）",[9228,35878,35879],{"align":31600},"确保容器有权连接宿主机显示服务。",[9183,35881,35882,35885,35888],{},[9228,35883,35884],{"align":31600},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[9228,35886,35887],{"align":31600},"挂载Wayland显示协议相关目录",[9228,35889,35890],{"align":31600},"支持Wayland协议的图形显示。",[9183,35892,35893,35896,35899],{},[9228,35894,35895],{"align":31600},"–ulimit nofile=1024:524288",[9228,35897,35898],{"align":31600},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[9228,35900,35901],{"align":31600},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[9183,35903,35904,35907,35910],{},[9228,35905,35906],{"align":31600},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[9228,35908,35909],{"align":31600},"挂载宿主机用户目录到容器内同名路径",[9228,35911,35912],{"align":31600},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[9183,35914,35915,35918,35921],{},[9228,35916,35917],{"align":31600},"-w \u002Fhome\u002Ftungchiahui",[9228,35919,35920],{"align":31600},"设置容器启动后的默认工作目录",[9228,35922,35923],{"align":31600},"直接进入项目路径，方便执行命令2324。",[9183,35925,35926,35929,35932],{},[9228,35927,35928],{"align":31600},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[9228,35930,35931],{"align":31600},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[9228,35933,35934],{"align":31600},"提供预配置的深度学习与机器人开发环境。",[14,35936,35937,35938,35940,35941,35944],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[83,35939,32441],{},"加不加",[83,35942,35943],{},"sudo -E","都无所谓。",[14,35946,35947,35948,35950,35951,35953,35954,35957,35958,35960],{},"用户已经被加到docker组了，不用",[83,35949,32441],{},"也行跑，其次，",[83,35952,32441],{},"运行的话，你的",[83,35955,35956],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[83,35959,35956],{},"更不可能变了。",[93,35962,35964],{"className":31686,"code":35963,"language":31688,"meta":98,"style":98},"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",[83,35965,35966,35979,35989,35999,36011,36018,36025,36032,36042,36051,36060,36074,36086,36098,36107,36117,36126,36141,36174,36201,36212,36219],{"__ignoreMap":98},[102,35967,35968,35970,35972,35974,35977],{"class":104,"line":105},[102,35969,32441],{"class":112},[102,35971,34185],{"class":278},[102,35973,35095],{"class":278},[102,35975,35976],{"class":187}," --name=ros_opencv_cuda",[102,35978,32543],{"class":187},[102,35980,35981,35984,35987],{"class":104,"line":116},[102,35982,35983],{"class":119},"--gpus ",[102,35985,35986],{"class":278},"all",[102,35988,32543],{"class":187},[102,35990,35991,35994,35997],{"class":104,"line":123},[102,35992,35993],{"class":119},"-e ",[102,35995,35996],{"class":278},"NVIDIA_DRIVER_CAPABILITIES=all",[102,35998,32543],{"class":187},[102,36000,36001,36003,36006,36009],{"class":104,"line":130},[102,36002,35993],{"class":119},[102,36004,36005],{"class":278},"DISPLAY=",[102,36007,36008],{"class":119},"$DISPLAY ",[102,36010,34040],{"class":187},[102,36012,36013,36016],{"class":104,"line":136},[102,36014,36015],{"class":119},"-dit ",[102,36017,34040],{"class":187},[102,36019,36020,36023],{"class":104,"line":142},[102,36021,36022],{"class":119},"--privileged ",[102,36024,34040],{"class":187},[102,36026,36027,36030],{"class":104,"line":148},[102,36028,36029],{"class":119},"--net=host ",[102,36031,34040],{"class":187},[102,36033,36034,36037,36040],{"class":104,"line":157},[102,36035,36036],{"class":119},"--group-add ",[102,36038,36039],{"class":278},"audio",[102,36041,32543],{"class":187},[102,36043,36044,36046,36049],{"class":104,"line":163},[102,36045,36036],{"class":119},[102,36047,36048],{"class":278},"video",[102,36050,32543],{"class":187},[102,36052,36053,36055,36058],{"class":104,"line":175},[102,36054,36036],{"class":119},[102,36056,36057],{"class":278},"dialout",[102,36059,32543],{"class":187},[102,36061,36062,36064,36067,36069,36072],{"class":104,"line":181},[102,36063,35993],{"class":119},[102,36065,36066],{"class":278},"XAUTHORITY=",[102,36068,35956],{"class":119},[102,36070,36071],{"class":278},"\u002F.Xauthority",[102,36073,32543],{"class":187},[102,36075,36076,36078,36081,36084],{"class":104,"line":202},[102,36077,35993],{"class":119},[102,36079,36080],{"class":278},"WAYLAND_DISPLAY=",[102,36082,36083],{"class":119},"$WAYLAND_DISPLAY ",[102,36085,34040],{"class":187},[102,36087,36088,36090,36093,36096],{"class":104,"line":208},[102,36089,35993],{"class":119},[102,36091,36092],{"class":278},"XDG_RUNTIME_DIR=",[102,36094,36095],{"class":119},"$XDG_RUNTIME_DIR ",[102,36097,34040],{"class":187},[102,36099,36100,36102,36105],{"class":104,"line":214},[102,36101,35993],{"class":119},[102,36103,36104],{"class":278},"QT_QPA_PLATFORM=xcb",[102,36106,32543],{"class":187},[102,36108,36109,36112,36115],{"class":104,"line":225},[102,36110,36111],{"class":119},"-v ",[102,36113,36114],{"class":278},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[102,36116,32543],{"class":187},[102,36118,36119,36121,36124],{"class":104,"line":230},[102,36120,36111],{"class":119},[102,36122,36123],{"class":278},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[102,36125,32543],{"class":187},[102,36127,36128,36131,36134,36136,36139],{"class":104,"line":236},[102,36129,36130],{"class":119},"-v $HOME",[102,36132,36133],{"class":278},"\u002F.Xauthority:",[102,36135,35956],{"class":119},[102,36137,36138],{"class":278},"\u002F.Xauthority:ro",[102,36140,32543],{"class":187},[102,36142,36143,36145,36148,36150,36153,36156,36158,36161,36163,36165,36167,36169,36172],{"class":104,"line":242},[102,36144,36111],{"class":119},[102,36146,36147],{"class":278},"\u002Frun\u002Fuser\u002F",[102,36149,32964],{"class":119},[102,36151,36152],{"class":112},"id",[102,36154,36155],{"class":187}," -u",[102,36157,4033],{"class":119},[102,36159,36160],{"class":278},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[102,36162,32964],{"class":119},[102,36164,36152],{"class":112},[102,36166,36155],{"class":187},[102,36168,4033],{"class":119},[102,36170,36171],{"class":278},"\u002Fwayland-0",[102,36173,32543],{"class":187},[102,36175,36176,36178,36180,36182,36184,36186,36188,36191,36193,36195,36197,36199],{"class":104,"line":248},[102,36177,36111],{"class":119},[102,36179,36147],{"class":278},[102,36181,32964],{"class":119},[102,36183,36152],{"class":112},[102,36185,36155],{"class":187},[102,36187,4033],{"class":119},[102,36189,36190],{"class":278},":\u002Frun\u002Fuser\u002F",[102,36192,32964],{"class":119},[102,36194,36152],{"class":112},[102,36196,36155],{"class":187},[102,36198,22445],{"class":119},[102,36200,34040],{"class":187},[102,36202,36203,36205,36207,36210],{"class":104,"line":254},[102,36204,36130],{"class":119},[102,36206,9881],{"class":278},[102,36208,36209],{"class":119},"$HOME ",[102,36211,34040],{"class":187},[102,36213,36214,36217],{"class":104,"line":269},[102,36215,36216],{"class":119},"-w $HOME ",[102,36218,34040],{"class":187},[102,36220,36221],{"class":104,"line":298},[102,36222,36223],{"class":119},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,36225,7501],{},[87,36227,36228,36236,36239,36242],{},[62,36229,36230,81,36232,36235],{},[83,36231,35996],{},[83,36233,36234],{},"--gpus all","没有英伟达显卡请注释。",[62,36237,36238],{},"--name后面请自己为容器起名。",[62,36240,36241],{},"最后一行仓库名称请你自己找对应的镜像填上。",[62,36243,36244,36245,36250],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[31417,36246,36247],{},[18,36248,36249],{},"请不要加","。",[93,36252,36254],{"className":31686,"code":36253,"language":31688,"meta":98,"style":98},"--ulimit nofile=1024:524288 \\\n",[83,36255,36256],{"__ignoreMap":98},[102,36257,36258,36261,36264],{"class":104,"line":105},[102,36259,36260],{"class":112},"--ulimit",[102,36262,36263],{"class":278}," nofile=1024:524288",[102,36265,32543],{"class":187},[14,36267,36268,36269,36274],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[31417,36270,36271],{},[18,36272,36273],{},"不建议","**.**",[93,36276,36278],{"className":31686,"code":36277,"language":31688,"meta":98,"style":98},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[83,36279,36280,36307,36316],{"__ignoreMap":98},[102,36281,36282,36285,36288,36290,36292,36294,36296,36298,36300,36303,36305],{"class":104,"line":105},[102,36283,36284],{"class":112},"--user",[102,36286,36287],{"class":119}," $(",[102,36289,36152],{"class":112},[102,36291,36155],{"class":187},[102,36293,4033],{"class":119},[102,36295,9881],{"class":278},[102,36297,32964],{"class":119},[102,36299,36152],{"class":112},[102,36301,36302],{"class":187}," -g",[102,36304,22445],{"class":119},[102,36306,34040],{"class":187},[102,36308,36309,36311,36314],{"class":104,"line":116},[102,36310,36111],{"class":119},[102,36312,36313],{"class":278},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[102,36315,32543],{"class":187},[102,36317,36318,36320,36323],{"class":104,"line":123},[102,36319,36111],{"class":119},[102,36321,36322],{"class":278},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[102,36324,32543],{"class":187},[8955,36326,36327],{},"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":98,"searchDepth":116,"depth":116,"links":36329},[36330,36331,36332],{"id":35328,"depth":123,"text":35329},{"id":35338,"depth":123,"text":35339},{"id":35749,"depth":123,"text":35752},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":35320,"description":98},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":36339,"title":36340,"body":36341,"description":98,"extension":8978,"meta":37964,"navigation":651,"path":37965,"seo":37966,"stem":37967,"__hash__":37968},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":36342,"toc":37959},[36343,36346,36350,36353,36575,36579,36583,36586,36692,36697,36700,36705,36708,36713,36716,36721,36724,36736,36739,36744,36751,36779,36786,36862,36867,36870,36893,36895,36970,36975,36978,36982,36990,36995,37000,37004,37015,37021,37024,37027,37051,37054,37057,37085,37088,37091,37556,37559,37564,37569,37573,37596,37601,37605,37609,37612,37615,37618,37645,37648,37651,37669,37672,37675,37697,37705,37710,37715,37719,37722,37725,37728,37731,37776,37779,37797,37800,37805,37808,37829,37832,37888,37891,37896,37900,37903,37910,37913,37916,37921,37924,37940,37943,37956],[10,36344,36340],{"id":36345},"_6手动创建docker镜像",[48,36347,36349],{"id":36348},"_61dockerfile","6.1.DockerFile",[14,36351,36352],{},"常用命令：",[9177,36354,36355,36366],{},[9180,36356,36357],{},[9183,36358,36359,36362,36364],{},[9186,36360,36361],{"align":31600},"指令",[9186,36363,33734],{"align":31600},[9186,36365,35357],{"align":31600},[9223,36367,36368,36378,36394,36405,36416,36427,36438,36449,36460,36474,36488,36499,36513,36524,36535,36549,36564],{},[9183,36369,36370,36372,36375],{},[9228,36371,35235],{"align":31600},[9228,36373,36374],{"align":31600},"指定基础镜像，是 Dockerfile 的起点",[9228,36376,36377],{"align":31600},"FROM ubuntu:22.04",[9183,36379,36380,36383,36386],{},[9228,36381,36382],{"align":31600},"LABEL",[9228,36384,36385],{"align":31600},"添加元数据（如作者、版本等）",[9228,36387,36388,36389,36393],{"align":31600},"LABEL maintainer=”",[9275,36390,36392],{"href":36391},"mailto:you@example.com","you@example.com","”",[9183,36395,36396,36399,36402],{},[9228,36397,36398],{"align":31600},"ENV",[9228,36400,36401],{"align":31600},"设置环境变量",[9228,36403,36404],{"align":31600},"ENV PORT=8080",[9183,36406,36407,36410,36413],{},[9228,36408,36409],{"align":31600},"ARG",[9228,36411,36412],{"align":31600},"构建参数，只在构建期间可用",[9228,36414,36415],{"align":31600},"ARG VERSION=1.0",[9183,36417,36418,36421,36424],{},[9228,36419,36420],{"align":31600},"RUN",[9228,36422,36423],{"align":31600},"构建镜像时运行命令",[9228,36425,36426],{"align":31600},"RUN apt-get update && apt-get install -y curl",[9183,36428,36429,36432,36435],{},[9228,36430,36431],{"align":31600},"COPY",[9228,36433,36434],{"align":31600},"复制文件到镜像中",[9228,36436,36437],{"align":31600},"COPY . \u002Fapp",[9183,36439,36440,36443,36446],{},[9228,36441,36442],{"align":31600},"ADD",[9228,36444,36445],{"align":31600},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[9228,36447,36448],{"align":31600},"ADD archive.tar.gz \u002Fdata\u002F",[9183,36450,36451,36454,36457],{},[9228,36452,36453],{"align":31600},"WORKDIR",[9228,36455,36456],{"align":31600},"设置工作目录",[9228,36458,36459],{"align":31600},"WORKDIR \u002Fopt",[9183,36461,36462,36465,36468],{},[9228,36463,36464],{"align":31600},"CMD",[9228,36466,36467],{"align":31600},"设置容器启动时默认命令（可被 docker run 覆盖）",[9228,36469,36470,36471],{"align":31600},"CMD ",[102,36472,36473],{},"“node”, “index.js”",[9183,36475,36476,36479,36482],{},[9228,36477,36478],{"align":31600},"ENTRYPOINT",[9228,36480,36481],{"align":31600},"设置容器启动时固定命令（通常用于 CLI 工具等）",[9228,36483,36484,36485],{"align":31600},"ENTRYPOINT ",[102,36486,36487],{},"“python3”",[9183,36489,36490,36493,36496],{},[9228,36491,36492],{"align":31600},"EXPOSE",[9228,36494,36495],{"align":31600},"声明镜像内服务监听的端口（不会自动映射）",[9228,36497,36498],{"align":31600},"EXPOSE 80",[9183,36500,36501,36504,36507],{},[9228,36502,36503],{"align":31600},"VOLUME",[9228,36505,36506],{"align":31600},"声明数据卷挂载点",[9228,36508,36509,36510],{"align":31600},"VOLUME ",[102,36511,36512],{},"“\u002Fdata”",[9183,36514,36515,36518,36521],{},[9228,36516,36517],{"align":31600},"USER",[9228,36519,36520],{"align":31600},"设置后续命令执行的用户",[9228,36522,36523],{"align":31600},"USER appuser",[9183,36525,36526,36529,36532],{},[9228,36527,36528],{"align":31600},"ONBUILD",[9228,36530,36531],{"align":31600},"当镜像作为其他镜像基础镜像时触发的构建指令",[9228,36533,36534],{"align":31600},"ONBUILD COPY . \u002Fsrc",[9183,36536,36537,36540,36543],{},[9228,36538,36539],{"align":31600},"SHELL",[9228,36541,36542],{"align":31600},"更改默认 shell，比如将 sh -c 改为 bash -c",[9228,36544,36545,36546],{"align":31600},"SHELL ",[102,36547,36548],{},"“\u002Fbin\u002Fbash”, “-c”",[9183,36550,36551,36554,36557],{},[9228,36552,36553],{"align":31600},"HEALTHCHECK",[9228,36555,36556],{"align":31600},"定义容器运行时的健康检查命令",[9228,36558,36559,36560],{"align":31600},"`HEALTHCHECK CMD curl –fail ",[9275,36561,36562],{"href":36562,"rel":36563},"http:\u002F\u002Flocalhost:8080",[31729],[9183,36565,36566,36569,36572],{},[9228,36567,36568],{"align":31600},"STOPSIGNAL",[9228,36570,36571],{"align":31600},"容器停止时发送的信号",[9228,36573,36574],{"align":31600},"STOPSIGNAL SIGKILL",[48,36576,36578],{"id":36577},"_62自己创建容器","6.2.自己创建容器",[7601,36580,36582],{"id":36581},"_621手动创建","6.2.1.手动创建",[14,36584,36585],{},"在x86电脑上编译x86的：",[93,36587,36589],{"className":31686,"code":36588,"language":31688,"meta":98,"style":98},"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",[83,36590,36591,36607,36611,36624,36628,36641,36645,36658,36662,36675,36679],{"__ignoreMap":98},[102,36592,36593,36595,36598,36601,36604],{"class":104,"line":105},[102,36594,34418],{"class":112},[102,36596,36597],{"class":278}," build",[102,36599,36600],{"class":187}," -t",[102,36602,36603],{"class":278}," ros-melodic-cuda118-cudnn8-bionic:latest",[102,36605,36606],{"class":278}," .\n",[102,36608,36609],{"class":104,"line":116},[102,36610,652],{"emptyLinePlaceholder":651},[102,36612,36613,36615,36617,36619,36622],{"class":104,"line":123},[102,36614,34418],{"class":112},[102,36616,36597],{"class":278},[102,36618,36600],{"class":187},[102,36620,36621],{"class":278}," ros-noetic-focal:latest",[102,36623,36606],{"class":278},[102,36625,36626],{"class":104,"line":130},[102,36627,652],{"emptyLinePlaceholder":651},[102,36629,36630,36632,36634,36636,36639],{"class":104,"line":136},[102,36631,34418],{"class":112},[102,36633,36597],{"class":278},[102,36635,36600],{"class":187},[102,36637,36638],{"class":278}," ros-humble-jammy:latest",[102,36640,36606],{"class":278},[102,36642,36643],{"class":104,"line":142},[102,36644,652],{"emptyLinePlaceholder":651},[102,36646,36647,36649,36651,36653,36656],{"class":104,"line":148},[102,36648,34418],{"class":112},[102,36650,36597],{"class":278},[102,36652,36600],{"class":187},[102,36654,36655],{"class":278}," ros-jazzy-noble:latest",[102,36657,36606],{"class":278},[102,36659,36660],{"class":104,"line":157},[102,36661,652],{"emptyLinePlaceholder":651},[102,36663,36664,36666,36668,36670,36673],{"class":104,"line":163},[102,36665,34418],{"class":112},[102,36667,36597],{"class":278},[102,36669,36600],{"class":187},[102,36671,36672],{"class":278}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[102,36674,36606],{"class":278},[102,36676,36677],{"class":104,"line":175},[102,36678,652],{"emptyLinePlaceholder":651},[102,36680,36681,36683,36685,36687,36690],{"class":104,"line":181},[102,36682,34418],{"class":112},[102,36684,36597],{"class":278},[102,36686,36600],{"class":187},[102,36688,36689],{"class":278}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[102,36691,36606],{"class":278},[14,36693,36694],{},[6750,36695],{"alt":98,"src":36696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,36698,36699],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,36701,36702],{},[6750,36703],{"alt":98,"src":36704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,36706,36707],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[87,36709,36710],{},[62,36711,36712],{},"创建 Docker Hub 账户",[14,36714,36715],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[87,36717,36718],{"start":116},[62,36719,36720],{},"登录 Docker Hub",[14,36722,36723],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[93,36725,36727],{"className":31686,"code":36726,"language":31688,"meta":98,"style":98},"docker login\n",[83,36728,36729],{"__ignoreMap":98},[102,36730,36731,36733],{"class":104,"line":105},[102,36732,34418],{"class":112},[102,36734,36735],{"class":278}," login\n",[14,36737,36738],{},"输入你的 Docker Hub 用户名和密码进行验证。",[87,36740,36741],{},[62,36742,36743],{},"为你的镜像打标签",[14,36745,36746,36747,36750],{},"Docker Hub 使用 ",[83,36748,36749],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[93,36752,36754],{"className":31686,"code":36753,"language":31688,"meta":98,"style":98},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[83,36755,36756],{"__ignoreMap":98},[102,36757,36758,36760,36763,36765,36768,36771,36774,36776],{"class":104,"line":105},[102,36759,34418],{"class":112},[102,36761,36762],{"class":278}," tag",[102,36764,36655],{"class":278},[102,36766,36767],{"class":108}," \u003C",[102,36769,36770],{"class":278},"你的用户",[102,36772,36773],{"class":119},"名",[102,36775,1219],{"class":108},[102,36777,36778],{"class":278},"\u002Fros-jazzy-noble:latest\n",[14,36780,36781,36782,36785],{},"例如，如果你的 Docker Hub 用户名是 ",[83,36783,36784],{},"tungchiahui","，你应该执行：",[93,36787,36789],{"className":31686,"code":36788,"language":31688,"meta":98,"style":98},"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",[83,36790,36791,36802,36806,36817,36821,36832,36836,36847,36851],{"__ignoreMap":98},[102,36792,36793,36795,36797,36799],{"class":104,"line":105},[102,36794,34418],{"class":112},[102,36796,36762],{"class":278},[102,36798,36621],{"class":278},[102,36800,36801],{"class":278}," tungchiahui\u002Fros-noetic-focal:latest\n",[102,36803,36804],{"class":104,"line":116},[102,36805,652],{"emptyLinePlaceholder":651},[102,36807,36808,36810,36812,36814],{"class":104,"line":123},[102,36809,34418],{"class":112},[102,36811,36762],{"class":278},[102,36813,36638],{"class":278},[102,36815,36816],{"class":278}," tungchiahui\u002Fros-humble-jammy:latest\n",[102,36818,36819],{"class":104,"line":130},[102,36820,652],{"emptyLinePlaceholder":651},[102,36822,36823,36825,36827,36829],{"class":104,"line":136},[102,36824,34418],{"class":112},[102,36826,36762],{"class":278},[102,36828,36655],{"class":278},[102,36830,36831],{"class":278}," tungchiahui\u002Fros-jazzy-noble:latest\n",[102,36833,36834],{"class":104,"line":142},[102,36835,652],{"emptyLinePlaceholder":651},[102,36837,36838,36840,36842,36844],{"class":104,"line":148},[102,36839,34418],{"class":112},[102,36841,36762],{"class":278},[102,36843,36672],{"class":278},[102,36845,36846],{"class":278}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[102,36848,36849],{"class":104,"line":157},[102,36850,652],{"emptyLinePlaceholder":651},[102,36852,36853,36855,36857,36859],{"class":104,"line":163},[102,36854,34418],{"class":112},[102,36856,36762],{"class":278},[102,36858,36689],{"class":278},[102,36860,36861],{"class":278}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[87,36863,36864],{"start":116},[62,36865,36866],{},"推送镜像到 Docker Hub",[14,36868,36869],{},"使用以下命令将镜像推送到 Docker Hub：",[93,36871,36873],{"className":31686,"code":36872,"language":31688,"meta":98,"style":98},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[83,36874,36875],{"__ignoreMap":98},[102,36876,36877,36879,36882,36884,36886,36888,36890],{"class":104,"line":105},[102,36878,34418],{"class":112},[102,36880,36881],{"class":278}," push",[102,36883,36767],{"class":108},[102,36885,36770],{"class":278},[102,36887,36773],{"class":119},[102,36889,1219],{"class":108},[102,36891,36892],{"class":278},"\u002Fros-noetic-jazzy-noble:latest\n",[14,36894,32],{},[93,36896,36898],{"className":31686,"code":36897,"language":31688,"meta":98,"style":98},"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",[83,36899,36900,36908,36912,36920,36924,36932,36936,36945,36949,36957,36961],{"__ignoreMap":98},[102,36901,36902,36904,36906],{"class":104,"line":105},[102,36903,34418],{"class":112},[102,36905,36881],{"class":278},[102,36907,36801],{"class":278},[102,36909,36910],{"class":104,"line":116},[102,36911,652],{"emptyLinePlaceholder":651},[102,36913,36914,36916,36918],{"class":104,"line":123},[102,36915,34418],{"class":112},[102,36917,36881],{"class":278},[102,36919,36816],{"class":278},[102,36921,36922],{"class":104,"line":130},[102,36923,652],{"emptyLinePlaceholder":651},[102,36925,36926,36928,36930],{"class":104,"line":136},[102,36927,34418],{"class":112},[102,36929,36881],{"class":278},[102,36931,36831],{"class":278},[102,36933,36934],{"class":104,"line":142},[102,36935,652],{"emptyLinePlaceholder":651},[102,36937,36938,36940,36942],{"class":104,"line":148},[102,36939,34418],{"class":112},[102,36941,36881],{"class":278},[102,36943,36944],{"class":278}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[102,36946,36947],{"class":104,"line":157},[102,36948,652],{"emptyLinePlaceholder":651},[102,36950,36951,36953,36955],{"class":104,"line":163},[102,36952,34418],{"class":112},[102,36954,36881],{"class":278},[102,36956,36861],{"class":278},[102,36958,36959],{"class":104,"line":175},[102,36960,652],{"emptyLinePlaceholder":651},[102,36962,36963,36965,36967],{"class":104,"line":181},[102,36964,34418],{"class":112},[102,36966,36881],{"class":278},[102,36968,36969],{"class":278}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[87,36971,36972],{"start":123},[62,36973,36974],{},"验证推送成功",[14,36976,36977],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,36979,36980],{},[18,36981,12597],{},[59,36983,36984,36987],{},[62,36985,36986],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[62,36988,36989],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,36991,36992],{},[6750,36993],{"alt":98,"src":36994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,36996,36997],{},[6750,36998],{"alt":98,"src":36999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[7601,37001,37003],{"id":37002},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,37005,37006,37007,37010,37011,37014],{},"如果您想在 ",[18,37008,37009],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[18,37012,37013],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,37016,37017,37018],{},"1. ",[18,37019,37020],{},"启用 Docker 跨平台构建",[14,37022,37023],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,37025,37026],{},"第一步：启用 buildx（只需执行一次）",[93,37028,37030],{"className":31686,"code":37029,"language":31688,"meta":98,"style":98},"docker buildx create --name multiarch_builder --use\n",[83,37031,37032],{"__ignoreMap":98},[102,37033,37034,37036,37039,37042,37045,37048],{"class":104,"line":105},[102,37035,34418],{"class":112},[102,37037,37038],{"class":278}," buildx",[102,37040,37041],{"class":278}," create",[102,37043,37044],{"class":187}," --name",[102,37046,37047],{"class":278}," multiarch_builder",[102,37049,37050],{"class":187}," --use\n",[14,37052,37053],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,37055,37056],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[93,37058,37060],{"className":31686,"code":37059,"language":31688,"meta":98,"style":98},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[83,37061,37062],{"__ignoreMap":98},[102,37063,37064,37066,37068,37070,37073,37076,37079,37082],{"class":104,"line":105},[102,37065,34418],{"class":112},[102,37067,35095],{"class":278},[102,37069,35098],{"class":187},[102,37071,37072],{"class":187}," --privileged",[102,37074,37075],{"class":278}," multiarch\u002Fqemu-user-static",[102,37077,37078],{"class":187}," --reset",[102,37080,37081],{"class":187}," -p",[102,37083,37084],{"class":278}," yes\n",[14,37086,37087],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,37089,37090],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[93,37092,37094],{"className":31686,"code":37093,"language":31688,"meta":98,"style":98},"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",[83,37095,37096,37138,37142,37147,37157,37167,37176,37182,37186,37190,37200,37208,37217,37223,37227,37231,37241,37249,37258,37264,37268,37272,37282,37290,37299,37305,37309,37313,37323,37331,37340,37346,37350,37354,37364,37372,37381,37387,37391,37395,37405,37413,37422,37428,37432,37436,37446,37454,37463,37469,37473,37477,37487,37495,37504,37510,37514,37518,37529,37537,37546,37552],{"__ignoreMap":98},[102,37097,37098,37100,37102,37104,37107,37110,37112,37114,37117,37119,37121,37123,37125,37128,37131,37133,37136],{"class":104,"line":105},[102,37099,34418],{"class":112},[102,37101,37038],{"class":278},[102,37103,36597],{"class":278},[102,37105,37106],{"class":187}," --platform",[102,37108,37109],{"class":278}," linux\u002Famd64,linux\u002Farm64",[102,37111,36600],{"class":187},[102,37113,36767],{"class":108},[102,37115,37116],{"class":278},"你的镜像",[102,37118,36773],{"class":119},[102,37120,1219],{"class":108},[102,37122,9881],{"class":278},[102,37124,1208],{"class":108},[102,37126,37127],{"class":278},"标",[102,37129,37130],{"class":119},"签",[102,37132,1219],{"class":108},[102,37134,37135],{"class":187}," --push",[102,37137,36606],{"class":278},[102,37139,37140],{"class":104,"line":116},[102,37141,652],{"emptyLinePlaceholder":651},[102,37143,37144],{"class":104,"line":123},[102,37145,37146],{"class":126},"# 例子：\n",[102,37148,37149,37151,37153,37155],{"class":104,"line":130},[102,37150,34418],{"class":112},[102,37152,37038],{"class":278},[102,37154,36597],{"class":278},[102,37156,32543],{"class":187},[102,37158,37159,37162,37165],{"class":104,"line":136},[102,37160,37161],{"class":119},"--platform ",[102,37163,37164],{"class":278},"linux\u002Famd64,linux\u002Farm64",[102,37166,32543],{"class":187},[102,37168,37169,37171,37174],{"class":104,"line":142},[102,37170,36600],{"class":187},[102,37172,37173],{"class":278}," tungchiahui\u002Fros:noetic-focal",[102,37175,32543],{"class":187},[102,37177,37178,37180],{"class":104,"line":148},[102,37179,37135],{"class":187},[102,37181,32543],{"class":187},[102,37183,37184],{"class":104,"line":157},[102,37185,36606],{"class":278},[102,37187,37188],{"class":104,"line":163},[102,37189,652],{"emptyLinePlaceholder":651},[102,37191,37192,37194,37196,37198],{"class":104,"line":175},[102,37193,34418],{"class":112},[102,37195,37038],{"class":278},[102,37197,36597],{"class":278},[102,37199,32543],{"class":187},[102,37201,37202,37204,37206],{"class":104,"line":181},[102,37203,37161],{"class":119},[102,37205,37164],{"class":278},[102,37207,32543],{"class":187},[102,37209,37210,37212,37215],{"class":104,"line":202},[102,37211,36600],{"class":187},[102,37213,37214],{"class":278}," tungchiahui\u002Fros:humble-jammy",[102,37216,32543],{"class":187},[102,37218,37219,37221],{"class":104,"line":208},[102,37220,37135],{"class":187},[102,37222,32543],{"class":187},[102,37224,37225],{"class":104,"line":214},[102,37226,36606],{"class":278},[102,37228,37229],{"class":104,"line":225},[102,37230,652],{"emptyLinePlaceholder":651},[102,37232,37233,37235,37237,37239],{"class":104,"line":230},[102,37234,34418],{"class":112},[102,37236,37038],{"class":278},[102,37238,36597],{"class":278},[102,37240,32543],{"class":187},[102,37242,37243,37245,37247],{"class":104,"line":236},[102,37244,37161],{"class":119},[102,37246,37164],{"class":278},[102,37248,32543],{"class":187},[102,37250,37251,37253,37256],{"class":104,"line":242},[102,37252,36600],{"class":187},[102,37254,37255],{"class":278}," tungchiahui\u002Fros:jazzy-noble",[102,37257,32543],{"class":187},[102,37259,37260,37262],{"class":104,"line":248},[102,37261,37135],{"class":187},[102,37263,32543],{"class":187},[102,37265,37266],{"class":104,"line":254},[102,37267,36606],{"class":278},[102,37269,37270],{"class":104,"line":269},[102,37271,652],{"emptyLinePlaceholder":651},[102,37273,37274,37276,37278,37280],{"class":104,"line":298},[102,37275,34185],{"class":112},[102,37277,37038],{"class":278},[102,37279,36597],{"class":278},[102,37281,32543],{"class":187},[102,37283,37284,37286,37288],{"class":104,"line":502},[102,37285,37161],{"class":119},[102,37287,37164],{"class":278},[102,37289,32543],{"class":187},[102,37291,37292,37294,37297],{"class":104,"line":507},[102,37293,36600],{"class":187},[102,37295,37296],{"class":278}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[102,37298,32543],{"class":187},[102,37300,37301,37303],{"class":104,"line":512},[102,37302,37135],{"class":187},[102,37304,32543],{"class":187},[102,37306,37307],{"class":104,"line":521},[102,37308,36606],{"class":278},[102,37310,37311],{"class":104,"line":526},[102,37312,652],{"emptyLinePlaceholder":651},[102,37314,37315,37317,37319,37321],{"class":104,"line":532},[102,37316,34418],{"class":112},[102,37318,37038],{"class":278},[102,37320,36597],{"class":278},[102,37322,32543],{"class":187},[102,37324,37325,37327,37329],{"class":104,"line":538},[102,37326,37161],{"class":119},[102,37328,37164],{"class":278},[102,37330,32543],{"class":187},[102,37332,37333,37335,37338],{"class":104,"line":555},[102,37334,36600],{"class":187},[102,37336,37337],{"class":278}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[102,37339,32543],{"class":187},[102,37341,37342,37344],{"class":104,"line":570},[102,37343,37135],{"class":187},[102,37345,32543],{"class":187},[102,37347,37348],{"class":104,"line":581},[102,37349,36606],{"class":278},[102,37351,37352],{"class":104,"line":819},[102,37353,652],{"emptyLinePlaceholder":651},[102,37355,37356,37358,37360,37362],{"class":104,"line":828},[102,37357,34185],{"class":112},[102,37359,37038],{"class":278},[102,37361,36597],{"class":278},[102,37363,32543],{"class":187},[102,37365,37366,37368,37370],{"class":104,"line":837},[102,37367,37161],{"class":119},[102,37369,37164],{"class":278},[102,37371,32543],{"class":187},[102,37373,37374,37376,37379],{"class":104,"line":842},[102,37375,36600],{"class":187},[102,37377,37378],{"class":278}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[102,37380,32543],{"class":187},[102,37382,37383,37385],{"class":104,"line":855},[102,37384,37135],{"class":187},[102,37386,32543],{"class":187},[102,37388,37389],{"class":104,"line":860},[102,37390,36606],{"class":278},[102,37392,37393],{"class":104,"line":871},[102,37394,652],{"emptyLinePlaceholder":651},[102,37396,37397,37399,37401,37403],{"class":104,"line":1359},[102,37398,34418],{"class":112},[102,37400,37038],{"class":278},[102,37402,36597],{"class":278},[102,37404,32543],{"class":187},[102,37406,37407,37409,37411],{"class":104,"line":1368},[102,37408,37161],{"class":119},[102,37410,37164],{"class":278},[102,37412,32543],{"class":187},[102,37414,37415,37417,37420],{"class":104,"line":1373},[102,37416,36600],{"class":187},[102,37418,37419],{"class":278}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[102,37421,32543],{"class":187},[102,37423,37424,37426],{"class":104,"line":1378},[102,37425,37135],{"class":187},[102,37427,32543],{"class":187},[102,37429,37430],{"class":104,"line":1384},[102,37431,36606],{"class":278},[102,37433,37434],{"class":104,"line":1398},[102,37435,652],{"emptyLinePlaceholder":651},[102,37437,37438,37440,37442,37444],{"class":104,"line":1424},[102,37439,34418],{"class":112},[102,37441,37038],{"class":278},[102,37443,36597],{"class":278},[102,37445,32543],{"class":187},[102,37447,37448,37450,37452],{"class":104,"line":1429},[102,37449,37161],{"class":119},[102,37451,37164],{"class":278},[102,37453,32543],{"class":187},[102,37455,37456,37458,37461],{"class":104,"line":1435},[102,37457,36600],{"class":187},[102,37459,37460],{"class":278}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[102,37462,32543],{"class":187},[102,37464,37465,37467],{"class":104,"line":1450},[102,37466,37135],{"class":187},[102,37468,32543],{"class":187},[102,37470,37471],{"class":104,"line":1473},[102,37472,36606],{"class":278},[102,37474,37475],{"class":104,"line":1478},[102,37476,652],{"emptyLinePlaceholder":651},[102,37478,37479,37481,37483,37485],{"class":104,"line":1484},[102,37480,34185],{"class":112},[102,37482,37038],{"class":278},[102,37484,36597],{"class":278},[102,37486,32543],{"class":187},[102,37488,37489,37491,37493],{"class":104,"line":1499},[102,37490,37161],{"class":119},[102,37492,37164],{"class":278},[102,37494,32543],{"class":187},[102,37496,37497,37499,37502],{"class":104,"line":1508},[102,37498,36600],{"class":187},[102,37500,37501],{"class":278}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[102,37503,32543],{"class":187},[102,37505,37506,37508],{"class":104,"line":1513},[102,37507,37135],{"class":187},[102,37509,32543],{"class":187},[102,37511,37512],{"class":104,"line":1524},[102,37513,36606],{"class":278},[102,37515,37516],{"class":104,"line":1529},[102,37517,652],{"emptyLinePlaceholder":651},[102,37519,37520,37523,37525,37527],{"class":104,"line":1538},[102,37521,37522],{"class":112},"  docker",[102,37524,37038],{"class":278},[102,37526,36597],{"class":278},[102,37528,32543],{"class":187},[102,37530,37531,37533,37535],{"class":104,"line":2089},[102,37532,37161],{"class":119},[102,37534,37164],{"class":278},[102,37536,32543],{"class":187},[102,37538,37539,37541,37544],{"class":104,"line":2094},[102,37540,36600],{"class":187},[102,37542,37543],{"class":278}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[102,37545,32543],{"class":187},[102,37547,37548,37550],{"class":104,"line":2100},[102,37549,37135],{"class":187},[102,37551,32543],{"class":187},[102,37553,37554],{"class":104,"line":2106},[102,37555,36606],{"class":278},[14,37557,37558],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,37560,37561],{},[6750,37562],{"alt":98,"src":37563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,37565,37566],{},[6750,37567],{"alt":98,"src":37568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[7601,37570,37572],{"id":37571},"_623清除构建缓存","6.2.3.清除构建缓存",[93,37574,37576],{"className":31686,"code":37575,"language":31688,"meta":98,"style":98},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[83,37577,37578,37583],{"__ignoreMap":98},[102,37579,37580],{"class":104,"line":105},[102,37581,37582],{"class":126},"# 清理BuildKit构建缓存\n",[102,37584,37585,37587,37590,37593],{"class":104,"line":116},[102,37586,34418],{"class":112},[102,37588,37589],{"class":278}," builder",[102,37591,37592],{"class":278}," prune",[102,37594,37595],{"class":187}," -f\n",[14,37597,37598],{},[6750,37599],{"alt":98,"src":37600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[48,37602,37604],{"id":37603},"_63补充","6.3.补充",[7601,37606,37608],{"id":37607},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,37610,37611],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,37613,37614],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,37616,37617],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[93,37619,37621],{"className":31686,"code":37620,"language":31688,"meta":98,"style":98},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[83,37622,37623,37630],{"__ignoreMap":98},[102,37624,37625,37627],{"class":104,"line":105},[102,37626,35235],{"class":112},[102,37628,37629],{"class":278}," nginx\n",[102,37631,37632,37634,37637,37640,37642],{"class":104,"line":116},[102,37633,36420],{"class":112},[102,37635,37636],{"class":278}," echo",[102,37638,37639],{"class":278}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[102,37641,34087],{"class":108},[102,37643,37644],{"class":278}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,37646,37647],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,37649,37650],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[93,37652,37654],{"className":31686,"code":37653,"language":31688,"meta":98,"style":98},"docker build -t nginx:tuling .\n",[83,37655,37656],{"__ignoreMap":98},[102,37657,37658,37660,37662,37664,37667],{"class":104,"line":105},[102,37659,34418],{"class":112},[102,37661,36597],{"class":278},[102,37663,36600],{"class":187},[102,37665,37666],{"class":278}," nginx:tuling",[102,37668,36606],{"class":278},[14,37670,37671],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,37673,37674],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[93,37676,37678],{"className":31686,"code":37677,"language":31688,"meta":98,"style":98},"docker run -d -p 92:80 nginx:tuling\n",[83,37679,37680],{"__ignoreMap":98},[102,37681,37682,37684,37686,37689,37691,37694],{"class":104,"line":105},[102,37683,34418],{"class":112},[102,37685,35095],{"class":278},[102,37687,37688],{"class":187}," -d",[102,37690,37081],{"class":187},[102,37692,37693],{"class":278}," 92:80",[102,37695,37696],{"class":278}," nginx:tuling\n",[14,37698,37699,37700],{},"4、访问 ",[9275,37701,37704],{"href":37702,"rel":37703},"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",[31729],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,37706,37707],{},[6750,37708],{"alt":98,"src":37709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,37711,37712],{},[6750,37713],{"alt":98,"src":37714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[7601,37716,37718],{"id":37717},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,37720,37721],{},"只需要知道大体流程即可",[14,37723,37724],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,37726,37727],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,37729,37730],{},"2、在Dockerfile中添加以下内容",[93,37732,37734],{"className":33956,"code":37733,"language":33958,"meta":98,"style":98},"# 基于哪个镜像\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",[83,37735,37736,37741,37746,37751,37756,37761,37766,37771],{"__ignoreMap":98},[102,37737,37738],{"class":104,"line":105},[102,37739,37740],{},"# 基于哪个镜像\n",[102,37742,37743],{"class":104,"line":116},[102,37744,37745],{},"From java:8\n",[102,37747,37748],{"class":104,"line":123},[102,37749,37750],{},"# 复制文件到容器\n",[102,37752,37753],{"class":104,"line":130},[102,37754,37755],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[102,37757,37758],{"class":104,"line":136},[102,37759,37760],{},"# 声明需要暴露的端口\n",[102,37762,37763],{"class":104,"line":142},[102,37764,37765],{},"EXPOSE 8877\n",[102,37767,37768],{"class":104,"line":148},[102,37769,37770],{},"# 配置容器启动后执行的命令\n",[102,37772,37773],{"class":104,"line":157},[102,37774,37775],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,37777,37778],{},"3、使用docker build命令构建镜像",[93,37780,37782],{"className":31686,"code":37781,"language":31688,"meta":98,"style":98},"docker build -t tulingmall-member:0.0.5 .\n",[83,37783,37784],{"__ignoreMap":98},[102,37785,37786,37788,37790,37792,37795],{"class":104,"line":105},[102,37787,34418],{"class":112},[102,37789,36597],{"class":278},[102,37791,36600],{"class":187},[102,37793,37794],{"class":278}," tulingmall-member:0.0.5",[102,37796,36606],{"class":278},[14,37798,37799],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,37801,37802],{},[6750,37803],{"alt":98,"src":37804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,37806,37807],{},"4、启动镜像，加-d可在后台启动",[93,37809,37811],{"className":31686,"code":37810,"language":31688,"meta":98,"style":98},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[83,37812,37813],{"__ignoreMap":98},[102,37814,37815,37817,37819,37821,37823,37826],{"class":104,"line":105},[102,37816,34418],{"class":112},[102,37818,35095],{"class":278},[102,37820,37688],{"class":187},[102,37822,37081],{"class":187},[102,37824,37825],{"class":278}," 8877:8877",[102,37827,37828],{"class":278}," tulingmall-member:0.0.5\n",[14,37830,37831],{},"加上JVM参数：",[93,37833,37835],{"className":31686,"code":37834,"language":31688,"meta":98,"style":98},"# --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",[83,37836,37837,37842,37857,37867,37876,37883],{"__ignoreMap":98},[102,37838,37839],{"class":104,"line":105},[102,37840,37841],{"class":126},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[102,37843,37844,37846,37848,37851,37853,37855],{"class":104,"line":116},[102,37845,34418],{"class":112},[102,37847,35095],{"class":278},[102,37849,37850],{"class":187},"  -d",[102,37852,37081],{"class":187},[102,37854,37825],{"class":278},[102,37856,32543],{"class":187},[102,37858,37859,37861,37864],{"class":104,"line":123},[102,37860,35993],{"class":119},[102,37862,37863],{"class":278},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[102,37865,37866],{"class":187},"  \\\n",[102,37868,37869,37871,37874],{"class":104,"line":130},[102,37870,35993],{"class":119},[102,37872,37873],{"class":278},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[102,37875,37866],{"class":187},[102,37877,37878,37881],{"class":104,"line":136},[102,37879,37880],{"class":119},"--cap-add=SYS_PTRACE  ",[102,37882,34040],{"class":187},[102,37884,37885],{"class":104,"line":142},[102,37886,37887],{"class":119},"tulingmall-member:0.0.5\n",[14,37889,37890],{},"5、访问会员服务接口",[14,37892,37893],{},[6750,37894],{"alt":98,"src":37895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[7601,37897,37899],{"id":37898},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,37901,37902],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,37904,37905,37906],{},"阿里云docker镜像仓库：",[9275,37907,37908],{"href":37908,"rel":37909},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[31729],[14,37911,37912],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,37914,37915],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,37917,37918],{},[6750,37919],{"alt":98,"src":37920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,37922,37923],{},"要把镜像推送到镜像仓库",[93,37925,37927],{"className":31686,"code":37926,"language":31688,"meta":98,"style":98},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[83,37928,37929],{"__ignoreMap":98},[102,37930,37931,37933,37935,37937],{"class":104,"line":105},[102,37932,34418],{"class":112},[102,37934,36762],{"class":278},[102,37936,37794],{"class":278},[102,37938,37939],{"class":278}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,37941,37942],{},"最后将镜像推送到远程仓库",[93,37944,37946],{"className":31686,"code":37945,"language":31688,"meta":98,"style":98},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[83,37947,37948],{"__ignoreMap":98},[102,37949,37950,37952,37954],{"class":104,"line":105},[102,37951,34418],{"class":112},[102,37953,36881],{"class":278},[102,37955,37939],{"class":278},[8955,37957,37958],{},"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":98,"searchDepth":116,"depth":116,"links":37960},[37961,37962,37963],{"id":36348,"depth":123,"text":36349},{"id":36577,"depth":123,"text":36578},{"id":37603,"depth":123,"text":37604},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":36340,"description":98},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":37970,"title":37971,"body":37972,"description":98,"extension":8978,"meta":38115,"navigation":651,"path":38116,"seo":38117,"stem":38118,"__hash__":38119},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":37973,"toc":38113},[37974,37977,37982,37987,37990,37995,38000,38003,38008,38013,38016,38021,38024,38027,38030,38033,38036,38039,38059,38081,38084,38087,38107,38110],[10,37975,37971],{"id":37976},"_7vscode远程开发",[87,37978,37979],{},[62,37980,37981],{},"插件1：微软Docker工具",[14,37983,37984],{},[6750,37985],{"alt":98,"src":37986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,37988,37989],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,37991,37992],{},[6750,37993],{"alt":98,"src":37994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[87,37996,37997],{"start":116},[62,37998,37999],{},"插件2：微软Docker远程开发工具",[14,38001,38002],{},"下面这是远程开发的插件。",[14,38004,38005],{},[6750,38006],{"alt":98,"src":38007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,38009,38010],{},[6750,38011],{"alt":98,"src":38012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,38014,38015],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,38017,38018],{},[6750,38019],{"alt":98,"src":38020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,38022,38023],{},"安装完拓展之后，vscode进行链接：",[14,38025,38026],{},"1.按ctrl+shift+p",[14,38028,38029],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,38031,38032],{},"3.选择目前运行的容器",[14,38034,38035],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,38037,38038],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[93,38040,38042],{"className":31686,"code":38041,"language":31688,"meta":98,"style":98},"docker run -v 主机目录:容器目录 image-name\n",[83,38043,38044],{"__ignoreMap":98},[102,38045,38046,38048,38050,38053,38056],{"class":104,"line":105},[102,38047,34418],{"class":112},[102,38049,35095],{"class":278},[102,38051,38052],{"class":187}," -v",[102,38054,38055],{"class":278}," 主机目录:容器目录",[102,38057,38058],{"class":278}," image-name\n",[93,38060,38062],{"className":31686,"code":38061,"language":31688,"meta":98,"style":98},"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",[83,38063,38064],{"__ignoreMap":98},[102,38065,38066,38068,38070,38073,38075,38078],{"class":104,"line":105},[102,38067,34418],{"class":112},[102,38069,35095],{"class":278},[102,38071,38072],{"class":187}," -it",[102,38074,38052],{"class":187},[102,38076,38077],{"class":278}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[102,38079,38080],{"class":278}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,38082,38083],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,38085,38086],{},"查看挂载情况：",[93,38088,38090],{"className":31686,"code":38089,"language":31688,"meta":98,"style":98},"mount | grep -i project\n",[83,38091,38092],{"__ignoreMap":98},[102,38093,38094,38097,38099,38102,38104],{"class":104,"line":105},[102,38095,38096],{"class":112},"mount",[102,38098,32974],{"class":108},[102,38100,38101],{"class":112}," grep",[102,38103,34295],{"class":187},[102,38105,38106],{"class":278}," project\n",[14,38108,38109],{},"也可以通过ls来进行查看",[8955,38111,38112],{},"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":98,"searchDepth":116,"depth":116,"links":38114},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":37971,"description":98},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":38121,"title":38122,"body":38123,"description":31240,"extension":8978,"meta":38127,"navigation":651,"path":38129,"seo":38130,"stem":38131,"__hash__":38132},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":38124,"toc":38125},[],{"title":98,"searchDepth":116,"depth":116,"links":38126},[],{"category":38128},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":38122,"description":31240},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":38134,"title":38135,"body":38136,"description":31240,"extension":8978,"meta":38140,"navigation":651,"path":38141,"seo":38142,"stem":38143,"__hash__":38144},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":38137,"toc":38138},[],{"title":98,"searchDepth":116,"depth":116,"links":38139},[],{"category":38128},"\u002Fwiki\u002F2025-11-10-k8s",{"title":38135,"description":31240},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":38146,"title":38147,"body":38148,"description":31240,"extension":8978,"meta":38441,"navigation":651,"path":38442,"seo":38443,"stem":38444,"__hash__":38445},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":38149,"toc":38439},[38150,38153,38161,38176,38181,38232,38235,38241,38428,38433,38436],[10,38151,38147],{"id":38152},"_1验证深度学习环境",[14,38154,38155,38156],{},"关于环境的安装，看",[9275,38157,38160],{"href":38158,"rel":38159},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[31729],"Pytorch-->深度学习",[14,38162,38163,38164,38167,38168,38171,38172,38175],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[83,38165,38166],{},"pytorch-cuda=12.4"," 是一个“ ",[18,38169,38170],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[18,38173,38174],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,38177,38178],{},[6750,38179],{"alt":98,"src":38180},"\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",[93,38182,38184],{"className":31686,"code":38183,"language":31688,"meta":98,"style":98},"# 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",[83,38185,38186,38191],{"__ignoreMap":98},[102,38187,38188],{"class":104,"line":105},[102,38189,38190],{"class":126},"# CUDA 12.4\n",[102,38192,38193,38196,38198,38201,38204,38207,38210,38213,38215,38218,38221,38224,38227,38229],{"class":104,"line":116},[102,38194,38195],{"class":112},"conda",[102,38197,31698],{"class":278},[102,38199,38200],{"class":278}," pytorch==",[102,38202,38203],{"class":187},"2.5.1",[102,38205,38206],{"class":278}," torchvision==",[102,38208,38209],{"class":187},"0.20.1",[102,38211,38212],{"class":278}," torchaudio==",[102,38214,38203],{"class":187},[102,38216,38217],{"class":278}," pytorch-cuda=",[102,38219,38220],{"class":187},"12.4",[102,38222,38223],{"class":187}," -c",[102,38225,38226],{"class":278}," pytorch",[102,38228,38223],{"class":187},[102,38230,38231],{"class":278}," nvidia\n",[14,38233,38234],{},"）：",[14,38236,38237],{},[9275,38238,38239],{"href":38239,"rel":38240},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[31729],[93,38242,38246],{"className":38243,"code":38244,"language":38245,"meta":98,"style":98},"language-python shiki shiki-themes github-light github-dark","# 对深度学习环境进行测试\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","python",[83,38247,38248,38253,38261,38266,38276,38292,38297,38307,38344,38351,38363,38379,38384,38394,38406,38416],{"__ignoreMap":98},[102,38249,38250],{"class":104,"line":105},[102,38251,38252],{"class":126},"# 对深度学习环境进行测试\n",[102,38254,38255,38258],{"class":104,"line":116},[102,38256,38257],{"class":108},"import",[102,38259,38260],{"class":119}," torch\n",[102,38262,38263],{"class":104,"line":123},[102,38264,38265],{"class":126},"# 查看cuda是否被激活\n",[102,38267,38268,38271,38273],{"class":104,"line":130},[102,38269,38270],{"class":119},"flag",[102,38272,260],{"class":108},[102,38274,38275],{"class":119},"torch.cuda.is_available()\n",[102,38277,38278,38281,38283,38286,38289],{"class":104,"line":136},[102,38279,38280],{"class":187},"print",[102,38282,380],{"class":119},[102,38284,38285],{"class":278},"\"cuda:\"",[102,38287,38288],{"class":119},", flag)   ",[102,38290,38291],{"class":126},"#返回true的话说明被激活\n",[102,38293,38294],{"class":104,"line":142},[102,38295,38296],{"class":126},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[102,38298,38299,38302,38304],{"class":104,"line":148},[102,38300,38301],{"class":119},"ngpu",[102,38303,260],{"class":108},[102,38305,38306],{"class":187},"1\n",[102,38308,38309,38312,38314,38317,38320,38322,38325,38328,38331,38333,38335,38337,38339,38342],{"class":104,"line":157},[102,38310,38311],{"class":119},"device",[102,38313,260],{"class":108},[102,38315,38316],{"class":119},"torch.device(",[102,38318,38319],{"class":278},"\"cuda:0\"",[102,38321,10565],{"class":108},[102,38323,38324],{"class":119},"(torch.cuda.is_available() ",[102,38326,38327],{"class":108},"and",[102,38329,38330],{"class":119}," ngpu",[102,38332,1219],{"class":108},[102,38334,8423],{"class":187},[102,38336,22445],{"class":119},[102,38338,10562],{"class":108},[102,38340,38341],{"class":278}," \"cpu\"",[102,38343,390],{"class":119},[102,38345,38346,38348],{"class":104,"line":163},[102,38347,38280],{"class":187},[102,38349,38350],{"class":119},"(device)\n",[102,38352,38353,38355,38358,38360],{"class":104,"line":175},[102,38354,38280],{"class":187},[102,38356,38357],{"class":119},"(torch.cuda.get_device_name(",[102,38359,8423],{"class":187},[102,38361,38362],{"class":119},"))\n",[102,38364,38365,38367,38370,38372,38374,38376],{"class":104,"line":181},[102,38366,38280],{"class":187},[102,38368,38369],{"class":119},"(torch.rand(",[102,38371,7049],{"class":187},[102,38373,1618],{"class":119},[102,38375,7049],{"class":187},[102,38377,38378],{"class":119},").cuda())\n",[102,38380,38381],{"class":104,"line":202},[102,38382,38383],{"class":126},"# 查看cuda和cudnn的版本\n",[102,38385,38386,38389,38391],{"class":104,"line":208},[102,38387,38388],{"class":119},"cuda_version",[102,38390,260],{"class":108},[102,38392,38393],{"class":119},"torch.version.cuda\n",[102,38395,38396,38398,38400,38403],{"class":104,"line":214},[102,38397,38280],{"class":187},[102,38399,380],{"class":119},[102,38401,38402],{"class":278},"\"cuda version\"",[102,38404,38405],{"class":119},",cuda_version)\n",[102,38407,38408,38411,38413],{"class":104,"line":225},[102,38409,38410],{"class":119},"cudnn_version",[102,38412,260],{"class":108},[102,38414,38415],{"class":119},"torch.backends.cudnn.version()\n",[102,38417,38418,38420,38422,38425],{"class":104,"line":230},[102,38419,38280],{"class":187},[102,38421,380],{"class":119},[102,38423,38424],{"class":278},"\"cudnn version\"",[102,38426,38427],{"class":119},",cudnn_version)\n",[14,38429,38430],{},[6750,38431],{"alt":98,"src":38432},"\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",[14,38434,38435],{},"cuda:0 指的是一块显卡",[8955,38437,38438],{},"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":98,"searchDepth":116,"depth":116,"links":38440},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":38147,"description":31240},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":38447,"title":38448,"body":38449,"description":31240,"extension":8978,"meta":58253,"navigation":651,"path":58254,"seo":58255,"stem":58256,"__hash__":58257},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":38450,"toc":58247},[38451,38454,38458,38462,38465,38470,38475,38478,38483,38488,38493,38496,38500,38505,38509,38514,38517,38522,38525,38528,38531,38534,38539,38542,38547,38552,38557,38562,38565,38569,38572,38577,39181,39186,39189,39194,39197,39200,39664,39667,39670,39673,39676,41727,41730,41735,41740,42535,42538,42543,43321,43325,44984,44988,45702,45706,45710,45715,45720,45725,45728,45733,45738,45743,45748,45753,45757,45762,47044,47049,47052,47055,47058,47213,47216,47219,48435,48440,49135,49139,49143,49148,49153,49156,49161,49166,49171,49176,49181,49186,49191,49196,49201,49206,49211,49216,49221,49226,49231,49236,49241,49246,49251,49256,49261,49266,49271,49276,49281,49286,49291,49296,49301,49306,49310,49314,49317,50795,50799,52446,52450,53144,53148,53151,53154,53698,53701,53705,53708,55105,55109,55112,55690,57477,57481,57484,58244],[10,38452,38448],{"id":38453},"_2经典神经网络",[48,38455,38457],{"id":38456},"_21lenet与alexnet","2.1.LeNet与AlexNet",[7601,38459,38461],{"id":38460},"_211原理介绍","2.1.1.原理介绍",[14,38463,38464],{},"LeNet-5",[87,38466,38467],{},[62,38468,38469],{},"原理",[14,38471,38472],{},[6750,38473],{"alt":98,"src":38474},"\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",[14,38476,38477],{},"B是batch批次；C是channel通道",[87,38479,38480],{"start":116},[62,38481,38482],{},"网络参数详细",[14,38484,38485],{},[6750,38486],{"alt":98,"src":38487},"\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",[14,38489,38490],{},[6750,38491],{"alt":98,"src":38492},"\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",[14,38494,38495],{},"AlexNet",[87,38497,38498],{},[62,38499,38469],{},[14,38501,38502],{},[6750,38503],{"alt":98,"src":38504},"\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",[87,38506,38507],{"start":116},[62,38508,38482],{},[14,38510,38511],{},[6750,38512],{"alt":98,"src":38513},"\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",[14,38515,38516],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,38518,38519],{},[6750,38520],{"alt":98,"src":38521},"\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",[14,38523,38524],{},"数据处理中的图像增强操作:",[14,38526,38527],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,38529,38530],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,38532,38533],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,38535,38536],{},[6750,38537],{"alt":98,"src":38538},"\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",[14,38540,38541],{},"提升网络精确度的方法：LRN正则化",[14,38543,38544],{},[6750,38545],{"alt":98,"src":38546},"\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",[14,38548,38549],{},[6750,38550],{"alt":98,"src":38551},"\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",[87,38553,38554],{"start":123},[62,38555,38556],{},"AlexNet的总结",[14,38558,38559],{},[6750,38560],{"alt":98,"src":38561},"\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",[14,38563,38564],{},"比LeNet模型要深一丢丢",[7601,38566,38568],{"id":38567},"_212代码实现","2.1.2.代码实现",[14,38570,38571],{},"（1）LeNet",[87,38573,38574],{},[62,38575,38576],{},"模型搭建",[93,38578,38580],{"className":38243,"code":38579,"language":38245,"meta":98,"style":98},"# 导入库\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",[83,38581,38582,38587,38593,38598,38611,38616,38628,38632,38652,38657,38662,38673,38678,38697,38701,38706,38755,38767,38772,38801,38836,38863,38868,38880,38885,38905,38924,38943,38947,38952,38962,38979,38990,39005,39016,39027,39042,39057,39068,39075,39079,39093,39098,39121,39126,39131,39136,39140,39145,39150,39160],{"__ignoreMap":98},[102,38583,38584],{"class":104,"line":105},[102,38585,38586],{"class":126},"# 导入库\n",[102,38588,38589,38591],{"class":104,"line":116},[102,38590,38257],{"class":108},[102,38592,38260],{"class":119},[102,38594,38595],{"class":104,"line":123},[102,38596,38597],{"class":126},"# 导入神经网络层\n",[102,38599,38600,38603,38606,38608],{"class":104,"line":130},[102,38601,38602],{"class":108},"from",[102,38604,38605],{"class":119}," torch ",[102,38607,38257],{"class":108},[102,38609,38610],{"class":119}," nn\n",[102,38612,38613],{"class":104,"line":136},[102,38614,38615],{"class":126},"# 导入展示神经网络参数的包\n",[102,38617,38618,38620,38623,38625],{"class":104,"line":142},[102,38619,38602],{"class":108},[102,38621,38622],{"class":119}," torchsummary ",[102,38624,38257],{"class":108},[102,38626,38627],{"class":119}," summary\n",[102,38629,38630],{"class":104,"line":148},[102,38631,652],{"emptyLinePlaceholder":651},[102,38633,38634,38636,38639,38641,38644,38646,38649],{"class":104,"line":157},[102,38635,109],{"class":108},[102,38637,38638],{"class":112}," LeNet",[102,38640,380],{"class":119},[102,38642,38643],{"class":112},"nn",[102,38645,9585],{"class":119},[102,38647,38648],{"class":112},"Module",[102,38650,38651],{"class":119},"):\n",[102,38653,38654],{"class":104,"line":163},[102,38655,38656],{"class":126},"    # 模型初始化:\n",[102,38658,38659],{"class":104,"line":175},[102,38660,38661],{"class":126},"    # 定义一些网络层和激活函数\n",[102,38663,38664,38667,38670],{"class":104,"line":181},[102,38665,38666],{"class":108},"    def",[102,38668,38669],{"class":187}," __init__",[102,38671,38672],{"class":119},"(self):\n",[102,38674,38675],{"class":104,"line":202},[102,38676,38677],{"class":126},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[102,38679,38680,38683,38686,38689,38692,38695],{"class":104,"line":208},[102,38681,38682],{"class":187},"        super",[102,38684,38685],{"class":119},"(LeNet,",[102,38687,38688],{"class":187},"self",[102,38690,38691],{"class":119},").",[102,38693,38694],{"class":187},"__init__",[102,38696,172],{"class":119},[102,38698,38699],{"class":104,"line":214},[102,38700,652],{"emptyLinePlaceholder":651},[102,38702,38703],{"class":104,"line":225},[102,38704,38705],{"class":126},"        # 定义网络层\n",[102,38707,38708,38711,38714,38716,38719,38722,38724,38726,38728,38731,38733,38735,38737,38740,38742,38744,38746,38749,38751,38753],{"class":104,"line":230},[102,38709,38710],{"class":187},"        self",[102,38712,38713],{"class":119},".c1",[102,38715,260],{"class":108},[102,38717,38718],{"class":119},"nn.Conv2d(",[102,38720,38721],{"class":386},"in_channels",[102,38723,260],{"class":108},[102,38725,7039],{"class":187},[102,38727,1618],{"class":119},[102,38729,38730],{"class":386},"out_channels",[102,38732,260],{"class":108},[102,38734,9379],{"class":187},[102,38736,1618],{"class":119},[102,38738,38739],{"class":386},"kernel_size",[102,38741,260],{"class":108},[102,38743,9354],{"class":187},[102,38745,1618],{"class":119},[102,38747,38748],{"class":386},"padding",[102,38750,260],{"class":108},[102,38752,7044],{"class":187},[102,38754,390],{"class":119},[102,38756,38757,38759,38762,38764],{"class":104,"line":236},[102,38758,38710],{"class":187},[102,38760,38761],{"class":119},".sig",[102,38763,260],{"class":108},[102,38765,38766],{"class":119},"nn.Sigmoid()\n",[102,38768,38769],{"class":104,"line":242},[102,38770,38771],{"class":126},"        # 定义池化\n",[102,38773,38774,38776,38779,38781,38784,38786,38788,38790,38792,38795,38797,38799],{"class":104,"line":248},[102,38775,38710],{"class":187},[102,38777,38778],{"class":119},".s2",[102,38780,260],{"class":108},[102,38782,38783],{"class":119},"nn.AvgPool2d(",[102,38785,38739],{"class":386},[102,38787,260],{"class":108},[102,38789,7044],{"class":187},[102,38791,1618],{"class":119},[102,38793,38794],{"class":386},"stride",[102,38796,260],{"class":108},[102,38798,7044],{"class":187},[102,38800,390],{"class":119},[102,38802,38803,38805,38808,38810,38812,38814,38816,38818,38820,38822,38824,38826,38828,38830,38832,38834],{"class":104,"line":254},[102,38804,38710],{"class":187},[102,38806,38807],{"class":119},".c3",[102,38809,260],{"class":108},[102,38811,38718],{"class":119},[102,38813,38721],{"class":386},[102,38815,260],{"class":108},[102,38817,9379],{"class":187},[102,38819,1618],{"class":119},[102,38821,38730],{"class":386},[102,38823,260],{"class":108},[102,38825,9628],{"class":187},[102,38827,1618],{"class":119},[102,38829,38739],{"class":386},[102,38831,260],{"class":108},[102,38833,9354],{"class":187},[102,38835,390],{"class":119},[102,38837,38838,38840,38843,38845,38847,38849,38851,38853,38855,38857,38859,38861],{"class":104,"line":269},[102,38839,38710],{"class":187},[102,38841,38842],{"class":119},".s4",[102,38844,260],{"class":108},[102,38846,38783],{"class":119},[102,38848,38739],{"class":386},[102,38850,260],{"class":108},[102,38852,7044],{"class":187},[102,38854,1618],{"class":119},[102,38856,38794],{"class":386},[102,38858,260],{"class":108},[102,38860,7044],{"class":187},[102,38862,390],{"class":119},[102,38864,38865],{"class":104,"line":298},[102,38866,38867],{"class":126},"        # 定义平展层\n",[102,38869,38870,38872,38875,38877],{"class":104,"line":502},[102,38871,38710],{"class":187},[102,38873,38874],{"class":119},".flatten",[102,38876,260],{"class":108},[102,38878,38879],{"class":119},"nn.Flatten()\n",[102,38881,38882],{"class":104,"line":507},[102,38883,38884],{"class":126},"        # 定义全连接层\n",[102,38886,38887,38889,38892,38894,38897,38899,38901,38903],{"class":104,"line":512},[102,38888,38710],{"class":187},[102,38890,38891],{"class":119},".f5",[102,38893,260],{"class":108},[102,38895,38896],{"class":119},"nn.Linear(",[102,38898,12800],{"class":187},[102,38900,1618],{"class":119},[102,38902,9840],{"class":187},[102,38904,390],{"class":119},[102,38906,38907,38909,38912,38914,38916,38918,38920,38922],{"class":104,"line":521},[102,38908,38710],{"class":187},[102,38910,38911],{"class":119},".f6",[102,38913,260],{"class":108},[102,38915,38896],{"class":119},[102,38917,9840],{"class":187},[102,38919,1618],{"class":119},[102,38921,9735],{"class":187},[102,38923,390],{"class":119},[102,38925,38926,38928,38931,38933,38935,38937,38939,38941],{"class":104,"line":526},[102,38927,38710],{"class":187},[102,38929,38930],{"class":119},".f7",[102,38932,260],{"class":108},[102,38934,38896],{"class":119},[102,38936,9735],{"class":187},[102,38938,1618],{"class":119},[102,38940,263],{"class":187},[102,38942,390],{"class":119},[102,38944,38945],{"class":104,"line":532},[102,38946,652],{"emptyLinePlaceholder":651},[102,38948,38949],{"class":104,"line":538},[102,38950,38951],{"class":126},"    # 写工具->写前向传播\n",[102,38953,38954,38956,38959],{"class":104,"line":555},[102,38955,38666],{"class":108},[102,38957,38958],{"class":112}," forward",[102,38960,38961],{"class":119},"(self,x):\n",[102,38963,38964,38967,38969,38971,38974,38976],{"class":104,"line":570},[102,38965,38966],{"class":119},"        x",[102,38968,260],{"class":108},[102,38970,38688],{"class":187},[102,38972,38973],{"class":119},".sig(",[102,38975,38688],{"class":187},[102,38977,38978],{"class":119},".c1(x))\n",[102,38980,38981,38983,38985,38987],{"class":104,"line":581},[102,38982,38966],{"class":119},[102,38984,260],{"class":108},[102,38986,38688],{"class":187},[102,38988,38989],{"class":119},".s2(x)\n",[102,38991,38992,38994,38996,38998,39000,39002],{"class":104,"line":819},[102,38993,38966],{"class":119},[102,38995,260],{"class":108},[102,38997,38688],{"class":187},[102,38999,38973],{"class":119},[102,39001,38688],{"class":187},[102,39003,39004],{"class":119},".c3(x))\n",[102,39006,39007,39009,39011,39013],{"class":104,"line":828},[102,39008,38966],{"class":119},[102,39010,260],{"class":108},[102,39012,38688],{"class":187},[102,39014,39015],{"class":119},".s4(x)\n",[102,39017,39018,39020,39022,39024],{"class":104,"line":837},[102,39019,38966],{"class":119},[102,39021,260],{"class":108},[102,39023,38688],{"class":187},[102,39025,39026],{"class":119},".flatten(x)\n",[102,39028,39029,39031,39033,39035,39037,39039],{"class":104,"line":842},[102,39030,38966],{"class":119},[102,39032,260],{"class":108},[102,39034,38688],{"class":187},[102,39036,38973],{"class":119},[102,39038,38688],{"class":187},[102,39040,39041],{"class":119},".f5(x))\n",[102,39043,39044,39046,39048,39050,39052,39054],{"class":104,"line":855},[102,39045,38966],{"class":119},[102,39047,260],{"class":108},[102,39049,38688],{"class":187},[102,39051,38973],{"class":119},[102,39053,38688],{"class":187},[102,39055,39056],{"class":119},".f6(x))\n",[102,39058,39059,39061,39063,39065],{"class":104,"line":860},[102,39060,38966],{"class":119},[102,39062,260],{"class":108},[102,39064,38688],{"class":187},[102,39066,39067],{"class":119},".f7(x)\n",[102,39069,39070,39072],{"class":104,"line":871},[102,39071,184],{"class":108},[102,39073,39074],{"class":119}," x\n",[102,39076,39077],{"class":104,"line":1359},[102,39078,652],{"emptyLinePlaceholder":651},[102,39080,39081,39083,39086,39088,39091],{"class":104,"line":1368},[102,39082,10407],{"class":108},[102,39084,39085],{"class":187}," __name__",[102,39087,1876],{"class":108},[102,39089,39090],{"class":278},"\"__main__\"",[102,39092,12552],{"class":119},[102,39094,39095],{"class":104,"line":1373},[102,39096,39097],{"class":126},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[102,39099,39100,39103,39105,39107,39110,39112,39115,39117,39119],{"class":104,"line":1378},[102,39101,39102],{"class":119},"    device",[102,39104,260],{"class":108},[102,39106,38316],{"class":119},[102,39108,39109],{"class":278},"\"cuda\"",[102,39111,10565],{"class":108},[102,39113,39114],{"class":119}," torch.cuda.is_available() ",[102,39116,10562],{"class":108},[102,39118,38341],{"class":278},[102,39120,390],{"class":119},[102,39122,39123],{"class":104,"line":1384},[102,39124,39125],{"class":126},"    # 如果就是想指定用cpu用下方代码:\n",[102,39127,39128],{"class":104,"line":1398},[102,39129,39130],{"class":126},"    # device=\"cpu\"\n",[102,39132,39133],{"class":104,"line":1424},[102,39134,39135],{"class":126},"    # print(device)\n",[102,39137,39138],{"class":104,"line":1429},[102,39139,652],{"emptyLinePlaceholder":651},[102,39141,39142],{"class":104,"line":1435},[102,39143,39144],{"class":126},"    # 实例化模型\n",[102,39146,39147],{"class":104,"line":1450},[102,39148,39149],{"class":126},"    # 将模型放到设备中去运行\n",[102,39151,39152,39155,39157],{"class":104,"line":1473},[102,39153,39154],{"class":119},"    model",[102,39156,260],{"class":108},[102,39158,39159],{"class":119},"LeNet().to(device)\n",[102,39161,39162,39165,39168,39170,39172,39174,39176,39178],{"class":104,"line":1478},[102,39163,39164],{"class":187},"    print",[102,39166,39167],{"class":119},"(summary(model,(",[102,39169,7039],{"class":187},[102,39171,1618],{"class":119},[102,39173,9923],{"class":187},[102,39175,1618],{"class":119},[102,39177,9923],{"class":187},[102,39179,39180],{"class":119},")))\n",[14,39182,39183],{},[6750,39184],{"alt":98,"src":39185},"\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",[14,39187,39188],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[87,39190,39191],{"start":116},[62,39192,39193],{},"训练",[14,39195,39196],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,39198,39199],{},"在训练之前可以将数据展示看一下",[93,39201,39203],{"className":38243,"code":39202,"language":38245,"meta":98,"style":98},"# 建立画图的函数，用于展示数据\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",[83,39204,39205,39210,39215,39227,39239,39252,39257,39269,39274,39286,39291,39303,39307,39311,39332,39344,39349,39370,39381,39385,39390,39408,39419,39424,39435,39440,39451,39455,39460,39475,39488,39493,39498,39511,39524,39537,39542,39546,39551,39571,39588,39608,39621,39634,39644,39659],{"__ignoreMap":98},[102,39206,39207],{"class":104,"line":105},[102,39208,39209],{"class":126},"# 建立画图的函数，用于展示数据\n",[102,39211,39212],{"class":104,"line":116},[102,39213,39214],{"class":126},"# torchvision中包含很多内置的数据集\n",[102,39216,39217,39219,39222,39224],{"class":104,"line":123},[102,39218,38602],{"class":108},[102,39220,39221],{"class":119}," sklearn.externals.array_api_compat.torch ",[102,39223,38257],{"class":108},[102,39225,39226],{"class":119}," squeeze\n",[102,39228,39229,39231,39234,39236],{"class":104,"line":130},[102,39230,38602],{"class":108},[102,39232,39233],{"class":119}," torchvision.datasets ",[102,39235,38257],{"class":108},[102,39237,39238],{"class":119}," FashionMNIST\n",[102,39240,39241,39243,39246,39249],{"class":104,"line":136},[102,39242,38257],{"class":108},[102,39244,39245],{"class":119}," numpy ",[102,39247,39248],{"class":108},"as",[102,39250,39251],{"class":119}," np\n",[102,39253,39254],{"class":104,"line":142},[102,39255,39256],{"class":126},"# 引入处理数据集的包\n",[102,39258,39259,39261,39264,39266],{"class":104,"line":148},[102,39260,38602],{"class":108},[102,39262,39263],{"class":119}," torchvision ",[102,39265,38257],{"class":108},[102,39267,39268],{"class":119}," transforms\n",[102,39270,39271],{"class":104,"line":157},[102,39272,39273],{"class":126},"# 从torch库中引入数据处理的包\n",[102,39275,39276,39278,39281,39283],{"class":104,"line":163},[102,39277,38257],{"class":108},[102,39279,39280],{"class":119}," torch.utils.data ",[102,39282,39248],{"class":108},[102,39284,39285],{"class":119}," Data\n",[102,39287,39288],{"class":104,"line":175},[102,39289,39290],{"class":126},"# 导入画图的库\n",[102,39292,39293,39295,39298,39300],{"class":104,"line":181},[102,39294,38257],{"class":108},[102,39296,39297],{"class":119}," matplotlib.pyplot ",[102,39299,39248],{"class":108},[102,39301,39302],{"class":119}," plt\n",[102,39304,39305],{"class":104,"line":202},[102,39306,652],{"emptyLinePlaceholder":651},[102,39308,39309],{"class":104,"line":208},[102,39310,652],{"emptyLinePlaceholder":651},[102,39312,39313,39316,39318,39321,39324,39326,39329],{"class":104,"line":214},[102,39314,39315],{"class":119},"train_data",[102,39317,260],{"class":108},[102,39319,39320],{"class":119},"FashionMNIST(",[102,39322,39323],{"class":386},"root",[102,39325,260],{"class":108},[102,39327,39328],{"class":278},"'.\u002Fdata'",[102,39330,39331],{"class":119},",\n",[102,39333,39334,39337,39339,39342],{"class":104,"line":225},[102,39335,39336],{"class":386},"                        train",[102,39338,260],{"class":108},[102,39340,39341],{"class":187},"True",[102,39343,39331],{"class":119},[102,39345,39346],{"class":104,"line":230},[102,39347,39348],{"class":126},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[102,39350,39351,39354,39356,39359,39362,39364,39367],{"class":104,"line":236},[102,39352,39353],{"class":386},"                        transform",[102,39355,260],{"class":108},[102,39357,39358],{"class":119},"transforms.Compose([transforms.Resize(",[102,39360,39361],{"class":386},"size",[102,39363,260],{"class":108},[102,39365,39366],{"class":187},"224",[102,39368,39369],{"class":119},"),transforms.ToTensor()]),\n",[102,39371,39372,39375,39377,39379],{"class":104,"line":242},[102,39373,39374],{"class":386},"                        download",[102,39376,260],{"class":108},[102,39378,39341],{"class":187},[102,39380,390],{"class":119},[102,39382,39383],{"class":104,"line":248},[102,39384,652],{"emptyLinePlaceholder":651},[102,39386,39387],{"class":104,"line":254},[102,39388,39389],{"class":126},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[102,39391,39392,39395,39397,39400,39403,39405],{"class":104,"line":269},[102,39393,39394],{"class":119},"train_loader",[102,39396,260],{"class":108},[102,39398,39399],{"class":119},"Data.DataLoader(",[102,39401,39402],{"class":386},"dataset",[102,39404,260],{"class":108},[102,39406,39407],{"class":119},"train_data,\n",[102,39409,39410,39413,39415,39417],{"class":104,"line":298},[102,39411,39412],{"class":386},"                             batch_size",[102,39414,260],{"class":108},[102,39416,9241],{"class":187},[102,39418,39331],{"class":119},[102,39420,39421],{"class":104,"line":502},[102,39422,39423],{"class":126},"                             # 数据是否打乱\n",[102,39425,39426,39429,39431,39433],{"class":104,"line":507},[102,39427,39428],{"class":386},"                             shuffle",[102,39430,260],{"class":108},[102,39432,39341],{"class":187},[102,39434,39331],{"class":119},[102,39436,39437],{"class":104,"line":512},[102,39438,39439],{"class":126},"                             # 规定加载数据的进程\n",[102,39441,39442,39445,39447,39449],{"class":104,"line":521},[102,39443,39444],{"class":386},"                             num_workers",[102,39446,260],{"class":108},[102,39448,8423],{"class":187},[102,39450,390],{"class":119},[102,39452,39453],{"class":104,"line":526},[102,39454,652],{"emptyLinePlaceholder":651},[102,39456,39457],{"class":104,"line":532},[102,39458,39459],{"class":126},"# 获得一个batch的数据\n",[102,39461,39462,39464,39467,39469,39472],{"class":104,"line":538},[102,39463,11841],{"class":108},[102,39465,39466],{"class":119}," step,(b_x,b_y) ",[102,39468,33908],{"class":108},[102,39470,39471],{"class":187}," enumerate",[102,39473,39474],{"class":119},"(train_loader):\n",[102,39476,39477,39479,39482,39484,39486],{"class":104,"line":555},[102,39478,2343],{"class":108},[102,39480,39481],{"class":119}," step ",[102,39483,1219],{"class":108},[102,39485,866],{"class":187},[102,39487,12552],{"class":119},[102,39489,39490],{"class":104,"line":570},[102,39491,39492],{"class":108},"        break\n",[102,39494,39495],{"class":104,"line":581},[102,39496,39497],{"class":126},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[102,39499,39500,39503,39505,39508],{"class":104,"line":819},[102,39501,39502],{"class":119},"batch_x",[102,39504,260],{"class":108},[102,39506,39507],{"class":119},"b_x.squeeze().numpy()  ",[102,39509,39510],{"class":126},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[102,39512,39513,39516,39518,39521],{"class":104,"line":828},[102,39514,39515],{"class":119},"batch_y",[102,39517,260],{"class":108},[102,39519,39520],{"class":119},"b_y.numpy()   ",[102,39522,39523],{"class":126},"#将张量转换成功numpy数组\n",[102,39525,39526,39529,39531,39534],{"class":104,"line":837},[102,39527,39528],{"class":119},"class_label",[102,39530,260],{"class":108},[102,39532,39533],{"class":119},"train_data.classes  ",[102,39535,39536],{"class":126},"#训练集标签\n",[102,39538,39539],{"class":104,"line":842},[102,39540,39541],{"class":126},"# print(class_label)\n",[102,39543,39544],{"class":104,"line":855},[102,39545,652],{"emptyLinePlaceholder":651},[102,39547,39548],{"class":104,"line":860},[102,39549,39550],{"class":126},"# 可视化一个batch的图像\n",[102,39552,39553,39556,39559,39561,39563,39565,39567,39569],{"class":104,"line":871},[102,39554,39555],{"class":119},"plt.figure(",[102,39557,39558],{"class":386},"figsize",[102,39560,260],{"class":108},[102,39562,380],{"class":119},[102,39564,9527],{"class":187},[102,39566,1618],{"class":119},[102,39568,9354],{"class":187},[102,39570,38362],{"class":119},[102,39572,39573,39575,39578,39580,39583,39585],{"class":104,"line":1359},[102,39574,11841],{"class":108},[102,39576,39577],{"class":119}," ii ",[102,39579,33908],{"class":108},[102,39581,39582],{"class":119}," np.arange(",[102,39584,16145],{"class":187},[102,39586,39587],{"class":119},"(batch_y)):\n",[102,39589,39590,39593,39595,39597,39599,39602,39604,39606],{"class":104,"line":1368},[102,39591,39592],{"class":119},"    plt.subplot(",[102,39594,9329],{"class":187},[102,39596,1618],{"class":119},[102,39598,9628],{"class":187},[102,39600,39601],{"class":119},",ii ",[102,39603,1702],{"class":108},[102,39605,32983],{"class":187},[102,39607,390],{"class":119},[102,39609,39610,39613,39616,39618],{"class":104,"line":1373},[102,39611,39612],{"class":119},"    plt.imshow(batch_x[ii,:,:],",[102,39614,39615],{"class":386},"cmap",[102,39617,260],{"class":108},[102,39619,39620],{"class":119},"plt.cm.gray)\n",[102,39622,39623,39626,39628,39630,39632],{"class":104,"line":1378},[102,39624,39625],{"class":119},"    plt.title(class_label[batch_y[ii]],",[102,39627,39361],{"class":386},[102,39629,260],{"class":108},[102,39631,263],{"class":187},[102,39633,390],{"class":119},[102,39635,39636,39639,39642],{"class":104,"line":1384},[102,39637,39638],{"class":119},"    plt.axis(",[102,39640,39641],{"class":278},"\"off\"",[102,39643,390],{"class":119},[102,39645,39646,39649,39652,39654,39657],{"class":104,"line":1398},[102,39647,39648],{"class":119},"    plt.subplots_adjust(",[102,39650,39651],{"class":386},"wspace",[102,39653,260],{"class":108},[102,39655,39656],{"class":187},"0.05",[102,39658,390],{"class":119},[102,39660,39661],{"class":104,"line":1424},[102,39662,39663],{"class":119},"plt.show()\n",[14,39665,39666],{},"用matplotlib进行展示的过程可以后续再补",[14,39668,39669],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,39671,39672],{},"训练次数就是按照批次过整个训练集数据的次数",[14,39674,39675],{},"模型训练：",[93,39677,39679],{"className":38243,"code":39678,"language":38245,"meta":98,"style":98},"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",[83,39680,39681,39688,39695,39699,39711,39717,39728,39738,39748,39758,39768,39773,39785,39795,39799,39803,39808,39819,39832,39843,39860,39871,39910,39926,39938,39949,39954,39965,39981,39992,40003,40014,40021,40025,40030,40035,40039,40044,40054,40075,40079,40083,40088,40093,40098,40118,40122,40127,40137,40141,40146,40155,40160,40165,40170,40180,40184,40188,40193,40198,40208,40213,40223,40228,40237,40242,40251,40256,40265,40269,40274,40284,40288,40292,40297,40312,40340,40355,40359,40364,40369,40378,40383,40392,40397,40406,40411,40420,40425,40434,40439,40448,40453,40466,40471,40481,40486,40496,40502,40508,40514,40520,40531,40537,40557,40563,40574,40580,40586,40592,40598,40604,40610,40616,40636,40642,40658,40664,40678,40684,40699,40705,40714,40720,40729,40735,40741,40750,40756,40767,40773,40792,40798,40809,40815,40835,40851,40857,40871,40877,40883,40894,40900,40906,40916,40922,40933,40939,40949,40954,40960,41009,41056,41061,41067,41086,41092,41112,41118,41124,41134,41139,41145,41161,41206,41212,41218,41224,41235,41241,41247,41253,41271,41285,41294,41303,41312,41321,41327,41333,41341,41346,41352,41363,41369,41389,41395,41401,41407,41424,41430,41436,41442,41448,41454,41481,41505,41511,41517,41523,41534,41545,41551,41568,41591,41614,41620,41625,41634,41644,41650,41655,41661,41674,41680,41691,41702,41721],{"__ignoreMap":98},[102,39682,39683,39685],{"class":104,"line":105},[102,39684,38257],{"class":108},[102,39686,39687],{"class":119}," copy\n",[102,39689,39690,39692],{"class":104,"line":116},[102,39691,38257],{"class":108},[102,39693,39694],{"class":119}," time\n",[102,39696,39697],{"class":104,"line":123},[102,39698,652],{"emptyLinePlaceholder":651},[102,39700,39701,39703,39706,39708],{"class":104,"line":130},[102,39702,38257],{"class":108},[102,39704,39705],{"class":119}," pandas ",[102,39707,39248],{"class":108},[102,39709,39710],{"class":119}," pd\n",[102,39712,39713,39715],{"class":104,"line":136},[102,39714,38257],{"class":108},[102,39716,38260],{"class":119},[102,39718,39719,39721,39723,39725],{"class":104,"line":142},[102,39720,38602],{"class":108},[102,39722,39280],{"class":119},[102,39724,38257],{"class":108},[102,39726,39727],{"class":119}," Dataset\n",[102,39729,39730,39732,39734,39736],{"class":104,"line":148},[102,39731,38602],{"class":108},[102,39733,39233],{"class":119},[102,39735,38257],{"class":108},[102,39737,39238],{"class":119},[102,39739,39740,39742,39744,39746],{"class":104,"line":157},[102,39741,38602],{"class":108},[102,39743,39263],{"class":119},[102,39745,38257],{"class":108},[102,39747,39268],{"class":119},[102,39749,39750,39752,39754,39756],{"class":104,"line":163},[102,39751,38257],{"class":108},[102,39753,39280],{"class":119},[102,39755,39248],{"class":108},[102,39757,39285],{"class":119},[102,39759,39760,39762,39764,39766],{"class":104,"line":175},[102,39761,38257],{"class":108},[102,39763,39297],{"class":119},[102,39765,39248],{"class":108},[102,39767,39302],{"class":119},[102,39769,39770],{"class":104,"line":181},[102,39771,39772],{"class":126},"# 导入模型\n",[102,39774,39775,39777,39780,39782],{"class":104,"line":202},[102,39776,38602],{"class":108},[102,39778,39779],{"class":119}," model ",[102,39781,38257],{"class":108},[102,39783,39784],{"class":119}," LeNet\n",[102,39786,39787,39789,39791,39793],{"class":104,"line":208},[102,39788,38602],{"class":108},[102,39790,38605],{"class":119},[102,39792,38257],{"class":108},[102,39794,38610],{"class":119},[102,39796,39797],{"class":104,"line":214},[102,39798,652],{"emptyLinePlaceholder":651},[102,39800,39801],{"class":104,"line":225},[102,39802,652],{"emptyLinePlaceholder":651},[102,39804,39805],{"class":104,"line":230},[102,39806,39807],{"class":126},"# 处理训练集与验证集函数--->划分数据集\n",[102,39809,39810,39813,39816],{"class":104,"line":236},[102,39811,39812],{"class":108},"def",[102,39814,39815],{"class":112}," train_val_data_process",[102,39817,39818],{"class":119},"():\n",[102,39820,39821,39824,39826,39828,39830],{"class":104,"line":242},[102,39822,39823],{"class":119},"    train_data",[102,39825,260],{"class":108},[102,39827,39320],{"class":119},[102,39829,39328],{"class":278},[102,39831,39331],{"class":119},[102,39833,39834,39837,39839,39841],{"class":104,"line":248},[102,39835,39836],{"class":386},"                            train",[102,39838,260],{"class":108},[102,39840,39341],{"class":187},[102,39842,39331],{"class":119},[102,39844,39845,39848,39850,39852,39854,39856,39858],{"class":104,"line":254},[102,39846,39847],{"class":386},"                            transform",[102,39849,260],{"class":108},[102,39851,39358],{"class":119},[102,39853,39361],{"class":386},[102,39855,260],{"class":108},[102,39857,9923],{"class":187},[102,39859,39369],{"class":119},[102,39861,39862,39865,39867,39869],{"class":104,"line":269},[102,39863,39864],{"class":386},"                            download",[102,39866,260],{"class":108},[102,39868,39341],{"class":187},[102,39870,390],{"class":119},[102,39872,39873,39876,39878,39881,39884,39886,39889,39891,39893,39896,39898,39900,39903,39905,39907],{"class":104,"line":298},[102,39874,39875],{"class":119},"    train_data,val_data",[102,39877,260],{"class":108},[102,39879,39880],{"class":119},"Data.random_split(train_data,[",[102,39882,39883],{"class":187},"round",[102,39885,380],{"class":119},[102,39887,39888],{"class":187},"0.8",[102,39890,191],{"class":108},[102,39892,16145],{"class":187},[102,39894,39895],{"class":119},"(train_data)),",[102,39897,39883],{"class":187},[102,39899,380],{"class":119},[102,39901,39902],{"class":187},"0.2",[102,39904,191],{"class":108},[102,39906,16145],{"class":187},[102,39908,39909],{"class":119},"(train_data))])\n",[102,39911,39912,39915,39917,39920,39922,39924],{"class":104,"line":502},[102,39913,39914],{"class":119},"    train_dataloader ",[102,39916,260],{"class":108},[102,39918,39919],{"class":119}," Data.DataLoader(",[102,39921,39402],{"class":386},[102,39923,260],{"class":108},[102,39925,39407],{"class":119},[102,39927,39928,39931,39933,39936],{"class":104,"line":507},[102,39929,39930],{"class":386},"                                       batch_size",[102,39932,260],{"class":108},[102,39934,39935],{"class":187},"128",[102,39937,39331],{"class":119},[102,39939,39940,39943,39945,39947],{"class":104,"line":512},[102,39941,39942],{"class":386},"                                       shuffle",[102,39944,260],{"class":108},[102,39946,39341],{"class":187},[102,39948,39331],{"class":119},[102,39950,39951],{"class":104,"line":521},[102,39952,39953],{"class":126},"                                       # 规定8个进程\n",[102,39955,39956,39959,39961,39963],{"class":104,"line":526},[102,39957,39958],{"class":386},"                                       num_workers",[102,39960,260],{"class":108},[102,39962,9428],{"class":187},[102,39964,390],{"class":119},[102,39966,39967,39970,39972,39974,39976,39978],{"class":104,"line":532},[102,39968,39969],{"class":119},"    val_dataloader",[102,39971,260],{"class":108},[102,39973,39399],{"class":119},[102,39975,39402],{"class":386},[102,39977,260],{"class":108},[102,39979,39980],{"class":119},"val_data,\n",[102,39982,39983,39986,39988,39990],{"class":104,"line":538},[102,39984,39985],{"class":386},"                                   batch_size",[102,39987,260],{"class":108},[102,39989,39935],{"class":187},[102,39991,39331],{"class":119},[102,39993,39994,39997,39999,40001],{"class":104,"line":555},[102,39995,39996],{"class":386},"                                   shuffle",[102,39998,260],{"class":108},[102,40000,39341],{"class":187},[102,40002,39331],{"class":119},[102,40004,40005,40008,40010,40012],{"class":104,"line":570},[102,40006,40007],{"class":386},"                                   num_workers",[102,40009,260],{"class":108},[102,40011,9428],{"class":187},[102,40013,390],{"class":119},[102,40015,40016,40018],{"class":104,"line":581},[102,40017,863],{"class":108},[102,40019,40020],{"class":119}," train_dataloader,val_dataloader\n",[102,40022,40023],{"class":104,"line":819},[102,40024,652],{"emptyLinePlaceholder":651},[102,40026,40027],{"class":104,"line":828},[102,40028,40029],{"class":126},"# 验证是否出错\n",[102,40031,40032],{"class":104,"line":837},[102,40033,40034],{"class":126},"# train_val_data_process()\n",[102,40036,40037],{"class":104,"line":842},[102,40038,652],{"emptyLinePlaceholder":651},[102,40040,40041],{"class":104,"line":855},[102,40042,40043],{"class":126},"# 定义模型训练函数\n",[102,40045,40046,40048,40051],{"class":104,"line":860},[102,40047,39812],{"class":108},[102,40049,40050],{"class":112}," train_model_process",[102,40052,40053],{"class":119},"(model,train_dataloader,val_dataloader,num_epochs):\n",[102,40055,40056,40058,40060,40062,40064,40066,40068,40070,40073],{"class":104,"line":871},[102,40057,39102],{"class":119},[102,40059,260],{"class":108},[102,40061,38316],{"class":119},[102,40063,39109],{"class":278},[102,40065,10565],{"class":108},[102,40067,39114],{"class":119},[102,40069,10562],{"class":108},[102,40071,40072],{"class":278}," 'cpu'",[102,40074,390],{"class":119},[102,40076,40077],{"class":104,"line":1359},[102,40078,652],{"emptyLinePlaceholder":651},[102,40080,40081],{"class":104,"line":1368},[102,40082,652],{"emptyLinePlaceholder":651},[102,40084,40085],{"class":104,"line":1373},[102,40086,40087],{"class":126},"    # 定义优化器\n",[102,40089,40090],{"class":104,"line":1378},[102,40091,40092],{"class":126},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[102,40094,40095],{"class":104,"line":1384},[102,40096,40097],{"class":126},"    # lr为学习率\n",[102,40099,40100,40103,40105,40108,40111,40113,40116],{"class":104,"line":1398},[102,40101,40102],{"class":119},"    optimizer",[102,40104,260],{"class":108},[102,40106,40107],{"class":119},"torch.optim.Adam(model.parameters(),",[102,40109,40110],{"class":386},"lr",[102,40112,260],{"class":108},[102,40114,40115],{"class":187},"0.001",[102,40117,390],{"class":119},[102,40119,40120],{"class":104,"line":1424},[102,40121,652],{"emptyLinePlaceholder":651},[102,40123,40124],{"class":104,"line":1429},[102,40125,40126],{"class":126},"    # 定义损失函数使用交叉熵损失函数\n",[102,40128,40129,40132,40134],{"class":104,"line":1435},[102,40130,40131],{"class":119},"    criterion",[102,40133,260],{"class":108},[102,40135,40136],{"class":119},"nn.CrossEntropyLoss()\n",[102,40138,40139],{"class":104,"line":1450},[102,40140,652],{"emptyLinePlaceholder":651},[102,40142,40143],{"class":104,"line":1473},[102,40144,40145],{"class":126},"    # 将模型放到GPU中进行训练\n",[102,40147,40148,40150,40152],{"class":104,"line":1478},[102,40149,39154],{"class":119},[102,40151,260],{"class":108},[102,40153,40154],{"class":119},"model.to(device)\n",[102,40156,40157],{"class":104,"line":1484},[102,40158,40159],{"class":126},"    # 复制当前模型的参数\n",[102,40161,40162],{"class":104,"line":1499},[102,40163,40164],{"class":126},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[102,40166,40167],{"class":104,"line":1508},[102,40168,40169],{"class":126},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[102,40171,40172,40175,40177],{"class":104,"line":1513},[102,40173,40174],{"class":119},"    best_model_wts",[102,40176,260],{"class":108},[102,40178,40179],{"class":119},"copy.deepcopy(model.state_dict())\n",[102,40181,40182],{"class":104,"line":1524},[102,40183,652],{"emptyLinePlaceholder":651},[102,40185,40186],{"class":104,"line":1529},[102,40187,652],{"emptyLinePlaceholder":651},[102,40189,40190],{"class":104,"line":1538},[102,40191,40192],{"class":126},"    # 初始化参数\n",[102,40194,40195],{"class":104,"line":2089},[102,40196,40197],{"class":126},"    # 最高准确度\n",[102,40199,40200,40203,40205],{"class":104,"line":2094},[102,40201,40202],{"class":119},"    best_acc",[102,40204,260],{"class":108},[102,40206,40207],{"class":187},"0.0\n",[102,40209,40210],{"class":104,"line":2100},[102,40211,40212],{"class":126},"    # 训练集损失列表\n",[102,40214,40215,40218,40220],{"class":104,"line":2106},[102,40216,40217],{"class":119},"    train_loss_all",[102,40219,260],{"class":108},[102,40221,40222],{"class":119},"[]\n",[102,40224,40225],{"class":104,"line":2120},[102,40226,40227],{"class":126},"    # 验证集函数列表\n",[102,40229,40230,40233,40235],{"class":104,"line":2128},[102,40231,40232],{"class":119},"    val_loss_all",[102,40234,260],{"class":108},[102,40236,40222],{"class":119},[102,40238,40239],{"class":104,"line":2149},[102,40240,40241],{"class":126},"    # 训练集准确度列表\n",[102,40243,40244,40247,40249],{"class":104,"line":2161},[102,40245,40246],{"class":119},"    train_acc_all",[102,40248,260],{"class":108},[102,40250,40222],{"class":119},[102,40252,40253],{"class":104,"line":2167},[102,40254,40255],{"class":126},"    # 验证集准确度列表\n",[102,40257,40258,40261,40263],{"class":104,"line":2190},[102,40259,40260],{"class":119},"    val_acc_all",[102,40262,260],{"class":108},[102,40264,40222],{"class":119},[102,40266,40267],{"class":104,"line":2196},[102,40268,652],{"emptyLinePlaceholder":651},[102,40270,40271],{"class":104,"line":2219},[102,40272,40273],{"class":126},"    # 保存当前时间--->方便看每轮训练的时间\n",[102,40275,40276,40279,40281],{"class":104,"line":2233},[102,40277,40278],{"class":119},"    since",[102,40280,260],{"class":108},[102,40282,40283],{"class":119},"time.time()\n",[102,40285,40286],{"class":104,"line":2253},[102,40287,652],{"emptyLinePlaceholder":651},[102,40289,40290],{"class":104,"line":2259},[102,40291,652],{"emptyLinePlaceholder":651},[102,40293,40294],{"class":104,"line":2270},[102,40295,40296],{"class":126},"    # 准备工作完成--->开始训练模型\n",[102,40298,40299,40301,40304,40306,40309],{"class":104,"line":2293},[102,40300,12016],{"class":108},[102,40302,40303],{"class":119}," epoch ",[102,40305,33908],{"class":108},[102,40307,40308],{"class":187}," range",[102,40310,40311],{"class":119},"(num_epochs):\n",[102,40313,40314,40317,40319,40322,40325,40327,40329,40331,40334,40336,40338],{"class":104,"line":2315},[102,40315,40316],{"class":187},"        print",[102,40318,380],{"class":119},[102,40320,40321],{"class":278},"\"Epoch ",[102,40323,40324],{"class":187},"{}",[102,40326,9611],{"class":278},[102,40328,40324],{"class":187},[102,40330,9288],{"class":278},[102,40332,40333],{"class":119},".format(epoch,num_epochs",[102,40335,2833],{"class":108},[102,40337,7039],{"class":187},[102,40339,38362],{"class":119},[102,40341,40342,40344,40346,40349,40351,40353],{"class":104,"line":2320},[102,40343,40316],{"class":187},[102,40345,380],{"class":119},[102,40347,40348],{"class":278},"\"-\"",[102,40350,191],{"class":108},[102,40352,263],{"class":187},[102,40354,390],{"class":119},[102,40356,40357],{"class":104,"line":2326},[102,40358,652],{"emptyLinePlaceholder":651},[102,40360,40361],{"class":104,"line":2340},[102,40362,40363],{"class":126},"        # 初始化参数\n",[102,40365,40366],{"class":104,"line":2354},[102,40367,40368],{"class":126},"        # 训练集损失函数\n",[102,40370,40371,40374,40376],{"class":104,"line":2359},[102,40372,40373],{"class":119},"        train_loss",[102,40375,260],{"class":108},[102,40377,40207],{"class":187},[102,40379,40380],{"class":104,"line":2373},[102,40381,40382],{"class":126},"        # 训练集准确度\n",[102,40384,40385,40388,40390],{"class":104,"line":2378},[102,40386,40387],{"class":119},"        train_corrects",[102,40389,260],{"class":108},[102,40391,11901],{"class":187},[102,40393,40394],{"class":104,"line":2384},[102,40395,40396],{"class":126},"        # 验证集损失函数\n",[102,40398,40399,40402,40404],{"class":104,"line":2389},[102,40400,40401],{"class":119},"        val_loss",[102,40403,260],{"class":108},[102,40405,40207],{"class":187},[102,40407,40408],{"class":104,"line":2403},[102,40409,40410],{"class":126},"        # 验证集准确度\n",[102,40412,40413,40416,40418],{"class":104,"line":2408},[102,40414,40415],{"class":119},"        val_corrects",[102,40417,260],{"class":108},[102,40419,11901],{"class":187},[102,40421,40422],{"class":104,"line":2413},[102,40423,40424],{"class":126},"        # 训练集样本数量\n",[102,40426,40427,40430,40432],{"class":104,"line":2427},[102,40428,40429],{"class":119},"        train_num",[102,40431,260],{"class":108},[102,40433,11901],{"class":187},[102,40435,40436],{"class":104,"line":2440},[102,40437,40438],{"class":126},"        # 验证集样本数量\n",[102,40440,40441,40444,40446],{"class":104,"line":2445},[102,40442,40443],{"class":119},"        val_num",[102,40445,260],{"class":108},[102,40447,11901],{"class":187},[102,40449,40450],{"class":104,"line":2458},[102,40451,40452],{"class":126},"        # 将数据放到设备,并开始训练\n",[102,40454,40455,40457,40459,40461,40463],{"class":104,"line":2463},[102,40456,12217],{"class":108},[102,40458,39466],{"class":119},[102,40460,33908],{"class":108},[102,40462,39471],{"class":187},[102,40464,40465],{"class":119},"(train_dataloader):\n",[102,40467,40468],{"class":104,"line":2468},[102,40469,40470],{"class":126},"            # 将特征放入到训练设备\n",[102,40472,40473,40476,40478],{"class":104,"line":2473},[102,40474,40475],{"class":119},"            b_x",[102,40477,260],{"class":108},[102,40479,40480],{"class":119},"b_x.to(device)\n",[102,40482,40483],{"class":104,"line":2486},[102,40484,40485],{"class":126},"            # 将标签放入到训练设备当中\n",[102,40487,40488,40491,40493],{"class":104,"line":2491},[102,40489,40490],{"class":119},"            b_y",[102,40492,260],{"class":108},[102,40494,40495],{"class":119},"b_y.to(device)\n",[102,40497,40499],{"class":104,"line":40498},98,[102,40500,40501],{"class":126},"            # 设置模型为训练模式\n",[102,40503,40505],{"class":104,"line":40504},99,[102,40506,40507],{"class":119},"            model.train()\n",[102,40509,40511],{"class":104,"line":40510},100,[102,40512,40513],{"class":126},"            # 将数据放到模型当中,开始前向传播\n",[102,40515,40517],{"class":104,"line":40516},101,[102,40518,40519],{"class":126},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[102,40521,40523,40526,40528],{"class":104,"line":40522},102,[102,40524,40525],{"class":119},"            output",[102,40527,260],{"class":108},[102,40529,40530],{"class":119},"model(b_x)\n",[102,40532,40534],{"class":104,"line":40533},103,[102,40535,40536],{"class":126},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[102,40538,40540,40543,40545,40548,40551,40553,40555],{"class":104,"line":40539},104,[102,40541,40542],{"class":119},"            pre_lab",[102,40544,260],{"class":108},[102,40546,40547],{"class":119},"torch.argmax(output,",[102,40549,40550],{"class":386},"dim",[102,40552,260],{"class":108},[102,40554,7039],{"class":187},[102,40556,390],{"class":119},[102,40558,40560],{"class":104,"line":40559},105,[102,40561,40562],{"class":126},"            # 计算每一个batch的损失函数\n",[102,40564,40566,40569,40571],{"class":104,"line":40565},106,[102,40567,40568],{"class":119},"            loss",[102,40570,260],{"class":108},[102,40572,40573],{"class":119},"criterion(output,b_y)\n",[102,40575,40577],{"class":104,"line":40576},107,[102,40578,40579],{"class":126},"            # 将梯度初始化为0\n",[102,40581,40583],{"class":104,"line":40582},108,[102,40584,40585],{"class":119},"            optimizer.zero_grad()\n",[102,40587,40589],{"class":104,"line":40588},109,[102,40590,40591],{"class":126},"            # 梯度置为0后再进行反向传播\n",[102,40593,40595],{"class":104,"line":40594},110,[102,40596,40597],{"class":119},"            loss.backward()\n",[102,40599,40601],{"class":104,"line":40600},111,[102,40602,40603],{"class":126},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[102,40605,40607],{"class":104,"line":40606},112,[102,40608,40609],{"class":119},"            optimizer.step()\n",[102,40611,40613],{"class":104,"line":40612},113,[102,40614,40615],{"class":126},"            # loss.item()指的是batch的平均损失\n",[102,40617,40619,40622,40624,40627,40629,40632,40634],{"class":104,"line":40618},114,[102,40620,40621],{"class":119},"            train_loss",[102,40623,18244],{"class":108},[102,40625,40626],{"class":119},"loss.item()",[102,40628,191],{"class":108},[102,40630,40631],{"class":119},"b_x.size(",[102,40633,8423],{"class":187},[102,40635,390],{"class":119},[102,40637,40639],{"class":104,"line":40638},115,[102,40640,40641],{"class":126},"            # 计算每个批次中正确预测的数量\n",[102,40643,40645,40648,40650,40653,40655],{"class":104,"line":40644},116,[102,40646,40647],{"class":119},"            train_corrects",[102,40649,18244],{"class":108},[102,40651,40652],{"class":119},"torch.sum(pre_lab",[102,40654,1876],{"class":108},[102,40656,40657],{"class":119},"b_y.data)\n",[102,40659,40661],{"class":104,"line":40660},117,[102,40662,40663],{"class":126},"            # 计算目前为止一共处理了多少样本\n",[102,40665,40667,40670,40672,40674,40676],{"class":104,"line":40666},118,[102,40668,40669],{"class":119},"            train_num",[102,40671,18244],{"class":108},[102,40673,40631],{"class":119},[102,40675,8423],{"class":187},[102,40677,390],{"class":119},[102,40679,40681],{"class":104,"line":40680},119,[102,40682,40683],{"class":126},"        # 验证数据\n",[102,40685,40687,40689,40692,40694,40696],{"class":104,"line":40686},120,[102,40688,12217],{"class":108},[102,40690,40691],{"class":119}," step ,(b_x,b_y) ",[102,40693,33908],{"class":108},[102,40695,39471],{"class":187},[102,40697,40698],{"class":119},"(val_dataloader):\n",[102,40700,40702],{"class":104,"line":40701},121,[102,40703,40704],{"class":126},"            # 将特征放到验证设备当中\n",[102,40706,40708,40710,40712],{"class":104,"line":40707},122,[102,40709,40475],{"class":119},[102,40711,260],{"class":108},[102,40713,40480],{"class":119},[102,40715,40717],{"class":104,"line":40716},123,[102,40718,40719],{"class":126},"            # 将标签放到放到训练设备当中\n",[102,40721,40723,40725,40727],{"class":104,"line":40722},124,[102,40724,40490],{"class":119},[102,40726,260],{"class":108},[102,40728,40495],{"class":119},[102,40730,40732],{"class":104,"line":40731},125,[102,40733,40734],{"class":126},"            # 开启验证模式，设置模型为评估模式\n",[102,40736,40738],{"class":104,"line":40737},126,[102,40739,40740],{"class":119},"            model.eval()\n",[102,40742,40744,40747],{"class":104,"line":40743},127,[102,40745,40746],{"class":108},"            with",[102,40748,40749],{"class":119}," torch.no_grad():\n",[102,40751,40753],{"class":104,"line":40752},128,[102,40754,40755],{"class":126},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[102,40757,40759,40762,40764],{"class":104,"line":40758},129,[102,40760,40761],{"class":119},"                output ",[102,40763,260],{"class":108},[102,40765,40766],{"class":119}," model(b_x)\n",[102,40768,40770],{"class":104,"line":40769},130,[102,40771,40772],{"class":126},"                # 查找每一行中最大值对应的下标\n",[102,40774,40776,40779,40781,40784,40786,40788,40790],{"class":104,"line":40775},131,[102,40777,40778],{"class":119},"                pre_lab ",[102,40780,260],{"class":108},[102,40782,40783],{"class":119}," torch.argmax(output, ",[102,40785,40550],{"class":386},[102,40787,260],{"class":108},[102,40789,7039],{"class":187},[102,40791,390],{"class":119},[102,40793,40795],{"class":104,"line":40794},132,[102,40796,40797],{"class":126},"                # 计算验证集上的当前 batch 损失\n",[102,40799,40801,40804,40806],{"class":104,"line":40800},133,[102,40802,40803],{"class":119},"                val_batch_loss ",[102,40805,260],{"class":108},[102,40807,40808],{"class":119}," criterion(output, b_y)\n",[102,40810,40812],{"class":104,"line":40811},134,[102,40813,40814],{"class":126},"                # 对损失函数进行累加（按样本数加权）\n",[102,40816,40818,40821,40823,40826,40828,40831,40833],{"class":104,"line":40817},135,[102,40819,40820],{"class":119},"                val_loss ",[102,40822,18244],{"class":108},[102,40824,40825],{"class":119}," val_batch_loss.item() ",[102,40827,191],{"class":108},[102,40829,40830],{"class":119}," b_x.size(",[102,40832,8423],{"class":187},[102,40834,390],{"class":119},[102,40836,40838,40841,40843,40846,40848],{"class":104,"line":40837},136,[102,40839,40840],{"class":119},"                val_corrects ",[102,40842,18244],{"class":108},[102,40844,40845],{"class":119}," torch.sum(pre_lab ",[102,40847,1876],{"class":108},[102,40849,40850],{"class":119}," b_y.data)\n",[102,40852,40854],{"class":104,"line":40853},137,[102,40855,40856],{"class":126},"                # 当前用于验证的样本数量\n",[102,40858,40860,40863,40865,40867,40869],{"class":104,"line":40859},138,[102,40861,40862],{"class":119},"            val_num ",[102,40864,18244],{"class":108},[102,40866,40830],{"class":119},[102,40868,8423],{"class":187},[102,40870,390],{"class":119},[102,40872,40874],{"class":104,"line":40873},139,[102,40875,40876],{"class":126},"        # 计算并保存每一次迭代的loss值和准确率\n",[102,40878,40880],{"class":104,"line":40879},140,[102,40881,40882],{"class":126},"        # 计算并保存训练集的loss值\n",[102,40884,40886,40889,40891],{"class":104,"line":40885},141,[102,40887,40888],{"class":119},"        train_loss_all.append(train_loss",[102,40890,9611],{"class":108},[102,40892,40893],{"class":119},"train_num)\n",[102,40895,40897],{"class":104,"line":40896},142,[102,40898,40899],{"class":126},"        # 取双精度\n",[102,40901,40903],{"class":104,"line":40902},143,[102,40904,40905],{"class":126},"        # 计算并保存训练集的准确率\n",[102,40907,40909,40912,40914],{"class":104,"line":40908},144,[102,40910,40911],{"class":119},"        train_acc_all.append(train_corrects.double().item()",[102,40913,9611],{"class":108},[102,40915,40893],{"class":119},[102,40917,40919],{"class":104,"line":40918},145,[102,40920,40921],{"class":126},"        # 计算并保存验证集的loss值\n",[102,40923,40925,40928,40930],{"class":104,"line":40924},146,[102,40926,40927],{"class":119},"        val_loss_all.append(val_loss",[102,40929,9611],{"class":108},[102,40931,40932],{"class":119},"val_num)\n",[102,40934,40936],{"class":104,"line":40935},147,[102,40937,40938],{"class":126},"        # 计算并保存验证集的准确率\n",[102,40940,40942,40945,40947],{"class":104,"line":40941},148,[102,40943,40944],{"class":119},"        val_acc_all.append(val_corrects.double().item()",[102,40946,9611],{"class":108},[102,40948,40932],{"class":119},[102,40950,40952],{"class":104,"line":40951},149,[102,40953,652],{"emptyLinePlaceholder":651},[102,40955,40957],{"class":104,"line":40956},150,[102,40958,40959],{"class":126},"        # 打印训练一轮的loss值和准确率\n",[102,40961,40963,40965,40967,40969,40971,40974,40976,40979,40981,40984,40986,40988,40990,40992,40995,40997,40999,41002,41004,41006],{"class":104,"line":40962},151,[102,40964,40316],{"class":187},[102,40966,380],{"class":119},[102,40968,12405],{"class":278},[102,40970,40324],{"class":187},[102,40972,40973],{"class":278},"train loss:",[102,40975,9918],{"class":187},[102,40977,40978],{"class":108},":.4f",[102,40980,9967],{"class":187},[102,40982,40983],{"class":278}," train acc:",[102,40985,9918],{"class":187},[102,40987,40978],{"class":108},[102,40989,9967],{"class":187},[102,40991,12405],{"class":278},[102,40993,40994],{"class":119},".format(epoch,train_loss_all[",[102,40996,2833],{"class":108},[102,40998,7039],{"class":187},[102,41000,41001],{"class":119},"],train_acc_all[",[102,41003,2833],{"class":108},[102,41005,7039],{"class":187},[102,41007,41008],{"class":119},"]))\n",[102,41010,41012,41014,41016,41018,41020,41023,41025,41027,41029,41032,41034,41036,41038,41040,41043,41045,41047,41050,41052,41054],{"class":104,"line":41011},152,[102,41013,40316],{"class":187},[102,41015,380],{"class":119},[102,41017,12405],{"class":278},[102,41019,40324],{"class":187},[102,41021,41022],{"class":278},"val loss:",[102,41024,9918],{"class":187},[102,41026,40978],{"class":108},[102,41028,9967],{"class":187},[102,41030,41031],{"class":278}," val acc:",[102,41033,9918],{"class":187},[102,41035,40978],{"class":108},[102,41037,9967],{"class":187},[102,41039,12405],{"class":278},[102,41041,41042],{"class":119},".format(epoch,val_loss_all[",[102,41044,2833],{"class":108},[102,41046,7039],{"class":187},[102,41048,41049],{"class":119},"],val_acc_all[",[102,41051,2833],{"class":108},[102,41053,7039],{"class":187},[102,41055,41008],{"class":119},[102,41057,41059],{"class":104,"line":41058},153,[102,41060,652],{"emptyLinePlaceholder":651},[102,41062,41064],{"class":104,"line":41063},154,[102,41065,41066],{"class":126},"        # 判断准确度--->保存最优模型\n",[102,41068,41070,41072,41075,41077,41079,41081,41083],{"class":104,"line":41069},155,[102,41071,1202],{"class":108},[102,41073,41074],{"class":119}," val_acc_all[",[102,41076,2833],{"class":108},[102,41078,7039],{"class":187},[102,41080,9961],{"class":119},[102,41082,1219],{"class":108},[102,41084,41085],{"class":119},"best_acc:\n",[102,41087,41089],{"class":104,"line":41088},156,[102,41090,41091],{"class":126},"            # 保存当前模型准确度\n",[102,41093,41095,41098,41100,41102,41105,41107,41109],{"class":104,"line":41094},157,[102,41096,41097],{"class":119},"            best_acc:",[102,41099,9086],{"class":187},[102,41101,260],{"class":108},[102,41103,41104],{"class":119},"val_acc_all[",[102,41106,2833],{"class":108},[102,41108,7039],{"class":187},[102,41110,41111],{"class":119},"]\n",[102,41113,41115],{"class":104,"line":41114},158,[102,41116,41117],{"class":126},"            # 保存当前的准确度\n",[102,41119,41121],{"class":104,"line":41120},159,[102,41122,41123],{"class":126},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[102,41125,41127,41130,41132],{"class":104,"line":41126},160,[102,41128,41129],{"class":119},"            best_model_wts",[102,41131,260],{"class":108},[102,41133,40179],{"class":119},[102,41135,41137],{"class":104,"line":41136},161,[102,41138,652],{"emptyLinePlaceholder":651},[102,41140,41142],{"class":104,"line":41141},162,[102,41143,41144],{"class":126},"        # 计算耗时\n",[102,41146,41148,41151,41153,41156,41158],{"class":104,"line":41147},163,[102,41149,41150],{"class":119},"        time_use",[102,41152,260],{"class":108},[102,41154,41155],{"class":119},"time.time()",[102,41157,2833],{"class":108},[102,41159,41160],{"class":119},"since\n",[102,41162,41164,41166,41168,41171,41173,41176,41178,41180,41182,41184,41186,41189,41192,41195,41197,41200,41202,41204],{"class":104,"line":41163},164,[102,41165,40316],{"class":187},[102,41167,380],{"class":119},[102,41169,41170],{"class":278},"'训练和验证耗费的时间",[102,41172,9918],{"class":187},[102,41174,41175],{"class":108},":.0f",[102,41177,9967],{"class":187},[102,41179,9571],{"class":278},[102,41181,9918],{"class":187},[102,41183,41175],{"class":108},[102,41185,9967],{"class":187},[102,41187,41188],{"class":278},"s'",[102,41190,41191],{"class":119},".format(time_use",[102,41193,41194],{"class":108},"\u002F\u002F",[102,41196,9929],{"class":187},[102,41198,41199],{"class":119},",time_use",[102,41201,9363],{"class":108},[102,41203,9929],{"class":187},[102,41205,38362],{"class":119},[102,41207,41209],{"class":104,"line":41208},165,[102,41210,41211],{"class":126},"    # 选择最优参数\n",[102,41213,41215],{"class":104,"line":41214},166,[102,41216,41217],{"class":126},"    # 加载最高准确率下的模型参数\n",[102,41219,41221],{"class":104,"line":41220},167,[102,41222,41223],{"class":126},"    # model.load_state_dict(best_model_wts)\n",[102,41225,41227,41230,41233],{"class":104,"line":41226},168,[102,41228,41229],{"class":119},"    torch.save(model.state_dict(best_model_wts), ",[102,41231,41232],{"class":278},"'.\u002Fbest_model.pth'",[102,41234,390],{"class":119},[102,41236,41238],{"class":104,"line":41237},169,[102,41239,41240],{"class":126},"    # 或者写成\n",[102,41242,41244],{"class":104,"line":41243},170,[102,41245,41246],{"class":126},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[102,41248,41250],{"class":104,"line":41249},171,[102,41251,41252],{"class":126},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[102,41254,41256,41259,41261,41264,41267,41269],{"class":104,"line":41255},172,[102,41257,41258],{"class":119},"    train_process",[102,41260,260],{"class":108},[102,41262,41263],{"class":119},"pd.DataFrame(",[102,41265,41266],{"class":386},"data",[102,41268,260],{"class":108},[102,41270,120],{"class":119},[102,41272,41274,41277,41279,41282],{"class":104,"line":41273},173,[102,41275,41276],{"class":278},"        \"epoch\"",[102,41278,9881],{"class":119},[102,41280,41281],{"class":187},"range",[102,41283,41284],{"class":119},"(num_epochs),\n",[102,41286,41288,41291],{"class":104,"line":41287},174,[102,41289,41290],{"class":278},"        \"train_loss_all\"",[102,41292,41293],{"class":119},":train_loss_all,\n",[102,41295,41297,41300],{"class":104,"line":41296},175,[102,41298,41299],{"class":278},"        \"val_loss_all\"",[102,41301,41302],{"class":119},":val_loss_all,\n",[102,41304,41306,41309],{"class":104,"line":41305},176,[102,41307,41308],{"class":278},"        \"train_acc_all\"",[102,41310,41311],{"class":119},":train_acc_all,\n",[102,41313,41315,41318],{"class":104,"line":41314},177,[102,41316,41317],{"class":278},"        \"val_acc_all\"",[102,41319,41320],{"class":119},":val_acc_all\n",[102,41322,41324],{"class":104,"line":41323},178,[102,41325,41326],{"class":119},"    })\n",[102,41328,41330],{"class":104,"line":41329},179,[102,41331,41332],{"class":126},"    # 返回训练保存的过程\n",[102,41334,41336,41338],{"class":104,"line":41335},180,[102,41337,863],{"class":108},[102,41339,41340],{"class":119}," train_process\n",[102,41342,41344],{"class":104,"line":41343},181,[102,41345,652],{"emptyLinePlaceholder":651},[102,41347,41349],{"class":104,"line":41348},182,[102,41350,41351],{"class":126},"# 将loss值和精度按照图片的形式展示出来\n",[102,41353,41355,41357,41360],{"class":104,"line":41354},183,[102,41356,39812],{"class":108},[102,41358,41359],{"class":112}," matplot_acc_loss",[102,41361,41362],{"class":119},"(train_process):\n",[102,41364,41366],{"class":104,"line":41365},184,[102,41367,41368],{"class":126},"    # 设置图的大小\n",[102,41370,41372,41375,41377,41379,41381,41383,41385,41387],{"class":104,"line":41371},185,[102,41373,41374],{"class":119},"    plt.figure(",[102,41376,39558],{"class":386},[102,41378,260],{"class":108},[102,41380,380],{"class":119},[102,41382,9527],{"class":187},[102,41384,1618],{"class":119},[102,41386,9329],{"class":187},[102,41388,38362],{"class":119},[102,41390,41392],{"class":104,"line":41391},186,[102,41393,41394],{"class":126},"    # 设置图中有几张图\n",[102,41396,41398],{"class":104,"line":41397},187,[102,41399,41400],{"class":126},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[102,41402,41404],{"class":104,"line":41403},188,[102,41405,41406],{"class":126},"    # ①loss图\n",[102,41408,41410,41412,41414,41416,41418,41420,41422],{"class":104,"line":41409},189,[102,41411,39592],{"class":119},[102,41413,7039],{"class":187},[102,41415,1618],{"class":119},[102,41417,7044],{"class":187},[102,41419,1618],{"class":119},[102,41421,7039],{"class":187},[102,41423,390],{"class":119},[102,41425,41427],{"class":104,"line":41426},190,[102,41428,41429],{"class":126},"    # 补充:\n",[102,41431,41433],{"class":104,"line":41432},191,[102,41434,41435],{"class":126},"    # plt.subplot(nrows, ncols, index)\n",[102,41437,41439],{"class":104,"line":41438},192,[102,41440,41441],{"class":126},"    # nrows：行数\n",[102,41443,41445],{"class":104,"line":41444},193,[102,41446,41447],{"class":126},"    # ncols：列数\n",[102,41449,41451],{"class":104,"line":41450},194,[102,41452,41453],{"class":126},"    # index：目前选中第几个子图（从1开始）\n",[102,41455,41457,41460,41463,41466,41469,41471,41474,41476,41479],{"class":104,"line":41456},195,[102,41458,41459],{"class":119},"    plt.plot(train_process[",[102,41461,41462],{"class":278},"\"epoch\"",[102,41464,41465],{"class":119},"],train_process.train_loss_all,",[102,41467,41468],{"class":278},"'ro-'",[102,41470,1618],{"class":119},[102,41472,41473],{"class":386},"label",[102,41475,260],{"class":108},[102,41477,41478],{"class":278},"'train loss'",[102,41480,390],{"class":119},[102,41482,41484,41486,41488,41491,41494,41496,41498,41500,41503],{"class":104,"line":41483},196,[102,41485,41459],{"class":119},[102,41487,41462],{"class":278},[102,41489,41490],{"class":119},"],train_process.val_loss_all,",[102,41492,41493],{"class":278},"'bs--'",[102,41495,1618],{"class":119},[102,41497,41473],{"class":386},[102,41499,260],{"class":108},[102,41501,41502],{"class":278},"'val loss'",[102,41504,390],{"class":119},[102,41506,41508],{"class":104,"line":41507},197,[102,41509,41510],{"class":126},"    # 添加一个图例\n",[102,41512,41514],{"class":104,"line":41513},198,[102,41515,41516],{"class":119},"    plt.legend()\n",[102,41518,41520],{"class":104,"line":41519},199,[102,41521,41522],{"class":126},"    # 给轴添加标签\n",[102,41524,41526,41529,41532],{"class":104,"line":41525},200,[102,41527,41528],{"class":119},"    plt.xlabel(",[102,41530,41531],{"class":278},"'epoch'",[102,41533,390],{"class":119},[102,41535,41537,41540,41543],{"class":104,"line":41536},201,[102,41538,41539],{"class":119},"    plt.ylabel(",[102,41541,41542],{"class":278},"'loss'",[102,41544,390],{"class":119},[102,41546,41548],{"class":104,"line":41547},202,[102,41549,41550],{"class":126},"    # ②准确度图\n",[102,41552,41554,41556,41558,41560,41562,41564,41566],{"class":104,"line":41553},203,[102,41555,39592],{"class":119},[102,41557,7039],{"class":187},[102,41559,1618],{"class":119},[102,41561,7044],{"class":187},[102,41563,1618],{"class":119},[102,41565,7044],{"class":187},[102,41567,390],{"class":119},[102,41569,41571,41573,41575,41578,41580,41582,41584,41586,41589],{"class":104,"line":41570},204,[102,41572,41459],{"class":119},[102,41574,41462],{"class":278},[102,41576,41577],{"class":119},"],train_process.train_acc_all,",[102,41579,41468],{"class":278},[102,41581,1618],{"class":119},[102,41583,41473],{"class":386},[102,41585,260],{"class":108},[102,41587,41588],{"class":278},"'train acc'",[102,41590,390],{"class":119},[102,41592,41594,41596,41598,41601,41603,41605,41607,41609,41612],{"class":104,"line":41593},205,[102,41595,41459],{"class":119},[102,41597,41462],{"class":278},[102,41599,41600],{"class":119},"],train_process.val_acc_all,",[102,41602,41493],{"class":278},[102,41604,1618],{"class":119},[102,41606,41473],{"class":386},[102,41608,260],{"class":108},[102,41610,41611],{"class":278},"'val acc'",[102,41613,390],{"class":119},[102,41615,41617],{"class":104,"line":41616},206,[102,41618,41619],{"class":126},"    # 添加图例\n",[102,41621,41623],{"class":104,"line":41622},207,[102,41624,41516],{"class":119},[102,41626,41628,41630,41632],{"class":104,"line":41627},208,[102,41629,41528],{"class":119},[102,41631,41462],{"class":278},[102,41633,390],{"class":119},[102,41635,41637,41639,41642],{"class":104,"line":41636},209,[102,41638,41539],{"class":119},[102,41640,41641],{"class":278},"\"acc\"",[102,41643,390],{"class":119},[102,41645,41647],{"class":104,"line":41646},210,[102,41648,41649],{"class":119},"    plt.show()\n",[102,41651,41653],{"class":104,"line":41652},211,[102,41654,652],{"emptyLinePlaceholder":651},[102,41656,41658],{"class":104,"line":41657},212,[102,41659,41660],{"class":126},"# 正式开始训练:\n",[102,41662,41664,41666,41668,41670,41672],{"class":104,"line":41663},213,[102,41665,10407],{"class":108},[102,41667,39085],{"class":187},[102,41669,1876],{"class":108},[102,41671,39090],{"class":278},[102,41673,12552],{"class":119},[102,41675,41677],{"class":104,"line":41676},214,[102,41678,41679],{"class":126},"    # 将模型实例化\n",[102,41681,41683,41686,41688],{"class":104,"line":41682},215,[102,41684,41685],{"class":119},"    LeNet",[102,41687,260],{"class":108},[102,41689,41690],{"class":119},"LeNet()\n",[102,41692,41694,41697,41699],{"class":104,"line":41693},216,[102,41695,41696],{"class":119},"    train_dataloader,val_dataloader",[102,41698,260],{"class":108},[102,41700,41701],{"class":119},"train_val_data_process()\n",[102,41703,41705,41707,41709,41712,41715,41717,41719],{"class":104,"line":41704},217,[102,41706,41258],{"class":119},[102,41708,260],{"class":108},[102,41710,41711],{"class":119},"train_model_process(LeNet,train_dataloader,val_dataloader,",[102,41713,41714],{"class":386},"num_epochs",[102,41716,260],{"class":108},[102,41718,5016],{"class":187},[102,41720,390],{"class":119},[102,41722,41724],{"class":104,"line":41723},218,[102,41725,41726],{"class":119},"    matplot_acc_loss(train_process)\n",[14,41728,41729],{},"画图的补充点学习：",[14,41731,41732],{},[6750,41733],{"alt":98,"src":41734},"\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",[87,41736,41737],{"start":123},[62,41738,41739],{},"测试",[93,41741,41743],{"className":38243,"code":41742,"language":38245,"meta":98,"style":98},"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",[83,41744,41745,41751,41761,41773,41783,41788,41798,41808,41812,41817,41826,41843,41855,41872,41883,41899,41904,41915,41926,41937,41944,41948,41953,41963,41968,41985,41993,41997,42002,42011,42020,42024,42029,42034,42039,42046,42051,42063,42073,42083,42088,42092,42097,42106,42111,42127,42132,42137,42142,42156,42161,42175,42179,42184,42199,42204,42216,42220,42225,42237,42242,42250,42255,42260,42270,42275,42284,42289,42294,42298,42303,42308,42324,42332,42337,42342,42401,42407,42412,42423,42431,42439,42443,42448,42452,42457,42465,42470,42486,42491,42501,42511],{"__ignoreMap":98},[102,41746,41747,41749],{"class":104,"line":105},[102,41748,38257],{"class":108},[102,41750,38260],{"class":119},[102,41752,41753,41755,41757,41759],{"class":104,"line":116},[102,41754,38257],{"class":108},[102,41756,39280],{"class":119},[102,41758,39248],{"class":108},[102,41760,39285],{"class":119},[102,41762,41763,41765,41768,41770],{"class":104,"line":123},[102,41764,38602],{"class":108},[102,41766,41767],{"class":119}," jupyter_client.consoleapp ",[102,41769,38257],{"class":108},[102,41771,41772],{"class":119}," classes\n",[102,41774,41775,41777,41779,41781],{"class":104,"line":130},[102,41776,38602],{"class":108},[102,41778,39263],{"class":119},[102,41780,38257],{"class":108},[102,41782,39268],{"class":119},[102,41784,41785],{"class":104,"line":136},[102,41786,41787],{"class":126},"# 导入数据集\n",[102,41789,41790,41792,41794,41796],{"class":104,"line":142},[102,41791,38602],{"class":108},[102,41793,39233],{"class":119},[102,41795,38257],{"class":108},[102,41797,39238],{"class":119},[102,41799,41800,41802,41804,41806],{"class":104,"line":148},[102,41801,38602],{"class":108},[102,41803,39779],{"class":119},[102,41805,38257],{"class":108},[102,41807,39784],{"class":119},[102,41809,41810],{"class":104,"line":157},[102,41811,652],{"emptyLinePlaceholder":651},[102,41813,41814],{"class":104,"line":163},[102,41815,41816],{"class":126},"# 测试数据处理\n",[102,41818,41819,41821,41824],{"class":104,"line":175},[102,41820,39812],{"class":108},[102,41822,41823],{"class":112}," test_data_process",[102,41825,39818],{"class":119},[102,41827,41828,41831,41833,41835,41837,41839,41841],{"class":104,"line":181},[102,41829,41830],{"class":119},"    test_data",[102,41832,260],{"class":108},[102,41834,39320],{"class":119},[102,41836,39323],{"class":386},[102,41838,260],{"class":108},[102,41840,39328],{"class":278},[102,41842,39331],{"class":119},[102,41844,41845,41848,41850,41853],{"class":104,"line":202},[102,41846,41847],{"class":386},"                           train",[102,41849,260],{"class":108},[102,41851,41852],{"class":187},"False",[102,41854,39331],{"class":119},[102,41856,41857,41860,41862,41864,41866,41868,41870],{"class":104,"line":208},[102,41858,41859],{"class":386},"                           transform",[102,41861,260],{"class":108},[102,41863,39358],{"class":119},[102,41865,39361],{"class":386},[102,41867,260],{"class":108},[102,41869,9923],{"class":187},[102,41871,39369],{"class":119},[102,41873,41874,41877,41879,41881],{"class":104,"line":214},[102,41875,41876],{"class":386},"                           download",[102,41878,260],{"class":108},[102,41880,39341],{"class":187},[102,41882,390],{"class":119},[102,41884,41885,41888,41890,41892,41894,41896],{"class":104,"line":225},[102,41886,41887],{"class":119},"    test_dataloader",[102,41889,260],{"class":108},[102,41891,39399],{"class":119},[102,41893,39402],{"class":386},[102,41895,260],{"class":108},[102,41897,41898],{"class":119},"test_data,\n",[102,41900,41901],{"class":104,"line":230},[102,41902,41903],{"class":126},"                                    # 这里是一张一张进行测试\n",[102,41905,41906,41909,41911,41913],{"class":104,"line":236},[102,41907,41908],{"class":386},"                                    batch_size",[102,41910,260],{"class":108},[102,41912,7039],{"class":187},[102,41914,39331],{"class":119},[102,41916,41917,41920,41922,41924],{"class":104,"line":242},[102,41918,41919],{"class":386},"                                    shuffle",[102,41921,260],{"class":108},[102,41923,39341],{"class":187},[102,41925,39331],{"class":119},[102,41927,41928,41931,41933,41935],{"class":104,"line":248},[102,41929,41930],{"class":386},"                                    num_workers",[102,41932,260],{"class":108},[102,41934,8423],{"class":187},[102,41936,390],{"class":119},[102,41938,41939,41941],{"class":104,"line":254},[102,41940,863],{"class":108},[102,41942,41943],{"class":119}," test_dataloader\n",[102,41945,41946],{"class":104,"line":269},[102,41947,652],{"emptyLinePlaceholder":651},[102,41949,41950],{"class":104,"line":298},[102,41951,41952],{"class":126},"# 定义模型测试函数\n",[102,41954,41955,41957,41960],{"class":104,"line":502},[102,41956,39812],{"class":108},[102,41958,41959],{"class":112}," test_model_process",[102,41961,41962],{"class":119},"(model,test_dataloader):\n",[102,41964,41965],{"class":104,"line":507},[102,41966,41967],{"class":126},"    # 将模型放到设备当中，先进行判断\n",[102,41969,41970,41972,41974,41976,41978,41980,41982],{"class":104,"line":512},[102,41971,39102],{"class":119},[102,41973,260],{"class":108},[102,41975,39109],{"class":278},[102,41977,10565],{"class":108},[102,41979,39114],{"class":119},[102,41981,10562],{"class":108},[102,41983,41984],{"class":278}," \"cpu\"\n",[102,41986,41987,41989,41991],{"class":104,"line":521},[102,41988,39154],{"class":119},[102,41990,260],{"class":108},[102,41992,40154],{"class":119},[102,41994,41995],{"class":104,"line":526},[102,41996,652],{"emptyLinePlaceholder":651},[102,41998,41999],{"class":104,"line":532},[102,42000,42001],{"class":126},"    # 设置初始化参数\n",[102,42003,42004,42007,42009],{"class":104,"line":538},[102,42005,42006],{"class":119},"    test_corrects",[102,42008,260],{"class":108},[102,42010,40207],{"class":187},[102,42012,42013,42016,42018],{"class":104,"line":555},[102,42014,42015],{"class":119},"    test_num",[102,42017,260],{"class":108},[102,42019,11901],{"class":187},[102,42021,42022],{"class":104,"line":570},[102,42023,652],{"emptyLinePlaceholder":651},[102,42025,42026],{"class":104,"line":581},[102,42027,42028],{"class":126},"    # 进行模型测试\n",[102,42030,42031],{"class":104,"line":819},[102,42032,42033],{"class":126},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[102,42035,42036],{"class":104,"line":828},[102,42037,42038],{"class":126},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[102,42040,42041,42044],{"class":104,"line":837},[102,42042,42043],{"class":108},"    with",[102,42045,40749],{"class":119},[102,42047,42048],{"class":104,"line":842},[102,42049,42050],{"class":126},"        # 从数据中进行\n",[102,42052,42053,42055,42058,42060],{"class":104,"line":855},[102,42054,12217],{"class":108},[102,42056,42057],{"class":119}," test_data_x,test_data_y ",[102,42059,33908],{"class":108},[102,42061,42062],{"class":119}," test_dataloader:\n",[102,42064,42065,42068,42070],{"class":104,"line":860},[102,42066,42067],{"class":119},"            test_data_x",[102,42069,260],{"class":108},[102,42071,42072],{"class":119},"test_data_x.to(device)\n",[102,42074,42075,42078,42080],{"class":104,"line":871},[102,42076,42077],{"class":119},"            test_data_y",[102,42079,260],{"class":108},[102,42081,42082],{"class":119},"test_data_y.to(device)\n",[102,42084,42085],{"class":104,"line":1359},[102,42086,42087],{"class":126},"            # 设置为验证模式\n",[102,42089,42090],{"class":104,"line":1368},[102,42091,40740],{"class":119},[102,42093,42094],{"class":104,"line":1373},[102,42095,42096],{"class":126},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[102,42098,42099,42101,42103],{"class":104,"line":1378},[102,42100,40525],{"class":119},[102,42102,260],{"class":108},[102,42104,42105],{"class":119},"model(test_data_x)\n",[102,42107,42108],{"class":104,"line":1384},[102,42109,42110],{"class":126},"            # 查找每一行中最大值对应的下标\n",[102,42112,42113,42115,42117,42119,42121,42123,42125],{"class":104,"line":1398},[102,42114,40542],{"class":119},[102,42116,260],{"class":108},[102,42118,40547],{"class":119},[102,42120,40550],{"class":386},[102,42122,260],{"class":108},[102,42124,7039],{"class":187},[102,42126,390],{"class":119},[102,42128,42129],{"class":104,"line":1424},[102,42130,42131],{"class":126},"            # 计算正确率\n",[102,42133,42134],{"class":104,"line":1429},[102,42135,42136],{"class":126},"            # .data表示是一个不带梯度信息的tensor\n",[102,42138,42139],{"class":104,"line":1435},[102,42140,42141],{"class":126},"            # 如果预测正确，则准确度test_corrects加1\n",[102,42143,42144,42147,42149,42151,42153],{"class":104,"line":1450},[102,42145,42146],{"class":119},"            test_corrects",[102,42148,18244],{"class":108},[102,42150,40652],{"class":119},[102,42152,1876],{"class":108},[102,42154,42155],{"class":119},"test_data_y.data)\n",[102,42157,42158],{"class":104,"line":1473},[102,42159,42160],{"class":126},"            # 将所有的测试样本进行累计\n",[102,42162,42163,42166,42168,42171,42173],{"class":104,"line":1478},[102,42164,42165],{"class":119},"            test_num",[102,42167,18244],{"class":108},[102,42169,42170],{"class":119},"test_data_x.size(",[102,42172,8423],{"class":187},[102,42174,390],{"class":119},[102,42176,42177],{"class":104,"line":1484},[102,42178,652],{"emptyLinePlaceholder":651},[102,42180,42181],{"class":104,"line":1499},[102,42182,42183],{"class":126},"        # 计算准确度\n",[102,42185,42186,42189,42191,42194,42196],{"class":104,"line":1508},[102,42187,42188],{"class":119},"        test_acc",[102,42190,260],{"class":108},[102,42192,42193],{"class":119},"test_corrects.double().item()",[102,42195,9611],{"class":108},[102,42197,42198],{"class":119},"test_num\n",[102,42200,42201],{"class":104,"line":1513},[102,42202,42203],{"class":126},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[102,42205,42206,42208,42210,42213],{"class":104,"line":1524},[102,42207,40316],{"class":187},[102,42209,380],{"class":119},[102,42211,42212],{"class":278},"\"测试的准确率：\"",[102,42214,42215],{"class":119},",test_acc)\n",[102,42217,42218],{"class":104,"line":1529},[102,42219,652],{"emptyLinePlaceholder":651},[102,42221,42222],{"class":104,"line":1538},[102,42223,42224],{"class":126},"# 实现模型的测试功能\n",[102,42226,42227,42229,42231,42233,42235],{"class":104,"line":2089},[102,42228,10407],{"class":108},[102,42230,39085],{"class":187},[102,42232,1876],{"class":108},[102,42234,39090],{"class":278},[102,42236,12552],{"class":119},[102,42238,42239],{"class":104,"line":2094},[102,42240,42241],{"class":126},"    # 加载模型\n",[102,42243,42244,42246,42248],{"class":104,"line":2100},[102,42245,39154],{"class":119},[102,42247,260],{"class":108},[102,42249,41690],{"class":119},[102,42251,42252],{"class":104,"line":2106},[102,42253,42254],{"class":126},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[102,42256,42257],{"class":104,"line":2120},[102,42258,42259],{"class":126},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[102,42261,42262,42265,42268],{"class":104,"line":2128},[102,42263,42264],{"class":119},"    model.load_state_dict(torch.load(",[102,42266,42267],{"class":278},"'best_model.pth'",[102,42269,38362],{"class":119},[102,42271,42272],{"class":104,"line":2149},[102,42273,42274],{"class":126},"    # 数据加载\n",[102,42276,42277,42279,42281],{"class":104,"line":2161},[102,42278,41887],{"class":119},[102,42280,260],{"class":108},[102,42282,42283],{"class":119},"test_data_process()\n",[102,42285,42286],{"class":104,"line":2167},[102,42287,42288],{"class":126},"    # 加载模型测试的函数\n",[102,42290,42291],{"class":104,"line":2190},[102,42292,42293],{"class":119},"    test_model_process(model,test_dataloader)\n",[102,42295,42296],{"class":104,"line":2196},[102,42297,652],{"emptyLinePlaceholder":651},[102,42299,42300],{"class":104,"line":2219},[102,42301,42302],{"class":126},"    # 验证集推理实现：\n",[102,42304,42305],{"class":104,"line":2233},[102,42306,42307],{"class":126},"    # 加载数据加载的更详细一些\n",[102,42309,42310,42312,42314,42316,42318,42320,42322],{"class":104,"line":2253},[102,42311,39102],{"class":119},[102,42313,260],{"class":108},[102,42315,39109],{"class":278},[102,42317,10565],{"class":108},[102,42319,39114],{"class":119},[102,42321,10562],{"class":108},[102,42323,41984],{"class":278},[102,42325,42326,42328,42330],{"class":104,"line":2259},[102,42327,39154],{"class":119},[102,42329,260],{"class":108},[102,42331,40154],{"class":119},[102,42333,42334],{"class":104,"line":2270},[102,42335,42336],{"class":126},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[102,42338,42339],{"class":104,"line":2293},[102,42340,42341],{"class":126},"    # 顺序不可改变\n",[102,42343,42344,42347,42349,42351,42354,42356,42359,42361,42364,42366,42369,42371,42374,42376,42379,42381,42384,42386,42389,42391,42394,42396,42399],{"class":104,"line":2315},[102,42345,42346],{"class":119},"    classes",[102,42348,260],{"class":108},[102,42350,9912],{"class":119},[102,42352,42353],{"class":278},"'T-shirt\u002Ftop'",[102,42355,1618],{"class":119},[102,42357,42358],{"class":278},"'Trouser'",[102,42360,1618],{"class":119},[102,42362,42363],{"class":278},"'Pullover'",[102,42365,1618],{"class":119},[102,42367,42368],{"class":278},"'Dress'",[102,42370,1618],{"class":119},[102,42372,42373],{"class":278},"'Coat'",[102,42375,1618],{"class":119},[102,42377,42378],{"class":278},"'Sandal'",[102,42380,1618],{"class":119},[102,42382,42383],{"class":278},"'Shirt'",[102,42385,1618],{"class":119},[102,42387,42388],{"class":278},"'Sneaker'",[102,42390,1618],{"class":119},[102,42392,42393],{"class":278},"'Bag'",[102,42395,1618],{"class":119},[102,42397,42398],{"class":278},"'Ankle boot'",[102,42400,41111],{"class":119},[102,42402,42403,42405],{"class":104,"line":2320},[102,42404,42043],{"class":108},[102,42406,40749],{"class":119},[102,42408,42409],{"class":104,"line":2326},[102,42410,42411],{"class":126},"        # 将数据和标签都放到设备当中\n",[102,42413,42414,42416,42419,42421],{"class":104,"line":2340},[102,42415,12217],{"class":108},[102,42417,42418],{"class":119}," b_x,b_y ",[102,42420,33908],{"class":108},[102,42422,42062],{"class":119},[102,42424,42425,42427,42429],{"class":104,"line":2354},[102,42426,40475],{"class":119},[102,42428,260],{"class":108},[102,42430,40480],{"class":119},[102,42432,42433,42435,42437],{"class":104,"line":2359},[102,42434,40490],{"class":119},[102,42436,260],{"class":108},[102,42438,40495],{"class":119},[102,42440,42441],{"class":104,"line":2373},[102,42442,652],{"emptyLinePlaceholder":651},[102,42444,42445],{"class":104,"line":2378},[102,42446,42447],{"class":126},"            # 设置模型为验证模式\n",[102,42449,42450],{"class":104,"line":2384},[102,42451,40740],{"class":119},[102,42453,42454],{"class":104,"line":2389},[102,42455,42456],{"class":126},"            # 模型推理结果\n",[102,42458,42459,42461,42463],{"class":104,"line":2403},[102,42460,40525],{"class":119},[102,42462,260],{"class":108},[102,42464,40530],{"class":119},[102,42466,42467],{"class":104,"line":2408},[102,42468,42469],{"class":126},"            # 获取最大下标，最大下标就是类别号\n",[102,42471,42472,42474,42476,42478,42480,42482,42484],{"class":104,"line":2413},[102,42473,40542],{"class":119},[102,42475,260],{"class":108},[102,42477,40547],{"class":119},[102,42479,40550],{"class":386},[102,42481,260],{"class":108},[102,42483,7039],{"class":187},[102,42485,390],{"class":119},[102,42487,42488],{"class":104,"line":2427},[102,42489,42490],{"class":126},"            # 取出张量中的数值\n",[102,42492,42493,42496,42498],{"class":104,"line":2440},[102,42494,42495],{"class":119},"            result",[102,42497,260],{"class":108},[102,42499,42500],{"class":119},"pre_lab.item()\n",[102,42502,42503,42506,42508],{"class":104,"line":2445},[102,42504,42505],{"class":119},"            label",[102,42507,260],{"class":108},[102,42509,42510],{"class":119},"b_y.item()\n",[102,42512,42513,42516,42518,42521,42524,42527,42529,42532],{"class":104,"line":2458},[102,42514,42515],{"class":187},"            print",[102,42517,380],{"class":119},[102,42519,42520],{"class":278},"\"预测值：\"",[102,42522,42523],{"class":119},",classes[result],",[102,42525,42526],{"class":278},"\"------\"",[102,42528,1618],{"class":119},[102,42530,42531],{"class":278},"\"真实值：\"",[102,42533,42534],{"class":119},",classes[label])\n",[14,42536,42537],{},"（2）AlexNet",[87,42539,42540],{},[62,42541,42542],{},"神经网络构建",[93,42544,42546],{"className":38243,"code":42545,"language":38245,"meta":98,"style":98},"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",[83,42547,42548,42554,42564,42574,42586,42590,42607,42615,42630,42642,42684,42711,42754,42780,42824,42867,42910,42937,42941,42951,42956,42984,43003,43022,43026,43031,43039,43054,43064,43078,43088,43103,43118,43133,43144,43148,43153,43163,43178,43183,43197,43212,43224,43229,43240,43245,43251,43256,43268,43288,43293,43302],{"__ignoreMap":98},[102,42549,42550,42552],{"class":104,"line":105},[102,42551,38257],{"class":108},[102,42553,38260],{"class":119},[102,42555,42556,42558,42560,42562],{"class":104,"line":116},[102,42557,38602],{"class":108},[102,42559,38605],{"class":119},[102,42561,38257],{"class":108},[102,42563,38610],{"class":119},[102,42565,42566,42568,42570,42572],{"class":104,"line":123},[102,42567,38602],{"class":108},[102,42569,38622],{"class":119},[102,42571,38257],{"class":108},[102,42573,38627],{"class":119},[102,42575,42576,42578,42581,42583],{"class":104,"line":130},[102,42577,38257],{"class":108},[102,42579,42580],{"class":119}," torch.nn.functional ",[102,42582,39248],{"class":108},[102,42584,42585],{"class":119}," F\n",[102,42587,42588],{"class":104,"line":136},[102,42589,652],{"emptyLinePlaceholder":651},[102,42591,42592,42594,42597,42599,42601,42603,42605],{"class":104,"line":142},[102,42593,109],{"class":108},[102,42595,42596],{"class":112}," AlexNet",[102,42598,380],{"class":119},[102,42600,38643],{"class":112},[102,42602,9585],{"class":119},[102,42604,38648],{"class":112},[102,42606,38651],{"class":119},[102,42608,42609,42611,42613],{"class":104,"line":148},[102,42610,38666],{"class":108},[102,42612,38669],{"class":187},[102,42614,38672],{"class":119},[102,42616,42617,42619,42622,42624,42626,42628],{"class":104,"line":157},[102,42618,38682],{"class":187},[102,42620,42621],{"class":119},"(AlexNet,",[102,42623,38688],{"class":187},[102,42625,38691],{"class":119},[102,42627,38694],{"class":187},[102,42629,172],{"class":119},[102,42631,42632,42634,42637,42639],{"class":104,"line":163},[102,42633,38710],{"class":187},[102,42635,42636],{"class":119},".ReLu",[102,42638,260],{"class":108},[102,42640,42641],{"class":119},"nn.ReLU()\n",[102,42643,42644,42646,42648,42650,42652,42654,42656,42658,42660,42662,42664,42666,42668,42670,42672,42674,42676,42678,42680,42682],{"class":104,"line":175},[102,42645,38710],{"class":187},[102,42647,38713],{"class":119},[102,42649,260],{"class":108},[102,42651,38718],{"class":119},[102,42653,38721],{"class":386},[102,42655,260],{"class":108},[102,42657,7039],{"class":187},[102,42659,1618],{"class":119},[102,42661,38730],{"class":386},[102,42663,260],{"class":108},[102,42665,9247],{"class":187},[102,42667,1618],{"class":119},[102,42669,38739],{"class":386},[102,42671,260],{"class":108},[102,42673,9502],{"class":187},[102,42675,1618],{"class":119},[102,42677,38794],{"class":386},[102,42679,260],{"class":108},[102,42681,9329],{"class":187},[102,42683,390],{"class":119},[102,42685,42686,42688,42690,42692,42695,42697,42699,42701,42703,42705,42707,42709],{"class":104,"line":181},[102,42687,38710],{"class":187},[102,42689,38778],{"class":119},[102,42691,260],{"class":108},[102,42693,42694],{"class":119},"nn.MaxPool2d(",[102,42696,38739],{"class":386},[102,42698,260],{"class":108},[102,42700,7049],{"class":187},[102,42702,1618],{"class":119},[102,42704,38794],{"class":386},[102,42706,260],{"class":108},[102,42708,7044],{"class":187},[102,42710,390],{"class":119},[102,42712,42713,42715,42717,42719,42721,42723,42725,42727,42729,42731,42733,42736,42738,42740,42742,42744,42746,42748,42750,42752],{"class":104,"line":202},[102,42714,38710],{"class":187},[102,42716,38807],{"class":119},[102,42718,260],{"class":108},[102,42720,38718],{"class":119},[102,42722,38721],{"class":386},[102,42724,260],{"class":108},[102,42726,9247],{"class":187},[102,42728,1618],{"class":119},[102,42730,38730],{"class":386},[102,42732,260],{"class":108},[102,42734,42735],{"class":187},"256",[102,42737,1618],{"class":119},[102,42739,38739],{"class":386},[102,42741,260],{"class":108},[102,42743,9354],{"class":187},[102,42745,1618],{"class":119},[102,42747,38748],{"class":386},[102,42749,260],{"class":108},[102,42751,7044],{"class":187},[102,42753,390],{"class":119},[102,42755,42756,42758,42760,42762,42764,42766,42768,42770,42772,42774,42776,42778],{"class":104,"line":208},[102,42757,38710],{"class":187},[102,42759,38842],{"class":119},[102,42761,260],{"class":108},[102,42763,42694],{"class":119},[102,42765,38739],{"class":386},[102,42767,260],{"class":108},[102,42769,7049],{"class":187},[102,42771,1618],{"class":119},[102,42773,38794],{"class":386},[102,42775,260],{"class":108},[102,42777,7044],{"class":187},[102,42779,390],{"class":119},[102,42781,42782,42784,42787,42789,42791,42793,42795,42797,42799,42801,42803,42806,42808,42810,42812,42814,42816,42818,42820,42822],{"class":104,"line":214},[102,42783,38710],{"class":187},[102,42785,42786],{"class":119},".c5",[102,42788,260],{"class":108},[102,42790,38718],{"class":119},[102,42792,38721],{"class":386},[102,42794,260],{"class":108},[102,42796,42735],{"class":187},[102,42798,1618],{"class":119},[102,42800,38730],{"class":386},[102,42802,260],{"class":108},[102,42804,42805],{"class":187},"384",[102,42807,1618],{"class":119},[102,42809,38739],{"class":386},[102,42811,260],{"class":108},[102,42813,7049],{"class":187},[102,42815,1618],{"class":119},[102,42817,38748],{"class":386},[102,42819,260],{"class":108},[102,42821,7039],{"class":187},[102,42823,390],{"class":119},[102,42825,42826,42828,42831,42833,42835,42837,42839,42841,42843,42845,42847,42849,42851,42853,42855,42857,42859,42861,42863,42865],{"class":104,"line":225},[102,42827,38710],{"class":187},[102,42829,42830],{"class":119},".c6",[102,42832,260],{"class":108},[102,42834,38718],{"class":119},[102,42836,38721],{"class":386},[102,42838,260],{"class":108},[102,42840,42805],{"class":187},[102,42842,1618],{"class":119},[102,42844,38730],{"class":386},[102,42846,260],{"class":108},[102,42848,42805],{"class":187},[102,42850,1618],{"class":119},[102,42852,38739],{"class":386},[102,42854,260],{"class":108},[102,42856,7049],{"class":187},[102,42858,1618],{"class":119},[102,42860,38748],{"class":386},[102,42862,260],{"class":108},[102,42864,7039],{"class":187},[102,42866,390],{"class":119},[102,42868,42869,42871,42874,42876,42878,42880,42882,42884,42886,42888,42890,42892,42894,42896,42898,42900,42902,42904,42906,42908],{"class":104,"line":230},[102,42870,38710],{"class":187},[102,42872,42873],{"class":119},".c7",[102,42875,260],{"class":108},[102,42877,38718],{"class":119},[102,42879,38721],{"class":386},[102,42881,260],{"class":108},[102,42883,42805],{"class":187},[102,42885,1618],{"class":119},[102,42887,38730],{"class":386},[102,42889,260],{"class":108},[102,42891,42735],{"class":187},[102,42893,1618],{"class":119},[102,42895,38739],{"class":386},[102,42897,260],{"class":108},[102,42899,7049],{"class":187},[102,42901,1618],{"class":119},[102,42903,38748],{"class":386},[102,42905,260],{"class":108},[102,42907,7039],{"class":187},[102,42909,390],{"class":119},[102,42911,42912,42914,42917,42919,42921,42923,42925,42927,42929,42931,42933,42935],{"class":104,"line":236},[102,42913,38710],{"class":187},[102,42915,42916],{"class":119},".s8",[102,42918,260],{"class":108},[102,42920,42694],{"class":119},[102,42922,38739],{"class":386},[102,42924,260],{"class":108},[102,42926,7049],{"class":187},[102,42928,1618],{"class":119},[102,42930,38794],{"class":386},[102,42932,260],{"class":108},[102,42934,7044],{"class":187},[102,42936,390],{"class":119},[102,42938,42939],{"class":104,"line":242},[102,42940,38867],{"class":126},[102,42942,42943,42945,42947,42949],{"class":104,"line":248},[102,42944,38710],{"class":187},[102,42946,38874],{"class":119},[102,42948,260],{"class":108},[102,42950,38879],{"class":119},[102,42952,42953],{"class":104,"line":254},[102,42954,42955],{"class":126},"       # 定义全连接层\n",[102,42957,42958,42960,42963,42965,42967,42969,42971,42973,42975,42977,42979,42982],{"class":104,"line":269},[102,42959,38710],{"class":187},[102,42961,42962],{"class":119},".f1",[102,42964,260],{"class":108},[102,42966,38896],{"class":119},[102,42968,9379],{"class":187},[102,42970,191],{"class":108},[102,42972,9379],{"class":187},[102,42974,191],{"class":108},[102,42976,42735],{"class":187},[102,42978,1618],{"class":119},[102,42980,42981],{"class":187},"4096",[102,42983,390],{"class":119},[102,42985,42986,42988,42991,42993,42995,42997,42999,43001],{"class":104,"line":298},[102,42987,38710],{"class":187},[102,42989,42990],{"class":119},".f2",[102,42992,260],{"class":108},[102,42994,38896],{"class":119},[102,42996,42981],{"class":187},[102,42998,1618],{"class":119},[102,43000,42981],{"class":187},[102,43002,390],{"class":119},[102,43004,43005,43007,43010,43012,43014,43016,43018,43020],{"class":104,"line":502},[102,43006,38710],{"class":187},[102,43008,43009],{"class":119},".f3",[102,43011,260],{"class":108},[102,43013,38896],{"class":119},[102,43015,42981],{"class":187},[102,43017,1618],{"class":119},[102,43019,263],{"class":187},[102,43021,390],{"class":119},[102,43023,43024],{"class":104,"line":507},[102,43025,652],{"emptyLinePlaceholder":651},[102,43027,43028],{"class":104,"line":512},[102,43029,43030],{"class":126},"    # 定义前向传播\n",[102,43032,43033,43035,43037],{"class":104,"line":521},[102,43034,38666],{"class":108},[102,43036,38958],{"class":112},[102,43038,38961],{"class":119},[102,43040,43041,43043,43045,43047,43050,43052],{"class":104,"line":526},[102,43042,38966],{"class":119},[102,43044,260],{"class":108},[102,43046,38688],{"class":187},[102,43048,43049],{"class":119},".ReLu(",[102,43051,38688],{"class":187},[102,43053,38978],{"class":119},[102,43055,43056,43058,43060,43062],{"class":104,"line":532},[102,43057,38966],{"class":119},[102,43059,260],{"class":108},[102,43061,38688],{"class":187},[102,43063,38989],{"class":119},[102,43065,43066,43068,43070,43072,43074,43076],{"class":104,"line":538},[102,43067,38966],{"class":119},[102,43069,260],{"class":108},[102,43071,38688],{"class":187},[102,43073,43049],{"class":119},[102,43075,38688],{"class":187},[102,43077,39004],{"class":119},[102,43079,43080,43082,43084,43086],{"class":104,"line":555},[102,43081,38966],{"class":119},[102,43083,260],{"class":108},[102,43085,38688],{"class":187},[102,43087,39015],{"class":119},[102,43089,43090,43092,43094,43096,43098,43100],{"class":104,"line":570},[102,43091,38966],{"class":119},[102,43093,260],{"class":108},[102,43095,38688],{"class":187},[102,43097,43049],{"class":119},[102,43099,38688],{"class":187},[102,43101,43102],{"class":119},".c5(x))\n",[102,43104,43105,43107,43109,43111,43113,43115],{"class":104,"line":581},[102,43106,38966],{"class":119},[102,43108,260],{"class":108},[102,43110,38688],{"class":187},[102,43112,43049],{"class":119},[102,43114,38688],{"class":187},[102,43116,43117],{"class":119},".c6(x))\n",[102,43119,43120,43122,43124,43126,43128,43130],{"class":104,"line":819},[102,43121,38966],{"class":119},[102,43123,260],{"class":108},[102,43125,38688],{"class":187},[102,43127,43049],{"class":119},[102,43129,38688],{"class":187},[102,43131,43132],{"class":119},".c7(x))\n",[102,43134,43135,43137,43139,43141],{"class":104,"line":828},[102,43136,38966],{"class":119},[102,43138,260],{"class":108},[102,43140,38688],{"class":187},[102,43142,43143],{"class":119},".s8(x)\n",[102,43145,43146],{"class":104,"line":837},[102,43147,652],{"emptyLinePlaceholder":651},[102,43149,43150],{"class":104,"line":842},[102,43151,43152],{"class":126},"        # 展平加线性全连接层\n",[102,43154,43155,43157,43159,43161],{"class":104,"line":855},[102,43156,38966],{"class":119},[102,43158,260],{"class":108},[102,43160,38688],{"class":187},[102,43162,39026],{"class":119},[102,43164,43165,43167,43169,43171,43173,43175],{"class":104,"line":860},[102,43166,38966],{"class":119},[102,43168,260],{"class":108},[102,43170,38688],{"class":187},[102,43172,43049],{"class":119},[102,43174,38688],{"class":187},[102,43176,43177],{"class":119},".f1(x))\n",[102,43179,43180],{"class":104,"line":871},[102,43181,43182],{"class":126},"        # 还需要dropout对神经元随机进行失活\n",[102,43184,43185,43187,43189,43192,43195],{"class":104,"line":1359},[102,43186,38966],{"class":119},[102,43188,260],{"class":108},[102,43190,43191],{"class":119},"F.dropout(x,",[102,43193,43194],{"class":187},"0.5",[102,43196,390],{"class":119},[102,43198,43199,43201,43203,43205,43207,43209],{"class":104,"line":1368},[102,43200,38966],{"class":119},[102,43202,260],{"class":108},[102,43204,38688],{"class":187},[102,43206,43049],{"class":119},[102,43208,38688],{"class":187},[102,43210,43211],{"class":119},".f2(x))\n",[102,43213,43214,43216,43218,43220,43222],{"class":104,"line":1373},[102,43215,38966],{"class":119},[102,43217,260],{"class":108},[102,43219,43191],{"class":119},[102,43221,43194],{"class":187},[102,43223,390],{"class":119},[102,43225,43226],{"class":104,"line":1378},[102,43227,43228],{"class":126},"        # 直接输出\n",[102,43230,43231,43233,43235,43237],{"class":104,"line":1384},[102,43232,38966],{"class":119},[102,43234,260],{"class":108},[102,43236,38688],{"class":187},[102,43238,43239],{"class":119},".f3(x)\n",[102,43241,43242],{"class":104,"line":1398},[102,43243,43244],{"class":126},"        # 前向传播输出\n",[102,43246,43247,43249],{"class":104,"line":1424},[102,43248,184],{"class":108},[102,43250,39074],{"class":119},[102,43252,43253],{"class":104,"line":1429},[102,43254,43255],{"class":126},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[102,43257,43258,43260,43262,43264,43266],{"class":104,"line":1435},[102,43259,10407],{"class":108},[102,43261,39085],{"class":187},[102,43263,1876],{"class":108},[102,43265,39090],{"class":278},[102,43267,12552],{"class":119},[102,43269,43270,43272,43274,43276,43278,43280,43282,43284,43286],{"class":104,"line":1450},[102,43271,39102],{"class":119},[102,43273,260],{"class":108},[102,43275,38316],{"class":119},[102,43277,39109],{"class":278},[102,43279,10565],{"class":108},[102,43281,39114],{"class":119},[102,43283,10562],{"class":108},[102,43285,38341],{"class":278},[102,43287,390],{"class":119},[102,43289,43290],{"class":104,"line":1473},[102,43291,43292],{"class":126},"    # 模型实例化，然后将实例化的模型放到设备中\n",[102,43294,43295,43297,43299],{"class":104,"line":1478},[102,43296,39154],{"class":119},[102,43298,260],{"class":108},[102,43300,43301],{"class":119},"AlexNet().to(device)\n",[102,43303,43304,43306,43308,43310,43312,43315,43317,43319],{"class":104,"line":1484},[102,43305,39164],{"class":187},[102,43307,39167],{"class":119},[102,43309,7039],{"class":187},[102,43311,1618],{"class":119},[102,43313,43314],{"class":187},"227",[102,43316,1618],{"class":119},[102,43318,43314],{"class":187},[102,43320,39180],{"class":119},[87,43322,43323],{"start":116},[62,43324,39193],{},[93,43326,43328],{"className":38243,"code":43327,"language":38245,"meta":98,"style":98},"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",[83,43329,43330,43336,43342,43352,43358,43368,43378,43388,43398,43408,43412,43423,43433,43437,43441,43445,43453,43465,43475,43491,43501,43533,43547,43557,43567,43571,43581,43595,43605,43615,43625,43631,43635,43639,43643,43647,43651,43659,43679,43683,43687,43691,43695,43699,43715,43719,43723,43731,43735,43739,43747,43751,43755,43759,43767,43771,43775,43779,43783,43791,43795,43803,43807,43815,43819,43827,43831,43839,43843,43847,43855,43859,43863,43867,43879,43903,43917,43921,43925,43929,43937,43941,43949,43953,43961,43965,43973,43977,43985,43989,43997,44001,44013,44017,44025,44029,44037,44041,44045,44049,44053,44061,44065,44081,44085,44093,44097,44101,44105,44109,44113,44117,44121,44137,44141,44153,44157,44169,44173,44185,44189,44197,44201,44209,44213,44217,44222,44228,44232,44241,44245,44262,44266,44275,44279,44297,44310,44315,44328,44332,44336,44344,44348,44352,44360,44364,44372,44376,44384,44388,44392,44434,44476,44480,44484,44500,44504,44520,44524,44528,44536,44540,44544,44556,44594,44599,44604,44613,44617,44631,44641,44647,44653,44659,44665,44669,44673,44679,44683,44687,44695,44699,44717,44721,44725,44729,44745,44749,44753,44757,44761,44765,44785,44805,44809,44813,44817,44825,44833,44837,44853,44873,44893,44897,44901,44909,44917,44921,44925,44929,44941,44945,44955,44963,44980],{"__ignoreMap":98},[102,43331,43332,43334],{"class":104,"line":105},[102,43333,38257],{"class":108},[102,43335,39687],{"class":119},[102,43337,43338,43340],{"class":104,"line":116},[102,43339,38257],{"class":108},[102,43341,39694],{"class":119},[102,43343,43344,43346,43348,43350],{"class":104,"line":123},[102,43345,38257],{"class":108},[102,43347,39705],{"class":119},[102,43349,39248],{"class":108},[102,43351,39710],{"class":119},[102,43353,43354,43356],{"class":104,"line":130},[102,43355,38257],{"class":108},[102,43357,38260],{"class":119},[102,43359,43360,43362,43364,43366],{"class":104,"line":136},[102,43361,38602],{"class":108},[102,43363,39280],{"class":119},[102,43365,38257],{"class":108},[102,43367,39727],{"class":119},[102,43369,43370,43372,43374,43376],{"class":104,"line":142},[102,43371,38602],{"class":108},[102,43373,39233],{"class":119},[102,43375,38257],{"class":108},[102,43377,39238],{"class":119},[102,43379,43380,43382,43384,43386],{"class":104,"line":148},[102,43381,38602],{"class":108},[102,43383,39263],{"class":119},[102,43385,38257],{"class":108},[102,43387,39268],{"class":119},[102,43389,43390,43392,43394,43396],{"class":104,"line":157},[102,43391,38257],{"class":108},[102,43393,39280],{"class":119},[102,43395,39248],{"class":108},[102,43397,39285],{"class":119},[102,43399,43400,43402,43404,43406],{"class":104,"line":163},[102,43401,38257],{"class":108},[102,43403,39297],{"class":119},[102,43405,39248],{"class":108},[102,43407,39302],{"class":119},[102,43409,43410],{"class":104,"line":175},[102,43411,39772],{"class":126},[102,43413,43414,43416,43418,43420],{"class":104,"line":181},[102,43415,38602],{"class":108},[102,43417,39779],{"class":119},[102,43419,38257],{"class":108},[102,43421,43422],{"class":119}," AlexNet\n",[102,43424,43425,43427,43429,43431],{"class":104,"line":202},[102,43426,38602],{"class":108},[102,43428,38605],{"class":119},[102,43430,38257],{"class":108},[102,43432,38610],{"class":119},[102,43434,43435],{"class":104,"line":208},[102,43436,652],{"emptyLinePlaceholder":651},[102,43438,43439],{"class":104,"line":214},[102,43440,652],{"emptyLinePlaceholder":651},[102,43442,43443],{"class":104,"line":225},[102,43444,39807],{"class":126},[102,43446,43447,43449,43451],{"class":104,"line":230},[102,43448,39812],{"class":108},[102,43450,39815],{"class":112},[102,43452,39818],{"class":119},[102,43454,43455,43457,43459,43461,43463],{"class":104,"line":236},[102,43456,39823],{"class":119},[102,43458,260],{"class":108},[102,43460,39320],{"class":119},[102,43462,39328],{"class":278},[102,43464,39331],{"class":119},[102,43466,43467,43469,43471,43473],{"class":104,"line":242},[102,43468,39836],{"class":386},[102,43470,260],{"class":108},[102,43472,39341],{"class":187},[102,43474,39331],{"class":119},[102,43476,43477,43479,43481,43483,43485,43487,43489],{"class":104,"line":248},[102,43478,39847],{"class":386},[102,43480,260],{"class":108},[102,43482,39358],{"class":119},[102,43484,39361],{"class":386},[102,43486,260],{"class":108},[102,43488,43314],{"class":187},[102,43490,39369],{"class":119},[102,43492,43493,43495,43497,43499],{"class":104,"line":254},[102,43494,39864],{"class":386},[102,43496,260],{"class":108},[102,43498,39341],{"class":187},[102,43500,390],{"class":119},[102,43502,43503,43505,43507,43509,43511,43513,43515,43517,43519,43521,43523,43525,43527,43529,43531],{"class":104,"line":269},[102,43504,39875],{"class":119},[102,43506,260],{"class":108},[102,43508,39880],{"class":119},[102,43510,39883],{"class":187},[102,43512,380],{"class":119},[102,43514,39888],{"class":187},[102,43516,191],{"class":108},[102,43518,16145],{"class":187},[102,43520,39895],{"class":119},[102,43522,39883],{"class":187},[102,43524,380],{"class":119},[102,43526,39902],{"class":187},[102,43528,191],{"class":108},[102,43530,16145],{"class":187},[102,43532,39909],{"class":119},[102,43534,43535,43537,43539,43541,43543,43545],{"class":104,"line":298},[102,43536,39914],{"class":119},[102,43538,260],{"class":108},[102,43540,39919],{"class":119},[102,43542,39402],{"class":386},[102,43544,260],{"class":108},[102,43546,39407],{"class":119},[102,43548,43549,43551,43553,43555],{"class":104,"line":502},[102,43550,39930],{"class":386},[102,43552,260],{"class":108},[102,43554,39935],{"class":187},[102,43556,39331],{"class":119},[102,43558,43559,43561,43563,43565],{"class":104,"line":507},[102,43560,39942],{"class":386},[102,43562,260],{"class":108},[102,43564,39341],{"class":187},[102,43566,39331],{"class":119},[102,43568,43569],{"class":104,"line":512},[102,43570,39953],{"class":126},[102,43572,43573,43575,43577,43579],{"class":104,"line":521},[102,43574,39958],{"class":386},[102,43576,260],{"class":108},[102,43578,9428],{"class":187},[102,43580,390],{"class":119},[102,43582,43583,43585,43587,43589,43591,43593],{"class":104,"line":526},[102,43584,39969],{"class":119},[102,43586,260],{"class":108},[102,43588,39399],{"class":119},[102,43590,39402],{"class":386},[102,43592,260],{"class":108},[102,43594,39980],{"class":119},[102,43596,43597,43599,43601,43603],{"class":104,"line":532},[102,43598,39985],{"class":386},[102,43600,260],{"class":108},[102,43602,39935],{"class":187},[102,43604,39331],{"class":119},[102,43606,43607,43609,43611,43613],{"class":104,"line":538},[102,43608,39996],{"class":386},[102,43610,260],{"class":108},[102,43612,39341],{"class":187},[102,43614,39331],{"class":119},[102,43616,43617,43619,43621,43623],{"class":104,"line":555},[102,43618,40007],{"class":386},[102,43620,260],{"class":108},[102,43622,9428],{"class":187},[102,43624,390],{"class":119},[102,43626,43627,43629],{"class":104,"line":570},[102,43628,863],{"class":108},[102,43630,40020],{"class":119},[102,43632,43633],{"class":104,"line":581},[102,43634,652],{"emptyLinePlaceholder":651},[102,43636,43637],{"class":104,"line":819},[102,43638,40029],{"class":126},[102,43640,43641],{"class":104,"line":828},[102,43642,40034],{"class":126},[102,43644,43645],{"class":104,"line":837},[102,43646,652],{"emptyLinePlaceholder":651},[102,43648,43649],{"class":104,"line":842},[102,43650,40043],{"class":126},[102,43652,43653,43655,43657],{"class":104,"line":855},[102,43654,39812],{"class":108},[102,43656,40050],{"class":112},[102,43658,40053],{"class":119},[102,43660,43661,43663,43665,43667,43669,43671,43673,43675,43677],{"class":104,"line":860},[102,43662,39102],{"class":119},[102,43664,260],{"class":108},[102,43666,38316],{"class":119},[102,43668,39109],{"class":278},[102,43670,10565],{"class":108},[102,43672,39114],{"class":119},[102,43674,10562],{"class":108},[102,43676,40072],{"class":278},[102,43678,390],{"class":119},[102,43680,43681],{"class":104,"line":871},[102,43682,652],{"emptyLinePlaceholder":651},[102,43684,43685],{"class":104,"line":1359},[102,43686,652],{"emptyLinePlaceholder":651},[102,43688,43689],{"class":104,"line":1368},[102,43690,40087],{"class":126},[102,43692,43693],{"class":104,"line":1373},[102,43694,40092],{"class":126},[102,43696,43697],{"class":104,"line":1378},[102,43698,40097],{"class":126},[102,43700,43701,43703,43705,43707,43709,43711,43713],{"class":104,"line":1384},[102,43702,40102],{"class":119},[102,43704,260],{"class":108},[102,43706,40107],{"class":119},[102,43708,40110],{"class":386},[102,43710,260],{"class":108},[102,43712,40115],{"class":187},[102,43714,390],{"class":119},[102,43716,43717],{"class":104,"line":1398},[102,43718,652],{"emptyLinePlaceholder":651},[102,43720,43721],{"class":104,"line":1424},[102,43722,40126],{"class":126},[102,43724,43725,43727,43729],{"class":104,"line":1429},[102,43726,40131],{"class":119},[102,43728,260],{"class":108},[102,43730,40136],{"class":119},[102,43732,43733],{"class":104,"line":1435},[102,43734,652],{"emptyLinePlaceholder":651},[102,43736,43737],{"class":104,"line":1450},[102,43738,40145],{"class":126},[102,43740,43741,43743,43745],{"class":104,"line":1473},[102,43742,39154],{"class":119},[102,43744,260],{"class":108},[102,43746,40154],{"class":119},[102,43748,43749],{"class":104,"line":1478},[102,43750,40159],{"class":126},[102,43752,43753],{"class":104,"line":1484},[102,43754,40164],{"class":126},[102,43756,43757],{"class":104,"line":1499},[102,43758,40169],{"class":126},[102,43760,43761,43763,43765],{"class":104,"line":1508},[102,43762,40174],{"class":119},[102,43764,260],{"class":108},[102,43766,40179],{"class":119},[102,43768,43769],{"class":104,"line":1513},[102,43770,652],{"emptyLinePlaceholder":651},[102,43772,43773],{"class":104,"line":1524},[102,43774,652],{"emptyLinePlaceholder":651},[102,43776,43777],{"class":104,"line":1529},[102,43778,40192],{"class":126},[102,43780,43781],{"class":104,"line":1538},[102,43782,40197],{"class":126},[102,43784,43785,43787,43789],{"class":104,"line":2089},[102,43786,40202],{"class":119},[102,43788,260],{"class":108},[102,43790,40207],{"class":187},[102,43792,43793],{"class":104,"line":2094},[102,43794,40212],{"class":126},[102,43796,43797,43799,43801],{"class":104,"line":2100},[102,43798,40217],{"class":119},[102,43800,260],{"class":108},[102,43802,40222],{"class":119},[102,43804,43805],{"class":104,"line":2106},[102,43806,40227],{"class":126},[102,43808,43809,43811,43813],{"class":104,"line":2120},[102,43810,40232],{"class":119},[102,43812,260],{"class":108},[102,43814,40222],{"class":119},[102,43816,43817],{"class":104,"line":2128},[102,43818,40241],{"class":126},[102,43820,43821,43823,43825],{"class":104,"line":2149},[102,43822,40246],{"class":119},[102,43824,260],{"class":108},[102,43826,40222],{"class":119},[102,43828,43829],{"class":104,"line":2161},[102,43830,40255],{"class":126},[102,43832,43833,43835,43837],{"class":104,"line":2167},[102,43834,40260],{"class":119},[102,43836,260],{"class":108},[102,43838,40222],{"class":119},[102,43840,43841],{"class":104,"line":2190},[102,43842,652],{"emptyLinePlaceholder":651},[102,43844,43845],{"class":104,"line":2196},[102,43846,40273],{"class":126},[102,43848,43849,43851,43853],{"class":104,"line":2219},[102,43850,40278],{"class":119},[102,43852,260],{"class":108},[102,43854,40283],{"class":119},[102,43856,43857],{"class":104,"line":2233},[102,43858,652],{"emptyLinePlaceholder":651},[102,43860,43861],{"class":104,"line":2253},[102,43862,652],{"emptyLinePlaceholder":651},[102,43864,43865],{"class":104,"line":2259},[102,43866,40296],{"class":126},[102,43868,43869,43871,43873,43875,43877],{"class":104,"line":2270},[102,43870,12016],{"class":108},[102,43872,40303],{"class":119},[102,43874,33908],{"class":108},[102,43876,40308],{"class":187},[102,43878,40311],{"class":119},[102,43880,43881,43883,43885,43887,43889,43891,43893,43895,43897,43899,43901],{"class":104,"line":2293},[102,43882,40316],{"class":187},[102,43884,380],{"class":119},[102,43886,40321],{"class":278},[102,43888,40324],{"class":187},[102,43890,9611],{"class":278},[102,43892,40324],{"class":187},[102,43894,9288],{"class":278},[102,43896,40333],{"class":119},[102,43898,2833],{"class":108},[102,43900,7039],{"class":187},[102,43902,38362],{"class":119},[102,43904,43905,43907,43909,43911,43913,43915],{"class":104,"line":2315},[102,43906,40316],{"class":187},[102,43908,380],{"class":119},[102,43910,40348],{"class":278},[102,43912,191],{"class":108},[102,43914,263],{"class":187},[102,43916,390],{"class":119},[102,43918,43919],{"class":104,"line":2320},[102,43920,652],{"emptyLinePlaceholder":651},[102,43922,43923],{"class":104,"line":2326},[102,43924,40363],{"class":126},[102,43926,43927],{"class":104,"line":2340},[102,43928,40368],{"class":126},[102,43930,43931,43933,43935],{"class":104,"line":2354},[102,43932,40373],{"class":119},[102,43934,260],{"class":108},[102,43936,40207],{"class":187},[102,43938,43939],{"class":104,"line":2359},[102,43940,40382],{"class":126},[102,43942,43943,43945,43947],{"class":104,"line":2373},[102,43944,40387],{"class":119},[102,43946,260],{"class":108},[102,43948,11901],{"class":187},[102,43950,43951],{"class":104,"line":2378},[102,43952,40396],{"class":126},[102,43954,43955,43957,43959],{"class":104,"line":2384},[102,43956,40401],{"class":119},[102,43958,260],{"class":108},[102,43960,40207],{"class":187},[102,43962,43963],{"class":104,"line":2389},[102,43964,40410],{"class":126},[102,43966,43967,43969,43971],{"class":104,"line":2403},[102,43968,40415],{"class":119},[102,43970,260],{"class":108},[102,43972,11901],{"class":187},[102,43974,43975],{"class":104,"line":2408},[102,43976,40424],{"class":126},[102,43978,43979,43981,43983],{"class":104,"line":2413},[102,43980,40429],{"class":119},[102,43982,260],{"class":108},[102,43984,11901],{"class":187},[102,43986,43987],{"class":104,"line":2427},[102,43988,40438],{"class":126},[102,43990,43991,43993,43995],{"class":104,"line":2440},[102,43992,40443],{"class":119},[102,43994,260],{"class":108},[102,43996,11901],{"class":187},[102,43998,43999],{"class":104,"line":2445},[102,44000,40452],{"class":126},[102,44002,44003,44005,44007,44009,44011],{"class":104,"line":2458},[102,44004,12217],{"class":108},[102,44006,39466],{"class":119},[102,44008,33908],{"class":108},[102,44010,39471],{"class":187},[102,44012,40465],{"class":119},[102,44014,44015],{"class":104,"line":2463},[102,44016,40470],{"class":126},[102,44018,44019,44021,44023],{"class":104,"line":2468},[102,44020,40475],{"class":119},[102,44022,260],{"class":108},[102,44024,40480],{"class":119},[102,44026,44027],{"class":104,"line":2473},[102,44028,40485],{"class":126},[102,44030,44031,44033,44035],{"class":104,"line":2486},[102,44032,40490],{"class":119},[102,44034,260],{"class":108},[102,44036,40495],{"class":119},[102,44038,44039],{"class":104,"line":2491},[102,44040,40501],{"class":126},[102,44042,44043],{"class":104,"line":40498},[102,44044,40507],{"class":119},[102,44046,44047],{"class":104,"line":40504},[102,44048,40513],{"class":126},[102,44050,44051],{"class":104,"line":40510},[102,44052,40519],{"class":126},[102,44054,44055,44057,44059],{"class":104,"line":40516},[102,44056,40525],{"class":119},[102,44058,260],{"class":108},[102,44060,40530],{"class":119},[102,44062,44063],{"class":104,"line":40522},[102,44064,40536],{"class":126},[102,44066,44067,44069,44071,44073,44075,44077,44079],{"class":104,"line":40533},[102,44068,40542],{"class":119},[102,44070,260],{"class":108},[102,44072,40547],{"class":119},[102,44074,40550],{"class":386},[102,44076,260],{"class":108},[102,44078,7039],{"class":187},[102,44080,390],{"class":119},[102,44082,44083],{"class":104,"line":40539},[102,44084,40562],{"class":126},[102,44086,44087,44089,44091],{"class":104,"line":40559},[102,44088,40568],{"class":119},[102,44090,260],{"class":108},[102,44092,40573],{"class":119},[102,44094,44095],{"class":104,"line":40565},[102,44096,40579],{"class":126},[102,44098,44099],{"class":104,"line":40576},[102,44100,40585],{"class":119},[102,44102,44103],{"class":104,"line":40582},[102,44104,40591],{"class":126},[102,44106,44107],{"class":104,"line":40588},[102,44108,40597],{"class":119},[102,44110,44111],{"class":104,"line":40594},[102,44112,40603],{"class":126},[102,44114,44115],{"class":104,"line":40600},[102,44116,40609],{"class":119},[102,44118,44119],{"class":104,"line":40606},[102,44120,40615],{"class":126},[102,44122,44123,44125,44127,44129,44131,44133,44135],{"class":104,"line":40612},[102,44124,40621],{"class":119},[102,44126,18244],{"class":108},[102,44128,40626],{"class":119},[102,44130,191],{"class":108},[102,44132,40631],{"class":119},[102,44134,8423],{"class":187},[102,44136,390],{"class":119},[102,44138,44139],{"class":104,"line":40618},[102,44140,40641],{"class":126},[102,44142,44143,44145,44147,44149,44151],{"class":104,"line":40638},[102,44144,40647],{"class":119},[102,44146,18244],{"class":108},[102,44148,40652],{"class":119},[102,44150,1876],{"class":108},[102,44152,40657],{"class":119},[102,44154,44155],{"class":104,"line":40644},[102,44156,40663],{"class":126},[102,44158,44159,44161,44163,44165,44167],{"class":104,"line":40660},[102,44160,40669],{"class":119},[102,44162,18244],{"class":108},[102,44164,40631],{"class":119},[102,44166,8423],{"class":187},[102,44168,390],{"class":119},[102,44170,44171],{"class":104,"line":40666},[102,44172,40683],{"class":126},[102,44174,44175,44177,44179,44181,44183],{"class":104,"line":40680},[102,44176,12217],{"class":108},[102,44178,40691],{"class":119},[102,44180,33908],{"class":108},[102,44182,39471],{"class":187},[102,44184,40698],{"class":119},[102,44186,44187],{"class":104,"line":40686},[102,44188,40704],{"class":126},[102,44190,44191,44193,44195],{"class":104,"line":40701},[102,44192,40475],{"class":119},[102,44194,260],{"class":108},[102,44196,40480],{"class":119},[102,44198,44199],{"class":104,"line":40707},[102,44200,40719],{"class":126},[102,44202,44203,44205,44207],{"class":104,"line":40716},[102,44204,40490],{"class":119},[102,44206,260],{"class":108},[102,44208,40495],{"class":119},[102,44210,44211],{"class":104,"line":40722},[102,44212,40734],{"class":126},[102,44214,44215],{"class":104,"line":40731},[102,44216,40740],{"class":119},[102,44218,44219],{"class":104,"line":40737},[102,44220,44221],{"class":126},"            # 验证时不计算梯度以节省内存\u002F计算\n",[102,44223,44224,44226],{"class":104,"line":40743},[102,44225,40746],{"class":108},[102,44227,40749],{"class":119},[102,44229,44230],{"class":104,"line":40752},[102,44231,40755],{"class":126},[102,44233,44234,44237,44239],{"class":104,"line":40758},[102,44235,44236],{"class":119},"                output",[102,44238,260],{"class":108},[102,44240,40530],{"class":119},[102,44242,44243],{"class":104,"line":40769},[102,44244,40772],{"class":126},[102,44246,44247,44250,44252,44254,44256,44258,44260],{"class":104,"line":40775},[102,44248,44249],{"class":119},"                pre_lab",[102,44251,260],{"class":108},[102,44253,40547],{"class":119},[102,44255,40550],{"class":386},[102,44257,260],{"class":108},[102,44259,7039],{"class":187},[102,44261,390],{"class":119},[102,44263,44264],{"class":104,"line":40794},[102,44265,40797],{"class":126},[102,44267,44268,44271,44273],{"class":104,"line":40800},[102,44269,44270],{"class":119},"                val_batch_loss",[102,44272,260],{"class":108},[102,44274,40573],{"class":119},[102,44276,44277],{"class":104,"line":40811},[102,44278,40814],{"class":126},[102,44280,44281,44284,44286,44289,44291,44293,44295],{"class":104,"line":40817},[102,44282,44283],{"class":119},"                val_loss",[102,44285,18244],{"class":108},[102,44287,44288],{"class":119},"val_batch_loss.item()",[102,44290,191],{"class":108},[102,44292,40631],{"class":119},[102,44294,8423],{"class":187},[102,44296,390],{"class":119},[102,44298,44299,44302,44304,44306,44308],{"class":104,"line":40837},[102,44300,44301],{"class":119},"                val_corrects",[102,44303,18244],{"class":108},[102,44305,40652],{"class":119},[102,44307,1876],{"class":108},[102,44309,40657],{"class":119},[102,44311,44312],{"class":104,"line":40853},[102,44313,44314],{"class":126},"            # 当前用于验证的样本数量\n",[102,44316,44317,44320,44322,44324,44326],{"class":104,"line":40859},[102,44318,44319],{"class":119},"            val_num",[102,44321,18244],{"class":108},[102,44323,40631],{"class":119},[102,44325,8423],{"class":187},[102,44327,390],{"class":119},[102,44329,44330],{"class":104,"line":40873},[102,44331,40876],{"class":126},[102,44333,44334],{"class":104,"line":40879},[102,44335,40882],{"class":126},[102,44337,44338,44340,44342],{"class":104,"line":40885},[102,44339,40888],{"class":119},[102,44341,9611],{"class":108},[102,44343,40893],{"class":119},[102,44345,44346],{"class":104,"line":40896},[102,44347,40899],{"class":126},[102,44349,44350],{"class":104,"line":40902},[102,44351,40905],{"class":126},[102,44353,44354,44356,44358],{"class":104,"line":40908},[102,44355,40911],{"class":119},[102,44357,9611],{"class":108},[102,44359,40893],{"class":119},[102,44361,44362],{"class":104,"line":40918},[102,44363,40921],{"class":126},[102,44365,44366,44368,44370],{"class":104,"line":40924},[102,44367,40927],{"class":119},[102,44369,9611],{"class":108},[102,44371,40932],{"class":119},[102,44373,44374],{"class":104,"line":40935},[102,44375,40938],{"class":126},[102,44377,44378,44380,44382],{"class":104,"line":40941},[102,44379,40944],{"class":119},[102,44381,9611],{"class":108},[102,44383,40932],{"class":119},[102,44385,44386],{"class":104,"line":40951},[102,44387,652],{"emptyLinePlaceholder":651},[102,44389,44390],{"class":104,"line":40956},[102,44391,40959],{"class":126},[102,44393,44394,44396,44398,44400,44402,44404,44406,44408,44410,44412,44414,44416,44418,44420,44422,44424,44426,44428,44430,44432],{"class":104,"line":40962},[102,44395,40316],{"class":187},[102,44397,380],{"class":119},[102,44399,12405],{"class":278},[102,44401,40324],{"class":187},[102,44403,40973],{"class":278},[102,44405,9918],{"class":187},[102,44407,40978],{"class":108},[102,44409,9967],{"class":187},[102,44411,40983],{"class":278},[102,44413,9918],{"class":187},[102,44415,40978],{"class":108},[102,44417,9967],{"class":187},[102,44419,12405],{"class":278},[102,44421,40994],{"class":119},[102,44423,2833],{"class":108},[102,44425,7039],{"class":187},[102,44427,41001],{"class":119},[102,44429,2833],{"class":108},[102,44431,7039],{"class":187},[102,44433,41008],{"class":119},[102,44435,44436,44438,44440,44442,44444,44446,44448,44450,44452,44454,44456,44458,44460,44462,44464,44466,44468,44470,44472,44474],{"class":104,"line":41011},[102,44437,40316],{"class":187},[102,44439,380],{"class":119},[102,44441,12405],{"class":278},[102,44443,40324],{"class":187},[102,44445,41022],{"class":278},[102,44447,9918],{"class":187},[102,44449,40978],{"class":108},[102,44451,9967],{"class":187},[102,44453,41031],{"class":278},[102,44455,9918],{"class":187},[102,44457,40978],{"class":108},[102,44459,9967],{"class":187},[102,44461,12405],{"class":278},[102,44463,41042],{"class":119},[102,44465,2833],{"class":108},[102,44467,7039],{"class":187},[102,44469,41049],{"class":119},[102,44471,2833],{"class":108},[102,44473,7039],{"class":187},[102,44475,41008],{"class":119},[102,44477,44478],{"class":104,"line":41058},[102,44479,652],{"emptyLinePlaceholder":651},[102,44481,44482],{"class":104,"line":41063},[102,44483,41066],{"class":126},[102,44485,44486,44488,44490,44492,44494,44496,44498],{"class":104,"line":41069},[102,44487,1202],{"class":108},[102,44489,41074],{"class":119},[102,44491,2833],{"class":108},[102,44493,7039],{"class":187},[102,44495,9961],{"class":119},[102,44497,1219],{"class":108},[102,44499,41085],{"class":119},[102,44501,44502],{"class":104,"line":41088},[102,44503,41091],{"class":126},[102,44505,44506,44508,44510,44512,44514,44516,44518],{"class":104,"line":41094},[102,44507,41097],{"class":119},[102,44509,9086],{"class":187},[102,44511,260],{"class":108},[102,44513,41104],{"class":119},[102,44515,2833],{"class":108},[102,44517,7039],{"class":187},[102,44519,41111],{"class":119},[102,44521,44522],{"class":104,"line":41114},[102,44523,41117],{"class":126},[102,44525,44526],{"class":104,"line":41120},[102,44527,41123],{"class":126},[102,44529,44530,44532,44534],{"class":104,"line":41126},[102,44531,41129],{"class":119},[102,44533,260],{"class":108},[102,44535,40179],{"class":119},[102,44537,44538],{"class":104,"line":41136},[102,44539,652],{"emptyLinePlaceholder":651},[102,44541,44542],{"class":104,"line":41141},[102,44543,41144],{"class":126},[102,44545,44546,44548,44550,44552,44554],{"class":104,"line":41147},[102,44547,41150],{"class":119},[102,44549,260],{"class":108},[102,44551,41155],{"class":119},[102,44553,2833],{"class":108},[102,44555,41160],{"class":119},[102,44557,44558,44560,44562,44564,44566,44568,44570,44572,44574,44576,44578,44580,44582,44584,44586,44588,44590,44592],{"class":104,"line":41163},[102,44559,40316],{"class":187},[102,44561,380],{"class":119},[102,44563,41170],{"class":278},[102,44565,9918],{"class":187},[102,44567,41175],{"class":108},[102,44569,9967],{"class":187},[102,44571,9571],{"class":278},[102,44573,9918],{"class":187},[102,44575,41175],{"class":108},[102,44577,9967],{"class":187},[102,44579,41188],{"class":278},[102,44581,41191],{"class":119},[102,44583,41194],{"class":108},[102,44585,9929],{"class":187},[102,44587,41199],{"class":119},[102,44589,9363],{"class":108},[102,44591,9929],{"class":187},[102,44593,38362],{"class":119},[102,44595,44596],{"class":104,"line":41208},[102,44597,44598],{"class":126},"    # 选择最优参数并保存\n",[102,44600,44601],{"class":104,"line":41214},[102,44602,44603],{"class":126},"    # 保存最佳模型权重字典\n",[102,44605,44606,44609,44611],{"class":104,"line":41220},[102,44607,44608],{"class":119},"    torch.save(best_model_wts,",[102,44610,41232],{"class":278},[102,44612,390],{"class":119},[102,44614,44615],{"class":104,"line":41226},[102,44616,41252],{"class":126},[102,44618,44619,44621,44623,44625,44627,44629],{"class":104,"line":41237},[102,44620,41258],{"class":119},[102,44622,260],{"class":108},[102,44624,41263],{"class":119},[102,44626,41266],{"class":386},[102,44628,260],{"class":108},[102,44630,120],{"class":119},[102,44632,44633,44635,44637,44639],{"class":104,"line":41243},[102,44634,41276],{"class":278},[102,44636,9881],{"class":119},[102,44638,41281],{"class":187},[102,44640,41284],{"class":119},[102,44642,44643,44645],{"class":104,"line":41249},[102,44644,41290],{"class":278},[102,44646,41293],{"class":119},[102,44648,44649,44651],{"class":104,"line":41255},[102,44650,41299],{"class":278},[102,44652,41302],{"class":119},[102,44654,44655,44657],{"class":104,"line":41273},[102,44656,41308],{"class":278},[102,44658,41311],{"class":119},[102,44660,44661,44663],{"class":104,"line":41287},[102,44662,41317],{"class":278},[102,44664,41320],{"class":119},[102,44666,44667],{"class":104,"line":41296},[102,44668,41326],{"class":119},[102,44670,44671],{"class":104,"line":41305},[102,44672,41332],{"class":126},[102,44674,44675,44677],{"class":104,"line":41314},[102,44676,863],{"class":108},[102,44678,41340],{"class":119},[102,44680,44681],{"class":104,"line":41323},[102,44682,652],{"emptyLinePlaceholder":651},[102,44684,44685],{"class":104,"line":41329},[102,44686,41351],{"class":126},[102,44688,44689,44691,44693],{"class":104,"line":41335},[102,44690,39812],{"class":108},[102,44692,41359],{"class":112},[102,44694,41362],{"class":119},[102,44696,44697],{"class":104,"line":41343},[102,44698,41368],{"class":126},[102,44700,44701,44703,44705,44707,44709,44711,44713,44715],{"class":104,"line":41348},[102,44702,41374],{"class":119},[102,44704,39558],{"class":386},[102,44706,260],{"class":108},[102,44708,380],{"class":119},[102,44710,9527],{"class":187},[102,44712,1618],{"class":119},[102,44714,9329],{"class":187},[102,44716,38362],{"class":119},[102,44718,44719],{"class":104,"line":41354},[102,44720,41394],{"class":126},[102,44722,44723],{"class":104,"line":41365},[102,44724,41400],{"class":126},[102,44726,44727],{"class":104,"line":41371},[102,44728,41406],{"class":126},[102,44730,44731,44733,44735,44737,44739,44741,44743],{"class":104,"line":41391},[102,44732,39592],{"class":119},[102,44734,7039],{"class":187},[102,44736,1618],{"class":119},[102,44738,7044],{"class":187},[102,44740,1618],{"class":119},[102,44742,7039],{"class":187},[102,44744,390],{"class":119},[102,44746,44747],{"class":104,"line":41397},[102,44748,41429],{"class":126},[102,44750,44751],{"class":104,"line":41403},[102,44752,41435],{"class":126},[102,44754,44755],{"class":104,"line":41409},[102,44756,41441],{"class":126},[102,44758,44759],{"class":104,"line":41426},[102,44760,41447],{"class":126},[102,44762,44763],{"class":104,"line":41432},[102,44764,41453],{"class":126},[102,44766,44767,44769,44771,44773,44775,44777,44779,44781,44783],{"class":104,"line":41438},[102,44768,41459],{"class":119},[102,44770,41462],{"class":278},[102,44772,41465],{"class":119},[102,44774,41468],{"class":278},[102,44776,1618],{"class":119},[102,44778,41473],{"class":386},[102,44780,260],{"class":108},[102,44782,41478],{"class":278},[102,44784,390],{"class":119},[102,44786,44787,44789,44791,44793,44795,44797,44799,44801,44803],{"class":104,"line":41444},[102,44788,41459],{"class":119},[102,44790,41462],{"class":278},[102,44792,41490],{"class":119},[102,44794,41493],{"class":278},[102,44796,1618],{"class":119},[102,44798,41473],{"class":386},[102,44800,260],{"class":108},[102,44802,41502],{"class":278},[102,44804,390],{"class":119},[102,44806,44807],{"class":104,"line":41450},[102,44808,41510],{"class":126},[102,44810,44811],{"class":104,"line":41456},[102,44812,41516],{"class":119},[102,44814,44815],{"class":104,"line":41483},[102,44816,41522],{"class":126},[102,44818,44819,44821,44823],{"class":104,"line":41507},[102,44820,41528],{"class":119},[102,44822,41531],{"class":278},[102,44824,390],{"class":119},[102,44826,44827,44829,44831],{"class":104,"line":41513},[102,44828,41539],{"class":119},[102,44830,41542],{"class":278},[102,44832,390],{"class":119},[102,44834,44835],{"class":104,"line":41519},[102,44836,41550],{"class":126},[102,44838,44839,44841,44843,44845,44847,44849,44851],{"class":104,"line":41525},[102,44840,39592],{"class":119},[102,44842,7039],{"class":187},[102,44844,1618],{"class":119},[102,44846,7044],{"class":187},[102,44848,1618],{"class":119},[102,44850,7044],{"class":187},[102,44852,390],{"class":119},[102,44854,44855,44857,44859,44861,44863,44865,44867,44869,44871],{"class":104,"line":41536},[102,44856,41459],{"class":119},[102,44858,41462],{"class":278},[102,44860,41577],{"class":119},[102,44862,41468],{"class":278},[102,44864,1618],{"class":119},[102,44866,41473],{"class":386},[102,44868,260],{"class":108},[102,44870,41588],{"class":278},[102,44872,390],{"class":119},[102,44874,44875,44877,44879,44881,44883,44885,44887,44889,44891],{"class":104,"line":41547},[102,44876,41459],{"class":119},[102,44878,41462],{"class":278},[102,44880,41600],{"class":119},[102,44882,41493],{"class":278},[102,44884,1618],{"class":119},[102,44886,41473],{"class":386},[102,44888,260],{"class":108},[102,44890,41611],{"class":278},[102,44892,390],{"class":119},[102,44894,44895],{"class":104,"line":41553},[102,44896,41619],{"class":126},[102,44898,44899],{"class":104,"line":41570},[102,44900,41516],{"class":119},[102,44902,44903,44905,44907],{"class":104,"line":41593},[102,44904,41528],{"class":119},[102,44906,41462],{"class":278},[102,44908,390],{"class":119},[102,44910,44911,44913,44915],{"class":104,"line":41616},[102,44912,41539],{"class":119},[102,44914,41641],{"class":278},[102,44916,390],{"class":119},[102,44918,44919],{"class":104,"line":41622},[102,44920,41649],{"class":119},[102,44922,44923],{"class":104,"line":41627},[102,44924,652],{"emptyLinePlaceholder":651},[102,44926,44927],{"class":104,"line":41636},[102,44928,41660],{"class":126},[102,44930,44931,44933,44935,44937,44939],{"class":104,"line":41646},[102,44932,10407],{"class":108},[102,44934,39085],{"class":187},[102,44936,1876],{"class":108},[102,44938,39090],{"class":278},[102,44940,12552],{"class":119},[102,44942,44943],{"class":104,"line":41652},[102,44944,41679],{"class":126},[102,44946,44947,44950,44952],{"class":104,"line":41657},[102,44948,44949],{"class":119},"    AlexNet",[102,44951,260],{"class":108},[102,44953,44954],{"class":119},"AlexNet()\n",[102,44956,44957,44959,44961],{"class":104,"line":41663},[102,44958,41696],{"class":119},[102,44960,260],{"class":108},[102,44962,41701],{"class":119},[102,44964,44965,44967,44969,44972,44974,44976,44978],{"class":104,"line":41676},[102,44966,41258],{"class":119},[102,44968,260],{"class":108},[102,44970,44971],{"class":119},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[102,44973,41714],{"class":386},[102,44975,260],{"class":108},[102,44977,5016],{"class":187},[102,44979,390],{"class":119},[102,44981,44982],{"class":104,"line":41682},[102,44983,41726],{"class":119},[87,44985,44986],{"start":123},[62,44987,41739],{},[93,44989,44991],{"className":38243,"code":44990,"language":38245,"meta":98,"style":98},"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",[83,44992,44993,44999,45009,45019,45029,45033,45043,45053,45064,45068,45072,45076,45084,45100,45110,45126,45136,45150,45154,45164,45174,45184,45190,45194,45198,45206,45210,45226,45234,45238,45242,45250,45258,45262,45266,45270,45274,45280,45284,45294,45302,45310,45314,45318,45322,45330,45334,45350,45354,45358,45362,45374,45378,45390,45394,45398,45410,45414,45424,45428,45432,45444,45448,45456,45460,45464,45472,45476,45484,45488,45492,45496,45500,45504,45520,45528,45532,45536,45584,45590,45594,45604,45612,45620,45624,45628,45632,45636,45644,45648,45664,45668,45676,45684],{"__ignoreMap":98},[102,44994,44995,44997],{"class":104,"line":105},[102,44996,38257],{"class":108},[102,44998,38260],{"class":119},[102,45000,45001,45003,45005,45007],{"class":104,"line":116},[102,45002,38257],{"class":108},[102,45004,39280],{"class":119},[102,45006,39248],{"class":108},[102,45008,39285],{"class":119},[102,45010,45011,45013,45015,45017],{"class":104,"line":123},[102,45012,38602],{"class":108},[102,45014,41767],{"class":119},[102,45016,38257],{"class":108},[102,45018,41772],{"class":119},[102,45020,45021,45023,45025,45027],{"class":104,"line":130},[102,45022,38602],{"class":108},[102,45024,39263],{"class":119},[102,45026,38257],{"class":108},[102,45028,39268],{"class":119},[102,45030,45031],{"class":104,"line":136},[102,45032,41787],{"class":126},[102,45034,45035,45037,45039,45041],{"class":104,"line":142},[102,45036,38602],{"class":108},[102,45038,39233],{"class":119},[102,45040,38257],{"class":108},[102,45042,39238],{"class":119},[102,45044,45045,45047,45049,45051],{"class":104,"line":148},[102,45046,38602],{"class":108},[102,45048,39779],{"class":119},[102,45050,38257],{"class":108},[102,45052,43422],{"class":119},[102,45054,45055,45057,45060,45062],{"class":104,"line":157},[102,45056,38602],{"class":108},[102,45058,45059],{"class":119}," 练习.AlexNet.model ",[102,45061,38257],{"class":108},[102,45063,43422],{"class":119},[102,45065,45066],{"class":104,"line":163},[102,45067,652],{"emptyLinePlaceholder":651},[102,45069,45070],{"class":104,"line":175},[102,45071,652],{"emptyLinePlaceholder":651},[102,45073,45074],{"class":104,"line":181},[102,45075,41816],{"class":126},[102,45077,45078,45080,45082],{"class":104,"line":202},[102,45079,39812],{"class":108},[102,45081,41823],{"class":112},[102,45083,39818],{"class":119},[102,45085,45086,45088,45090,45092,45094,45096,45098],{"class":104,"line":208},[102,45087,41830],{"class":119},[102,45089,260],{"class":108},[102,45091,39320],{"class":119},[102,45093,39323],{"class":386},[102,45095,260],{"class":108},[102,45097,39328],{"class":278},[102,45099,39331],{"class":119},[102,45101,45102,45104,45106,45108],{"class":104,"line":214},[102,45103,41847],{"class":386},[102,45105,260],{"class":108},[102,45107,41852],{"class":187},[102,45109,39331],{"class":119},[102,45111,45112,45114,45116,45118,45120,45122,45124],{"class":104,"line":225},[102,45113,41859],{"class":386},[102,45115,260],{"class":108},[102,45117,39358],{"class":119},[102,45119,39361],{"class":386},[102,45121,260],{"class":108},[102,45123,43314],{"class":187},[102,45125,39369],{"class":119},[102,45127,45128,45130,45132,45134],{"class":104,"line":230},[102,45129,41876],{"class":386},[102,45131,260],{"class":108},[102,45133,39341],{"class":187},[102,45135,390],{"class":119},[102,45137,45138,45140,45142,45144,45146,45148],{"class":104,"line":236},[102,45139,41887],{"class":119},[102,45141,260],{"class":108},[102,45143,39399],{"class":119},[102,45145,39402],{"class":386},[102,45147,260],{"class":108},[102,45149,41898],{"class":119},[102,45151,45152],{"class":104,"line":242},[102,45153,41903],{"class":126},[102,45155,45156,45158,45160,45162],{"class":104,"line":248},[102,45157,41908],{"class":386},[102,45159,260],{"class":108},[102,45161,7039],{"class":187},[102,45163,39331],{"class":119},[102,45165,45166,45168,45170,45172],{"class":104,"line":254},[102,45167,41919],{"class":386},[102,45169,260],{"class":108},[102,45171,39341],{"class":187},[102,45173,39331],{"class":119},[102,45175,45176,45178,45180,45182],{"class":104,"line":269},[102,45177,41930],{"class":386},[102,45179,260],{"class":108},[102,45181,8423],{"class":187},[102,45183,390],{"class":119},[102,45185,45186,45188],{"class":104,"line":298},[102,45187,863],{"class":108},[102,45189,41943],{"class":119},[102,45191,45192],{"class":104,"line":502},[102,45193,652],{"emptyLinePlaceholder":651},[102,45195,45196],{"class":104,"line":507},[102,45197,41952],{"class":126},[102,45199,45200,45202,45204],{"class":104,"line":512},[102,45201,39812],{"class":108},[102,45203,41959],{"class":112},[102,45205,41962],{"class":119},[102,45207,45208],{"class":104,"line":521},[102,45209,41967],{"class":126},[102,45211,45212,45214,45216,45218,45220,45222,45224],{"class":104,"line":526},[102,45213,39102],{"class":119},[102,45215,260],{"class":108},[102,45217,39109],{"class":278},[102,45219,10565],{"class":108},[102,45221,39114],{"class":119},[102,45223,10562],{"class":108},[102,45225,41984],{"class":278},[102,45227,45228,45230,45232],{"class":104,"line":532},[102,45229,39154],{"class":119},[102,45231,260],{"class":108},[102,45233,40154],{"class":119},[102,45235,45236],{"class":104,"line":538},[102,45237,652],{"emptyLinePlaceholder":651},[102,45239,45240],{"class":104,"line":555},[102,45241,42001],{"class":126},[102,45243,45244,45246,45248],{"class":104,"line":570},[102,45245,42006],{"class":119},[102,45247,260],{"class":108},[102,45249,40207],{"class":187},[102,45251,45252,45254,45256],{"class":104,"line":581},[102,45253,42015],{"class":119},[102,45255,260],{"class":108},[102,45257,11901],{"class":187},[102,45259,45260],{"class":104,"line":819},[102,45261,652],{"emptyLinePlaceholder":651},[102,45263,45264],{"class":104,"line":828},[102,45265,42028],{"class":126},[102,45267,45268],{"class":104,"line":837},[102,45269,42033],{"class":126},[102,45271,45272],{"class":104,"line":842},[102,45273,42038],{"class":126},[102,45275,45276,45278],{"class":104,"line":855},[102,45277,42043],{"class":108},[102,45279,40749],{"class":119},[102,45281,45282],{"class":104,"line":860},[102,45283,42050],{"class":126},[102,45285,45286,45288,45290,45292],{"class":104,"line":871},[102,45287,12217],{"class":108},[102,45289,42057],{"class":119},[102,45291,33908],{"class":108},[102,45293,42062],{"class":119},[102,45295,45296,45298,45300],{"class":104,"line":1359},[102,45297,42067],{"class":119},[102,45299,260],{"class":108},[102,45301,42072],{"class":119},[102,45303,45304,45306,45308],{"class":104,"line":1368},[102,45305,42077],{"class":119},[102,45307,260],{"class":108},[102,45309,42082],{"class":119},[102,45311,45312],{"class":104,"line":1373},[102,45313,42087],{"class":126},[102,45315,45316],{"class":104,"line":1378},[102,45317,40740],{"class":119},[102,45319,45320],{"class":104,"line":1384},[102,45321,42096],{"class":126},[102,45323,45324,45326,45328],{"class":104,"line":1398},[102,45325,40525],{"class":119},[102,45327,260],{"class":108},[102,45329,42105],{"class":119},[102,45331,45332],{"class":104,"line":1424},[102,45333,42110],{"class":126},[102,45335,45336,45338,45340,45342,45344,45346,45348],{"class":104,"line":1429},[102,45337,40542],{"class":119},[102,45339,260],{"class":108},[102,45341,40547],{"class":119},[102,45343,40550],{"class":386},[102,45345,260],{"class":108},[102,45347,7039],{"class":187},[102,45349,390],{"class":119},[102,45351,45352],{"class":104,"line":1435},[102,45353,42131],{"class":126},[102,45355,45356],{"class":104,"line":1450},[102,45357,42136],{"class":126},[102,45359,45360],{"class":104,"line":1473},[102,45361,42141],{"class":126},[102,45363,45364,45366,45368,45370,45372],{"class":104,"line":1478},[102,45365,42146],{"class":119},[102,45367,18244],{"class":108},[102,45369,40652],{"class":119},[102,45371,1876],{"class":108},[102,45373,42155],{"class":119},[102,45375,45376],{"class":104,"line":1484},[102,45377,42160],{"class":126},[102,45379,45380,45382,45384,45386,45388],{"class":104,"line":1499},[102,45381,42165],{"class":119},[102,45383,18244],{"class":108},[102,45385,42170],{"class":119},[102,45387,8423],{"class":187},[102,45389,390],{"class":119},[102,45391,45392],{"class":104,"line":1508},[102,45393,652],{"emptyLinePlaceholder":651},[102,45395,45396],{"class":104,"line":1513},[102,45397,42183],{"class":126},[102,45399,45400,45402,45404,45406,45408],{"class":104,"line":1524},[102,45401,42188],{"class":119},[102,45403,260],{"class":108},[102,45405,42193],{"class":119},[102,45407,9611],{"class":108},[102,45409,42198],{"class":119},[102,45411,45412],{"class":104,"line":1529},[102,45413,42203],{"class":126},[102,45415,45416,45418,45420,45422],{"class":104,"line":1538},[102,45417,40316],{"class":187},[102,45419,380],{"class":119},[102,45421,42212],{"class":278},[102,45423,42215],{"class":119},[102,45425,45426],{"class":104,"line":2089},[102,45427,652],{"emptyLinePlaceholder":651},[102,45429,45430],{"class":104,"line":2094},[102,45431,42224],{"class":126},[102,45433,45434,45436,45438,45440,45442],{"class":104,"line":2100},[102,45435,10407],{"class":108},[102,45437,39085],{"class":187},[102,45439,1876],{"class":108},[102,45441,39090],{"class":278},[102,45443,12552],{"class":119},[102,45445,45446],{"class":104,"line":2106},[102,45447,42241],{"class":126},[102,45449,45450,45452,45454],{"class":104,"line":2120},[102,45451,39154],{"class":119},[102,45453,260],{"class":108},[102,45455,44954],{"class":119},[102,45457,45458],{"class":104,"line":2128},[102,45459,42254],{"class":126},[102,45461,45462],{"class":104,"line":2149},[102,45463,42259],{"class":126},[102,45465,45466,45468,45470],{"class":104,"line":2161},[102,45467,42264],{"class":119},[102,45469,42267],{"class":278},[102,45471,38362],{"class":119},[102,45473,45474],{"class":104,"line":2167},[102,45475,42274],{"class":126},[102,45477,45478,45480,45482],{"class":104,"line":2190},[102,45479,41887],{"class":119},[102,45481,260],{"class":108},[102,45483,42283],{"class":119},[102,45485,45486],{"class":104,"line":2196},[102,45487,42288],{"class":126},[102,45489,45490],{"class":104,"line":2219},[102,45491,42293],{"class":119},[102,45493,45494],{"class":104,"line":2233},[102,45495,652],{"emptyLinePlaceholder":651},[102,45497,45498],{"class":104,"line":2253},[102,45499,42302],{"class":126},[102,45501,45502],{"class":104,"line":2259},[102,45503,42307],{"class":126},[102,45505,45506,45508,45510,45512,45514,45516,45518],{"class":104,"line":2270},[102,45507,39102],{"class":119},[102,45509,260],{"class":108},[102,45511,39109],{"class":278},[102,45513,10565],{"class":108},[102,45515,39114],{"class":119},[102,45517,10562],{"class":108},[102,45519,41984],{"class":278},[102,45521,45522,45524,45526],{"class":104,"line":2293},[102,45523,39154],{"class":119},[102,45525,260],{"class":108},[102,45527,40154],{"class":119},[102,45529,45530],{"class":104,"line":2315},[102,45531,42336],{"class":126},[102,45533,45534],{"class":104,"line":2320},[102,45535,42341],{"class":126},[102,45537,45538,45540,45542,45544,45546,45548,45550,45552,45554,45556,45558,45560,45562,45564,45566,45568,45570,45572,45574,45576,45578,45580,45582],{"class":104,"line":2326},[102,45539,42346],{"class":119},[102,45541,260],{"class":108},[102,45543,9912],{"class":119},[102,45545,42353],{"class":278},[102,45547,1618],{"class":119},[102,45549,42358],{"class":278},[102,45551,1618],{"class":119},[102,45553,42363],{"class":278},[102,45555,1618],{"class":119},[102,45557,42368],{"class":278},[102,45559,1618],{"class":119},[102,45561,42373],{"class":278},[102,45563,1618],{"class":119},[102,45565,42378],{"class":278},[102,45567,1618],{"class":119},[102,45569,42383],{"class":278},[102,45571,1618],{"class":119},[102,45573,42388],{"class":278},[102,45575,1618],{"class":119},[102,45577,42393],{"class":278},[102,45579,1618],{"class":119},[102,45581,42398],{"class":278},[102,45583,41111],{"class":119},[102,45585,45586,45588],{"class":104,"line":2340},[102,45587,42043],{"class":108},[102,45589,40749],{"class":119},[102,45591,45592],{"class":104,"line":2354},[102,45593,42411],{"class":126},[102,45595,45596,45598,45600,45602],{"class":104,"line":2359},[102,45597,12217],{"class":108},[102,45599,42418],{"class":119},[102,45601,33908],{"class":108},[102,45603,42062],{"class":119},[102,45605,45606,45608,45610],{"class":104,"line":2373},[102,45607,40475],{"class":119},[102,45609,260],{"class":108},[102,45611,40480],{"class":119},[102,45613,45614,45616,45618],{"class":104,"line":2378},[102,45615,40490],{"class":119},[102,45617,260],{"class":108},[102,45619,40495],{"class":119},[102,45621,45622],{"class":104,"line":2384},[102,45623,652],{"emptyLinePlaceholder":651},[102,45625,45626],{"class":104,"line":2389},[102,45627,42447],{"class":126},[102,45629,45630],{"class":104,"line":2403},[102,45631,40740],{"class":119},[102,45633,45634],{"class":104,"line":2408},[102,45635,42456],{"class":126},[102,45637,45638,45640,45642],{"class":104,"line":2413},[102,45639,40525],{"class":119},[102,45641,260],{"class":108},[102,45643,40530],{"class":119},[102,45645,45646],{"class":104,"line":2427},[102,45647,42469],{"class":126},[102,45649,45650,45652,45654,45656,45658,45660,45662],{"class":104,"line":2440},[102,45651,40542],{"class":119},[102,45653,260],{"class":108},[102,45655,40547],{"class":119},[102,45657,40550],{"class":386},[102,45659,260],{"class":108},[102,45661,7039],{"class":187},[102,45663,390],{"class":119},[102,45665,45666],{"class":104,"line":2445},[102,45667,42490],{"class":126},[102,45669,45670,45672,45674],{"class":104,"line":2458},[102,45671,42495],{"class":119},[102,45673,260],{"class":108},[102,45675,42500],{"class":119},[102,45677,45678,45680,45682],{"class":104,"line":2463},[102,45679,42505],{"class":119},[102,45681,260],{"class":108},[102,45683,42510],{"class":119},[102,45685,45686,45688,45690,45692,45694,45696,45698,45700],{"class":104,"line":2468},[102,45687,42515],{"class":187},[102,45689,380],{"class":119},[102,45691,42520],{"class":278},[102,45693,42523],{"class":119},[102,45695,42526],{"class":278},[102,45697,1618],{"class":119},[102,45699,42531],{"class":278},[102,45701,42534],{"class":119},[48,45703,45705],{"id":45704},"_22vgg","2.2.VGG",[7601,45707,45709],{"id":45708},"_221原理","2.2.1.原理",[14,45711,45712],{},[6750,45713],{"alt":98,"src":45714},"\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",[14,45716,45717],{},[6750,45718],{"alt":98,"src":45719},"\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",[14,45721,45722],{},[6750,45723],{"alt":98,"src":45724},"\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",[14,45726,45727],{},"参数详细描述：",[14,45729,45730],{},[6750,45731],{"alt":98,"src":45732},"\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",[14,45734,45735],{},[6750,45736],{"alt":98,"src":45737},"\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",[14,45739,45740],{},[6750,45741],{"alt":98,"src":45742},"\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",[14,45744,45745],{},[6750,45746],{"alt":98,"src":45747},"\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",[14,45749,45750],{},[6750,45751],{"alt":98,"src":45752},"\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",[7601,45754,45756],{"id":45755},"_222代码实现","2.2.2.代码实现",[87,45758,45759],{},[62,45760,45761],{},"网络搭建",[93,45763,45765],{"className":38243,"code":45764,"language":38245,"meta":98,"style":98},"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",[83,45766,45767,45773,45785,45795,45805,45809,45826,45834,45853,45858,45863,45875,45913,45918,45954,45958,45987,45992,45997,46008,46044,46048,46084,46088,46116,46120,46125,46136,46172,46176,46212,46216,46252,46256,46284,46288,46293,46304,46341,46345,46381,46385,46421,46425,46453,46457,46462,46473,46509,46513,46549,46553,46589,46593,46621,46625,46630,46641,46646,46651,46656,46677,46681,46693,46697,46709,46713,46717,46722,46727,46742,46747,46757,46762,46777,46782,46801,46806,46815,46820,46830,46835,46840,46854,46859,46873,46881,46885,46889,46897,46908,46919,46930,46941,46952,46963,46969,46973,46978,46991,47011,47017,47026],{"__ignoreMap":98},[102,45768,45769,45771],{"class":104,"line":105},[102,45770,38257],{"class":108},[102,45772,38260],{"class":119},[102,45774,45775,45777,45780,45782],{"class":104,"line":116},[102,45776,38602],{"class":108},[102,45778,45779],{"class":119}," sympy.core.sympify ",[102,45781,38257],{"class":108},[102,45783,45784],{"class":119}," kernS\n",[102,45786,45787,45789,45791,45793],{"class":104,"line":123},[102,45788,38602],{"class":108},[102,45790,38605],{"class":119},[102,45792,38257],{"class":108},[102,45794,38610],{"class":119},[102,45796,45797,45799,45801,45803],{"class":104,"line":130},[102,45798,38602],{"class":108},[102,45800,38622],{"class":119},[102,45802,38257],{"class":108},[102,45804,38627],{"class":119},[102,45806,45807],{"class":104,"line":136},[102,45808,652],{"emptyLinePlaceholder":651},[102,45810,45811,45813,45816,45818,45820,45822,45824],{"class":104,"line":142},[102,45812,109],{"class":108},[102,45814,45815],{"class":112}," VGG16",[102,45817,380],{"class":119},[102,45819,38643],{"class":112},[102,45821,9585],{"class":119},[102,45823,38648],{"class":112},[102,45825,38651],{"class":119},[102,45827,45828,45830,45832],{"class":104,"line":148},[102,45829,38666],{"class":108},[102,45831,38669],{"class":187},[102,45833,38672],{"class":119},[102,45835,45836,45838,45840,45843,45845,45847,45849,45851],{"class":104,"line":157},[102,45837,38682],{"class":187},[102,45839,380],{"class":119},[102,45841,45842],{"class":187},"VGG16",[102,45844,2571],{"class":119},[102,45846,38688],{"class":187},[102,45848,38691],{"class":119},[102,45850,38694],{"class":187},[102,45852,172],{"class":119},[102,45854,45855],{"class":104,"line":163},[102,45856,45857],{"class":126},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[102,45859,45860],{"class":104,"line":175},[102,45861,45862],{"class":126},"        # 这里用的是灰度图\n",[102,45864,45865,45867,45870,45872],{"class":104,"line":181},[102,45866,38710],{"class":187},[102,45868,45869],{"class":119},".block1",[102,45871,260],{"class":108},[102,45873,45874],{"class":119},"nn.Sequential(\n",[102,45876,45877,45880,45882,45884,45886,45888,45890,45892,45894,45896,45898,45900,45902,45904,45906,45908,45910],{"class":104,"line":202},[102,45878,45879],{"class":119},"            nn.Conv2d(",[102,45881,38721],{"class":386},[102,45883,260],{"class":108},[102,45885,7039],{"class":187},[102,45887,1618],{"class":119},[102,45889,38730],{"class":386},[102,45891,260],{"class":108},[102,45893,9241],{"class":187},[102,45895,1618],{"class":119},[102,45897,38739],{"class":386},[102,45899,260],{"class":108},[102,45901,7049],{"class":187},[102,45903,1618],{"class":119},[102,45905,38748],{"class":386},[102,45907,260],{"class":108},[102,45909,7039],{"class":187},[102,45911,45912],{"class":119},"),\n",[102,45914,45915],{"class":104,"line":208},[102,45916,45917],{"class":119},"            nn.ReLU(),\n",[102,45919,45920,45922,45924,45926,45928,45930,45932,45934,45936,45938,45940,45942,45944,45946,45948,45950,45952],{"class":104,"line":214},[102,45921,45879],{"class":119},[102,45923,38721],{"class":386},[102,45925,260],{"class":108},[102,45927,9241],{"class":187},[102,45929,1618],{"class":119},[102,45931,38730],{"class":386},[102,45933,260],{"class":108},[102,45935,9241],{"class":187},[102,45937,1618],{"class":119},[102,45939,38739],{"class":386},[102,45941,260],{"class":108},[102,45943,7049],{"class":187},[102,45945,1618],{"class":119},[102,45947,38748],{"class":386},[102,45949,260],{"class":108},[102,45951,7039],{"class":187},[102,45953,45912],{"class":119},[102,45955,45956],{"class":104,"line":225},[102,45957,45917],{"class":119},[102,45959,45960,45963,45965,45967,45969,45971,45973,45975,45977,45979,45981,45983,45985],{"class":104,"line":230},[102,45961,45962],{"class":119},"            nn.MaxPool2d(",[102,45964,38739],{"class":386},[102,45966,260],{"class":108},[102,45968,7044],{"class":187},[102,45970,1618],{"class":119},[102,45972,38794],{"class":386},[102,45974,260],{"class":108},[102,45976,7044],{"class":187},[102,45978,1618],{"class":119},[102,45980,38748],{"class":386},[102,45982,260],{"class":108},[102,45984,8423],{"class":187},[102,45986,390],{"class":119},[102,45988,45989],{"class":104,"line":236},[102,45990,45991],{"class":119},"        )\n",[102,45993,45994],{"class":104,"line":242},[102,45995,45996],{"class":126},"        # 第二层\n",[102,45998,45999,46001,46004,46006],{"class":104,"line":248},[102,46000,38710],{"class":187},[102,46002,46003],{"class":119},".block2",[102,46005,260],{"class":108},[102,46007,45874],{"class":119},[102,46009,46010,46012,46014,46016,46018,46020,46022,46024,46026,46028,46030,46032,46034,46036,46038,46040,46042],{"class":104,"line":254},[102,46011,45879],{"class":119},[102,46013,38721],{"class":386},[102,46015,260],{"class":108},[102,46017,9241],{"class":187},[102,46019,1618],{"class":119},[102,46021,38730],{"class":386},[102,46023,260],{"class":108},[102,46025,39935],{"class":187},[102,46027,1618],{"class":119},[102,46029,38739],{"class":386},[102,46031,260],{"class":108},[102,46033,7049],{"class":187},[102,46035,1618],{"class":119},[102,46037,38748],{"class":386},[102,46039,260],{"class":108},[102,46041,7039],{"class":187},[102,46043,45912],{"class":119},[102,46045,46046],{"class":104,"line":269},[102,46047,45917],{"class":119},[102,46049,46050,46052,46054,46056,46058,46060,46062,46064,46066,46068,46070,46072,46074,46076,46078,46080,46082],{"class":104,"line":298},[102,46051,45879],{"class":119},[102,46053,38721],{"class":386},[102,46055,260],{"class":108},[102,46057,39935],{"class":187},[102,46059,1618],{"class":119},[102,46061,38730],{"class":386},[102,46063,260],{"class":108},[102,46065,39935],{"class":187},[102,46067,1618],{"class":119},[102,46069,38739],{"class":386},[102,46071,260],{"class":108},[102,46073,7049],{"class":187},[102,46075,1618],{"class":119},[102,46077,38748],{"class":386},[102,46079,260],{"class":108},[102,46081,7039],{"class":187},[102,46083,45912],{"class":119},[102,46085,46086],{"class":104,"line":502},[102,46087,45917],{"class":119},[102,46089,46090,46092,46094,46096,46098,46100,46102,46104,46106,46108,46110,46112,46114],{"class":104,"line":507},[102,46091,45962],{"class":119},[102,46093,38739],{"class":386},[102,46095,260],{"class":108},[102,46097,7044],{"class":187},[102,46099,1618],{"class":119},[102,46101,38794],{"class":386},[102,46103,260],{"class":108},[102,46105,7044],{"class":187},[102,46107,1618],{"class":119},[102,46109,38748],{"class":386},[102,46111,260],{"class":108},[102,46113,8423],{"class":187},[102,46115,390],{"class":119},[102,46117,46118],{"class":104,"line":512},[102,46119,45991],{"class":119},[102,46121,46122],{"class":104,"line":521},[102,46123,46124],{"class":126},"        # 第三层\n",[102,46126,46127,46129,46132,46134],{"class":104,"line":526},[102,46128,38710],{"class":187},[102,46130,46131],{"class":119},".block3",[102,46133,260],{"class":108},[102,46135,45874],{"class":119},[102,46137,46138,46140,46142,46144,46146,46148,46150,46152,46154,46156,46158,46160,46162,46164,46166,46168,46170],{"class":104,"line":532},[102,46139,45879],{"class":119},[102,46141,38721],{"class":386},[102,46143,260],{"class":108},[102,46145,39935],{"class":187},[102,46147,1618],{"class":119},[102,46149,38730],{"class":386},[102,46151,260],{"class":108},[102,46153,42735],{"class":187},[102,46155,1618],{"class":119},[102,46157,38739],{"class":386},[102,46159,260],{"class":108},[102,46161,7049],{"class":187},[102,46163,1618],{"class":119},[102,46165,38748],{"class":386},[102,46167,260],{"class":108},[102,46169,7039],{"class":187},[102,46171,45912],{"class":119},[102,46173,46174],{"class":104,"line":538},[102,46175,45917],{"class":119},[102,46177,46178,46180,46182,46184,46186,46188,46190,46192,46194,46196,46198,46200,46202,46204,46206,46208,46210],{"class":104,"line":555},[102,46179,45879],{"class":119},[102,46181,38721],{"class":386},[102,46183,260],{"class":108},[102,46185,42735],{"class":187},[102,46187,1618],{"class":119},[102,46189,38730],{"class":386},[102,46191,260],{"class":108},[102,46193,42735],{"class":187},[102,46195,1618],{"class":119},[102,46197,38739],{"class":386},[102,46199,260],{"class":108},[102,46201,7049],{"class":187},[102,46203,1618],{"class":119},[102,46205,38748],{"class":386},[102,46207,260],{"class":108},[102,46209,7039],{"class":187},[102,46211,45912],{"class":119},[102,46213,46214],{"class":104,"line":570},[102,46215,45917],{"class":119},[102,46217,46218,46220,46222,46224,46226,46228,46230,46232,46234,46236,46238,46240,46242,46244,46246,46248,46250],{"class":104,"line":581},[102,46219,45879],{"class":119},[102,46221,38721],{"class":386},[102,46223,260],{"class":108},[102,46225,42735],{"class":187},[102,46227,1618],{"class":119},[102,46229,38730],{"class":386},[102,46231,260],{"class":108},[102,46233,42735],{"class":187},[102,46235,1618],{"class":119},[102,46237,38739],{"class":386},[102,46239,260],{"class":108},[102,46241,7049],{"class":187},[102,46243,1618],{"class":119},[102,46245,38748],{"class":386},[102,46247,260],{"class":108},[102,46249,7039],{"class":187},[102,46251,45912],{"class":119},[102,46253,46254],{"class":104,"line":819},[102,46255,45917],{"class":119},[102,46257,46258,46260,46262,46264,46266,46268,46270,46272,46274,46276,46278,46280,46282],{"class":104,"line":828},[102,46259,45962],{"class":119},[102,46261,38739],{"class":386},[102,46263,260],{"class":108},[102,46265,7044],{"class":187},[102,46267,1618],{"class":119},[102,46269,38794],{"class":386},[102,46271,260],{"class":108},[102,46273,7044],{"class":187},[102,46275,1618],{"class":119},[102,46277,38748],{"class":386},[102,46279,260],{"class":108},[102,46281,8423],{"class":187},[102,46283,390],{"class":119},[102,46285,46286],{"class":104,"line":837},[102,46287,45991],{"class":119},[102,46289,46290],{"class":104,"line":842},[102,46291,46292],{"class":126},"        # 第四层\n",[102,46294,46295,46297,46300,46302],{"class":104,"line":855},[102,46296,38710],{"class":187},[102,46298,46299],{"class":119},".block4",[102,46301,260],{"class":108},[102,46303,45874],{"class":119},[102,46305,46306,46308,46310,46312,46314,46316,46318,46320,46323,46325,46327,46329,46331,46333,46335,46337,46339],{"class":104,"line":860},[102,46307,45879],{"class":119},[102,46309,38721],{"class":386},[102,46311,260],{"class":108},[102,46313,42735],{"class":187},[102,46315,1618],{"class":119},[102,46317,38730],{"class":386},[102,46319,260],{"class":108},[102,46321,46322],{"class":187},"512",[102,46324,1618],{"class":119},[102,46326,38739],{"class":386},[102,46328,260],{"class":108},[102,46330,7049],{"class":187},[102,46332,1618],{"class":119},[102,46334,38748],{"class":386},[102,46336,260],{"class":108},[102,46338,7039],{"class":187},[102,46340,45912],{"class":119},[102,46342,46343],{"class":104,"line":871},[102,46344,45917],{"class":119},[102,46346,46347,46349,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379],{"class":104,"line":1359},[102,46348,45879],{"class":119},[102,46350,38721],{"class":386},[102,46352,260],{"class":108},[102,46354,46322],{"class":187},[102,46356,1618],{"class":119},[102,46358,38730],{"class":386},[102,46360,260],{"class":108},[102,46362,46322],{"class":187},[102,46364,1618],{"class":119},[102,46366,38739],{"class":386},[102,46368,260],{"class":108},[102,46370,7049],{"class":187},[102,46372,1618],{"class":119},[102,46374,38748],{"class":386},[102,46376,260],{"class":108},[102,46378,7039],{"class":187},[102,46380,45912],{"class":119},[102,46382,46383],{"class":104,"line":1368},[102,46384,45917],{"class":119},[102,46386,46387,46389,46391,46393,46395,46397,46399,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419],{"class":104,"line":1373},[102,46388,45879],{"class":119},[102,46390,38721],{"class":386},[102,46392,260],{"class":108},[102,46394,46322],{"class":187},[102,46396,1618],{"class":119},[102,46398,38730],{"class":386},[102,46400,260],{"class":108},[102,46402,46322],{"class":187},[102,46404,1618],{"class":119},[102,46406,38739],{"class":386},[102,46408,260],{"class":108},[102,46410,7049],{"class":187},[102,46412,1618],{"class":119},[102,46414,38748],{"class":386},[102,46416,260],{"class":108},[102,46418,7039],{"class":187},[102,46420,45912],{"class":119},[102,46422,46423],{"class":104,"line":1378},[102,46424,45917],{"class":119},[102,46426,46427,46429,46431,46433,46435,46437,46439,46441,46443,46445,46447,46449,46451],{"class":104,"line":1384},[102,46428,45962],{"class":119},[102,46430,38739],{"class":386},[102,46432,260],{"class":108},[102,46434,7044],{"class":187},[102,46436,1618],{"class":119},[102,46438,38794],{"class":386},[102,46440,260],{"class":108},[102,46442,7044],{"class":187},[102,46444,1618],{"class":119},[102,46446,38748],{"class":386},[102,46448,260],{"class":108},[102,46450,8423],{"class":187},[102,46452,390],{"class":119},[102,46454,46455],{"class":104,"line":1398},[102,46456,45991],{"class":119},[102,46458,46459],{"class":104,"line":1424},[102,46460,46461],{"class":126},"        # 第五层\n",[102,46463,46464,46466,46469,46471],{"class":104,"line":1429},[102,46465,38710],{"class":187},[102,46467,46468],{"class":119},".block5",[102,46470,260],{"class":108},[102,46472,45874],{"class":119},[102,46474,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507],{"class":104,"line":1435},[102,46476,45879],{"class":119},[102,46478,38721],{"class":386},[102,46480,260],{"class":108},[102,46482,46322],{"class":187},[102,46484,1618],{"class":119},[102,46486,38730],{"class":386},[102,46488,260],{"class":108},[102,46490,46322],{"class":187},[102,46492,1618],{"class":119},[102,46494,38739],{"class":386},[102,46496,260],{"class":108},[102,46498,7049],{"class":187},[102,46500,1618],{"class":119},[102,46502,38748],{"class":386},[102,46504,260],{"class":108},[102,46506,7039],{"class":187},[102,46508,45912],{"class":119},[102,46510,46511],{"class":104,"line":1450},[102,46512,45917],{"class":119},[102,46514,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537,46539,46541,46543,46545,46547],{"class":104,"line":1473},[102,46516,45879],{"class":119},[102,46518,38721],{"class":386},[102,46520,260],{"class":108},[102,46522,46322],{"class":187},[102,46524,1618],{"class":119},[102,46526,38730],{"class":386},[102,46528,260],{"class":108},[102,46530,46322],{"class":187},[102,46532,1618],{"class":119},[102,46534,38739],{"class":386},[102,46536,260],{"class":108},[102,46538,7049],{"class":187},[102,46540,1618],{"class":119},[102,46542,38748],{"class":386},[102,46544,260],{"class":108},[102,46546,7039],{"class":187},[102,46548,45912],{"class":119},[102,46550,46551],{"class":104,"line":1478},[102,46552,45917],{"class":119},[102,46554,46555,46557,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587],{"class":104,"line":1484},[102,46556,45879],{"class":119},[102,46558,38721],{"class":386},[102,46560,260],{"class":108},[102,46562,46322],{"class":187},[102,46564,1618],{"class":119},[102,46566,38730],{"class":386},[102,46568,260],{"class":108},[102,46570,46322],{"class":187},[102,46572,1618],{"class":119},[102,46574,38739],{"class":386},[102,46576,260],{"class":108},[102,46578,7049],{"class":187},[102,46580,1618],{"class":119},[102,46582,38748],{"class":386},[102,46584,260],{"class":108},[102,46586,7039],{"class":187},[102,46588,45912],{"class":119},[102,46590,46591],{"class":104,"line":1499},[102,46592,45917],{"class":119},[102,46594,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613,46615,46617,46619],{"class":104,"line":1508},[102,46596,45962],{"class":119},[102,46598,38739],{"class":386},[102,46600,260],{"class":108},[102,46602,7044],{"class":187},[102,46604,1618],{"class":119},[102,46606,38794],{"class":386},[102,46608,260],{"class":108},[102,46610,7044],{"class":187},[102,46612,1618],{"class":119},[102,46614,38748],{"class":386},[102,46616,260],{"class":108},[102,46618,8423],{"class":187},[102,46620,390],{"class":119},[102,46622,46623],{"class":104,"line":1513},[102,46624,45991],{"class":119},[102,46626,46627],{"class":104,"line":1524},[102,46628,46629],{"class":126},"        # 全连接层\n",[102,46631,46632,46634,46637,46639],{"class":104,"line":1529},[102,46633,38710],{"class":187},[102,46635,46636],{"class":119},".block6",[102,46638,260],{"class":108},[102,46640,45874],{"class":119},[102,46642,46643],{"class":104,"line":1538},[102,46644,46645],{"class":126},"            # 平展操作\n",[102,46647,46648],{"class":104,"line":2089},[102,46649,46650],{"class":126},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[102,46652,46653],{"class":104,"line":2094},[102,46654,46655],{"class":119},"            nn.Flatten(),\n",[102,46657,46658,46661,46663,46665,46667,46669,46671,46673,46675],{"class":104,"line":2100},[102,46659,46660],{"class":119},"            nn.Linear(",[102,46662,9403],{"class":187},[102,46664,191],{"class":108},[102,46666,9403],{"class":187},[102,46668,191],{"class":108},[102,46670,46322],{"class":187},[102,46672,1618],{"class":119},[102,46674,42735],{"class":187},[102,46676,45912],{"class":119},[102,46678,46679],{"class":104,"line":2106},[102,46680,45917],{"class":119},[102,46682,46683,46685,46687,46689,46691],{"class":104,"line":2120},[102,46684,46660],{"class":119},[102,46686,42735],{"class":187},[102,46688,1618],{"class":119},[102,46690,39935],{"class":187},[102,46692,45912],{"class":119},[102,46694,46695],{"class":104,"line":2128},[102,46696,45917],{"class":119},[102,46698,46699,46701,46703,46705,46707],{"class":104,"line":2149},[102,46700,46660],{"class":119},[102,46702,39935],{"class":187},[102,46704,1618],{"class":119},[102,46706,263],{"class":187},[102,46708,390],{"class":119},[102,46710,46711],{"class":104,"line":2161},[102,46712,45991],{"class":119},[102,46714,46715],{"class":104,"line":2167},[102,46716,652],{"emptyLinePlaceholder":651},[102,46718,46719],{"class":104,"line":2190},[102,46720,46721],{"class":126},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[102,46723,46724],{"class":104,"line":2196},[102,46725,46726],{"class":126},"        # 循环遍历模型\n",[102,46728,46729,46731,46734,46736,46739],{"class":104,"line":2219},[102,46730,12217],{"class":108},[102,46732,46733],{"class":119}," m ",[102,46735,33908],{"class":108},[102,46737,46738],{"class":187}," self",[102,46740,46741],{"class":119},".modules():\n",[102,46743,46744],{"class":104,"line":2233},[102,46745,46746],{"class":126},"            # print(m)\n",[102,46748,46749,46751,46754],{"class":104,"line":2253},[102,46750,13451],{"class":108},[102,46752,46753],{"class":187}," isinstance",[102,46755,46756],{"class":119},"(m,nn.Conv2d):\n",[102,46758,46759],{"class":104,"line":2259},[102,46760,46761],{"class":126},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[102,46763,46764,46767,46770,46772,46775],{"class":104,"line":2270},[102,46765,46766],{"class":119},"                nn.init.kaiming_normal_(m.weight,",[102,46768,46769],{"class":386},"nonlinearity",[102,46771,260],{"class":108},[102,46773,46774],{"class":278},"'relu'",[102,46776,390],{"class":119},[102,46778,46779],{"class":104,"line":2293},[102,46780,46781],{"class":126},"                # 判断b参数是否存在\n",[102,46783,46784,46787,46790,46793,46796,46799],{"class":104,"line":2315},[102,46785,46786],{"class":108},"                if",[102,46788,46789],{"class":119}," m.bias ",[102,46791,46792],{"class":108},"is",[102,46794,46795],{"class":108}," not",[102,46797,46798],{"class":187}," None",[102,46800,12552],{"class":119},[102,46802,46803],{"class":104,"line":2320},[102,46804,46805],{"class":126},"                    # 如果参数不存在的化初始化b=0\n",[102,46807,46808,46811,46813],{"class":104,"line":2326},[102,46809,46810],{"class":119},"                    nn.init.constant_(m.bias,",[102,46812,8423],{"class":187},[102,46814,390],{"class":119},[102,46816,46817],{"class":104,"line":2340},[102,46818,46819],{"class":126},"            # 全连接层初始化\n",[102,46821,46822,46825,46827],{"class":104,"line":2354},[102,46823,46824],{"class":108},"            elif",[102,46826,46753],{"class":187},[102,46828,46829],{"class":119},"(m,nn.Linear):\n",[102,46831,46832],{"class":104,"line":2359},[102,46833,46834],{"class":126},"                # 这个初始化方法是利用的是正太分布的方式\n",[102,46836,46837],{"class":104,"line":2373},[102,46838,46839],{"class":126},"                # 均值为0，方差为0.01\n",[102,46841,46842,46845,46847,46849,46852],{"class":104,"line":2378},[102,46843,46844],{"class":119},"                nn.init.normal_(m.weight,",[102,46846,8423],{"class":187},[102,46848,1618],{"class":119},[102,46850,46851],{"class":187},"0.01",[102,46853,390],{"class":119},[102,46855,46856],{"class":104,"line":2384},[102,46857,46858],{"class":126},"                # 初始化b参数\n",[102,46860,46861,46863,46865,46867,46869,46871],{"class":104,"line":2389},[102,46862,46786],{"class":108},[102,46864,46789],{"class":119},[102,46866,46792],{"class":108},[102,46868,46795],{"class":108},[102,46870,46798],{"class":187},[102,46872,12552],{"class":119},[102,46874,46875,46877,46879],{"class":104,"line":2403},[102,46876,46810],{"class":119},[102,46878,8423],{"class":187},[102,46880,390],{"class":119},[102,46882,46883],{"class":104,"line":2408},[102,46884,652],{"emptyLinePlaceholder":651},[102,46886,46887],{"class":104,"line":2413},[102,46888,43030],{"class":126},[102,46890,46891,46893,46895],{"class":104,"line":2427},[102,46892,38666],{"class":108},[102,46894,38958],{"class":112},[102,46896,38961],{"class":119},[102,46898,46899,46901,46903,46905],{"class":104,"line":2440},[102,46900,38966],{"class":119},[102,46902,260],{"class":108},[102,46904,38688],{"class":187},[102,46906,46907],{"class":119},".block1(x)\n",[102,46909,46910,46912,46914,46916],{"class":104,"line":2445},[102,46911,38966],{"class":119},[102,46913,260],{"class":108},[102,46915,38688],{"class":187},[102,46917,46918],{"class":119},".block2(x)\n",[102,46920,46921,46923,46925,46927],{"class":104,"line":2458},[102,46922,38966],{"class":119},[102,46924,260],{"class":108},[102,46926,38688],{"class":187},[102,46928,46929],{"class":119},".block3(x)\n",[102,46931,46932,46934,46936,46938],{"class":104,"line":2463},[102,46933,38966],{"class":119},[102,46935,260],{"class":108},[102,46937,38688],{"class":187},[102,46939,46940],{"class":119},".block4(x)\n",[102,46942,46943,46945,46947,46949],{"class":104,"line":2468},[102,46944,38966],{"class":119},[102,46946,260],{"class":108},[102,46948,38688],{"class":187},[102,46950,46951],{"class":119},".block5(x)\n",[102,46953,46954,46956,46958,46960],{"class":104,"line":2473},[102,46955,38966],{"class":119},[102,46957,260],{"class":108},[102,46959,38688],{"class":187},[102,46961,46962],{"class":119},".block6(x)\n",[102,46964,46965,46967],{"class":104,"line":2486},[102,46966,184],{"class":108},[102,46968,39074],{"class":119},[102,46970,46971],{"class":104,"line":2491},[102,46972,652],{"emptyLinePlaceholder":651},[102,46974,46975],{"class":104,"line":40498},[102,46976,46977],{"class":126},"# 验证模型\n",[102,46979,46980,46982,46984,46986,46989],{"class":104,"line":40504},[102,46981,10407],{"class":108},[102,46983,39085],{"class":187},[102,46985,1876],{"class":108},[102,46987,46988],{"class":278},"'__main__'",[102,46990,12552],{"class":119},[102,46992,46993,46995,46997,46999,47001,47003,47005,47007,47009],{"class":104,"line":40510},[102,46994,39102],{"class":119},[102,46996,260],{"class":108},[102,46998,38316],{"class":119},[102,47000,39109],{"class":278},[102,47002,10565],{"class":108},[102,47004,39114],{"class":119},[102,47006,10562],{"class":108},[102,47008,38341],{"class":278},[102,47010,390],{"class":119},[102,47012,47013,47015],{"class":104,"line":40516},[102,47014,39164],{"class":187},[102,47016,38350],{"class":119},[102,47018,47019,47021,47023],{"class":104,"line":40522},[102,47020,39154],{"class":119},[102,47022,260],{"class":108},[102,47024,47025],{"class":119},"VGG16().to(device)\n",[102,47027,47028,47030,47032,47034,47036,47038,47040,47042],{"class":104,"line":40533},[102,47029,39164],{"class":187},[102,47031,39167],{"class":119},[102,47033,7039],{"class":187},[102,47035,1618],{"class":119},[102,47037,39366],{"class":187},[102,47039,1618],{"class":119},[102,47041,39366],{"class":187},[102,47043,39180],{"class":119},[87,47045,47046],{"start":116},[62,47047,47048],{},"训练代码",[14,47050,47051],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,47053,47054],{},"解决方式:",[14,47056,47057],{},"①权重初始化",[93,47059,47061],{"className":38243,"code":47060,"language":38245,"meta":98,"style":98},"# 权重初始化,保证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",[83,47062,47063,47068,47073,47085,47090,47098,47103,47116,47121,47135,47140,47149,47154,47163,47168,47173,47186,47191,47205],{"__ignoreMap":98},[102,47064,47065],{"class":104,"line":105},[102,47066,47067],{"class":126},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[102,47069,47070],{"class":104,"line":116},[102,47071,47072],{"class":126},"# 循环遍历模型\n",[102,47074,47075,47077,47079,47081,47083],{"class":104,"line":123},[102,47076,11841],{"class":108},[102,47078,46733],{"class":119},[102,47080,33908],{"class":108},[102,47082,46738],{"class":187},[102,47084,46741],{"class":119},[102,47086,47087],{"class":104,"line":130},[102,47088,47089],{"class":126},"    # print(m)\n",[102,47091,47092,47094,47096],{"class":104,"line":136},[102,47093,2343],{"class":108},[102,47095,46753],{"class":187},[102,47097,46756],{"class":119},[102,47099,47100],{"class":104,"line":142},[102,47101,47102],{"class":126},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[102,47104,47105,47108,47110,47112,47114],{"class":104,"line":148},[102,47106,47107],{"class":119},"        nn.init.kaiming_normal_(m.weight,",[102,47109,46769],{"class":386},[102,47111,260],{"class":108},[102,47113,46774],{"class":278},[102,47115,390],{"class":119},[102,47117,47118],{"class":104,"line":157},[102,47119,47120],{"class":126},"        # 判断b参数是否存在\n",[102,47122,47123,47125,47127,47129,47131,47133],{"class":104,"line":163},[102,47124,1202],{"class":108},[102,47126,46789],{"class":119},[102,47128,46792],{"class":108},[102,47130,46795],{"class":108},[102,47132,46798],{"class":187},[102,47134,12552],{"class":119},[102,47136,47137],{"class":104,"line":175},[102,47138,47139],{"class":126},"            # 如果参数不存在的化初始化b=0\n",[102,47141,47142,47145,47147],{"class":104,"line":181},[102,47143,47144],{"class":119},"            nn.init.constant_(m.bias,",[102,47146,8423],{"class":187},[102,47148,390],{"class":119},[102,47150,47151],{"class":104,"line":202},[102,47152,47153],{"class":126},"    # 全连接层初始化\n",[102,47155,47156,47159,47161],{"class":104,"line":208},[102,47157,47158],{"class":108},"    elif",[102,47160,46753],{"class":187},[102,47162,46829],{"class":119},[102,47164,47165],{"class":104,"line":214},[102,47166,47167],{"class":126},"        # 这个初始化方法是利用的是正太分布的方式\n",[102,47169,47170],{"class":104,"line":225},[102,47171,47172],{"class":126},"        # 均值为0，方差为0.01\n",[102,47174,47175,47178,47180,47182,47184],{"class":104,"line":230},[102,47176,47177],{"class":119},"        nn.init.normal_(m.weight,",[102,47179,8423],{"class":187},[102,47181,1618],{"class":119},[102,47183,46851],{"class":187},[102,47185,390],{"class":119},[102,47187,47188],{"class":104,"line":236},[102,47189,47190],{"class":126},"        # 初始化b参数\n",[102,47192,47193,47195,47197,47199,47201,47203],{"class":104,"line":242},[102,47194,1202],{"class":108},[102,47196,46789],{"class":119},[102,47198,46792],{"class":108},[102,47200,46795],{"class":108},[102,47202,46798],{"class":187},[102,47204,12552],{"class":119},[102,47206,47207,47209,47211],{"class":104,"line":248},[102,47208,47144],{"class":119},[102,47210,8423],{"class":187},[102,47212,390],{"class":119},[14,47214,47215],{},"②尽可能地增加批次",[14,47217,47218],{},"训练完整代码：",[93,47220,47221],{"className":38243,"code":45764,"language":38245,"meta":98,"style":98},[83,47222,47223,47229,47239,47249,47259,47263,47279,47287,47305,47309,47313,47323,47359,47363,47399,47403,47431,47435,47439,47449,47485,47489,47525,47529,47557,47561,47565,47575,47611,47615,47651,47655,47691,47695,47723,47727,47731,47741,47777,47781,47817,47821,47857,47861,47889,47893,47897,47907,47943,47947,47983,47987,48023,48027,48055,48059,48063,48073,48077,48081,48085,48105,48109,48121,48125,48137,48141,48145,48149,48153,48165,48169,48177,48181,48193,48197,48211,48215,48223,48227,48235,48239,48243,48255,48259,48273,48281,48285,48289,48297,48307,48317,48327,48337,48347,48357,48363,48367,48371,48383,48403,48409,48417],{"__ignoreMap":98},[102,47224,47225,47227],{"class":104,"line":105},[102,47226,38257],{"class":108},[102,47228,38260],{"class":119},[102,47230,47231,47233,47235,47237],{"class":104,"line":116},[102,47232,38602],{"class":108},[102,47234,45779],{"class":119},[102,47236,38257],{"class":108},[102,47238,45784],{"class":119},[102,47240,47241,47243,47245,47247],{"class":104,"line":123},[102,47242,38602],{"class":108},[102,47244,38605],{"class":119},[102,47246,38257],{"class":108},[102,47248,38610],{"class":119},[102,47250,47251,47253,47255,47257],{"class":104,"line":130},[102,47252,38602],{"class":108},[102,47254,38622],{"class":119},[102,47256,38257],{"class":108},[102,47258,38627],{"class":119},[102,47260,47261],{"class":104,"line":136},[102,47262,652],{"emptyLinePlaceholder":651},[102,47264,47265,47267,47269,47271,47273,47275,47277],{"class":104,"line":142},[102,47266,109],{"class":108},[102,47268,45815],{"class":112},[102,47270,380],{"class":119},[102,47272,38643],{"class":112},[102,47274,9585],{"class":119},[102,47276,38648],{"class":112},[102,47278,38651],{"class":119},[102,47280,47281,47283,47285],{"class":104,"line":148},[102,47282,38666],{"class":108},[102,47284,38669],{"class":187},[102,47286,38672],{"class":119},[102,47288,47289,47291,47293,47295,47297,47299,47301,47303],{"class":104,"line":157},[102,47290,38682],{"class":187},[102,47292,380],{"class":119},[102,47294,45842],{"class":187},[102,47296,2571],{"class":119},[102,47298,38688],{"class":187},[102,47300,38691],{"class":119},[102,47302,38694],{"class":187},[102,47304,172],{"class":119},[102,47306,47307],{"class":104,"line":163},[102,47308,45857],{"class":126},[102,47310,47311],{"class":104,"line":175},[102,47312,45862],{"class":126},[102,47314,47315,47317,47319,47321],{"class":104,"line":181},[102,47316,38710],{"class":187},[102,47318,45869],{"class":119},[102,47320,260],{"class":108},[102,47322,45874],{"class":119},[102,47324,47325,47327,47329,47331,47333,47335,47337,47339,47341,47343,47345,47347,47349,47351,47353,47355,47357],{"class":104,"line":202},[102,47326,45879],{"class":119},[102,47328,38721],{"class":386},[102,47330,260],{"class":108},[102,47332,7039],{"class":187},[102,47334,1618],{"class":119},[102,47336,38730],{"class":386},[102,47338,260],{"class":108},[102,47340,9241],{"class":187},[102,47342,1618],{"class":119},[102,47344,38739],{"class":386},[102,47346,260],{"class":108},[102,47348,7049],{"class":187},[102,47350,1618],{"class":119},[102,47352,38748],{"class":386},[102,47354,260],{"class":108},[102,47356,7039],{"class":187},[102,47358,45912],{"class":119},[102,47360,47361],{"class":104,"line":208},[102,47362,45917],{"class":119},[102,47364,47365,47367,47369,47371,47373,47375,47377,47379,47381,47383,47385,47387,47389,47391,47393,47395,47397],{"class":104,"line":214},[102,47366,45879],{"class":119},[102,47368,38721],{"class":386},[102,47370,260],{"class":108},[102,47372,9241],{"class":187},[102,47374,1618],{"class":119},[102,47376,38730],{"class":386},[102,47378,260],{"class":108},[102,47380,9241],{"class":187},[102,47382,1618],{"class":119},[102,47384,38739],{"class":386},[102,47386,260],{"class":108},[102,47388,7049],{"class":187},[102,47390,1618],{"class":119},[102,47392,38748],{"class":386},[102,47394,260],{"class":108},[102,47396,7039],{"class":187},[102,47398,45912],{"class":119},[102,47400,47401],{"class":104,"line":225},[102,47402,45917],{"class":119},[102,47404,47405,47407,47409,47411,47413,47415,47417,47419,47421,47423,47425,47427,47429],{"class":104,"line":230},[102,47406,45962],{"class":119},[102,47408,38739],{"class":386},[102,47410,260],{"class":108},[102,47412,7044],{"class":187},[102,47414,1618],{"class":119},[102,47416,38794],{"class":386},[102,47418,260],{"class":108},[102,47420,7044],{"class":187},[102,47422,1618],{"class":119},[102,47424,38748],{"class":386},[102,47426,260],{"class":108},[102,47428,8423],{"class":187},[102,47430,390],{"class":119},[102,47432,47433],{"class":104,"line":236},[102,47434,45991],{"class":119},[102,47436,47437],{"class":104,"line":242},[102,47438,45996],{"class":126},[102,47440,47441,47443,47445,47447],{"class":104,"line":248},[102,47442,38710],{"class":187},[102,47444,46003],{"class":119},[102,47446,260],{"class":108},[102,47448,45874],{"class":119},[102,47450,47451,47453,47455,47457,47459,47461,47463,47465,47467,47469,47471,47473,47475,47477,47479,47481,47483],{"class":104,"line":254},[102,47452,45879],{"class":119},[102,47454,38721],{"class":386},[102,47456,260],{"class":108},[102,47458,9241],{"class":187},[102,47460,1618],{"class":119},[102,47462,38730],{"class":386},[102,47464,260],{"class":108},[102,47466,39935],{"class":187},[102,47468,1618],{"class":119},[102,47470,38739],{"class":386},[102,47472,260],{"class":108},[102,47474,7049],{"class":187},[102,47476,1618],{"class":119},[102,47478,38748],{"class":386},[102,47480,260],{"class":108},[102,47482,7039],{"class":187},[102,47484,45912],{"class":119},[102,47486,47487],{"class":104,"line":269},[102,47488,45917],{"class":119},[102,47490,47491,47493,47495,47497,47499,47501,47503,47505,47507,47509,47511,47513,47515,47517,47519,47521,47523],{"class":104,"line":298},[102,47492,45879],{"class":119},[102,47494,38721],{"class":386},[102,47496,260],{"class":108},[102,47498,39935],{"class":187},[102,47500,1618],{"class":119},[102,47502,38730],{"class":386},[102,47504,260],{"class":108},[102,47506,39935],{"class":187},[102,47508,1618],{"class":119},[102,47510,38739],{"class":386},[102,47512,260],{"class":108},[102,47514,7049],{"class":187},[102,47516,1618],{"class":119},[102,47518,38748],{"class":386},[102,47520,260],{"class":108},[102,47522,7039],{"class":187},[102,47524,45912],{"class":119},[102,47526,47527],{"class":104,"line":502},[102,47528,45917],{"class":119},[102,47530,47531,47533,47535,47537,47539,47541,47543,47545,47547,47549,47551,47553,47555],{"class":104,"line":507},[102,47532,45962],{"class":119},[102,47534,38739],{"class":386},[102,47536,260],{"class":108},[102,47538,7044],{"class":187},[102,47540,1618],{"class":119},[102,47542,38794],{"class":386},[102,47544,260],{"class":108},[102,47546,7044],{"class":187},[102,47548,1618],{"class":119},[102,47550,38748],{"class":386},[102,47552,260],{"class":108},[102,47554,8423],{"class":187},[102,47556,390],{"class":119},[102,47558,47559],{"class":104,"line":512},[102,47560,45991],{"class":119},[102,47562,47563],{"class":104,"line":521},[102,47564,46124],{"class":126},[102,47566,47567,47569,47571,47573],{"class":104,"line":526},[102,47568,38710],{"class":187},[102,47570,46131],{"class":119},[102,47572,260],{"class":108},[102,47574,45874],{"class":119},[102,47576,47577,47579,47581,47583,47585,47587,47589,47591,47593,47595,47597,47599,47601,47603,47605,47607,47609],{"class":104,"line":532},[102,47578,45879],{"class":119},[102,47580,38721],{"class":386},[102,47582,260],{"class":108},[102,47584,39935],{"class":187},[102,47586,1618],{"class":119},[102,47588,38730],{"class":386},[102,47590,260],{"class":108},[102,47592,42735],{"class":187},[102,47594,1618],{"class":119},[102,47596,38739],{"class":386},[102,47598,260],{"class":108},[102,47600,7049],{"class":187},[102,47602,1618],{"class":119},[102,47604,38748],{"class":386},[102,47606,260],{"class":108},[102,47608,7039],{"class":187},[102,47610,45912],{"class":119},[102,47612,47613],{"class":104,"line":538},[102,47614,45917],{"class":119},[102,47616,47617,47619,47621,47623,47625,47627,47629,47631,47633,47635,47637,47639,47641,47643,47645,47647,47649],{"class":104,"line":555},[102,47618,45879],{"class":119},[102,47620,38721],{"class":386},[102,47622,260],{"class":108},[102,47624,42735],{"class":187},[102,47626,1618],{"class":119},[102,47628,38730],{"class":386},[102,47630,260],{"class":108},[102,47632,42735],{"class":187},[102,47634,1618],{"class":119},[102,47636,38739],{"class":386},[102,47638,260],{"class":108},[102,47640,7049],{"class":187},[102,47642,1618],{"class":119},[102,47644,38748],{"class":386},[102,47646,260],{"class":108},[102,47648,7039],{"class":187},[102,47650,45912],{"class":119},[102,47652,47653],{"class":104,"line":570},[102,47654,45917],{"class":119},[102,47656,47657,47659,47661,47663,47665,47667,47669,47671,47673,47675,47677,47679,47681,47683,47685,47687,47689],{"class":104,"line":581},[102,47658,45879],{"class":119},[102,47660,38721],{"class":386},[102,47662,260],{"class":108},[102,47664,42735],{"class":187},[102,47666,1618],{"class":119},[102,47668,38730],{"class":386},[102,47670,260],{"class":108},[102,47672,42735],{"class":187},[102,47674,1618],{"class":119},[102,47676,38739],{"class":386},[102,47678,260],{"class":108},[102,47680,7049],{"class":187},[102,47682,1618],{"class":119},[102,47684,38748],{"class":386},[102,47686,260],{"class":108},[102,47688,7039],{"class":187},[102,47690,45912],{"class":119},[102,47692,47693],{"class":104,"line":819},[102,47694,45917],{"class":119},[102,47696,47697,47699,47701,47703,47705,47707,47709,47711,47713,47715,47717,47719,47721],{"class":104,"line":828},[102,47698,45962],{"class":119},[102,47700,38739],{"class":386},[102,47702,260],{"class":108},[102,47704,7044],{"class":187},[102,47706,1618],{"class":119},[102,47708,38794],{"class":386},[102,47710,260],{"class":108},[102,47712,7044],{"class":187},[102,47714,1618],{"class":119},[102,47716,38748],{"class":386},[102,47718,260],{"class":108},[102,47720,8423],{"class":187},[102,47722,390],{"class":119},[102,47724,47725],{"class":104,"line":837},[102,47726,45991],{"class":119},[102,47728,47729],{"class":104,"line":842},[102,47730,46292],{"class":126},[102,47732,47733,47735,47737,47739],{"class":104,"line":855},[102,47734,38710],{"class":187},[102,47736,46299],{"class":119},[102,47738,260],{"class":108},[102,47740,45874],{"class":119},[102,47742,47743,47745,47747,47749,47751,47753,47755,47757,47759,47761,47763,47765,47767,47769,47771,47773,47775],{"class":104,"line":860},[102,47744,45879],{"class":119},[102,47746,38721],{"class":386},[102,47748,260],{"class":108},[102,47750,42735],{"class":187},[102,47752,1618],{"class":119},[102,47754,38730],{"class":386},[102,47756,260],{"class":108},[102,47758,46322],{"class":187},[102,47760,1618],{"class":119},[102,47762,38739],{"class":386},[102,47764,260],{"class":108},[102,47766,7049],{"class":187},[102,47768,1618],{"class":119},[102,47770,38748],{"class":386},[102,47772,260],{"class":108},[102,47774,7039],{"class":187},[102,47776,45912],{"class":119},[102,47778,47779],{"class":104,"line":871},[102,47780,45917],{"class":119},[102,47782,47783,47785,47787,47789,47791,47793,47795,47797,47799,47801,47803,47805,47807,47809,47811,47813,47815],{"class":104,"line":1359},[102,47784,45879],{"class":119},[102,47786,38721],{"class":386},[102,47788,260],{"class":108},[102,47790,46322],{"class":187},[102,47792,1618],{"class":119},[102,47794,38730],{"class":386},[102,47796,260],{"class":108},[102,47798,46322],{"class":187},[102,47800,1618],{"class":119},[102,47802,38739],{"class":386},[102,47804,260],{"class":108},[102,47806,7049],{"class":187},[102,47808,1618],{"class":119},[102,47810,38748],{"class":386},[102,47812,260],{"class":108},[102,47814,7039],{"class":187},[102,47816,45912],{"class":119},[102,47818,47819],{"class":104,"line":1368},[102,47820,45917],{"class":119},[102,47822,47823,47825,47827,47829,47831,47833,47835,47837,47839,47841,47843,47845,47847,47849,47851,47853,47855],{"class":104,"line":1373},[102,47824,45879],{"class":119},[102,47826,38721],{"class":386},[102,47828,260],{"class":108},[102,47830,46322],{"class":187},[102,47832,1618],{"class":119},[102,47834,38730],{"class":386},[102,47836,260],{"class":108},[102,47838,46322],{"class":187},[102,47840,1618],{"class":119},[102,47842,38739],{"class":386},[102,47844,260],{"class":108},[102,47846,7049],{"class":187},[102,47848,1618],{"class":119},[102,47850,38748],{"class":386},[102,47852,260],{"class":108},[102,47854,7039],{"class":187},[102,47856,45912],{"class":119},[102,47858,47859],{"class":104,"line":1378},[102,47860,45917],{"class":119},[102,47862,47863,47865,47867,47869,47871,47873,47875,47877,47879,47881,47883,47885,47887],{"class":104,"line":1384},[102,47864,45962],{"class":119},[102,47866,38739],{"class":386},[102,47868,260],{"class":108},[102,47870,7044],{"class":187},[102,47872,1618],{"class":119},[102,47874,38794],{"class":386},[102,47876,260],{"class":108},[102,47878,7044],{"class":187},[102,47880,1618],{"class":119},[102,47882,38748],{"class":386},[102,47884,260],{"class":108},[102,47886,8423],{"class":187},[102,47888,390],{"class":119},[102,47890,47891],{"class":104,"line":1398},[102,47892,45991],{"class":119},[102,47894,47895],{"class":104,"line":1424},[102,47896,46461],{"class":126},[102,47898,47899,47901,47903,47905],{"class":104,"line":1429},[102,47900,38710],{"class":187},[102,47902,46468],{"class":119},[102,47904,260],{"class":108},[102,47906,45874],{"class":119},[102,47908,47909,47911,47913,47915,47917,47919,47921,47923,47925,47927,47929,47931,47933,47935,47937,47939,47941],{"class":104,"line":1435},[102,47910,45879],{"class":119},[102,47912,38721],{"class":386},[102,47914,260],{"class":108},[102,47916,46322],{"class":187},[102,47918,1618],{"class":119},[102,47920,38730],{"class":386},[102,47922,260],{"class":108},[102,47924,46322],{"class":187},[102,47926,1618],{"class":119},[102,47928,38739],{"class":386},[102,47930,260],{"class":108},[102,47932,7049],{"class":187},[102,47934,1618],{"class":119},[102,47936,38748],{"class":386},[102,47938,260],{"class":108},[102,47940,7039],{"class":187},[102,47942,45912],{"class":119},[102,47944,47945],{"class":104,"line":1450},[102,47946,45917],{"class":119},[102,47948,47949,47951,47953,47955,47957,47959,47961,47963,47965,47967,47969,47971,47973,47975,47977,47979,47981],{"class":104,"line":1473},[102,47950,45879],{"class":119},[102,47952,38721],{"class":386},[102,47954,260],{"class":108},[102,47956,46322],{"class":187},[102,47958,1618],{"class":119},[102,47960,38730],{"class":386},[102,47962,260],{"class":108},[102,47964,46322],{"class":187},[102,47966,1618],{"class":119},[102,47968,38739],{"class":386},[102,47970,260],{"class":108},[102,47972,7049],{"class":187},[102,47974,1618],{"class":119},[102,47976,38748],{"class":386},[102,47978,260],{"class":108},[102,47980,7039],{"class":187},[102,47982,45912],{"class":119},[102,47984,47985],{"class":104,"line":1478},[102,47986,45917],{"class":119},[102,47988,47989,47991,47993,47995,47997,47999,48001,48003,48005,48007,48009,48011,48013,48015,48017,48019,48021],{"class":104,"line":1484},[102,47990,45879],{"class":119},[102,47992,38721],{"class":386},[102,47994,260],{"class":108},[102,47996,46322],{"class":187},[102,47998,1618],{"class":119},[102,48000,38730],{"class":386},[102,48002,260],{"class":108},[102,48004,46322],{"class":187},[102,48006,1618],{"class":119},[102,48008,38739],{"class":386},[102,48010,260],{"class":108},[102,48012,7049],{"class":187},[102,48014,1618],{"class":119},[102,48016,38748],{"class":386},[102,48018,260],{"class":108},[102,48020,7039],{"class":187},[102,48022,45912],{"class":119},[102,48024,48025],{"class":104,"line":1499},[102,48026,45917],{"class":119},[102,48028,48029,48031,48033,48035,48037,48039,48041,48043,48045,48047,48049,48051,48053],{"class":104,"line":1508},[102,48030,45962],{"class":119},[102,48032,38739],{"class":386},[102,48034,260],{"class":108},[102,48036,7044],{"class":187},[102,48038,1618],{"class":119},[102,48040,38794],{"class":386},[102,48042,260],{"class":108},[102,48044,7044],{"class":187},[102,48046,1618],{"class":119},[102,48048,38748],{"class":386},[102,48050,260],{"class":108},[102,48052,8423],{"class":187},[102,48054,390],{"class":119},[102,48056,48057],{"class":104,"line":1513},[102,48058,45991],{"class":119},[102,48060,48061],{"class":104,"line":1524},[102,48062,46629],{"class":126},[102,48064,48065,48067,48069,48071],{"class":104,"line":1529},[102,48066,38710],{"class":187},[102,48068,46636],{"class":119},[102,48070,260],{"class":108},[102,48072,45874],{"class":119},[102,48074,48075],{"class":104,"line":1538},[102,48076,46645],{"class":126},[102,48078,48079],{"class":104,"line":2089},[102,48080,46650],{"class":126},[102,48082,48083],{"class":104,"line":2094},[102,48084,46655],{"class":119},[102,48086,48087,48089,48091,48093,48095,48097,48099,48101,48103],{"class":104,"line":2100},[102,48088,46660],{"class":119},[102,48090,9403],{"class":187},[102,48092,191],{"class":108},[102,48094,9403],{"class":187},[102,48096,191],{"class":108},[102,48098,46322],{"class":187},[102,48100,1618],{"class":119},[102,48102,42735],{"class":187},[102,48104,45912],{"class":119},[102,48106,48107],{"class":104,"line":2106},[102,48108,45917],{"class":119},[102,48110,48111,48113,48115,48117,48119],{"class":104,"line":2120},[102,48112,46660],{"class":119},[102,48114,42735],{"class":187},[102,48116,1618],{"class":119},[102,48118,39935],{"class":187},[102,48120,45912],{"class":119},[102,48122,48123],{"class":104,"line":2128},[102,48124,45917],{"class":119},[102,48126,48127,48129,48131,48133,48135],{"class":104,"line":2149},[102,48128,46660],{"class":119},[102,48130,39935],{"class":187},[102,48132,1618],{"class":119},[102,48134,263],{"class":187},[102,48136,390],{"class":119},[102,48138,48139],{"class":104,"line":2161},[102,48140,45991],{"class":119},[102,48142,48143],{"class":104,"line":2167},[102,48144,652],{"emptyLinePlaceholder":651},[102,48146,48147],{"class":104,"line":2190},[102,48148,46721],{"class":126},[102,48150,48151],{"class":104,"line":2196},[102,48152,46726],{"class":126},[102,48154,48155,48157,48159,48161,48163],{"class":104,"line":2219},[102,48156,12217],{"class":108},[102,48158,46733],{"class":119},[102,48160,33908],{"class":108},[102,48162,46738],{"class":187},[102,48164,46741],{"class":119},[102,48166,48167],{"class":104,"line":2233},[102,48168,46746],{"class":126},[102,48170,48171,48173,48175],{"class":104,"line":2253},[102,48172,13451],{"class":108},[102,48174,46753],{"class":187},[102,48176,46756],{"class":119},[102,48178,48179],{"class":104,"line":2259},[102,48180,46761],{"class":126},[102,48182,48183,48185,48187,48189,48191],{"class":104,"line":2270},[102,48184,46766],{"class":119},[102,48186,46769],{"class":386},[102,48188,260],{"class":108},[102,48190,46774],{"class":278},[102,48192,390],{"class":119},[102,48194,48195],{"class":104,"line":2293},[102,48196,46781],{"class":126},[102,48198,48199,48201,48203,48205,48207,48209],{"class":104,"line":2315},[102,48200,46786],{"class":108},[102,48202,46789],{"class":119},[102,48204,46792],{"class":108},[102,48206,46795],{"class":108},[102,48208,46798],{"class":187},[102,48210,12552],{"class":119},[102,48212,48213],{"class":104,"line":2320},[102,48214,46805],{"class":126},[102,48216,48217,48219,48221],{"class":104,"line":2326},[102,48218,46810],{"class":119},[102,48220,8423],{"class":187},[102,48222,390],{"class":119},[102,48224,48225],{"class":104,"line":2340},[102,48226,46819],{"class":126},[102,48228,48229,48231,48233],{"class":104,"line":2354},[102,48230,46824],{"class":108},[102,48232,46753],{"class":187},[102,48234,46829],{"class":119},[102,48236,48237],{"class":104,"line":2359},[102,48238,46834],{"class":126},[102,48240,48241],{"class":104,"line":2373},[102,48242,46839],{"class":126},[102,48244,48245,48247,48249,48251,48253],{"class":104,"line":2378},[102,48246,46844],{"class":119},[102,48248,8423],{"class":187},[102,48250,1618],{"class":119},[102,48252,46851],{"class":187},[102,48254,390],{"class":119},[102,48256,48257],{"class":104,"line":2384},[102,48258,46858],{"class":126},[102,48260,48261,48263,48265,48267,48269,48271],{"class":104,"line":2389},[102,48262,46786],{"class":108},[102,48264,46789],{"class":119},[102,48266,46792],{"class":108},[102,48268,46795],{"class":108},[102,48270,46798],{"class":187},[102,48272,12552],{"class":119},[102,48274,48275,48277,48279],{"class":104,"line":2403},[102,48276,46810],{"class":119},[102,48278,8423],{"class":187},[102,48280,390],{"class":119},[102,48282,48283],{"class":104,"line":2408},[102,48284,652],{"emptyLinePlaceholder":651},[102,48286,48287],{"class":104,"line":2413},[102,48288,43030],{"class":126},[102,48290,48291,48293,48295],{"class":104,"line":2427},[102,48292,38666],{"class":108},[102,48294,38958],{"class":112},[102,48296,38961],{"class":119},[102,48298,48299,48301,48303,48305],{"class":104,"line":2440},[102,48300,38966],{"class":119},[102,48302,260],{"class":108},[102,48304,38688],{"class":187},[102,48306,46907],{"class":119},[102,48308,48309,48311,48313,48315],{"class":104,"line":2445},[102,48310,38966],{"class":119},[102,48312,260],{"class":108},[102,48314,38688],{"class":187},[102,48316,46918],{"class":119},[102,48318,48319,48321,48323,48325],{"class":104,"line":2458},[102,48320,38966],{"class":119},[102,48322,260],{"class":108},[102,48324,38688],{"class":187},[102,48326,46929],{"class":119},[102,48328,48329,48331,48333,48335],{"class":104,"line":2463},[102,48330,38966],{"class":119},[102,48332,260],{"class":108},[102,48334,38688],{"class":187},[102,48336,46940],{"class":119},[102,48338,48339,48341,48343,48345],{"class":104,"line":2468},[102,48340,38966],{"class":119},[102,48342,260],{"class":108},[102,48344,38688],{"class":187},[102,48346,46951],{"class":119},[102,48348,48349,48351,48353,48355],{"class":104,"line":2473},[102,48350,38966],{"class":119},[102,48352,260],{"class":108},[102,48354,38688],{"class":187},[102,48356,46962],{"class":119},[102,48358,48359,48361],{"class":104,"line":2486},[102,48360,184],{"class":108},[102,48362,39074],{"class":119},[102,48364,48365],{"class":104,"line":2491},[102,48366,652],{"emptyLinePlaceholder":651},[102,48368,48369],{"class":104,"line":40498},[102,48370,46977],{"class":126},[102,48372,48373,48375,48377,48379,48381],{"class":104,"line":40504},[102,48374,10407],{"class":108},[102,48376,39085],{"class":187},[102,48378,1876],{"class":108},[102,48380,46988],{"class":278},[102,48382,12552],{"class":119},[102,48384,48385,48387,48389,48391,48393,48395,48397,48399,48401],{"class":104,"line":40510},[102,48386,39102],{"class":119},[102,48388,260],{"class":108},[102,48390,38316],{"class":119},[102,48392,39109],{"class":278},[102,48394,10565],{"class":108},[102,48396,39114],{"class":119},[102,48398,10562],{"class":108},[102,48400,38341],{"class":278},[102,48402,390],{"class":119},[102,48404,48405,48407],{"class":104,"line":40516},[102,48406,39164],{"class":187},[102,48408,38350],{"class":119},[102,48410,48411,48413,48415],{"class":104,"line":40522},[102,48412,39154],{"class":119},[102,48414,260],{"class":108},[102,48416,47025],{"class":119},[102,48418,48419,48421,48423,48425,48427,48429,48431,48433],{"class":104,"line":40533},[102,48420,39164],{"class":187},[102,48422,39167],{"class":119},[102,48424,7039],{"class":187},[102,48426,1618],{"class":119},[102,48428,39366],{"class":187},[102,48430,1618],{"class":119},[102,48432,39366],{"class":187},[102,48434,39180],{"class":119},[87,48436,48437],{"start":123},[62,48438,48439],{},"测试代码",[93,48441,48443],{"className":38243,"code":48442,"language":38245,"meta":98,"style":98},"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",[83,48444,48445,48451,48461,48471,48475,48485,48496,48500,48504,48508,48516,48532,48542,48558,48568,48582,48586,48596,48606,48616,48622,48626,48630,48638,48642,48658,48666,48670,48674,48682,48690,48694,48698,48702,48706,48712,48716,48726,48734,48742,48746,48750,48754,48762,48766,48782,48786,48790,48794,48806,48810,48822,48826,48830,48842,48846,48856,48860,48864,48876,48880,48889,48893,48897,48905,48909,48917,48921,48925,48929,48933,48937,48953,48961,48965,48969,49017,49023,49027,49037,49045,49053,49057,49061,49065,49069,49077,49081,49097,49101,49109,49117],{"__ignoreMap":98},[102,48446,48447,48449],{"class":104,"line":105},[102,48448,38257],{"class":108},[102,48450,38260],{"class":119},[102,48452,48453,48455,48457,48459],{"class":104,"line":116},[102,48454,38257],{"class":108},[102,48456,39280],{"class":119},[102,48458,39248],{"class":108},[102,48460,39285],{"class":119},[102,48462,48463,48465,48467,48469],{"class":104,"line":123},[102,48464,38602],{"class":108},[102,48466,39263],{"class":119},[102,48468,38257],{"class":108},[102,48470,39268],{"class":119},[102,48472,48473],{"class":104,"line":130},[102,48474,41787],{"class":126},[102,48476,48477,48479,48481,48483],{"class":104,"line":136},[102,48478,38602],{"class":108},[102,48480,39233],{"class":119},[102,48482,38257],{"class":108},[102,48484,39238],{"class":119},[102,48486,48487,48489,48491,48493],{"class":104,"line":142},[102,48488,38602],{"class":108},[102,48490,39779],{"class":119},[102,48492,38257],{"class":108},[102,48494,48495],{"class":187}," VGG16\n",[102,48497,48498],{"class":104,"line":148},[102,48499,652],{"emptyLinePlaceholder":651},[102,48501,48502],{"class":104,"line":157},[102,48503,652],{"emptyLinePlaceholder":651},[102,48505,48506],{"class":104,"line":163},[102,48507,41816],{"class":126},[102,48509,48510,48512,48514],{"class":104,"line":175},[102,48511,39812],{"class":108},[102,48513,41823],{"class":112},[102,48515,39818],{"class":119},[102,48517,48518,48520,48522,48524,48526,48528,48530],{"class":104,"line":181},[102,48519,41830],{"class":119},[102,48521,260],{"class":108},[102,48523,39320],{"class":119},[102,48525,39323],{"class":386},[102,48527,260],{"class":108},[102,48529,39328],{"class":278},[102,48531,39331],{"class":119},[102,48533,48534,48536,48538,48540],{"class":104,"line":202},[102,48535,41847],{"class":386},[102,48537,260],{"class":108},[102,48539,41852],{"class":187},[102,48541,39331],{"class":119},[102,48543,48544,48546,48548,48550,48552,48554,48556],{"class":104,"line":208},[102,48545,41859],{"class":386},[102,48547,260],{"class":108},[102,48549,39358],{"class":119},[102,48551,39361],{"class":386},[102,48553,260],{"class":108},[102,48555,39366],{"class":187},[102,48557,39369],{"class":119},[102,48559,48560,48562,48564,48566],{"class":104,"line":214},[102,48561,41876],{"class":386},[102,48563,260],{"class":108},[102,48565,39341],{"class":187},[102,48567,390],{"class":119},[102,48569,48570,48572,48574,48576,48578,48580],{"class":104,"line":225},[102,48571,41887],{"class":119},[102,48573,260],{"class":108},[102,48575,39399],{"class":119},[102,48577,39402],{"class":386},[102,48579,260],{"class":108},[102,48581,41898],{"class":119},[102,48583,48584],{"class":104,"line":230},[102,48585,41903],{"class":126},[102,48587,48588,48590,48592,48594],{"class":104,"line":236},[102,48589,41908],{"class":386},[102,48591,260],{"class":108},[102,48593,7039],{"class":187},[102,48595,39331],{"class":119},[102,48597,48598,48600,48602,48604],{"class":104,"line":242},[102,48599,41919],{"class":386},[102,48601,260],{"class":108},[102,48603,39341],{"class":187},[102,48605,39331],{"class":119},[102,48607,48608,48610,48612,48614],{"class":104,"line":248},[102,48609,41930],{"class":386},[102,48611,260],{"class":108},[102,48613,8423],{"class":187},[102,48615,390],{"class":119},[102,48617,48618,48620],{"class":104,"line":254},[102,48619,863],{"class":108},[102,48621,41943],{"class":119},[102,48623,48624],{"class":104,"line":269},[102,48625,652],{"emptyLinePlaceholder":651},[102,48627,48628],{"class":104,"line":298},[102,48629,41952],{"class":126},[102,48631,48632,48634,48636],{"class":104,"line":502},[102,48633,39812],{"class":108},[102,48635,41959],{"class":112},[102,48637,41962],{"class":119},[102,48639,48640],{"class":104,"line":507},[102,48641,41967],{"class":126},[102,48643,48644,48646,48648,48650,48652,48654,48656],{"class":104,"line":512},[102,48645,39102],{"class":119},[102,48647,260],{"class":108},[102,48649,39109],{"class":278},[102,48651,10565],{"class":108},[102,48653,39114],{"class":119},[102,48655,10562],{"class":108},[102,48657,41984],{"class":278},[102,48659,48660,48662,48664],{"class":104,"line":521},[102,48661,39154],{"class":119},[102,48663,260],{"class":108},[102,48665,40154],{"class":119},[102,48667,48668],{"class":104,"line":526},[102,48669,652],{"emptyLinePlaceholder":651},[102,48671,48672],{"class":104,"line":532},[102,48673,42001],{"class":126},[102,48675,48676,48678,48680],{"class":104,"line":538},[102,48677,42006],{"class":119},[102,48679,260],{"class":108},[102,48681,40207],{"class":187},[102,48683,48684,48686,48688],{"class":104,"line":555},[102,48685,42015],{"class":119},[102,48687,260],{"class":108},[102,48689,11901],{"class":187},[102,48691,48692],{"class":104,"line":570},[102,48693,652],{"emptyLinePlaceholder":651},[102,48695,48696],{"class":104,"line":581},[102,48697,42028],{"class":126},[102,48699,48700],{"class":104,"line":819},[102,48701,42033],{"class":126},[102,48703,48704],{"class":104,"line":828},[102,48705,42038],{"class":126},[102,48707,48708,48710],{"class":104,"line":837},[102,48709,42043],{"class":108},[102,48711,40749],{"class":119},[102,48713,48714],{"class":104,"line":842},[102,48715,42050],{"class":126},[102,48717,48718,48720,48722,48724],{"class":104,"line":855},[102,48719,12217],{"class":108},[102,48721,42057],{"class":119},[102,48723,33908],{"class":108},[102,48725,42062],{"class":119},[102,48727,48728,48730,48732],{"class":104,"line":860},[102,48729,42067],{"class":119},[102,48731,260],{"class":108},[102,48733,42072],{"class":119},[102,48735,48736,48738,48740],{"class":104,"line":871},[102,48737,42077],{"class":119},[102,48739,260],{"class":108},[102,48741,42082],{"class":119},[102,48743,48744],{"class":104,"line":1359},[102,48745,42087],{"class":126},[102,48747,48748],{"class":104,"line":1368},[102,48749,40740],{"class":119},[102,48751,48752],{"class":104,"line":1373},[102,48753,42096],{"class":126},[102,48755,48756,48758,48760],{"class":104,"line":1378},[102,48757,40525],{"class":119},[102,48759,260],{"class":108},[102,48761,42105],{"class":119},[102,48763,48764],{"class":104,"line":1384},[102,48765,42110],{"class":126},[102,48767,48768,48770,48772,48774,48776,48778,48780],{"class":104,"line":1398},[102,48769,40542],{"class":119},[102,48771,260],{"class":108},[102,48773,40547],{"class":119},[102,48775,40550],{"class":386},[102,48777,260],{"class":108},[102,48779,7039],{"class":187},[102,48781,390],{"class":119},[102,48783,48784],{"class":104,"line":1424},[102,48785,42131],{"class":126},[102,48787,48788],{"class":104,"line":1429},[102,48789,42136],{"class":126},[102,48791,48792],{"class":104,"line":1435},[102,48793,42141],{"class":126},[102,48795,48796,48798,48800,48802,48804],{"class":104,"line":1450},[102,48797,42146],{"class":119},[102,48799,18244],{"class":108},[102,48801,40652],{"class":119},[102,48803,1876],{"class":108},[102,48805,42155],{"class":119},[102,48807,48808],{"class":104,"line":1473},[102,48809,42160],{"class":126},[102,48811,48812,48814,48816,48818,48820],{"class":104,"line":1478},[102,48813,42165],{"class":119},[102,48815,18244],{"class":108},[102,48817,42170],{"class":119},[102,48819,8423],{"class":187},[102,48821,390],{"class":119},[102,48823,48824],{"class":104,"line":1484},[102,48825,652],{"emptyLinePlaceholder":651},[102,48827,48828],{"class":104,"line":1499},[102,48829,42183],{"class":126},[102,48831,48832,48834,48836,48838,48840],{"class":104,"line":1508},[102,48833,42188],{"class":119},[102,48835,260],{"class":108},[102,48837,42193],{"class":119},[102,48839,9611],{"class":108},[102,48841,42198],{"class":119},[102,48843,48844],{"class":104,"line":1513},[102,48845,42203],{"class":126},[102,48847,48848,48850,48852,48854],{"class":104,"line":1524},[102,48849,40316],{"class":187},[102,48851,380],{"class":119},[102,48853,42212],{"class":278},[102,48855,42215],{"class":119},[102,48857,48858],{"class":104,"line":1529},[102,48859,652],{"emptyLinePlaceholder":651},[102,48861,48862],{"class":104,"line":1538},[102,48863,42224],{"class":126},[102,48865,48866,48868,48870,48872,48874],{"class":104,"line":2089},[102,48867,10407],{"class":108},[102,48869,39085],{"class":187},[102,48871,1876],{"class":108},[102,48873,39090],{"class":278},[102,48875,12552],{"class":119},[102,48877,48878],{"class":104,"line":2094},[102,48879,42241],{"class":126},[102,48881,48882,48884,48886],{"class":104,"line":2100},[102,48883,39154],{"class":119},[102,48885,260],{"class":108},[102,48887,48888],{"class":119},"VGG16()\n",[102,48890,48891],{"class":104,"line":2106},[102,48892,42254],{"class":126},[102,48894,48895],{"class":104,"line":2120},[102,48896,42259],{"class":126},[102,48898,48899,48901,48903],{"class":104,"line":2128},[102,48900,42264],{"class":119},[102,48902,42267],{"class":278},[102,48904,38362],{"class":119},[102,48906,48907],{"class":104,"line":2149},[102,48908,42274],{"class":126},[102,48910,48911,48913,48915],{"class":104,"line":2161},[102,48912,41887],{"class":119},[102,48914,260],{"class":108},[102,48916,42283],{"class":119},[102,48918,48919],{"class":104,"line":2167},[102,48920,42288],{"class":126},[102,48922,48923],{"class":104,"line":2190},[102,48924,42293],{"class":119},[102,48926,48927],{"class":104,"line":2196},[102,48928,652],{"emptyLinePlaceholder":651},[102,48930,48931],{"class":104,"line":2219},[102,48932,42302],{"class":126},[102,48934,48935],{"class":104,"line":2233},[102,48936,42307],{"class":126},[102,48938,48939,48941,48943,48945,48947,48949,48951],{"class":104,"line":2253},[102,48940,39102],{"class":119},[102,48942,260],{"class":108},[102,48944,39109],{"class":278},[102,48946,10565],{"class":108},[102,48948,39114],{"class":119},[102,48950,10562],{"class":108},[102,48952,41984],{"class":278},[102,48954,48955,48957,48959],{"class":104,"line":2259},[102,48956,39154],{"class":119},[102,48958,260],{"class":108},[102,48960,40154],{"class":119},[102,48962,48963],{"class":104,"line":2270},[102,48964,42336],{"class":126},[102,48966,48967],{"class":104,"line":2293},[102,48968,42341],{"class":126},[102,48970,48971,48973,48975,48977,48979,48981,48983,48985,48987,48989,48991,48993,48995,48997,48999,49001,49003,49005,49007,49009,49011,49013,49015],{"class":104,"line":2315},[102,48972,42346],{"class":119},[102,48974,260],{"class":108},[102,48976,9912],{"class":119},[102,48978,42353],{"class":278},[102,48980,1618],{"class":119},[102,48982,42358],{"class":278},[102,48984,1618],{"class":119},[102,48986,42363],{"class":278},[102,48988,1618],{"class":119},[102,48990,42368],{"class":278},[102,48992,1618],{"class":119},[102,48994,42373],{"class":278},[102,48996,1618],{"class":119},[102,48998,42378],{"class":278},[102,49000,1618],{"class":119},[102,49002,42383],{"class":278},[102,49004,1618],{"class":119},[102,49006,42388],{"class":278},[102,49008,1618],{"class":119},[102,49010,42393],{"class":278},[102,49012,1618],{"class":119},[102,49014,42398],{"class":278},[102,49016,41111],{"class":119},[102,49018,49019,49021],{"class":104,"line":2320},[102,49020,42043],{"class":108},[102,49022,40749],{"class":119},[102,49024,49025],{"class":104,"line":2326},[102,49026,42411],{"class":126},[102,49028,49029,49031,49033,49035],{"class":104,"line":2340},[102,49030,12217],{"class":108},[102,49032,42418],{"class":119},[102,49034,33908],{"class":108},[102,49036,42062],{"class":119},[102,49038,49039,49041,49043],{"class":104,"line":2354},[102,49040,40475],{"class":119},[102,49042,260],{"class":108},[102,49044,40480],{"class":119},[102,49046,49047,49049,49051],{"class":104,"line":2359},[102,49048,40490],{"class":119},[102,49050,260],{"class":108},[102,49052,40495],{"class":119},[102,49054,49055],{"class":104,"line":2373},[102,49056,652],{"emptyLinePlaceholder":651},[102,49058,49059],{"class":104,"line":2378},[102,49060,42447],{"class":126},[102,49062,49063],{"class":104,"line":2384},[102,49064,40740],{"class":119},[102,49066,49067],{"class":104,"line":2389},[102,49068,42456],{"class":126},[102,49070,49071,49073,49075],{"class":104,"line":2403},[102,49072,40525],{"class":119},[102,49074,260],{"class":108},[102,49076,40530],{"class":119},[102,49078,49079],{"class":104,"line":2408},[102,49080,42469],{"class":126},[102,49082,49083,49085,49087,49089,49091,49093,49095],{"class":104,"line":2413},[102,49084,40542],{"class":119},[102,49086,260],{"class":108},[102,49088,40547],{"class":119},[102,49090,40550],{"class":386},[102,49092,260],{"class":108},[102,49094,7039],{"class":187},[102,49096,390],{"class":119},[102,49098,49099],{"class":104,"line":2427},[102,49100,42490],{"class":126},[102,49102,49103,49105,49107],{"class":104,"line":2440},[102,49104,42495],{"class":119},[102,49106,260],{"class":108},[102,49108,42500],{"class":119},[102,49110,49111,49113,49115],{"class":104,"line":2445},[102,49112,42505],{"class":119},[102,49114,260],{"class":108},[102,49116,42510],{"class":119},[102,49118,49119,49121,49123,49125,49127,49129,49131,49133],{"class":104,"line":2458},[102,49120,42515],{"class":187},[102,49122,380],{"class":119},[102,49124,42520],{"class":278},[102,49126,42523],{"class":119},[102,49128,42526],{"class":278},[102,49130,1618],{"class":119},[102,49132,42531],{"class":278},[102,49134,42534],{"class":119},[48,49136,49138],{"id":49137},"_23googlenet","2.3.GoogLeNet",[7601,49140,49142],{"id":49141},"_231原理","2.3.1.原理",[87,49144,49145],{},[62,49146,49147],{},"网络结构",[14,49149,49150],{},[6750,49151],{"alt":98,"src":49152},"\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",[14,49154,49155],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,49157,49158],{},[6750,49159],{"alt":98,"src":49160},"\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",[14,49162,49163],{},[6750,49164],{"alt":98,"src":49165},"\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",[14,49167,49168],{},[6750,49169],{"alt":98,"src":49170},"\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",[87,49172,49173],{"start":116},[62,49174,49175],{},"1x1卷积的优点",[14,49177,49178],{},[6750,49179],{"alt":98,"src":49180},"\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",[87,49182,49183],{"start":123},[62,49184,49185],{},"全局平均池化层优点",[14,49187,49188],{},[6750,49189],{"alt":98,"src":49190},"\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",[14,49192,49193],{},[6750,49194],{"alt":98,"src":49195},"\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",[87,49197,49198],{"start":130},[62,49199,49200],{},"参数详细描述",[14,49202,49203],{},[6750,49204],{"alt":98,"src":49205},"\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",[14,49207,49208],{},[6750,49209],{"alt":98,"src":49210},"\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",[14,49212,49213],{},[6750,49214],{"alt":98,"src":49215},"\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",[14,49217,49218],{},[6750,49219],{"alt":98,"src":49220},"\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",[14,49222,49223],{},[6750,49224],{"alt":98,"src":49225},"\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",[14,49227,49228],{},[6750,49229],{"alt":98,"src":49230},"\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",[14,49232,49233],{},[6750,49234],{"alt":98,"src":49235},"\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",[14,49237,49238],{},[6750,49239],{"alt":98,"src":49240},"\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",[14,49242,49243],{},[6750,49244],{"alt":98,"src":49245},"\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",[14,49247,49248],{},[6750,49249],{"alt":98,"src":49250},"\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",[14,49252,49253],{},[6750,49254],{"alt":98,"src":49255},"\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",[14,49257,49258],{},[6750,49259],{"alt":98,"src":49260},"\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",[14,49262,49263],{},[6750,49264],{"alt":98,"src":49265},"\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",[14,49267,49268],{},[6750,49269],{"alt":98,"src":49270},"\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",[14,49272,49273],{},[6750,49274],{"alt":98,"src":49275},"\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",[14,49277,49278],{},[6750,49279],{"alt":98,"src":49280},"\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",[14,49282,49283],{},[6750,49284],{"alt":98,"src":49285},"\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",[14,49287,49288],{},[6750,49289],{"alt":98,"src":49290},"\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",[14,49292,49293],{},[6750,49294],{"alt":98,"src":49295},"\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",[14,49297,49298],{},[6750,49299],{"alt":98,"src":49300},"\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",[14,49302,49303],{},[6750,49304],{"alt":98,"src":49305},"\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",[7601,49307,49309],{"id":49308},"_232代码实现","2.3.2.代码实现",[87,49311,49312],{},[62,49313,38576],{},[14,49315,49316],{},"根据原理一步一步搭建即可",[93,49318,49320],{"className":38243,"code":49319,"language":38245,"meta":98,"style":98},"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",[83,49321,49322,49328,49338,49348,49352,49369,49378,49393,49403,49408,49441,49446,49483,49530,49535,49571,49618,49623,49628,49663,49695,49699,49707,49723,49747,49772,49793,49798,49813,49817,49821,49826,49843,49848,49857,49872,49883,49927,49931,49959,49963,49974,50002,50006,50043,50047,50075,50079,50090,50126,50158,50186,50190,50201,50235,50267,50299,50332,50366,50394,50398,50409,50442,50474,50488,50492,50505,50509,50514,50526,50534,50556,50561,50566,50571,50576,50581,50586,50600,50608,50617,50630,50645,50654,50658,50666,50677,50688,50699,50710,50721,50727,50731,50736,50748,50768,50777],{"__ignoreMap":98},[102,49323,49324,49326],{"class":104,"line":105},[102,49325,38257],{"class":108},[102,49327,38260],{"class":119},[102,49329,49330,49332,49334,49336],{"class":104,"line":116},[102,49331,38602],{"class":108},[102,49333,38605],{"class":119},[102,49335,38257],{"class":108},[102,49337,38610],{"class":119},[102,49339,49340,49342,49344,49346],{"class":104,"line":123},[102,49341,38602],{"class":108},[102,49343,38622],{"class":119},[102,49345,38257],{"class":108},[102,49347,38627],{"class":119},[102,49349,49350],{"class":104,"line":130},[102,49351,652],{"emptyLinePlaceholder":651},[102,49353,49354,49356,49359,49361,49363,49365,49367],{"class":104,"line":136},[102,49355,109],{"class":108},[102,49357,49358],{"class":112}," Inception",[102,49360,380],{"class":119},[102,49362,38643],{"class":112},[102,49364,9585],{"class":119},[102,49366,38648],{"class":112},[102,49368,38651],{"class":119},[102,49370,49371,49373,49375],{"class":104,"line":142},[102,49372,38666],{"class":108},[102,49374,38669],{"class":187},[102,49376,49377],{"class":119},"(self,in_channels,c1,c2,c3,c4):\n",[102,49379,49380,49382,49385,49387,49389,49391],{"class":104,"line":148},[102,49381,38682],{"class":187},[102,49383,49384],{"class":119},"(Inception,",[102,49386,38688],{"class":187},[102,49388,38691],{"class":119},[102,49390,38694],{"class":187},[102,49392,172],{"class":119},[102,49394,49395,49397,49399,49401],{"class":104,"line":157},[102,49396,38710],{"class":187},[102,49398,42636],{"class":119},[102,49400,260],{"class":108},[102,49402,42641],{"class":119},[102,49404,49405],{"class":104,"line":163},[102,49406,49407],{"class":126},"        # 路线1：定义1*1卷积\n",[102,49409,49410,49412,49415,49417,49419,49421,49423,49426,49428,49430,49433,49435,49437,49439],{"class":104,"line":175},[102,49411,38710],{"class":187},[102,49413,49414],{"class":119},".p1_1",[102,49416,260],{"class":108},[102,49418,38718],{"class":119},[102,49420,38721],{"class":386},[102,49422,260],{"class":108},[102,49424,49425],{"class":119},"in_channels,",[102,49427,38730],{"class":386},[102,49429,260],{"class":108},[102,49431,49432],{"class":119},"c1,",[102,49434,38739],{"class":386},[102,49436,260],{"class":108},[102,49438,7039],{"class":187},[102,49440,390],{"class":119},[102,49442,49443],{"class":104,"line":181},[102,49444,49445],{"class":126},"        # 路线2：定义1*1卷积和3*3\n",[102,49447,49448,49450,49453,49455,49457,49459,49461,49463,49465,49467,49470,49472,49475,49477,49479,49481],{"class":104,"line":202},[102,49449,38710],{"class":187},[102,49451,49452],{"class":119},".p2_1",[102,49454,260],{"class":108},[102,49456,38718],{"class":119},[102,49458,38721],{"class":386},[102,49460,260],{"class":108},[102,49462,49425],{"class":119},[102,49464,38730],{"class":386},[102,49466,260],{"class":108},[102,49468,49469],{"class":119},"c2[",[102,49471,8423],{"class":187},[102,49473,49474],{"class":119},"],",[102,49476,38739],{"class":386},[102,49478,260],{"class":108},[102,49480,7039],{"class":187},[102,49482,390],{"class":119},[102,49484,49485,49487,49490,49492,49494,49496,49498,49500,49502,49504,49506,49508,49510,49512,49514,49516,49518,49520,49522,49524,49526,49528],{"class":104,"line":208},[102,49486,38710],{"class":187},[102,49488,49489],{"class":119},".p2_2",[102,49491,260],{"class":108},[102,49493,38718],{"class":119},[102,49495,38721],{"class":386},[102,49497,260],{"class":108},[102,49499,49469],{"class":119},[102,49501,8423],{"class":187},[102,49503,49474],{"class":119},[102,49505,38730],{"class":386},[102,49507,260],{"class":108},[102,49509,49469],{"class":119},[102,49511,7039],{"class":187},[102,49513,49474],{"class":119},[102,49515,38739],{"class":386},[102,49517,260],{"class":108},[102,49519,7049],{"class":187},[102,49521,1618],{"class":119},[102,49523,38748],{"class":386},[102,49525,260],{"class":108},[102,49527,7039],{"class":187},[102,49529,390],{"class":119},[102,49531,49532],{"class":104,"line":214},[102,49533,49534],{"class":126},"        # 路线3：定义1*1卷积和5*5\n",[102,49536,49537,49539,49542,49544,49546,49548,49550,49552,49554,49556,49559,49561,49563,49565,49567,49569],{"class":104,"line":225},[102,49538,38710],{"class":187},[102,49540,49541],{"class":119},".p3_1",[102,49543,260],{"class":108},[102,49545,38718],{"class":119},[102,49547,38721],{"class":386},[102,49549,260],{"class":108},[102,49551,49425],{"class":119},[102,49553,38730],{"class":386},[102,49555,260],{"class":108},[102,49557,49558],{"class":119},"c3[",[102,49560,8423],{"class":187},[102,49562,49474],{"class":119},[102,49564,38739],{"class":386},[102,49566,260],{"class":108},[102,49568,7039],{"class":187},[102,49570,390],{"class":119},[102,49572,49573,49575,49578,49580,49582,49584,49586,49588,49590,49592,49594,49596,49598,49600,49602,49604,49606,49608,49610,49612,49614,49616],{"class":104,"line":230},[102,49574,38710],{"class":187},[102,49576,49577],{"class":119},".p3_2",[102,49579,260],{"class":108},[102,49581,38718],{"class":119},[102,49583,38721],{"class":386},[102,49585,260],{"class":108},[102,49587,49558],{"class":119},[102,49589,8423],{"class":187},[102,49591,49474],{"class":119},[102,49593,38730],{"class":386},[102,49595,260],{"class":108},[102,49597,49558],{"class":119},[102,49599,7039],{"class":187},[102,49601,49474],{"class":119},[102,49603,38739],{"class":386},[102,49605,260],{"class":108},[102,49607,9354],{"class":187},[102,49609,1618],{"class":119},[102,49611,38748],{"class":386},[102,49613,260],{"class":108},[102,49615,7044],{"class":187},[102,49617,390],{"class":119},[102,49619,49620],{"class":104,"line":236},[102,49621,49622],{"class":126},"        # 路线4：定义3*3最大池化和1*1卷积\n",[102,49624,49625],{"class":104,"line":242},[102,49626,49627],{"class":126},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[102,49629,49630,49632,49635,49637,49639,49641,49643,49645,49647,49649,49651,49653,49655,49657,49659,49661],{"class":104,"line":248},[102,49631,38710],{"class":187},[102,49633,49634],{"class":119},".p4_1",[102,49636,260],{"class":108},[102,49638,42694],{"class":119},[102,49640,38739],{"class":386},[102,49642,260],{"class":108},[102,49644,7049],{"class":187},[102,49646,1618],{"class":119},[102,49648,38794],{"class":386},[102,49650,260],{"class":108},[102,49652,7039],{"class":187},[102,49654,1618],{"class":119},[102,49656,38748],{"class":386},[102,49658,260],{"class":108},[102,49660,7039],{"class":187},[102,49662,390],{"class":119},[102,49664,49665,49667,49670,49672,49674,49676,49678,49680,49682,49684,49687,49689,49691,49693],{"class":104,"line":254},[102,49666,38710],{"class":187},[102,49668,49669],{"class":119},".p4_2",[102,49671,260],{"class":108},[102,49673,38718],{"class":119},[102,49675,38721],{"class":386},[102,49677,260],{"class":108},[102,49679,49425],{"class":119},[102,49681,38730],{"class":386},[102,49683,260],{"class":108},[102,49685,49686],{"class":119},"c4,",[102,49688,38739],{"class":386},[102,49690,260],{"class":108},[102,49692,7039],{"class":187},[102,49694,390],{"class":119},[102,49696,49697],{"class":104,"line":269},[102,49698,652],{"emptyLinePlaceholder":651},[102,49700,49701,49703,49705],{"class":104,"line":298},[102,49702,38666],{"class":108},[102,49704,38958],{"class":112},[102,49706,38961],{"class":119},[102,49708,49709,49712,49714,49716,49718,49720],{"class":104,"line":502},[102,49710,49711],{"class":119},"        p1",[102,49713,260],{"class":108},[102,49715,38688],{"class":187},[102,49717,43049],{"class":119},[102,49719,38688],{"class":187},[102,49721,49722],{"class":119},".p1_1(x))\n",[102,49724,49725,49727,49729,49731,49733,49735,49738,49740,49742,49744],{"class":104,"line":507},[102,49726,15873],{"class":119},[102,49728,260],{"class":108},[102,49730,38688],{"class":187},[102,49732,43049],{"class":119},[102,49734,38688],{"class":187},[102,49736,49737],{"class":119},".p2_2(",[102,49739,38688],{"class":187},[102,49741,43049],{"class":119},[102,49743,38688],{"class":187},[102,49745,49746],{"class":119},".p2_1(x))))\n",[102,49748,49749,49752,49754,49756,49758,49760,49763,49765,49767,49769],{"class":104,"line":512},[102,49750,49751],{"class":119},"        p3",[102,49753,260],{"class":108},[102,49755,38688],{"class":187},[102,49757,43049],{"class":119},[102,49759,38688],{"class":187},[102,49761,49762],{"class":119},".p3_2(",[102,49764,38688],{"class":187},[102,49766,43049],{"class":119},[102,49768,38688],{"class":187},[102,49770,49771],{"class":119},".p3_1(x))))\n",[102,49773,49774,49777,49779,49781,49783,49785,49788,49790],{"class":104,"line":521},[102,49775,49776],{"class":119},"        p4",[102,49778,260],{"class":108},[102,49780,38688],{"class":187},[102,49782,43049],{"class":119},[102,49784,38688],{"class":187},[102,49786,49787],{"class":119},".p4_2(",[102,49789,38688],{"class":187},[102,49791,49792],{"class":119},".p4_1(x)))\n",[102,49794,49795],{"class":104,"line":526},[102,49796,49797],{"class":126},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[102,49799,49800,49802,49805,49807,49809,49811],{"class":104,"line":532},[102,49801,184],{"class":108},[102,49803,49804],{"class":119}," torch.cat((p1,p2,p3,p4),",[102,49806,40550],{"class":386},[102,49808,260],{"class":108},[102,49810,7039],{"class":187},[102,49812,390],{"class":119},[102,49814,49815],{"class":104,"line":538},[102,49816,652],{"emptyLinePlaceholder":651},[102,49818,49819],{"class":104,"line":555},[102,49820,652],{"emptyLinePlaceholder":651},[102,49822,49823],{"class":104,"line":570},[102,49824,49825],{"class":126},"# 搭建GoogLeNet网络\n",[102,49827,49828,49830,49833,49835,49837,49839,49841],{"class":104,"line":581},[102,49829,109],{"class":108},[102,49831,49832],{"class":112}," GoogLeNet",[102,49834,380],{"class":119},[102,49836,38643],{"class":112},[102,49838,9585],{"class":119},[102,49840,38648],{"class":112},[102,49842,38651],{"class":119},[102,49844,49845],{"class":104,"line":819},[102,49846,49847],{"class":126},"    # 必须把Inception导入到里边\n",[102,49849,49850,49852,49854],{"class":104,"line":828},[102,49851,38666],{"class":108},[102,49853,38669],{"class":187},[102,49855,49856],{"class":119},"(self,Inception):\n",[102,49858,49859,49861,49864,49866,49868,49870],{"class":104,"line":837},[102,49860,38682],{"class":187},[102,49862,49863],{"class":119},"(GoogLeNet,",[102,49865,38688],{"class":187},[102,49867,38691],{"class":119},[102,49869,38694],{"class":187},[102,49871,172],{"class":119},[102,49873,49874,49876,49879,49881],{"class":104,"line":842},[102,49875,38710],{"class":187},[102,49877,49878],{"class":119},".b1",[102,49880,260],{"class":108},[102,49882,45874],{"class":119},[102,49884,49885,49887,49889,49891,49893,49895,49897,49899,49901,49903,49905,49907,49909,49911,49913,49915,49917,49919,49921,49923,49925],{"class":104,"line":855},[102,49886,45879],{"class":119},[102,49888,38721],{"class":386},[102,49890,260],{"class":108},[102,49892,7039],{"class":187},[102,49894,1618],{"class":119},[102,49896,38730],{"class":386},[102,49898,260],{"class":108},[102,49900,9241],{"class":187},[102,49902,1618],{"class":119},[102,49904,38739],{"class":386},[102,49906,260],{"class":108},[102,49908,9403],{"class":187},[102,49910,1618],{"class":119},[102,49912,38794],{"class":386},[102,49914,260],{"class":108},[102,49916,7044],{"class":187},[102,49918,1618],{"class":119},[102,49920,38748],{"class":386},[102,49922,260],{"class":108},[102,49924,7049],{"class":187},[102,49926,45912],{"class":119},[102,49928,49929],{"class":104,"line":860},[102,49930,45917],{"class":119},[102,49932,49933,49935,49937,49939,49941,49943,49945,49947,49949,49951,49953,49955,49957],{"class":104,"line":871},[102,49934,45962],{"class":119},[102,49936,38739],{"class":386},[102,49938,260],{"class":108},[102,49940,7049],{"class":187},[102,49942,1618],{"class":119},[102,49944,38794],{"class":386},[102,49946,260],{"class":108},[102,49948,7044],{"class":187},[102,49950,1618],{"class":119},[102,49952,38748],{"class":386},[102,49954,260],{"class":108},[102,49956,7039],{"class":187},[102,49958,390],{"class":119},[102,49960,49961],{"class":104,"line":1359},[102,49962,45991],{"class":119},[102,49964,49965,49967,49970,49972],{"class":104,"line":1368},[102,49966,38710],{"class":187},[102,49968,49969],{"class":119},".b2",[102,49971,260],{"class":108},[102,49973,45874],{"class":119},[102,49975,49976,49978,49980,49982,49984,49986,49988,49990,49992,49994,49996,49998,50000],{"class":104,"line":1373},[102,49977,45879],{"class":119},[102,49979,38721],{"class":386},[102,49981,260],{"class":108},[102,49983,9241],{"class":187},[102,49985,1618],{"class":119},[102,49987,38730],{"class":386},[102,49989,260],{"class":108},[102,49991,9241],{"class":187},[102,49993,1618],{"class":119},[102,49995,38739],{"class":386},[102,49997,260],{"class":108},[102,49999,7039],{"class":187},[102,50001,45912],{"class":119},[102,50003,50004],{"class":104,"line":1378},[102,50005,45917],{"class":119},[102,50007,50008,50010,50012,50014,50016,50018,50020,50022,50025,50027,50029,50031,50033,50035,50037,50039,50041],{"class":104,"line":1384},[102,50009,45879],{"class":119},[102,50011,38721],{"class":386},[102,50013,260],{"class":108},[102,50015,9241],{"class":187},[102,50017,1618],{"class":119},[102,50019,38730],{"class":386},[102,50021,260],{"class":108},[102,50023,50024],{"class":187},"192",[102,50026,1618],{"class":119},[102,50028,38739],{"class":386},[102,50030,260],{"class":108},[102,50032,7049],{"class":187},[102,50034,1618],{"class":119},[102,50036,38748],{"class":386},[102,50038,260],{"class":108},[102,50040,7039],{"class":187},[102,50042,45912],{"class":119},[102,50044,50045],{"class":104,"line":1398},[102,50046,45917],{"class":119},[102,50048,50049,50051,50053,50055,50057,50059,50061,50063,50065,50067,50069,50071,50073],{"class":104,"line":1424},[102,50050,45962],{"class":119},[102,50052,38739],{"class":386},[102,50054,260],{"class":108},[102,50056,7049],{"class":187},[102,50058,1618],{"class":119},[102,50060,38794],{"class":386},[102,50062,260],{"class":108},[102,50064,7044],{"class":187},[102,50066,1618],{"class":119},[102,50068,38748],{"class":386},[102,50070,260],{"class":108},[102,50072,7039],{"class":187},[102,50074,390],{"class":119},[102,50076,50077],{"class":104,"line":1429},[102,50078,45991],{"class":119},[102,50080,50081,50083,50086,50088],{"class":104,"line":1435},[102,50082,38710],{"class":187},[102,50084,50085],{"class":119},".b3",[102,50087,260],{"class":108},[102,50089,45874],{"class":119},[102,50091,50092,50095,50097,50099,50101,50104,50106,50108,50110,50113,50115,50117,50119,50122,50124],{"class":104,"line":1450},[102,50093,50094],{"class":119},"            Inception(",[102,50096,50024],{"class":187},[102,50098,1618],{"class":119},[102,50100,9241],{"class":187},[102,50102,50103],{"class":119},",(",[102,50105,9247],{"class":187},[102,50107,1618],{"class":119},[102,50109,39935],{"class":187},[102,50111,50112],{"class":119},"),(",[102,50114,9628],{"class":187},[102,50116,1618],{"class":119},[102,50118,9235],{"class":187},[102,50120,50121],{"class":119},"),",[102,50123,9235],{"class":187},[102,50125,45912],{"class":119},[102,50127,50128,50130,50132,50134,50136,50138,50140,50142,50144,50146,50148,50150,50152,50154,50156],{"class":104,"line":1473},[102,50129,50094],{"class":119},[102,50131,42735],{"class":187},[102,50133,1618],{"class":119},[102,50135,39935],{"class":187},[102,50137,50103],{"class":119},[102,50139,39935],{"class":187},[102,50141,1618],{"class":119},[102,50143,50024],{"class":187},[102,50145,50112],{"class":119},[102,50147,9235],{"class":187},[102,50149,1618],{"class":119},[102,50151,9247],{"class":187},[102,50153,50121],{"class":119},[102,50155,9241],{"class":187},[102,50157,45912],{"class":119},[102,50159,50160,50162,50164,50166,50168,50170,50172,50174,50176,50178,50180,50182,50184],{"class":104,"line":1478},[102,50161,45962],{"class":119},[102,50163,38739],{"class":386},[102,50165,260],{"class":108},[102,50167,7049],{"class":187},[102,50169,1618],{"class":119},[102,50171,38794],{"class":386},[102,50173,260],{"class":108},[102,50175,7044],{"class":187},[102,50177,1618],{"class":119},[102,50179,38748],{"class":386},[102,50181,260],{"class":108},[102,50183,7039],{"class":187},[102,50185,390],{"class":119},[102,50187,50188],{"class":104,"line":1484},[102,50189,45991],{"class":119},[102,50191,50192,50194,50197,50199],{"class":104,"line":1499},[102,50193,38710],{"class":187},[102,50195,50196],{"class":119},".b4",[102,50198,260],{"class":108},[102,50200,45874],{"class":119},[102,50202,50203,50205,50208,50210,50212,50214,50216,50218,50221,50223,50225,50227,50229,50231,50233],{"class":104,"line":1508},[102,50204,50094],{"class":119},[102,50206,50207],{"class":187},"480",[102,50209,1618],{"class":119},[102,50211,50024],{"class":187},[102,50213,50103],{"class":119},[102,50215,9247],{"class":187},[102,50217,1618],{"class":119},[102,50219,50220],{"class":187},"208",[102,50222,50112],{"class":119},[102,50224,9628],{"class":187},[102,50226,1618],{"class":119},[102,50228,9634],{"class":187},[102,50230,50121],{"class":119},[102,50232,9241],{"class":187},[102,50234,45912],{"class":119},[102,50236,50237,50239,50241,50243,50245,50247,50249,50251,50253,50255,50257,50259,50261,50263,50265],{"class":104,"line":1513},[102,50238,50094],{"class":119},[102,50240,46322],{"class":187},[102,50242,1618],{"class":119},[102,50244,6640],{"class":187},[102,50246,50103],{"class":119},[102,50248,9645],{"class":187},[102,50250,1618],{"class":119},[102,50252,39366],{"class":187},[102,50254,50112],{"class":119},[102,50256,9823],{"class":187},[102,50258,1618],{"class":119},[102,50260,9241],{"class":187},[102,50262,50121],{"class":119},[102,50264,9241],{"class":187},[102,50266,45912],{"class":119},[102,50268,50269,50271,50273,50275,50277,50279,50281,50283,50285,50287,50289,50291,50293,50295,50297],{"class":104,"line":1524},[102,50270,50094],{"class":119},[102,50272,46322],{"class":187},[102,50274,1618],{"class":119},[102,50276,39935],{"class":187},[102,50278,50103],{"class":119},[102,50280,39935],{"class":187},[102,50282,1618],{"class":119},[102,50284,42735],{"class":187},[102,50286,50112],{"class":119},[102,50288,9823],{"class":187},[102,50290,1618],{"class":119},[102,50292,9241],{"class":187},[102,50294,50121],{"class":119},[102,50296,9241],{"class":187},[102,50298,45912],{"class":119},[102,50300,50301,50303,50305,50307,50309,50311,50313,50315,50318,50320,50322,50324,50326,50328,50330],{"class":104,"line":1529},[102,50302,50094],{"class":119},[102,50304,46322],{"class":187},[102,50306,1618],{"class":119},[102,50308,9645],{"class":187},[102,50310,50103],{"class":119},[102,50312,39935],{"class":187},[102,50314,1618],{"class":119},[102,50316,50317],{"class":187},"288",[102,50319,50112],{"class":119},[102,50321,9235],{"class":187},[102,50323,1618],{"class":119},[102,50325,9241],{"class":187},[102,50327,50121],{"class":119},[102,50329,9241],{"class":187},[102,50331,45912],{"class":119},[102,50333,50334,50336,50339,50341,50343,50345,50347,50349,50352,50354,50356,50358,50360,50362,50364],{"class":104,"line":1538},[102,50335,50094],{"class":119},[102,50337,50338],{"class":187},"528",[102,50340,1618],{"class":119},[102,50342,42735],{"class":187},[102,50344,50103],{"class":119},[102,50346,6640],{"class":187},[102,50348,1618],{"class":119},[102,50350,50351],{"class":187},"320",[102,50353,50112],{"class":119},[102,50355,9235],{"class":187},[102,50357,1618],{"class":119},[102,50359,39935],{"class":187},[102,50361,50121],{"class":119},[102,50363,39935],{"class":187},[102,50365,45912],{"class":119},[102,50367,50368,50370,50372,50374,50376,50378,50380,50382,50384,50386,50388,50390,50392],{"class":104,"line":2089},[102,50369,45962],{"class":119},[102,50371,38739],{"class":386},[102,50373,260],{"class":108},[102,50375,7049],{"class":187},[102,50377,1618],{"class":119},[102,50379,38794],{"class":386},[102,50381,260],{"class":108},[102,50383,7044],{"class":187},[102,50385,1618],{"class":119},[102,50387,38748],{"class":386},[102,50389,260],{"class":108},[102,50391,7039],{"class":187},[102,50393,390],{"class":119},[102,50395,50396],{"class":104,"line":2094},[102,50397,45991],{"class":119},[102,50399,50400,50402,50405,50407],{"class":104,"line":2100},[102,50401,38710],{"class":187},[102,50403,50404],{"class":119},".b5",[102,50406,260],{"class":108},[102,50408,45874],{"class":119},[102,50410,50411,50413,50416,50418,50420,50422,50424,50426,50428,50430,50432,50434,50436,50438,50440],{"class":104,"line":2106},[102,50412,50094],{"class":119},[102,50414,50415],{"class":187},"832",[102,50417,1618],{"class":119},[102,50419,42735],{"class":187},[102,50421,50103],{"class":119},[102,50423,6640],{"class":187},[102,50425,1618],{"class":119},[102,50427,50351],{"class":187},[102,50429,50112],{"class":119},[102,50431,9235],{"class":187},[102,50433,1618],{"class":119},[102,50435,39935],{"class":187},[102,50437,50121],{"class":119},[102,50439,39935],{"class":187},[102,50441,45912],{"class":119},[102,50443,50444,50446,50448,50450,50452,50454,50456,50458,50460,50462,50464,50466,50468,50470,50472],{"class":104,"line":2120},[102,50445,50094],{"class":119},[102,50447,50415],{"class":187},[102,50449,1618],{"class":119},[102,50451,42805],{"class":187},[102,50453,50103],{"class":119},[102,50455,50024],{"class":187},[102,50457,1618],{"class":119},[102,50459,42805],{"class":187},[102,50461,50112],{"class":119},[102,50463,9634],{"class":187},[102,50465,1618],{"class":119},[102,50467,39935],{"class":187},[102,50469,50121],{"class":119},[102,50471,39935],{"class":187},[102,50473,45912],{"class":119},[102,50475,50476,50479,50481,50483,50485],{"class":104,"line":2128},[102,50477,50478],{"class":119},"            nn.AdaptiveAvgPool2d((",[102,50480,7039],{"class":187},[102,50482,1618],{"class":119},[102,50484,7039],{"class":187},[102,50486,50487],{"class":119},")),\n",[102,50489,50490],{"class":104,"line":2149},[102,50491,46655],{"class":119},[102,50493,50494,50496,50499,50501,50503],{"class":104,"line":2161},[102,50495,46660],{"class":119},[102,50497,50498],{"class":187},"1024",[102,50500,1618],{"class":119},[102,50502,263],{"class":187},[102,50504,390],{"class":119},[102,50506,50507],{"class":104,"line":2167},[102,50508,45991],{"class":119},[102,50510,50511],{"class":104,"line":2190},[102,50512,50513],{"class":126},"        # 对模型参数初始化\n",[102,50515,50516,50518,50520,50522,50524],{"class":104,"line":2196},[102,50517,12217],{"class":108},[102,50519,46733],{"class":119},[102,50521,33908],{"class":108},[102,50523,46738],{"class":187},[102,50525,46741],{"class":119},[102,50527,50528,50530,50532],{"class":104,"line":2219},[102,50529,13451],{"class":108},[102,50531,46753],{"class":187},[102,50533,46756],{"class":119},[102,50535,50536,50538,50541,50543,50546,50548,50550,50552,50554],{"class":104,"line":2233},[102,50537,46766],{"class":119},[102,50539,50540],{"class":386},"mode",[102,50542,260],{"class":108},[102,50544,50545],{"class":278},"'fan_out'",[102,50547,1618],{"class":119},[102,50549,46769],{"class":386},[102,50551,260],{"class":108},[102,50553,46774],{"class":278},[102,50555,390],{"class":119},[102,50557,50558],{"class":104,"line":2253},[102,50559,50560],{"class":126},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[102,50562,50563],{"class":104,"line":2259},[102,50564,50565],{"class":126},"                # ② mode = 'fan_out'决定使用的fan值：\n",[102,50567,50568],{"class":104,"line":2270},[102,50569,50570],{"class":126},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[102,50572,50573],{"class":104,"line":2293},[102,50574,50575],{"class":126},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[102,50577,50578],{"class":104,"line":2315},[102,50579,50580],{"class":126},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[102,50582,50583],{"class":104,"line":2320},[102,50584,50585],{"class":126},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[102,50587,50588,50590,50592,50594,50596,50598],{"class":104,"line":2326},[102,50589,46786],{"class":108},[102,50591,46789],{"class":119},[102,50593,46792],{"class":108},[102,50595,46795],{"class":108},[102,50597,46798],{"class":187},[102,50599,12552],{"class":119},[102,50601,50602,50604,50606],{"class":104,"line":2340},[102,50603,46810],{"class":119},[102,50605,8423],{"class":187},[102,50607,390],{"class":119},[102,50609,50610,50613,50615],{"class":104,"line":2354},[102,50611,50612],{"class":108},"                elif",[102,50614,46753],{"class":187},[102,50616,46829],{"class":119},[102,50618,50619,50622,50624,50626,50628],{"class":104,"line":2359},[102,50620,50621],{"class":119},"                    nn.init.normal_(m.weight,",[102,50623,8423],{"class":187},[102,50625,1618],{"class":119},[102,50627,46851],{"class":187},[102,50629,390],{"class":119},[102,50631,50632,50635,50637,50639,50641,50643],{"class":104,"line":2373},[102,50633,50634],{"class":108},"                    if",[102,50636,46789],{"class":119},[102,50638,46792],{"class":108},[102,50640,46795],{"class":108},[102,50642,46798],{"class":187},[102,50644,12552],{"class":119},[102,50646,50647,50650,50652],{"class":104,"line":2378},[102,50648,50649],{"class":119},"                        nn.init.constant_(m.bias,",[102,50651,8423],{"class":187},[102,50653,390],{"class":119},[102,50655,50656],{"class":104,"line":2384},[102,50657,43030],{"class":126},[102,50659,50660,50662,50664],{"class":104,"line":2389},[102,50661,38666],{"class":108},[102,50663,38958],{"class":112},[102,50665,38961],{"class":119},[102,50667,50668,50670,50672,50674],{"class":104,"line":2403},[102,50669,38966],{"class":119},[102,50671,260],{"class":108},[102,50673,38688],{"class":187},[102,50675,50676],{"class":119},".b1(x)\n",[102,50678,50679,50681,50683,50685],{"class":104,"line":2408},[102,50680,38966],{"class":119},[102,50682,260],{"class":108},[102,50684,38688],{"class":187},[102,50686,50687],{"class":119},".b2(x)\n",[102,50689,50690,50692,50694,50696],{"class":104,"line":2413},[102,50691,38966],{"class":119},[102,50693,260],{"class":108},[102,50695,38688],{"class":187},[102,50697,50698],{"class":119},".b3(x)\n",[102,50700,50701,50703,50705,50707],{"class":104,"line":2427},[102,50702,38966],{"class":119},[102,50704,260],{"class":108},[102,50706,38688],{"class":187},[102,50708,50709],{"class":119},".b4(x)\n",[102,50711,50712,50714,50716,50718],{"class":104,"line":2440},[102,50713,38966],{"class":119},[102,50715,260],{"class":108},[102,50717,38688],{"class":187},[102,50719,50720],{"class":119},".b5(x)\n",[102,50722,50723,50725],{"class":104,"line":2445},[102,50724,184],{"class":108},[102,50726,39074],{"class":119},[102,50728,50729],{"class":104,"line":2458},[102,50730,652],{"emptyLinePlaceholder":651},[102,50732,50733],{"class":104,"line":2463},[102,50734,50735],{"class":126},"# 模型展示\n",[102,50737,50738,50740,50742,50744,50746],{"class":104,"line":2468},[102,50739,10407],{"class":108},[102,50741,39085],{"class":187},[102,50743,1876],{"class":108},[102,50745,39090],{"class":278},[102,50747,12552],{"class":119},[102,50749,50750,50752,50754,50756,50758,50760,50762,50764,50766],{"class":104,"line":2473},[102,50751,39102],{"class":119},[102,50753,260],{"class":108},[102,50755,38316],{"class":119},[102,50757,39109],{"class":278},[102,50759,10565],{"class":108},[102,50761,39114],{"class":119},[102,50763,10562],{"class":108},[102,50765,38341],{"class":278},[102,50767,390],{"class":119},[102,50769,50770,50772,50774],{"class":104,"line":2486},[102,50771,39154],{"class":119},[102,50773,260],{"class":108},[102,50775,50776],{"class":119},"GoogLeNet(Inception).to(device)\n",[102,50778,50779,50781,50783,50785,50787,50789,50791,50793],{"class":104,"line":2491},[102,50780,39164],{"class":187},[102,50782,39167],{"class":119},[102,50784,7039],{"class":187},[102,50786,1618],{"class":119},[102,50788,39366],{"class":187},[102,50790,1618],{"class":119},[102,50792,39366],{"class":187},[102,50794,39180],{"class":119},[87,50796,50797],{"start":116},[62,50798,47048],{},[93,50800,50802],{"className":38243,"code":50801,"language":38245,"meta":98,"style":98},"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",[83,50803,50804,50810,50816,50826,50832,50842,50852,50862,50872,50882,50886,50897,50907,50911,50915,50919,50927,50939,50949,50965,50975,51007,51021,51031,51041,51045,51055,51069,51079,51089,51099,51105,51109,51113,51117,51121,51125,51133,51153,51157,51161,51165,51169,51173,51189,51193,51197,51205,51209,51213,51221,51225,51229,51233,51241,51245,51249,51253,51257,51265,51269,51277,51281,51289,51293,51301,51305,51313,51317,51321,51329,51333,51337,51341,51353,51377,51391,51395,51399,51403,51411,51415,51423,51427,51435,51439,51447,51451,51459,51463,51471,51475,51487,51491,51499,51503,51511,51515,51519,51523,51527,51535,51539,51555,51559,51567,51571,51575,51579,51583,51587,51591,51595,51611,51615,51627,51631,51643,51647,51659,51663,51671,51675,51683,51687,51691,51695,51701,51705,51713,51717,51733,51737,51745,51749,51765,51777,51781,51793,51797,51801,51809,51813,51817,51825,51829,51837,51841,51849,51853,51857,51899,51941,51945,51949,51965,51969,51985,51989,51993,52001,52005,52009,52021,52059,52063,52067,52075,52079,52093,52103,52109,52115,52121,52127,52131,52135,52141,52145,52149,52157,52161,52179,52183,52187,52191,52207,52211,52215,52219,52223,52227,52247,52267,52271,52275,52279,52287,52295,52299,52315,52335,52355,52359,52363,52371,52379,52383,52387,52391,52403,52407,52417,52425,52442],{"__ignoreMap":98},[102,50805,50806,50808],{"class":104,"line":105},[102,50807,38257],{"class":108},[102,50809,39687],{"class":119},[102,50811,50812,50814],{"class":104,"line":116},[102,50813,38257],{"class":108},[102,50815,39694],{"class":119},[102,50817,50818,50820,50822,50824],{"class":104,"line":123},[102,50819,38257],{"class":108},[102,50821,39705],{"class":119},[102,50823,39248],{"class":108},[102,50825,39710],{"class":119},[102,50827,50828,50830],{"class":104,"line":130},[102,50829,38257],{"class":108},[102,50831,38260],{"class":119},[102,50833,50834,50836,50838,50840],{"class":104,"line":136},[102,50835,38602],{"class":108},[102,50837,39280],{"class":119},[102,50839,38257],{"class":108},[102,50841,39727],{"class":119},[102,50843,50844,50846,50848,50850],{"class":104,"line":142},[102,50845,38602],{"class":108},[102,50847,39233],{"class":119},[102,50849,38257],{"class":108},[102,50851,39238],{"class":119},[102,50853,50854,50856,50858,50860],{"class":104,"line":148},[102,50855,38602],{"class":108},[102,50857,39263],{"class":119},[102,50859,38257],{"class":108},[102,50861,39268],{"class":119},[102,50863,50864,50866,50868,50870],{"class":104,"line":157},[102,50865,38257],{"class":108},[102,50867,39280],{"class":119},[102,50869,39248],{"class":108},[102,50871,39285],{"class":119},[102,50873,50874,50876,50878,50880],{"class":104,"line":163},[102,50875,38257],{"class":108},[102,50877,39297],{"class":119},[102,50879,39248],{"class":108},[102,50881,39302],{"class":119},[102,50883,50884],{"class":104,"line":175},[102,50885,39772],{"class":126},[102,50887,50888,50890,50892,50894],{"class":104,"line":181},[102,50889,38602],{"class":108},[102,50891,39779],{"class":119},[102,50893,38257],{"class":108},[102,50895,50896],{"class":119}," GoogLeNet, Inception\n",[102,50898,50899,50901,50903,50905],{"class":104,"line":202},[102,50900,38602],{"class":108},[102,50902,38605],{"class":119},[102,50904,38257],{"class":108},[102,50906,38610],{"class":119},[102,50908,50909],{"class":104,"line":208},[102,50910,652],{"emptyLinePlaceholder":651},[102,50912,50913],{"class":104,"line":214},[102,50914,652],{"emptyLinePlaceholder":651},[102,50916,50917],{"class":104,"line":225},[102,50918,39807],{"class":126},[102,50920,50921,50923,50925],{"class":104,"line":230},[102,50922,39812],{"class":108},[102,50924,39815],{"class":112},[102,50926,39818],{"class":119},[102,50928,50929,50931,50933,50935,50937],{"class":104,"line":236},[102,50930,39823],{"class":119},[102,50932,260],{"class":108},[102,50934,39320],{"class":119},[102,50936,39328],{"class":278},[102,50938,39331],{"class":119},[102,50940,50941,50943,50945,50947],{"class":104,"line":242},[102,50942,39836],{"class":386},[102,50944,260],{"class":108},[102,50946,39341],{"class":187},[102,50948,39331],{"class":119},[102,50950,50951,50953,50955,50957,50959,50961,50963],{"class":104,"line":248},[102,50952,39847],{"class":386},[102,50954,260],{"class":108},[102,50956,39358],{"class":119},[102,50958,39361],{"class":386},[102,50960,260],{"class":108},[102,50962,43314],{"class":187},[102,50964,39369],{"class":119},[102,50966,50967,50969,50971,50973],{"class":104,"line":254},[102,50968,39864],{"class":386},[102,50970,260],{"class":108},[102,50972,39341],{"class":187},[102,50974,390],{"class":119},[102,50976,50977,50979,50981,50983,50985,50987,50989,50991,50993,50995,50997,50999,51001,51003,51005],{"class":104,"line":269},[102,50978,39875],{"class":119},[102,50980,260],{"class":108},[102,50982,39880],{"class":119},[102,50984,39883],{"class":187},[102,50986,380],{"class":119},[102,50988,39888],{"class":187},[102,50990,191],{"class":108},[102,50992,16145],{"class":187},[102,50994,39895],{"class":119},[102,50996,39883],{"class":187},[102,50998,380],{"class":119},[102,51000,39902],{"class":187},[102,51002,191],{"class":108},[102,51004,16145],{"class":187},[102,51006,39909],{"class":119},[102,51008,51009,51011,51013,51015,51017,51019],{"class":104,"line":298},[102,51010,39914],{"class":119},[102,51012,260],{"class":108},[102,51014,39919],{"class":119},[102,51016,39402],{"class":386},[102,51018,260],{"class":108},[102,51020,39407],{"class":119},[102,51022,51023,51025,51027,51029],{"class":104,"line":502},[102,51024,39930],{"class":386},[102,51026,260],{"class":108},[102,51028,9235],{"class":187},[102,51030,39331],{"class":119},[102,51032,51033,51035,51037,51039],{"class":104,"line":507},[102,51034,39942],{"class":386},[102,51036,260],{"class":108},[102,51038,39341],{"class":187},[102,51040,39331],{"class":119},[102,51042,51043],{"class":104,"line":512},[102,51044,39953],{"class":126},[102,51046,51047,51049,51051,51053],{"class":104,"line":521},[102,51048,39958],{"class":386},[102,51050,260],{"class":108},[102,51052,9428],{"class":187},[102,51054,390],{"class":119},[102,51056,51057,51059,51061,51063,51065,51067],{"class":104,"line":526},[102,51058,39969],{"class":119},[102,51060,260],{"class":108},[102,51062,39399],{"class":119},[102,51064,39402],{"class":386},[102,51066,260],{"class":108},[102,51068,39980],{"class":119},[102,51070,51071,51073,51075,51077],{"class":104,"line":532},[102,51072,39985],{"class":386},[102,51074,260],{"class":108},[102,51076,9235],{"class":187},[102,51078,39331],{"class":119},[102,51080,51081,51083,51085,51087],{"class":104,"line":538},[102,51082,39996],{"class":386},[102,51084,260],{"class":108},[102,51086,39341],{"class":187},[102,51088,39331],{"class":119},[102,51090,51091,51093,51095,51097],{"class":104,"line":555},[102,51092,40007],{"class":386},[102,51094,260],{"class":108},[102,51096,9428],{"class":187},[102,51098,390],{"class":119},[102,51100,51101,51103],{"class":104,"line":570},[102,51102,863],{"class":108},[102,51104,40020],{"class":119},[102,51106,51107],{"class":104,"line":581},[102,51108,652],{"emptyLinePlaceholder":651},[102,51110,51111],{"class":104,"line":819},[102,51112,40029],{"class":126},[102,51114,51115],{"class":104,"line":828},[102,51116,40034],{"class":126},[102,51118,51119],{"class":104,"line":837},[102,51120,652],{"emptyLinePlaceholder":651},[102,51122,51123],{"class":104,"line":842},[102,51124,40043],{"class":126},[102,51126,51127,51129,51131],{"class":104,"line":855},[102,51128,39812],{"class":108},[102,51130,40050],{"class":112},[102,51132,40053],{"class":119},[102,51134,51135,51137,51139,51141,51143,51145,51147,51149,51151],{"class":104,"line":860},[102,51136,39102],{"class":119},[102,51138,260],{"class":108},[102,51140,38316],{"class":119},[102,51142,39109],{"class":278},[102,51144,10565],{"class":108},[102,51146,39114],{"class":119},[102,51148,10562],{"class":108},[102,51150,40072],{"class":278},[102,51152,390],{"class":119},[102,51154,51155],{"class":104,"line":871},[102,51156,652],{"emptyLinePlaceholder":651},[102,51158,51159],{"class":104,"line":1359},[102,51160,652],{"emptyLinePlaceholder":651},[102,51162,51163],{"class":104,"line":1368},[102,51164,40087],{"class":126},[102,51166,51167],{"class":104,"line":1373},[102,51168,40092],{"class":126},[102,51170,51171],{"class":104,"line":1378},[102,51172,40097],{"class":126},[102,51174,51175,51177,51179,51181,51183,51185,51187],{"class":104,"line":1384},[102,51176,40102],{"class":119},[102,51178,260],{"class":108},[102,51180,40107],{"class":119},[102,51182,40110],{"class":386},[102,51184,260],{"class":108},[102,51186,40115],{"class":187},[102,51188,390],{"class":119},[102,51190,51191],{"class":104,"line":1398},[102,51192,652],{"emptyLinePlaceholder":651},[102,51194,51195],{"class":104,"line":1424},[102,51196,40126],{"class":126},[102,51198,51199,51201,51203],{"class":104,"line":1429},[102,51200,40131],{"class":119},[102,51202,260],{"class":108},[102,51204,40136],{"class":119},[102,51206,51207],{"class":104,"line":1435},[102,51208,652],{"emptyLinePlaceholder":651},[102,51210,51211],{"class":104,"line":1450},[102,51212,40145],{"class":126},[102,51214,51215,51217,51219],{"class":104,"line":1473},[102,51216,39154],{"class":119},[102,51218,260],{"class":108},[102,51220,40154],{"class":119},[102,51222,51223],{"class":104,"line":1478},[102,51224,40159],{"class":126},[102,51226,51227],{"class":104,"line":1484},[102,51228,40164],{"class":126},[102,51230,51231],{"class":104,"line":1499},[102,51232,40169],{"class":126},[102,51234,51235,51237,51239],{"class":104,"line":1508},[102,51236,40174],{"class":119},[102,51238,260],{"class":108},[102,51240,40179],{"class":119},[102,51242,51243],{"class":104,"line":1513},[102,51244,652],{"emptyLinePlaceholder":651},[102,51246,51247],{"class":104,"line":1524},[102,51248,652],{"emptyLinePlaceholder":651},[102,51250,51251],{"class":104,"line":1529},[102,51252,40192],{"class":126},[102,51254,51255],{"class":104,"line":1538},[102,51256,40197],{"class":126},[102,51258,51259,51261,51263],{"class":104,"line":2089},[102,51260,40202],{"class":119},[102,51262,260],{"class":108},[102,51264,40207],{"class":187},[102,51266,51267],{"class":104,"line":2094},[102,51268,40212],{"class":126},[102,51270,51271,51273,51275],{"class":104,"line":2100},[102,51272,40217],{"class":119},[102,51274,260],{"class":108},[102,51276,40222],{"class":119},[102,51278,51279],{"class":104,"line":2106},[102,51280,40227],{"class":126},[102,51282,51283,51285,51287],{"class":104,"line":2120},[102,51284,40232],{"class":119},[102,51286,260],{"class":108},[102,51288,40222],{"class":119},[102,51290,51291],{"class":104,"line":2128},[102,51292,40241],{"class":126},[102,51294,51295,51297,51299],{"class":104,"line":2149},[102,51296,40246],{"class":119},[102,51298,260],{"class":108},[102,51300,40222],{"class":119},[102,51302,51303],{"class":104,"line":2161},[102,51304,40255],{"class":126},[102,51306,51307,51309,51311],{"class":104,"line":2167},[102,51308,40260],{"class":119},[102,51310,260],{"class":108},[102,51312,40222],{"class":119},[102,51314,51315],{"class":104,"line":2190},[102,51316,652],{"emptyLinePlaceholder":651},[102,51318,51319],{"class":104,"line":2196},[102,51320,40273],{"class":126},[102,51322,51323,51325,51327],{"class":104,"line":2219},[102,51324,40278],{"class":119},[102,51326,260],{"class":108},[102,51328,40283],{"class":119},[102,51330,51331],{"class":104,"line":2233},[102,51332,652],{"emptyLinePlaceholder":651},[102,51334,51335],{"class":104,"line":2253},[102,51336,652],{"emptyLinePlaceholder":651},[102,51338,51339],{"class":104,"line":2259},[102,51340,40296],{"class":126},[102,51342,51343,51345,51347,51349,51351],{"class":104,"line":2270},[102,51344,12016],{"class":108},[102,51346,40303],{"class":119},[102,51348,33908],{"class":108},[102,51350,40308],{"class":187},[102,51352,40311],{"class":119},[102,51354,51355,51357,51359,51361,51363,51365,51367,51369,51371,51373,51375],{"class":104,"line":2293},[102,51356,40316],{"class":187},[102,51358,380],{"class":119},[102,51360,40321],{"class":278},[102,51362,40324],{"class":187},[102,51364,9611],{"class":278},[102,51366,40324],{"class":187},[102,51368,9288],{"class":278},[102,51370,40333],{"class":119},[102,51372,2833],{"class":108},[102,51374,7039],{"class":187},[102,51376,38362],{"class":119},[102,51378,51379,51381,51383,51385,51387,51389],{"class":104,"line":2315},[102,51380,40316],{"class":187},[102,51382,380],{"class":119},[102,51384,40348],{"class":278},[102,51386,191],{"class":108},[102,51388,263],{"class":187},[102,51390,390],{"class":119},[102,51392,51393],{"class":104,"line":2320},[102,51394,652],{"emptyLinePlaceholder":651},[102,51396,51397],{"class":104,"line":2326},[102,51398,40363],{"class":126},[102,51400,51401],{"class":104,"line":2340},[102,51402,40368],{"class":126},[102,51404,51405,51407,51409],{"class":104,"line":2354},[102,51406,40373],{"class":119},[102,51408,260],{"class":108},[102,51410,40207],{"class":187},[102,51412,51413],{"class":104,"line":2359},[102,51414,40382],{"class":126},[102,51416,51417,51419,51421],{"class":104,"line":2373},[102,51418,40387],{"class":119},[102,51420,260],{"class":108},[102,51422,11901],{"class":187},[102,51424,51425],{"class":104,"line":2378},[102,51426,40396],{"class":126},[102,51428,51429,51431,51433],{"class":104,"line":2384},[102,51430,40401],{"class":119},[102,51432,260],{"class":108},[102,51434,40207],{"class":187},[102,51436,51437],{"class":104,"line":2389},[102,51438,40410],{"class":126},[102,51440,51441,51443,51445],{"class":104,"line":2403},[102,51442,40415],{"class":119},[102,51444,260],{"class":108},[102,51446,11901],{"class":187},[102,51448,51449],{"class":104,"line":2408},[102,51450,40424],{"class":126},[102,51452,51453,51455,51457],{"class":104,"line":2413},[102,51454,40429],{"class":119},[102,51456,260],{"class":108},[102,51458,11901],{"class":187},[102,51460,51461],{"class":104,"line":2427},[102,51462,40438],{"class":126},[102,51464,51465,51467,51469],{"class":104,"line":2440},[102,51466,40443],{"class":119},[102,51468,260],{"class":108},[102,51470,11901],{"class":187},[102,51472,51473],{"class":104,"line":2445},[102,51474,40452],{"class":126},[102,51476,51477,51479,51481,51483,51485],{"class":104,"line":2458},[102,51478,12217],{"class":108},[102,51480,39466],{"class":119},[102,51482,33908],{"class":108},[102,51484,39471],{"class":187},[102,51486,40465],{"class":119},[102,51488,51489],{"class":104,"line":2463},[102,51490,40470],{"class":126},[102,51492,51493,51495,51497],{"class":104,"line":2468},[102,51494,40475],{"class":119},[102,51496,260],{"class":108},[102,51498,40480],{"class":119},[102,51500,51501],{"class":104,"line":2473},[102,51502,40485],{"class":126},[102,51504,51505,51507,51509],{"class":104,"line":2486},[102,51506,40490],{"class":119},[102,51508,260],{"class":108},[102,51510,40495],{"class":119},[102,51512,51513],{"class":104,"line":2491},[102,51514,40501],{"class":126},[102,51516,51517],{"class":104,"line":40498},[102,51518,40507],{"class":119},[102,51520,51521],{"class":104,"line":40504},[102,51522,40513],{"class":126},[102,51524,51525],{"class":104,"line":40510},[102,51526,40519],{"class":126},[102,51528,51529,51531,51533],{"class":104,"line":40516},[102,51530,40525],{"class":119},[102,51532,260],{"class":108},[102,51534,40530],{"class":119},[102,51536,51537],{"class":104,"line":40522},[102,51538,40536],{"class":126},[102,51540,51541,51543,51545,51547,51549,51551,51553],{"class":104,"line":40533},[102,51542,40542],{"class":119},[102,51544,260],{"class":108},[102,51546,40547],{"class":119},[102,51548,40550],{"class":386},[102,51550,260],{"class":108},[102,51552,7039],{"class":187},[102,51554,390],{"class":119},[102,51556,51557],{"class":104,"line":40539},[102,51558,40562],{"class":126},[102,51560,51561,51563,51565],{"class":104,"line":40559},[102,51562,40568],{"class":119},[102,51564,260],{"class":108},[102,51566,40573],{"class":119},[102,51568,51569],{"class":104,"line":40565},[102,51570,40579],{"class":126},[102,51572,51573],{"class":104,"line":40576},[102,51574,40585],{"class":119},[102,51576,51577],{"class":104,"line":40582},[102,51578,40591],{"class":126},[102,51580,51581],{"class":104,"line":40588},[102,51582,40597],{"class":119},[102,51584,51585],{"class":104,"line":40594},[102,51586,40603],{"class":126},[102,51588,51589],{"class":104,"line":40600},[102,51590,40609],{"class":119},[102,51592,51593],{"class":104,"line":40606},[102,51594,40615],{"class":126},[102,51596,51597,51599,51601,51603,51605,51607,51609],{"class":104,"line":40612},[102,51598,40621],{"class":119},[102,51600,18244],{"class":108},[102,51602,40626],{"class":119},[102,51604,191],{"class":108},[102,51606,40631],{"class":119},[102,51608,8423],{"class":187},[102,51610,390],{"class":119},[102,51612,51613],{"class":104,"line":40618},[102,51614,40641],{"class":126},[102,51616,51617,51619,51621,51623,51625],{"class":104,"line":40638},[102,51618,40647],{"class":119},[102,51620,18244],{"class":108},[102,51622,40652],{"class":119},[102,51624,1876],{"class":108},[102,51626,40657],{"class":119},[102,51628,51629],{"class":104,"line":40644},[102,51630,40663],{"class":126},[102,51632,51633,51635,51637,51639,51641],{"class":104,"line":40660},[102,51634,40669],{"class":119},[102,51636,18244],{"class":108},[102,51638,40631],{"class":119},[102,51640,8423],{"class":187},[102,51642,390],{"class":119},[102,51644,51645],{"class":104,"line":40666},[102,51646,40683],{"class":126},[102,51648,51649,51651,51653,51655,51657],{"class":104,"line":40680},[102,51650,12217],{"class":108},[102,51652,40691],{"class":119},[102,51654,33908],{"class":108},[102,51656,39471],{"class":187},[102,51658,40698],{"class":119},[102,51660,51661],{"class":104,"line":40686},[102,51662,40704],{"class":126},[102,51664,51665,51667,51669],{"class":104,"line":40701},[102,51666,40475],{"class":119},[102,51668,260],{"class":108},[102,51670,40480],{"class":119},[102,51672,51673],{"class":104,"line":40707},[102,51674,40719],{"class":126},[102,51676,51677,51679,51681],{"class":104,"line":40716},[102,51678,40490],{"class":119},[102,51680,260],{"class":108},[102,51682,40495],{"class":119},[102,51684,51685],{"class":104,"line":40722},[102,51686,40734],{"class":126},[102,51688,51689],{"class":104,"line":40731},[102,51690,40740],{"class":119},[102,51692,51693],{"class":104,"line":40737},[102,51694,44221],{"class":126},[102,51696,51697,51699],{"class":104,"line":40743},[102,51698,40746],{"class":108},[102,51700,40749],{"class":119},[102,51702,51703],{"class":104,"line":40752},[102,51704,40755],{"class":126},[102,51706,51707,51709,51711],{"class":104,"line":40758},[102,51708,44236],{"class":119},[102,51710,260],{"class":108},[102,51712,40530],{"class":119},[102,51714,51715],{"class":104,"line":40769},[102,51716,40772],{"class":126},[102,51718,51719,51721,51723,51725,51727,51729,51731],{"class":104,"line":40775},[102,51720,44249],{"class":119},[102,51722,260],{"class":108},[102,51724,40547],{"class":119},[102,51726,40550],{"class":386},[102,51728,260],{"class":108},[102,51730,7039],{"class":187},[102,51732,390],{"class":119},[102,51734,51735],{"class":104,"line":40794},[102,51736,40797],{"class":126},[102,51738,51739,51741,51743],{"class":104,"line":40800},[102,51740,44270],{"class":119},[102,51742,260],{"class":108},[102,51744,40573],{"class":119},[102,51746,51747],{"class":104,"line":40811},[102,51748,40814],{"class":126},[102,51750,51751,51753,51755,51757,51759,51761,51763],{"class":104,"line":40817},[102,51752,44283],{"class":119},[102,51754,18244],{"class":108},[102,51756,44288],{"class":119},[102,51758,191],{"class":108},[102,51760,40631],{"class":119},[102,51762,8423],{"class":187},[102,51764,390],{"class":119},[102,51766,51767,51769,51771,51773,51775],{"class":104,"line":40837},[102,51768,44301],{"class":119},[102,51770,18244],{"class":108},[102,51772,40652],{"class":119},[102,51774,1876],{"class":108},[102,51776,40657],{"class":119},[102,51778,51779],{"class":104,"line":40853},[102,51780,44314],{"class":126},[102,51782,51783,51785,51787,51789,51791],{"class":104,"line":40859},[102,51784,44319],{"class":119},[102,51786,18244],{"class":108},[102,51788,40631],{"class":119},[102,51790,8423],{"class":187},[102,51792,390],{"class":119},[102,51794,51795],{"class":104,"line":40873},[102,51796,40876],{"class":126},[102,51798,51799],{"class":104,"line":40879},[102,51800,40882],{"class":126},[102,51802,51803,51805,51807],{"class":104,"line":40885},[102,51804,40888],{"class":119},[102,51806,9611],{"class":108},[102,51808,40893],{"class":119},[102,51810,51811],{"class":104,"line":40896},[102,51812,40899],{"class":126},[102,51814,51815],{"class":104,"line":40902},[102,51816,40905],{"class":126},[102,51818,51819,51821,51823],{"class":104,"line":40908},[102,51820,40911],{"class":119},[102,51822,9611],{"class":108},[102,51824,40893],{"class":119},[102,51826,51827],{"class":104,"line":40918},[102,51828,40921],{"class":126},[102,51830,51831,51833,51835],{"class":104,"line":40924},[102,51832,40927],{"class":119},[102,51834,9611],{"class":108},[102,51836,40932],{"class":119},[102,51838,51839],{"class":104,"line":40935},[102,51840,40938],{"class":126},[102,51842,51843,51845,51847],{"class":104,"line":40941},[102,51844,40944],{"class":119},[102,51846,9611],{"class":108},[102,51848,40932],{"class":119},[102,51850,51851],{"class":104,"line":40951},[102,51852,652],{"emptyLinePlaceholder":651},[102,51854,51855],{"class":104,"line":40956},[102,51856,40959],{"class":126},[102,51858,51859,51861,51863,51865,51867,51869,51871,51873,51875,51877,51879,51881,51883,51885,51887,51889,51891,51893,51895,51897],{"class":104,"line":40962},[102,51860,40316],{"class":187},[102,51862,380],{"class":119},[102,51864,12405],{"class":278},[102,51866,40324],{"class":187},[102,51868,40973],{"class":278},[102,51870,9918],{"class":187},[102,51872,40978],{"class":108},[102,51874,9967],{"class":187},[102,51876,40983],{"class":278},[102,51878,9918],{"class":187},[102,51880,40978],{"class":108},[102,51882,9967],{"class":187},[102,51884,12405],{"class":278},[102,51886,40994],{"class":119},[102,51888,2833],{"class":108},[102,51890,7039],{"class":187},[102,51892,41001],{"class":119},[102,51894,2833],{"class":108},[102,51896,7039],{"class":187},[102,51898,41008],{"class":119},[102,51900,51901,51903,51905,51907,51909,51911,51913,51915,51917,51919,51921,51923,51925,51927,51929,51931,51933,51935,51937,51939],{"class":104,"line":41011},[102,51902,40316],{"class":187},[102,51904,380],{"class":119},[102,51906,12405],{"class":278},[102,51908,40324],{"class":187},[102,51910,41022],{"class":278},[102,51912,9918],{"class":187},[102,51914,40978],{"class":108},[102,51916,9967],{"class":187},[102,51918,41031],{"class":278},[102,51920,9918],{"class":187},[102,51922,40978],{"class":108},[102,51924,9967],{"class":187},[102,51926,12405],{"class":278},[102,51928,41042],{"class":119},[102,51930,2833],{"class":108},[102,51932,7039],{"class":187},[102,51934,41049],{"class":119},[102,51936,2833],{"class":108},[102,51938,7039],{"class":187},[102,51940,41008],{"class":119},[102,51942,51943],{"class":104,"line":41058},[102,51944,652],{"emptyLinePlaceholder":651},[102,51946,51947],{"class":104,"line":41063},[102,51948,41066],{"class":126},[102,51950,51951,51953,51955,51957,51959,51961,51963],{"class":104,"line":41069},[102,51952,1202],{"class":108},[102,51954,41074],{"class":119},[102,51956,2833],{"class":108},[102,51958,7039],{"class":187},[102,51960,9961],{"class":119},[102,51962,1219],{"class":108},[102,51964,41085],{"class":119},[102,51966,51967],{"class":104,"line":41088},[102,51968,41091],{"class":126},[102,51970,51971,51973,51975,51977,51979,51981,51983],{"class":104,"line":41094},[102,51972,41097],{"class":119},[102,51974,9086],{"class":187},[102,51976,260],{"class":108},[102,51978,41104],{"class":119},[102,51980,2833],{"class":108},[102,51982,7039],{"class":187},[102,51984,41111],{"class":119},[102,51986,51987],{"class":104,"line":41114},[102,51988,41117],{"class":126},[102,51990,51991],{"class":104,"line":41120},[102,51992,41123],{"class":126},[102,51994,51995,51997,51999],{"class":104,"line":41126},[102,51996,41129],{"class":119},[102,51998,260],{"class":108},[102,52000,40179],{"class":119},[102,52002,52003],{"class":104,"line":41136},[102,52004,652],{"emptyLinePlaceholder":651},[102,52006,52007],{"class":104,"line":41141},[102,52008,41144],{"class":126},[102,52010,52011,52013,52015,52017,52019],{"class":104,"line":41147},[102,52012,41150],{"class":119},[102,52014,260],{"class":108},[102,52016,41155],{"class":119},[102,52018,2833],{"class":108},[102,52020,41160],{"class":119},[102,52022,52023,52025,52027,52029,52031,52033,52035,52037,52039,52041,52043,52045,52047,52049,52051,52053,52055,52057],{"class":104,"line":41163},[102,52024,40316],{"class":187},[102,52026,380],{"class":119},[102,52028,41170],{"class":278},[102,52030,9918],{"class":187},[102,52032,41175],{"class":108},[102,52034,9967],{"class":187},[102,52036,9571],{"class":278},[102,52038,9918],{"class":187},[102,52040,41175],{"class":108},[102,52042,9967],{"class":187},[102,52044,41188],{"class":278},[102,52046,41191],{"class":119},[102,52048,41194],{"class":108},[102,52050,9929],{"class":187},[102,52052,41199],{"class":119},[102,52054,9363],{"class":108},[102,52056,9929],{"class":187},[102,52058,38362],{"class":119},[102,52060,52061],{"class":104,"line":41208},[102,52062,44598],{"class":126},[102,52064,52065],{"class":104,"line":41214},[102,52066,44603],{"class":126},[102,52068,52069,52071,52073],{"class":104,"line":41220},[102,52070,44608],{"class":119},[102,52072,41232],{"class":278},[102,52074,390],{"class":119},[102,52076,52077],{"class":104,"line":41226},[102,52078,41252],{"class":126},[102,52080,52081,52083,52085,52087,52089,52091],{"class":104,"line":41237},[102,52082,41258],{"class":119},[102,52084,260],{"class":108},[102,52086,41263],{"class":119},[102,52088,41266],{"class":386},[102,52090,260],{"class":108},[102,52092,120],{"class":119},[102,52094,52095,52097,52099,52101],{"class":104,"line":41243},[102,52096,41276],{"class":278},[102,52098,9881],{"class":119},[102,52100,41281],{"class":187},[102,52102,41284],{"class":119},[102,52104,52105,52107],{"class":104,"line":41249},[102,52106,41290],{"class":278},[102,52108,41293],{"class":119},[102,52110,52111,52113],{"class":104,"line":41255},[102,52112,41299],{"class":278},[102,52114,41302],{"class":119},[102,52116,52117,52119],{"class":104,"line":41273},[102,52118,41308],{"class":278},[102,52120,41311],{"class":119},[102,52122,52123,52125],{"class":104,"line":41287},[102,52124,41317],{"class":278},[102,52126,41320],{"class":119},[102,52128,52129],{"class":104,"line":41296},[102,52130,41326],{"class":119},[102,52132,52133],{"class":104,"line":41305},[102,52134,41332],{"class":126},[102,52136,52137,52139],{"class":104,"line":41314},[102,52138,863],{"class":108},[102,52140,41340],{"class":119},[102,52142,52143],{"class":104,"line":41323},[102,52144,652],{"emptyLinePlaceholder":651},[102,52146,52147],{"class":104,"line":41329},[102,52148,41351],{"class":126},[102,52150,52151,52153,52155],{"class":104,"line":41335},[102,52152,39812],{"class":108},[102,52154,41359],{"class":112},[102,52156,41362],{"class":119},[102,52158,52159],{"class":104,"line":41343},[102,52160,41368],{"class":126},[102,52162,52163,52165,52167,52169,52171,52173,52175,52177],{"class":104,"line":41348},[102,52164,41374],{"class":119},[102,52166,39558],{"class":386},[102,52168,260],{"class":108},[102,52170,380],{"class":119},[102,52172,9527],{"class":187},[102,52174,1618],{"class":119},[102,52176,9329],{"class":187},[102,52178,38362],{"class":119},[102,52180,52181],{"class":104,"line":41354},[102,52182,41394],{"class":126},[102,52184,52185],{"class":104,"line":41365},[102,52186,41400],{"class":126},[102,52188,52189],{"class":104,"line":41371},[102,52190,41406],{"class":126},[102,52192,52193,52195,52197,52199,52201,52203,52205],{"class":104,"line":41391},[102,52194,39592],{"class":119},[102,52196,7039],{"class":187},[102,52198,1618],{"class":119},[102,52200,7044],{"class":187},[102,52202,1618],{"class":119},[102,52204,7039],{"class":187},[102,52206,390],{"class":119},[102,52208,52209],{"class":104,"line":41397},[102,52210,41429],{"class":126},[102,52212,52213],{"class":104,"line":41403},[102,52214,41435],{"class":126},[102,52216,52217],{"class":104,"line":41409},[102,52218,41441],{"class":126},[102,52220,52221],{"class":104,"line":41426},[102,52222,41447],{"class":126},[102,52224,52225],{"class":104,"line":41432},[102,52226,41453],{"class":126},[102,52228,52229,52231,52233,52235,52237,52239,52241,52243,52245],{"class":104,"line":41438},[102,52230,41459],{"class":119},[102,52232,41462],{"class":278},[102,52234,41465],{"class":119},[102,52236,41468],{"class":278},[102,52238,1618],{"class":119},[102,52240,41473],{"class":386},[102,52242,260],{"class":108},[102,52244,41478],{"class":278},[102,52246,390],{"class":119},[102,52248,52249,52251,52253,52255,52257,52259,52261,52263,52265],{"class":104,"line":41444},[102,52250,41459],{"class":119},[102,52252,41462],{"class":278},[102,52254,41490],{"class":119},[102,52256,41493],{"class":278},[102,52258,1618],{"class":119},[102,52260,41473],{"class":386},[102,52262,260],{"class":108},[102,52264,41502],{"class":278},[102,52266,390],{"class":119},[102,52268,52269],{"class":104,"line":41450},[102,52270,41510],{"class":126},[102,52272,52273],{"class":104,"line":41456},[102,52274,41516],{"class":119},[102,52276,52277],{"class":104,"line":41483},[102,52278,41522],{"class":126},[102,52280,52281,52283,52285],{"class":104,"line":41507},[102,52282,41528],{"class":119},[102,52284,41531],{"class":278},[102,52286,390],{"class":119},[102,52288,52289,52291,52293],{"class":104,"line":41513},[102,52290,41539],{"class":119},[102,52292,41542],{"class":278},[102,52294,390],{"class":119},[102,52296,52297],{"class":104,"line":41519},[102,52298,41550],{"class":126},[102,52300,52301,52303,52305,52307,52309,52311,52313],{"class":104,"line":41525},[102,52302,39592],{"class":119},[102,52304,7039],{"class":187},[102,52306,1618],{"class":119},[102,52308,7044],{"class":187},[102,52310,1618],{"class":119},[102,52312,7044],{"class":187},[102,52314,390],{"class":119},[102,52316,52317,52319,52321,52323,52325,52327,52329,52331,52333],{"class":104,"line":41536},[102,52318,41459],{"class":119},[102,52320,41462],{"class":278},[102,52322,41577],{"class":119},[102,52324,41468],{"class":278},[102,52326,1618],{"class":119},[102,52328,41473],{"class":386},[102,52330,260],{"class":108},[102,52332,41588],{"class":278},[102,52334,390],{"class":119},[102,52336,52337,52339,52341,52343,52345,52347,52349,52351,52353],{"class":104,"line":41547},[102,52338,41459],{"class":119},[102,52340,41462],{"class":278},[102,52342,41600],{"class":119},[102,52344,41493],{"class":278},[102,52346,1618],{"class":119},[102,52348,41473],{"class":386},[102,52350,260],{"class":108},[102,52352,41611],{"class":278},[102,52354,390],{"class":119},[102,52356,52357],{"class":104,"line":41553},[102,52358,41619],{"class":126},[102,52360,52361],{"class":104,"line":41570},[102,52362,41516],{"class":119},[102,52364,52365,52367,52369],{"class":104,"line":41593},[102,52366,41528],{"class":119},[102,52368,41462],{"class":278},[102,52370,390],{"class":119},[102,52372,52373,52375,52377],{"class":104,"line":41616},[102,52374,41539],{"class":119},[102,52376,41641],{"class":278},[102,52378,390],{"class":119},[102,52380,52381],{"class":104,"line":41622},[102,52382,41649],{"class":119},[102,52384,52385],{"class":104,"line":41627},[102,52386,652],{"emptyLinePlaceholder":651},[102,52388,52389],{"class":104,"line":41636},[102,52390,41660],{"class":126},[102,52392,52393,52395,52397,52399,52401],{"class":104,"line":41646},[102,52394,10407],{"class":108},[102,52396,39085],{"class":187},[102,52398,1876],{"class":108},[102,52400,39090],{"class":278},[102,52402,12552],{"class":119},[102,52404,52405],{"class":104,"line":41652},[102,52406,41679],{"class":126},[102,52408,52409,52412,52414],{"class":104,"line":41657},[102,52410,52411],{"class":119},"    GoogLeNet",[102,52413,260],{"class":108},[102,52415,52416],{"class":119},"GoogLeNet(Inception)\n",[102,52418,52419,52421,52423],{"class":104,"line":41663},[102,52420,41696],{"class":119},[102,52422,260],{"class":108},[102,52424,41701],{"class":119},[102,52426,52427,52429,52431,52434,52436,52438,52440],{"class":104,"line":41676},[102,52428,41258],{"class":119},[102,52430,260],{"class":108},[102,52432,52433],{"class":119},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[102,52435,41714],{"class":386},[102,52437,260],{"class":108},[102,52439,9972],{"class":187},[102,52441,390],{"class":119},[102,52443,52444],{"class":104,"line":41682},[102,52445,41726],{"class":119},[87,52447,52448],{"start":123},[62,52449,48439],{},[93,52451,52453],{"className":38243,"code":52452,"language":38245,"meta":98,"style":98},"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",[83,52454,52455,52461,52471,52481,52485,52495,52506,52510,52514,52518,52526,52542,52552,52568,52578,52592,52596,52606,52616,52626,52632,52636,52640,52648,52652,52668,52676,52680,52684,52692,52700,52704,52708,52712,52716,52722,52726,52736,52744,52752,52756,52760,52764,52772,52776,52792,52796,52800,52804,52816,52820,52832,52836,52840,52852,52856,52866,52870,52874,52886,52890,52898,52902,52906,52914,52918,52926,52930,52934,52938,52942,52946,52962,52970,52974,52978,53026,53032,53036,53046,53054,53062,53066,53070,53074,53078,53086,53090,53106,53110,53118,53126],{"__ignoreMap":98},[102,52456,52457,52459],{"class":104,"line":105},[102,52458,38257],{"class":108},[102,52460,38260],{"class":119},[102,52462,52463,52465,52467,52469],{"class":104,"line":116},[102,52464,38257],{"class":108},[102,52466,39280],{"class":119},[102,52468,39248],{"class":108},[102,52470,39285],{"class":119},[102,52472,52473,52475,52477,52479],{"class":104,"line":123},[102,52474,38602],{"class":108},[102,52476,39263],{"class":119},[102,52478,38257],{"class":108},[102,52480,39268],{"class":119},[102,52482,52483],{"class":104,"line":130},[102,52484,41787],{"class":126},[102,52486,52487,52489,52491,52493],{"class":104,"line":136},[102,52488,38602],{"class":108},[102,52490,39233],{"class":119},[102,52492,38257],{"class":108},[102,52494,39238],{"class":119},[102,52496,52497,52499,52501,52503],{"class":104,"line":142},[102,52498,38602],{"class":108},[102,52500,39779],{"class":119},[102,52502,38257],{"class":108},[102,52504,52505],{"class":119}," GoogLeNet,Inception\n",[102,52507,52508],{"class":104,"line":148},[102,52509,652],{"emptyLinePlaceholder":651},[102,52511,52512],{"class":104,"line":157},[102,52513,652],{"emptyLinePlaceholder":651},[102,52515,52516],{"class":104,"line":163},[102,52517,41816],{"class":126},[102,52519,52520,52522,52524],{"class":104,"line":175},[102,52521,39812],{"class":108},[102,52523,41823],{"class":112},[102,52525,39818],{"class":119},[102,52527,52528,52530,52532,52534,52536,52538,52540],{"class":104,"line":181},[102,52529,41830],{"class":119},[102,52531,260],{"class":108},[102,52533,39320],{"class":119},[102,52535,39323],{"class":386},[102,52537,260],{"class":108},[102,52539,39328],{"class":278},[102,52541,39331],{"class":119},[102,52543,52544,52546,52548,52550],{"class":104,"line":202},[102,52545,41847],{"class":386},[102,52547,260],{"class":108},[102,52549,41852],{"class":187},[102,52551,39331],{"class":119},[102,52553,52554,52556,52558,52560,52562,52564,52566],{"class":104,"line":208},[102,52555,41859],{"class":386},[102,52557,260],{"class":108},[102,52559,39358],{"class":119},[102,52561,39361],{"class":386},[102,52563,260],{"class":108},[102,52565,43314],{"class":187},[102,52567,39369],{"class":119},[102,52569,52570,52572,52574,52576],{"class":104,"line":214},[102,52571,41876],{"class":386},[102,52573,260],{"class":108},[102,52575,39341],{"class":187},[102,52577,390],{"class":119},[102,52579,52580,52582,52584,52586,52588,52590],{"class":104,"line":225},[102,52581,41887],{"class":119},[102,52583,260],{"class":108},[102,52585,39399],{"class":119},[102,52587,39402],{"class":386},[102,52589,260],{"class":108},[102,52591,41898],{"class":119},[102,52593,52594],{"class":104,"line":230},[102,52595,41903],{"class":126},[102,52597,52598,52600,52602,52604],{"class":104,"line":236},[102,52599,41908],{"class":386},[102,52601,260],{"class":108},[102,52603,7039],{"class":187},[102,52605,39331],{"class":119},[102,52607,52608,52610,52612,52614],{"class":104,"line":242},[102,52609,41919],{"class":386},[102,52611,260],{"class":108},[102,52613,39341],{"class":187},[102,52615,39331],{"class":119},[102,52617,52618,52620,52622,52624],{"class":104,"line":248},[102,52619,41930],{"class":386},[102,52621,260],{"class":108},[102,52623,8423],{"class":187},[102,52625,390],{"class":119},[102,52627,52628,52630],{"class":104,"line":254},[102,52629,863],{"class":108},[102,52631,41943],{"class":119},[102,52633,52634],{"class":104,"line":269},[102,52635,652],{"emptyLinePlaceholder":651},[102,52637,52638],{"class":104,"line":298},[102,52639,41952],{"class":126},[102,52641,52642,52644,52646],{"class":104,"line":502},[102,52643,39812],{"class":108},[102,52645,41959],{"class":112},[102,52647,41962],{"class":119},[102,52649,52650],{"class":104,"line":507},[102,52651,41967],{"class":126},[102,52653,52654,52656,52658,52660,52662,52664,52666],{"class":104,"line":512},[102,52655,39102],{"class":119},[102,52657,260],{"class":108},[102,52659,39109],{"class":278},[102,52661,10565],{"class":108},[102,52663,39114],{"class":119},[102,52665,10562],{"class":108},[102,52667,41984],{"class":278},[102,52669,52670,52672,52674],{"class":104,"line":521},[102,52671,39154],{"class":119},[102,52673,260],{"class":108},[102,52675,40154],{"class":119},[102,52677,52678],{"class":104,"line":526},[102,52679,652],{"emptyLinePlaceholder":651},[102,52681,52682],{"class":104,"line":532},[102,52683,42001],{"class":126},[102,52685,52686,52688,52690],{"class":104,"line":538},[102,52687,42006],{"class":119},[102,52689,260],{"class":108},[102,52691,40207],{"class":187},[102,52693,52694,52696,52698],{"class":104,"line":555},[102,52695,42015],{"class":119},[102,52697,260],{"class":108},[102,52699,11901],{"class":187},[102,52701,52702],{"class":104,"line":570},[102,52703,652],{"emptyLinePlaceholder":651},[102,52705,52706],{"class":104,"line":581},[102,52707,42028],{"class":126},[102,52709,52710],{"class":104,"line":819},[102,52711,42033],{"class":126},[102,52713,52714],{"class":104,"line":828},[102,52715,42038],{"class":126},[102,52717,52718,52720],{"class":104,"line":837},[102,52719,42043],{"class":108},[102,52721,40749],{"class":119},[102,52723,52724],{"class":104,"line":842},[102,52725,42050],{"class":126},[102,52727,52728,52730,52732,52734],{"class":104,"line":855},[102,52729,12217],{"class":108},[102,52731,42057],{"class":119},[102,52733,33908],{"class":108},[102,52735,42062],{"class":119},[102,52737,52738,52740,52742],{"class":104,"line":860},[102,52739,42067],{"class":119},[102,52741,260],{"class":108},[102,52743,42072],{"class":119},[102,52745,52746,52748,52750],{"class":104,"line":871},[102,52747,42077],{"class":119},[102,52749,260],{"class":108},[102,52751,42082],{"class":119},[102,52753,52754],{"class":104,"line":1359},[102,52755,42087],{"class":126},[102,52757,52758],{"class":104,"line":1368},[102,52759,40740],{"class":119},[102,52761,52762],{"class":104,"line":1373},[102,52763,42096],{"class":126},[102,52765,52766,52768,52770],{"class":104,"line":1378},[102,52767,40525],{"class":119},[102,52769,260],{"class":108},[102,52771,42105],{"class":119},[102,52773,52774],{"class":104,"line":1384},[102,52775,42110],{"class":126},[102,52777,52778,52780,52782,52784,52786,52788,52790],{"class":104,"line":1398},[102,52779,40542],{"class":119},[102,52781,260],{"class":108},[102,52783,40547],{"class":119},[102,52785,40550],{"class":386},[102,52787,260],{"class":108},[102,52789,7039],{"class":187},[102,52791,390],{"class":119},[102,52793,52794],{"class":104,"line":1424},[102,52795,42131],{"class":126},[102,52797,52798],{"class":104,"line":1429},[102,52799,42136],{"class":126},[102,52801,52802],{"class":104,"line":1435},[102,52803,42141],{"class":126},[102,52805,52806,52808,52810,52812,52814],{"class":104,"line":1450},[102,52807,42146],{"class":119},[102,52809,18244],{"class":108},[102,52811,40652],{"class":119},[102,52813,1876],{"class":108},[102,52815,42155],{"class":119},[102,52817,52818],{"class":104,"line":1473},[102,52819,42160],{"class":126},[102,52821,52822,52824,52826,52828,52830],{"class":104,"line":1478},[102,52823,42165],{"class":119},[102,52825,18244],{"class":108},[102,52827,42170],{"class":119},[102,52829,8423],{"class":187},[102,52831,390],{"class":119},[102,52833,52834],{"class":104,"line":1484},[102,52835,652],{"emptyLinePlaceholder":651},[102,52837,52838],{"class":104,"line":1499},[102,52839,42183],{"class":126},[102,52841,52842,52844,52846,52848,52850],{"class":104,"line":1508},[102,52843,42188],{"class":119},[102,52845,260],{"class":108},[102,52847,42193],{"class":119},[102,52849,9611],{"class":108},[102,52851,42198],{"class":119},[102,52853,52854],{"class":104,"line":1513},[102,52855,42203],{"class":126},[102,52857,52858,52860,52862,52864],{"class":104,"line":1524},[102,52859,40316],{"class":187},[102,52861,380],{"class":119},[102,52863,42212],{"class":278},[102,52865,42215],{"class":119},[102,52867,52868],{"class":104,"line":1529},[102,52869,652],{"emptyLinePlaceholder":651},[102,52871,52872],{"class":104,"line":1538},[102,52873,42224],{"class":126},[102,52875,52876,52878,52880,52882,52884],{"class":104,"line":2089},[102,52877,10407],{"class":108},[102,52879,39085],{"class":187},[102,52881,1876],{"class":108},[102,52883,39090],{"class":278},[102,52885,12552],{"class":119},[102,52887,52888],{"class":104,"line":2094},[102,52889,42241],{"class":126},[102,52891,52892,52894,52896],{"class":104,"line":2100},[102,52893,39154],{"class":119},[102,52895,260],{"class":108},[102,52897,52416],{"class":119},[102,52899,52900],{"class":104,"line":2106},[102,52901,42254],{"class":126},[102,52903,52904],{"class":104,"line":2120},[102,52905,42259],{"class":126},[102,52907,52908,52910,52912],{"class":104,"line":2128},[102,52909,42264],{"class":119},[102,52911,42267],{"class":278},[102,52913,38362],{"class":119},[102,52915,52916],{"class":104,"line":2149},[102,52917,42274],{"class":126},[102,52919,52920,52922,52924],{"class":104,"line":2161},[102,52921,41887],{"class":119},[102,52923,260],{"class":108},[102,52925,42283],{"class":119},[102,52927,52928],{"class":104,"line":2167},[102,52929,42288],{"class":126},[102,52931,52932],{"class":104,"line":2190},[102,52933,42293],{"class":119},[102,52935,52936],{"class":104,"line":2196},[102,52937,652],{"emptyLinePlaceholder":651},[102,52939,52940],{"class":104,"line":2219},[102,52941,42302],{"class":126},[102,52943,52944],{"class":104,"line":2233},[102,52945,42307],{"class":126},[102,52947,52948,52950,52952,52954,52956,52958,52960],{"class":104,"line":2253},[102,52949,39102],{"class":119},[102,52951,260],{"class":108},[102,52953,39109],{"class":278},[102,52955,10565],{"class":108},[102,52957,39114],{"class":119},[102,52959,10562],{"class":108},[102,52961,41984],{"class":278},[102,52963,52964,52966,52968],{"class":104,"line":2259},[102,52965,39154],{"class":119},[102,52967,260],{"class":108},[102,52969,40154],{"class":119},[102,52971,52972],{"class":104,"line":2270},[102,52973,42336],{"class":126},[102,52975,52976],{"class":104,"line":2293},[102,52977,42341],{"class":126},[102,52979,52980,52982,52984,52986,52988,52990,52992,52994,52996,52998,53000,53002,53004,53006,53008,53010,53012,53014,53016,53018,53020,53022,53024],{"class":104,"line":2315},[102,52981,42346],{"class":119},[102,52983,260],{"class":108},[102,52985,9912],{"class":119},[102,52987,42353],{"class":278},[102,52989,1618],{"class":119},[102,52991,42358],{"class":278},[102,52993,1618],{"class":119},[102,52995,42363],{"class":278},[102,52997,1618],{"class":119},[102,52999,42368],{"class":278},[102,53001,1618],{"class":119},[102,53003,42373],{"class":278},[102,53005,1618],{"class":119},[102,53007,42378],{"class":278},[102,53009,1618],{"class":119},[102,53011,42383],{"class":278},[102,53013,1618],{"class":119},[102,53015,42388],{"class":278},[102,53017,1618],{"class":119},[102,53019,42393],{"class":278},[102,53021,1618],{"class":119},[102,53023,42398],{"class":278},[102,53025,41111],{"class":119},[102,53027,53028,53030],{"class":104,"line":2320},[102,53029,42043],{"class":108},[102,53031,40749],{"class":119},[102,53033,53034],{"class":104,"line":2326},[102,53035,42411],{"class":126},[102,53037,53038,53040,53042,53044],{"class":104,"line":2340},[102,53039,12217],{"class":108},[102,53041,42418],{"class":119},[102,53043,33908],{"class":108},[102,53045,42062],{"class":119},[102,53047,53048,53050,53052],{"class":104,"line":2354},[102,53049,40475],{"class":119},[102,53051,260],{"class":108},[102,53053,40480],{"class":119},[102,53055,53056,53058,53060],{"class":104,"line":2359},[102,53057,40490],{"class":119},[102,53059,260],{"class":108},[102,53061,40495],{"class":119},[102,53063,53064],{"class":104,"line":2373},[102,53065,652],{"emptyLinePlaceholder":651},[102,53067,53068],{"class":104,"line":2378},[102,53069,42447],{"class":126},[102,53071,53072],{"class":104,"line":2384},[102,53073,40740],{"class":119},[102,53075,53076],{"class":104,"line":2389},[102,53077,42456],{"class":126},[102,53079,53080,53082,53084],{"class":104,"line":2403},[102,53081,40525],{"class":119},[102,53083,260],{"class":108},[102,53085,40530],{"class":119},[102,53087,53088],{"class":104,"line":2408},[102,53089,42469],{"class":126},[102,53091,53092,53094,53096,53098,53100,53102,53104],{"class":104,"line":2413},[102,53093,40542],{"class":119},[102,53095,260],{"class":108},[102,53097,40547],{"class":119},[102,53099,40550],{"class":386},[102,53101,260],{"class":108},[102,53103,7039],{"class":187},[102,53105,390],{"class":119},[102,53107,53108],{"class":104,"line":2427},[102,53109,42490],{"class":126},[102,53111,53112,53114,53116],{"class":104,"line":2440},[102,53113,42495],{"class":119},[102,53115,260],{"class":108},[102,53117,42500],{"class":119},[102,53119,53120,53122,53124],{"class":104,"line":2445},[102,53121,42505],{"class":119},[102,53123,260],{"class":108},[102,53125,42510],{"class":119},[102,53127,53128,53130,53132,53134,53136,53138,53140,53142],{"class":104,"line":2458},[102,53129,42515],{"class":187},[102,53131,380],{"class":119},[102,53133,42520],{"class":278},[102,53135,42523],{"class":119},[102,53137,42526],{"class":278},[102,53139,1618],{"class":119},[102,53141,42531],{"class":278},[102,53143,42534],{"class":119},[48,53145,53147],{"id":53146},"_24训练自己的数据集","2.4.训练自己的数据集",[14,53149,53150],{},"猫狗分类任务",[14,53152,53153],{},"划分数据集和验证集",[93,53155,53157],{"className":38243,"code":53156,"language":38245,"meta":98,"style":98},"# 创建脚本，用于划分数据集和验证集\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",[83,53158,53159,53164,53171,53176,53187,53194,53198,53208,53222,53231,53235,53240,53250,53270,53274,53279,53289,53300,53313,53317,53322,53331,53341,53352,53356,53361,53371,53375,53380,53385,53390,53395,53400,53404,53414,53441,53454,53466,53493,53498,53503,53517,53522,53534,53549,53564,53572,53576,53581,53587,53599,53612,53617,53622,53627,53677,53683,53687],{"__ignoreMap":98},[102,53160,53161],{"class":104,"line":105},[102,53162,53163],{"class":126},"# 创建脚本，用于划分数据集和验证集\n",[102,53165,53166,53168],{"class":104,"line":116},[102,53167,38257],{"class":108},[102,53169,53170],{"class":119}," os\n",[102,53172,53173],{"class":104,"line":123},[102,53174,53175],{"class":126},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[102,53177,53178,53180,53183,53185],{"class":104,"line":130},[102,53179,38602],{"class":108},[102,53181,53182],{"class":119}," shutil ",[102,53184,38257],{"class":108},[102,53186,39687],{"class":119},[102,53188,53189,53191],{"class":104,"line":136},[102,53190,38257],{"class":108},[102,53192,53193],{"class":119}," random\n",[102,53195,53196],{"class":104,"line":142},[102,53197,652],{"emptyLinePlaceholder":651},[102,53199,53200,53202,53205],{"class":104,"line":148},[102,53201,39812],{"class":108},[102,53203,53204],{"class":112}," mkfile",[102,53206,53207],{"class":119},"(file):\n",[102,53209,53210,53212,53214,53217,53220],{"class":104,"line":157},[102,53211,2343],{"class":108},[102,53213,46795],{"class":108},[102,53215,53216],{"class":119}," os.path.exists(",[102,53218,53219],{"class":386},"file",[102,53221,38651],{"class":119},[102,53223,53224,53227,53229],{"class":104,"line":163},[102,53225,53226],{"class":119},"        os.makedirs(",[102,53228,53219],{"class":386},[102,53230,390],{"class":119},[102,53232,53233],{"class":104,"line":175},[102,53234,652],{"emptyLinePlaceholder":651},[102,53236,53237],{"class":104,"line":181},[102,53238,53239],{"class":126},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[102,53241,53242,53245,53247],{"class":104,"line":202},[102,53243,53244],{"class":119},"file_path",[102,53246,260],{"class":108},[102,53248,53249],{"class":278},"'data_cat_dog'\n",[102,53251,53252,53255,53257,53260,53262,53265,53267],{"class":104,"line":208},[102,53253,53254],{"class":119},"flower_class",[102,53256,260],{"class":108},[102,53258,53259],{"class":119},"[cla ",[102,53261,11841],{"class":108},[102,53263,53264],{"class":119}," cla ",[102,53266,33908],{"class":108},[102,53268,53269],{"class":119}," os.listdir(file_path)]\n",[102,53271,53272],{"class":104,"line":214},[102,53273,652],{"emptyLinePlaceholder":651},[102,53275,53276],{"class":104,"line":225},[102,53277,53278],{"class":126},"# 创建训练集train文件夹\n",[102,53280,53281,53284,53287],{"class":104,"line":230},[102,53282,53283],{"class":119},"mkfile(",[102,53285,53286],{"class":278},"'data\u002Ftrain'",[102,53288,390],{"class":119},[102,53290,53291,53293,53295,53297],{"class":104,"line":236},[102,53292,11841],{"class":108},[102,53294,53264],{"class":119},[102,53296,33908],{"class":108},[102,53298,53299],{"class":119}," flower_class:\n",[102,53301,53302,53305,53308,53310],{"class":104,"line":242},[102,53303,53304],{"class":119},"    mkfile(",[102,53306,53307],{"class":278},"'data\u002Ftrain\u002F'",[102,53309,1702],{"class":108},[102,53311,53312],{"class":119},"cla)\n",[102,53314,53315],{"class":104,"line":248},[102,53316,652],{"emptyLinePlaceholder":651},[102,53318,53319],{"class":104,"line":254},[102,53320,53321],{"class":126},"# 创建验证集val文件夹\n",[102,53323,53324,53326,53329],{"class":104,"line":269},[102,53325,53283],{"class":119},[102,53327,53328],{"class":278},"'data\u002Ftest'",[102,53330,390],{"class":119},[102,53332,53333,53335,53337,53339],{"class":104,"line":298},[102,53334,11841],{"class":108},[102,53336,53264],{"class":119},[102,53338,33908],{"class":108},[102,53340,53299],{"class":119},[102,53342,53343,53345,53348,53350],{"class":104,"line":502},[102,53344,53304],{"class":119},[102,53346,53347],{"class":278},"'data\u002Ftest\u002F'",[102,53349,1702],{"class":108},[102,53351,53312],{"class":119},[102,53353,53354],{"class":104,"line":507},[102,53355,652],{"emptyLinePlaceholder":651},[102,53357,53358],{"class":104,"line":512},[102,53359,53360],{"class":126},"# 划分比例，训练集：测试集=9：1\n",[102,53362,53363,53366,53368],{"class":104,"line":521},[102,53364,53365],{"class":119},"split_rate",[102,53367,260],{"class":108},[102,53369,53370],{"class":187},"0.1\n",[102,53372,53373],{"class":104,"line":526},[102,53374,652],{"emptyLinePlaceholder":651},[102,53376,53377],{"class":104,"line":532},[102,53378,53379],{"class":126},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[102,53381,53382],{"class":104,"line":538},[102,53383,53384],{"class":126},"# cla_path：当前类别的原始图片路径\n",[102,53386,53387],{"class":104,"line":555},[102,53388,53389],{"class":126},"# images：当前类别下所有图片的文件名列表\n",[102,53391,53392],{"class":104,"line":570},[102,53393,53394],{"class":126},"# num：该类别图片总数\n",[102,53396,53397],{"class":104,"line":581},[102,53398,53399],{"class":126},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[102,53401,53402],{"class":104,"line":819},[102,53403,652],{"emptyLinePlaceholder":651},[102,53405,53406,53408,53410,53412],{"class":104,"line":828},[102,53407,11841],{"class":108},[102,53409,53264],{"class":119},[102,53411,33908],{"class":108},[102,53413,53299],{"class":119},[102,53415,53416,53419,53421,53424,53426,53429,53432,53434,53436,53438],{"class":104,"line":837},[102,53417,53418],{"class":119},"    cla_path ",[102,53420,260],{"class":108},[102,53422,53423],{"class":119}," file_path ",[102,53425,1702],{"class":108},[102,53427,53428],{"class":278}," '\u002F'",[102,53430,53431],{"class":108}," +",[102,53433,53264],{"class":119},[102,53435,1702],{"class":108},[102,53437,53428],{"class":278},[102,53439,53440],{"class":126},"  # 某一类别的子目录\n",[102,53442,53443,53446,53448,53451],{"class":104,"line":842},[102,53444,53445],{"class":119},"    images ",[102,53447,260],{"class":108},[102,53449,53450],{"class":119}," os.listdir(cla_path)  ",[102,53452,53453],{"class":126},"# iamges 列表存储了该目录下所有图像的名称\n",[102,53455,53456,53459,53461,53463],{"class":104,"line":855},[102,53457,53458],{"class":119},"    num ",[102,53460,260],{"class":108},[102,53462,16118],{"class":187},[102,53464,53465],{"class":119},"(images)\n",[102,53467,53468,53471,53473,53476,53478,53480,53482,53485,53487,53490],{"class":104,"line":860},[102,53469,53470],{"class":119},"    eval_index ",[102,53472,260],{"class":108},[102,53474,53475],{"class":119}," random.sample(images, ",[102,53477,9522],{"class":386},[102,53479,260],{"class":108},[102,53481,217],{"class":187},[102,53483,53484],{"class":119},"(num ",[102,53486,191],{"class":108},[102,53488,53489],{"class":119}," split_rate))  ",[102,53491,53492],{"class":126},"# 从images列表中随机抽取 k 个图像名称\n",[102,53494,53495],{"class":104,"line":871},[102,53496,53497],{"class":126},"    # 遍历该类别下的所有图片\n",[102,53499,53500],{"class":104,"line":1359},[102,53501,53502],{"class":126},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[102,53504,53505,53507,53510,53512,53514],{"class":104,"line":1368},[102,53506,12016],{"class":108},[102,53508,53509],{"class":119}," index, image ",[102,53511,33908],{"class":108},[102,53513,39471],{"class":187},[102,53515,53516],{"class":119},"(images):\n",[102,53518,53519],{"class":104,"line":1373},[102,53520,53521],{"class":126},"        # eval_index 中保存验证集val的图像名称\n",[102,53523,53524,53526,53529,53531],{"class":104,"line":1378},[102,53525,1202],{"class":108},[102,53527,53528],{"class":119}," image ",[102,53530,33908],{"class":108},[102,53532,53533],{"class":119}," eval_index:\n",[102,53535,53536,53539,53541,53544,53546],{"class":104,"line":1384},[102,53537,53538],{"class":119},"            image_path ",[102,53540,260],{"class":108},[102,53542,53543],{"class":119}," cla_path ",[102,53545,1702],{"class":108},[102,53547,53548],{"class":119}," image\n",[102,53550,53551,53554,53556,53559,53561],{"class":104,"line":1398},[102,53552,53553],{"class":119},"            new_path ",[102,53555,260],{"class":108},[102,53557,53558],{"class":278}," 'data\u002Ftest\u002F'",[102,53560,53431],{"class":108},[102,53562,53563],{"class":119}," cla\n",[102,53565,53566,53569],{"class":104,"line":1424},[102,53567,53568],{"class":119},"            copy(image_path, new_path)  ",[102,53570,53571],{"class":126},"# 将选中的图像复制到新路径\n",[102,53573,53574],{"class":104,"line":1429},[102,53575,652],{"emptyLinePlaceholder":651},[102,53577,53578],{"class":104,"line":1435},[102,53579,53580],{"class":126},"        # 其余的图像保存在训练集train中\n",[102,53582,53583,53585],{"class":104,"line":1450},[102,53584,11363],{"class":108},[102,53586,12552],{"class":119},[102,53588,53589,53591,53593,53595,53597],{"class":104,"line":1473},[102,53590,53538],{"class":119},[102,53592,260],{"class":108},[102,53594,53543],{"class":119},[102,53596,1702],{"class":108},[102,53598,53548],{"class":119},[102,53600,53601,53603,53605,53608,53610],{"class":104,"line":1478},[102,53602,53553],{"class":119},[102,53604,260],{"class":108},[102,53606,53607],{"class":278}," 'data\u002Ftrain\u002F'",[102,53609,53431],{"class":108},[102,53611,53563],{"class":119},[102,53613,53614],{"class":104,"line":1484},[102,53615,53616],{"class":119},"            copy(image_path, new_path)\n",[102,53618,53619],{"class":104,"line":1499},[102,53620,53621],{"class":126},"            # 打印进度条信息\n",[102,53623,53624],{"class":104,"line":1508},[102,53625,53626],{"class":126},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[102,53628,53629,53631,53633,53635,53638,53640,53642,53645,53647,53649,53651,53654,53657,53659,53661,53664,53667,53669,53671,53674],{"class":104,"line":1513},[102,53630,40316],{"class":187},[102,53632,380],{"class":119},[102,53634,9288],{"class":278},[102,53636,53637],{"class":187},"\\r",[102,53639,9912],{"class":278},[102,53641,40324],{"class":187},[102,53643,53644],{"class":278},"] processing [",[102,53646,40324],{"class":187},[102,53648,9611],{"class":278},[102,53650,40324],{"class":187},[102,53652,53653],{"class":278},"]\"",[102,53655,53656],{"class":119},".format(cla, index ",[102,53658,1702],{"class":108},[102,53660,32983],{"class":187},[102,53662,53663],{"class":119},", num), ",[102,53665,53666],{"class":386},"end",[102,53668,260],{"class":108},[102,53670,16439],{"class":278},[102,53672,53673],{"class":119},")  ",[102,53675,53676],{"class":126},"# processing bar\n",[102,53678,53679,53681],{"class":104,"line":1524},[102,53680,39164],{"class":187},[102,53682,172],{"class":119},[102,53684,53685],{"class":104,"line":1529},[102,53686,652],{"emptyLinePlaceholder":651},[102,53688,53689,53691,53693,53696],{"class":104,"line":1538},[102,53690,38280],{"class":187},[102,53692,380],{"class":119},[102,53694,53695],{"class":278},"\"processing done!\"",[102,53697,390],{"class":119},[14,53699,53700],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[7601,53702,53704],{"id":53703},"_242模型代码","2.4.2.模型代码",[14,53706,53707],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[93,53709,53711],{"className":38243,"code":53710,"language":38245,"meta":98,"style":98},"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",[83,53712,53713,53719,53729,53739,53743,53759,53767,53781,53791,53795,53825,53829,53863,53909,53913,53947,53993,53997,54001,54035,54065,54069,54077,54091,54113,54135,54153,54157,54171,54175,54179,54195,54199,54207,54221,54231,54275,54279,54307,54311,54321,54349,54353,54389,54393,54421,54425,54435,54467,54499,54527,54531,54541,54573,54605,54637,54669,54701,54729,54733,54743,54775,54807,54819,54823,54835,54839,54843,54855,54863,54883,54887,54891,54895,54899,54903,54907,54921,54929,54937,54949,54963,54971,54975,54983,54993,55003,55013,55023,55033,55039,55043,55047,55059,55079,55087],{"__ignoreMap":98},[102,53714,53715,53717],{"class":104,"line":105},[102,53716,38257],{"class":108},[102,53718,38260],{"class":119},[102,53720,53721,53723,53725,53727],{"class":104,"line":116},[102,53722,38602],{"class":108},[102,53724,38605],{"class":119},[102,53726,38257],{"class":108},[102,53728,38610],{"class":119},[102,53730,53731,53733,53735,53737],{"class":104,"line":123},[102,53732,38602],{"class":108},[102,53734,38622],{"class":119},[102,53736,38257],{"class":108},[102,53738,38627],{"class":119},[102,53740,53741],{"class":104,"line":130},[102,53742,652],{"emptyLinePlaceholder":651},[102,53744,53745,53747,53749,53751,53753,53755,53757],{"class":104,"line":136},[102,53746,109],{"class":108},[102,53748,49358],{"class":112},[102,53750,380],{"class":119},[102,53752,38643],{"class":112},[102,53754,9585],{"class":119},[102,53756,38648],{"class":112},[102,53758,38651],{"class":119},[102,53760,53761,53763,53765],{"class":104,"line":142},[102,53762,38666],{"class":108},[102,53764,38669],{"class":187},[102,53766,49377],{"class":119},[102,53768,53769,53771,53773,53775,53777,53779],{"class":104,"line":148},[102,53770,38682],{"class":187},[102,53772,49384],{"class":119},[102,53774,38688],{"class":187},[102,53776,38691],{"class":119},[102,53778,38694],{"class":187},[102,53780,172],{"class":119},[102,53782,53783,53785,53787,53789],{"class":104,"line":157},[102,53784,38710],{"class":187},[102,53786,42636],{"class":119},[102,53788,260],{"class":108},[102,53790,42641],{"class":119},[102,53792,53793],{"class":104,"line":163},[102,53794,49407],{"class":126},[102,53796,53797,53799,53801,53803,53805,53807,53809,53811,53813,53815,53817,53819,53821,53823],{"class":104,"line":175},[102,53798,38710],{"class":187},[102,53800,49414],{"class":119},[102,53802,260],{"class":108},[102,53804,38718],{"class":119},[102,53806,38721],{"class":386},[102,53808,260],{"class":108},[102,53810,49425],{"class":119},[102,53812,38730],{"class":386},[102,53814,260],{"class":108},[102,53816,49432],{"class":119},[102,53818,38739],{"class":386},[102,53820,260],{"class":108},[102,53822,7039],{"class":187},[102,53824,390],{"class":119},[102,53826,53827],{"class":104,"line":181},[102,53828,49445],{"class":126},[102,53830,53831,53833,53835,53837,53839,53841,53843,53845,53847,53849,53851,53853,53855,53857,53859,53861],{"class":104,"line":202},[102,53832,38710],{"class":187},[102,53834,49452],{"class":119},[102,53836,260],{"class":108},[102,53838,38718],{"class":119},[102,53840,38721],{"class":386},[102,53842,260],{"class":108},[102,53844,49425],{"class":119},[102,53846,38730],{"class":386},[102,53848,260],{"class":108},[102,53850,49469],{"class":119},[102,53852,8423],{"class":187},[102,53854,49474],{"class":119},[102,53856,38739],{"class":386},[102,53858,260],{"class":108},[102,53860,7039],{"class":187},[102,53862,390],{"class":119},[102,53864,53865,53867,53869,53871,53873,53875,53877,53879,53881,53883,53885,53887,53889,53891,53893,53895,53897,53899,53901,53903,53905,53907],{"class":104,"line":208},[102,53866,38710],{"class":187},[102,53868,49489],{"class":119},[102,53870,260],{"class":108},[102,53872,38718],{"class":119},[102,53874,38721],{"class":386},[102,53876,260],{"class":108},[102,53878,49469],{"class":119},[102,53880,8423],{"class":187},[102,53882,49474],{"class":119},[102,53884,38730],{"class":386},[102,53886,260],{"class":108},[102,53888,49469],{"class":119},[102,53890,7039],{"class":187},[102,53892,49474],{"class":119},[102,53894,38739],{"class":386},[102,53896,260],{"class":108},[102,53898,7049],{"class":187},[102,53900,1618],{"class":119},[102,53902,38748],{"class":386},[102,53904,260],{"class":108},[102,53906,7039],{"class":187},[102,53908,390],{"class":119},[102,53910,53911],{"class":104,"line":214},[102,53912,49534],{"class":126},[102,53914,53915,53917,53919,53921,53923,53925,53927,53929,53931,53933,53935,53937,53939,53941,53943,53945],{"class":104,"line":225},[102,53916,38710],{"class":187},[102,53918,49541],{"class":119},[102,53920,260],{"class":108},[102,53922,38718],{"class":119},[102,53924,38721],{"class":386},[102,53926,260],{"class":108},[102,53928,49425],{"class":119},[102,53930,38730],{"class":386},[102,53932,260],{"class":108},[102,53934,49558],{"class":119},[102,53936,8423],{"class":187},[102,53938,49474],{"class":119},[102,53940,38739],{"class":386},[102,53942,260],{"class":108},[102,53944,7039],{"class":187},[102,53946,390],{"class":119},[102,53948,53949,53951,53953,53955,53957,53959,53961,53963,53965,53967,53969,53971,53973,53975,53977,53979,53981,53983,53985,53987,53989,53991],{"class":104,"line":230},[102,53950,38710],{"class":187},[102,53952,49577],{"class":119},[102,53954,260],{"class":108},[102,53956,38718],{"class":119},[102,53958,38721],{"class":386},[102,53960,260],{"class":108},[102,53962,49558],{"class":119},[102,53964,8423],{"class":187},[102,53966,49474],{"class":119},[102,53968,38730],{"class":386},[102,53970,260],{"class":108},[102,53972,49558],{"class":119},[102,53974,7039],{"class":187},[102,53976,49474],{"class":119},[102,53978,38739],{"class":386},[102,53980,260],{"class":108},[102,53982,9354],{"class":187},[102,53984,1618],{"class":119},[102,53986,38748],{"class":386},[102,53988,260],{"class":108},[102,53990,7044],{"class":187},[102,53992,390],{"class":119},[102,53994,53995],{"class":104,"line":236},[102,53996,49622],{"class":126},[102,53998,53999],{"class":104,"line":242},[102,54000,49627],{"class":126},[102,54002,54003,54005,54007,54009,54011,54013,54015,54017,54019,54021,54023,54025,54027,54029,54031,54033],{"class":104,"line":248},[102,54004,38710],{"class":187},[102,54006,49634],{"class":119},[102,54008,260],{"class":108},[102,54010,42694],{"class":119},[102,54012,38739],{"class":386},[102,54014,260],{"class":108},[102,54016,7049],{"class":187},[102,54018,1618],{"class":119},[102,54020,38794],{"class":386},[102,54022,260],{"class":108},[102,54024,7039],{"class":187},[102,54026,1618],{"class":119},[102,54028,38748],{"class":386},[102,54030,260],{"class":108},[102,54032,7039],{"class":187},[102,54034,390],{"class":119},[102,54036,54037,54039,54041,54043,54045,54047,54049,54051,54053,54055,54057,54059,54061,54063],{"class":104,"line":254},[102,54038,38710],{"class":187},[102,54040,49669],{"class":119},[102,54042,260],{"class":108},[102,54044,38718],{"class":119},[102,54046,38721],{"class":386},[102,54048,260],{"class":108},[102,54050,49425],{"class":119},[102,54052,38730],{"class":386},[102,54054,260],{"class":108},[102,54056,49686],{"class":119},[102,54058,38739],{"class":386},[102,54060,260],{"class":108},[102,54062,7039],{"class":187},[102,54064,390],{"class":119},[102,54066,54067],{"class":104,"line":269},[102,54068,652],{"emptyLinePlaceholder":651},[102,54070,54071,54073,54075],{"class":104,"line":298},[102,54072,38666],{"class":108},[102,54074,38958],{"class":112},[102,54076,38961],{"class":119},[102,54078,54079,54081,54083,54085,54087,54089],{"class":104,"line":502},[102,54080,49711],{"class":119},[102,54082,260],{"class":108},[102,54084,38688],{"class":187},[102,54086,43049],{"class":119},[102,54088,38688],{"class":187},[102,54090,49722],{"class":119},[102,54092,54093,54095,54097,54099,54101,54103,54105,54107,54109,54111],{"class":104,"line":507},[102,54094,15873],{"class":119},[102,54096,260],{"class":108},[102,54098,38688],{"class":187},[102,54100,43049],{"class":119},[102,54102,38688],{"class":187},[102,54104,49737],{"class":119},[102,54106,38688],{"class":187},[102,54108,43049],{"class":119},[102,54110,38688],{"class":187},[102,54112,49746],{"class":119},[102,54114,54115,54117,54119,54121,54123,54125,54127,54129,54131,54133],{"class":104,"line":512},[102,54116,49751],{"class":119},[102,54118,260],{"class":108},[102,54120,38688],{"class":187},[102,54122,43049],{"class":119},[102,54124,38688],{"class":187},[102,54126,49762],{"class":119},[102,54128,38688],{"class":187},[102,54130,43049],{"class":119},[102,54132,38688],{"class":187},[102,54134,49771],{"class":119},[102,54136,54137,54139,54141,54143,54145,54147,54149,54151],{"class":104,"line":521},[102,54138,49776],{"class":119},[102,54140,260],{"class":108},[102,54142,38688],{"class":187},[102,54144,43049],{"class":119},[102,54146,38688],{"class":187},[102,54148,49787],{"class":119},[102,54150,38688],{"class":187},[102,54152,49792],{"class":119},[102,54154,54155],{"class":104,"line":526},[102,54156,49797],{"class":126},[102,54158,54159,54161,54163,54165,54167,54169],{"class":104,"line":532},[102,54160,184],{"class":108},[102,54162,49804],{"class":119},[102,54164,40550],{"class":386},[102,54166,260],{"class":108},[102,54168,7039],{"class":187},[102,54170,390],{"class":119},[102,54172,54173],{"class":104,"line":538},[102,54174,652],{"emptyLinePlaceholder":651},[102,54176,54177],{"class":104,"line":555},[102,54178,49825],{"class":126},[102,54180,54181,54183,54185,54187,54189,54191,54193],{"class":104,"line":570},[102,54182,109],{"class":108},[102,54184,49832],{"class":112},[102,54186,380],{"class":119},[102,54188,38643],{"class":112},[102,54190,9585],{"class":119},[102,54192,38648],{"class":112},[102,54194,38651],{"class":119},[102,54196,54197],{"class":104,"line":581},[102,54198,49847],{"class":126},[102,54200,54201,54203,54205],{"class":104,"line":819},[102,54202,38666],{"class":108},[102,54204,38669],{"class":187},[102,54206,49856],{"class":119},[102,54208,54209,54211,54213,54215,54217,54219],{"class":104,"line":828},[102,54210,38682],{"class":187},[102,54212,49863],{"class":119},[102,54214,38688],{"class":187},[102,54216,38691],{"class":119},[102,54218,38694],{"class":187},[102,54220,172],{"class":119},[102,54222,54223,54225,54227,54229],{"class":104,"line":837},[102,54224,38710],{"class":187},[102,54226,49878],{"class":119},[102,54228,260],{"class":108},[102,54230,45874],{"class":119},[102,54232,54233,54235,54237,54239,54241,54243,54245,54247,54249,54251,54253,54255,54257,54259,54261,54263,54265,54267,54269,54271,54273],{"class":104,"line":842},[102,54234,45879],{"class":119},[102,54236,38721],{"class":386},[102,54238,260],{"class":108},[102,54240,7049],{"class":187},[102,54242,1618],{"class":119},[102,54244,38730],{"class":386},[102,54246,260],{"class":108},[102,54248,9241],{"class":187},[102,54250,1618],{"class":119},[102,54252,38739],{"class":386},[102,54254,260],{"class":108},[102,54256,9403],{"class":187},[102,54258,1618],{"class":119},[102,54260,38794],{"class":386},[102,54262,260],{"class":108},[102,54264,7044],{"class":187},[102,54266,1618],{"class":119},[102,54268,38748],{"class":386},[102,54270,260],{"class":108},[102,54272,7049],{"class":187},[102,54274,45912],{"class":119},[102,54276,54277],{"class":104,"line":855},[102,54278,45917],{"class":119},[102,54280,54281,54283,54285,54287,54289,54291,54293,54295,54297,54299,54301,54303,54305],{"class":104,"line":860},[102,54282,45962],{"class":119},[102,54284,38739],{"class":386},[102,54286,260],{"class":108},[102,54288,7049],{"class":187},[102,54290,1618],{"class":119},[102,54292,38794],{"class":386},[102,54294,260],{"class":108},[102,54296,7044],{"class":187},[102,54298,1618],{"class":119},[102,54300,38748],{"class":386},[102,54302,260],{"class":108},[102,54304,7039],{"class":187},[102,54306,390],{"class":119},[102,54308,54309],{"class":104,"line":871},[102,54310,45991],{"class":119},[102,54312,54313,54315,54317,54319],{"class":104,"line":1359},[102,54314,38710],{"class":187},[102,54316,49969],{"class":119},[102,54318,260],{"class":108},[102,54320,45874],{"class":119},[102,54322,54323,54325,54327,54329,54331,54333,54335,54337,54339,54341,54343,54345,54347],{"class":104,"line":1368},[102,54324,45879],{"class":119},[102,54326,38721],{"class":386},[102,54328,260],{"class":108},[102,54330,9241],{"class":187},[102,54332,1618],{"class":119},[102,54334,38730],{"class":386},[102,54336,260],{"class":108},[102,54338,9241],{"class":187},[102,54340,1618],{"class":119},[102,54342,38739],{"class":386},[102,54344,260],{"class":108},[102,54346,7039],{"class":187},[102,54348,45912],{"class":119},[102,54350,54351],{"class":104,"line":1373},[102,54352,45917],{"class":119},[102,54354,54355,54357,54359,54361,54363,54365,54367,54369,54371,54373,54375,54377,54379,54381,54383,54385,54387],{"class":104,"line":1378},[102,54356,45879],{"class":119},[102,54358,38721],{"class":386},[102,54360,260],{"class":108},[102,54362,9241],{"class":187},[102,54364,1618],{"class":119},[102,54366,38730],{"class":386},[102,54368,260],{"class":108},[102,54370,50024],{"class":187},[102,54372,1618],{"class":119},[102,54374,38739],{"class":386},[102,54376,260],{"class":108},[102,54378,7049],{"class":187},[102,54380,1618],{"class":119},[102,54382,38748],{"class":386},[102,54384,260],{"class":108},[102,54386,7039],{"class":187},[102,54388,45912],{"class":119},[102,54390,54391],{"class":104,"line":1384},[102,54392,45917],{"class":119},[102,54394,54395,54397,54399,54401,54403,54405,54407,54409,54411,54413,54415,54417,54419],{"class":104,"line":1398},[102,54396,45962],{"class":119},[102,54398,38739],{"class":386},[102,54400,260],{"class":108},[102,54402,7049],{"class":187},[102,54404,1618],{"class":119},[102,54406,38794],{"class":386},[102,54408,260],{"class":108},[102,54410,7044],{"class":187},[102,54412,1618],{"class":119},[102,54414,38748],{"class":386},[102,54416,260],{"class":108},[102,54418,7039],{"class":187},[102,54420,390],{"class":119},[102,54422,54423],{"class":104,"line":1424},[102,54424,45991],{"class":119},[102,54426,54427,54429,54431,54433],{"class":104,"line":1429},[102,54428,38710],{"class":187},[102,54430,50085],{"class":119},[102,54432,260],{"class":108},[102,54434,45874],{"class":119},[102,54436,54437,54439,54441,54443,54445,54447,54449,54451,54453,54455,54457,54459,54461,54463,54465],{"class":104,"line":1435},[102,54438,50094],{"class":119},[102,54440,50024],{"class":187},[102,54442,1618],{"class":119},[102,54444,9241],{"class":187},[102,54446,50103],{"class":119},[102,54448,9247],{"class":187},[102,54450,1618],{"class":119},[102,54452,39935],{"class":187},[102,54454,50112],{"class":119},[102,54456,9628],{"class":187},[102,54458,1618],{"class":119},[102,54460,9235],{"class":187},[102,54462,50121],{"class":119},[102,54464,9235],{"class":187},[102,54466,45912],{"class":119},[102,54468,54469,54471,54473,54475,54477,54479,54481,54483,54485,54487,54489,54491,54493,54495,54497],{"class":104,"line":1450},[102,54470,50094],{"class":119},[102,54472,42735],{"class":187},[102,54474,1618],{"class":119},[102,54476,39935],{"class":187},[102,54478,50103],{"class":119},[102,54480,39935],{"class":187},[102,54482,1618],{"class":119},[102,54484,50024],{"class":187},[102,54486,50112],{"class":119},[102,54488,9235],{"class":187},[102,54490,1618],{"class":119},[102,54492,9247],{"class":187},[102,54494,50121],{"class":119},[102,54496,9241],{"class":187},[102,54498,45912],{"class":119},[102,54500,54501,54503,54505,54507,54509,54511,54513,54515,54517,54519,54521,54523,54525],{"class":104,"line":1473},[102,54502,45962],{"class":119},[102,54504,38739],{"class":386},[102,54506,260],{"class":108},[102,54508,7049],{"class":187},[102,54510,1618],{"class":119},[102,54512,38794],{"class":386},[102,54514,260],{"class":108},[102,54516,7044],{"class":187},[102,54518,1618],{"class":119},[102,54520,38748],{"class":386},[102,54522,260],{"class":108},[102,54524,7039],{"class":187},[102,54526,390],{"class":119},[102,54528,54529],{"class":104,"line":1478},[102,54530,45991],{"class":119},[102,54532,54533,54535,54537,54539],{"class":104,"line":1484},[102,54534,38710],{"class":187},[102,54536,50196],{"class":119},[102,54538,260],{"class":108},[102,54540,45874],{"class":119},[102,54542,54543,54545,54547,54549,54551,54553,54555,54557,54559,54561,54563,54565,54567,54569,54571],{"class":104,"line":1499},[102,54544,50094],{"class":119},[102,54546,50207],{"class":187},[102,54548,1618],{"class":119},[102,54550,50024],{"class":187},[102,54552,50103],{"class":119},[102,54554,9247],{"class":187},[102,54556,1618],{"class":119},[102,54558,50220],{"class":187},[102,54560,50112],{"class":119},[102,54562,9628],{"class":187},[102,54564,1618],{"class":119},[102,54566,9634],{"class":187},[102,54568,50121],{"class":119},[102,54570,9241],{"class":187},[102,54572,45912],{"class":119},[102,54574,54575,54577,54579,54581,54583,54585,54587,54589,54591,54593,54595,54597,54599,54601,54603],{"class":104,"line":1508},[102,54576,50094],{"class":119},[102,54578,46322],{"class":187},[102,54580,1618],{"class":119},[102,54582,6640],{"class":187},[102,54584,50103],{"class":119},[102,54586,9645],{"class":187},[102,54588,1618],{"class":119},[102,54590,39366],{"class":187},[102,54592,50112],{"class":119},[102,54594,9823],{"class":187},[102,54596,1618],{"class":119},[102,54598,9241],{"class":187},[102,54600,50121],{"class":119},[102,54602,9241],{"class":187},[102,54604,45912],{"class":119},[102,54606,54607,54609,54611,54613,54615,54617,54619,54621,54623,54625,54627,54629,54631,54633,54635],{"class":104,"line":1513},[102,54608,50094],{"class":119},[102,54610,46322],{"class":187},[102,54612,1618],{"class":119},[102,54614,39935],{"class":187},[102,54616,50103],{"class":119},[102,54618,39935],{"class":187},[102,54620,1618],{"class":119},[102,54622,42735],{"class":187},[102,54624,50112],{"class":119},[102,54626,9823],{"class":187},[102,54628,1618],{"class":119},[102,54630,9241],{"class":187},[102,54632,50121],{"class":119},[102,54634,9241],{"class":187},[102,54636,45912],{"class":119},[102,54638,54639,54641,54643,54645,54647,54649,54651,54653,54655,54657,54659,54661,54663,54665,54667],{"class":104,"line":1524},[102,54640,50094],{"class":119},[102,54642,46322],{"class":187},[102,54644,1618],{"class":119},[102,54646,9645],{"class":187},[102,54648,50103],{"class":119},[102,54650,39935],{"class":187},[102,54652,1618],{"class":119},[102,54654,50317],{"class":187},[102,54656,50112],{"class":119},[102,54658,9235],{"class":187},[102,54660,1618],{"class":119},[102,54662,9241],{"class":187},[102,54664,50121],{"class":119},[102,54666,9241],{"class":187},[102,54668,45912],{"class":119},[102,54670,54671,54673,54675,54677,54679,54681,54683,54685,54687,54689,54691,54693,54695,54697,54699],{"class":104,"line":1529},[102,54672,50094],{"class":119},[102,54674,50338],{"class":187},[102,54676,1618],{"class":119},[102,54678,42735],{"class":187},[102,54680,50103],{"class":119},[102,54682,6640],{"class":187},[102,54684,1618],{"class":119},[102,54686,50351],{"class":187},[102,54688,50112],{"class":119},[102,54690,9235],{"class":187},[102,54692,1618],{"class":119},[102,54694,39935],{"class":187},[102,54696,50121],{"class":119},[102,54698,39935],{"class":187},[102,54700,45912],{"class":119},[102,54702,54703,54705,54707,54709,54711,54713,54715,54717,54719,54721,54723,54725,54727],{"class":104,"line":1538},[102,54704,45962],{"class":119},[102,54706,38739],{"class":386},[102,54708,260],{"class":108},[102,54710,7049],{"class":187},[102,54712,1618],{"class":119},[102,54714,38794],{"class":386},[102,54716,260],{"class":108},[102,54718,7044],{"class":187},[102,54720,1618],{"class":119},[102,54722,38748],{"class":386},[102,54724,260],{"class":108},[102,54726,7039],{"class":187},[102,54728,390],{"class":119},[102,54730,54731],{"class":104,"line":2089},[102,54732,45991],{"class":119},[102,54734,54735,54737,54739,54741],{"class":104,"line":2094},[102,54736,38710],{"class":187},[102,54738,50404],{"class":119},[102,54740,260],{"class":108},[102,54742,45874],{"class":119},[102,54744,54745,54747,54749,54751,54753,54755,54757,54759,54761,54763,54765,54767,54769,54771,54773],{"class":104,"line":2100},[102,54746,50094],{"class":119},[102,54748,50415],{"class":187},[102,54750,1618],{"class":119},[102,54752,42735],{"class":187},[102,54754,50103],{"class":119},[102,54756,6640],{"class":187},[102,54758,1618],{"class":119},[102,54760,50351],{"class":187},[102,54762,50112],{"class":119},[102,54764,9235],{"class":187},[102,54766,1618],{"class":119},[102,54768,39935],{"class":187},[102,54770,50121],{"class":119},[102,54772,39935],{"class":187},[102,54774,45912],{"class":119},[102,54776,54777,54779,54781,54783,54785,54787,54789,54791,54793,54795,54797,54799,54801,54803,54805],{"class":104,"line":2106},[102,54778,50094],{"class":119},[102,54780,50415],{"class":187},[102,54782,1618],{"class":119},[102,54784,42805],{"class":187},[102,54786,50103],{"class":119},[102,54788,50024],{"class":187},[102,54790,1618],{"class":119},[102,54792,42805],{"class":187},[102,54794,50112],{"class":119},[102,54796,9634],{"class":187},[102,54798,1618],{"class":119},[102,54800,39935],{"class":187},[102,54802,50121],{"class":119},[102,54804,39935],{"class":187},[102,54806,45912],{"class":119},[102,54808,54809,54811,54813,54815,54817],{"class":104,"line":2120},[102,54810,50478],{"class":119},[102,54812,7039],{"class":187},[102,54814,1618],{"class":119},[102,54816,7039],{"class":187},[102,54818,50487],{"class":119},[102,54820,54821],{"class":104,"line":2128},[102,54822,46655],{"class":119},[102,54824,54825,54827,54829,54831,54833],{"class":104,"line":2149},[102,54826,46660],{"class":119},[102,54828,50498],{"class":187},[102,54830,1618],{"class":119},[102,54832,7044],{"class":187},[102,54834,390],{"class":119},[102,54836,54837],{"class":104,"line":2161},[102,54838,45991],{"class":119},[102,54840,54841],{"class":104,"line":2167},[102,54842,50513],{"class":126},[102,54844,54845,54847,54849,54851,54853],{"class":104,"line":2190},[102,54846,12217],{"class":108},[102,54848,46733],{"class":119},[102,54850,33908],{"class":108},[102,54852,46738],{"class":187},[102,54854,46741],{"class":119},[102,54856,54857,54859,54861],{"class":104,"line":2196},[102,54858,13451],{"class":108},[102,54860,46753],{"class":187},[102,54862,46756],{"class":119},[102,54864,54865,54867,54869,54871,54873,54875,54877,54879,54881],{"class":104,"line":2219},[102,54866,46766],{"class":119},[102,54868,50540],{"class":386},[102,54870,260],{"class":108},[102,54872,50545],{"class":278},[102,54874,1618],{"class":119},[102,54876,46769],{"class":386},[102,54878,260],{"class":108},[102,54880,46774],{"class":278},[102,54882,390],{"class":119},[102,54884,54885],{"class":104,"line":2233},[102,54886,50560],{"class":126},[102,54888,54889],{"class":104,"line":2253},[102,54890,50565],{"class":126},[102,54892,54893],{"class":104,"line":2259},[102,54894,50570],{"class":126},[102,54896,54897],{"class":104,"line":2270},[102,54898,50575],{"class":126},[102,54900,54901],{"class":104,"line":2293},[102,54902,50580],{"class":126},[102,54904,54905],{"class":104,"line":2315},[102,54906,50585],{"class":126},[102,54908,54909,54911,54913,54915,54917,54919],{"class":104,"line":2320},[102,54910,46786],{"class":108},[102,54912,46789],{"class":119},[102,54914,46792],{"class":108},[102,54916,46795],{"class":108},[102,54918,46798],{"class":187},[102,54920,12552],{"class":119},[102,54922,54923,54925,54927],{"class":104,"line":2326},[102,54924,46810],{"class":119},[102,54926,8423],{"class":187},[102,54928,390],{"class":119},[102,54930,54931,54933,54935],{"class":104,"line":2340},[102,54932,50612],{"class":108},[102,54934,46753],{"class":187},[102,54936,46829],{"class":119},[102,54938,54939,54941,54943,54945,54947],{"class":104,"line":2354},[102,54940,50621],{"class":119},[102,54942,8423],{"class":187},[102,54944,1618],{"class":119},[102,54946,46851],{"class":187},[102,54948,390],{"class":119},[102,54950,54951,54953,54955,54957,54959,54961],{"class":104,"line":2359},[102,54952,50634],{"class":108},[102,54954,46789],{"class":119},[102,54956,46792],{"class":108},[102,54958,46795],{"class":108},[102,54960,46798],{"class":187},[102,54962,12552],{"class":119},[102,54964,54965,54967,54969],{"class":104,"line":2373},[102,54966,50649],{"class":119},[102,54968,8423],{"class":187},[102,54970,390],{"class":119},[102,54972,54973],{"class":104,"line":2378},[102,54974,43030],{"class":126},[102,54976,54977,54979,54981],{"class":104,"line":2384},[102,54978,38666],{"class":108},[102,54980,38958],{"class":112},[102,54982,38961],{"class":119},[102,54984,54985,54987,54989,54991],{"class":104,"line":2389},[102,54986,38966],{"class":119},[102,54988,260],{"class":108},[102,54990,38688],{"class":187},[102,54992,50676],{"class":119},[102,54994,54995,54997,54999,55001],{"class":104,"line":2403},[102,54996,38966],{"class":119},[102,54998,260],{"class":108},[102,55000,38688],{"class":187},[102,55002,50687],{"class":119},[102,55004,55005,55007,55009,55011],{"class":104,"line":2408},[102,55006,38966],{"class":119},[102,55008,260],{"class":108},[102,55010,38688],{"class":187},[102,55012,50698],{"class":119},[102,55014,55015,55017,55019,55021],{"class":104,"line":2413},[102,55016,38966],{"class":119},[102,55018,260],{"class":108},[102,55020,38688],{"class":187},[102,55022,50709],{"class":119},[102,55024,55025,55027,55029,55031],{"class":104,"line":2427},[102,55026,38966],{"class":119},[102,55028,260],{"class":108},[102,55030,38688],{"class":187},[102,55032,50720],{"class":119},[102,55034,55035,55037],{"class":104,"line":2440},[102,55036,184],{"class":108},[102,55038,39074],{"class":119},[102,55040,55041],{"class":104,"line":2445},[102,55042,652],{"emptyLinePlaceholder":651},[102,55044,55045],{"class":104,"line":2458},[102,55046,50735],{"class":126},[102,55048,55049,55051,55053,55055,55057],{"class":104,"line":2463},[102,55050,10407],{"class":108},[102,55052,39085],{"class":187},[102,55054,1876],{"class":108},[102,55056,39090],{"class":278},[102,55058,12552],{"class":119},[102,55060,55061,55063,55065,55067,55069,55071,55073,55075,55077],{"class":104,"line":2468},[102,55062,39102],{"class":119},[102,55064,260],{"class":108},[102,55066,38316],{"class":119},[102,55068,39109],{"class":278},[102,55070,10565],{"class":108},[102,55072,39114],{"class":119},[102,55074,10562],{"class":108},[102,55076,38341],{"class":278},[102,55078,390],{"class":119},[102,55080,55081,55083,55085],{"class":104,"line":2473},[102,55082,39154],{"class":119},[102,55084,260],{"class":108},[102,55086,50776],{"class":119},[102,55088,55089,55091,55093,55095,55097,55099,55101,55103],{"class":104,"line":2486},[102,55090,39164],{"class":187},[102,55092,39167],{"class":119},[102,55094,7039],{"class":187},[102,55096,1618],{"class":119},[102,55098,39366],{"class":187},[102,55100,1618],{"class":119},[102,55102,39366],{"class":187},[102,55104,39180],{"class":119},[7601,55106,55108],{"id":55107},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,55110,55111],{},"计算图片的均值与方差，用于训练中归一化处理操作",[93,55113,55115],{"className":38243,"code":55114,"language":38245,"meta":98,"style":98},"# 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",[83,55116,55117,55122,55135,55140,55146,55151,55161,55165,55170,55180,55184,55189,55199,55216,55220,55225,55237,55249,55280,55289,55299,55309,55313,55318,55333,55337,55342,55347,55352,55362,55367,55392,55396,55401,55416,55420,55433,55437,55442,55447,55452,55457,55462,55472,55482,55505,55513,55521,55529,55533,55545,55549,55554,55558,55562,55569,55589,55613,55620,55634,55639,55644,55648,55662,55666,55678],{"__ignoreMap":98},[102,55118,55119],{"class":104,"line":105},[102,55120,55121],{"class":126},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[102,55123,55124,55126,55129,55132],{"class":104,"line":116},[102,55125,38602],{"class":108},[102,55127,55128],{"class":187}," PIL",[102,55130,55131],{"class":108}," import",[102,55133,55134],{"class":119}," Image\n",[102,55136,55137],{"class":104,"line":123},[102,55138,55139],{"class":126},"# os 用来处理文件夹和文件路径\n",[102,55141,55142,55144],{"class":104,"line":130},[102,55143,38257],{"class":108},[102,55145,53170],{"class":119},[102,55147,55148],{"class":104,"line":136},[102,55149,55150],{"class":126},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[102,55152,55153,55155,55157,55159],{"class":104,"line":142},[102,55154,38257],{"class":108},[102,55156,39245],{"class":119},[102,55158,39248],{"class":108},[102,55160,39251],{"class":119},[102,55162,55163],{"class":104,"line":148},[102,55164,652],{"emptyLinePlaceholder":651},[102,55166,55167],{"class":104,"line":157},[102,55168,55169],{"class":126},"# 文件夹路径，包含所有图片文件\n",[102,55171,55172,55175,55177],{"class":104,"line":163},[102,55173,55174],{"class":119},"folder_path ",[102,55176,260],{"class":108},[102,55178,55179],{"class":278}," 'data_cat_dog'\n",[102,55181,55182],{"class":104,"line":175},[102,55183,652],{"emptyLinePlaceholder":651},[102,55185,55186],{"class":104,"line":181},[102,55187,55188],{"class":126},"# 初始化累积变量\n",[102,55190,55191,55194,55196],{"class":104,"line":202},[102,55192,55193],{"class":119},"total_pixels ",[102,55195,260],{"class":108},[102,55197,55198],{"class":187}," 0\n",[102,55200,55201,55204,55206,55209,55211,55213],{"class":104,"line":208},[102,55202,55203],{"class":119},"sum_normalized_pixel_values ",[102,55205,260],{"class":108},[102,55207,55208],{"class":119}," np.zeros(",[102,55210,7049],{"class":187},[102,55212,53673],{"class":119},[102,55214,55215],{"class":126},"# 如果是RGB图像，需要三个通道的均值和方差\n",[102,55217,55218],{"class":104,"line":214},[102,55219,652],{"emptyLinePlaceholder":651},[102,55221,55222],{"class":104,"line":225},[102,55223,55224],{"class":126},"# 遍历文件夹中的图片文件\n",[102,55226,55227,55229,55232,55234],{"class":104,"line":230},[102,55228,11841],{"class":108},[102,55230,55231],{"class":119}," root, dirs, files ",[102,55233,33908],{"class":108},[102,55235,55236],{"class":119}," os.walk(folder_path):\n",[102,55238,55239,55241,55244,55246],{"class":104,"line":236},[102,55240,12016],{"class":108},[102,55242,55243],{"class":119}," filename ",[102,55245,33908],{"class":108},[102,55247,55248],{"class":119}," files:\n",[102,55250,55251,55253,55256,55259,55261,55264,55266,55269,55271,55274,55277],{"class":104,"line":242},[102,55252,1202],{"class":108},[102,55254,55255],{"class":119}," filename.endswith((",[102,55257,55258],{"class":278},"'.jpg'",[102,55260,2571],{"class":119},[102,55262,55263],{"class":278},"'.jpeg'",[102,55265,2571],{"class":119},[102,55267,55268],{"class":278},"'.png'",[102,55270,2571],{"class":119},[102,55272,55273],{"class":278},"'.bmp'",[102,55275,55276],{"class":119},")):  ",[102,55278,55279],{"class":126},"# 可根据实际情况添加其他格式\n",[102,55281,55282,55284,55286],{"class":104,"line":248},[102,55283,53538],{"class":119},[102,55285,260],{"class":108},[102,55287,55288],{"class":119}," os.path.join(root, filename)\n",[102,55290,55291,55294,55296],{"class":104,"line":254},[102,55292,55293],{"class":119},"            image ",[102,55295,260],{"class":108},[102,55297,55298],{"class":119}," Image.open(image_path)\n",[102,55300,55301,55304,55306],{"class":104,"line":269},[102,55302,55303],{"class":119},"            image_array ",[102,55305,260],{"class":108},[102,55307,55308],{"class":119}," np.array(image)\n",[102,55310,55311],{"class":104,"line":298},[102,55312,652],{"emptyLinePlaceholder":651},[102,55314,55315],{"class":104,"line":502},[102,55316,55317],{"class":126},"            # 归一化像素值到0-1之间\n",[102,55319,55320,55323,55325,55328,55330],{"class":104,"line":507},[102,55321,55322],{"class":119},"            normalized_image_array ",[102,55324,260],{"class":108},[102,55326,55327],{"class":119}," image_array ",[102,55329,9611],{"class":108},[102,55331,55332],{"class":187}," 255.0\n",[102,55334,55335],{"class":104,"line":512},[102,55336,652],{"emptyLinePlaceholder":651},[102,55338,55339],{"class":104,"line":521},[102,55340,55341],{"class":126},"            # print(image_path)\n",[102,55343,55344],{"class":104,"line":526},[102,55345,55346],{"class":126},"            # print(normalized_image_array.shape)\n",[102,55348,55349],{"class":104,"line":532},[102,55350,55351],{"class":126},"            # 累积归一化后的像素值和像素数量\n",[102,55353,55354,55357,55359],{"class":104,"line":538},[102,55355,55356],{"class":119},"            total_pixels ",[102,55358,18244],{"class":108},[102,55360,55361],{"class":119}," normalized_image_array.size\n",[102,55363,55364],{"class":104,"line":555},[102,55365,55366],{"class":126},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[102,55368,55369,55372,55374,55377,55380,55382,55384,55386,55388,55390],{"class":104,"line":570},[102,55370,55371],{"class":119},"            sum_normalized_pixel_values ",[102,55373,18244],{"class":108},[102,55375,55376],{"class":119}," np.sum(normalized_image_array, ",[102,55378,55379],{"class":386},"axis",[102,55381,260],{"class":108},[102,55383,380],{"class":119},[102,55385,8423],{"class":187},[102,55387,2571],{"class":119},[102,55389,7039],{"class":187},[102,55391,38362],{"class":119},[102,55393,55394],{"class":104,"line":581},[102,55395,652],{"emptyLinePlaceholder":651},[102,55397,55398],{"class":104,"line":819},[102,55399,55400],{"class":126},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[102,55402,55403,55406,55408,55411,55413],{"class":104,"line":828},[102,55404,55405],{"class":119},"mean ",[102,55407,260],{"class":108},[102,55409,55410],{"class":119}," sum_normalized_pixel_values ",[102,55412,9611],{"class":108},[102,55414,55415],{"class":119}," total_pixels\n",[102,55417,55418],{"class":104,"line":837},[102,55419,652],{"emptyLinePlaceholder":651},[102,55421,55422,55425,55427,55429,55431],{"class":104,"line":842},[102,55423,55424],{"class":119},"sum_squared_diff ",[102,55426,260],{"class":108},[102,55428,55208],{"class":119},[102,55430,7049],{"class":187},[102,55432,390],{"class":119},[102,55434,55435],{"class":104,"line":855},[102,55436,652],{"emptyLinePlaceholder":651},[102,55438,55439],{"class":104,"line":860},[102,55440,55441],{"class":126},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[102,55443,55444],{"class":104,"line":871},[102,55445,55446],{"class":126},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[102,55448,55449],{"class":104,"line":1359},[102,55450,55451],{"class":126},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[102,55453,55454],{"class":104,"line":1368},[102,55455,55456],{"class":126},"# Image.open(image_path)：打开图片\n",[102,55458,55459],{"class":104,"line":1373},[102,55460,55461],{"class":126},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[102,55463,55464,55466,55468,55470],{"class":104,"line":1378},[102,55465,11841],{"class":108},[102,55467,55231],{"class":119},[102,55469,33908],{"class":108},[102,55471,55236],{"class":119},[102,55473,55474,55476,55478,55480],{"class":104,"line":1384},[102,55475,12016],{"class":108},[102,55477,55243],{"class":119},[102,55479,33908],{"class":108},[102,55481,55248],{"class":119},[102,55483,55484,55486,55488,55490,55492,55494,55496,55498,55500,55502],{"class":104,"line":1398},[102,55485,1202],{"class":108},[102,55487,55255],{"class":119},[102,55489,55258],{"class":278},[102,55491,2571],{"class":119},[102,55493,55263],{"class":278},[102,55495,2571],{"class":119},[102,55497,55268],{"class":278},[102,55499,2571],{"class":119},[102,55501,55273],{"class":278},[102,55503,55504],{"class":119},")):\n",[102,55506,55507,55509,55511],{"class":104,"line":1424},[102,55508,53538],{"class":119},[102,55510,260],{"class":108},[102,55512,55288],{"class":119},[102,55514,55515,55517,55519],{"class":104,"line":1429},[102,55516,55293],{"class":119},[102,55518,260],{"class":108},[102,55520,55298],{"class":119},[102,55522,55523,55525,55527],{"class":104,"line":1435},[102,55524,55303],{"class":119},[102,55526,260],{"class":108},[102,55528,55308],{"class":119},[102,55530,55531],{"class":104,"line":1450},[102,55532,55317],{"class":126},[102,55534,55535,55537,55539,55541,55543],{"class":104,"line":1473},[102,55536,55322],{"class":119},[102,55538,260],{"class":108},[102,55540,55327],{"class":119},[102,55542,9611],{"class":108},[102,55544,55332],{"class":187},[102,55546,55547],{"class":104,"line":1478},[102,55548,55346],{"class":126},[102,55550,55551],{"class":104,"line":1484},[102,55552,55553],{"class":126},"            # print(mean.shape)\n",[102,55555,55556],{"class":104,"line":1499},[102,55557,55341],{"class":126},[102,55559,55560],{"class":104,"line":1508},[102,55561,652],{"emptyLinePlaceholder":651},[102,55563,55564,55567],{"class":104,"line":1513},[102,55565,55566],{"class":108},"            try",[102,55568,12552],{"class":119},[102,55570,55571,55574,55576,55579,55581,55584,55586],{"class":104,"line":1524},[102,55572,55573],{"class":119},"                diff ",[102,55575,260],{"class":108},[102,55577,55578],{"class":119}," (normalized_image_array ",[102,55580,2833],{"class":108},[102,55582,55583],{"class":119}," mean) ",[102,55585,19403],{"class":108},[102,55587,55588],{"class":187}," 2\n",[102,55590,55591,55594,55596,55599,55601,55603,55605,55607,55609,55611],{"class":104,"line":1529},[102,55592,55593],{"class":119},"                sum_squared_diff ",[102,55595,18244],{"class":108},[102,55597,55598],{"class":119}," np.sum(diff, ",[102,55600,55379],{"class":386},[102,55602,260],{"class":108},[102,55604,380],{"class":119},[102,55606,8423],{"class":187},[102,55608,2571],{"class":119},[102,55610,7039],{"class":187},[102,55612,38362],{"class":119},[102,55614,55615,55618],{"class":104,"line":1538},[102,55616,55617],{"class":108},"            except",[102,55619,12552],{"class":119},[102,55621,55622,55625,55627,55629,55632],{"class":104,"line":2089},[102,55623,55624],{"class":187},"                print",[102,55626,380],{"class":119},[102,55628,9097],{"class":108},[102,55630,55631],{"class":278},"\"捕获到自定义异常\"",[102,55633,390],{"class":119},[102,55635,55636],{"class":104,"line":2094},[102,55637,55638],{"class":126},"            # diff = (normalized_image_array - mean) ** 2\n",[102,55640,55641],{"class":104,"line":2100},[102,55642,55643],{"class":126},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[102,55645,55646],{"class":104,"line":2106},[102,55647,652],{"emptyLinePlaceholder":651},[102,55649,55650,55653,55655,55658,55660],{"class":104,"line":2120},[102,55651,55652],{"class":119},"variance ",[102,55654,260],{"class":108},[102,55656,55657],{"class":119}," sum_squared_diff ",[102,55659,9611],{"class":108},[102,55661,55415],{"class":119},[102,55663,55664],{"class":104,"line":2128},[102,55665,652],{"emptyLinePlaceholder":651},[102,55667,55668,55670,55672,55675],{"class":104,"line":2149},[102,55669,38280],{"class":187},[102,55671,380],{"class":119},[102,55673,55674],{"class":278},"\"Mean:\"",[102,55676,55677],{"class":119},", mean)\n",[102,55679,55680,55682,55684,55687],{"class":104,"line":2161},[102,55681,38280],{"class":187},[102,55683,380],{"class":119},[102,55685,55686],{"class":278},"\"Variance:\"",[102,55688,55689],{"class":119},", variance)\n",[93,55691,55693],{"className":38243,"code":55692,"language":38245,"meta":98,"style":98},"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",[83,55694,55695,55701,55707,55717,55723,55733,55747,55757,55767,55777,55781,55791,55801,55805,55809,55817,55822,55827,55846,55850,55855,55860,55865,55870,55911,55916,55926,55931,55944,55949,55954,55959,55964,55969,55973,55978,55983,56005,56009,56041,56055,56065,56075,56079,56089,56103,56113,56123,56133,56139,56143,56147,56151,56155,56159,56167,56187,56191,56195,56199,56203,56219,56223,56227,56235,56239,56243,56251,56255,56259,56263,56271,56275,56279,56283,56291,56295,56303,56307,56315,56319,56327,56331,56339,56343,56347,56355,56359,56363,56375,56399,56413,56417,56421,56425,56433,56437,56445,56449,56457,56461,56469,56473,56481,56485,56493,56497,56509,56513,56521,56525,56533,56537,56541,56545,56549,56557,56561,56577,56581,56589,56593,56597,56601,56605,56609,56613,56617,56633,56637,56649,56653,56665,56669,56681,56685,56693,56697,56705,56709,56713,56717,56723,56727,56735,56739,56755,56759,56767,56771,56787,56799,56803,56815,56819,56823,56831,56835,56839,56847,56851,56859,56863,56871,56875,56879,56921,56963,56967,56971,56987,56991,57007,57011,57015,57023,57027,57031,57043,57081,57085,57089,57097,57101,57115,57125,57131,57137,57143,57149,57153,57157,57163,57167,57171,57179,57183,57201,57205,57209,57213,57229,57233,57237,57241,57245,57249,57269,57289,57293,57297,57301,57309,57317,57321,57337,57357,57377,57381,57386,57395,57404,57409,57414,57419,57432,57437,57446,57455,57472],{"__ignoreMap":98},[102,55696,55697,55699],{"class":104,"line":105},[102,55698,38257],{"class":108},[102,55700,39687],{"class":119},[102,55702,55703,55705],{"class":104,"line":116},[102,55704,38257],{"class":108},[102,55706,39694],{"class":119},[102,55708,55709,55711,55713,55715],{"class":104,"line":123},[102,55710,38257],{"class":108},[102,55712,39705],{"class":119},[102,55714,39248],{"class":108},[102,55716,39710],{"class":119},[102,55718,55719,55721],{"class":104,"line":130},[102,55720,38257],{"class":108},[102,55722,38260],{"class":119},[102,55724,55725,55727,55729,55731],{"class":104,"line":136},[102,55726,38602],{"class":108},[102,55728,39280],{"class":119},[102,55730,38257],{"class":108},[102,55732,39727],{"class":119},[102,55734,55735,55737,55739,55741,55744],{"class":104,"line":142},[102,55736,38602],{"class":108},[102,55738,39233],{"class":119},[102,55740,38257],{"class":108},[102,55742,55743],{"class":119}," ImageFolder ",[102,55745,55746],{"class":126},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[102,55748,55749,55751,55753,55755],{"class":104,"line":148},[102,55750,38602],{"class":108},[102,55752,39263],{"class":119},[102,55754,38257],{"class":108},[102,55756,39268],{"class":119},[102,55758,55759,55761,55763,55765],{"class":104,"line":157},[102,55760,38257],{"class":108},[102,55762,39280],{"class":119},[102,55764,39248],{"class":108},[102,55766,39285],{"class":119},[102,55768,55769,55771,55773,55775],{"class":104,"line":163},[102,55770,38257],{"class":108},[102,55772,39297],{"class":119},[102,55774,39248],{"class":108},[102,55776,39302],{"class":119},[102,55778,55779],{"class":104,"line":175},[102,55780,39772],{"class":126},[102,55782,55783,55785,55787,55789],{"class":104,"line":181},[102,55784,38602],{"class":108},[102,55786,39779],{"class":119},[102,55788,38257],{"class":108},[102,55790,50896],{"class":119},[102,55792,55793,55795,55797,55799],{"class":104,"line":202},[102,55794,38602],{"class":108},[102,55796,38605],{"class":119},[102,55798,38257],{"class":108},[102,55800,38610],{"class":119},[102,55802,55803],{"class":104,"line":208},[102,55804,652],{"emptyLinePlaceholder":651},[102,55806,55807],{"class":104,"line":214},[102,55808,39807],{"class":126},[102,55810,55811,55813,55815],{"class":104,"line":225},[102,55812,39812],{"class":108},[102,55814,39815],{"class":112},[102,55816,39818],{"class":119},[102,55818,55819],{"class":104,"line":230},[102,55820,55821],{"class":126},"    # 导入自己的数据集，并进行数据处理\n",[102,55823,55824],{"class":104,"line":236},[102,55825,55826],{"class":126},"    # 定义数据集的路径\n",[102,55828,55829,55832,55834,55836,55838,55840,55844],{"class":104,"line":242},[102,55830,55831],{"class":187},"    ROOT_PATH",[102,55833,260],{"class":108},[102,55835,9695],{"class":108},[102,55837,9288],{"class":278},[102,55839,9585],{"class":187},[102,55841,55843],{"class":55842},"sA_wV","\u002Fdata\u002Ftrain",[102,55845,32998],{"class":278},[102,55847,55848],{"class":104,"line":248},[102,55849,652],{"emptyLinePlaceholder":651},[102,55851,55852],{"class":104,"line":254},[102,55853,55854],{"class":126},"    # 定义归一化方法\n",[102,55856,55857],{"class":104,"line":269},[102,55858,55859],{"class":126},"    # 这里需要先计算一下数据集的均值和方差\n",[102,55861,55862],{"class":104,"line":298},[102,55863,55864],{"class":126},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[102,55866,55867],{"class":104,"line":502},[102,55868,55869],{"class":126},"    # 第一个参数是均值，第二个参数是方差\n",[102,55871,55872,55875,55877,55880,55883,55885,55888,55890,55893,55896,55899,55901,55904,55906,55909],{"class":104,"line":507},[102,55873,55874],{"class":119},"    normalize",[102,55876,260],{"class":108},[102,55878,55879],{"class":119},"transforms.Normalize([",[102,55881,55882],{"class":187},"0.162",[102,55884,1618],{"class":119},[102,55886,55887],{"class":187},"0.151",[102,55889,1618],{"class":119},[102,55891,55892],{"class":187},"0.138",[102,55894,55895],{"class":119},"],[",[102,55897,55898],{"class":187},"0.058",[102,55900,1618],{"class":119},[102,55902,55903],{"class":187},"0.052",[102,55905,1618],{"class":119},[102,55907,55908],{"class":187},"0.048",[102,55910,13466],{"class":119},[102,55912,55913],{"class":104,"line":512},[102,55914,55915],{"class":126},"    # 定义数据集处理方法变量\n",[102,55917,55918,55921,55923],{"class":104,"line":521},[102,55919,55920],{"class":119},"    train_transform",[102,55922,260],{"class":108},[102,55924,55925],{"class":119},"transforms.Compose([\n",[102,55927,55928],{"class":104,"line":526},[102,55929,55930],{"class":126},"        # 调整图像大小为224*224\n",[102,55932,55933,55936,55938,55940,55942],{"class":104,"line":532},[102,55934,55935],{"class":119},"        transforms.Resize((",[102,55937,39366],{"class":187},[102,55939,1618],{"class":119},[102,55941,39366],{"class":187},[102,55943,50487],{"class":119},[102,55945,55946],{"class":104,"line":538},[102,55947,55948],{"class":126},"        # 将图像转换为张量\n",[102,55950,55951],{"class":104,"line":555},[102,55952,55953],{"class":119},"        transforms.ToTensor(),\n",[102,55955,55956],{"class":104,"line":570},[102,55957,55958],{"class":119},"        normalize])\n",[102,55960,55961],{"class":104,"line":581},[102,55962,55963],{"class":126},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[102,55965,55966],{"class":104,"line":819},[102,55967,55968],{"class":126},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[102,55970,55971],{"class":104,"line":828},[102,55972,652],{"emptyLinePlaceholder":651},[102,55974,55975],{"class":104,"line":837},[102,55976,55977],{"class":126},"    # 加载数据集\n",[102,55979,55980],{"class":104,"line":842},[102,55981,55982],{"class":126},"    # 传入数据集路径与处理方法\n",[102,55984,55985,55987,55989,55992,55995,55997,56000,56002],{"class":104,"line":855},[102,55986,39823],{"class":119},[102,55988,260],{"class":108},[102,55990,55991],{"class":119},"ImageFolder(",[102,55993,55994],{"class":187},"ROOT_PATH",[102,55996,1618],{"class":119},[102,55998,55999],{"class":386},"transform",[102,56001,260],{"class":108},[102,56003,56004],{"class":119},"train_transform)\n",[102,56006,56007],{"class":104,"line":860},[102,56008,652],{"emptyLinePlaceholder":651},[102,56010,56011,56013,56015,56017,56019,56021,56023,56025,56027,56029,56031,56033,56035,56037,56039],{"class":104,"line":871},[102,56012,39875],{"class":119},[102,56014,260],{"class":108},[102,56016,39880],{"class":119},[102,56018,39883],{"class":187},[102,56020,380],{"class":119},[102,56022,39888],{"class":187},[102,56024,191],{"class":108},[102,56026,16145],{"class":187},[102,56028,39895],{"class":119},[102,56030,39883],{"class":187},[102,56032,380],{"class":119},[102,56034,39902],{"class":187},[102,56036,191],{"class":108},[102,56038,16145],{"class":187},[102,56040,39909],{"class":119},[102,56042,56043,56045,56047,56049,56051,56053],{"class":104,"line":1359},[102,56044,39914],{"class":119},[102,56046,260],{"class":108},[102,56048,39919],{"class":119},[102,56050,39402],{"class":386},[102,56052,260],{"class":108},[102,56054,39407],{"class":119},[102,56056,56057,56059,56061,56063],{"class":104,"line":1368},[102,56058,39930],{"class":386},[102,56060,260],{"class":108},[102,56062,9235],{"class":187},[102,56064,39331],{"class":119},[102,56066,56067,56069,56071,56073],{"class":104,"line":1373},[102,56068,39942],{"class":386},[102,56070,260],{"class":108},[102,56072,39341],{"class":187},[102,56074,39331],{"class":119},[102,56076,56077],{"class":104,"line":1378},[102,56078,39953],{"class":126},[102,56080,56081,56083,56085,56087],{"class":104,"line":1384},[102,56082,39958],{"class":386},[102,56084,260],{"class":108},[102,56086,9428],{"class":187},[102,56088,390],{"class":119},[102,56090,56091,56093,56095,56097,56099,56101],{"class":104,"line":1398},[102,56092,39969],{"class":119},[102,56094,260],{"class":108},[102,56096,39399],{"class":119},[102,56098,39402],{"class":386},[102,56100,260],{"class":108},[102,56102,39980],{"class":119},[102,56104,56105,56107,56109,56111],{"class":104,"line":1424},[102,56106,39985],{"class":386},[102,56108,260],{"class":108},[102,56110,9235],{"class":187},[102,56112,39331],{"class":119},[102,56114,56115,56117,56119,56121],{"class":104,"line":1429},[102,56116,39996],{"class":386},[102,56118,260],{"class":108},[102,56120,39341],{"class":187},[102,56122,39331],{"class":119},[102,56124,56125,56127,56129,56131],{"class":104,"line":1435},[102,56126,40007],{"class":386},[102,56128,260],{"class":108},[102,56130,9428],{"class":187},[102,56132,390],{"class":119},[102,56134,56135,56137],{"class":104,"line":1450},[102,56136,863],{"class":108},[102,56138,40020],{"class":119},[102,56140,56141],{"class":104,"line":1473},[102,56142,652],{"emptyLinePlaceholder":651},[102,56144,56145],{"class":104,"line":1478},[102,56146,40029],{"class":126},[102,56148,56149],{"class":104,"line":1484},[102,56150,40034],{"class":126},[102,56152,56153],{"class":104,"line":1499},[102,56154,652],{"emptyLinePlaceholder":651},[102,56156,56157],{"class":104,"line":1508},[102,56158,40043],{"class":126},[102,56160,56161,56163,56165],{"class":104,"line":1513},[102,56162,39812],{"class":108},[102,56164,40050],{"class":112},[102,56166,40053],{"class":119},[102,56168,56169,56171,56173,56175,56177,56179,56181,56183,56185],{"class":104,"line":1524},[102,56170,39102],{"class":119},[102,56172,260],{"class":108},[102,56174,38316],{"class":119},[102,56176,39109],{"class":278},[102,56178,10565],{"class":108},[102,56180,39114],{"class":119},[102,56182,10562],{"class":108},[102,56184,40072],{"class":278},[102,56186,390],{"class":119},[102,56188,56189],{"class":104,"line":1529},[102,56190,652],{"emptyLinePlaceholder":651},[102,56192,56193],{"class":104,"line":1538},[102,56194,40087],{"class":126},[102,56196,56197],{"class":104,"line":2089},[102,56198,40092],{"class":126},[102,56200,56201],{"class":104,"line":2094},[102,56202,40097],{"class":126},[102,56204,56205,56207,56209,56211,56213,56215,56217],{"class":104,"line":2100},[102,56206,40102],{"class":119},[102,56208,260],{"class":108},[102,56210,40107],{"class":119},[102,56212,40110],{"class":386},[102,56214,260],{"class":108},[102,56216,40115],{"class":187},[102,56218,390],{"class":119},[102,56220,56221],{"class":104,"line":2106},[102,56222,652],{"emptyLinePlaceholder":651},[102,56224,56225],{"class":104,"line":2120},[102,56226,40126],{"class":126},[102,56228,56229,56231,56233],{"class":104,"line":2128},[102,56230,40131],{"class":119},[102,56232,260],{"class":108},[102,56234,40136],{"class":119},[102,56236,56237],{"class":104,"line":2149},[102,56238,652],{"emptyLinePlaceholder":651},[102,56240,56241],{"class":104,"line":2161},[102,56242,40145],{"class":126},[102,56244,56245,56247,56249],{"class":104,"line":2167},[102,56246,39154],{"class":119},[102,56248,260],{"class":108},[102,56250,40154],{"class":119},[102,56252,56253],{"class":104,"line":2190},[102,56254,40159],{"class":126},[102,56256,56257],{"class":104,"line":2196},[102,56258,40164],{"class":126},[102,56260,56261],{"class":104,"line":2219},[102,56262,40169],{"class":126},[102,56264,56265,56267,56269],{"class":104,"line":2233},[102,56266,40174],{"class":119},[102,56268,260],{"class":108},[102,56270,40179],{"class":119},[102,56272,56273],{"class":104,"line":2253},[102,56274,652],{"emptyLinePlaceholder":651},[102,56276,56277],{"class":104,"line":2259},[102,56278,40192],{"class":126},[102,56280,56281],{"class":104,"line":2270},[102,56282,40197],{"class":126},[102,56284,56285,56287,56289],{"class":104,"line":2293},[102,56286,40202],{"class":119},[102,56288,260],{"class":108},[102,56290,40207],{"class":187},[102,56292,56293],{"class":104,"line":2315},[102,56294,40212],{"class":126},[102,56296,56297,56299,56301],{"class":104,"line":2320},[102,56298,40217],{"class":119},[102,56300,260],{"class":108},[102,56302,40222],{"class":119},[102,56304,56305],{"class":104,"line":2326},[102,56306,40227],{"class":126},[102,56308,56309,56311,56313],{"class":104,"line":2340},[102,56310,40232],{"class":119},[102,56312,260],{"class":108},[102,56314,40222],{"class":119},[102,56316,56317],{"class":104,"line":2354},[102,56318,40241],{"class":126},[102,56320,56321,56323,56325],{"class":104,"line":2359},[102,56322,40246],{"class":119},[102,56324,260],{"class":108},[102,56326,40222],{"class":119},[102,56328,56329],{"class":104,"line":2373},[102,56330,40255],{"class":126},[102,56332,56333,56335,56337],{"class":104,"line":2378},[102,56334,40260],{"class":119},[102,56336,260],{"class":108},[102,56338,40222],{"class":119},[102,56340,56341],{"class":104,"line":2384},[102,56342,652],{"emptyLinePlaceholder":651},[102,56344,56345],{"class":104,"line":2389},[102,56346,40273],{"class":126},[102,56348,56349,56351,56353],{"class":104,"line":2403},[102,56350,40278],{"class":119},[102,56352,260],{"class":108},[102,56354,40283],{"class":119},[102,56356,56357],{"class":104,"line":2408},[102,56358,652],{"emptyLinePlaceholder":651},[102,56360,56361],{"class":104,"line":2413},[102,56362,40296],{"class":126},[102,56364,56365,56367,56369,56371,56373],{"class":104,"line":2427},[102,56366,12016],{"class":108},[102,56368,40303],{"class":119},[102,56370,33908],{"class":108},[102,56372,40308],{"class":187},[102,56374,40311],{"class":119},[102,56376,56377,56379,56381,56383,56385,56387,56389,56391,56393,56395,56397],{"class":104,"line":2440},[102,56378,40316],{"class":187},[102,56380,380],{"class":119},[102,56382,40321],{"class":278},[102,56384,40324],{"class":187},[102,56386,9611],{"class":278},[102,56388,40324],{"class":187},[102,56390,9288],{"class":278},[102,56392,40333],{"class":119},[102,56394,2833],{"class":108},[102,56396,7039],{"class":187},[102,56398,38362],{"class":119},[102,56400,56401,56403,56405,56407,56409,56411],{"class":104,"line":2445},[102,56402,40316],{"class":187},[102,56404,380],{"class":119},[102,56406,40348],{"class":278},[102,56408,191],{"class":108},[102,56410,263],{"class":187},[102,56412,390],{"class":119},[102,56414,56415],{"class":104,"line":2458},[102,56416,652],{"emptyLinePlaceholder":651},[102,56418,56419],{"class":104,"line":2463},[102,56420,40363],{"class":126},[102,56422,56423],{"class":104,"line":2468},[102,56424,40368],{"class":126},[102,56426,56427,56429,56431],{"class":104,"line":2473},[102,56428,40373],{"class":119},[102,56430,260],{"class":108},[102,56432,40207],{"class":187},[102,56434,56435],{"class":104,"line":2486},[102,56436,40382],{"class":126},[102,56438,56439,56441,56443],{"class":104,"line":2491},[102,56440,40387],{"class":119},[102,56442,260],{"class":108},[102,56444,11901],{"class":187},[102,56446,56447],{"class":104,"line":40498},[102,56448,40396],{"class":126},[102,56450,56451,56453,56455],{"class":104,"line":40504},[102,56452,40401],{"class":119},[102,56454,260],{"class":108},[102,56456,40207],{"class":187},[102,56458,56459],{"class":104,"line":40510},[102,56460,40410],{"class":126},[102,56462,56463,56465,56467],{"class":104,"line":40516},[102,56464,40415],{"class":119},[102,56466,260],{"class":108},[102,56468,11901],{"class":187},[102,56470,56471],{"class":104,"line":40522},[102,56472,40424],{"class":126},[102,56474,56475,56477,56479],{"class":104,"line":40533},[102,56476,40429],{"class":119},[102,56478,260],{"class":108},[102,56480,11901],{"class":187},[102,56482,56483],{"class":104,"line":40539},[102,56484,40438],{"class":126},[102,56486,56487,56489,56491],{"class":104,"line":40559},[102,56488,40443],{"class":119},[102,56490,260],{"class":108},[102,56492,11901],{"class":187},[102,56494,56495],{"class":104,"line":40565},[102,56496,40452],{"class":126},[102,56498,56499,56501,56503,56505,56507],{"class":104,"line":40576},[102,56500,12217],{"class":108},[102,56502,39466],{"class":119},[102,56504,33908],{"class":108},[102,56506,39471],{"class":187},[102,56508,40465],{"class":119},[102,56510,56511],{"class":104,"line":40582},[102,56512,40470],{"class":126},[102,56514,56515,56517,56519],{"class":104,"line":40588},[102,56516,40475],{"class":119},[102,56518,260],{"class":108},[102,56520,40480],{"class":119},[102,56522,56523],{"class":104,"line":40594},[102,56524,40485],{"class":126},[102,56526,56527,56529,56531],{"class":104,"line":40600},[102,56528,40490],{"class":119},[102,56530,260],{"class":108},[102,56532,40495],{"class":119},[102,56534,56535],{"class":104,"line":40606},[102,56536,40501],{"class":126},[102,56538,56539],{"class":104,"line":40612},[102,56540,40507],{"class":119},[102,56542,56543],{"class":104,"line":40618},[102,56544,40513],{"class":126},[102,56546,56547],{"class":104,"line":40638},[102,56548,40519],{"class":126},[102,56550,56551,56553,56555],{"class":104,"line":40644},[102,56552,40525],{"class":119},[102,56554,260],{"class":108},[102,56556,40530],{"class":119},[102,56558,56559],{"class":104,"line":40660},[102,56560,40536],{"class":126},[102,56562,56563,56565,56567,56569,56571,56573,56575],{"class":104,"line":40666},[102,56564,40542],{"class":119},[102,56566,260],{"class":108},[102,56568,40547],{"class":119},[102,56570,40550],{"class":386},[102,56572,260],{"class":108},[102,56574,7039],{"class":187},[102,56576,390],{"class":119},[102,56578,56579],{"class":104,"line":40680},[102,56580,40562],{"class":126},[102,56582,56583,56585,56587],{"class":104,"line":40686},[102,56584,40568],{"class":119},[102,56586,260],{"class":108},[102,56588,40573],{"class":119},[102,56590,56591],{"class":104,"line":40701},[102,56592,40579],{"class":126},[102,56594,56595],{"class":104,"line":40707},[102,56596,40585],{"class":119},[102,56598,56599],{"class":104,"line":40716},[102,56600,40591],{"class":126},[102,56602,56603],{"class":104,"line":40722},[102,56604,40597],{"class":119},[102,56606,56607],{"class":104,"line":40731},[102,56608,40603],{"class":126},[102,56610,56611],{"class":104,"line":40737},[102,56612,40609],{"class":119},[102,56614,56615],{"class":104,"line":40743},[102,56616,40615],{"class":126},[102,56618,56619,56621,56623,56625,56627,56629,56631],{"class":104,"line":40752},[102,56620,40621],{"class":119},[102,56622,18244],{"class":108},[102,56624,40626],{"class":119},[102,56626,191],{"class":108},[102,56628,40631],{"class":119},[102,56630,8423],{"class":187},[102,56632,390],{"class":119},[102,56634,56635],{"class":104,"line":40758},[102,56636,40641],{"class":126},[102,56638,56639,56641,56643,56645,56647],{"class":104,"line":40769},[102,56640,40647],{"class":119},[102,56642,18244],{"class":108},[102,56644,40652],{"class":119},[102,56646,1876],{"class":108},[102,56648,40657],{"class":119},[102,56650,56651],{"class":104,"line":40775},[102,56652,40663],{"class":126},[102,56654,56655,56657,56659,56661,56663],{"class":104,"line":40794},[102,56656,40669],{"class":119},[102,56658,18244],{"class":108},[102,56660,40631],{"class":119},[102,56662,8423],{"class":187},[102,56664,390],{"class":119},[102,56666,56667],{"class":104,"line":40800},[102,56668,40683],{"class":126},[102,56670,56671,56673,56675,56677,56679],{"class":104,"line":40811},[102,56672,12217],{"class":108},[102,56674,40691],{"class":119},[102,56676,33908],{"class":108},[102,56678,39471],{"class":187},[102,56680,40698],{"class":119},[102,56682,56683],{"class":104,"line":40817},[102,56684,40704],{"class":126},[102,56686,56687,56689,56691],{"class":104,"line":40837},[102,56688,40475],{"class":119},[102,56690,260],{"class":108},[102,56692,40480],{"class":119},[102,56694,56695],{"class":104,"line":40853},[102,56696,40719],{"class":126},[102,56698,56699,56701,56703],{"class":104,"line":40859},[102,56700,40490],{"class":119},[102,56702,260],{"class":108},[102,56704,40495],{"class":119},[102,56706,56707],{"class":104,"line":40873},[102,56708,40734],{"class":126},[102,56710,56711],{"class":104,"line":40879},[102,56712,40740],{"class":119},[102,56714,56715],{"class":104,"line":40885},[102,56716,44221],{"class":126},[102,56718,56719,56721],{"class":104,"line":40896},[102,56720,40746],{"class":108},[102,56722,40749],{"class":119},[102,56724,56725],{"class":104,"line":40902},[102,56726,40755],{"class":126},[102,56728,56729,56731,56733],{"class":104,"line":40908},[102,56730,44236],{"class":119},[102,56732,260],{"class":108},[102,56734,40530],{"class":119},[102,56736,56737],{"class":104,"line":40918},[102,56738,40772],{"class":126},[102,56740,56741,56743,56745,56747,56749,56751,56753],{"class":104,"line":40924},[102,56742,44249],{"class":119},[102,56744,260],{"class":108},[102,56746,40547],{"class":119},[102,56748,40550],{"class":386},[102,56750,260],{"class":108},[102,56752,7039],{"class":187},[102,56754,390],{"class":119},[102,56756,56757],{"class":104,"line":40935},[102,56758,40797],{"class":126},[102,56760,56761,56763,56765],{"class":104,"line":40941},[102,56762,44270],{"class":119},[102,56764,260],{"class":108},[102,56766,40573],{"class":119},[102,56768,56769],{"class":104,"line":40951},[102,56770,40814],{"class":126},[102,56772,56773,56775,56777,56779,56781,56783,56785],{"class":104,"line":40956},[102,56774,44283],{"class":119},[102,56776,18244],{"class":108},[102,56778,44288],{"class":119},[102,56780,191],{"class":108},[102,56782,40631],{"class":119},[102,56784,8423],{"class":187},[102,56786,390],{"class":119},[102,56788,56789,56791,56793,56795,56797],{"class":104,"line":40962},[102,56790,44301],{"class":119},[102,56792,18244],{"class":108},[102,56794,40652],{"class":119},[102,56796,1876],{"class":108},[102,56798,40657],{"class":119},[102,56800,56801],{"class":104,"line":41011},[102,56802,44314],{"class":126},[102,56804,56805,56807,56809,56811,56813],{"class":104,"line":41058},[102,56806,44319],{"class":119},[102,56808,18244],{"class":108},[102,56810,40631],{"class":119},[102,56812,8423],{"class":187},[102,56814,390],{"class":119},[102,56816,56817],{"class":104,"line":41063},[102,56818,40876],{"class":126},[102,56820,56821],{"class":104,"line":41069},[102,56822,40882],{"class":126},[102,56824,56825,56827,56829],{"class":104,"line":41088},[102,56826,40888],{"class":119},[102,56828,9611],{"class":108},[102,56830,40893],{"class":119},[102,56832,56833],{"class":104,"line":41094},[102,56834,40899],{"class":126},[102,56836,56837],{"class":104,"line":41114},[102,56838,40905],{"class":126},[102,56840,56841,56843,56845],{"class":104,"line":41120},[102,56842,40911],{"class":119},[102,56844,9611],{"class":108},[102,56846,40893],{"class":119},[102,56848,56849],{"class":104,"line":41126},[102,56850,40921],{"class":126},[102,56852,56853,56855,56857],{"class":104,"line":41136},[102,56854,40927],{"class":119},[102,56856,9611],{"class":108},[102,56858,40932],{"class":119},[102,56860,56861],{"class":104,"line":41141},[102,56862,40938],{"class":126},[102,56864,56865,56867,56869],{"class":104,"line":41147},[102,56866,40944],{"class":119},[102,56868,9611],{"class":108},[102,56870,40932],{"class":119},[102,56872,56873],{"class":104,"line":41163},[102,56874,652],{"emptyLinePlaceholder":651},[102,56876,56877],{"class":104,"line":41208},[102,56878,40959],{"class":126},[102,56880,56881,56883,56885,56887,56889,56891,56893,56895,56897,56899,56901,56903,56905,56907,56909,56911,56913,56915,56917,56919],{"class":104,"line":41214},[102,56882,40316],{"class":187},[102,56884,380],{"class":119},[102,56886,12405],{"class":278},[102,56888,40324],{"class":187},[102,56890,40973],{"class":278},[102,56892,9918],{"class":187},[102,56894,40978],{"class":108},[102,56896,9967],{"class":187},[102,56898,40983],{"class":278},[102,56900,9918],{"class":187},[102,56902,40978],{"class":108},[102,56904,9967],{"class":187},[102,56906,12405],{"class":278},[102,56908,40994],{"class":119},[102,56910,2833],{"class":108},[102,56912,7039],{"class":187},[102,56914,41001],{"class":119},[102,56916,2833],{"class":108},[102,56918,7039],{"class":187},[102,56920,41008],{"class":119},[102,56922,56923,56925,56927,56929,56931,56933,56935,56937,56939,56941,56943,56945,56947,56949,56951,56953,56955,56957,56959,56961],{"class":104,"line":41220},[102,56924,40316],{"class":187},[102,56926,380],{"class":119},[102,56928,12405],{"class":278},[102,56930,40324],{"class":187},[102,56932,41022],{"class":278},[102,56934,9918],{"class":187},[102,56936,40978],{"class":108},[102,56938,9967],{"class":187},[102,56940,41031],{"class":278},[102,56942,9918],{"class":187},[102,56944,40978],{"class":108},[102,56946,9967],{"class":187},[102,56948,12405],{"class":278},[102,56950,41042],{"class":119},[102,56952,2833],{"class":108},[102,56954,7039],{"class":187},[102,56956,41049],{"class":119},[102,56958,2833],{"class":108},[102,56960,7039],{"class":187},[102,56962,41008],{"class":119},[102,56964,56965],{"class":104,"line":41226},[102,56966,652],{"emptyLinePlaceholder":651},[102,56968,56969],{"class":104,"line":41237},[102,56970,41066],{"class":126},[102,56972,56973,56975,56977,56979,56981,56983,56985],{"class":104,"line":41243},[102,56974,1202],{"class":108},[102,56976,41074],{"class":119},[102,56978,2833],{"class":108},[102,56980,7039],{"class":187},[102,56982,9961],{"class":119},[102,56984,1219],{"class":108},[102,56986,41085],{"class":119},[102,56988,56989],{"class":104,"line":41249},[102,56990,41091],{"class":126},[102,56992,56993,56995,56997,56999,57001,57003,57005],{"class":104,"line":41255},[102,56994,41097],{"class":119},[102,56996,9086],{"class":187},[102,56998,260],{"class":108},[102,57000,41104],{"class":119},[102,57002,2833],{"class":108},[102,57004,7039],{"class":187},[102,57006,41111],{"class":119},[102,57008,57009],{"class":104,"line":41273},[102,57010,41117],{"class":126},[102,57012,57013],{"class":104,"line":41287},[102,57014,41123],{"class":126},[102,57016,57017,57019,57021],{"class":104,"line":41296},[102,57018,41129],{"class":119},[102,57020,260],{"class":108},[102,57022,40179],{"class":119},[102,57024,57025],{"class":104,"line":41305},[102,57026,652],{"emptyLinePlaceholder":651},[102,57028,57029],{"class":104,"line":41314},[102,57030,41144],{"class":126},[102,57032,57033,57035,57037,57039,57041],{"class":104,"line":41323},[102,57034,41150],{"class":119},[102,57036,260],{"class":108},[102,57038,41155],{"class":119},[102,57040,2833],{"class":108},[102,57042,41160],{"class":119},[102,57044,57045,57047,57049,57051,57053,57055,57057,57059,57061,57063,57065,57067,57069,57071,57073,57075,57077,57079],{"class":104,"line":41329},[102,57046,40316],{"class":187},[102,57048,380],{"class":119},[102,57050,41170],{"class":278},[102,57052,9918],{"class":187},[102,57054,41175],{"class":108},[102,57056,9967],{"class":187},[102,57058,9571],{"class":278},[102,57060,9918],{"class":187},[102,57062,41175],{"class":108},[102,57064,9967],{"class":187},[102,57066,41188],{"class":278},[102,57068,41191],{"class":119},[102,57070,41194],{"class":108},[102,57072,9929],{"class":187},[102,57074,41199],{"class":119},[102,57076,9363],{"class":108},[102,57078,9929],{"class":187},[102,57080,38362],{"class":119},[102,57082,57083],{"class":104,"line":41335},[102,57084,44598],{"class":126},[102,57086,57087],{"class":104,"line":41343},[102,57088,44603],{"class":126},[102,57090,57091,57093,57095],{"class":104,"line":41348},[102,57092,44608],{"class":119},[102,57094,41232],{"class":278},[102,57096,390],{"class":119},[102,57098,57099],{"class":104,"line":41354},[102,57100,41252],{"class":126},[102,57102,57103,57105,57107,57109,57111,57113],{"class":104,"line":41365},[102,57104,41258],{"class":119},[102,57106,260],{"class":108},[102,57108,41263],{"class":119},[102,57110,41266],{"class":386},[102,57112,260],{"class":108},[102,57114,120],{"class":119},[102,57116,57117,57119,57121,57123],{"class":104,"line":41371},[102,57118,41276],{"class":278},[102,57120,9881],{"class":119},[102,57122,41281],{"class":187},[102,57124,41284],{"class":119},[102,57126,57127,57129],{"class":104,"line":41391},[102,57128,41290],{"class":278},[102,57130,41293],{"class":119},[102,57132,57133,57135],{"class":104,"line":41397},[102,57134,41299],{"class":278},[102,57136,41302],{"class":119},[102,57138,57139,57141],{"class":104,"line":41403},[102,57140,41308],{"class":278},[102,57142,41311],{"class":119},[102,57144,57145,57147],{"class":104,"line":41409},[102,57146,41317],{"class":278},[102,57148,41320],{"class":119},[102,57150,57151],{"class":104,"line":41426},[102,57152,41326],{"class":119},[102,57154,57155],{"class":104,"line":41432},[102,57156,41332],{"class":126},[102,57158,57159,57161],{"class":104,"line":41438},[102,57160,863],{"class":108},[102,57162,41340],{"class":119},[102,57164,57165],{"class":104,"line":41444},[102,57166,652],{"emptyLinePlaceholder":651},[102,57168,57169],{"class":104,"line":41450},[102,57170,41351],{"class":126},[102,57172,57173,57175,57177],{"class":104,"line":41456},[102,57174,39812],{"class":108},[102,57176,41359],{"class":112},[102,57178,41362],{"class":119},[102,57180,57181],{"class":104,"line":41483},[102,57182,41368],{"class":126},[102,57184,57185,57187,57189,57191,57193,57195,57197,57199],{"class":104,"line":41507},[102,57186,41374],{"class":119},[102,57188,39558],{"class":386},[102,57190,260],{"class":108},[102,57192,380],{"class":119},[102,57194,9527],{"class":187},[102,57196,1618],{"class":119},[102,57198,9329],{"class":187},[102,57200,38362],{"class":119},[102,57202,57203],{"class":104,"line":41513},[102,57204,41394],{"class":126},[102,57206,57207],{"class":104,"line":41519},[102,57208,41400],{"class":126},[102,57210,57211],{"class":104,"line":41525},[102,57212,41406],{"class":126},[102,57214,57215,57217,57219,57221,57223,57225,57227],{"class":104,"line":41536},[102,57216,39592],{"class":119},[102,57218,7039],{"class":187},[102,57220,1618],{"class":119},[102,57222,7044],{"class":187},[102,57224,1618],{"class":119},[102,57226,7039],{"class":187},[102,57228,390],{"class":119},[102,57230,57231],{"class":104,"line":41547},[102,57232,41429],{"class":126},[102,57234,57235],{"class":104,"line":41553},[102,57236,41435],{"class":126},[102,57238,57239],{"class":104,"line":41570},[102,57240,41441],{"class":126},[102,57242,57243],{"class":104,"line":41593},[102,57244,41447],{"class":126},[102,57246,57247],{"class":104,"line":41616},[102,57248,41453],{"class":126},[102,57250,57251,57253,57255,57257,57259,57261,57263,57265,57267],{"class":104,"line":41622},[102,57252,41459],{"class":119},[102,57254,41462],{"class":278},[102,57256,41465],{"class":119},[102,57258,41468],{"class":278},[102,57260,1618],{"class":119},[102,57262,41473],{"class":386},[102,57264,260],{"class":108},[102,57266,41478],{"class":278},[102,57268,390],{"class":119},[102,57270,57271,57273,57275,57277,57279,57281,57283,57285,57287],{"class":104,"line":41627},[102,57272,41459],{"class":119},[102,57274,41462],{"class":278},[102,57276,41490],{"class":119},[102,57278,41493],{"class":278},[102,57280,1618],{"class":119},[102,57282,41473],{"class":386},[102,57284,260],{"class":108},[102,57286,41502],{"class":278},[102,57288,390],{"class":119},[102,57290,57291],{"class":104,"line":41636},[102,57292,41510],{"class":126},[102,57294,57295],{"class":104,"line":41646},[102,57296,41516],{"class":119},[102,57298,57299],{"class":104,"line":41652},[102,57300,41522],{"class":126},[102,57302,57303,57305,57307],{"class":104,"line":41657},[102,57304,41528],{"class":119},[102,57306,41531],{"class":278},[102,57308,390],{"class":119},[102,57310,57311,57313,57315],{"class":104,"line":41663},[102,57312,41539],{"class":119},[102,57314,41542],{"class":278},[102,57316,390],{"class":119},[102,57318,57319],{"class":104,"line":41676},[102,57320,41550],{"class":126},[102,57322,57323,57325,57327,57329,57331,57333,57335],{"class":104,"line":41682},[102,57324,39592],{"class":119},[102,57326,7039],{"class":187},[102,57328,1618],{"class":119},[102,57330,7044],{"class":187},[102,57332,1618],{"class":119},[102,57334,7044],{"class":187},[102,57336,390],{"class":119},[102,57338,57339,57341,57343,57345,57347,57349,57351,57353,57355],{"class":104,"line":41693},[102,57340,41459],{"class":119},[102,57342,41462],{"class":278},[102,57344,41577],{"class":119},[102,57346,41468],{"class":278},[102,57348,1618],{"class":119},[102,57350,41473],{"class":386},[102,57352,260],{"class":108},[102,57354,41588],{"class":278},[102,57356,390],{"class":119},[102,57358,57359,57361,57363,57365,57367,57369,57371,57373,57375],{"class":104,"line":41704},[102,57360,41459],{"class":119},[102,57362,41462],{"class":278},[102,57364,41600],{"class":119},[102,57366,41493],{"class":278},[102,57368,1618],{"class":119},[102,57370,41473],{"class":386},[102,57372,260],{"class":108},[102,57374,41611],{"class":278},[102,57376,390],{"class":119},[102,57378,57379],{"class":104,"line":41723},[102,57380,41619],{"class":126},[102,57382,57384],{"class":104,"line":57383},219,[102,57385,41516],{"class":119},[102,57387,57389,57391,57393],{"class":104,"line":57388},220,[102,57390,41528],{"class":119},[102,57392,41462],{"class":278},[102,57394,390],{"class":119},[102,57396,57398,57400,57402],{"class":104,"line":57397},221,[102,57399,41539],{"class":119},[102,57401,41641],{"class":278},[102,57403,390],{"class":119},[102,57405,57407],{"class":104,"line":57406},222,[102,57408,41649],{"class":119},[102,57410,57412],{"class":104,"line":57411},223,[102,57413,652],{"emptyLinePlaceholder":651},[102,57415,57417],{"class":104,"line":57416},224,[102,57418,41660],{"class":126},[102,57420,57422,57424,57426,57428,57430],{"class":104,"line":57421},225,[102,57423,10407],{"class":108},[102,57425,39085],{"class":187},[102,57427,1876],{"class":108},[102,57429,39090],{"class":278},[102,57431,12552],{"class":119},[102,57433,57435],{"class":104,"line":57434},226,[102,57436,41679],{"class":126},[102,57438,57440,57442,57444],{"class":104,"line":57439},227,[102,57441,52411],{"class":119},[102,57443,260],{"class":108},[102,57445,52416],{"class":119},[102,57447,57449,57451,57453],{"class":104,"line":57448},228,[102,57450,41696],{"class":119},[102,57452,260],{"class":108},[102,57454,41701],{"class":119},[102,57456,57458,57460,57462,57464,57466,57468,57470],{"class":104,"line":57457},229,[102,57459,41258],{"class":119},[102,57461,260],{"class":108},[102,57463,52433],{"class":119},[102,57465,41714],{"class":386},[102,57467,260],{"class":108},[102,57469,9929],{"class":187},[102,57471,390],{"class":119},[102,57473,57475],{"class":104,"line":57474},230,[102,57476,41726],{"class":119},[7601,57478,57480],{"id":57479},"_242测试代码","2.4.2.测试代码",[14,57482,57483],{},"使用测试集进行测试与推理",[93,57485,57487],{"className":38243,"code":57486,"language":38245,"meta":98,"style":98},"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",[83,57488,57489,57495,57505,57515,57526,57536,57540,57544,57552,57557,57561,57578,57582,57586,57590,57594,57598,57630,57634,57642,57646,57658,57662,57666,57670,57674,57678,57682,57686,57690,57708,57722,57726,57736,57746,57756,57762,57766,57770,57778,57782,57798,57806,57810,57814,57822,57830,57834,57838,57842,57846,57852,57856,57866,57874,57882,57886,57890,57894,57902,57906,57922,57926,57930,57934,57946,57950,57962,57966,57970,57982,57986,57996,58000,58004,58016,58020,58028,58032,58036,58044,58048,58056,58060,58064,58068,58072,58076,58092,58100,58104,58108,58126,58132,58136,58146,58154,58162,58166,58170,58174,58178,58186,58190,58206,58210,58218,58226],{"__ignoreMap":98},[102,57490,57491,57493],{"class":104,"line":105},[102,57492,38257],{"class":108},[102,57494,38260],{"class":119},[102,57496,57497,57499,57501,57503],{"class":104,"line":116},[102,57498,38257],{"class":108},[102,57500,39280],{"class":119},[102,57502,39248],{"class":108},[102,57504,39285],{"class":119},[102,57506,57507,57509,57511,57513],{"class":104,"line":123},[102,57508,38602],{"class":108},[102,57510,39263],{"class":119},[102,57512,38257],{"class":108},[102,57514,39268],{"class":119},[102,57516,57517,57519,57521,57523],{"class":104,"line":130},[102,57518,38602],{"class":108},[102,57520,39233],{"class":119},[102,57522,38257],{"class":108},[102,57524,57525],{"class":119}," ImageFolder\n",[102,57527,57528,57530,57532,57534],{"class":104,"line":136},[102,57529,38602],{"class":108},[102,57531,39779],{"class":119},[102,57533,38257],{"class":108},[102,57535,52505],{"class":119},[102,57537,57538],{"class":104,"line":142},[102,57539,652],{"emptyLinePlaceholder":651},[102,57541,57542],{"class":104,"line":148},[102,57543,41816],{"class":126},[102,57545,57546,57548,57550],{"class":104,"line":157},[102,57547,39812],{"class":108},[102,57549,41823],{"class":112},[102,57551,39818],{"class":119},[102,57553,57554],{"class":104,"line":163},[102,57555,57556],{"class":126},"   # 导入自己的数据集，并进行数据处理\n",[102,57558,57559],{"class":104,"line":175},[102,57560,55826],{"class":126},[102,57562,57563,57565,57567,57569,57571,57573,57576],{"class":104,"line":181},[102,57564,55831],{"class":187},[102,57566,260],{"class":108},[102,57568,9695],{"class":108},[102,57570,9288],{"class":278},[102,57572,9585],{"class":187},[102,57574,57575],{"class":55842},"\u002Fdata\u002Ftest",[102,57577,32998],{"class":278},[102,57579,57580],{"class":104,"line":202},[102,57581,652],{"emptyLinePlaceholder":651},[102,57583,57584],{"class":104,"line":208},[102,57585,55854],{"class":126},[102,57587,57588],{"class":104,"line":214},[102,57589,55859],{"class":126},[102,57591,57592],{"class":104,"line":225},[102,57593,55864],{"class":126},[102,57595,57596],{"class":104,"line":230},[102,57597,55869],{"class":126},[102,57599,57600,57602,57604,57606,57608,57610,57612,57614,57616,57618,57620,57622,57624,57626,57628],{"class":104,"line":236},[102,57601,55874],{"class":119},[102,57603,260],{"class":108},[102,57605,55879],{"class":119},[102,57607,55882],{"class":187},[102,57609,1618],{"class":119},[102,57611,55887],{"class":187},[102,57613,1618],{"class":119},[102,57615,55892],{"class":187},[102,57617,55895],{"class":119},[102,57619,55898],{"class":187},[102,57621,1618],{"class":119},[102,57623,55903],{"class":187},[102,57625,1618],{"class":119},[102,57627,55908],{"class":187},[102,57629,13466],{"class":119},[102,57631,57632],{"class":104,"line":242},[102,57633,55915],{"class":126},[102,57635,57636,57638,57640],{"class":104,"line":248},[102,57637,55920],{"class":119},[102,57639,260],{"class":108},[102,57641,55925],{"class":119},[102,57643,57644],{"class":104,"line":254},[102,57645,55930],{"class":126},[102,57647,57648,57650,57652,57654,57656],{"class":104,"line":269},[102,57649,55935],{"class":119},[102,57651,39366],{"class":187},[102,57653,1618],{"class":119},[102,57655,39366],{"class":187},[102,57657,50487],{"class":119},[102,57659,57660],{"class":104,"line":298},[102,57661,55948],{"class":126},[102,57663,57664],{"class":104,"line":502},[102,57665,55953],{"class":119},[102,57667,57668],{"class":104,"line":507},[102,57669,55958],{"class":119},[102,57671,57672],{"class":104,"line":512},[102,57673,55963],{"class":126},[102,57675,57676],{"class":104,"line":521},[102,57677,55968],{"class":126},[102,57679,57680],{"class":104,"line":526},[102,57681,652],{"emptyLinePlaceholder":651},[102,57683,57684],{"class":104,"line":532},[102,57685,55977],{"class":126},[102,57687,57688],{"class":104,"line":538},[102,57689,55982],{"class":126},[102,57691,57692,57694,57696,57698,57700,57702,57704,57706],{"class":104,"line":555},[102,57693,41830],{"class":119},[102,57695,260],{"class":108},[102,57697,55991],{"class":119},[102,57699,55994],{"class":187},[102,57701,1618],{"class":119},[102,57703,55999],{"class":386},[102,57705,260],{"class":108},[102,57707,56004],{"class":119},[102,57709,57710,57712,57714,57716,57718,57720],{"class":104,"line":570},[102,57711,41887],{"class":119},[102,57713,260],{"class":108},[102,57715,39399],{"class":119},[102,57717,39402],{"class":386},[102,57719,260],{"class":108},[102,57721,41898],{"class":119},[102,57723,57724],{"class":104,"line":581},[102,57725,41903],{"class":126},[102,57727,57728,57730,57732,57734],{"class":104,"line":819},[102,57729,41908],{"class":386},[102,57731,260],{"class":108},[102,57733,7039],{"class":187},[102,57735,39331],{"class":119},[102,57737,57738,57740,57742,57744],{"class":104,"line":828},[102,57739,41919],{"class":386},[102,57741,260],{"class":108},[102,57743,39341],{"class":187},[102,57745,39331],{"class":119},[102,57747,57748,57750,57752,57754],{"class":104,"line":837},[102,57749,41930],{"class":386},[102,57751,260],{"class":108},[102,57753,8423],{"class":187},[102,57755,390],{"class":119},[102,57757,57758,57760],{"class":104,"line":842},[102,57759,863],{"class":108},[102,57761,41943],{"class":119},[102,57763,57764],{"class":104,"line":855},[102,57765,652],{"emptyLinePlaceholder":651},[102,57767,57768],{"class":104,"line":860},[102,57769,41952],{"class":126},[102,57771,57772,57774,57776],{"class":104,"line":871},[102,57773,39812],{"class":108},[102,57775,41959],{"class":112},[102,57777,41962],{"class":119},[102,57779,57780],{"class":104,"line":1359},[102,57781,41967],{"class":126},[102,57783,57784,57786,57788,57790,57792,57794,57796],{"class":104,"line":1368},[102,57785,39102],{"class":119},[102,57787,260],{"class":108},[102,57789,39109],{"class":278},[102,57791,10565],{"class":108},[102,57793,39114],{"class":119},[102,57795,10562],{"class":108},[102,57797,41984],{"class":278},[102,57799,57800,57802,57804],{"class":104,"line":1373},[102,57801,39154],{"class":119},[102,57803,260],{"class":108},[102,57805,40154],{"class":119},[102,57807,57808],{"class":104,"line":1378},[102,57809,652],{"emptyLinePlaceholder":651},[102,57811,57812],{"class":104,"line":1384},[102,57813,42001],{"class":126},[102,57815,57816,57818,57820],{"class":104,"line":1398},[102,57817,42006],{"class":119},[102,57819,260],{"class":108},[102,57821,40207],{"class":187},[102,57823,57824,57826,57828],{"class":104,"line":1424},[102,57825,42015],{"class":119},[102,57827,260],{"class":108},[102,57829,11901],{"class":187},[102,57831,57832],{"class":104,"line":1429},[102,57833,652],{"emptyLinePlaceholder":651},[102,57835,57836],{"class":104,"line":1435},[102,57837,42028],{"class":126},[102,57839,57840],{"class":104,"line":1450},[102,57841,42033],{"class":126},[102,57843,57844],{"class":104,"line":1473},[102,57845,42038],{"class":126},[102,57847,57848,57850],{"class":104,"line":1478},[102,57849,42043],{"class":108},[102,57851,40749],{"class":119},[102,57853,57854],{"class":104,"line":1484},[102,57855,42050],{"class":126},[102,57857,57858,57860,57862,57864],{"class":104,"line":1499},[102,57859,12217],{"class":108},[102,57861,42057],{"class":119},[102,57863,33908],{"class":108},[102,57865,42062],{"class":119},[102,57867,57868,57870,57872],{"class":104,"line":1508},[102,57869,42067],{"class":119},[102,57871,260],{"class":108},[102,57873,42072],{"class":119},[102,57875,57876,57878,57880],{"class":104,"line":1513},[102,57877,42077],{"class":119},[102,57879,260],{"class":108},[102,57881,42082],{"class":119},[102,57883,57884],{"class":104,"line":1524},[102,57885,42087],{"class":126},[102,57887,57888],{"class":104,"line":1529},[102,57889,40740],{"class":119},[102,57891,57892],{"class":104,"line":1538},[102,57893,42096],{"class":126},[102,57895,57896,57898,57900],{"class":104,"line":2089},[102,57897,40525],{"class":119},[102,57899,260],{"class":108},[102,57901,42105],{"class":119},[102,57903,57904],{"class":104,"line":2094},[102,57905,42110],{"class":126},[102,57907,57908,57910,57912,57914,57916,57918,57920],{"class":104,"line":2100},[102,57909,40542],{"class":119},[102,57911,260],{"class":108},[102,57913,40547],{"class":119},[102,57915,40550],{"class":386},[102,57917,260],{"class":108},[102,57919,7039],{"class":187},[102,57921,390],{"class":119},[102,57923,57924],{"class":104,"line":2106},[102,57925,42131],{"class":126},[102,57927,57928],{"class":104,"line":2120},[102,57929,42136],{"class":126},[102,57931,57932],{"class":104,"line":2128},[102,57933,42141],{"class":126},[102,57935,57936,57938,57940,57942,57944],{"class":104,"line":2149},[102,57937,42146],{"class":119},[102,57939,18244],{"class":108},[102,57941,40652],{"class":119},[102,57943,1876],{"class":108},[102,57945,42155],{"class":119},[102,57947,57948],{"class":104,"line":2161},[102,57949,42160],{"class":126},[102,57951,57952,57954,57956,57958,57960],{"class":104,"line":2167},[102,57953,42165],{"class":119},[102,57955,18244],{"class":108},[102,57957,42170],{"class":119},[102,57959,8423],{"class":187},[102,57961,390],{"class":119},[102,57963,57964],{"class":104,"line":2190},[102,57965,652],{"emptyLinePlaceholder":651},[102,57967,57968],{"class":104,"line":2196},[102,57969,42183],{"class":126},[102,57971,57972,57974,57976,57978,57980],{"class":104,"line":2219},[102,57973,42188],{"class":119},[102,57975,260],{"class":108},[102,57977,42193],{"class":119},[102,57979,9611],{"class":108},[102,57981,42198],{"class":119},[102,57983,57984],{"class":104,"line":2233},[102,57985,42203],{"class":126},[102,57987,57988,57990,57992,57994],{"class":104,"line":2253},[102,57989,40316],{"class":187},[102,57991,380],{"class":119},[102,57993,42212],{"class":278},[102,57995,42215],{"class":119},[102,57997,57998],{"class":104,"line":2259},[102,57999,652],{"emptyLinePlaceholder":651},[102,58001,58002],{"class":104,"line":2270},[102,58003,42224],{"class":126},[102,58005,58006,58008,58010,58012,58014],{"class":104,"line":2293},[102,58007,10407],{"class":108},[102,58009,39085],{"class":187},[102,58011,1876],{"class":108},[102,58013,39090],{"class":278},[102,58015,12552],{"class":119},[102,58017,58018],{"class":104,"line":2315},[102,58019,42241],{"class":126},[102,58021,58022,58024,58026],{"class":104,"line":2320},[102,58023,39154],{"class":119},[102,58025,260],{"class":108},[102,58027,52416],{"class":119},[102,58029,58030],{"class":104,"line":2326},[102,58031,42254],{"class":126},[102,58033,58034],{"class":104,"line":2340},[102,58035,42259],{"class":126},[102,58037,58038,58040,58042],{"class":104,"line":2354},[102,58039,42264],{"class":119},[102,58041,42267],{"class":278},[102,58043,38362],{"class":119},[102,58045,58046],{"class":104,"line":2359},[102,58047,42274],{"class":126},[102,58049,58050,58052,58054],{"class":104,"line":2373},[102,58051,41887],{"class":119},[102,58053,260],{"class":108},[102,58055,42283],{"class":119},[102,58057,58058],{"class":104,"line":2378},[102,58059,42288],{"class":126},[102,58061,58062],{"class":104,"line":2384},[102,58063,42293],{"class":119},[102,58065,58066],{"class":104,"line":2389},[102,58067,652],{"emptyLinePlaceholder":651},[102,58069,58070],{"class":104,"line":2403},[102,58071,42302],{"class":126},[102,58073,58074],{"class":104,"line":2408},[102,58075,42307],{"class":126},[102,58077,58078,58080,58082,58084,58086,58088,58090],{"class":104,"line":2413},[102,58079,39102],{"class":119},[102,58081,260],{"class":108},[102,58083,39109],{"class":278},[102,58085,10565],{"class":108},[102,58087,39114],{"class":119},[102,58089,10562],{"class":108},[102,58091,41984],{"class":278},[102,58093,58094,58096,58098],{"class":104,"line":2427},[102,58095,39154],{"class":119},[102,58097,260],{"class":108},[102,58099,40154],{"class":119},[102,58101,58102],{"class":104,"line":2440},[102,58103,42336],{"class":126},[102,58105,58106],{"class":104,"line":2445},[102,58107,42341],{"class":126},[102,58109,58110,58112,58114,58116,58119,58121,58124],{"class":104,"line":2458},[102,58111,42346],{"class":119},[102,58113,260],{"class":108},[102,58115,9912],{"class":119},[102,58117,58118],{"class":278},"'猫'",[102,58120,1618],{"class":119},[102,58122,58123],{"class":278},"'狗'",[102,58125,41111],{"class":119},[102,58127,58128,58130],{"class":104,"line":2463},[102,58129,42043],{"class":108},[102,58131,40749],{"class":119},[102,58133,58134],{"class":104,"line":2468},[102,58135,42411],{"class":126},[102,58137,58138,58140,58142,58144],{"class":104,"line":2473},[102,58139,12217],{"class":108},[102,58141,42418],{"class":119},[102,58143,33908],{"class":108},[102,58145,42062],{"class":119},[102,58147,58148,58150,58152],{"class":104,"line":2486},[102,58149,40475],{"class":119},[102,58151,260],{"class":108},[102,58153,40480],{"class":119},[102,58155,58156,58158,58160],{"class":104,"line":2491},[102,58157,40490],{"class":119},[102,58159,260],{"class":108},[102,58161,40495],{"class":119},[102,58163,58164],{"class":104,"line":40498},[102,58165,652],{"emptyLinePlaceholder":651},[102,58167,58168],{"class":104,"line":40504},[102,58169,42447],{"class":126},[102,58171,58172],{"class":104,"line":40510},[102,58173,40740],{"class":119},[102,58175,58176],{"class":104,"line":40516},[102,58177,42456],{"class":126},[102,58179,58180,58182,58184],{"class":104,"line":40522},[102,58181,40525],{"class":119},[102,58183,260],{"class":108},[102,58185,40530],{"class":119},[102,58187,58188],{"class":104,"line":40533},[102,58189,42469],{"class":126},[102,58191,58192,58194,58196,58198,58200,58202,58204],{"class":104,"line":40539},[102,58193,40542],{"class":119},[102,58195,260],{"class":108},[102,58197,40547],{"class":119},[102,58199,40550],{"class":386},[102,58201,260],{"class":108},[102,58203,7039],{"class":187},[102,58205,390],{"class":119},[102,58207,58208],{"class":104,"line":40559},[102,58209,42490],{"class":126},[102,58211,58212,58214,58216],{"class":104,"line":40565},[102,58213,42495],{"class":119},[102,58215,260],{"class":108},[102,58217,42500],{"class":119},[102,58219,58220,58222,58224],{"class":104,"line":40576},[102,58221,42505],{"class":119},[102,58223,260],{"class":108},[102,58225,42510],{"class":119},[102,58227,58228,58230,58232,58234,58236,58238,58240,58242],{"class":104,"line":40582},[102,58229,42515],{"class":187},[102,58231,380],{"class":119},[102,58233,42520],{"class":278},[102,58235,42523],{"class":119},[102,58237,42526],{"class":278},[102,58239,1618],{"class":119},[102,58241,42531],{"class":278},[102,58243,42534],{"class":119},[8955,58245,58246],{},"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":98,"searchDepth":116,"depth":116,"links":58248},[58249,58250,58251,58252],{"id":38456,"depth":123,"text":38457},{"id":45704,"depth":123,"text":45705},{"id":49137,"depth":123,"text":49138},{"id":53146,"depth":123,"text":53147},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":38448,"description":31240},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":58259,"title":58260,"body":58261,"description":31240,"extension":8978,"meta":58268,"navigation":651,"path":58269,"seo":58270,"stem":58271,"__hash__":58272},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":58262,"toc":58266},[58263],[10,58264,58260],{"id":58265},"_3yolo模型学习",{"title":98,"searchDepth":116,"depth":116,"links":58267},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":58260,"description":31240},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":58274,"title":58275,"body":58276,"description":58283,"extension":8978,"meta":58284,"navigation":651,"path":58286,"seo":58287,"stem":58288,"__hash__":58289},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":58277,"toc":58281},[58278],[14,58279,58280],{},"yolo模型还未补充",{"title":98,"searchDepth":116,"depth":116,"links":58282},[],"深度学习学习",{"category":58285},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":58275,"description":58283},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":58291,"title":58292,"body":58293,"description":31240,"extension":8978,"meta":58318,"navigation":651,"path":58319,"seo":58320,"stem":58321,"__hash__":58322},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":58294,"toc":58316},[58295,58298,58301,58306,58313],[10,58296,58292],{"id":58297},"_1工具",[14,58299,58300],{},"提示错误插件：有问题会提前报错",[14,58302,58303],{},[6750,58304],{"alt":98,"src":58305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,58307,58308],{},[9275,58309,58312],{"href":58310,"rel":58311},"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",[31729],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,58314,58315],{},"alt键加上下箭头可以实现语句的移动",{"title":98,"searchDepth":116,"depth":116,"links":58317},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":58292,"description":31240},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":58324,"title":58325,"body":58326,"description":31240,"extension":8978,"meta":61190,"navigation":651,"path":61191,"seo":61192,"stem":61193,"__hash__":61194},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":58327,"toc":61141},[58328,58331,58335,58339,58344,58347,58352,58356,58363,58368,58375,58380,58387,58392,58396,58401,58404,58408,58413,58417,58422,58425,58428,58431,58434,58437,58440,58443,58446,58451,58456,58461,58465,58468,58471,58475,58480,58483,58491,58496,58513,58521,58526,58531,58536,58541,58546,58549,58554,58559,58563,58572,58577,58582,58586,58591,58594,58598,58603,58611,58616,58621,58624,58629,58634,58639,58642,58645,58648,58653,58658,58661,58666,58669,58674,58677,58680,58683,58688,58691,58694,58709,58714,58719,58724,58727,58730,58733,58747,58750,58755,58760,58763,58766,58769,58772,58775,58778,58781,58785,58789,58794,58798,58801,58806,58811,58814,58819,58822,58826,58831,58834,58837,58840,58843,58846,58849,58852,58855,58858,58862,58867,58872,58877,58880,58883,58887,58892,58895,58899,58902,58905,58910,58913,58916,58920,58924,58927,58932,58937,58940,58969,58974,58979,58984,58989,58993,58998,59002,59007,59010,59014,59018,59023,59027,59032,59037,59041,59046,59049,59051,59054,59059,59063,59068,59072,59076,59081,59086,59091,59096,59100,59105,59110,59115,59118,59121,59126,59129,59134,59139,59144,59149,59153,59960,59964,60307,60312,60315,60318,60321,60324,60327,60330,60333,60336,60338,60341,60343,60346,60350,60355,60358,60361,60364,60368,60373,60378,60398,60401,60405,60410,60415,60432,60436,60465,60469,60491,60493,60532,60540,60546,60550,60553,60556,60561,60566,60569,60572,60575,60580,60585,60588,60591,60594,60597,60600,60603,60606,60609,60612,60615,60618,60620,60623,60626,60629,60632,60635,60638,60641,60644,60648,60653,60656,60661,60664,60667,60670,60673,60676,60679,60682,60684,60687,60690,60693,60696,60699,60702,60706,60709,60718,60721,60726,60729,60734,60737,60740,60743,60746,60749,60752,60755,60759,60763,60766,60769,60774,60779,60784,60788,60793,60798,60801,60804,60807,60810,60813,60818,60821,60826,60828,60833,60836,60840,60845,60848,60851,60856,60860,60863,60868,60871,60874,60903,60908,60911,60914,60917,60920,60923,60927,60930,61016,61020,61023,61028,61033,61040,61043,61046,61049,61052,61055,61060,61065,61068,61071,61074,61077,61080,61083,61086,61089,61092,61094,61097,61101,61106,61111,61116,61119,61124,61129,61132,61135,61138],[10,58329,58325],{"id":58330},"_2基础语法",[43,58332,58334],{"id":58333},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[48,58336,58338],{"id":58337},"_211-js组成","2.1.1 js组成",[87,58340,58341],{},[62,58342,58343],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,58345,58346],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[87,58348,58349],{"start":116},[62,58350,58351],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[48,58353,58355],{"id":58354},"_212-js书写位置","2.1.2 js书写位置",[87,58357,58358],{},[62,58359,58360],{},[18,58361,58362],{},"内部 JavaScript",[14,58364,58365],{},[6750,58366],{"alt":98,"src":58367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[87,58369,58370],{"start":116},[62,58371,58372],{},[18,58373,58374],{},"外部 JavaScript",[14,58376,58377],{},[6750,58378],{"alt":98,"src":58379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[87,58381,58382],{"start":123},[62,58383,58384],{},[18,58385,58386],{},"内联 JavaScript",[14,58388,58389],{},[6750,58390],{"alt":98,"src":58391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[48,58393,58395],{"id":58394},"_213-javascript注释","2.1.3 JavaScript注释",[14,58397,58398],{},[6750,58399],{"alt":98,"src":58400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,58402,58403],{},"alt+shift+a一定要记住！",[48,58405,58407],{"id":58406},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,58409,58410],{},[6750,58411],{"alt":98,"src":58412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[48,58414,58416],{"id":58415},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[87,58418,58419],{},[62,58420,58421],{},"输出语法：",[14,58423,58424],{},"①document.write('要出的内容')",[14,58426,58427],{},"向body内输出内容；",[14,58429,58430],{},"如果输出的内容写的是标签，也会被解析cheng",[14,58432,58433],{},"②alert('要出的内容')",[14,58435,58436],{},"页面弹出警告对话框",[14,58438,58439],{},"③console.log('控制台打印')",[14,58441,58442],{},"控制台输出语法，程序员调试使用",[14,58444,58445],{},"输入log就行，自动生成：",[14,58447,58448],{},[6750,58449],{"alt":98,"src":58450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[87,58452,58453],{"start":116},[62,58454,58455],{},"输入语法：",[14,58457,58458],{},[6750,58459],{"alt":98,"src":58460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[48,58462,58464],{"id":58463},"_2116-字面量","21.1.6 字面量",[14,58466,58467],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,58469,58470],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[43,58472,58474],{"id":58473},"_22-变量","2.2 变量",[87,58476,58477],{},[62,58478,58479],{},"变量声明",[14,58481,58482],{},"let 变量名",[59,58484,58485,58488],{},[62,58486,58487],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[62,58489,58490],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[87,58492,58493],{"start":116},[62,58494,58495],{},"变量赋值",[93,58497,58501],{"className":58498,"code":58499,"language":58500,"meta":98,"style":98},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[83,58502,58503,58508],{"__ignoreMap":98},[102,58504,58505],{"class":104,"line":105},[102,58506,58507],{"class":119},"let age\n",[102,58509,58510],{"class":104,"line":116},[102,58511,58512],{"class":119},"age=18\n",[87,58514,58515,58518],{"start":123},[62,58516,58517],{},"连这些（变量的初始化）：let age=18",[62,58519,58520],{},"更新变量",[14,58522,58523],{},[6750,58524],{"alt":98,"src":58525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[87,58527,58528],{"start":136},[62,58529,58530],{},"声明多个变量",[14,58532,58533],{},[6750,58534],{"alt":98,"src":58535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[87,58537,58538],{"start":142},[62,58539,58540],{},"变量命名规则与规范",[14,58542,58543],{},[6750,58544],{"alt":98,"src":58545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,58547,58548],{},"遵守小驼峰！",[87,58550,58551],{"start":148},[62,58552,58553],{},"变量拓展-let和var的区别",[14,58555,58556],{},[6750,58557],{"alt":98,"src":58558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[43,58560,58562],{"id":58561},"_23-数组","2.3 数组",[93,58564,58566],{"className":58498,"code":58565,"language":58500,"meta":98,"style":98},"let arr = []\n",[83,58567,58568],{"__ignoreMap":98},[102,58569,58570],{"class":104,"line":105},[102,58571,58565],{"class":119},[14,58573,58574],{},[6750,58575],{"alt":98,"src":58576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,58578,58579],{},[6750,58580],{"alt":98,"src":58581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[43,58583,58585],{"id":58584},"_24-常量","2.4 常量",[14,58587,58588],{},[6750,58589],{"alt":98,"src":58590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,58592,58593],{},"const — 类似于 let ，但是变量的值无法被修改",[43,58595,58597],{"id":58596},"_25-数据类型","2.5 数据类型",[14,58599,58600],{},[6750,58601],{"alt":98,"src":58602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[87,58604,58605,58608],{},[62,58606,58607],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[62,58609,58610],{},"算数运算符：",[14,58612,58613],{},[6750,58614],{"alt":98,"src":58615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[87,58617,58618],{"start":123},[62,58619,58620],{},"数字类型（Number）",[14,58622,58623],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,58625,58626],{},[6750,58627],{"alt":98,"src":58628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[87,58630,58631],{"start":130},[62,58632,58633],{},"字符串类型（string）",[14,58635,58636],{},[6750,58637],{"alt":98,"src":58638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,58640,58641],{},"反引号也是可以使用的",[14,58643,58644],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,58646,58647],{},"例如：document.write(\"我今年\"+age+\"岁\")",[87,58649,58650],{"start":136},[62,58651,58652],{},"模板字符串",[14,58654,58655],{},[6750,58656],{"alt":98,"src":58657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,58659,58660],{},"类似于python的字符串格式化",[87,58662,58663],{"start":142},[62,58664,58665],{},"布尔类型",[14,58667,58668],{},"true 和 false",[87,58670,58671],{"start":148},[62,58672,58673],{},"未定义类型（underfined）",[14,58675,58676],{},"表示没有赋值",[14,58678,58679],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,58681,58682],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[87,58684,58685],{"start":157},[62,58686,58687],{},"null（空类型）",[14,58689,58690],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,58692,58693],{},"赋值了，但是内容为空",[93,58695,58697],{"className":58498,"code":58696,"language":58500,"meta":98,"style":98},"typeof null\n输出的是'object'，是一个对象数据类型\n",[83,58698,58699,58704],{"__ignoreMap":98},[102,58700,58701],{"class":104,"line":105},[102,58702,58703],{"class":119},"typeof null\n",[102,58705,58706],{"class":104,"line":116},[102,58707,58708],{"class":119},"输出的是'object'，是一个对象数据类型\n",[87,58710,58711],{"start":163},[62,58712,58713],{},"控制台检测数据类型",[14,58715,58716],{},[6750,58717],{"alt":98,"src":58718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[87,58720,58721],{"start":175},[62,58722,58723],{},"类型转换",[14,58725,58726],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,58728,58729],{},"转换方式：隐式转换和显示转换",[14,58731,58732],{},"①隐式转换",[59,58734,58735,58738,58741,58744],{},[62,58736,58737],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[62,58739,58740],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[62,58742,58743],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[62,58745,58746],{},"任何数据和字符串相加结果都是字符串",[14,58748,58749],{},"②显示转换",[14,58751,58752],{},[6750,58753],{"alt":98,"src":58754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,58756,58757],{},[6750,58758],{"alt":98,"src":58759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,58761,58762],{},"在输入的时候要用好隐式转换，简单写起来",[14,58764,58765],{},"let num = +prompt(’请输入数字：‘)",[14,58767,58768],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,58770,58771],{},"console.log(parseInt('12.333px'))",[14,58773,58774],{},"输出为：12",[14,58776,58777],{},"console.log(parseInt('a'a'a12.333px'))",[14,58779,58780],{},"输出：NaN",[43,58782,58784],{"id":58783},"_26-运算符","2.6 运算符",[48,58786,58788],{"id":58787},"_261-赋值运算符","2.6.1 赋值运算符",[14,58790,58791],{},[6750,58792],{"alt":98,"src":58793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[48,58795,58797],{"id":58796},"_262-一元运算符","2.6.2 一元运算符",[14,58799,58800],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,58802,58803],{},[6750,58804],{"alt":98,"src":58805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,58807,58808],{},[6750,58809],{"alt":98,"src":58810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,58812,58813],{},"两者的区别：",[14,58815,58816],{},[6750,58817],{"alt":98,"src":58818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,58820,58821],{},"前置先自加；后置后加，代码执行完之后再加",[48,58823,58825],{"id":58824},"_263-比较运算符","2.6.3 比较运算符",[14,58827,58828],{},[6750,58829],{"alt":98,"src":58830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,58832,58833],{},"比较运算符也有隐式转换",[14,58835,58836],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,58838,58839],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,58841,58842],{},"要使用三等，开发的时候",[14,58844,58845],{},"NaN不等于任何人，包括它自己",[14,58847,58848],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,58850,58851],{},"7\u002F10=0.7",[14,58853,58854],{},"最后：0.5+0.2=0.7",[14,58856,58857],{},"字符串比较，比较的是字符对应的ASCII码",[48,58859,58861],{"id":58860},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,58863,58864],{},[6750,58865],{"alt":98,"src":58866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,58868,58869],{},[6750,58870],{"alt":98,"src":58871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,58873,58874],{},[6750,58875],{"alt":98,"src":58876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,58878,58879],{},"上述题目选D",[14,58881,58882],{},"与真2假1；或真1假2",[48,58884,58886],{"id":58885},"_265-运算符优先级","2.6.5 运算符优先级",[14,58888,58889],{},[6750,58890],{"alt":98,"src":58891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,58893,58894],{},"先算逻辑与，后算逻辑或",[43,58896,58898],{"id":58897},"_27-语句","2.7 语句",[14,58900,58901],{},"表达式：是可以被求值的代码，会有结果给我们",[14,58903,58904],{},"语句：语句是可以被执行的代码，例如prompt()",[14,58906,58907],{},[6750,58908],{"alt":98,"src":58909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,58911,58912],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,58914,58915],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[48,58917,58919],{"id":58918},"_271-分支语句","2.7.1 分支语句",[7601,58921,58923],{"id":58922},"_2711-if分支语句","2.7.1.1 if分支语句",[14,58925,58926],{},"if语句单行简单的话，可以不写{}，写在一行就行",[87,58928,58929],{},[62,58930,58931],{},"单分支语句",[14,58933,58934],{},[6750,58935],{"alt":98,"src":58936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,58938,58939],{},"除了0，所有数字都为真",[93,58941,58943],{"className":58498,"code":58942,"language":58500,"meta":98,"style":98},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[83,58944,58945,58950,58955,58960,58964],{"__ignoreMap":98},[102,58946,58947],{"class":104,"line":105},[102,58948,58949],{"class":119},"if（0) {\n",[102,58951,58952],{"class":104,"line":116},[102,58953,58954],{"class":119},"    let a=1\n",[102,58956,58957],{"class":104,"line":123},[102,58958,58959],{"class":119},"    alert(typeof a)\n",[102,58961,58962],{"class":104,"line":130},[102,58963,301],{"class":119},[102,58965,58966],{"class":104,"line":136},[102,58967,58968],{"class":119},"不输出，括号为假\n",[87,58970,58971],{"start":116},[62,58972,58973],{},"双分支语句",[14,58975,58976],{},[6750,58977],{"alt":98,"src":58978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[87,58980,58981],{"start":123},[62,58982,58983],{},"多分支语句",[14,58985,58986],{},[6750,58987],{"alt":98,"src":58988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[7601,58990,58992],{"id":58991},"_2712-三元运算符","2.7.1.2 三元运算符",[14,58994,58995],{},[6750,58996],{"alt":98,"src":58997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[7601,58999,59001],{"id":59000},"_2713-switch语句","2.7.1.3 switch语句",[14,59003,59004],{},[6750,59005],{"alt":98,"src":59006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,59008,59009],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[48,59011,59013],{"id":59012},"_272-循环语句","2.7.2 循环语句",[7601,59015,59017],{"id":59016},"_2721-断点演示","2.7.2.1 断点演示",[14,59019,59020],{},[6750,59021],{"alt":98,"src":59022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[7601,59024,59026],{"id":59025},"_2722-while循环","2.7.2.2 while循环",[14,59028,59029],{},[6750,59030],{"alt":98,"src":59031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,59033,59034],{},[6750,59035],{"alt":98,"src":59036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[7601,59038,59040],{"id":59039},"_2723-for循环","2.7.2.3 for循环",[14,59042,59043],{},[6750,59044],{"alt":98,"src":59045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,59047,59048],{},"for(;;) {",[14,59050,9967],{},[14,59052,59053],{},"表示无限循环",[14,59055,59056],{},[6750,59057],{"alt":98,"src":59058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[7601,59060,59062],{"id":59061},"_2724-循环的退出","2.7.2.4 循环的退出",[14,59064,59065],{},[6750,59066],{"alt":98,"src":59067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[43,59069,59071],{"id":59070},"_28-数组","2.8 数组",[48,59073,59075],{"id":59074},"_281-基础认识","2.8.1 基础认识",[14,59077,59078],{},[6750,59079],{"alt":98,"src":59080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,59082,59083],{},[6750,59084],{"alt":98,"src":59085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,59087,59088],{},[6750,59089],{"alt":98,"src":59090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,59092,59093],{},[6750,59094],{"alt":98,"src":59095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[48,59097,59099],{"id":59098},"_282-操作数组","2.8.2 操作数组",[14,59101,59102],{},[6750,59103],{"alt":98,"src":59104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[87,59106,59107],{},[62,59108,59109],{},"添加元素",[14,59111,59112],{},[6750,59113],{"alt":98,"src":59114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,59116,59117],{},"console.log(arr.push('green'))",[14,59119,59120],{},"输出结果：为新数组的长度",[14,59122,59123],{},[6750,59124],{"alt":98,"src":59125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,59127,59128],{},"push用的非常多，一定要记住",[87,59130,59131],{},[62,59132,59133],{},"删除元素",[14,59135,59136],{},[6750,59137],{"alt":98,"src":59138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,59140,59141],{},[6750,59142],{"alt":98,"src":59143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,59145,59146],{},[6750,59147],{"alt":98,"src":59148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[48,59150,59152],{"id":59151},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[93,59154,59156],{"className":58498,"code":59155,"language":58500,"meta":98,"style":98},"\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",[83,59157,59158,59173,59189,59193,59202,59220,59244,59266,59280,59288,59295,59307,59318,59322,59326,59333,59345,59360,59373,59392,59409,59424,59436,59448,59460,59464,59468,59479,59489,59501,59513,59525,59536,59540,59544,59556,59560,59574,59578,59582,59593,59607,59619,59633,59637,59646,59655,59659,59668,59672,59681,59686,59691,59704,59732,59737,59742,59767,59772,59776,59781,59786,59801,59805,59810,59840,59852,59868,59884,59898,59903,59910,59914,59919,59932,59940,59948,59952],{"__ignoreMap":98},[102,59159,59160,59163,59167,59170],{"class":104,"line":105},[102,59161,59162],{"class":119},"\u003C!",[102,59164,59166],{"class":59165},"s9eBZ","DOCTYPE",[102,59168,59169],{"class":112}," html",[102,59171,59172],{"class":119},">\n",[102,59174,59175,59177,59179,59182,59184,59187],{"class":104,"line":116},[102,59176,1208],{"class":119},[102,59178,58500],{"class":59165},[102,59180,59181],{"class":112}," lang",[102,59183,260],{"class":119},[102,59185,59186],{"class":278},"\"en\"",[102,59188,59172],{"class":119},[102,59190,59191],{"class":104,"line":123},[102,59192,652],{"emptyLinePlaceholder":651},[102,59194,59195,59197,59200],{"class":104,"line":130},[102,59196,1208],{"class":119},[102,59198,59199],{"class":59165},"head",[102,59201,59172],{"class":119},[102,59203,59204,59207,59210,59213,59215,59218],{"class":104,"line":136},[102,59205,59206],{"class":119},"    \u003C",[102,59208,59209],{"class":59165},"meta",[102,59211,59212],{"class":112}," charset",[102,59214,260],{"class":119},[102,59216,59217],{"class":278},"\"UTF-8\"",[102,59219,59172],{"class":119},[102,59221,59222,59224,59226,59229,59231,59234,59237,59239,59242],{"class":104,"line":142},[102,59223,59206],{"class":119},[102,59225,59209],{"class":59165},[102,59227,59228],{"class":112}," http-equiv",[102,59230,260],{"class":119},[102,59232,59233],{"class":278},"\"X-UA-Compatible\"",[102,59235,59236],{"class":112}," content",[102,59238,260],{"class":119},[102,59240,59241],{"class":278},"\"IE=edge\"",[102,59243,59172],{"class":119},[102,59245,59246,59248,59250,59252,59254,59257,59259,59261,59264],{"class":104,"line":148},[102,59247,59206],{"class":119},[102,59249,59209],{"class":59165},[102,59251,387],{"class":112},[102,59253,260],{"class":119},[102,59255,59256],{"class":278},"\"viewport\"",[102,59258,59236],{"class":112},[102,59260,260],{"class":119},[102,59262,59263],{"class":278},"\"width=device-width, initial-scale=1.0\"",[102,59265,59172],{"class":119},[102,59267,59268,59270,59273,59276,59278],{"class":104,"line":157},[102,59269,59206],{"class":119},[102,59271,59272],{"class":59165},"title",[102,59274,59275],{"class":119},">Document\u003C\u002F",[102,59277,59272],{"class":59165},[102,59279,59172],{"class":119},[102,59281,59282,59284,59286],{"class":104,"line":163},[102,59283,59206],{"class":119},[102,59285,8955],{"class":59165},[102,59287,59172],{"class":119},[102,59289,59290,59293],{"class":104,"line":175},[102,59291,59292],{"class":59165},"        *",[102,59294,1077],{"class":119},[102,59296,59297,59300,59303,59305],{"class":104,"line":181},[102,59298,59299],{"class":187},"            margin",[102,59301,59302],{"class":119},": ",[102,59304,8423],{"class":187},[102,59306,266],{"class":119},[102,59308,59309,59312,59314,59316],{"class":104,"line":202},[102,59310,59311],{"class":187},"            padding",[102,59313,59302],{"class":119},[102,59315,8423],{"class":187},[102,59317,266],{"class":119},[102,59319,59320],{"class":104,"line":208},[102,59321,1252],{"class":119},[102,59323,59324],{"class":104,"line":214},[102,59325,652],{"emptyLinePlaceholder":651},[102,59327,59328,59331],{"class":104,"line":225},[102,59329,59330],{"class":112},"        .box",[102,59332,1077],{"class":119},[102,59334,59335,59338,59340,59343],{"class":104,"line":230},[102,59336,59337],{"class":187},"            display",[102,59339,59302],{"class":119},[102,59341,59342],{"class":187},"flex",[102,59344,266],{"class":119},[102,59346,59347,59350,59352,59355,59358],{"class":104,"line":236},[102,59348,59349],{"class":187},"            width",[102,59351,59302],{"class":119},[102,59353,59354],{"class":187},"700",[102,59356,59357],{"class":108},"px",[102,59359,266],{"class":119},[102,59361,59362,59365,59367,59369,59371],{"class":104,"line":242},[102,59363,59364],{"class":187},"            height",[102,59366,59302],{"class":119},[102,59368,12786],{"class":187},[102,59370,59357],{"class":108},[102,59372,266],{"class":119},[102,59374,59375,59378,59380,59382,59384,59387,59390],{"class":104,"line":248},[102,59376,59377],{"class":187},"            border-left",[102,59379,59302],{"class":119},[102,59381,7039],{"class":187},[102,59383,59357],{"class":108},[102,59385,59386],{"class":187}," solid",[102,59388,59389],{"class":187}," pink",[102,59391,266],{"class":119},[102,59393,59394,59397,59399,59401,59403,59405,59407],{"class":104,"line":254},[102,59395,59396],{"class":187},"            border-bottom",[102,59398,59302],{"class":119},[102,59400,7039],{"class":187},[102,59402,59357],{"class":108},[102,59404,59386],{"class":187},[102,59406,59389],{"class":187},[102,59408,266],{"class":119},[102,59410,59411,59413,59415,59417,59419,59422],{"class":104,"line":269},[102,59412,59299],{"class":187},[102,59414,59302],{"class":119},[102,59416,1445],{"class":187},[102,59418,59357],{"class":108},[102,59420,59421],{"class":187}," auto",[102,59423,266],{"class":119},[102,59425,59426,59429,59431,59434],{"class":104,"line":298},[102,59427,59428],{"class":187},"            justify-content",[102,59430,59302],{"class":119},[102,59432,59433],{"class":187},"space-around",[102,59435,266],{"class":119},[102,59437,59438,59441,59443,59446],{"class":104,"line":502},[102,59439,59440],{"class":187},"            align-items",[102,59442,59302],{"class":119},[102,59444,59445],{"class":187},"flex-end",[102,59447,266],{"class":119},[102,59449,59450,59453,59455,59458],{"class":104,"line":507},[102,59451,59452],{"class":187},"            text-align",[102,59454,59302],{"class":119},[102,59456,59457],{"class":187},"center",[102,59459,266],{"class":119},[102,59461,59462],{"class":104,"line":512},[102,59463,1252],{"class":119},[102,59465,59466],{"class":104,"line":521},[102,59467,652],{"emptyLinePlaceholder":651},[102,59469,59470,59472,59474,59477],{"class":104,"line":526},[102,59471,59330],{"class":112},[102,59473,1219],{"class":108},[102,59475,59476],{"class":59165},"div",[102,59478,1077],{"class":119},[102,59480,59481,59483,59485,59487],{"class":104,"line":532},[102,59482,59337],{"class":187},[102,59484,59302],{"class":119},[102,59486,59342],{"class":187},[102,59488,266],{"class":119},[102,59490,59491,59493,59495,59497,59499],{"class":104,"line":538},[102,59492,59349],{"class":187},[102,59494,59302],{"class":119},[102,59496,1445],{"class":187},[102,59498,59357],{"class":108},[102,59500,266],{"class":119},[102,59502,59503,59506,59508,59511],{"class":104,"line":555},[102,59504,59505],{"class":187},"            background-color",[102,59507,59302],{"class":119},[102,59509,59510],{"class":187},"pink",[102,59512,266],{"class":119},[102,59514,59515,59518,59520,59523],{"class":104,"line":570},[102,59516,59517],{"class":187},"            flex-direction",[102,59519,59302],{"class":119},[102,59521,59522],{"class":187},"column",[102,59524,266],{"class":119},[102,59526,59527,59529,59531,59534],{"class":104,"line":581},[102,59528,59428],{"class":187},[102,59530,59302],{"class":119},[102,59532,59533],{"class":187},"space-between",[102,59535,266],{"class":119},[102,59537,59538],{"class":104,"line":819},[102,59539,1252],{"class":119},[102,59541,59542],{"class":104,"line":828},[102,59543,652],{"emptyLinePlaceholder":651},[102,59545,59546,59548,59551,59554],{"class":104,"line":837},[102,59547,59330],{"class":112},[102,59549,59550],{"class":59165}," div",[102,59552,59553],{"class":59165}," span",[102,59555,1077],{"class":119},[102,59557,59558],{"class":104,"line":842},[102,59559,652],{"emptyLinePlaceholder":651},[102,59561,59562,59565,59567,59570,59572],{"class":104,"line":855},[102,59563,59564],{"class":187},"            margin-top",[102,59566,59302],{"class":119},[102,59568,59569],{"class":187},"-20",[102,59571,59357],{"class":108},[102,59573,266],{"class":119},[102,59575,59576],{"class":104,"line":860},[102,59577,1252],{"class":119},[102,59579,59580],{"class":104,"line":871},[102,59581,652],{"emptyLinePlaceholder":651},[102,59583,59584,59586,59588,59591],{"class":104,"line":1359},[102,59585,59330],{"class":112},[102,59587,59550],{"class":59165},[102,59589,59590],{"class":59165}," h4",[102,59592,1077],{"class":119},[102,59594,59595,59598,59600,59603,59605],{"class":104,"line":1368},[102,59596,59597],{"class":187},"            margin-bottom",[102,59599,59302],{"class":119},[102,59601,59602],{"class":187},"-35",[102,59604,59357],{"class":108},[102,59606,266],{"class":119},[102,59608,59609,59611,59613,59615,59617],{"class":104,"line":1373},[102,59610,59349],{"class":187},[102,59612,59302],{"class":119},[102,59614,9390],{"class":187},[102,59616,59357],{"class":108},[102,59618,266],{"class":119},[102,59620,59621,59624,59626,59629,59631],{"class":104,"line":1378},[102,59622,59623],{"class":187},"            margin-left",[102,59625,59302],{"class":119},[102,59627,59628],{"class":187},"-10",[102,59630,59357],{"class":108},[102,59632,266],{"class":119},[102,59634,59635],{"class":104,"line":1384},[102,59636,1252],{"class":119},[102,59638,59639,59642,59644],{"class":104,"line":1398},[102,59640,59641],{"class":119},"    \u003C\u002F",[102,59643,8955],{"class":59165},[102,59645,59172],{"class":119},[102,59647,59648,59651,59653],{"class":104,"line":1424},[102,59649,59650],{"class":119},"\u003C\u002F",[102,59652,59199],{"class":59165},[102,59654,59172],{"class":119},[102,59656,59657],{"class":104,"line":1429},[102,59658,652],{"emptyLinePlaceholder":651},[102,59660,59661,59663,59666],{"class":104,"line":1435},[102,59662,1208],{"class":119},[102,59664,59665],{"class":59165},"body",[102,59667,59172],{"class":119},[102,59669,59670],{"class":104,"line":1450},[102,59671,652],{"emptyLinePlaceholder":651},[102,59673,59674,59676,59679],{"class":104,"line":1473},[102,59675,59206],{"class":119},[102,59677,59678],{"class":59165},"script",[102,59680,59172],{"class":119},[102,59682,59683],{"class":104,"line":1478},[102,59684,59685],{"class":126},"        \u002F\u002F 1. 四次弹框效果\n",[102,59687,59688],{"class":104,"line":1484},[102,59689,59690],{"class":126},"        \u002F\u002F 声明一个新的数组\n",[102,59692,59693,59696,59699,59701],{"class":104,"line":1499},[102,59694,59695],{"class":108},"        let",[102,59697,59698],{"class":119}," arr ",[102,59700,260],{"class":108},[102,59702,59703],{"class":119}," []\n",[102,59705,59706,59708,59710,59713,59715,59717,59719,59721,59723,59726,59728,59730],{"class":104,"line":1508},[102,59707,12217],{"class":108},[102,59709,2432],{"class":119},[102,59711,59712],{"class":108},"let",[102,59714,18205],{"class":119},[102,59716,260],{"class":108},[102,59718,32983],{"class":187},[102,59720,18212],{"class":119},[102,59722,10461],{"class":108},[102,59724,59725],{"class":187}," 4",[102,59727,12029],{"class":119},[102,59729,11130],{"class":108},[102,59731,1105],{"class":119},[102,59733,59734],{"class":104,"line":1513},[102,59735,59736],{"class":126},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[102,59738,59739],{"class":104,"line":1524},[102,59740,59741],{"class":126},"            \u002F\u002F arr.push(num)\n",[102,59743,59744,59747,59750,59752,59755,59757,59760,59762,59765],{"class":104,"line":1529},[102,59745,59746],{"class":119},"            arr.",[102,59748,59749],{"class":112},"push",[102,59751,380],{"class":119},[102,59753,59754],{"class":112},"prompt",[102,59756,380],{"class":119},[102,59758,59759],{"class":278},"`请输入第${",[102,59761,9473],{"class":119},[102,59763,59764],{"class":278},"}季度的数据:`",[102,59766,38362],{"class":119},[102,59768,59769],{"class":104,"line":1538},[102,59770,59771],{"class":126},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[102,59773,59774],{"class":104,"line":2089},[102,59775,1252],{"class":119},[102,59777,59778],{"class":104,"line":2094},[102,59779,59780],{"class":126},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[102,59782,59783],{"class":104,"line":2100},[102,59784,59785],{"class":126},"        \u002F\u002F 盒子开头\n",[102,59787,59788,59791,59794,59796,59799],{"class":104,"line":2106},[102,59789,59790],{"class":119},"        document.",[102,59792,59793],{"class":112},"write",[102,59795,380],{"class":119},[102,59797,59798],{"class":278},"` \u003Cdiv class=\"box\">`",[102,59800,390],{"class":119},[102,59802,59803],{"class":104,"line":2120},[102,59804,652],{"emptyLinePlaceholder":651},[102,59806,59807],{"class":104,"line":2128},[102,59808,59809],{"class":126},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[102,59811,59812,59814,59816,59818,59820,59822,59824,59826,59828,59831,59834,59836,59838],{"class":104,"line":2149},[102,59813,12217],{"class":108},[102,59815,2432],{"class":119},[102,59817,59712],{"class":108},[102,59819,18205],{"class":119},[102,59821,260],{"class":108},[102,59823,866],{"class":187},[102,59825,18212],{"class":119},[102,59827,1208],{"class":108},[102,59829,59830],{"class":119}," arr.",[102,59832,59833],{"class":187},"length",[102,59835,12029],{"class":119},[102,59837,11130],{"class":108},[102,59839,1105],{"class":119},[102,59841,59842,59845,59847,59849],{"class":104,"line":2161},[102,59843,59844],{"class":119},"            document.",[102,59846,59793],{"class":112},[102,59848,380],{"class":119},[102,59850,59851],{"class":278},"`\n",[102,59853,59854,59857,59859,59861,59863,59865],{"class":104,"line":2167},[102,59855,59856],{"class":278},"              \u003Cdiv style=\"height: ${",[102,59858,12693],{"class":119},[102,59860,9912],{"class":278},[102,59862,9473],{"class":119},[102,59864,9961],{"class":278},[102,59866,59867],{"class":278},"}px;\">\n",[102,59869,59870,59873,59875,59877,59879,59881],{"class":104,"line":2190},[102,59871,59872],{"class":278},"                \u003Cspan>${",[102,59874,12693],{"class":119},[102,59876,9912],{"class":278},[102,59878,9473],{"class":119},[102,59880,9961],{"class":278},[102,59882,59883],{"class":278},"}\u003C\u002Fspan>\n",[102,59885,59886,59889,59891,59893,59895],{"class":104,"line":2196},[102,59887,59888],{"class":278},"                \u003Ch4>第${",[102,59890,9473],{"class":119},[102,59892,53431],{"class":108},[102,59894,32983],{"class":187},[102,59896,59897],{"class":278},"}季度\u003C\u002Fh4>\n",[102,59899,59900],{"class":104,"line":2219},[102,59901,59902],{"class":278},"              \u003C\u002Fdiv>          \n",[102,59904,59905,59908],{"class":104,"line":2233},[102,59906,59907],{"class":278},"            `",[102,59909,390],{"class":119},[102,59911,59912],{"class":104,"line":2253},[102,59913,1252],{"class":119},[102,59915,59916],{"class":104,"line":2259},[102,59917,59918],{"class":126},"        \u002F\u002F 盒子结尾\n",[102,59920,59921,59923,59925,59927,59930],{"class":104,"line":2270},[102,59922,59790],{"class":119},[102,59924,59793],{"class":112},[102,59926,380],{"class":119},[102,59928,59929],{"class":278},"` \u003C\u002Fdiv>`",[102,59931,390],{"class":119},[102,59933,59934,59936,59938],{"class":104,"line":2293},[102,59935,59641],{"class":119},[102,59937,59678],{"class":59165},[102,59939,59172],{"class":119},[102,59941,59942,59944,59946],{"class":104,"line":2315},[102,59943,59650],{"class":119},[102,59945,59665],{"class":59165},[102,59947,59172],{"class":119},[102,59949,59950],{"class":104,"line":2320},[102,59951,652],{"emptyLinePlaceholder":651},[102,59953,59954,59956,59958],{"class":104,"line":2326},[102,59955,59650],{"class":119},[102,59957,58500],{"class":59165},[102,59959,59172],{"class":119},[48,59961,59963],{"id":59962},"_284-冒泡排序","2.8.4 冒泡排序",[93,59965,59967],{"className":58498,"code":59966,"language":58500,"meta":98,"style":98},"\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",[83,59968,59969,59979,59993,59997,60005,60020,60040,60052,60060,60064,60072,60080,60112,60145,60182,60187,60206,60211,60224,60239,60255,60259,60264,60268,60278,60287,60295,60299],{"__ignoreMap":98},[102,59970,59971,59973,59975,59977],{"class":104,"line":105},[102,59972,59162],{"class":119},[102,59974,59166],{"class":59165},[102,59976,59169],{"class":112},[102,59978,59172],{"class":119},[102,59980,59981,59983,59985,59987,59989,59991],{"class":104,"line":116},[102,59982,1208],{"class":119},[102,59984,58500],{"class":59165},[102,59986,59181],{"class":112},[102,59988,260],{"class":119},[102,59990,59186],{"class":278},[102,59992,59172],{"class":119},[102,59994,59995],{"class":104,"line":123},[102,59996,652],{"emptyLinePlaceholder":651},[102,59998,59999,60001,60003],{"class":104,"line":130},[102,60000,1208],{"class":119},[102,60002,59199],{"class":59165},[102,60004,59172],{"class":119},[102,60006,60007,60010,60012,60014,60016,60018],{"class":104,"line":136},[102,60008,60009],{"class":119},"  \u003C",[102,60011,59209],{"class":59165},[102,60013,59212],{"class":112},[102,60015,260],{"class":119},[102,60017,59217],{"class":278},[102,60019,59172],{"class":119},[102,60021,60022,60024,60026,60028,60030,60032,60034,60036,60038],{"class":104,"line":142},[102,60023,60009],{"class":119},[102,60025,59209],{"class":59165},[102,60027,387],{"class":112},[102,60029,260],{"class":119},[102,60031,59256],{"class":278},[102,60033,59236],{"class":112},[102,60035,260],{"class":119},[102,60037,59263],{"class":278},[102,60039,59172],{"class":119},[102,60041,60042,60044,60046,60048,60050],{"class":104,"line":148},[102,60043,60009],{"class":119},[102,60045,59272],{"class":59165},[102,60047,59275],{"class":119},[102,60049,59272],{"class":59165},[102,60051,59172],{"class":119},[102,60053,60054,60056,60058],{"class":104,"line":157},[102,60055,59650],{"class":119},[102,60057,59199],{"class":59165},[102,60059,59172],{"class":119},[102,60061,60062],{"class":104,"line":163},[102,60063,652],{"emptyLinePlaceholder":651},[102,60065,60066,60068,60070],{"class":104,"line":175},[102,60067,1208],{"class":119},[102,60069,59665],{"class":59165},[102,60071,59172],{"class":119},[102,60073,60074,60076,60078],{"class":104,"line":181},[102,60075,60009],{"class":119},[102,60077,59678],{"class":59165},[102,60079,59172],{"class":119},[102,60081,60082,60085,60087,60089,60092,60094,60096,60098,60100,60102,60104,60106,60108,60110],{"class":104,"line":202},[102,60083,60084],{"class":108},"    let",[102,60086,59698],{"class":119},[102,60088,260],{"class":108},[102,60090,60091],{"class":119}," [",[102,60093,9354],{"class":187},[102,60095,2571],{"class":119},[102,60097,9329],{"class":187},[102,60099,2571],{"class":119},[102,60101,7049],{"class":187},[102,60103,2571],{"class":119},[102,60105,7044],{"class":187},[102,60107,2571],{"class":119},[102,60109,7039],{"class":187},[102,60111,41111],{"class":119},[102,60113,60114,60116,60118,60120,60122,60124,60126,60128,60130,60132,60134,60137,60139,60141,60143],{"class":104,"line":208},[102,60115,12016],{"class":108},[102,60117,2432],{"class":119},[102,60119,59712],{"class":108},[102,60121,18205],{"class":119},[102,60123,260],{"class":108},[102,60125,866],{"class":187},[102,60127,18212],{"class":119},[102,60129,1208],{"class":108},[102,60131,59830],{"class":119},[102,60133,59833],{"class":187},[102,60135,60136],{"class":108}," -",[102,60138,32983],{"class":187},[102,60140,12029],{"class":119},[102,60142,11130],{"class":108},[102,60144,1105],{"class":119},[102,60146,60147,60150,60152,60154,60156,60158,60160,60162,60164,60166,60168,60170,60172,60174,60176,60178,60180],{"class":104,"line":214},[102,60148,60149],{"class":108},"      for",[102,60151,2432],{"class":119},[102,60153,59712],{"class":108},[102,60155,18267],{"class":119},[102,60157,260],{"class":108},[102,60159,866],{"class":187},[102,60161,18274],{"class":119},[102,60163,1208],{"class":108},[102,60165,59830],{"class":119},[102,60167,59833],{"class":187},[102,60169,60136],{"class":108},[102,60171,18205],{"class":119},[102,60173,2833],{"class":108},[102,60175,32983],{"class":187},[102,60177,18281],{"class":119},[102,60179,11130],{"class":108},[102,60181,1105],{"class":119},[102,60183,60184],{"class":104,"line":225},[102,60185,60186],{"class":126},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[102,60188,60189,60191,60194,60196,60199,60201,60203],{"class":104,"line":230},[102,60190,1202],{"class":108},[102,60192,60193],{"class":119}," (arr[j] ",[102,60195,1219],{"class":108},[102,60197,60198],{"class":119}," arr[j ",[102,60200,1702],{"class":108},[102,60202,32983],{"class":187},[102,60204,60205],{"class":119},"]) {\n",[102,60207,60208],{"class":104,"line":236},[102,60209,60210],{"class":126},"          \u002F\u002F 交换两个变量\n",[102,60212,60213,60216,60219,60221],{"class":104,"line":242},[102,60214,60215],{"class":108},"          let",[102,60217,60218],{"class":119}," tmp ",[102,60220,260],{"class":108},[102,60222,60223],{"class":119}," arr[j]\n",[102,60225,60226,60229,60231,60233,60235,60237],{"class":104,"line":248},[102,60227,60228],{"class":119},"          arr[j] ",[102,60230,260],{"class":108},[102,60232,60198],{"class":119},[102,60234,1702],{"class":108},[102,60236,32983],{"class":187},[102,60238,41111],{"class":119},[102,60240,60241,60244,60246,60248,60250,60252],{"class":104,"line":254},[102,60242,60243],{"class":119},"          arr[j ",[102,60245,1702],{"class":108},[102,60247,32983],{"class":187},[102,60249,13252],{"class":119},[102,60251,260],{"class":108},[102,60253,60254],{"class":119}," tmp\n",[102,60256,60257],{"class":104,"line":269},[102,60258,1252],{"class":119},[102,60260,60261],{"class":104,"line":298},[102,60262,60263],{"class":119},"      }\n",[102,60265,60266],{"class":104,"line":502},[102,60267,205],{"class":119},[102,60269,60270,60273,60275],{"class":104,"line":507},[102,60271,60272],{"class":119},"    document.",[102,60274,59793],{"class":112},[102,60276,60277],{"class":119},"(arr)\n",[102,60279,60280,60283,60285],{"class":104,"line":512},[102,60281,60282],{"class":119},"  \u003C\u002F",[102,60284,59678],{"class":59165},[102,60286,59172],{"class":119},[102,60288,60289,60291,60293],{"class":104,"line":521},[102,60290,59650],{"class":119},[102,60292,59665],{"class":59165},[102,60294,59172],{"class":119},[102,60296,60297],{"class":104,"line":526},[102,60298,652],{"emptyLinePlaceholder":651},[102,60300,60301,60303,60305],{"class":104,"line":532},[102,60302,59650],{"class":119},[102,60304,58500],{"class":59165},[102,60306,59172],{"class":119},[14,60308,60309],{},[6750,60310],{"alt":98,"src":60311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,60313,60314],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,60316,60317],{},"let arr = [4, 2, 5, 1, 3]",[14,60319,60320],{},"\u002F\u002F 1.升序排列写法",[14,60322,60323],{},"arr.sort(function (a, b) {",[14,60325,60326],{},"return a - b",[14,60328,60329],{},"})",[14,60331,60332],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,60334,60335],{},"\u002F\u002F 降序排列写法",[14,60337,60323],{},[14,60339,60340],{},"return b - a",[14,60342,60329],{},[14,60344,60345],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[43,60347,60349],{"id":60348},"_29-函数","2.9 函数",[14,60351,60352],{},[6750,60353],{"alt":98,"src":60354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,60356,60357],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,60359,60360],{},"函数的声明用function",[14,60362,60363],{},"函数里边可以嵌套函数",[48,60365,60367],{"id":60366},"_291-函数传参","2.9.1 函数传参",[14,60369,60370],{},[6750,60371],{"alt":98,"src":60372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,60374,60375],{},[6750,60376],{"alt":98,"src":60377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[59,60379,60380,60383,60386,60389,60392,60395],{},[62,60381,60382],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[62,60384,60385],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[62,60387,60388],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[62,60390,60391],{},"开发中尽量保持形参和实参个数一致",[62,60393,60394],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[62,60396,60397],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,60399,60400],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[48,60402,60404],{"id":60403},"_292-函数的返回值","2.9.2 函数的返回值",[14,60406,60407],{},[6750,60408],{"alt":98,"src":60409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,60411,60412],{},[6750,60413],{"alt":98,"src":60414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[59,60416,60417,60420,60423,60426,60429],{},[62,60418,60419],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[62,60421,60422],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[62,60424,60425],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[62,60427,60428],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[62,60430,60431],{},"断点调试:进入函数内部看执行过程F11",[48,60433,60435],{"id":60434},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[93,60437,60439],{"className":58498,"code":60438,"language":58500,"meta":98,"style":98},"    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",[83,60440,60441,60446,60451,60455,60460],{"__ignoreMap":98},[102,60442,60443],{"class":104,"line":105},[102,60444,60445],{"class":119},"    function fn(a, b) {\n",[102,60447,60448],{"class":104,"line":116},[102,60449,60450],{"class":119},"      console.log(a + b);\n",[102,60452,60453],{"class":104,"line":123},[102,60454,205],{"class":119},[102,60456,60457],{"class":104,"line":130},[102,60458,60459],{"class":119},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[102,60461,60462],{"class":104,"line":136},[102,60463,60464],{"class":119},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[48,60466,60468],{"id":60467},"_294-作用域","2.9.4 作用域",[59,60470,60471,60477,60482,60485,60488],{},[62,60472,60473,60474],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[18,60475,60476],{},"作用域",[62,60478,60479],{},[18,60480,60481],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[62,60483,60484],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[62,60486,60487],{},"函数内部可以直接所使用全局变量",[62,60489,60490],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,60492,32],{},[93,60494,60496],{"className":58498,"code":60495,"language":58500,"meta":98,"style":98},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[83,60497,60498,60503,60508,60512,60517,60522,60527],{"__ignoreMap":98},[102,60499,60500],{"class":104,"line":105},[102,60501,60502],{"class":119},"    function fun() {\n",[102,60504,60505],{"class":104,"line":116},[102,60506,60507],{"class":119},"      num = 10\n",[102,60509,60510],{"class":104,"line":123},[102,60511,205],{"class":119},[102,60513,60514],{"class":104,"line":130},[102,60515,60516],{"class":119},"    fun()\n",[102,60518,60519],{"class":104,"line":136},[102,60520,60521],{"class":119},"    console.log(num)\n",[102,60523,60524],{"class":104,"line":142},[102,60525,60526],{"class":119},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[102,60528,60529],{"class":104,"line":148},[102,60530,60531],{"class":119},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[59,60533,60534,60537],{},[62,60535,60536],{},"函数内部的形参可以看做是局部变量",[62,60538,60539],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,60541,60542,60543],{},"变量访问原则： ",[18,60544,60545],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[48,60547,60549],{"id":60548},"_295-匿名函数","2.9.5 匿名函数",[14,60551,60552],{},"函数可以分为具名函数和匿名函数",[14,60554,60555],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[87,60557,60558],{},[62,60559,60560],{},"函数表达式",[14,60562,60563],{},[6750,60564],{"alt":98,"src":60565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,60567,60568],{},"里边也可以写参数",[14,60570,60571],{},"具名函数调用位置可以随意调整；",[14,60573,60574],{},"匿名函数函数表达式形式只能在声明后才可以使用",[87,60576,60577],{"start":116},[62,60578,60579],{},"立即执行函数",[14,60581,60582],{},[6750,60583],{"alt":98,"src":60584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,60586,60587],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,60589,60590],{},"写法：两个小括号，然后在第一个小括号中写function",[14,60592,60593],{},"(function () {})();",[14,60595,60596],{},"不要落下最后的;",[14,60598,60599],{},"立即执行函数必须要加;",[14,60601,60602],{},"分号写前写后都没问题",[14,60604,60605],{},"写前：",[14,60607,60608],{},"(function() {})()",[14,60610,60611],{},";(function () {})();",[14,60613,60614],{},"写后:",[14,60616,60617],{},"(function() {})();",[14,60619,60593],{},[14,60621,60622],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,60624,60625],{},"还有一种写法：",[14,60627,60628],{},"(function(){}());",[14,60630,60631],{},"或者:",[14,60633,60634],{},"!function(){}();",[14,60636,60637],{},"立即执行函数有时候也是可以加名字的：",[14,60639,60640],{},"(function flexible(window,document) {}(window,document));",[14,60642,60643],{},"省一些调用方法",[48,60645,60647],{"id":60646},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,60649,60650],{},[6750,60651],{"alt":98,"src":60652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,60654,60655],{},"这样就不用非得给x,y初始化了",[14,60657,60658],{},[6750,60659],{"alt":98,"src":60660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,60662,60663],{},"代码执行时先看左边",[14,60665,60666],{},"例如：console.log(false && 3+5)",[14,60668,60669],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,60671,60672],{},"&&都是真时，就返回最后一个真值",[14,60674,60675],{},"console.log(11 && 22)",[14,60677,60678],{},"输出22",[14,60680,60681],{},"逻辑与：遇真则真",[14,60683,32],{},[14,60685,60686],{},"let age=1",[14,60688,60689],{},"console.log(11 || age++)",[14,60691,60692],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,60694,60695],{},"console.log(11 || 22)",[14,60697,60698],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,60700,60701],{},"||如果都是假的话，就取最后一个假的值了",[48,60703,60705],{"id":60704},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,60707,60708],{},"显示转换：",[14,60710,60711,60714,60715],{},[18,60712,60713],{},"记忆","： ",[18,60716,60717],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,60719,60720],{},"空字符串为假，其他字符串全为真",[14,60722,60723],{},[6750,60724],{"alt":98,"src":60725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,60727,60728],{},"隐式转换：",[14,60730,60731],{},[6750,60732],{"alt":98,"src":60733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,60735,60736],{},"隐式转换:",[14,60738,60739],{},"null+3=3",[14,60741,60742],{},"undefined+3=NaN",[14,60744,60745],{},"null==undefined 输出true,他两个都当0看",[14,60747,60748],{},"null===undefined 输出false",[14,60750,60751],{},"undefined做任何操作都是NaN",[14,60753,60754],{},"NaN不等于NaN，NaN表示计算错误",[43,60756,60758],{"id":60757},"_210-对象","2.10 对象",[48,60760,60762],{"id":60761},"_2101-对象的介绍","2.10.1 对象的介绍",[14,60764,60765],{},"对象也是一种数据类型，里边的数据是无序的",[14,60767,60768],{},"对象由属性和方法组成",[14,60770,60771],{},[6750,60772],{"alt":98,"src":60773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,60775,60776],{},[6750,60777],{"alt":98,"src":60778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,60780,60781],{},[6750,60782],{"alt":98,"src":60783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[48,60785,60787],{"id":60786},"_2102-对象属性","2.10.2 对象属性",[14,60789,60790],{},[6750,60791],{"alt":98,"src":60792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[87,60794,60795],{},[62,60796,60797],{},"查询对象",[14,60799,60800],{},"对象名.属性 goods.uname",[14,60802,60803],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,60805,60806],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,60808,60809],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,60811,60812],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[87,60814,60815],{"start":116},[62,60816,60817],{},"重新赋值",[14,60819,60820],{},"对象名.属性=新值",[87,60822,60823],{"start":123},[62,60824,60825],{},"增加新数据",[14,60827,60820],{},[87,60829,60830],{"start":130},[62,60831,60832],{},"删除对象中的属性",[14,60834,60835],{},"delete 对象名.属性",[48,60837,60839],{"id":60838},"_2103-对象方法","2.10.3 对象方法",[14,60841,60842],{},[6750,60843],{"alt":98,"src":60844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,60846,60847],{},"后边跟的是匿名函数",[14,60849,60850],{},"对象外面的叫函数；对象内部的叫方法",[14,60852,60853],{},[6750,60854],{"alt":98,"src":60855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[48,60857,60859],{"id":60858},"_2104-遍历对象","2.10.4 遍历对象",[14,60861,60862],{},"理解为加括号的python字典遍历",[14,60864,60865],{},[6750,60866],{"alt":98,"src":60867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,60869,60870],{},"k是字符串类型",[14,60872,60873],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[93,60875,60877],{"className":58498,"code":60876,"language":58500,"meta":98,"style":98},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[83,60878,60879,60884,60889,60894,60899],{"__ignoreMap":98},[102,60880,60881],{"class":104,"line":105},[102,60882,60883],{"class":119},"   let arr = [1, 2, 3]\n",[102,60885,60886],{"class":104,"line":116},[102,60887,60888],{"class":119},"    for (let k in arr) {\n",[102,60890,60891],{"class":104,"line":123},[102,60892,60893],{"class":119},"      console.log(k)\n",[102,60895,60896],{"class":104,"line":130},[102,60897,60898],{"class":119},"      console.log(arr[k])\n",[102,60900,60901],{"class":104,"line":136},[102,60902,205],{"class":119},[14,60904,60905],{},[6750,60906],{"alt":98,"src":60907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,60909,60910],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,60912,60913],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,60915,60916],{},"for in 得到的k是属性名",[59678,60918,60919],{},"\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",[14,60921,60922],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[48,60924,60926],{"id":60925},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,60928,60929],{},"数组中放对象信息",[93,60931,60935],{"className":60932,"code":60933,"language":60934,"meta":98,"style":98},"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",[83,60936,60937,60945,60950,60955,60960,60965,60970,60975,60980,60985,60990,60995,61000,61004,61008],{"__ignoreMap":98},[102,60938,60939,60941,60943],{"class":104,"line":105},[102,60940,1208],{"class":119},[102,60942,59678],{"class":59165},[102,60944,59172],{"class":119},[102,60946,60947],{"class":104,"line":116},[102,60948,60949],{"class":119},"    let students = [\n",[102,60951,60952],{"class":104,"line":123},[102,60953,60954],{"class":119},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[102,60956,60957],{"class":104,"line":130},[102,60958,60959],{"class":119},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[102,60961,60962],{"class":104,"line":136},[102,60963,60964],{"class":119},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[102,60966,60967],{"class":104,"line":142},[102,60968,60969],{"class":119},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[102,60971,60972],{"class":104,"line":148},[102,60973,60974],{"class":119},"    ]\n",[102,60976,60977],{"class":104,"line":157},[102,60978,60979],{"class":119},"    for (let i = 0; i \u003C students.length; i++) {\n",[102,60981,60982],{"class":104,"line":163},[102,60983,60984],{"class":119},"      for (let k in students[i]) {\n",[102,60986,60987],{"class":104,"line":175},[102,60988,60989],{"class":119},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[102,60991,60992],{"class":104,"line":181},[102,60993,60994],{"class":119},"        \u002F\u002F输出每个人的名字：\n",[102,60996,60997],{"class":104,"line":202},[102,60998,60999],{"class":119},"        \u002F\u002Fconsole.log(students[i].name)\n",[102,61001,61002],{"class":104,"line":208},[102,61003,60263],{"class":119},[102,61005,61006],{"class":104,"line":214},[102,61007,205],{"class":119},[102,61009,61010,61012,61014],{"class":104,"line":225},[102,61011,60282],{"class":119},[102,61013,59678],{"class":59165},[102,61015,59172],{"class":119},[48,61017,61019],{"id":61018},"_2106-内置对象","2.10.6 内置对象",[14,61021,61022],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[87,61024,61025],{},[62,61026,61027],{},"数学对象Math",[14,61029,61030],{},[6750,61031],{"alt":98,"src":61032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,61034,61035],{},[9275,61036,61039],{"href":61037,"rel":61038},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[31729],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,61041,61042],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,61044,61045],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,61047,61048],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,61050,61051],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,61053,61054],{},"null属于对象数据类型",[87,61056,61057],{"start":116},[62,61058,61059],{},"生成任意范围随机数",[14,61061,61062],{},[6750,61063],{"alt":98,"src":61064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,61066,61067],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,61069,61070],{},"乘以几就取不到几",[14,61072,61073],{},"取数组中的随机元素：",[14,61075,61076],{},"let arr = ['red', 'green', 'blue']",[14,61078,61079],{},"let random = Math.floor(Math.random() * arr.length)",[14,61081,61082],{},"console.log(arr[random])",[14,61084,61085],{},"这个函数得到的是全闭区间",[14,61087,61088],{},"function getRandom(N, M) {",[14,61090,61091],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,61093,9967],{},[14,61095,61096],{},"console.log(getRandom(4, 8))",[48,61098,61100],{"id":61099},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,61102,61103],{},[6750,61104],{"alt":98,"src":61105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,61107,61108],{},[6750,61109],{"alt":98,"src":61110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,61112,61113],{},[6750,61114],{"alt":98,"src":61115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,61117,61118],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,61120,61121],{},[6750,61122],{"alt":98,"src":61123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,61125,61126],{},[6750,61127],{"alt":98,"src":61128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,61130,61131],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,61133,61134],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,61136,61137],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[8955,61139,61140],{},"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":98,"searchDepth":116,"depth":116,"links":61142},[61143,61151,61152,61153,61154,61155,61162,61166,61172,61181],{"id":58333,"depth":116,"text":58334,"children":61144},[61145,61146,61147,61148,61149,61150],{"id":58337,"depth":123,"text":58338},{"id":58354,"depth":123,"text":58355},{"id":58394,"depth":123,"text":58395},{"id":58406,"depth":123,"text":58407},{"id":58415,"depth":123,"text":58416},{"id":58463,"depth":123,"text":58464},{"id":58473,"depth":116,"text":58474},{"id":58561,"depth":116,"text":58562},{"id":58584,"depth":116,"text":58585},{"id":58596,"depth":116,"text":58597},{"id":58783,"depth":116,"text":58784,"children":61156},[61157,61158,61159,61160,61161],{"id":58787,"depth":123,"text":58788},{"id":58796,"depth":123,"text":58797},{"id":58824,"depth":123,"text":58825},{"id":58860,"depth":123,"text":58861},{"id":58885,"depth":123,"text":58886},{"id":58897,"depth":116,"text":58898,"children":61163},[61164,61165],{"id":58918,"depth":123,"text":58919},{"id":59012,"depth":123,"text":59013},{"id":59070,"depth":116,"text":59071,"children":61167},[61168,61169,61170,61171],{"id":59074,"depth":123,"text":59075},{"id":59098,"depth":123,"text":59099},{"id":59151,"depth":123,"text":59152},{"id":59962,"depth":123,"text":59963},{"id":60348,"depth":116,"text":60349,"children":61173},[61174,61175,61176,61177,61178,61179,61180],{"id":60366,"depth":123,"text":60367},{"id":60403,"depth":123,"text":60404},{"id":60434,"depth":123,"text":60435},{"id":60467,"depth":123,"text":60468},{"id":60548,"depth":123,"text":60549},{"id":60646,"depth":123,"text":60647},{"id":60704,"depth":123,"text":60705},{"id":60757,"depth":116,"text":60758,"children":61182},[61183,61184,61185,61186,61187,61188,61189],{"id":60761,"depth":123,"text":60762},{"id":60786,"depth":123,"text":60787},{"id":60838,"depth":123,"text":60839},{"id":60858,"depth":123,"text":60859},{"id":60925,"depth":123,"text":60926},{"id":61018,"depth":123,"text":61019},{"id":61099,"depth":123,"text":61100},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":58325,"description":31240},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":61196,"title":61197,"body":61198,"description":31240,"extension":8978,"meta":84538,"navigation":651,"path":84539,"seo":84540,"stem":84541,"__hash__":84542},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":61199,"toc":84478},[61200,61203,61206,61209,61214,61217,61220,61223,61227,61231,61237,61242,61250,61257,61260,61264,61269,61274,61279,61282,61285,61296,61299,61303,61306,61309,61314,61319,61324,61327,61330,61422,61425,61430,61433,61438,61441,61444,61449,61452,61457,61461,61464,61478,61482,61487,61490,61493,61497,61502,61505,61509,61513,61518,61522,61527,61530,61533,61536,61539,61542,61545,61550,61555,61583,61586,61589,61592,61597,61600,61603,61606,61609,61613,61642,61646,61651,61656,61659,61662,61665,61670,61785,61790,61795,61956,61961,61964,61968,61973,61978,61981,61984,61987,61990,61993,61996,61999,62002,62005,62008,62011,62014,62017,62020,62022,62025,62028,62031,62036,62040,62437,62440,62446,62450,62455,63737,63742,63745,63748,63751,63756,64952,64956,64962,64967,64970,64975,64980,64984,64988,64993,64996,65001,65004,65007,65011,65919,65922,65926,66147,66150,66153,66156,66382,66385,66609,66612,66616,66621,66624,66627,66855,66858,66891,66894,66898,66903,66907,66910,66913,66916,66919,66922,66925,66928,66933,68213,68217,68220,69313,69317,69320,69323,69326,69329,69333,69336,69339,69341,69349,70830,70834,70837,70840,70843,71052,71055,71059,71063,71068,71073,71076,71079,71084,71088,71093,71096,71205,71209,71214,71219,71222,71225,71229,71234,71239,71244,71247,71250,71261,71264,71269,71274,71277,71280,71353,71357,71362,71365,71367,71378,71382,71387,72713,72716,72719,72722,72724,72727,72730,72733,72736,72739,72742,72745,72748,72751,72754,72757,72760,72762,72764,72767,72771,73865,73868,73871,73887,73901,73904,73909,73915,73920,73924,73928,73933,73937,73942,74384,74389,74392,74396,74401,74404,74407,74411,74416,74420,74425,74430,74434,74439,74444,74447,74452,74457,74461,74466,74471,74575,74578,74582,74587,74953,74956,74959,74962,74965,74968,74971,74974,74977,76273,76277,76282,76287,76290,76293,76296,76299,76301,76306,76311,76314,76318,76323,76328,76333,76336,76339,76342,76345,76348,76353,76356,76360,76365,76370,76374,76379,76382,76387,76390,76393,76396,76399,76402,76407,76410,76413,76416,76419,76423,76428,76431,76435,76440,76443,76446,76450,76479,76482,76486,76490,76495,76499,76504,76507,76510,76513,76516,76519,76522,76525,76528,76531,76534,76537,76540,76543,76546,76550,76555,76560,76563,76567,76571,76576,76579,76583,76586,76589,76594,76599,76604,76609,76614,76617,76620,76625,76630,76634,76639,76642,76647,76650,76653,76656,76659,76664,76667,76676,76680,76685,76688,76691,76695,76698,76703,76707,76710,76716,76722,76726,76752,76755,78316,78319,78815,78818,78823,78828,78833,78837,78842,78847,78852,78856,78861,78864,78867,78870,78873,78877,78880,78885,78888,78893,78897,78902,78905,78910,78915,78920,78923,78926,78931,78936,78939,78942,78946,78949,78954,78957,78962,78965,78970,78975,78980,78983,78988,79053,79056,79067,79071,79076,79248,79252,79257,79260,79263,79266,79270,79281,79285,79288,79293,79298,79301,79304,79307,79310,79313,79315,79318,79321,79324,79329,79332,79337,79340,79344,79347,79350,79364,79368,79371,79426,79431,79434,79437,79442,79445,79449,79454,79584,79588,79593,79598,79679,79684,79688,79691,79696,79701,79707,79710,79713,79716,79720,79725,79728,79739,79743,79760,82807,82811,82814,82817,82820,82841,82845,82848,82856,82859,82864,82867,82870,82875,82880,82884,82905,82909,82914,82917,82920,82923,82926,82930,82935,82938,82942,82947,82950,82955,82958,82963,82966,82971,84174,84178,84183,84186,84191,84475],[10,61201,61197],{"id":61202},"_3web-apis",[14,61204,61205],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,61207,61208],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,61210,61211],{},[6750,61212],{"alt":98,"src":61213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,61215,61216],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,61218,61219],{},"建议数组和对象使用 const 来声明",[14,61221,61222],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[43,61224,61226],{"id":61225},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[48,61228,61230],{"id":61229},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,61232,61233,61236],{},[83,61234,61235],{},"document"," = HTML 文件解析后的对象化表示；",[14,61238,61239,61241],{},[83,61240,61235],{}," ≠ HTML 文件本身",[14,61243,61244,61249],{},[18,61245,61246],{},[83,61247,61248],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,61251,61252,61256],{},[18,61253,61254],{},[83,61255,61235],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,61258,61259],{},"document实际上为window.document的简写",[48,61261,61263],{"id":61262},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,61265,61266],{},[6750,61267],{"alt":98,"src":61268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,61270,61271],{},[6750,61272],{"alt":98,"src":61273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,61275,61276],{},[6750,61277],{"alt":98,"src":61278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,61280,61281],{},"console.dir()",[14,61283,61284],{},"dir用来打印对象",[59,61286,61287,61290,61293],{},[62,61288,61289],{},"任何一个标签，都是一个对象",[62,61291,61292],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[62,61294,61295],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,61297,61298],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[48,61300,61302],{"id":61301},"_312-获取dom对象","3.1.2 获取DoM对象",[14,61304,61305],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,61307,61308],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,61310,61311],{},[18,61312,61313],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[87,61315,61316],{},[62,61317,61318],{},"利用CSS选择器来获取标签元素",[14,61320,61321],{},[6750,61322],{"alt":98,"src":61323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,61325,61326],{},"里边的选择器必须必须加引号！！！",[14,61328,61329],{},"只选择第一个元素",[93,61331,61333],{"className":60932,"code":61332,"language":60934,"meta":98,"style":98},"\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",[83,61334,61335,61343,61364,61383,61391,61396,61401,61406,61414],{"__ignoreMap":98},[102,61336,61337,61339,61341],{"class":104,"line":105},[102,61338,1208],{"class":119},[102,61340,59665],{"class":59165},[102,61342,59172],{"class":119},[102,61344,61345,61347,61349,61352,61354,61357,61360,61362],{"class":104,"line":116},[102,61346,60009],{"class":119},[102,61348,59476],{"class":59165},[102,61350,61351],{"class":112}," class",[102,61353,260],{"class":119},[102,61355,61356],{"class":278},"\"box\"",[102,61358,61359],{"class":119},">123\u003C\u002F",[102,61361,59476],{"class":59165},[102,61363,59172],{"class":119},[102,61365,61366,61368,61370,61372,61374,61376,61379,61381],{"class":104,"line":123},[102,61367,60009],{"class":119},[102,61369,59476],{"class":59165},[102,61371,61351],{"class":112},[102,61373,260],{"class":119},[102,61375,61356],{"class":278},[102,61377,61378],{"class":119},">456\u003C\u002F",[102,61380,59476],{"class":59165},[102,61382,59172],{"class":119},[102,61384,61385,61387,61389],{"class":104,"line":130},[102,61386,60009],{"class":119},[102,61388,59678],{"class":59165},[102,61390,59172],{"class":119},[102,61392,61393],{"class":104,"line":136},[102,61394,61395],{"class":119},"    \u002F\u002F 1.获取匹配的第一个元素\n",[102,61397,61398],{"class":104,"line":142},[102,61399,61400],{"class":119},"    const box = document.querySelector('div')\n",[102,61402,61403],{"class":104,"line":148},[102,61404,61405],{"class":119},"    console.dir(box)\n",[102,61407,61408,61410,61412],{"class":104,"line":157},[102,61409,60282],{"class":119},[102,61411,59678],{"class":59165},[102,61413,59172],{"class":119},[102,61415,61416,61418,61420],{"class":104,"line":163},[102,61417,59650],{"class":119},[102,61419,59665],{"class":59165},[102,61421,59172],{"class":119},[14,61423,61424],{},"只选123，不选456",[14,61426,61427],{},[6750,61428],{"alt":98,"src":61429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,61431,61432],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,61434,61435],{},[6750,61436],{"alt":98,"src":61437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,61439,61440],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,61442,61443],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[87,61445,61446],{"start":116},[62,61447,61448],{},"其他方法来获取标签元素",[14,61450,61451],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,61453,61454],{},[6750,61455],{"alt":98,"src":61456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[48,61458,61460],{"id":61459},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,61462,61463],{},"设置修改DOM元素内容有两种方式：",[59,61465,61466,61469,61472,61475],{},[62,61467,61468],{},"元素.innerText=''",[62,61470,61471],{},"元素.innerHTML=''",[62,61473,61474],{},"不写字符串输出数字也是可以的",[62,61476,61477],{},"元素.innerHtml=1",[7601,61479,61481],{"id":61480},"_3131-innertext","3.1.3.1 innerText",[14,61483,61484],{},[6750,61485],{"alt":98,"src":61486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,61488,61489],{},"思路：实现了修改盒子中的内容！",[14,61491,61492],{},"它只显示纯文本，不解析标签",[7601,61494,61496],{"id":61495},"_3132-innerhtml","3.1.3.2 innerHTML",[14,61498,61499],{},[6750,61500],{"alt":98,"src":61501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,61503,61504],{},"相比于innerText，他的强大之处在于可以解析标签",[48,61506,61508],{"id":61507},"_314-操作元素属性","3.1.4 操作元素属性",[7601,61510,61512],{"id":61511},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,61514,61515],{},[6750,61516],{"alt":98,"src":61517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[7601,61519,61521],{"id":61520},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,61523,61524],{},[6750,61525],{"alt":98,"src":61526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,61528,61529],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,61531,61532],{},"div.style.backgroundColor = 'hotpink'",[14,61534,61535],{},"如果按照css的写法，-表示减，就会出错",[14,61537,61538],{},"body元素不需要再获取，直接用就行！！！！！！",[14,61540,61541],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,61543,61544],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,61546,61547],{},[6750,61548],{"alt":98,"src":61549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,61551,61552],{},[6750,61553],{"alt":98,"src":61554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[87,61556,61557,61560,61563,61566,61569,61572],{},[62,61558,61559],{},"className这个方式就是修改很多样式的时候来使用的！",[62,61561,61562],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[62,61564,61565],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[62,61567,61568],{},"className为属性名，如果还用class的话就导致与关键字冲突",[62,61570,61571],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[62,61573,61574,61575,61580],{},"解析标签的时候就变为了",[59476,61576],{"className":61577},[61578,61579],"nav","box",[61581,61582],"br",{},[14,61584,61585],{},"例子：",[59476,61587],{"className":61588},[61578],[59678,61590,61591],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,61593,61594],{},[6750,61595],{"alt":98,"src":61596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,61598,61599],{},"追加和删除类名用classList",[14,61601,61602],{},"常用于类似于开关的操作",[14,61604,61605],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,61607,61608],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[7601,61610,61612],{"id":61611},"_3143-牢记点","3.1.4.3 牢记点",[87,61614,61615,61618,61621,61624,61627,61630,61633,61636,61639],{},[62,61616,61617],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[62,61619,61620],{},"使用style属性操作css时不要忘记引号",[62,61622,61623],{},"使用className或者classList时也不要忘记引号",[62,61625,61626],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[62,61628,61629],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[62,61631,61632],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[62,61634,61635],{},"若： let arr=['1','2',3] arr[0]=1",[62,61637,61638],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[62,61640,61641],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[48,61643,61645],{"id":61644},"_315-操作表单元素","3.1.5 操作表单元素",[87,61647,61648],{},[62,61649,61650],{},"天生的属性",[14,61652,61653],{},[6750,61654],{"alt":98,"src":61655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,61657,61658],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,61660,61661],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,61663,61664],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,61666,61667],{},[6750,61668],{"alt":98,"src":61669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[93,61671,61673],{"className":58498,"code":61672,"language":58500,"meta":98,"style":98},"在复选框中如果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",[83,61674,61675,61680,61712,61717,61722,61727,61732,61736,61741,61746,61763,61775,61780],{"__ignoreMap":98},[102,61676,61677],{"class":104,"line":105},[102,61678,61679],{"class":119},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[102,61681,61682,61684,61687,61690,61692,61695,61697,61699,61701,61703,61705,61707,61710],{"class":104,"line":116},[102,61683,1208],{"class":119},[102,61685,61686],{"class":59165},"input",[102,61688,61689],{"class":112}," type",[102,61691,260],{"class":119},[102,61693,61694],{"class":278},"\"checkbox\"",[102,61696,387],{"class":112},[102,61698,260],{"class":119},[102,61700,16439],{"class":278},[102,61702,427],{"class":112},[102,61704,260],{"class":119},[102,61706,16439],{"class":278},[102,61708,61709],{"class":112}," checked",[102,61711,59172],{"class":119},[102,61713,61714],{"class":104,"line":123},[102,61715,61716],{"class":119},"不选的话：\n",[102,61718,61719],{"class":104,"line":130},[102,61720,61721],{"class":119},"const input = document.querySelector('input')\n",[102,61723,61724],{"class":104,"line":136},[102,61725,61726],{"class":119},"input.checked=false\n",[102,61728,61729],{"class":104,"line":142},[102,61730,61731],{"class":119},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[102,61733,61734],{"class":104,"line":148},[102,61735,652],{"emptyLinePlaceholder":651},[102,61737,61738],{"class":104,"line":157},[102,61739,61740],{"class":119},"禁用按钮：\n",[102,61742,61743],{"class":104,"line":163},[102,61744,61745],{"class":119},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[102,61747,61748,61750,61753,61756,61759,61761],{"class":104,"line":175},[102,61749,1208],{"class":119},[102,61751,61752],{"class":59165},"button",[102,61754,61755],{"class":112}," disabled",[102,61757,61758],{"class":119},">点击\u003C\u002F",[102,61760,61752],{"class":59165},[102,61762,59172],{"class":119},[102,61764,61765,61767,61769,61771,61773],{"class":104,"line":181},[102,61766,1208],{"class":119},[102,61768,61752],{"class":59165},[102,61770,61758],{"class":119},[102,61772,61752],{"class":59165},[102,61774,59172],{"class":119},[102,61776,61777],{"class":104,"line":202},[102,61778,61779],{"class":119},"const bt = document.querySelector('button')\n",[102,61781,61782],{"class":104,"line":208},[102,61783,61784],{"class":119},"bt.disabled = false\n",[87,61786,61787],{"start":116},[62,61788,61789],{},"自定义属性",[14,61791,61792],{},[6750,61793],{"alt":98,"src":61794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[93,61796,61798],{"className":60932,"code":61797,"language":60934,"meta":98,"style":98},"\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",[83,61799,61800,61808,61836,61855,61874,61893,61912,61920,61925,61930,61935,61940,61948],{"__ignoreMap":98},[102,61801,61802,61804,61806],{"class":104,"line":105},[102,61803,1208],{"class":119},[102,61805,59665],{"class":59165},[102,61807,59172],{"class":119},[102,61809,61810,61812,61814,61817,61819,61821,61824,61826,61829,61832,61834],{"class":104,"line":116},[102,61811,60009],{"class":119},[102,61813,59476],{"class":59165},[102,61815,61816],{"class":112}," data-id",[102,61818,260],{"class":119},[102,61820,12491],{"class":278},[102,61822,61823],{"class":112}," data-spm",[102,61825,260],{"class":119},[102,61827,61828],{"class":278},"\"我不知道\"",[102,61830,61831],{"class":119},">1\u003C\u002F",[102,61833,59476],{"class":59165},[102,61835,59172],{"class":119},[102,61837,61838,61840,61842,61844,61846,61848,61851,61853],{"class":104,"line":123},[102,61839,60009],{"class":119},[102,61841,59476],{"class":59165},[102,61843,61816],{"class":112},[102,61845,260],{"class":119},[102,61847,12514],{"class":278},[102,61849,61850],{"class":119},">2\u003C\u002F",[102,61852,59476],{"class":59165},[102,61854,59172],{"class":119},[102,61856,61857,61859,61861,61863,61865,61867,61870,61872],{"class":104,"line":130},[102,61858,60009],{"class":119},[102,61860,59476],{"class":59165},[102,61862,61816],{"class":112},[102,61864,260],{"class":119},[102,61866,12527],{"class":278},[102,61868,61869],{"class":119},">3\u003C\u002F",[102,61871,59476],{"class":59165},[102,61873,59172],{"class":119},[102,61875,61876,61878,61880,61882,61884,61886,61889,61891],{"class":104,"line":136},[102,61877,60009],{"class":119},[102,61879,59476],{"class":59165},[102,61881,61816],{"class":112},[102,61883,260],{"class":119},[102,61885,12540],{"class":278},[102,61887,61888],{"class":119},">4\u003C\u002F",[102,61890,59476],{"class":59165},[102,61892,59172],{"class":119},[102,61894,61895,61897,61899,61901,61903,61905,61908,61910],{"class":104,"line":142},[102,61896,60009],{"class":119},[102,61898,59476],{"class":59165},[102,61900,61816],{"class":112},[102,61902,260],{"class":119},[102,61904,12561],{"class":278},[102,61906,61907],{"class":119},">5\u003C\u002F",[102,61909,59476],{"class":59165},[102,61911,59172],{"class":119},[102,61913,61914,61916,61918],{"class":104,"line":148},[102,61915,60009],{"class":119},[102,61917,59678],{"class":59165},[102,61919,59172],{"class":119},[102,61921,61922],{"class":104,"line":157},[102,61923,61924],{"class":119},"    const one = document.querySelector('div')\n",[102,61926,61927],{"class":104,"line":163},[102,61928,61929],{"class":119},"    console.log(one.dataset)\n",[102,61931,61932],{"class":104,"line":175},[102,61933,61934],{"class":119},"    console.log(one.dataset.id)\n",[102,61936,61937],{"class":104,"line":181},[102,61938,61939],{"class":119},"    console.log(one.dataset.spm)\n",[102,61941,61942,61944,61946],{"class":104,"line":202},[102,61943,60282],{"class":119},[102,61945,59678],{"class":59165},[102,61947,59172],{"class":119},[102,61949,61950,61952,61954],{"class":104,"line":208},[102,61951,59650],{"class":119},[102,61953,59665],{"class":59165},[102,61955,59172],{"class":119},[14,61957,61958],{},[6750,61959],{"alt":98,"src":61960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,61962,61963],{},"document.querySelector选择的是第一个对象（元素）",[48,61965,61967],{"id":61966},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,61969,61970],{},[6750,61971],{"alt":98,"src":61972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,61974,61975],{},[6750,61976],{"alt":98,"src":61977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,61979,61980],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[59678,61982,61983],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,61985,61986],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[59678,61988,61989],{},"\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",[14,61991,61992],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,61994,61995],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,61997,61998],{},"单位为毫秒！！！",[14,62000,62001],{},"可以搭配匿名函数来用！！！",[14,62003,62004],{},"setInterval(function () {",[14,62006,62007],{},"alert('两秒执行一次')",[14,62009,62010],{},"}, 2000)",[14,62012,62013],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,62015,62016],{},"function fn() {",[14,62018,62019],{},"document.write(1)",[14,62021,9967],{},[14,62023,62024],{},"setInterval(fn, 1000)",[14,62026,62027],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,62029,62030],{},"setInterval('fn()', 1000)",[14,62032,62033],{},[6750,62034],{"alt":98,"src":62035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[7601,62037,62039],{"id":62038},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[93,62041,62043],{"className":58498,"code":62042,"language":58500,"meta":98,"style":98},"\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",[83,62044,62045,62055,62069,62073,62081,62095,62115,62127,62135,62139,62147,62184,62189,62194,62199,62207,62215,62237,62245,62250,62272,62277,62282,62293,62298,62318,62326,62341,62356,62367,62372,62382,62392,62396,62405,62409,62417,62425,62429],{"__ignoreMap":98},[102,62046,62047,62049,62051,62053],{"class":104,"line":105},[102,62048,59162],{"class":119},[102,62050,59166],{"class":59165},[102,62052,59169],{"class":112},[102,62054,59172],{"class":119},[102,62056,62057,62059,62061,62063,62065,62067],{"class":104,"line":116},[102,62058,1208],{"class":119},[102,62060,58500],{"class":59165},[102,62062,59181],{"class":112},[102,62064,260],{"class":119},[102,62066,59186],{"class":278},[102,62068,59172],{"class":119},[102,62070,62071],{"class":104,"line":123},[102,62072,652],{"emptyLinePlaceholder":651},[102,62074,62075,62077,62079],{"class":104,"line":130},[102,62076,1208],{"class":119},[102,62078,59199],{"class":59165},[102,62080,59172],{"class":119},[102,62082,62083,62085,62087,62089,62091,62093],{"class":104,"line":136},[102,62084,60009],{"class":119},[102,62086,59209],{"class":59165},[102,62088,59212],{"class":112},[102,62090,260],{"class":119},[102,62092,59217],{"class":278},[102,62094,59172],{"class":119},[102,62096,62097,62099,62101,62103,62105,62107,62109,62111,62113],{"class":104,"line":142},[102,62098,60009],{"class":119},[102,62100,59209],{"class":59165},[102,62102,387],{"class":112},[102,62104,260],{"class":119},[102,62106,59256],{"class":278},[102,62108,59236],{"class":112},[102,62110,260],{"class":119},[102,62112,59263],{"class":278},[102,62114,59172],{"class":119},[102,62116,62117,62119,62121,62123,62125],{"class":104,"line":148},[102,62118,60009],{"class":119},[102,62120,59272],{"class":59165},[102,62122,59275],{"class":119},[102,62124,59272],{"class":59165},[102,62126,59172],{"class":119},[102,62128,62129,62131,62133],{"class":104,"line":157},[102,62130,59650],{"class":119},[102,62132,59199],{"class":59165},[102,62134,59172],{"class":119},[102,62136,62137],{"class":104,"line":163},[102,62138,652],{"emptyLinePlaceholder":651},[102,62140,62141,62143,62145],{"class":104,"line":175},[102,62142,1208],{"class":119},[102,62144,59665],{"class":59165},[102,62146,59172],{"class":119},[102,62148,62149,62151,62154,62156,62158,62160,62162,62164,62166,62169,62171,62174,62177,62179,62182],{"class":104,"line":181},[102,62150,60009],{"class":119},[102,62152,62153],{"class":59165},"textarea",[102,62155,387],{"class":112},[102,62157,260],{"class":119},[102,62159,16439],{"class":278},[102,62161,427],{"class":112},[102,62163,260],{"class":119},[102,62165,16439],{"class":278},[102,62167,62168],{"class":112}," cols",[102,62170,260],{"class":119},[102,62172,62173],{"class":278},"\"30\"",[102,62175,62176],{"class":112}," rows",[102,62178,260],{"class":119},[102,62180,62181],{"class":278},"\"10\"",[102,62183,59172],{"class":119},[102,62185,62186],{"class":104,"line":202},[102,62187,62188],{"class":119},"        用户注册协议\n",[102,62190,62191],{"class":104,"line":208},[102,62192,62193],{"class":119},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[102,62195,62196],{"class":104,"line":214},[102,62197,62198],{"class":119},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[102,62200,62201,62203,62205],{"class":104,"line":225},[102,62202,59641],{"class":119},[102,62204,62153],{"class":59165},[102,62206,59172],{"class":119},[102,62208,62209,62211,62213],{"class":104,"line":230},[102,62210,60009],{"class":119},[102,62212,61581],{"class":59165},[102,62214,59172],{"class":119},[102,62216,62217,62219,62221,62223,62225,62228,62230,62233,62235],{"class":104,"line":236},[102,62218,60009],{"class":119},[102,62220,61752],{"class":59165},[102,62222,61351],{"class":112},[102,62224,260],{"class":119},[102,62226,62227],{"class":278},"\"btn\"",[102,62229,61755],{"class":112},[102,62231,62232],{"class":119},">我已经阅读用户协议(5)\u003C\u002F",[102,62234,61752],{"class":59165},[102,62236,59172],{"class":119},[102,62238,62239,62241,62243],{"class":104,"line":242},[102,62240,60009],{"class":119},[102,62242,59678],{"class":59165},[102,62244,59172],{"class":119},[102,62246,62247],{"class":104,"line":248},[102,62248,62249],{"class":126},"    \u002F\u002F 1. 获取元素\n",[102,62251,62252,62254,62257,62259,62262,62265,62267,62270],{"class":104,"line":254},[102,62253,19961],{"class":108},[102,62255,62256],{"class":187}," btn",[102,62258,22296],{"class":108},[102,62260,62261],{"class":119}," document.",[102,62263,62264],{"class":112},"querySelector",[102,62266,380],{"class":119},[102,62268,62269],{"class":278},"'.btn'",[102,62271,390],{"class":119},[102,62273,62274],{"class":104,"line":269},[102,62275,62276],{"class":126},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[102,62278,62279],{"class":104,"line":298},[102,62280,62281],{"class":126},"    \u002F\u002F 2. 倒计时\n",[102,62283,62284,62286,62288,62290],{"class":104,"line":502},[102,62285,60084],{"class":108},[102,62287,18205],{"class":119},[102,62289,260],{"class":108},[102,62291,62292],{"class":187}," 5\n",[102,62294,62295],{"class":104,"line":507},[102,62296,62297],{"class":126},"    \u002F\u002F 2.1 开启定时器\n",[102,62299,62300,62302,62305,62307,62310,62312,62315],{"class":104,"line":512},[102,62301,60084],{"class":108},[102,62303,62304],{"class":119}," n ",[102,62306,260],{"class":108},[102,62308,62309],{"class":112}," setInterval",[102,62311,380],{"class":119},[102,62313,62314],{"class":108},"function",[102,62316,62317],{"class":119}," () {\n",[102,62319,62320,62323],{"class":104,"line":521},[102,62321,62322],{"class":119},"      i",[102,62324,62325],{"class":108},"--\n",[102,62327,62328,62331,62333,62336,62338],{"class":104,"line":526},[102,62329,62330],{"class":119},"      btn.innerHTML ",[102,62332,260],{"class":108},[102,62334,62335],{"class":278}," `我已经阅读用户协议(${",[102,62337,9473],{"class":119},[102,62339,62340],{"class":278},"})`\n",[102,62342,62343,62346,62349,62352,62354],{"class":104,"line":532},[102,62344,62345],{"class":108},"      if",[102,62347,62348],{"class":119}," (i ",[102,62350,62351],{"class":108},"===",[102,62353,866],{"class":187},[102,62355,1105],{"class":119},[102,62357,62358,62361,62364],{"class":104,"line":538},[102,62359,62360],{"class":112},"        clearInterval",[102,62362,62363],{"class":119},"(n)  ",[102,62365,62366],{"class":126},"\u002F\u002F 关闭定时器\n",[102,62368,62369],{"class":104,"line":555},[102,62370,62371],{"class":126},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[102,62373,62374,62377,62379],{"class":104,"line":570},[102,62375,62376],{"class":119},"        btn.disabled ",[102,62378,260],{"class":108},[102,62380,62381],{"class":187}," false\n",[102,62383,62384,62387,62389],{"class":104,"line":581},[102,62385,62386],{"class":119},"        btn.innerHTML ",[102,62388,260],{"class":108},[102,62390,62391],{"class":278}," '同意'\n",[102,62393,62394],{"class":104,"line":819},[102,62395,60263],{"class":119},[102,62397,62398,62401,62403],{"class":104,"line":828},[102,62399,62400],{"class":119},"    }, ",[102,62402,15205],{"class":187},[102,62404,390],{"class":119},[102,62406,62407],{"class":104,"line":837},[102,62408,652],{"emptyLinePlaceholder":651},[102,62410,62411,62413,62415],{"class":104,"line":842},[102,62412,60282],{"class":119},[102,62414,59678],{"class":59165},[102,62416,59172],{"class":119},[102,62418,62419,62421,62423],{"class":104,"line":855},[102,62420,59650],{"class":119},[102,62422,59665],{"class":59165},[102,62424,59172],{"class":119},[102,62426,62427],{"class":104,"line":860},[102,62428,652],{"emptyLinePlaceholder":651},[102,62430,62431,62433,62435],{"class":104,"line":871},[102,62432,59650],{"class":119},[102,62434,58500],{"class":59165},[102,62436,59172],{"class":119},[14,62438,62439],{},"不要一直想着用死循环,避免死循环",[14,62441,62442,62445],{},[83,62443,62444],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[7601,62447,62449],{"id":62448},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[87,62451,62452],{},[62,62453,62454],{},"法1",[93,62456,62458],{"className":58498,"code":62457,"language":58500,"meta":98,"style":98},"\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",[83,62459,62460,62470,62484,62488,62496,62510,62530,62542,62550,62556,62567,62578,62582,62586,62593,62605,62609,62613,62620,62632,62646,62659,62673,62677,62681,62688,62699,62710,62721,62733,62745,62757,62761,62765,62773,62783,62796,62808,62821,62825,62829,62836,62846,62858,62870,62881,62892,62902,62914,62926,62930,62934,62943,62955,62967,62995,63008,63012,63016,63023,63034,63038,63046,63054,63058,63066,63080,63095,63119,63127,63142,63155,63163,63184,63196,63208,63220,63232,63244,63256,63268,63277,63285,63293,63301,63313,63336,63355,63374,63393,63412,63431,63450,63470,63474,63494,63513,63533,63554,63565,63582,63592,63602,63612,63617,63622,63627,63632,63657,63670,63674,63697,63701,63709,63717,63725,63729],{"__ignoreMap":98},[102,62461,62462,62464,62466,62468],{"class":104,"line":105},[102,62463,59162],{"class":119},[102,62465,59166],{"class":59165},[102,62467,59169],{"class":112},[102,62469,59172],{"class":119},[102,62471,62472,62474,62476,62478,62480,62482],{"class":104,"line":116},[102,62473,1208],{"class":119},[102,62475,58500],{"class":59165},[102,62477,59181],{"class":112},[102,62479,260],{"class":119},[102,62481,59186],{"class":278},[102,62483,59172],{"class":119},[102,62485,62486],{"class":104,"line":123},[102,62487,652],{"emptyLinePlaceholder":651},[102,62489,62490,62492,62494],{"class":104,"line":130},[102,62491,1208],{"class":119},[102,62493,59199],{"class":59165},[102,62495,59172],{"class":119},[102,62497,62498,62500,62502,62504,62506,62508],{"class":104,"line":136},[102,62499,60009],{"class":119},[102,62501,59209],{"class":59165},[102,62503,59212],{"class":112},[102,62505,260],{"class":119},[102,62507,59217],{"class":278},[102,62509,59172],{"class":119},[102,62511,62512,62514,62516,62518,62520,62522,62524,62526,62528],{"class":104,"line":142},[102,62513,60009],{"class":119},[102,62515,59209],{"class":59165},[102,62517,387],{"class":112},[102,62519,260],{"class":119},[102,62521,59256],{"class":278},[102,62523,59236],{"class":112},[102,62525,260],{"class":119},[102,62527,59263],{"class":278},[102,62529,59172],{"class":119},[102,62531,62532,62534,62536,62538,62540],{"class":104,"line":148},[102,62533,60009],{"class":119},[102,62535,59272],{"class":59165},[102,62537,59275],{"class":119},[102,62539,59272],{"class":59165},[102,62541,59172],{"class":119},[102,62543,62544,62546,62548],{"class":104,"line":157},[102,62545,60009],{"class":119},[102,62547,8955],{"class":59165},[102,62549,59172],{"class":119},[102,62551,62552,62554],{"class":104,"line":163},[102,62553,15198],{"class":59165},[102,62555,1077],{"class":119},[102,62557,62558,62561,62563,62565],{"class":104,"line":175},[102,62559,62560],{"class":187},"      padding",[102,62562,59302],{"class":119},[102,62564,8423],{"class":187},[102,62566,266],{"class":119},[102,62568,62569,62572,62574,62576],{"class":104,"line":181},[102,62570,62571],{"class":187},"      margin",[102,62573,59302],{"class":119},[102,62575,8423],{"class":187},[102,62577,266],{"class":119},[102,62579,62580],{"class":104,"line":202},[102,62581,205],{"class":119},[102,62583,62584],{"class":104,"line":208},[102,62585,652],{"emptyLinePlaceholder":651},[102,62587,62588,62591],{"class":104,"line":214},[102,62589,62590],{"class":59165},"    li",[102,62592,1077],{"class":119},[102,62594,62595,62598,62600,62603],{"class":104,"line":225},[102,62596,62597],{"class":187},"      list-style",[102,62599,59302],{"class":119},[102,62601,62602],{"class":187},"none",[102,62604,266],{"class":119},[102,62606,62607],{"class":104,"line":230},[102,62608,205],{"class":119},[102,62610,62611],{"class":104,"line":236},[102,62612,652],{"emptyLinePlaceholder":651},[102,62614,62615,62618],{"class":104,"line":242},[102,62616,62617],{"class":112},"    .box",[102,62619,1077],{"class":119},[102,62621,62622,62625,62627,62630],{"class":104,"line":248},[102,62623,62624],{"class":187},"      position",[102,62626,59302],{"class":119},[102,62628,62629],{"class":187},"relative",[102,62631,266],{"class":119},[102,62633,62634,62637,62639,62642,62644],{"class":104,"line":254},[102,62635,62636],{"class":187},"      width",[102,62638,59302],{"class":119},[102,62640,62641],{"class":187},"976",[102,62643,59357],{"class":108},[102,62645,266],{"class":119},[102,62647,62648,62651,62653,62655,62657],{"class":104,"line":269},[102,62649,62650],{"class":187},"      height",[102,62652,59302],{"class":119},[102,62654,10415],{"class":187},[102,62656,59357],{"class":108},[102,62658,266],{"class":119},[102,62660,62661,62663,62665,62667,62669,62671],{"class":104,"line":298},[102,62662,62571],{"class":187},[102,62664,59302],{"class":119},[102,62666,5569],{"class":187},[102,62668,59357],{"class":108},[102,62670,59421],{"class":187},[102,62672,266],{"class":119},[102,62674,62675],{"class":104,"line":502},[102,62676,205],{"class":119},[102,62678,62679],{"class":104,"line":507},[102,62680,652],{"emptyLinePlaceholder":651},[102,62682,62683,62686],{"class":104,"line":512},[102,62684,62685],{"class":112},"    .slider-footer",[102,62687,1077],{"class":119},[102,62689,62690,62692,62694,62697],{"class":104,"line":521},[102,62691,62624],{"class":187},[102,62693,59302],{"class":119},[102,62695,62696],{"class":187},"absolute",[102,62698,266],{"class":119},[102,62700,62701,62704,62706,62708],{"class":104,"line":526},[102,62702,62703],{"class":187},"      left",[102,62705,59302],{"class":119},[102,62707,8423],{"class":187},[102,62709,266],{"class":119},[102,62711,62712,62715,62717,62719],{"class":104,"line":532},[102,62713,62714],{"class":187},"      bottom",[102,62716,59302],{"class":119},[102,62718,8423],{"class":187},[102,62720,266],{"class":119},[102,62722,62723,62725,62727,62729,62731],{"class":104,"line":538},[102,62724,62636],{"class":187},[102,62726,59302],{"class":119},[102,62728,5569],{"class":187},[102,62730,9363],{"class":108},[102,62732,266],{"class":119},[102,62734,62735,62737,62739,62741,62743],{"class":104,"line":555},[102,62736,62650],{"class":187},[102,62738,59302],{"class":119},[102,62740,9602],{"class":187},[102,62742,9363],{"class":108},[102,62744,266],{"class":119},[102,62746,62747,62750,62752,62755],{"class":104,"line":570},[102,62748,62749],{"class":187},"      background-color",[102,62751,59302],{"class":119},[102,62753,62754],{"class":187},"skyblue",[102,62756,266],{"class":119},[102,62758,62759],{"class":104,"line":581},[102,62760,205],{"class":119},[102,62762,62763],{"class":104,"line":819},[102,62764,652],{"emptyLinePlaceholder":651},[102,62766,62767,62769,62771],{"class":104,"line":828},[102,62768,62685],{"class":112},[102,62770,5073],{"class":59165},[102,62772,1077],{"class":119},[102,62774,62775,62777,62779,62781],{"class":104,"line":837},[102,62776,62624],{"class":187},[102,62778,59302],{"class":119},[102,62780,62696],{"class":187},[102,62782,266],{"class":119},[102,62784,62785,62788,62790,62792,62794],{"class":104,"line":842},[102,62786,62787],{"class":187},"      font-size",[102,62789,59302],{"class":119},[102,62791,9923],{"class":187},[102,62793,59357],{"class":108},[102,62795,266],{"class":119},[102,62797,62798,62800,62802,62804,62806],{"class":104,"line":855},[102,62799,62703],{"class":187},[102,62801,59302],{"class":119},[102,62803,5016],{"class":187},[102,62805,59357],{"class":108},[102,62807,266],{"class":119},[102,62809,62810,62813,62815,62817,62819],{"class":104,"line":860},[102,62811,62812],{"class":187},"      top",[102,62814,59302],{"class":119},[102,62816,9354],{"class":187},[102,62818,59357],{"class":108},[102,62820,266],{"class":119},[102,62822,62823],{"class":104,"line":871},[102,62824,205],{"class":119},[102,62826,62827],{"class":104,"line":1359},[102,62828,652],{"emptyLinePlaceholder":651},[102,62830,62831,62834],{"class":104,"line":1368},[102,62832,62833],{"class":59165},"    ul",[102,62835,1077],{"class":119},[102,62837,62838,62840,62842,62844],{"class":104,"line":1373},[102,62839,62624],{"class":187},[102,62841,59302],{"class":119},[102,62843,62696],{"class":187},[102,62845,266],{"class":119},[102,62847,62848,62850,62852,62854,62856],{"class":104,"line":1378},[102,62849,62812],{"class":187},[102,62851,59302],{"class":119},[102,62853,9805],{"class":187},[102,62855,59357],{"class":108},[102,62857,266],{"class":119},[102,62859,62860,62862,62864,62866,62868],{"class":104,"line":1384},[102,62861,62703],{"class":187},[102,62863,59302],{"class":119},[102,62865,5016],{"class":187},[102,62867,59357],{"class":108},[102,62869,266],{"class":119},[102,62871,62872,62875,62877,62879],{"class":104,"line":1398},[102,62873,62874],{"class":187},"      display",[102,62876,59302],{"class":119},[102,62878,59342],{"class":187},[102,62880,266],{"class":119},[102,62882,62883,62886,62888,62890],{"class":104,"line":1424},[102,62884,62885],{"class":187},"      justify-content",[102,62887,59302],{"class":119},[102,62889,59533],{"class":187},[102,62891,266],{"class":119},[102,62893,62894,62896,62898,62900],{"class":104,"line":1429},[102,62895,62624],{"class":187},[102,62897,59302],{"class":119},[102,62899,62696],{"class":187},[102,62901,266],{"class":119},[102,62903,62904,62906,62908,62910,62912],{"class":104,"line":1435},[102,62905,62636],{"class":187},[102,62907,59302],{"class":119},[102,62909,12805],{"class":187},[102,62911,59357],{"class":108},[102,62913,266],{"class":119},[102,62915,62916,62918,62920,62922,62924],{"class":104,"line":1450},[102,62917,62650],{"class":187},[102,62919,59302],{"class":119},[102,62921,5016],{"class":187},[102,62923,59357],{"class":108},[102,62925,266],{"class":119},[102,62927,62928],{"class":104,"line":1473},[102,62929,205],{"class":119},[102,62931,62932],{"class":104,"line":1478},[102,62933,652],{"emptyLinePlaceholder":651},[102,62935,62936,62938,62941],{"class":104,"line":1484},[102,62937,62833],{"class":59165},[102,62939,62940],{"class":59165}," li",[102,62942,1077],{"class":119},[102,62944,62945,62947,62949,62951,62953],{"class":104,"line":1499},[102,62946,62636],{"class":187},[102,62948,59302],{"class":119},[102,62950,5016],{"class":187},[102,62952,59357],{"class":108},[102,62954,266],{"class":119},[102,62956,62957,62959,62961,62963,62965],{"class":104,"line":1508},[102,62958,62650],{"class":187},[102,62960,59302],{"class":119},[102,62962,5016],{"class":187},[102,62964,59357],{"class":108},[102,62966,266],{"class":119},[102,62968,62969,62971,62973,62976,62978,62980,62982,62984,62986,62988,62990,62993],{"class":104,"line":1513},[102,62970,62749],{"class":187},[102,62972,59302],{"class":119},[102,62974,62975],{"class":187},"rgba",[102,62977,380],{"class":119},[102,62979,8423],{"class":187},[102,62981,2571],{"class":119},[102,62983,8423],{"class":187},[102,62985,2571],{"class":119},[102,62987,8423],{"class":187},[102,62989,2571],{"class":119},[102,62991,62992],{"class":187},".4",[102,62994,552],{"class":119},[102,62996,62997,63000,63002,63004,63006],{"class":104,"line":1524},[102,62998,62999],{"class":187},"      border-radius",[102,63001,59302],{"class":119},[102,63003,263],{"class":187},[102,63005,59357],{"class":108},[102,63007,266],{"class":119},[102,63009,63010],{"class":104,"line":1529},[102,63011,205],{"class":119},[102,63013,63014],{"class":104,"line":1538},[102,63015,652],{"emptyLinePlaceholder":651},[102,63017,63018,63021],{"class":104,"line":2089},[102,63019,63020],{"class":112},"    .activate",[102,63022,1077],{"class":119},[102,63024,63025,63027,63029,63032],{"class":104,"line":2094},[102,63026,62749],{"class":187},[102,63028,59302],{"class":119},[102,63030,63031],{"class":187},"#f7f7f7",[102,63033,266],{"class":119},[102,63035,63036],{"class":104,"line":2100},[102,63037,205],{"class":119},[102,63039,63040,63042,63044],{"class":104,"line":2106},[102,63041,60282],{"class":119},[102,63043,8955],{"class":59165},[102,63045,59172],{"class":119},[102,63047,63048,63050,63052],{"class":104,"line":2120},[102,63049,59650],{"class":119},[102,63051,59199],{"class":59165},[102,63053,59172],{"class":119},[102,63055,63056],{"class":104,"line":2128},[102,63057,652],{"emptyLinePlaceholder":651},[102,63059,63060,63062,63064],{"class":104,"line":2149},[102,63061,1208],{"class":119},[102,63063,59665],{"class":59165},[102,63065,59172],{"class":119},[102,63067,63068,63070,63072,63074,63076,63078],{"class":104,"line":2161},[102,63069,60009],{"class":119},[102,63071,59476],{"class":59165},[102,63073,61351],{"class":112},[102,63075,260],{"class":119},[102,63077,61356],{"class":278},[102,63079,59172],{"class":119},[102,63081,63082,63084,63086,63088,63090,63093],{"class":104,"line":2167},[102,63083,59206],{"class":119},[102,63085,59476],{"class":59165},[102,63087,61351],{"class":112},[102,63089,260],{"class":119},[102,63091,63092],{"class":278},"\"slider-wrapper\"",[102,63094,59172],{"class":119},[102,63096,63097,63100,63102,63105,63107,63110,63113,63115,63117],{"class":104,"line":2190},[102,63098,63099],{"class":119},"      \u003C",[102,63101,6750],{"class":59165},[102,63103,63104],{"class":112}," src",[102,63106,260],{"class":119},[102,63108,63109],{"class":278},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[102,63111,63112],{"class":112}," alt",[102,63114,260],{"class":119},[102,63116,16439],{"class":278},[102,63118,59172],{"class":119},[102,63120,63121,63123,63125],{"class":104,"line":2196},[102,63122,59641],{"class":119},[102,63124,59476],{"class":59165},[102,63126,59172],{"class":119},[102,63128,63129,63131,63133,63135,63137,63140],{"class":104,"line":2219},[102,63130,59206],{"class":119},[102,63132,59476],{"class":59165},[102,63134,61351],{"class":112},[102,63136,260],{"class":119},[102,63138,63139],{"class":278},"\"slider-footer\"",[102,63141,59172],{"class":119},[102,63143,63144,63146,63148,63151,63153],{"class":104,"line":2233},[102,63145,63099],{"class":119},[102,63147,14],{"class":59165},[102,63149,63150],{"class":119},">对人类来说会不会太超前了?\u003C\u002F",[102,63152,14],{"class":59165},[102,63154,59172],{"class":119},[102,63156,63157,63159,63161],{"class":104,"line":2253},[102,63158,63099],{"class":119},[102,63160,59],{"class":59165},[102,63162,59172],{"class":119},[102,63164,63165,63168,63170,63172,63174,63177,63180,63182],{"class":104,"line":2259},[102,63166,63167],{"class":119},"        \u003C",[102,63169,62],{"class":59165},[102,63171,61351],{"class":112},[102,63173,260],{"class":119},[102,63175,63176],{"class":278},"\"activate\"",[102,63178,63179],{"class":119},">\u003C\u002F",[102,63181,62],{"class":59165},[102,63183,59172],{"class":119},[102,63185,63186,63188,63190,63192,63194],{"class":104,"line":2270},[102,63187,63167],{"class":119},[102,63189,62],{"class":59165},[102,63191,63179],{"class":119},[102,63193,62],{"class":59165},[102,63195,59172],{"class":119},[102,63197,63198,63200,63202,63204,63206],{"class":104,"line":2293},[102,63199,63167],{"class":119},[102,63201,62],{"class":59165},[102,63203,63179],{"class":119},[102,63205,62],{"class":59165},[102,63207,59172],{"class":119},[102,63209,63210,63212,63214,63216,63218],{"class":104,"line":2315},[102,63211,63167],{"class":119},[102,63213,62],{"class":59165},[102,63215,63179],{"class":119},[102,63217,62],{"class":59165},[102,63219,59172],{"class":119},[102,63221,63222,63224,63226,63228,63230],{"class":104,"line":2320},[102,63223,63167],{"class":119},[102,63225,62],{"class":59165},[102,63227,63179],{"class":119},[102,63229,62],{"class":59165},[102,63231,59172],{"class":119},[102,63233,63234,63236,63238,63240,63242],{"class":104,"line":2326},[102,63235,63167],{"class":119},[102,63237,62],{"class":59165},[102,63239,63179],{"class":119},[102,63241,62],{"class":59165},[102,63243,59172],{"class":119},[102,63245,63246,63248,63250,63252,63254],{"class":104,"line":2340},[102,63247,63167],{"class":119},[102,63249,62],{"class":59165},[102,63251,63179],{"class":119},[102,63253,62],{"class":59165},[102,63255,59172],{"class":119},[102,63257,63258,63260,63262,63264,63266],{"class":104,"line":2354},[102,63259,63167],{"class":119},[102,63261,62],{"class":59165},[102,63263,63179],{"class":119},[102,63265,62],{"class":59165},[102,63267,59172],{"class":119},[102,63269,63270,63273,63275],{"class":104,"line":2359},[102,63271,63272],{"class":119},"      \u003C\u002F",[102,63274,59],{"class":59165},[102,63276,59172],{"class":119},[102,63278,63279,63281,63283],{"class":104,"line":2373},[102,63280,59641],{"class":119},[102,63282,59476],{"class":59165},[102,63284,59172],{"class":119},[102,63286,63287,63289,63291],{"class":104,"line":2378},[102,63288,60282],{"class":119},[102,63290,59476],{"class":59165},[102,63292,59172],{"class":119},[102,63294,63295,63297,63299],{"class":104,"line":2384},[102,63296,60009],{"class":119},[102,63298,59678],{"class":59165},[102,63300,59172],{"class":119},[102,63302,63303,63305,63308,63310],{"class":104,"line":2389},[102,63304,19961],{"class":108},[102,63306,63307],{"class":187}," arrImage",[102,63309,22296],{"class":108},[102,63311,63312],{"class":119}," [\n",[102,63314,63315,63318,63321,63324,63327,63330,63333],{"class":104,"line":2403},[102,63316,63317],{"class":119},"      { url: ",[102,63319,63320],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[102,63322,63323],{"class":119},", title: ",[102,63325,63326],{"class":278},"'对人类来说会不会太超前了?'",[102,63328,63329],{"class":119},", color: ",[102,63331,63332],{"class":278},"'rgba(100,67,68)'",[102,63334,63335],{"class":119}," },\n",[102,63337,63338,63340,63343,63345,63348,63350,63353],{"class":104,"line":2408},[102,63339,63317],{"class":119},[102,63341,63342],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[102,63344,63323],{"class":119},[102,63346,63347],{"class":278},"'开启剑与雪的黑暗传说!'",[102,63349,63329],{"class":119},[102,63351,63352],{"class":278},"'rgba(43,35,26)'",[102,63354,63335],{"class":119},[102,63356,63357,63359,63362,63364,63367,63369,63372],{"class":104,"line":2413},[102,63358,63317],{"class":119},[102,63360,63361],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[102,63363,63323],{"class":119},[102,63365,63366],{"class":278},"'真正的jo厨出现了!'",[102,63368,63329],{"class":119},[102,63370,63371],{"class":278},"'rgba(36,31,33)'",[102,63373,63335],{"class":119},[102,63375,63376,63378,63381,63383,63386,63388,63391],{"class":104,"line":2427},[102,63377,63317],{"class":119},[102,63379,63380],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[102,63382,63323],{"class":119},[102,63384,63385],{"class":278},"'李玉刚:让世界通过b站看到东方大国文化'",[102,63387,63329],{"class":119},[102,63389,63390],{"class":278},"'rgba(139,98,66)'",[102,63392,63335],{"class":119},[102,63394,63395,63397,63400,63402,63405,63407,63410],{"class":104,"line":2440},[102,63396,63317],{"class":119},[102,63398,63399],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[102,63401,63323],{"class":119},[102,63403,63404],{"class":278},"'快来分享你的寒假日常吧'",[102,63406,63329],{"class":119},[102,63408,63409],{"class":278},"'rgba(67,90,92)'",[102,63411,63335],{"class":119},[102,63413,63414,63416,63419,63421,63424,63426,63429],{"class":104,"line":2445},[102,63415,63317],{"class":119},[102,63417,63418],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[102,63420,63323],{"class":119},[102,63422,63423],{"class":278},"'哔哩哔哩小年YEAR'",[102,63425,63329],{"class":119},[102,63427,63428],{"class":278},"'rgba(166,131,143)'",[102,63430,63335],{"class":119},[102,63432,63433,63435,63438,63440,63443,63445,63448],{"class":104,"line":2458},[102,63434,63317],{"class":119},[102,63436,63437],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[102,63439,63323],{"class":119},[102,63441,63442],{"class":278},"'一站式解决你的电脑配置问题'",[102,63444,63329],{"class":119},[102,63446,63447],{"class":278},"'rgba(53,29,25)'",[102,63449,63335],{"class":119},[102,63451,63452,63454,63457,63459,63462,63464,63467],{"class":104,"line":2463},[102,63453,63317],{"class":119},[102,63455,63456],{"class":278},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[102,63458,63323],{"class":119},[102,63460,63461],{"class":278},"'谁不想和小猫咪贴贴呢?'",[102,63463,63329],{"class":119},[102,63465,63466],{"class":278},"'rgba(99,72,114)'",[102,63468,63469],{"class":119}," }\n",[102,63471,63472],{"class":104,"line":2468},[102,63473,60974],{"class":119},[102,63475,63476,63478,63481,63483,63485,63487,63489,63492],{"class":104,"line":2473},[102,63477,19961],{"class":108},[102,63479,63480],{"class":187}," img",[102,63482,22296],{"class":108},[102,63484,62261],{"class":119},[102,63486,62264],{"class":112},[102,63488,380],{"class":119},[102,63490,63491],{"class":278},"'.slider-wrapper img'",[102,63493,390],{"class":119},[102,63495,63496,63498,63500,63502,63504,63506,63508,63511],{"class":104,"line":2486},[102,63497,19961],{"class":108},[102,63499,5073],{"class":187},[102,63501,22296],{"class":108},[102,63503,62261],{"class":119},[102,63505,62264],{"class":112},[102,63507,380],{"class":119},[102,63509,63510],{"class":278},"'.slider-footer p'",[102,63512,390],{"class":119},[102,63514,63515,63517,63520,63522,63524,63526,63528,63531],{"class":104,"line":2491},[102,63516,19961],{"class":108},[102,63518,63519],{"class":187}," color",[102,63521,22296],{"class":108},[102,63523,62261],{"class":119},[102,63525,62264],{"class":112},[102,63527,380],{"class":119},[102,63529,63530],{"class":278},"'.slider-footer'",[102,63532,390],{"class":119},[102,63534,63535,63537,63540,63542,63544,63547,63549,63552],{"class":104,"line":40498},[102,63536,19961],{"class":108},[102,63538,63539],{"class":187}," lis",[102,63541,22296],{"class":108},[102,63543,62261],{"class":119},[102,63545,63546],{"class":112},"querySelectorAll",[102,63548,380],{"class":119},[102,63550,63551],{"class":278},"'.slider-footer ul li'",[102,63553,390],{"class":119},[102,63555,63556,63558,63560,63562],{"class":104,"line":40504},[102,63557,60084],{"class":108},[102,63559,18205],{"class":119},[102,63561,260],{"class":108},[102,63563,63564],{"class":187}," 1\n",[102,63566,63567,63569,63572,63574,63576,63578,63580],{"class":104,"line":40510},[102,63568,60084],{"class":108},[102,63570,63571],{"class":119}," timer ",[102,63573,260],{"class":108},[102,63575,62309],{"class":112},[102,63577,380],{"class":119},[102,63579,62314],{"class":108},[102,63581,62317],{"class":119},[102,63583,63584,63587,63589],{"class":104,"line":40516},[102,63585,63586],{"class":119},"      img.src ",[102,63588,260],{"class":108},[102,63590,63591],{"class":119}," arrImage[i].url\n",[102,63593,63594,63597,63599],{"class":104,"line":40522},[102,63595,63596],{"class":119},"      p.innerHTML ",[102,63598,260],{"class":108},[102,63600,63601],{"class":119}," arrImage[i].title\n",[102,63603,63604,63607,63609],{"class":104,"line":40533},[102,63605,63606],{"class":119},"      color.style.backgroundColor ",[102,63608,260],{"class":108},[102,63610,63611],{"class":119}," arrImage[i].color\n",[102,63613,63614],{"class":104,"line":40539},[102,63615,63616],{"class":126},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[102,63618,63619],{"class":104,"line":40559},[102,63620,63621],{"class":126},"      \u002F\u002F li.classList.add('activate')\n",[102,63623,63624],{"class":104,"line":40565},[102,63625,63626],{"class":126},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[102,63628,63629],{"class":104,"line":40576},[102,63630,63631],{"class":126},"      \u002F\u002F lis[i].classList.remove('activate')\n",[102,63633,63634,63637,63639,63641,63644,63647,63650,63652,63655],{"class":104,"line":40582},[102,63635,63636],{"class":119},"      document.",[102,63638,62264],{"class":112},[102,63640,380],{"class":119},[102,63642,63643],{"class":278},"'.activate'",[102,63645,63646],{"class":119},")?.classList.",[102,63648,63649],{"class":112},"toggle",[102,63651,380],{"class":119},[102,63653,63654],{"class":278},"'activate'",[102,63656,390],{"class":119},[102,63658,63659,63662,63664,63666,63668],{"class":104,"line":40588},[102,63660,63661],{"class":119},"      lis[i].classList.",[102,63663,14139],{"class":112},[102,63665,380],{"class":119},[102,63667,63654],{"class":278},[102,63669,390],{"class":119},[102,63671,63672],{"class":104,"line":40594},[102,63673,652],{"emptyLinePlaceholder":651},[102,63675,63676,63679,63681,63683,63685,63687,63689,63691,63694],{"class":104,"line":40600},[102,63677,63678],{"class":119},"      i ",[102,63680,260],{"class":108},[102,63682,62348],{"class":119},[102,63684,1702],{"class":108},[102,63686,32983],{"class":187},[102,63688,22445],{"class":119},[102,63690,9363],{"class":108},[102,63692,63693],{"class":119}," arrImage.",[102,63695,63696],{"class":187},"length\n",[102,63698,63699],{"class":104,"line":40606},[102,63700,652],{"emptyLinePlaceholder":651},[102,63702,63703,63705,63707],{"class":104,"line":40612},[102,63704,62400],{"class":119},[102,63706,15205],{"class":187},[102,63708,390],{"class":119},[102,63710,63711,63713,63715],{"class":104,"line":40618},[102,63712,60282],{"class":119},[102,63714,59678],{"class":59165},[102,63716,59172],{"class":119},[102,63718,63719,63721,63723],{"class":104,"line":40638},[102,63720,59650],{"class":119},[102,63722,59665],{"class":59165},[102,63724,59172],{"class":119},[102,63726,63727],{"class":104,"line":40644},[102,63728,652],{"emptyLinePlaceholder":651},[102,63730,63731,63733,63735],{"class":104,"line":40660},[102,63732,59650],{"class":119},[102,63734,58500],{"class":59165},[102,63736,59172],{"class":119},[14,63738,63739],{},[6750,63740],{"alt":98,"src":63741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,63743,63744],{},"?.就是短路保护,确保输出正常进行",[14,63746,63747],{},"不要忘记取余%,有时候可以用",[14,63749,63750],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[87,63752,63753],{"start":116},[62,63754,63755],{},"法2",[93,63757,63759],{"className":58498,"code":63758,"language":58500,"meta":98,"style":98},"\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",[83,63760,63761,63771,63785,63789,63797,63811,63831,63843,63851,63857,63867,63877,63881,63885,63891,63901,63905,63909,63915,63925,63937,63949,63963,63967,63971,63977,63987,63997,64007,64019,64031,64041,64045,64049,64057,64067,64079,64091,64103,64107,64111,64117,64127,64139,64151,64161,64171,64181,64193,64205,64209,64213,64221,64233,64245,64271,64283,64287,64291,64297,64307,64311,64319,64327,64331,64339,64353,64367,64387,64395,64409,64421,64429,64447,64459,64471,64483,64495,64507,64519,64531,64539,64547,64555,64563,64574,64590,64606,64622,64638,64654,64670,64686,64702,64706,64711,64729,64747,64757,64762,64767,64778,64784,64799,64808,64812,64817,64826,64831,64840,64845,64850,64855,64878,64908,64912,64920,64924,64932,64940,64944],{"__ignoreMap":98},[102,63762,63763,63765,63767,63769],{"class":104,"line":105},[102,63764,59162],{"class":119},[102,63766,59166],{"class":59165},[102,63768,59169],{"class":112},[102,63770,59172],{"class":119},[102,63772,63773,63775,63777,63779,63781,63783],{"class":104,"line":116},[102,63774,1208],{"class":119},[102,63776,58500],{"class":59165},[102,63778,59181],{"class":112},[102,63780,260],{"class":119},[102,63782,59186],{"class":278},[102,63784,59172],{"class":119},[102,63786,63787],{"class":104,"line":123},[102,63788,652],{"emptyLinePlaceholder":651},[102,63790,63791,63793,63795],{"class":104,"line":130},[102,63792,1208],{"class":119},[102,63794,59199],{"class":59165},[102,63796,59172],{"class":119},[102,63798,63799,63801,63803,63805,63807,63809],{"class":104,"line":136},[102,63800,60009],{"class":119},[102,63802,59209],{"class":59165},[102,63804,59212],{"class":112},[102,63806,260],{"class":119},[102,63808,59217],{"class":278},[102,63810,59172],{"class":119},[102,63812,63813,63815,63817,63819,63821,63823,63825,63827,63829],{"class":104,"line":142},[102,63814,60009],{"class":119},[102,63816,59209],{"class":59165},[102,63818,387],{"class":112},[102,63820,260],{"class":119},[102,63822,59256],{"class":278},[102,63824,59236],{"class":112},[102,63826,260],{"class":119},[102,63828,59263],{"class":278},[102,63830,59172],{"class":119},[102,63832,63833,63835,63837,63839,63841],{"class":104,"line":148},[102,63834,60009],{"class":119},[102,63836,59272],{"class":59165},[102,63838,59275],{"class":119},[102,63840,59272],{"class":59165},[102,63842,59172],{"class":119},[102,63844,63845,63847,63849],{"class":104,"line":157},[102,63846,60009],{"class":119},[102,63848,8955],{"class":59165},[102,63850,59172],{"class":119},[102,63852,63853,63855],{"class":104,"line":163},[102,63854,15198],{"class":59165},[102,63856,1077],{"class":119},[102,63858,63859,63861,63863,63865],{"class":104,"line":175},[102,63860,62560],{"class":187},[102,63862,59302],{"class":119},[102,63864,8423],{"class":187},[102,63866,266],{"class":119},[102,63868,63869,63871,63873,63875],{"class":104,"line":181},[102,63870,62571],{"class":187},[102,63872,59302],{"class":119},[102,63874,8423],{"class":187},[102,63876,266],{"class":119},[102,63878,63879],{"class":104,"line":202},[102,63880,205],{"class":119},[102,63882,63883],{"class":104,"line":208},[102,63884,652],{"emptyLinePlaceholder":651},[102,63886,63887,63889],{"class":104,"line":214},[102,63888,62590],{"class":59165},[102,63890,1077],{"class":119},[102,63892,63893,63895,63897,63899],{"class":104,"line":225},[102,63894,62597],{"class":187},[102,63896,59302],{"class":119},[102,63898,62602],{"class":187},[102,63900,266],{"class":119},[102,63902,63903],{"class":104,"line":230},[102,63904,205],{"class":119},[102,63906,63907],{"class":104,"line":236},[102,63908,652],{"emptyLinePlaceholder":651},[102,63910,63911,63913],{"class":104,"line":242},[102,63912,62617],{"class":112},[102,63914,1077],{"class":119},[102,63916,63917,63919,63921,63923],{"class":104,"line":248},[102,63918,62624],{"class":187},[102,63920,59302],{"class":119},[102,63922,62629],{"class":187},[102,63924,266],{"class":119},[102,63926,63927,63929,63931,63933,63935],{"class":104,"line":254},[102,63928,62636],{"class":187},[102,63930,59302],{"class":119},[102,63932,62641],{"class":187},[102,63934,59357],{"class":108},[102,63936,266],{"class":119},[102,63938,63939,63941,63943,63945,63947],{"class":104,"line":269},[102,63940,62650],{"class":187},[102,63942,59302],{"class":119},[102,63944,10415],{"class":187},[102,63946,59357],{"class":108},[102,63948,266],{"class":119},[102,63950,63951,63953,63955,63957,63959,63961],{"class":104,"line":298},[102,63952,62571],{"class":187},[102,63954,59302],{"class":119},[102,63956,5569],{"class":187},[102,63958,59357],{"class":108},[102,63960,59421],{"class":187},[102,63962,266],{"class":119},[102,63964,63965],{"class":104,"line":502},[102,63966,205],{"class":119},[102,63968,63969],{"class":104,"line":507},[102,63970,652],{"emptyLinePlaceholder":651},[102,63972,63973,63975],{"class":104,"line":512},[102,63974,62685],{"class":112},[102,63976,1077],{"class":119},[102,63978,63979,63981,63983,63985],{"class":104,"line":521},[102,63980,62624],{"class":187},[102,63982,59302],{"class":119},[102,63984,62696],{"class":187},[102,63986,266],{"class":119},[102,63988,63989,63991,63993,63995],{"class":104,"line":526},[102,63990,62703],{"class":187},[102,63992,59302],{"class":119},[102,63994,8423],{"class":187},[102,63996,266],{"class":119},[102,63998,63999,64001,64003,64005],{"class":104,"line":532},[102,64000,62714],{"class":187},[102,64002,59302],{"class":119},[102,64004,8423],{"class":187},[102,64006,266],{"class":119},[102,64008,64009,64011,64013,64015,64017],{"class":104,"line":538},[102,64010,62636],{"class":187},[102,64012,59302],{"class":119},[102,64014,5569],{"class":187},[102,64016,9363],{"class":108},[102,64018,266],{"class":119},[102,64020,64021,64023,64025,64027,64029],{"class":104,"line":555},[102,64022,62650],{"class":187},[102,64024,59302],{"class":119},[102,64026,9602],{"class":187},[102,64028,9363],{"class":108},[102,64030,266],{"class":119},[102,64032,64033,64035,64037,64039],{"class":104,"line":570},[102,64034,62749],{"class":187},[102,64036,59302],{"class":119},[102,64038,62754],{"class":187},[102,64040,266],{"class":119},[102,64042,64043],{"class":104,"line":581},[102,64044,205],{"class":119},[102,64046,64047],{"class":104,"line":819},[102,64048,652],{"emptyLinePlaceholder":651},[102,64050,64051,64053,64055],{"class":104,"line":828},[102,64052,62685],{"class":112},[102,64054,5073],{"class":59165},[102,64056,1077],{"class":119},[102,64058,64059,64061,64063,64065],{"class":104,"line":837},[102,64060,62624],{"class":187},[102,64062,59302],{"class":119},[102,64064,62696],{"class":187},[102,64066,266],{"class":119},[102,64068,64069,64071,64073,64075,64077],{"class":104,"line":842},[102,64070,62787],{"class":187},[102,64072,59302],{"class":119},[102,64074,9923],{"class":187},[102,64076,59357],{"class":108},[102,64078,266],{"class":119},[102,64080,64081,64083,64085,64087,64089],{"class":104,"line":855},[102,64082,62703],{"class":187},[102,64084,59302],{"class":119},[102,64086,5016],{"class":187},[102,64088,59357],{"class":108},[102,64090,266],{"class":119},[102,64092,64093,64095,64097,64099,64101],{"class":104,"line":860},[102,64094,62812],{"class":187},[102,64096,59302],{"class":119},[102,64098,9354],{"class":187},[102,64100,59357],{"class":108},[102,64102,266],{"class":119},[102,64104,64105],{"class":104,"line":871},[102,64106,205],{"class":119},[102,64108,64109],{"class":104,"line":1359},[102,64110,652],{"emptyLinePlaceholder":651},[102,64112,64113,64115],{"class":104,"line":1368},[102,64114,62833],{"class":59165},[102,64116,1077],{"class":119},[102,64118,64119,64121,64123,64125],{"class":104,"line":1373},[102,64120,62624],{"class":187},[102,64122,59302],{"class":119},[102,64124,62696],{"class":187},[102,64126,266],{"class":119},[102,64128,64129,64131,64133,64135,64137],{"class":104,"line":1378},[102,64130,62812],{"class":187},[102,64132,59302],{"class":119},[102,64134,9805],{"class":187},[102,64136,59357],{"class":108},[102,64138,266],{"class":119},[102,64140,64141,64143,64145,64147,64149],{"class":104,"line":1384},[102,64142,62703],{"class":187},[102,64144,59302],{"class":119},[102,64146,5016],{"class":187},[102,64148,59357],{"class":108},[102,64150,266],{"class":119},[102,64152,64153,64155,64157,64159],{"class":104,"line":1398},[102,64154,62874],{"class":187},[102,64156,59302],{"class":119},[102,64158,59342],{"class":187},[102,64160,266],{"class":119},[102,64162,64163,64165,64167,64169],{"class":104,"line":1424},[102,64164,62885],{"class":187},[102,64166,59302],{"class":119},[102,64168,59533],{"class":187},[102,64170,266],{"class":119},[102,64172,64173,64175,64177,64179],{"class":104,"line":1429},[102,64174,62624],{"class":187},[102,64176,59302],{"class":119},[102,64178,62696],{"class":187},[102,64180,266],{"class":119},[102,64182,64183,64185,64187,64189,64191],{"class":104,"line":1435},[102,64184,62636],{"class":187},[102,64186,59302],{"class":119},[102,64188,12805],{"class":187},[102,64190,59357],{"class":108},[102,64192,266],{"class":119},[102,64194,64195,64197,64199,64201,64203],{"class":104,"line":1450},[102,64196,62650],{"class":187},[102,64198,59302],{"class":119},[102,64200,5016],{"class":187},[102,64202,59357],{"class":108},[102,64204,266],{"class":119},[102,64206,64207],{"class":104,"line":1473},[102,64208,205],{"class":119},[102,64210,64211],{"class":104,"line":1478},[102,64212,652],{"emptyLinePlaceholder":651},[102,64214,64215,64217,64219],{"class":104,"line":1484},[102,64216,62833],{"class":59165},[102,64218,62940],{"class":59165},[102,64220,1077],{"class":119},[102,64222,64223,64225,64227,64229,64231],{"class":104,"line":1499},[102,64224,62636],{"class":187},[102,64226,59302],{"class":119},[102,64228,5016],{"class":187},[102,64230,59357],{"class":108},[102,64232,266],{"class":119},[102,64234,64235,64237,64239,64241,64243],{"class":104,"line":1508},[102,64236,62650],{"class":187},[102,64238,59302],{"class":119},[102,64240,5016],{"class":187},[102,64242,59357],{"class":108},[102,64244,266],{"class":119},[102,64246,64247,64249,64251,64253,64255,64257,64259,64261,64263,64265,64267,64269],{"class":104,"line":1513},[102,64248,62749],{"class":187},[102,64250,59302],{"class":119},[102,64252,62975],{"class":187},[102,64254,380],{"class":119},[102,64256,8423],{"class":187},[102,64258,2571],{"class":119},[102,64260,8423],{"class":187},[102,64262,2571],{"class":119},[102,64264,8423],{"class":187},[102,64266,2571],{"class":119},[102,64268,62992],{"class":187},[102,64270,552],{"class":119},[102,64272,64273,64275,64277,64279,64281],{"class":104,"line":1524},[102,64274,62999],{"class":187},[102,64276,59302],{"class":119},[102,64278,263],{"class":187},[102,64280,59357],{"class":108},[102,64282,266],{"class":119},[102,64284,64285],{"class":104,"line":1529},[102,64286,205],{"class":119},[102,64288,64289],{"class":104,"line":1538},[102,64290,652],{"emptyLinePlaceholder":651},[102,64292,64293,64295],{"class":104,"line":2089},[102,64294,63020],{"class":112},[102,64296,1077],{"class":119},[102,64298,64299,64301,64303,64305],{"class":104,"line":2094},[102,64300,62749],{"class":187},[102,64302,59302],{"class":119},[102,64304,63031],{"class":187},[102,64306,266],{"class":119},[102,64308,64309],{"class":104,"line":2100},[102,64310,205],{"class":119},[102,64312,64313,64315,64317],{"class":104,"line":2106},[102,64314,60282],{"class":119},[102,64316,8955],{"class":59165},[102,64318,59172],{"class":119},[102,64320,64321,64323,64325],{"class":104,"line":2120},[102,64322,59650],{"class":119},[102,64324,59199],{"class":59165},[102,64326,59172],{"class":119},[102,64328,64329],{"class":104,"line":2128},[102,64330,652],{"emptyLinePlaceholder":651},[102,64332,64333,64335,64337],{"class":104,"line":2149},[102,64334,1208],{"class":119},[102,64336,59665],{"class":59165},[102,64338,59172],{"class":119},[102,64340,64341,64343,64345,64347,64349,64351],{"class":104,"line":2161},[102,64342,60009],{"class":119},[102,64344,59476],{"class":59165},[102,64346,61351],{"class":112},[102,64348,260],{"class":119},[102,64350,61356],{"class":278},[102,64352,59172],{"class":119},[102,64354,64355,64357,64359,64361,64363,64365],{"class":104,"line":2167},[102,64356,59206],{"class":119},[102,64358,59476],{"class":59165},[102,64360,61351],{"class":112},[102,64362,260],{"class":119},[102,64364,63092],{"class":278},[102,64366,59172],{"class":119},[102,64368,64369,64371,64373,64375,64377,64379,64381,64383,64385],{"class":104,"line":2190},[102,64370,63099],{"class":119},[102,64372,6750],{"class":59165},[102,64374,63104],{"class":112},[102,64376,260],{"class":119},[102,64378,63109],{"class":278},[102,64380,63112],{"class":112},[102,64382,260],{"class":119},[102,64384,16439],{"class":278},[102,64386,59172],{"class":119},[102,64388,64389,64391,64393],{"class":104,"line":2196},[102,64390,59641],{"class":119},[102,64392,59476],{"class":59165},[102,64394,59172],{"class":119},[102,64396,64397,64399,64401,64403,64405,64407],{"class":104,"line":2219},[102,64398,59206],{"class":119},[102,64400,59476],{"class":59165},[102,64402,61351],{"class":112},[102,64404,260],{"class":119},[102,64406,63139],{"class":278},[102,64408,59172],{"class":119},[102,64410,64411,64413,64415,64417,64419],{"class":104,"line":2233},[102,64412,63099],{"class":119},[102,64414,14],{"class":59165},[102,64416,63150],{"class":119},[102,64418,14],{"class":59165},[102,64420,59172],{"class":119},[102,64422,64423,64425,64427],{"class":104,"line":2253},[102,64424,63099],{"class":119},[102,64426,59],{"class":59165},[102,64428,59172],{"class":119},[102,64430,64431,64433,64435,64437,64439,64441,64443,64445],{"class":104,"line":2259},[102,64432,63167],{"class":119},[102,64434,62],{"class":59165},[102,64436,61351],{"class":112},[102,64438,260],{"class":119},[102,64440,63176],{"class":278},[102,64442,63179],{"class":119},[102,64444,62],{"class":59165},[102,64446,59172],{"class":119},[102,64448,64449,64451,64453,64455,64457],{"class":104,"line":2270},[102,64450,63167],{"class":119},[102,64452,62],{"class":59165},[102,64454,63179],{"class":119},[102,64456,62],{"class":59165},[102,64458,59172],{"class":119},[102,64460,64461,64463,64465,64467,64469],{"class":104,"line":2293},[102,64462,63167],{"class":119},[102,64464,62],{"class":59165},[102,64466,63179],{"class":119},[102,64468,62],{"class":59165},[102,64470,59172],{"class":119},[102,64472,64473,64475,64477,64479,64481],{"class":104,"line":2315},[102,64474,63167],{"class":119},[102,64476,62],{"class":59165},[102,64478,63179],{"class":119},[102,64480,62],{"class":59165},[102,64482,59172],{"class":119},[102,64484,64485,64487,64489,64491,64493],{"class":104,"line":2320},[102,64486,63167],{"class":119},[102,64488,62],{"class":59165},[102,64490,63179],{"class":119},[102,64492,62],{"class":59165},[102,64494,59172],{"class":119},[102,64496,64497,64499,64501,64503,64505],{"class":104,"line":2326},[102,64498,63167],{"class":119},[102,64500,62],{"class":59165},[102,64502,63179],{"class":119},[102,64504,62],{"class":59165},[102,64506,59172],{"class":119},[102,64508,64509,64511,64513,64515,64517],{"class":104,"line":2340},[102,64510,63167],{"class":119},[102,64512,62],{"class":59165},[102,64514,63179],{"class":119},[102,64516,62],{"class":59165},[102,64518,59172],{"class":119},[102,64520,64521,64523,64525,64527,64529],{"class":104,"line":2354},[102,64522,63167],{"class":119},[102,64524,62],{"class":59165},[102,64526,63179],{"class":119},[102,64528,62],{"class":59165},[102,64530,59172],{"class":119},[102,64532,64533,64535,64537],{"class":104,"line":2359},[102,64534,63272],{"class":119},[102,64536,59],{"class":59165},[102,64538,59172],{"class":119},[102,64540,64541,64543,64545],{"class":104,"line":2373},[102,64542,59641],{"class":119},[102,64544,59476],{"class":59165},[102,64546,59172],{"class":119},[102,64548,64549,64551,64553],{"class":104,"line":2378},[102,64550,60282],{"class":119},[102,64552,59476],{"class":59165},[102,64554,59172],{"class":119},[102,64556,64557,64559,64561],{"class":104,"line":2384},[102,64558,60009],{"class":119},[102,64560,59678],{"class":59165},[102,64562,59172],{"class":119},[102,64564,64565,64567,64570,64572],{"class":104,"line":2389},[102,64566,19961],{"class":108},[102,64568,64569],{"class":187}," sliderData",[102,64571,22296],{"class":108},[102,64573,63312],{"class":119},[102,64575,64576,64578,64580,64582,64584,64586,64588],{"class":104,"line":2403},[102,64577,63317],{"class":119},[102,64579,63320],{"class":278},[102,64581,63323],{"class":119},[102,64583,63326],{"class":278},[102,64585,63329],{"class":119},[102,64587,63332],{"class":278},[102,64589,63335],{"class":119},[102,64591,64592,64594,64596,64598,64600,64602,64604],{"class":104,"line":2408},[102,64593,63317],{"class":119},[102,64595,63342],{"class":278},[102,64597,63323],{"class":119},[102,64599,63347],{"class":278},[102,64601,63329],{"class":119},[102,64603,63352],{"class":278},[102,64605,63335],{"class":119},[102,64607,64608,64610,64612,64614,64616,64618,64620],{"class":104,"line":2413},[102,64609,63317],{"class":119},[102,64611,63361],{"class":278},[102,64613,63323],{"class":119},[102,64615,63366],{"class":278},[102,64617,63329],{"class":119},[102,64619,63371],{"class":278},[102,64621,63335],{"class":119},[102,64623,64624,64626,64628,64630,64632,64634,64636],{"class":104,"line":2427},[102,64625,63317],{"class":119},[102,64627,63380],{"class":278},[102,64629,63323],{"class":119},[102,64631,63385],{"class":278},[102,64633,63329],{"class":119},[102,64635,63390],{"class":278},[102,64637,63335],{"class":119},[102,64639,64640,64642,64644,64646,64648,64650,64652],{"class":104,"line":2440},[102,64641,63317],{"class":119},[102,64643,63399],{"class":278},[102,64645,63323],{"class":119},[102,64647,63404],{"class":278},[102,64649,63329],{"class":119},[102,64651,63409],{"class":278},[102,64653,63335],{"class":119},[102,64655,64656,64658,64660,64662,64664,64666,64668],{"class":104,"line":2445},[102,64657,63317],{"class":119},[102,64659,63418],{"class":278},[102,64661,63323],{"class":119},[102,64663,63423],{"class":278},[102,64665,63329],{"class":119},[102,64667,63428],{"class":278},[102,64669,63335],{"class":119},[102,64671,64672,64674,64676,64678,64680,64682,64684],{"class":104,"line":2458},[102,64673,63317],{"class":119},[102,64675,63437],{"class":278},[102,64677,63323],{"class":119},[102,64679,63442],{"class":278},[102,64681,63329],{"class":119},[102,64683,63447],{"class":278},[102,64685,63335],{"class":119},[102,64687,64688,64690,64692,64694,64696,64698,64700],{"class":104,"line":2463},[102,64689,63317],{"class":119},[102,64691,63456],{"class":278},[102,64693,63323],{"class":119},[102,64695,63461],{"class":278},[102,64697,63329],{"class":119},[102,64699,63466],{"class":278},[102,64701,63469],{"class":119},[102,64703,64704],{"class":104,"line":2468},[102,64705,60974],{"class":119},[102,64707,64708],{"class":104,"line":2473},[102,64709,64710],{"class":126},"    \u002F\u002F 1.获取元素\n",[102,64712,64713,64715,64717,64719,64721,64723,64725,64727],{"class":104,"line":2486},[102,64714,19961],{"class":108},[102,64716,63480],{"class":187},[102,64718,22296],{"class":108},[102,64720,62261],{"class":119},[102,64722,62264],{"class":112},[102,64724,380],{"class":119},[102,64726,63491],{"class":278},[102,64728,390],{"class":119},[102,64730,64731,64733,64735,64737,64739,64741,64743,64745],{"class":104,"line":2491},[102,64732,19961],{"class":108},[102,64734,5073],{"class":187},[102,64736,22296],{"class":108},[102,64738,62261],{"class":119},[102,64740,62264],{"class":112},[102,64742,380],{"class":119},[102,64744,63510],{"class":278},[102,64746,390],{"class":119},[102,64748,64749,64751,64753,64755],{"class":104,"line":40498},[102,64750,60084],{"class":108},[102,64752,18205],{"class":119},[102,64754,260],{"class":108},[102,64756,55198],{"class":187},[102,64758,64759],{"class":104,"line":40504},[102,64760,64761],{"class":126},"    \u002F\u002F 2.开启定时器\n",[102,64763,64764],{"class":104,"line":40510},[102,64765,64766],{"class":126},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[102,64768,64769,64772,64774,64776],{"class":104,"line":40516},[102,64770,64771],{"class":112},"    setInterval",[102,64773,380],{"class":119},[102,64775,62314],{"class":108},[102,64777,62317],{"class":119},[102,64779,64780,64782],{"class":104,"line":40522},[102,64781,62322],{"class":119},[102,64783,11522],{"class":108},[102,64785,64786,64788,64790,64792,64795,64797],{"class":104,"line":40533},[102,64787,62345],{"class":108},[102,64789,62348],{"class":119},[102,64791,10571],{"class":108},[102,64793,64794],{"class":119}," sliderData.",[102,64796,59833],{"class":187},[102,64798,1105],{"class":119},[102,64800,64801,64804,64806],{"class":104,"line":40539},[102,64802,64803],{"class":119},"        i ",[102,64805,260],{"class":108},[102,64807,55198],{"class":187},[102,64809,64810],{"class":104,"line":40559},[102,64811,60263],{"class":119},[102,64813,64814],{"class":104,"line":40565},[102,64815,64816],{"class":126},"      \u002F\u002F 更换图片路径\n",[102,64818,64819,64821,64823],{"class":104,"line":40576},[102,64820,63586],{"class":119},[102,64822,260],{"class":108},[102,64824,64825],{"class":119}," sliderData[i].url\n",[102,64827,64828],{"class":104,"line":40582},[102,64829,64830],{"class":126},"      \u002F\u002F 把文字写到p里面\n",[102,64832,64833,64835,64837],{"class":104,"line":40588},[102,64834,63596],{"class":119},[102,64836,260],{"class":108},[102,64838,64839],{"class":119}," sliderData[i].title\n",[102,64841,64842],{"class":104,"line":40594},[102,64843,64844],{"class":126},"      \u002F\u002F 小圆点\n",[102,64846,64847],{"class":104,"line":40600},[102,64848,64849],{"class":126},"      \u002F\u002F 先删除以前的active\n",[102,64851,64852],{"class":104,"line":40606},[102,64853,64854],{"class":126},"      \u002F\u002F 只让当前li添加active\n",[102,64856,64857,64859,64861,64863,64866,64869,64872,64874,64876],{"class":104,"line":40612},[102,64858,63636],{"class":119},[102,64860,62264],{"class":112},[102,64862,380],{"class":119},[102,64864,64865],{"class":278},"'.slider-footer .activate'",[102,64867,64868],{"class":119},").classList.",[102,64870,64871],{"class":112},"remove",[102,64873,380],{"class":119},[102,64875,63654],{"class":278},[102,64877,390],{"class":119},[102,64879,64880,64882,64884,64886,64889,64891,64893,64895,64898,64900,64902,64904,64906],{"class":104,"line":40618},[102,64881,63636],{"class":119},[102,64883,62264],{"class":112},[102,64885,380],{"class":119},[102,64887,64888],{"class":278},"`.slider-footer ul li:nth-child(${",[102,64890,9473],{"class":119},[102,64892,53431],{"class":108},[102,64894,32983],{"class":187},[102,64896,64897],{"class":278},"})`",[102,64899,64868],{"class":119},[102,64901,14139],{"class":112},[102,64903,380],{"class":119},[102,64905,63654],{"class":278},[102,64907,390],{"class":119},[102,64909,64910],{"class":104,"line":40638},[102,64911,652],{"emptyLinePlaceholder":651},[102,64913,64914,64916,64918],{"class":104,"line":40644},[102,64915,62400],{"class":119},[102,64917,15205],{"class":187},[102,64919,390],{"class":119},[102,64921,64922],{"class":104,"line":40660},[102,64923,652],{"emptyLinePlaceholder":651},[102,64925,64926,64928,64930],{"class":104,"line":40666},[102,64927,60282],{"class":119},[102,64929,59678],{"class":59165},[102,64931,59172],{"class":119},[102,64933,64934,64936,64938],{"class":104,"line":40680},[102,64935,59650],{"class":119},[102,64937,59665],{"class":59165},[102,64939,59172],{"class":119},[102,64941,64942],{"class":104,"line":40686},[102,64943,652],{"emptyLinePlaceholder":651},[102,64945,64946,64948,64950],{"class":104,"line":40701},[102,64947,59650],{"class":119},[102,64949,58500],{"class":59165},[102,64951,59172],{"class":119},[48,64953,64955],{"id":64954},"_317-重要知识点","3.1.7 重要知识点",[14,64957,64958,64959],{},"浏览器在渲染文本时， ",[18,64960,64961],{},"没有空格或换行符就没有“断行点”",[14,64963,64964],{},[6750,64965],{"alt":98,"src":64966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,64968,64969],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,64971,64972],{},[6750,64973],{"alt":98,"src":64974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,64976,64977],{},[6750,64978],{"alt":98,"src":64979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[43,64981,64983],{"id":64982},"_32-dom事件基础","3.2 DOM事件基础",[48,64985,64987],{"id":64986},"_321-事件监听","3.2.1 事件监听",[14,64989,64990],{},[6750,64991],{"alt":98,"src":64992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,64994,64995],{},"事件监听有响应的发生",[14,64997,64998],{},[6750,64999],{"alt":98,"src":65000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,65002,65003],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,65005,65006],{},"对于有名函数,要执行的函数名后边不要加()",[48,65008,65010],{"id":65009},"_322-随机点名案例","3.2.2 随机点名案例",[93,65012,65014],{"className":58498,"code":65013,"language":58500,"meta":98,"style":98},"\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",[83,65015,65016,65026,65040,65044,65052,65066,65086,65098,65106,65112,65122,65132,65136,65140,65147,65158,65162,65166,65172,65184,65198,65208,65220,65233,65237,65241,65248,65252,65265,65277,65289,65293,65297,65301,65308,65318,65322,65326,65335,65347,65359,65374,65378,65386,65394,65398,65406,65419,65433,65446,65466,65474,65489,65509,65529,65537,65541,65549,65554,65590,65610,65615,65634,65639,65650,65655,65666,65671,65690,65705,65710,65736,65746,65755,65760,65776,65781,65786,65791,65806,65810,65814,65819,65838,65855,65863,65868,65883,65887,65891,65899,65907,65911],{"__ignoreMap":98},[102,65017,65018,65020,65022,65024],{"class":104,"line":105},[102,65019,59162],{"class":119},[102,65021,59166],{"class":59165},[102,65023,59169],{"class":112},[102,65025,59172],{"class":119},[102,65027,65028,65030,65032,65034,65036,65038],{"class":104,"line":116},[102,65029,1208],{"class":119},[102,65031,58500],{"class":59165},[102,65033,59181],{"class":112},[102,65035,260],{"class":119},[102,65037,59186],{"class":278},[102,65039,59172],{"class":119},[102,65041,65042],{"class":104,"line":123},[102,65043,652],{"emptyLinePlaceholder":651},[102,65045,65046,65048,65050],{"class":104,"line":130},[102,65047,1208],{"class":119},[102,65049,59199],{"class":59165},[102,65051,59172],{"class":119},[102,65053,65054,65056,65058,65060,65062,65064],{"class":104,"line":136},[102,65055,60009],{"class":119},[102,65057,59209],{"class":59165},[102,65059,59212],{"class":112},[102,65061,260],{"class":119},[102,65063,59217],{"class":278},[102,65065,59172],{"class":119},[102,65067,65068,65070,65072,65074,65076,65078,65080,65082,65084],{"class":104,"line":142},[102,65069,60009],{"class":119},[102,65071,59209],{"class":59165},[102,65073,387],{"class":112},[102,65075,260],{"class":119},[102,65077,59256],{"class":278},[102,65079,59236],{"class":112},[102,65081,260],{"class":119},[102,65083,59263],{"class":278},[102,65085,59172],{"class":119},[102,65087,65088,65090,65092,65094,65096],{"class":104,"line":148},[102,65089,60009],{"class":119},[102,65091,59272],{"class":59165},[102,65093,59275],{"class":119},[102,65095,59272],{"class":59165},[102,65097,59172],{"class":119},[102,65099,65100,65102,65104],{"class":104,"line":157},[102,65101,60009],{"class":119},[102,65103,8955],{"class":59165},[102,65105,59172],{"class":119},[102,65107,65108,65110],{"class":104,"line":163},[102,65109,15198],{"class":59165},[102,65111,1077],{"class":119},[102,65113,65114,65116,65118,65120],{"class":104,"line":175},[102,65115,62571],{"class":187},[102,65117,59302],{"class":119},[102,65119,8423],{"class":187},[102,65121,266],{"class":119},[102,65123,65124,65126,65128,65130],{"class":104,"line":181},[102,65125,62560],{"class":187},[102,65127,59302],{"class":119},[102,65129,8423],{"class":187},[102,65131,266],{"class":119},[102,65133,65134],{"class":104,"line":202},[102,65135,205],{"class":119},[102,65137,65138],{"class":104,"line":208},[102,65139,652],{"emptyLinePlaceholder":651},[102,65141,65142,65145],{"class":104,"line":214},[102,65143,65144],{"class":59165},"    h2",[102,65146,1077],{"class":119},[102,65148,65149,65152,65154,65156],{"class":104,"line":225},[102,65150,65151],{"class":187},"      text-align",[102,65153,59302],{"class":119},[102,65155,59457],{"class":187},[102,65157,266],{"class":119},[102,65159,65160],{"class":104,"line":230},[102,65161,205],{"class":119},[102,65163,65164],{"class":104,"line":236},[102,65165,652],{"emptyLinePlaceholder":651},[102,65167,65168,65170],{"class":104,"line":242},[102,65169,62617],{"class":112},[102,65171,1077],{"class":119},[102,65173,65174,65176,65178,65180,65182],{"class":104,"line":248},[102,65175,62636],{"class":187},[102,65177,59302],{"class":119},[102,65179,10415],{"class":187},[102,65181,59357],{"class":108},[102,65183,266],{"class":119},[102,65185,65186,65188,65190,65192,65194,65196],{"class":104,"line":254},[102,65187,62571],{"class":187},[102,65189,59302],{"class":119},[102,65191,1445],{"class":187},[102,65193,59357],{"class":108},[102,65195,59421],{"class":187},[102,65197,266],{"class":119},[102,65199,65200,65202,65204,65206],{"class":104,"line":269},[102,65201,62874],{"class":187},[102,65203,59302],{"class":119},[102,65205,59342],{"class":187},[102,65207,266],{"class":119},[102,65209,65210,65212,65214,65216,65218],{"class":104,"line":298},[102,65211,62787],{"class":187},[102,65213,59302],{"class":119},[102,65215,9847],{"class":187},[102,65217,59357],{"class":108},[102,65219,266],{"class":119},[102,65221,65222,65225,65227,65229,65231],{"class":104,"line":502},[102,65223,65224],{"class":187},"      line-height",[102,65226,59302],{"class":119},[102,65228,9434],{"class":187},[102,65230,59357],{"class":108},[102,65232,266],{"class":119},[102,65234,65235],{"class":104,"line":507},[102,65236,205],{"class":119},[102,65238,65239],{"class":104,"line":512},[102,65240,652],{"emptyLinePlaceholder":651},[102,65242,65243,65246],{"class":104,"line":521},[102,65244,65245],{"class":112},"    .qs",[102,65247,1077],{"class":119},[102,65249,65250],{"class":104,"line":526},[102,65251,652],{"emptyLinePlaceholder":651},[102,65253,65254,65256,65258,65261,65263],{"class":104,"line":532},[102,65255,62636],{"class":187},[102,65257,59302],{"class":119},[102,65259,65260],{"class":187},"450",[102,65262,59357],{"class":108},[102,65264,266],{"class":119},[102,65266,65267,65269,65271,65273,65275],{"class":104,"line":538},[102,65268,62650],{"class":187},[102,65270,59302],{"class":119},[102,65272,9434],{"class":187},[102,65274,59357],{"class":108},[102,65276,266],{"class":119},[102,65278,65279,65282,65284,65287],{"class":104,"line":555},[102,65280,65281],{"class":187},"      color",[102,65283,59302],{"class":119},[102,65285,65286],{"class":187},"red",[102,65288,266],{"class":119},[102,65290,65291],{"class":104,"line":570},[102,65292,652],{"emptyLinePlaceholder":651},[102,65294,65295],{"class":104,"line":581},[102,65296,205],{"class":119},[102,65298,65299],{"class":104,"line":819},[102,65300,652],{"emptyLinePlaceholder":651},[102,65302,65303,65306],{"class":104,"line":828},[102,65304,65305],{"class":112},"    .btns",[102,65307,1077],{"class":119},[102,65309,65310,65312,65314,65316],{"class":104,"line":837},[102,65311,65151],{"class":187},[102,65313,59302],{"class":119},[102,65315,59457],{"class":187},[102,65317,266],{"class":119},[102,65319,65320],{"class":104,"line":842},[102,65321,205],{"class":119},[102,65323,65324],{"class":104,"line":855},[102,65325,652],{"emptyLinePlaceholder":651},[102,65327,65328,65330,65333],{"class":104,"line":860},[102,65329,65305],{"class":112},[102,65331,65332],{"class":59165}," button",[102,65334,1077],{"class":119},[102,65336,65337,65339,65341,65343,65345],{"class":104,"line":871},[102,65338,62636],{"class":187},[102,65340,59302],{"class":119},[102,65342,9840],{"class":187},[102,65344,59357],{"class":108},[102,65346,266],{"class":119},[102,65348,65349,65351,65353,65355,65357],{"class":104,"line":1359},[102,65350,62650],{"class":187},[102,65352,59302],{"class":119},[102,65354,9310],{"class":187},[102,65356,59357],{"class":108},[102,65358,266],{"class":119},[102,65360,65361,65363,65365,65367,65370,65372],{"class":104,"line":1368},[102,65362,62571],{"class":187},[102,65364,59302],{"class":119},[102,65366,8423],{"class":187},[102,65368,65369],{"class":187}," 50",[102,65371,59357],{"class":108},[102,65373,266],{"class":119},[102,65375,65376],{"class":104,"line":1373},[102,65377,205],{"class":119},[102,65379,65380,65382,65384],{"class":104,"line":1378},[102,65381,60282],{"class":119},[102,65383,8955],{"class":59165},[102,65385,59172],{"class":119},[102,65387,65388,65390,65392],{"class":104,"line":1384},[102,65389,59650],{"class":119},[102,65391,59199],{"class":59165},[102,65393,59172],{"class":119},[102,65395,65396],{"class":104,"line":1398},[102,65397,652],{"emptyLinePlaceholder":651},[102,65399,65400,65402,65404],{"class":104,"line":1424},[102,65401,1208],{"class":119},[102,65403,59665],{"class":59165},[102,65405,59172],{"class":119},[102,65407,65408,65410,65412,65415,65417],{"class":104,"line":1429},[102,65409,60009],{"class":119},[102,65411,43],{"class":59165},[102,65413,65414],{"class":119},">随机点名\u003C\u002F",[102,65416,43],{"class":59165},[102,65418,59172],{"class":119},[102,65420,65421,65423,65425,65427,65429,65431],{"class":104,"line":1435},[102,65422,60009],{"class":119},[102,65424,59476],{"class":59165},[102,65426,61351],{"class":112},[102,65428,260],{"class":119},[102,65430,61356],{"class":278},[102,65432,59172],{"class":119},[102,65434,65435,65437,65439,65442,65444],{"class":104,"line":1450},[102,65436,59206],{"class":119},[102,65438,102],{"class":59165},[102,65440,65441],{"class":119},">名字是：\u003C\u002F",[102,65443,102],{"class":59165},[102,65445,59172],{"class":119},[102,65447,65448,65450,65452,65454,65456,65459,65462,65464],{"class":104,"line":1473},[102,65449,59206],{"class":119},[102,65451,59476],{"class":59165},[102,65453,61351],{"class":112},[102,65455,260],{"class":119},[102,65457,65458],{"class":278},"\"qs\"",[102,65460,65461],{"class":119},">这里显示姓名\u003C\u002F",[102,65463,59476],{"class":59165},[102,65465,59172],{"class":119},[102,65467,65468,65470,65472],{"class":104,"line":1478},[102,65469,60282],{"class":119},[102,65471,59476],{"class":59165},[102,65473,59172],{"class":119},[102,65475,65476,65478,65480,65482,65484,65487],{"class":104,"line":1484},[102,65477,60009],{"class":119},[102,65479,59476],{"class":59165},[102,65481,61351],{"class":112},[102,65483,260],{"class":119},[102,65485,65486],{"class":278},"\"btns\"",[102,65488,59172],{"class":119},[102,65490,65491,65493,65495,65497,65499,65502,65505,65507],{"class":104,"line":1499},[102,65492,59206],{"class":119},[102,65494,61752],{"class":59165},[102,65496,61351],{"class":112},[102,65498,260],{"class":119},[102,65500,65501],{"class":278},"\"start\"",[102,65503,65504],{"class":119},">开始\u003C\u002F",[102,65506,61752],{"class":59165},[102,65508,59172],{"class":119},[102,65510,65511,65513,65515,65517,65519,65522,65525,65527],{"class":104,"line":1508},[102,65512,59206],{"class":119},[102,65514,61752],{"class":59165},[102,65516,61351],{"class":112},[102,65518,260],{"class":119},[102,65520,65521],{"class":278},"\"end\"",[102,65523,65524],{"class":119},">结束\u003C\u002F",[102,65526,61752],{"class":59165},[102,65528,59172],{"class":119},[102,65530,65531,65533,65535],{"class":104,"line":1513},[102,65532,60282],{"class":119},[102,65534,59476],{"class":59165},[102,65536,59172],{"class":119},[102,65538,65539],{"class":104,"line":1524},[102,65540,652],{"emptyLinePlaceholder":651},[102,65542,65543,65545,65547],{"class":104,"line":1529},[102,65544,60009],{"class":119},[102,65546,59678],{"class":59165},[102,65548,59172],{"class":119},[102,65550,65551],{"class":104,"line":1538},[102,65552,65553],{"class":126},"    \u002F\u002F 数据数组\n",[102,65555,65556,65558,65561,65563,65565,65568,65570,65573,65575,65578,65580,65583,65585,65588],{"class":104,"line":2089},[102,65557,19961],{"class":108},[102,65559,65560],{"class":187}," arr",[102,65562,22296],{"class":108},[102,65564,60091],{"class":119},[102,65566,65567],{"class":278},"'马超'",[102,65569,2571],{"class":119},[102,65571,65572],{"class":278},"'黄忠'",[102,65574,2571],{"class":119},[102,65576,65577],{"class":278},"'赵云'",[102,65579,2571],{"class":119},[102,65581,65582],{"class":278},"'关羽'",[102,65584,2571],{"class":119},[102,65586,65587],{"class":278},"'张飞'",[102,65589,41111],{"class":119},[102,65591,65592,65594,65597,65599,65601,65603,65605,65608],{"class":104,"line":2094},[102,65593,19961],{"class":108},[102,65595,65596],{"class":187}," qs",[102,65598,22296],{"class":108},[102,65600,62261],{"class":119},[102,65602,62264],{"class":112},[102,65604,380],{"class":119},[102,65606,65607],{"class":278},"'.qs'",[102,65609,390],{"class":119},[102,65611,65612],{"class":104,"line":2100},[102,65613,65614],{"class":126},"    \u002F\u002F 1.业务1.开始按钮模块\n",[102,65616,65617,65619,65621,65623,65625,65627,65629,65632],{"class":104,"line":2106},[102,65618,19961],{"class":108},[102,65620,12994],{"class":187},[102,65622,22296],{"class":108},[102,65624,62261],{"class":119},[102,65626,62264],{"class":112},[102,65628,380],{"class":119},[102,65630,65631],{"class":278},"'.start'",[102,65633,390],{"class":119},[102,65635,65636],{"class":104,"line":2120},[102,65637,65638],{"class":126},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[102,65640,65641,65643,65646,65648],{"class":104,"line":2128},[102,65642,60084],{"class":108},[102,65644,65645],{"class":119}," timerId ",[102,65647,260],{"class":108},[102,65649,55198],{"class":187},[102,65651,65652],{"class":104,"line":2149},[102,65653,65654],{"class":126},"    \u002F\u002F 随机号要全局变量\n",[102,65656,65657,65659,65662,65664],{"class":104,"line":2161},[102,65658,60084],{"class":108},[102,65660,65661],{"class":119}," random ",[102,65663,260],{"class":108},[102,65665,55198],{"class":187},[102,65667,65668],{"class":104,"line":2167},[102,65669,65670],{"class":126},"    \u002F\u002F 1.1 添加点击事件\n",[102,65672,65673,65676,65679,65681,65684,65686,65688],{"class":104,"line":2190},[102,65674,65675],{"class":119},"    start.",[102,65677,65678],{"class":112},"addEventListener",[102,65680,380],{"class":119},[102,65682,65683],{"class":278},"'click'",[102,65685,2571],{"class":119},[102,65687,62314],{"class":108},[102,65689,62317],{"class":119},[102,65691,65692,65695,65697,65699,65701,65703],{"class":104,"line":2196},[102,65693,65694],{"class":119},"      timerId ",[102,65696,260],{"class":108},[102,65698,62309],{"class":112},[102,65700,380],{"class":119},[102,65702,62314],{"class":108},[102,65704,62317],{"class":119},[102,65706,65707],{"class":104,"line":2219},[102,65708,65709],{"class":126},"        \u002F\u002F 随机数\n",[102,65711,65712,65715,65717,65720,65723,65726,65728,65730,65732,65734],{"class":104,"line":2233},[102,65713,65714],{"class":119},"        random ",[102,65716,260],{"class":108},[102,65718,65719],{"class":112}," parseInt",[102,65721,65722],{"class":119},"(Math.",[102,65724,65725],{"class":112},"random",[102,65727,1417],{"class":119},[102,65729,191],{"class":108},[102,65731,59830],{"class":119},[102,65733,59833],{"class":187},[102,65735,390],{"class":119},[102,65737,65738,65741,65743],{"class":104,"line":2253},[102,65739,65740],{"class":119},"        qs.innerHTML ",[102,65742,260],{"class":108},[102,65744,65745],{"class":119}," arr[random]\n",[102,65747,65748,65751,65753],{"class":104,"line":2259},[102,65749,65750],{"class":119},"      }, ",[102,65752,9310],{"class":187},[102,65754,390],{"class":119},[102,65756,65757],{"class":104,"line":2270},[102,65758,65759],{"class":126},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[102,65761,65762,65764,65767,65769,65772,65774],{"class":104,"line":2293},[102,65763,62345],{"class":108},[102,65765,65766],{"class":119}," (arr.",[102,65768,59833],{"class":187},[102,65770,65771],{"class":108}," ===",[102,65773,32983],{"class":187},[102,65775,1105],{"class":119},[102,65777,65778],{"class":104,"line":2315},[102,65779,65780],{"class":126},"        \u002F\u002F start.disabled = true\n",[102,65782,65783],{"class":104,"line":2320},[102,65784,65785],{"class":126},"        \u002F\u002F end.disabled = true\n",[102,65787,65788],{"class":104,"line":2326},[102,65789,65790],{"class":126},"        \u002F\u002F 可以合起来写\n",[102,65792,65793,65796,65798,65801,65803],{"class":104,"line":2340},[102,65794,65795],{"class":119},"        start.disabled ",[102,65797,260],{"class":108},[102,65799,65800],{"class":119}," end.disabled ",[102,65802,260],{"class":108},[102,65804,65805],{"class":187}," true\n",[102,65807,65808],{"class":104,"line":2354},[102,65809,60263],{"class":119},[102,65811,65812],{"class":104,"line":2359},[102,65813,41326],{"class":119},[102,65815,65816],{"class":104,"line":2373},[102,65817,65818],{"class":126},"    \u002F\u002F 1.2 关闭按钮模块\n",[102,65820,65821,65823,65825,65827,65829,65831,65833,65836],{"class":104,"line":2378},[102,65822,19961],{"class":108},[102,65824,13010],{"class":187},[102,65826,22296],{"class":108},[102,65828,62261],{"class":119},[102,65830,62264],{"class":112},[102,65832,380],{"class":119},[102,65834,65835],{"class":278},"'.end'",[102,65837,390],{"class":119},[102,65839,65840,65843,65845,65847,65849,65851,65853],{"class":104,"line":2384},[102,65841,65842],{"class":119},"    end.",[102,65844,65678],{"class":112},[102,65846,380],{"class":119},[102,65848,65683],{"class":278},[102,65850,2571],{"class":119},[102,65852,62314],{"class":108},[102,65854,62317],{"class":119},[102,65856,65857,65860],{"class":104,"line":2389},[102,65858,65859],{"class":112},"      clearInterval",[102,65861,65862],{"class":119},"(timerId)\n",[102,65864,65865],{"class":104,"line":2403},[102,65866,65867],{"class":126},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[102,65869,65870,65873,65876,65879,65881],{"class":104,"line":2408},[102,65871,65872],{"class":119},"      arr.",[102,65874,65875],{"class":112},"splice",[102,65877,65878],{"class":119},"(random, ",[102,65880,7039],{"class":187},[102,65882,390],{"class":119},[102,65884,65885],{"class":104,"line":2413},[102,65886,41326],{"class":119},[102,65888,65889],{"class":104,"line":2427},[102,65890,652],{"emptyLinePlaceholder":651},[102,65892,65893,65895,65897],{"class":104,"line":2440},[102,65894,60282],{"class":119},[102,65896,59678],{"class":59165},[102,65898,59172],{"class":119},[102,65900,65901,65903,65905],{"class":104,"line":2445},[102,65902,59650],{"class":119},[102,65904,59665],{"class":59165},[102,65906,59172],{"class":119},[102,65908,65909],{"class":104,"line":2458},[102,65910,652],{"emptyLinePlaceholder":651},[102,65912,65913,65915,65917],{"class":104,"line":2463},[102,65914,59650],{"class":119},[102,65916,58500],{"class":59165},[102,65918,59172],{"class":119},[14,65920,65921],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[48,65923,65925],{"id":65924},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[93,65927,65929],{"className":58498,"code":65928,"language":58500,"meta":98,"style":98},"\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",[83,65930,65931,65941,65955,65959,65967,65981,66001,66013,66021,66025,66033,66045,66053,66072,66089,66105,66115,66119,66127,66135,66139],{"__ignoreMap":98},[102,65932,65933,65935,65937,65939],{"class":104,"line":105},[102,65934,59162],{"class":119},[102,65936,59166],{"class":59165},[102,65938,59169],{"class":112},[102,65940,59172],{"class":119},[102,65942,65943,65945,65947,65949,65951,65953],{"class":104,"line":116},[102,65944,1208],{"class":119},[102,65946,58500],{"class":59165},[102,65948,59181],{"class":112},[102,65950,260],{"class":119},[102,65952,59186],{"class":278},[102,65954,59172],{"class":119},[102,65956,65957],{"class":104,"line":123},[102,65958,652],{"emptyLinePlaceholder":651},[102,65960,65961,65963,65965],{"class":104,"line":130},[102,65962,1208],{"class":119},[102,65964,59199],{"class":59165},[102,65966,59172],{"class":119},[102,65968,65969,65971,65973,65975,65977,65979],{"class":104,"line":136},[102,65970,60009],{"class":119},[102,65972,59209],{"class":59165},[102,65974,59212],{"class":112},[102,65976,260],{"class":119},[102,65978,59217],{"class":278},[102,65980,59172],{"class":119},[102,65982,65983,65985,65987,65989,65991,65993,65995,65997,65999],{"class":104,"line":142},[102,65984,60009],{"class":119},[102,65986,59209],{"class":59165},[102,65988,387],{"class":112},[102,65990,260],{"class":119},[102,65992,59256],{"class":278},[102,65994,59236],{"class":112},[102,65996,260],{"class":119},[102,65998,59263],{"class":278},[102,66000,59172],{"class":119},[102,66002,66003,66005,66007,66009,66011],{"class":104,"line":148},[102,66004,60009],{"class":119},[102,66006,59272],{"class":59165},[102,66008,59275],{"class":119},[102,66010,59272],{"class":59165},[102,66012,59172],{"class":119},[102,66014,66015,66017,66019],{"class":104,"line":157},[102,66016,59650],{"class":119},[102,66018,59199],{"class":59165},[102,66020,59172],{"class":119},[102,66022,66023],{"class":104,"line":163},[102,66024,652],{"emptyLinePlaceholder":651},[102,66026,66027,66029,66031],{"class":104,"line":175},[102,66028,1208],{"class":119},[102,66030,59665],{"class":59165},[102,66032,59172],{"class":119},[102,66034,66035,66037,66039,66041,66043],{"class":104,"line":181},[102,66036,60009],{"class":119},[102,66038,61752],{"class":59165},[102,66040,61758],{"class":119},[102,66042,61752],{"class":59165},[102,66044,59172],{"class":119},[102,66046,66047,66049,66051],{"class":104,"line":202},[102,66048,60009],{"class":119},[102,66050,59678],{"class":59165},[102,66052,59172],{"class":119},[102,66054,66055,66057,66059,66061,66063,66065,66067,66070],{"class":104,"line":208},[102,66056,19961],{"class":108},[102,66058,62256],{"class":187},[102,66060,22296],{"class":108},[102,66062,62261],{"class":119},[102,66064,62264],{"class":112},[102,66066,380],{"class":119},[102,66068,66069],{"class":278},"'button'",[102,66071,390],{"class":119},[102,66073,66074,66077,66079,66081,66083,66085,66087],{"class":104,"line":214},[102,66075,66076],{"class":119},"    btn.",[102,66078,65678],{"class":112},[102,66080,380],{"class":119},[102,66082,65683],{"class":278},[102,66084,2571],{"class":119},[102,66086,62314],{"class":108},[102,66088,62317],{"class":119},[102,66090,66091,66094,66096,66098,66101,66103],{"class":104,"line":225},[102,66092,66093],{"class":108},"      const",[102,66095,11078],{"class":187},[102,66097,22296],{"class":108},[102,66099,66100],{"class":119}," Math.",[102,66102,65725],{"class":112},[102,66104,172],{"class":119},[102,66106,66107,66110,66113],{"class":104,"line":230},[102,66108,66109],{"class":119},"      console.",[102,66111,66112],{"class":112},"log",[102,66114,9060],{"class":119},[102,66116,66117],{"class":104,"line":236},[102,66118,41326],{"class":119},[102,66120,66121,66123,66125],{"class":104,"line":242},[102,66122,60282],{"class":119},[102,66124,59678],{"class":59165},[102,66126,59172],{"class":119},[102,66128,66129,66131,66133],{"class":104,"line":248},[102,66130,59650],{"class":119},[102,66132,59665],{"class":59165},[102,66134,59172],{"class":119},[102,66136,66137],{"class":104,"line":254},[102,66138,652],{"emptyLinePlaceholder":651},[102,66140,66141,66143,66145],{"class":104,"line":269},[102,66142,59650],{"class":119},[102,66144,58500],{"class":59165},[102,66146,59172],{"class":119},[14,66148,66149],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,66151,66152],{},"常量不可以重新赋值",[14,66154,66155],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[93,66157,66159],{"className":58498,"code":66158,"language":58500,"meta":98,"style":98},"\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",[83,66160,66161,66171,66185,66189,66197,66211,66231,66243,66251,66255,66263,66275,66283,66294,66312,66328,66342,66350,66354,66362,66370,66374],{"__ignoreMap":98},[102,66162,66163,66165,66167,66169],{"class":104,"line":105},[102,66164,59162],{"class":119},[102,66166,59166],{"class":59165},[102,66168,59169],{"class":112},[102,66170,59172],{"class":119},[102,66172,66173,66175,66177,66179,66181,66183],{"class":104,"line":116},[102,66174,1208],{"class":119},[102,66176,58500],{"class":59165},[102,66178,59181],{"class":112},[102,66180,260],{"class":119},[102,66182,59186],{"class":278},[102,66184,59172],{"class":119},[102,66186,66187],{"class":104,"line":123},[102,66188,652],{"emptyLinePlaceholder":651},[102,66190,66191,66193,66195],{"class":104,"line":130},[102,66192,1208],{"class":119},[102,66194,59199],{"class":59165},[102,66196,59172],{"class":119},[102,66198,66199,66201,66203,66205,66207,66209],{"class":104,"line":136},[102,66200,60009],{"class":119},[102,66202,59209],{"class":59165},[102,66204,59212],{"class":112},[102,66206,260],{"class":119},[102,66208,59217],{"class":278},[102,66210,59172],{"class":119},[102,66212,66213,66215,66217,66219,66221,66223,66225,66227,66229],{"class":104,"line":142},[102,66214,60009],{"class":119},[102,66216,59209],{"class":59165},[102,66218,387],{"class":112},[102,66220,260],{"class":119},[102,66222,59256],{"class":278},[102,66224,59236],{"class":112},[102,66226,260],{"class":119},[102,66228,59263],{"class":278},[102,66230,59172],{"class":119},[102,66232,66233,66235,66237,66239,66241],{"class":104,"line":148},[102,66234,60009],{"class":119},[102,66236,59272],{"class":59165},[102,66238,59275],{"class":119},[102,66240,59272],{"class":59165},[102,66242,59172],{"class":119},[102,66244,66245,66247,66249],{"class":104,"line":157},[102,66246,59650],{"class":119},[102,66248,59199],{"class":59165},[102,66250,59172],{"class":119},[102,66252,66253],{"class":104,"line":163},[102,66254,652],{"emptyLinePlaceholder":651},[102,66256,66257,66259,66261],{"class":104,"line":175},[102,66258,1208],{"class":119},[102,66260,59665],{"class":59165},[102,66262,59172],{"class":119},[102,66264,66265,66267,66269,66271,66273],{"class":104,"line":181},[102,66266,60009],{"class":119},[102,66268,61752],{"class":59165},[102,66270,61758],{"class":119},[102,66272,61752],{"class":59165},[102,66274,59172],{"class":119},[102,66276,66277,66279,66281],{"class":104,"line":202},[102,66278,60009],{"class":119},[102,66280,59678],{"class":59165},[102,66282,59172],{"class":119},[102,66284,66285,66287,66289,66291],{"class":104,"line":208},[102,66286,19961],{"class":108},[102,66288,11078],{"class":187},[102,66290,22296],{"class":108},[102,66292,66293],{"class":187}," 10\n",[102,66295,66296,66298,66300,66302,66304,66306,66308,66310],{"class":104,"line":214},[102,66297,19961],{"class":108},[102,66299,62256],{"class":187},[102,66301,22296],{"class":108},[102,66303,62261],{"class":119},[102,66305,62264],{"class":112},[102,66307,380],{"class":119},[102,66309,66069],{"class":278},[102,66311,390],{"class":119},[102,66313,66314,66316,66318,66320,66322,66324,66326],{"class":104,"line":225},[102,66315,66076],{"class":119},[102,66317,65678],{"class":112},[102,66319,380],{"class":119},[102,66321,65683],{"class":278},[102,66323,2571],{"class":119},[102,66325,62314],{"class":108},[102,66327,62317],{"class":119},[102,66329,66330,66332,66334,66336,66338,66340],{"class":104,"line":230},[102,66331,66093],{"class":108},[102,66333,11078],{"class":187},[102,66335,22296],{"class":108},[102,66337,66100],{"class":119},[102,66339,65725],{"class":112},[102,66341,172],{"class":119},[102,66343,66344,66346,66348],{"class":104,"line":236},[102,66345,66109],{"class":119},[102,66347,66112],{"class":112},[102,66349,9060],{"class":119},[102,66351,66352],{"class":104,"line":242},[102,66353,41326],{"class":119},[102,66355,66356,66358,66360],{"class":104,"line":248},[102,66357,60282],{"class":119},[102,66359,59678],{"class":59165},[102,66361,59172],{"class":119},[102,66363,66364,66366,66368],{"class":104,"line":254},[102,66365,59650],{"class":119},[102,66367,59665],{"class":59165},[102,66369,59172],{"class":119},[102,66371,66372],{"class":104,"line":269},[102,66373,652],{"emptyLinePlaceholder":651},[102,66375,66376,66378,66380],{"class":104,"line":298},[102,66377,59650],{"class":119},[102,66379,58500],{"class":59165},[102,66381,59172],{"class":119},[14,66383,66384],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[93,66386,66388],{"className":58498,"code":66387,"language":58500,"meta":98,"style":98},"\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",[83,66389,66390,66400,66414,66418,66426,66440,66460,66472,66480,66484,66492,66504,66512,66522,66540,66556,66569,66577,66581,66589,66597,66601],{"__ignoreMap":98},[102,66391,66392,66394,66396,66398],{"class":104,"line":105},[102,66393,59162],{"class":119},[102,66395,59166],{"class":59165},[102,66397,59169],{"class":112},[102,66399,59172],{"class":119},[102,66401,66402,66404,66406,66408,66410,66412],{"class":104,"line":116},[102,66403,1208],{"class":119},[102,66405,58500],{"class":59165},[102,66407,59181],{"class":112},[102,66409,260],{"class":119},[102,66411,59186],{"class":278},[102,66413,59172],{"class":119},[102,66415,66416],{"class":104,"line":123},[102,66417,652],{"emptyLinePlaceholder":651},[102,66419,66420,66422,66424],{"class":104,"line":130},[102,66421,1208],{"class":119},[102,66423,59199],{"class":59165},[102,66425,59172],{"class":119},[102,66427,66428,66430,66432,66434,66436,66438],{"class":104,"line":136},[102,66429,60009],{"class":119},[102,66431,59209],{"class":59165},[102,66433,59212],{"class":112},[102,66435,260],{"class":119},[102,66437,59217],{"class":278},[102,66439,59172],{"class":119},[102,66441,66442,66444,66446,66448,66450,66452,66454,66456,66458],{"class":104,"line":142},[102,66443,60009],{"class":119},[102,66445,59209],{"class":59165},[102,66447,387],{"class":112},[102,66449,260],{"class":119},[102,66451,59256],{"class":278},[102,66453,59236],{"class":112},[102,66455,260],{"class":119},[102,66457,59263],{"class":278},[102,66459,59172],{"class":119},[102,66461,66462,66464,66466,66468,66470],{"class":104,"line":148},[102,66463,60009],{"class":119},[102,66465,59272],{"class":59165},[102,66467,59275],{"class":119},[102,66469,59272],{"class":59165},[102,66471,59172],{"class":119},[102,66473,66474,66476,66478],{"class":104,"line":157},[102,66475,59650],{"class":119},[102,66477,59199],{"class":59165},[102,66479,59172],{"class":119},[102,66481,66482],{"class":104,"line":163},[102,66483,652],{"emptyLinePlaceholder":651},[102,66485,66486,66488,66490],{"class":104,"line":175},[102,66487,1208],{"class":119},[102,66489,59665],{"class":59165},[102,66491,59172],{"class":119},[102,66493,66494,66496,66498,66500,66502],{"class":104,"line":181},[102,66495,60009],{"class":119},[102,66497,61752],{"class":59165},[102,66499,61758],{"class":119},[102,66501,61752],{"class":59165},[102,66503,59172],{"class":119},[102,66505,66506,66508,66510],{"class":104,"line":202},[102,66507,60009],{"class":119},[102,66509,59678],{"class":59165},[102,66511,59172],{"class":119},[102,66513,66514,66516,66518,66520],{"class":104,"line":208},[102,66515,19961],{"class":108},[102,66517,11078],{"class":187},[102,66519,22296],{"class":108},[102,66521,66293],{"class":187},[102,66523,66524,66526,66528,66530,66532,66534,66536,66538],{"class":104,"line":214},[102,66525,19961],{"class":108},[102,66527,62256],{"class":187},[102,66529,22296],{"class":108},[102,66531,62261],{"class":119},[102,66533,62264],{"class":112},[102,66535,380],{"class":119},[102,66537,66069],{"class":278},[102,66539,390],{"class":119},[102,66541,66542,66544,66546,66548,66550,66552,66554],{"class":104,"line":225},[102,66543,66076],{"class":119},[102,66545,65678],{"class":112},[102,66547,380],{"class":119},[102,66549,65683],{"class":278},[102,66551,2571],{"class":119},[102,66553,62314],{"class":108},[102,66555,62317],{"class":119},[102,66557,66558,66561,66563,66565,66567],{"class":104,"line":230},[102,66559,66560],{"class":119},"      num ",[102,66562,260],{"class":108},[102,66564,66100],{"class":119},[102,66566,65725],{"class":112},[102,66568,172],{"class":119},[102,66570,66571,66573,66575],{"class":104,"line":236},[102,66572,66109],{"class":119},[102,66574,66112],{"class":112},[102,66576,9060],{"class":119},[102,66578,66579],{"class":104,"line":242},[102,66580,41326],{"class":119},[102,66582,66583,66585,66587],{"class":104,"line":248},[102,66584,60282],{"class":119},[102,66586,59678],{"class":59165},[102,66588,59172],{"class":119},[102,66590,66591,66593,66595],{"class":104,"line":254},[102,66592,59650],{"class":119},[102,66594,59665],{"class":59165},[102,66596,59172],{"class":119},[102,66598,66599],{"class":104,"line":269},[102,66600,652],{"emptyLinePlaceholder":651},[102,66602,66603,66605,66607],{"class":104,"line":298},[102,66604,59650],{"class":119},[102,66606,58500],{"class":59165},[102,66608,59172],{"class":119},[14,66610,66611],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[48,66613,66615],{"id":66614},"_324-事件监听版本","3.2.4 事件监听版本",[14,66617,66618],{},[6750,66619],{"alt":98,"src":66620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,66622,66623],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,66625,66626],{},"这种方式会覆盖前边的事件监听:",[93,66628,66630],{"className":58498,"code":66629,"language":58500,"meta":98,"style":98},"\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",[83,66631,66632,66642,66656,66660,66668,66682,66702,66714,66722,66726,66734,66746,66754,66772,66786,66797,66801,66813,66823,66827,66835,66843,66847],{"__ignoreMap":98},[102,66633,66634,66636,66638,66640],{"class":104,"line":105},[102,66635,59162],{"class":119},[102,66637,59166],{"class":59165},[102,66639,59169],{"class":112},[102,66641,59172],{"class":119},[102,66643,66644,66646,66648,66650,66652,66654],{"class":104,"line":116},[102,66645,1208],{"class":119},[102,66647,58500],{"class":59165},[102,66649,59181],{"class":112},[102,66651,260],{"class":119},[102,66653,59186],{"class":278},[102,66655,59172],{"class":119},[102,66657,66658],{"class":104,"line":123},[102,66659,652],{"emptyLinePlaceholder":651},[102,66661,66662,66664,66666],{"class":104,"line":130},[102,66663,1208],{"class":119},[102,66665,59199],{"class":59165},[102,66667,59172],{"class":119},[102,66669,66670,66672,66674,66676,66678,66680],{"class":104,"line":136},[102,66671,60009],{"class":119},[102,66673,59209],{"class":59165},[102,66675,59212],{"class":112},[102,66677,260],{"class":119},[102,66679,59217],{"class":278},[102,66681,59172],{"class":119},[102,66683,66684,66686,66688,66690,66692,66694,66696,66698,66700],{"class":104,"line":142},[102,66685,60009],{"class":119},[102,66687,59209],{"class":59165},[102,66689,387],{"class":112},[102,66691,260],{"class":119},[102,66693,59256],{"class":278},[102,66695,59236],{"class":112},[102,66697,260],{"class":119},[102,66699,59263],{"class":278},[102,66701,59172],{"class":119},[102,66703,66704,66706,66708,66710,66712],{"class":104,"line":148},[102,66705,60009],{"class":119},[102,66707,59272],{"class":59165},[102,66709,59275],{"class":119},[102,66711,59272],{"class":59165},[102,66713,59172],{"class":119},[102,66715,66716,66718,66720],{"class":104,"line":157},[102,66717,59650],{"class":119},[102,66719,59199],{"class":59165},[102,66721,59172],{"class":119},[102,66723,66724],{"class":104,"line":163},[102,66725,652],{"emptyLinePlaceholder":651},[102,66727,66728,66730,66732],{"class":104,"line":175},[102,66729,1208],{"class":119},[102,66731,59665],{"class":59165},[102,66733,59172],{"class":119},[102,66735,66736,66738,66740,66742,66744],{"class":104,"line":181},[102,66737,60009],{"class":119},[102,66739,61752],{"class":59165},[102,66741,61758],{"class":119},[102,66743,61752],{"class":59165},[102,66745,59172],{"class":119},[102,66747,66748,66750,66752],{"class":104,"line":202},[102,66749,60009],{"class":119},[102,66751,59678],{"class":59165},[102,66753,59172],{"class":119},[102,66755,66756,66758,66760,66762,66764,66766,66768,66770],{"class":104,"line":208},[102,66757,19961],{"class":108},[102,66759,62256],{"class":187},[102,66761,22296],{"class":108},[102,66763,62261],{"class":119},[102,66765,62264],{"class":112},[102,66767,380],{"class":119},[102,66769,66069],{"class":278},[102,66771,390],{"class":119},[102,66773,66774,66776,66779,66781,66784],{"class":104,"line":214},[102,66775,66076],{"class":119},[102,66777,66778],{"class":112},"onclick",[102,66780,22296],{"class":108},[102,66782,66783],{"class":108}," function",[102,66785,62317],{"class":119},[102,66787,66788,66791,66793,66795],{"class":104,"line":225},[102,66789,66790],{"class":112},"      alert",[102,66792,380],{"class":119},[102,66794,9502],{"class":187},[102,66796,390],{"class":119},[102,66798,66799],{"class":104,"line":230},[102,66800,205],{"class":119},[102,66802,66803,66805,66807,66809,66811],{"class":104,"line":236},[102,66804,66076],{"class":119},[102,66806,66778],{"class":112},[102,66808,22296],{"class":108},[102,66810,66783],{"class":108},[102,66812,62317],{"class":119},[102,66814,66815,66817,66819,66821],{"class":104,"line":242},[102,66816,66790],{"class":112},[102,66818,380],{"class":119},[102,66820,9774],{"class":187},[102,66822,390],{"class":119},[102,66824,66825],{"class":104,"line":248},[102,66826,205],{"class":119},[102,66828,66829,66831,66833],{"class":104,"line":254},[102,66830,60282],{"class":119},[102,66832,59678],{"class":59165},[102,66834,59172],{"class":119},[102,66836,66837,66839,66841],{"class":104,"line":269},[102,66838,59650],{"class":119},[102,66840,59665],{"class":59165},[102,66842,59172],{"class":119},[102,66844,66845],{"class":104,"line":298},[102,66846,652],{"emptyLinePlaceholder":651},[102,66848,66849,66851,66853],{"class":104,"line":502},[102,66850,59650],{"class":119},[102,66852,58500],{"class":59165},[102,66854,59172],{"class":119},[14,66856,66857],{},"只要点击就输出结果为22,前边11被覆盖了",[93,66859,66861],{"className":58498,"code":66860,"language":58500,"meta":98,"style":98},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[83,66862,66863,66868,66873,66877,66882,66887],{"__ignoreMap":98},[102,66864,66865],{"class":104,"line":105},[102,66866,66867],{"class":119},"  btn.addEventListener('click', function () {\n",[102,66869,66870],{"class":104,"line":116},[102,66871,66872],{"class":119},"      alert(11)\n",[102,66874,66875],{"class":104,"line":123},[102,66876,41326],{"class":119},[102,66878,66879],{"class":104,"line":130},[102,66880,66881],{"class":119},"    btn.addEventListener('click', function () {\n",[102,66883,66884],{"class":104,"line":136},[102,66885,66886],{"class":119},"      alert(22)\n",[102,66888,66889],{"class":104,"line":142},[102,66890,41326],{"class":119},[14,66892,66893],{},"点击第一次输出11,第二次点击为22",[48,66895,66897],{"id":66896},"_325-事件类型","3.2.5 事件类型",[14,66899,66900],{},[6750,66901],{"alt":98,"src":66902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[7601,66904,66906],{"id":66905},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,66908,66909],{},"补充知识:",[14,66911,66912],{},"轮播图自动播放模块,可以使用",[14,66914,66915],{},"let timerId = setInterval(function () {",[14,66917,66918],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,66920,66921],{},"用js方法模拟进行点击事件,click必须加()",[14,66923,66924],{},"next.click()",[14,66926,66927],{},"}, 1000)",[14,66929,66930],{},[6750,66931],{"alt":98,"src":66932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[93,66934,66936],{"className":60932,"code":66935,"language":60934,"meta":98,"style":98},"\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",[83,66937,66938,66942,66952,66966,66970,66978,66993,67013,67033,67046,67054,67059,67064,67068,67072,67077,67082,67087,67092,67096,67100,67105,67110,67115,67119,67123,67128,67132,67137,67142,67146,67150,67155,67160,67165,67170,67175,67179,67183,67188,67193,67198,67203,67208,67212,67216,67221,67226,67231,67236,67241,67246,67251,67256,67261,67266,67270,67274,67279,67284,67288,67292,67297,67302,67306,67311,67316,67320,67324,67329,67333,67338,67343,67347,67352,67356,67360,67365,67370,67375,67380,67385,67390,67395,67399,67403,67407,67412,67417,67422,67427,67431,67439,67447,67451,67459,67474,67488,67509,67517,67531,67544,67559,67578,67590,67602,67614,67626,67638,67650,67662,67670,67685,67709,67733,67741,67749,67757,67765,67770,67775,67780,67785,67790,67795,67800,67805,67810,67815,67819,67824,67829,67834,67839,67844,67849,67854,67859,67864,67868,67873,67878,67883,67888,67893,67898,67903,67908,67913,67918,67923,67928,67932,67936,67941,67946,67951,67955,67960,67965,67970,67975,67980,67984,67989,67993,67997,68001,68005,68009,68013,68018,68023,68028,68033,68038,68043,68048,68053,68058,68062,68066,68071,68076,68081,68086,68091,68095,68100,68105,68110,68115,68120,68125,68129,68133,68138,68142,68147,68151,68156,68161,68166,68171,68176,68181,68185,68193,68201,68205],{"__ignoreMap":98},[102,66939,66940],{"class":104,"line":105},[102,66941,652],{"emptyLinePlaceholder":651},[102,66943,66944,66946,66948,66950],{"class":104,"line":116},[102,66945,59162],{"class":119},[102,66947,59166],{"class":108},[102,66949,59169],{"class":187},[102,66951,59172],{"class":119},[102,66953,66954,66956,66958,66960,66962,66964],{"class":104,"line":123},[102,66955,1208],{"class":119},[102,66957,58500],{"class":59165},[102,66959,59181],{"class":112},[102,66961,260],{"class":119},[102,66963,59186],{"class":278},[102,66965,59172],{"class":119},[102,66967,66968],{"class":104,"line":130},[102,66969,652],{"emptyLinePlaceholder":651},[102,66971,66972,66974,66976],{"class":104,"line":136},[102,66973,1208],{"class":119},[102,66975,59199],{"class":59165},[102,66977,59172],{"class":119},[102,66979,66980,66982,66984,66986,66988,66990],{"class":104,"line":142},[102,66981,60009],{"class":119},[102,66983,59209],{"class":59165},[102,66985,59212],{"class":112},[102,66987,260],{"class":119},[102,66989,59217],{"class":278},[102,66991,66992],{"class":119}," \u002F>\n",[102,66994,66995,66997,66999,67001,67003,67005,67007,67009,67011],{"class":104,"line":148},[102,66996,60009],{"class":119},[102,66998,59209],{"class":59165},[102,67000,59228],{"class":112},[102,67002,260],{"class":119},[102,67004,59233],{"class":278},[102,67006,59236],{"class":112},[102,67008,260],{"class":119},[102,67010,59241],{"class":278},[102,67012,66992],{"class":119},[102,67014,67015,67017,67019,67021,67023,67025,67027,67029,67031],{"class":104,"line":157},[102,67016,60009],{"class":119},[102,67018,59209],{"class":59165},[102,67020,387],{"class":112},[102,67022,260],{"class":119},[102,67024,59256],{"class":278},[102,67026,59236],{"class":112},[102,67028,260],{"class":119},[102,67030,59263],{"class":278},[102,67032,66992],{"class":119},[102,67034,67035,67037,67039,67042,67044],{"class":104,"line":163},[102,67036,60009],{"class":119},[102,67038,59272],{"class":59165},[102,67040,67041],{"class":119},">轮播图点击切换\u003C\u002F",[102,67043,59272],{"class":59165},[102,67045,59172],{"class":119},[102,67047,67048,67050,67052],{"class":104,"line":175},[102,67049,60009],{"class":119},[102,67051,8955],{"class":59165},[102,67053,59172],{"class":119},[102,67055,67056],{"class":104,"line":181},[102,67057,67058],{"class":119},"    * {\n",[102,67060,67061],{"class":104,"line":202},[102,67062,67063],{"class":119},"      box-sizing: border-box;\n",[102,67065,67066],{"class":104,"line":208},[102,67067,205],{"class":119},[102,67069,67070],{"class":104,"line":214},[102,67071,652],{"emptyLinePlaceholder":651},[102,67073,67074],{"class":104,"line":225},[102,67075,67076],{"class":119},"    .slider {\n",[102,67078,67079],{"class":104,"line":230},[102,67080,67081],{"class":119},"      width: 560px;\n",[102,67083,67084],{"class":104,"line":236},[102,67085,67086],{"class":119},"      height: 400px;\n",[102,67088,67089],{"class":104,"line":242},[102,67090,67091],{"class":119},"      overflow: hidden;\n",[102,67093,67094],{"class":104,"line":248},[102,67095,205],{"class":119},[102,67097,67098],{"class":104,"line":254},[102,67099,652],{"emptyLinePlaceholder":651},[102,67101,67102],{"class":104,"line":269},[102,67103,67104],{"class":119},"    .slider-wrapper {\n",[102,67106,67107],{"class":104,"line":298},[102,67108,67109],{"class":119},"      width: 100%;\n",[102,67111,67112],{"class":104,"line":502},[102,67113,67114],{"class":119},"      height: 320px;\n",[102,67116,67117],{"class":104,"line":507},[102,67118,205],{"class":119},[102,67120,67121],{"class":104,"line":512},[102,67122,652],{"emptyLinePlaceholder":651},[102,67124,67125],{"class":104,"line":521},[102,67126,67127],{"class":119},"    .slider-wrapper img {\n",[102,67129,67130],{"class":104,"line":526},[102,67131,67109],{"class":119},[102,67133,67134],{"class":104,"line":532},[102,67135,67136],{"class":119},"      height: 100%;\n",[102,67138,67139],{"class":104,"line":538},[102,67140,67141],{"class":119},"      display: block;\n",[102,67143,67144],{"class":104,"line":555},[102,67145,205],{"class":119},[102,67147,67148],{"class":104,"line":570},[102,67149,652],{"emptyLinePlaceholder":651},[102,67151,67152],{"class":104,"line":581},[102,67153,67154],{"class":119},"    .slider-footer {\n",[102,67156,67157],{"class":104,"line":819},[102,67158,67159],{"class":119},"      height: 80px;\n",[102,67161,67162],{"class":104,"line":828},[102,67163,67164],{"class":119},"      background-color: rgb(100, 67, 68);\n",[102,67166,67167],{"class":104,"line":837},[102,67168,67169],{"class":119},"      padding: 12px 12px 0 12px;\n",[102,67171,67172],{"class":104,"line":842},[102,67173,67174],{"class":119},"      position: relative;\n",[102,67176,67177],{"class":104,"line":855},[102,67178,205],{"class":119},[102,67180,67181],{"class":104,"line":860},[102,67182,652],{"emptyLinePlaceholder":651},[102,67184,67185],{"class":104,"line":871},[102,67186,67187],{"class":119},"    .slider-footer .toggle {\n",[102,67189,67190],{"class":104,"line":1359},[102,67191,67192],{"class":119},"      position: absolute;\n",[102,67194,67195],{"class":104,"line":1368},[102,67196,67197],{"class":119},"      right: 0;\n",[102,67199,67200],{"class":104,"line":1373},[102,67201,67202],{"class":119},"      top: 12px;\n",[102,67204,67205],{"class":104,"line":1378},[102,67206,67207],{"class":119},"      display: flex;\n",[102,67209,67210],{"class":104,"line":1384},[102,67211,205],{"class":119},[102,67213,67214],{"class":104,"line":1398},[102,67215,652],{"emptyLinePlaceholder":651},[102,67217,67218],{"class":104,"line":1424},[102,67219,67220],{"class":119},"    .slider-footer .toggle button {\n",[102,67222,67223],{"class":104,"line":1429},[102,67224,67225],{"class":119},"      margin-right: 12px;\n",[102,67227,67228],{"class":104,"line":1435},[102,67229,67230],{"class":119},"      width: 28px;\n",[102,67232,67233],{"class":104,"line":1450},[102,67234,67235],{"class":119},"      height: 28px;\n",[102,67237,67238],{"class":104,"line":1473},[102,67239,67240],{"class":119},"      appearance: none;\n",[102,67242,67243],{"class":104,"line":1478},[102,67244,67245],{"class":119},"      border: none;\n",[102,67247,67248],{"class":104,"line":1484},[102,67249,67250],{"class":119},"      background: rgba(255, 255, 255, 0.1);\n",[102,67252,67253],{"class":104,"line":1499},[102,67254,67255],{"class":119},"      color: #fff;\n",[102,67257,67258],{"class":104,"line":1508},[102,67259,67260],{"class":119},"      border-radius: 4px;\n",[102,67262,67263],{"class":104,"line":1513},[102,67264,67265],{"class":119},"      cursor: pointer;\n",[102,67267,67268],{"class":104,"line":1524},[102,67269,205],{"class":119},[102,67271,67272],{"class":104,"line":1529},[102,67273,652],{"emptyLinePlaceholder":651},[102,67275,67276],{"class":104,"line":1538},[102,67277,67278],{"class":119},"    .slider-footer .toggle button:hover {\n",[102,67280,67281],{"class":104,"line":2089},[102,67282,67283],{"class":119},"      background: rgba(255, 255, 255, 0.2);\n",[102,67285,67286],{"class":104,"line":2094},[102,67287,205],{"class":119},[102,67289,67290],{"class":104,"line":2100},[102,67291,652],{"emptyLinePlaceholder":651},[102,67293,67294],{"class":104,"line":2106},[102,67295,67296],{"class":119},"    .slider-footer p {\n",[102,67298,67299],{"class":104,"line":2120},[102,67300,67301],{"class":119},"      margin: 0;\n",[102,67303,67304],{"class":104,"line":2128},[102,67305,67255],{"class":119},[102,67307,67308],{"class":104,"line":2149},[102,67309,67310],{"class":119},"      font-size: 18px;\n",[102,67312,67313],{"class":104,"line":2161},[102,67314,67315],{"class":119},"      margin-bottom: 10px;\n",[102,67317,67318],{"class":104,"line":2167},[102,67319,205],{"class":119},[102,67321,67322],{"class":104,"line":2190},[102,67323,652],{"emptyLinePlaceholder":651},[102,67325,67326],{"class":104,"line":2196},[102,67327,67328],{"class":119},"    .slider-indicator {\n",[102,67330,67331],{"class":104,"line":2219},[102,67332,67301],{"class":119},[102,67334,67335],{"class":104,"line":2233},[102,67336,67337],{"class":119},"      padding: 0;\n",[102,67339,67340],{"class":104,"line":2253},[102,67341,67342],{"class":119},"      list-style: none;\n",[102,67344,67345],{"class":104,"line":2259},[102,67346,67207],{"class":119},[102,67348,67349],{"class":104,"line":2270},[102,67350,67351],{"class":119},"      align-items: center;\n",[102,67353,67354],{"class":104,"line":2293},[102,67355,205],{"class":119},[102,67357,67358],{"class":104,"line":2315},[102,67359,652],{"emptyLinePlaceholder":651},[102,67361,67362],{"class":104,"line":2320},[102,67363,67364],{"class":119},"    .slider-indicator li {\n",[102,67366,67367],{"class":104,"line":2326},[102,67368,67369],{"class":119},"      width: 8px;\n",[102,67371,67372],{"class":104,"line":2340},[102,67373,67374],{"class":119},"      height: 8px;\n",[102,67376,67377],{"class":104,"line":2354},[102,67378,67379],{"class":119},"      margin: 4px;\n",[102,67381,67382],{"class":104,"line":2359},[102,67383,67384],{"class":119},"      border-radius: 50%;\n",[102,67386,67387],{"class":104,"line":2373},[102,67388,67389],{"class":119},"      background: #fff;\n",[102,67391,67392],{"class":104,"line":2378},[102,67393,67394],{"class":119},"      opacity: 0.4;\n",[102,67396,67397],{"class":104,"line":2384},[102,67398,67265],{"class":119},[102,67400,67401],{"class":104,"line":2389},[102,67402,205],{"class":119},[102,67404,67405],{"class":104,"line":2403},[102,67406,652],{"emptyLinePlaceholder":651},[102,67408,67409],{"class":104,"line":2408},[102,67410,67411],{"class":119},"    .slider-indicator li.active {\n",[102,67413,67414],{"class":104,"line":2413},[102,67415,67416],{"class":119},"      width: 12px;\n",[102,67418,67419],{"class":104,"line":2427},[102,67420,67421],{"class":119},"      height: 12px;\n",[102,67423,67424],{"class":104,"line":2440},[102,67425,67426],{"class":119},"      opacity: 1;\n",[102,67428,67429],{"class":104,"line":2445},[102,67430,205],{"class":119},[102,67432,67433,67435,67437],{"class":104,"line":2458},[102,67434,60282],{"class":119},[102,67436,8955],{"class":59165},[102,67438,59172],{"class":119},[102,67440,67441,67443,67445],{"class":104,"line":2463},[102,67442,59650],{"class":119},[102,67444,59199],{"class":59165},[102,67446,59172],{"class":119},[102,67448,67449],{"class":104,"line":2468},[102,67450,652],{"emptyLinePlaceholder":651},[102,67452,67453,67455,67457],{"class":104,"line":2473},[102,67454,1208],{"class":119},[102,67456,59665],{"class":59165},[102,67458,59172],{"class":119},[102,67460,67461,67463,67465,67467,67469,67472],{"class":104,"line":2486},[102,67462,60009],{"class":119},[102,67464,59476],{"class":59165},[102,67466,61351],{"class":112},[102,67468,260],{"class":119},[102,67470,67471],{"class":278},"\"slider\"",[102,67473,59172],{"class":119},[102,67475,67476,67478,67480,67482,67484,67486],{"class":104,"line":2491},[102,67477,59206],{"class":119},[102,67479,59476],{"class":59165},[102,67481,61351],{"class":112},[102,67483,260],{"class":119},[102,67485,63092],{"class":278},[102,67487,59172],{"class":119},[102,67489,67490,67492,67494,67496,67498,67501,67503,67505,67507],{"class":104,"line":40498},[102,67491,63099],{"class":119},[102,67493,6750],{"class":59165},[102,67495,63104],{"class":112},[102,67497,260],{"class":119},[102,67499,67500],{"class":278},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[102,67502,63112],{"class":112},[102,67504,260],{"class":119},[102,67506,16439],{"class":278},[102,67508,66992],{"class":119},[102,67510,67511,67513,67515],{"class":104,"line":40504},[102,67512,59641],{"class":119},[102,67514,59476],{"class":59165},[102,67516,59172],{"class":119},[102,67518,67519,67521,67523,67525,67527,67529],{"class":104,"line":40510},[102,67520,59206],{"class":119},[102,67522,59476],{"class":59165},[102,67524,61351],{"class":112},[102,67526,260],{"class":119},[102,67528,63139],{"class":278},[102,67530,59172],{"class":119},[102,67532,67533,67535,67537,67540,67542],{"class":104,"line":40516},[102,67534,63099],{"class":119},[102,67536,14],{"class":59165},[102,67538,67539],{"class":119},">对人类来说会不会太超前了？\u003C\u002F",[102,67541,14],{"class":59165},[102,67543,59172],{"class":119},[102,67545,67546,67548,67550,67552,67554,67557],{"class":104,"line":40522},[102,67547,63099],{"class":119},[102,67549,59],{"class":59165},[102,67551,61351],{"class":112},[102,67553,260],{"class":119},[102,67555,67556],{"class":278},"\"slider-indicator\"",[102,67558,59172],{"class":119},[102,67560,67561,67563,67565,67567,67569,67572,67574,67576],{"class":104,"line":40533},[102,67562,63167],{"class":119},[102,67564,62],{"class":59165},[102,67566,61351],{"class":112},[102,67568,260],{"class":119},[102,67570,67571],{"class":278},"\"active\"",[102,67573,63179],{"class":119},[102,67575,62],{"class":59165},[102,67577,59172],{"class":119},[102,67579,67580,67582,67584,67586,67588],{"class":104,"line":40539},[102,67581,63167],{"class":119},[102,67583,62],{"class":59165},[102,67585,63179],{"class":119},[102,67587,62],{"class":59165},[102,67589,59172],{"class":119},[102,67591,67592,67594,67596,67598,67600],{"class":104,"line":40559},[102,67593,63167],{"class":119},[102,67595,62],{"class":59165},[102,67597,63179],{"class":119},[102,67599,62],{"class":59165},[102,67601,59172],{"class":119},[102,67603,67604,67606,67608,67610,67612],{"class":104,"line":40565},[102,67605,63167],{"class":119},[102,67607,62],{"class":59165},[102,67609,63179],{"class":119},[102,67611,62],{"class":59165},[102,67613,59172],{"class":119},[102,67615,67616,67618,67620,67622,67624],{"class":104,"line":40576},[102,67617,63167],{"class":119},[102,67619,62],{"class":59165},[102,67621,63179],{"class":119},[102,67623,62],{"class":59165},[102,67625,59172],{"class":119},[102,67627,67628,67630,67632,67634,67636],{"class":104,"line":40582},[102,67629,63167],{"class":119},[102,67631,62],{"class":59165},[102,67633,63179],{"class":119},[102,67635,62],{"class":59165},[102,67637,59172],{"class":119},[102,67639,67640,67642,67644,67646,67648],{"class":104,"line":40588},[102,67641,63167],{"class":119},[102,67643,62],{"class":59165},[102,67645,63179],{"class":119},[102,67647,62],{"class":59165},[102,67649,59172],{"class":119},[102,67651,67652,67654,67656,67658,67660],{"class":104,"line":40594},[102,67653,63167],{"class":119},[102,67655,62],{"class":59165},[102,67657,63179],{"class":119},[102,67659,62],{"class":59165},[102,67661,59172],{"class":119},[102,67663,67664,67666,67668],{"class":104,"line":40600},[102,67665,63272],{"class":119},[102,67667,59],{"class":59165},[102,67669,59172],{"class":119},[102,67671,67672,67674,67676,67678,67680,67683],{"class":104,"line":40606},[102,67673,63099],{"class":119},[102,67675,59476],{"class":59165},[102,67677,61351],{"class":112},[102,67679,260],{"class":119},[102,67681,67682],{"class":278},"\"toggle\"",[102,67684,59172],{"class":119},[102,67686,67687,67689,67691,67693,67695,67698,67700,67703,67705,67707],{"class":104,"line":40612},[102,67688,63167],{"class":119},[102,67690,61752],{"class":59165},[102,67692,61351],{"class":112},[102,67694,260],{"class":119},[102,67696,67697],{"class":278},"\"prev\"",[102,67699,1219],{"class":119},[102,67701,67702],{"class":187},"&lt;",[102,67704,59650],{"class":119},[102,67706,61752],{"class":59165},[102,67708,59172],{"class":119},[102,67710,67711,67713,67715,67717,67719,67722,67724,67727,67729,67731],{"class":104,"line":40618},[102,67712,63167],{"class":119},[102,67714,61752],{"class":59165},[102,67716,61351],{"class":112},[102,67718,260],{"class":119},[102,67720,67721],{"class":278},"\"next\"",[102,67723,1219],{"class":119},[102,67725,67726],{"class":187},"&gt;",[102,67728,59650],{"class":119},[102,67730,61752],{"class":59165},[102,67732,59172],{"class":119},[102,67734,67735,67737,67739],{"class":104,"line":40638},[102,67736,63272],{"class":119},[102,67738,59476],{"class":59165},[102,67740,59172],{"class":119},[102,67742,67743,67745,67747],{"class":104,"line":40644},[102,67744,59641],{"class":119},[102,67746,59476],{"class":59165},[102,67748,59172],{"class":119},[102,67750,67751,67753,67755],{"class":104,"line":40660},[102,67752,60282],{"class":119},[102,67754,59476],{"class":59165},[102,67756,59172],{"class":119},[102,67758,67759,67761,67763],{"class":104,"line":40666},[102,67760,60009],{"class":119},[102,67762,59678],{"class":59165},[102,67764,59172],{"class":119},[102,67766,67767],{"class":104,"line":40680},[102,67768,67769],{"class":119},"    \u002F\u002F 1. 初始数据\n",[102,67771,67772],{"class":104,"line":40686},[102,67773,67774],{"class":119},"    const data = [\n",[102,67776,67777],{"class":104,"line":40701},[102,67778,67779],{"class":119},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[102,67781,67782],{"class":104,"line":40707},[102,67783,67784],{"class":119},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[102,67786,67787],{"class":104,"line":40716},[102,67788,67789],{"class":119},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[102,67791,67792],{"class":104,"line":40722},[102,67793,67794],{"class":119},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[102,67796,67797],{"class":104,"line":40731},[102,67798,67799],{"class":119},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[102,67801,67802],{"class":104,"line":40737},[102,67803,67804],{"class":119},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[102,67806,67807],{"class":104,"line":40743},[102,67808,67809],{"class":119},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[102,67811,67812],{"class":104,"line":40752},[102,67813,67814],{"class":119},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[102,67816,67817],{"class":104,"line":40758},[102,67818,60974],{"class":119},[102,67820,67821],{"class":104,"line":40769},[102,67822,67823],{"class":119},"    \u002F\u002F 获取元素\n",[102,67825,67826],{"class":104,"line":40775},[102,67827,67828],{"class":119},"    const img = document.querySelector('.slider-wrapper img')\n",[102,67830,67831],{"class":104,"line":40794},[102,67832,67833],{"class":119},"    const p = document.querySelector('.slider-footer p')\n",[102,67835,67836],{"class":104,"line":40800},[102,67837,67838],{"class":119},"    const footer = document.querySelector('.slider-footer')\n",[102,67840,67841],{"class":104,"line":40811},[102,67842,67843],{"class":119},"    \u002F\u002F 1. 右按钮业务\n",[102,67845,67846],{"class":104,"line":40817},[102,67847,67848],{"class":119},"    \u002F\u002F 1.1 获取右侧按钮 \n",[102,67850,67851],{"class":104,"line":40837},[102,67852,67853],{"class":119},"    const next = document.querySelector('.next')\n",[102,67855,67856],{"class":104,"line":40853},[102,67857,67858],{"class":119},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[102,67860,67861],{"class":104,"line":40859},[102,67862,67863],{"class":119},"    \u002F\u002F 1.2 注册点击事件\n",[102,67865,67866],{"class":104,"line":40873},[102,67867,652],{"emptyLinePlaceholder":651},[102,67869,67870],{"class":104,"line":40879},[102,67871,67872],{"class":119},"    next.addEventListener('click', function () {\n",[102,67874,67875],{"class":104,"line":40885},[102,67876,67877],{"class":119},"      \u002F\u002F console.log(11)\n",[102,67879,67880],{"class":104,"line":40896},[102,67881,67882],{"class":119},"      i++\n",[102,67884,67885],{"class":104,"line":40902},[102,67886,67887],{"class":119},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[102,67889,67890],{"class":104,"line":40908},[102,67891,67892],{"class":119},"      \u002F\u002F if (i >= 8) {\n",[102,67894,67895],{"class":104,"line":40918},[102,67896,67897],{"class":119},"      \u002F\u002F   i = 0\n",[102,67899,67900],{"class":104,"line":40924},[102,67901,67902],{"class":119},"      \u002F\u002F }\n",[102,67904,67905],{"class":104,"line":40935},[102,67906,67907],{"class":119},"      i = i >= data.length ? 0 : i\n",[102,67909,67910],{"class":104,"line":40941},[102,67911,67912],{"class":119},"      \u002F\u002F 1.3 得到对应的对象\n",[102,67914,67915],{"class":104,"line":40951},[102,67916,67917],{"class":119},"      \u002F\u002F console.log(data[i])\n",[102,67919,67920],{"class":104,"line":40956},[102,67921,67922],{"class":119},"      \u002F\u002F 调用函数\n",[102,67924,67925],{"class":104,"line":40962},[102,67926,67927],{"class":119},"      toggle()\n",[102,67929,67930],{"class":104,"line":41011},[102,67931,41326],{"class":119},[102,67933,67934],{"class":104,"line":41058},[102,67935,652],{"emptyLinePlaceholder":651},[102,67937,67938],{"class":104,"line":41063},[102,67939,67940],{"class":119},"    \u002F\u002F 2. 左侧按钮业务\n",[102,67942,67943],{"class":104,"line":41069},[102,67944,67945],{"class":119},"    \u002F\u002F 2.1 获取左侧按钮 \n",[102,67947,67948],{"class":104,"line":41088},[102,67949,67950],{"class":119},"    const prev = document.querySelector('.prev')\n",[102,67952,67953],{"class":104,"line":41094},[102,67954,67863],{"class":119},[102,67956,67957],{"class":104,"line":41114},[102,67958,67959],{"class":119},"    prev.addEventListener('click', function () {\n",[102,67961,67962],{"class":104,"line":41120},[102,67963,67964],{"class":119},"      i--\n",[102,67966,67967],{"class":104,"line":41126},[102,67968,67969],{"class":119},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[102,67971,67972],{"class":104,"line":41136},[102,67973,67974],{"class":119},"      \u002F\u002F if (i \u003C 0) {\n",[102,67976,67977],{"class":104,"line":41141},[102,67978,67979],{"class":119},"      \u002F\u002F   i = 7\n",[102,67981,67982],{"class":104,"line":41147},[102,67983,67902],{"class":119},[102,67985,67986],{"class":104,"line":41163},[102,67987,67988],{"class":119},"      i = i \u003C 0 ? data.length - 1 : i\n",[102,67990,67991],{"class":104,"line":41208},[102,67992,67912],{"class":119},[102,67994,67995],{"class":104,"line":41214},[102,67996,67917],{"class":119},[102,67998,67999],{"class":104,"line":41220},[102,68000,67922],{"class":119},[102,68002,68003],{"class":104,"line":41226},[102,68004,67927],{"class":119},[102,68006,68007],{"class":104,"line":41237},[102,68008,41326],{"class":119},[102,68010,68011],{"class":104,"line":41243},[102,68012,652],{"emptyLinePlaceholder":651},[102,68014,68015],{"class":104,"line":41249},[102,68016,68017],{"class":119},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[102,68019,68020],{"class":104,"line":41255},[102,68021,68022],{"class":119},"    function toggle() {\n",[102,68024,68025],{"class":104,"line":41273},[102,68026,68027],{"class":119},"      \u002F\u002F 1.4 渲染对应的数据\n",[102,68029,68030],{"class":104,"line":41287},[102,68031,68032],{"class":119},"      img.src = data[i].url\n",[102,68034,68035],{"class":104,"line":41296},[102,68036,68037],{"class":119},"      p.innerHTML = data[i].title\n",[102,68039,68040],{"class":104,"line":41305},[102,68041,68042],{"class":119},"      footer.style.backgroundColor = data[i].color\n",[102,68044,68045],{"class":104,"line":41314},[102,68046,68047],{"class":119},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[102,68049,68050],{"class":104,"line":41323},[102,68051,68052],{"class":119},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[102,68054,68055],{"class":104,"line":41329},[102,68056,68057],{"class":119},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[102,68059,68060],{"class":104,"line":41335},[102,68061,205],{"class":119},[102,68063,68064],{"class":104,"line":41343},[102,68065,652],{"emptyLinePlaceholder":651},[102,68067,68068],{"class":104,"line":41348},[102,68069,68070],{"class":119},"    \u002F\u002F 3. 自动播放模块\n",[102,68072,68073],{"class":104,"line":41354},[102,68074,68075],{"class":119},"    let timerId = setInterval(function () {\n",[102,68077,68078],{"class":104,"line":41365},[102,68079,68080],{"class":119},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[102,68082,68083],{"class":104,"line":41371},[102,68084,68085],{"class":119},"      next.click()\n",[102,68087,68088],{"class":104,"line":41391},[102,68089,68090],{"class":119},"    }, 1000)\n",[102,68092,68093],{"class":104,"line":41397},[102,68094,652],{"emptyLinePlaceholder":651},[102,68096,68097],{"class":104,"line":41403},[102,68098,68099],{"class":119},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[102,68101,68102],{"class":104,"line":41409},[102,68103,68104],{"class":119},"    const slider = document.querySelector('.slider')\n",[102,68106,68107],{"class":104,"line":41426},[102,68108,68109],{"class":119},"    \u002F\u002F 注册事件\n",[102,68111,68112],{"class":104,"line":41432},[102,68113,68114],{"class":119},"    slider.addEventListener('mouseenter', function () {\n",[102,68116,68117],{"class":104,"line":41438},[102,68118,68119],{"class":119},"      \u002F\u002F 停止定时器\n",[102,68121,68122],{"class":104,"line":41444},[102,68123,68124],{"class":119},"      clearInterval(timerId)\n",[102,68126,68127],{"class":104,"line":41450},[102,68128,41326],{"class":119},[102,68130,68131],{"class":104,"line":41456},[102,68132,652],{"emptyLinePlaceholder":651},[102,68134,68135],{"class":104,"line":41483},[102,68136,68137],{"class":119},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[102,68139,68140],{"class":104,"line":41507},[102,68141,68109],{"class":119},[102,68143,68144],{"class":104,"line":41513},[102,68145,68146],{"class":119},"    slider.addEventListener('mouseleave', function () {\n",[102,68148,68149],{"class":104,"line":41519},[102,68150,68119],{"class":119},[102,68152,68153],{"class":104,"line":41525},[102,68154,68155],{"class":119},"      if (timerId) clearInterval(timerId)\n",[102,68157,68158],{"class":104,"line":41536},[102,68159,68160],{"class":119},"      \u002F\u002F 开启定时器\n",[102,68162,68163],{"class":104,"line":41547},[102,68164,68165],{"class":119},"      timerId = setInterval(function () {\n",[102,68167,68168],{"class":104,"line":41553},[102,68169,68170],{"class":119},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[102,68172,68173],{"class":104,"line":41570},[102,68174,68175],{"class":119},"        next.click()\n",[102,68177,68178],{"class":104,"line":41593},[102,68179,68180],{"class":119},"      }, 1000)\n",[102,68182,68183],{"class":104,"line":41616},[102,68184,41326],{"class":119},[102,68186,68187,68189,68191],{"class":104,"line":41622},[102,68188,60282],{"class":119},[102,68190,59678],{"class":59165},[102,68192,59172],{"class":119},[102,68194,68195,68197,68199],{"class":104,"line":41627},[102,68196,59650],{"class":119},[102,68198,59665],{"class":59165},[102,68200,59172],{"class":119},[102,68202,68203],{"class":104,"line":41636},[102,68204,652],{"emptyLinePlaceholder":651},[102,68206,68207,68209,68211],{"class":104,"line":41646},[102,68208,59650],{"class":119},[102,68210,58500],{"class":59165},[102,68212,59172],{"class":119},[7601,68214,68216],{"id":68215},"_3252-焦点事件","3.2.5.2 焦点事件",[14,68218,68219],{},"小米搜索框案例：",[93,68221,68223],{"className":58498,"code":68222,"language":58500,"meta":98,"style":98},"\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",[83,68224,68225,68235,68249,68253,68261,68275,68295,68315,68327,68335,68341,68351,68361,68373,68377,68381,68388,68392,68403,68407,68411,68418,68429,68442,68456,68460,68464,68473,68485,68497,68511,68524,68537,68555,68566,68570,68574,68583,68600,68604,68608,68615,68625,68635,68646,68659,68671,68687,68698,68710,68714,68718,68726,68737,68754,68766,68778,68789,68793,68797,68808,68819,68823,68831,68835,68843,68847,68855,68870,68893,68908,68939,68966,68993,69020,69047,69074,69101,69110,69118,69126,69131,69151,69171,69176,69181,69199,69204,69214,69219,69233,69238,69243,69260,69269,69281,69285,69293,69301,69305],{"__ignoreMap":98},[102,68226,68227,68229,68231,68233],{"class":104,"line":105},[102,68228,59162],{"class":119},[102,68230,59166],{"class":59165},[102,68232,59169],{"class":112},[102,68234,59172],{"class":119},[102,68236,68237,68239,68241,68243,68245,68247],{"class":104,"line":116},[102,68238,1208],{"class":119},[102,68240,58500],{"class":59165},[102,68242,59181],{"class":112},[102,68244,260],{"class":119},[102,68246,59186],{"class":278},[102,68248,59172],{"class":119},[102,68250,68251],{"class":104,"line":123},[102,68252,652],{"emptyLinePlaceholder":651},[102,68254,68255,68257,68259],{"class":104,"line":130},[102,68256,1208],{"class":119},[102,68258,59199],{"class":59165},[102,68260,59172],{"class":119},[102,68262,68263,68265,68267,68269,68271,68273],{"class":104,"line":136},[102,68264,59206],{"class":119},[102,68266,59209],{"class":59165},[102,68268,59212],{"class":112},[102,68270,260],{"class":119},[102,68272,59217],{"class":278},[102,68274,59172],{"class":119},[102,68276,68277,68279,68281,68283,68285,68287,68289,68291,68293],{"class":104,"line":142},[102,68278,59206],{"class":119},[102,68280,59209],{"class":59165},[102,68282,59228],{"class":112},[102,68284,260],{"class":119},[102,68286,59233],{"class":278},[102,68288,59236],{"class":112},[102,68290,260],{"class":119},[102,68292,59241],{"class":278},[102,68294,59172],{"class":119},[102,68296,68297,68299,68301,68303,68305,68307,68309,68311,68313],{"class":104,"line":148},[102,68298,59206],{"class":119},[102,68300,59209],{"class":59165},[102,68302,387],{"class":112},[102,68304,260],{"class":119},[102,68306,59256],{"class":278},[102,68308,59236],{"class":112},[102,68310,260],{"class":119},[102,68312,59263],{"class":278},[102,68314,59172],{"class":119},[102,68316,68317,68319,68321,68323,68325],{"class":104,"line":157},[102,68318,59206],{"class":119},[102,68320,59272],{"class":59165},[102,68322,59275],{"class":119},[102,68324,59272],{"class":59165},[102,68326,59172],{"class":119},[102,68328,68329,68331,68333],{"class":104,"line":163},[102,68330,59206],{"class":119},[102,68332,8955],{"class":59165},[102,68334,59172],{"class":119},[102,68336,68337,68339],{"class":104,"line":175},[102,68338,59292],{"class":59165},[102,68340,1077],{"class":119},[102,68342,68343,68345,68347,68349],{"class":104,"line":181},[102,68344,59299],{"class":187},[102,68346,59302],{"class":119},[102,68348,8423],{"class":187},[102,68350,266],{"class":119},[102,68352,68353,68355,68357,68359],{"class":104,"line":202},[102,68354,59311],{"class":187},[102,68356,59302],{"class":119},[102,68358,8423],{"class":187},[102,68360,266],{"class":119},[102,68362,68363,68366,68368,68371],{"class":104,"line":208},[102,68364,68365],{"class":187},"            box-sizing",[102,68367,59302],{"class":119},[102,68369,68370],{"class":187},"border-box",[102,68372,266],{"class":119},[102,68374,68375],{"class":104,"line":214},[102,68376,1252],{"class":119},[102,68378,68379],{"class":104,"line":225},[102,68380,652],{"emptyLinePlaceholder":651},[102,68382,68383,68386],{"class":104,"line":230},[102,68384,68385],{"class":59165},"        ul",[102,68387,1077],{"class":119},[102,68389,68390],{"class":104,"line":236},[102,68391,652],{"emptyLinePlaceholder":651},[102,68393,68394,68397,68399,68401],{"class":104,"line":242},[102,68395,68396],{"class":187},"            list-style",[102,68398,59302],{"class":119},[102,68400,62602],{"class":187},[102,68402,266],{"class":119},[102,68404,68405],{"class":104,"line":248},[102,68406,1252],{"class":119},[102,68408,68409],{"class":104,"line":254},[102,68410,652],{"emptyLinePlaceholder":651},[102,68412,68413,68416],{"class":104,"line":269},[102,68414,68415],{"class":112},"        .mi",[102,68417,1077],{"class":119},[102,68419,68420,68423,68425,68427],{"class":104,"line":298},[102,68421,68422],{"class":187},"            position",[102,68424,59302],{"class":119},[102,68426,62629],{"class":187},[102,68428,266],{"class":119},[102,68430,68431,68433,68435,68438,68440],{"class":104,"line":502},[102,68432,59349],{"class":187},[102,68434,59302],{"class":119},[102,68436,68437],{"class":187},"223",[102,68439,59357],{"class":108},[102,68441,266],{"class":119},[102,68443,68444,68446,68448,68450,68452,68454],{"class":104,"line":507},[102,68445,59299],{"class":187},[102,68447,59302],{"class":119},[102,68449,5569],{"class":187},[102,68451,59357],{"class":108},[102,68453,59421],{"class":187},[102,68455,266],{"class":119},[102,68457,68458],{"class":104,"line":512},[102,68459,1252],{"class":119},[102,68461,68462],{"class":104,"line":521},[102,68463,652],{"emptyLinePlaceholder":651},[102,68465,68466,68468,68471],{"class":104,"line":526},[102,68467,68415],{"class":112},[102,68469,68470],{"class":59165}," input",[102,68472,1077],{"class":119},[102,68474,68475,68477,68479,68481,68483],{"class":104,"line":532},[102,68476,59349],{"class":187},[102,68478,59302],{"class":119},[102,68480,68437],{"class":187},[102,68482,59357],{"class":108},[102,68484,266],{"class":119},[102,68486,68487,68489,68491,68493,68495],{"class":104,"line":538},[102,68488,59364],{"class":187},[102,68490,59302],{"class":119},[102,68492,9634],{"class":187},[102,68494,59357],{"class":108},[102,68496,266],{"class":119},[102,68498,68499,68501,68503,68505,68507,68509],{"class":104,"line":555},[102,68500,59311],{"class":187},[102,68502,59302],{"class":119},[102,68504,8423],{"class":187},[102,68506,989],{"class":187},[102,68508,59357],{"class":108},[102,68510,266],{"class":119},[102,68512,68513,68516,68518,68520,68522],{"class":104,"line":570},[102,68514,68515],{"class":187},"            font-size",[102,68517,59302],{"class":119},[102,68519,9576],{"class":187},[102,68521,59357],{"class":108},[102,68523,266],{"class":119},[102,68525,68526,68529,68531,68533,68535],{"class":104,"line":581},[102,68527,68528],{"class":187},"            line-height",[102,68530,59302],{"class":119},[102,68532,9634],{"class":187},[102,68534,59357],{"class":108},[102,68536,266],{"class":119},[102,68538,68539,68542,68544,68546,68548,68550,68553],{"class":104,"line":819},[102,68540,68541],{"class":187},"            border",[102,68543,59302],{"class":119},[102,68545,7039],{"class":187},[102,68547,59357],{"class":108},[102,68549,59386],{"class":187},[102,68551,68552],{"class":187}," #e0e0e0",[102,68554,266],{"class":119},[102,68556,68557,68560,68562,68564],{"class":104,"line":828},[102,68558,68559],{"class":187},"            outline",[102,68561,59302],{"class":119},[102,68563,62602],{"class":187},[102,68565,266],{"class":119},[102,68567,68568],{"class":104,"line":837},[102,68569,1252],{"class":119},[102,68571,68572],{"class":104,"line":842},[102,68573,652],{"emptyLinePlaceholder":651},[102,68575,68576,68578,68581],{"class":104,"line":855},[102,68577,68415],{"class":112},[102,68579,68580],{"class":112}," .search",[102,68582,1077],{"class":119},[102,68584,68585,68587,68589,68591,68593,68595,68598],{"class":104,"line":860},[102,68586,68541],{"class":187},[102,68588,59302],{"class":119},[102,68590,7039],{"class":187},[102,68592,59357],{"class":108},[102,68594,59386],{"class":187},[102,68596,68597],{"class":187}," #ff6700",[102,68599,266],{"class":119},[102,68601,68602],{"class":104,"line":871},[102,68603,1252],{"class":119},[102,68605,68606],{"class":104,"line":1359},[102,68607,652],{"emptyLinePlaceholder":651},[102,68609,68610,68613],{"class":104,"line":1368},[102,68611,68612],{"class":112},"        .result-list",[102,68614,1077],{"class":119},[102,68616,68617,68619,68621,68623],{"class":104,"line":1373},[102,68618,59337],{"class":187},[102,68620,59302],{"class":119},[102,68622,62602],{"class":187},[102,68624,266],{"class":119},[102,68626,68627,68629,68631,68633],{"class":104,"line":1378},[102,68628,68422],{"class":187},[102,68630,59302],{"class":119},[102,68632,62696],{"class":187},[102,68634,266],{"class":119},[102,68636,68637,68640,68642,68644],{"class":104,"line":1384},[102,68638,68639],{"class":187},"            left",[102,68641,59302],{"class":119},[102,68643,8423],{"class":187},[102,68645,266],{"class":119},[102,68647,68648,68651,68653,68655,68657],{"class":104,"line":1398},[102,68649,68650],{"class":187},"            top",[102,68652,59302],{"class":119},[102,68654,9634],{"class":187},[102,68656,59357],{"class":108},[102,68658,266],{"class":119},[102,68660,68661,68663,68665,68667,68669],{"class":104,"line":1424},[102,68662,59349],{"class":187},[102,68664,59302],{"class":119},[102,68666,68437],{"class":187},[102,68668,59357],{"class":108},[102,68670,266],{"class":119},[102,68672,68673,68675,68677,68679,68681,68683,68685],{"class":104,"line":1429},[102,68674,68541],{"class":187},[102,68676,59302],{"class":119},[102,68678,7039],{"class":187},[102,68680,59357],{"class":108},[102,68682,59386],{"class":187},[102,68684,68597],{"class":187},[102,68686,266],{"class":119},[102,68688,68689,68692,68694,68696],{"class":104,"line":1435},[102,68690,68691],{"class":187},"            border-top",[102,68693,59302],{"class":119},[102,68695,8423],{"class":187},[102,68697,266],{"class":119},[102,68699,68700,68703,68705,68708],{"class":104,"line":1450},[102,68701,68702],{"class":187},"            background",[102,68704,59302],{"class":119},[102,68706,68707],{"class":187},"#fff",[102,68709,266],{"class":119},[102,68711,68712],{"class":104,"line":1473},[102,68713,1252],{"class":119},[102,68715,68716],{"class":104,"line":1478},[102,68717,652],{"emptyLinePlaceholder":651},[102,68719,68720,68722,68724],{"class":104,"line":1484},[102,68721,68612],{"class":112},[102,68723,4378],{"class":59165},[102,68725,1077],{"class":119},[102,68727,68728,68730,68732,68735],{"class":104,"line":1499},[102,68729,59337],{"class":187},[102,68731,59302],{"class":119},[102,68733,68734],{"class":187},"block",[102,68736,266],{"class":119},[102,68738,68739,68741,68743,68745,68747,68750,68752],{"class":104,"line":1508},[102,68740,59311],{"class":187},[102,68742,59302],{"class":119},[102,68744,9379],{"class":187},[102,68746,59357],{"class":108},[102,68748,68749],{"class":187}," 15",[102,68751,59357],{"class":108},[102,68753,266],{"class":119},[102,68755,68756,68758,68760,68762,68764],{"class":104,"line":1513},[102,68757,68515],{"class":187},[102,68759,59302],{"class":119},[102,68761,9527],{"class":187},[102,68763,59357],{"class":108},[102,68765,266],{"class":119},[102,68767,68768,68771,68773,68776],{"class":104,"line":1524},[102,68769,68770],{"class":187},"            color",[102,68772,59302],{"class":119},[102,68774,68775],{"class":187},"#424242",[102,68777,266],{"class":119},[102,68779,68780,68783,68785,68787],{"class":104,"line":1529},[102,68781,68782],{"class":187},"            text-decoration",[102,68784,59302],{"class":119},[102,68786,62602],{"class":187},[102,68788,266],{"class":119},[102,68790,68791],{"class":104,"line":1538},[102,68792,1252],{"class":119},[102,68794,68795],{"class":104,"line":2089},[102,68796,652],{"emptyLinePlaceholder":651},[102,68798,68799,68801,68803,68806],{"class":104,"line":2094},[102,68800,68612],{"class":112},[102,68802,4378],{"class":59165},[102,68804,68805],{"class":112},":hover",[102,68807,1077],{"class":119},[102,68809,68810,68812,68814,68817],{"class":104,"line":2100},[102,68811,59505],{"class":187},[102,68813,59302],{"class":119},[102,68815,68816],{"class":187},"#eee",[102,68818,266],{"class":119},[102,68820,68821],{"class":104,"line":2106},[102,68822,1252],{"class":119},[102,68824,68825,68827,68829],{"class":104,"line":2120},[102,68826,59641],{"class":119},[102,68828,8955],{"class":59165},[102,68830,59172],{"class":119},[102,68832,68833],{"class":104,"line":2128},[102,68834,652],{"emptyLinePlaceholder":651},[102,68836,68837,68839,68841],{"class":104,"line":2149},[102,68838,59650],{"class":119},[102,68840,59199],{"class":59165},[102,68842,59172],{"class":119},[102,68844,68845],{"class":104,"line":2161},[102,68846,652],{"emptyLinePlaceholder":651},[102,68848,68849,68851,68853],{"class":104,"line":2167},[102,68850,1208],{"class":119},[102,68852,59665],{"class":59165},[102,68854,59172],{"class":119},[102,68856,68857,68859,68861,68863,68865,68868],{"class":104,"line":2190},[102,68858,59206],{"class":119},[102,68860,59476],{"class":59165},[102,68862,61351],{"class":112},[102,68864,260],{"class":119},[102,68866,68867],{"class":278},"\"mi\"",[102,68869,59172],{"class":119},[102,68871,68872,68874,68876,68878,68880,68883,68886,68888,68891],{"class":104,"line":2196},[102,68873,63167],{"class":119},[102,68875,61686],{"class":59165},[102,68877,61689],{"class":112},[102,68879,260],{"class":119},[102,68881,68882],{"class":278},"\"search\"",[102,68884,68885],{"class":112}," placeholder",[102,68887,260],{"class":119},[102,68889,68890],{"class":278},"\"小米笔记本\"",[102,68892,59172],{"class":119},[102,68894,68895,68897,68899,68901,68903,68906],{"class":104,"line":2219},[102,68896,63167],{"class":119},[102,68898,59],{"class":59165},[102,68900,61351],{"class":112},[102,68902,260],{"class":119},[102,68904,68905],{"class":278},"\"result-list\"",[102,68907,59172],{"class":119},[102,68909,68910,68913,68915,68918,68920,68923,68925,68928,68931,68933,68935,68937],{"class":104,"line":2233},[102,68911,68912],{"class":119},"            \u003C",[102,68914,62],{"class":59165},[102,68916,68917],{"class":119},">\u003C",[102,68919,9275],{"class":59165},[102,68921,68922],{"class":112}," href",[102,68924,260],{"class":119},[102,68926,68927],{"class":278},"\"#\"",[102,68929,68930],{"class":119},">全部商品\u003C\u002F",[102,68932,9275],{"class":59165},[102,68934,63179],{"class":119},[102,68936,62],{"class":59165},[102,68938,59172],{"class":119},[102,68940,68941,68943,68945,68947,68949,68951,68953,68955,68958,68960,68962,68964],{"class":104,"line":2253},[102,68942,68912],{"class":119},[102,68944,62],{"class":59165},[102,68946,68917],{"class":119},[102,68948,9275],{"class":59165},[102,68950,68922],{"class":112},[102,68952,260],{"class":119},[102,68954,68927],{"class":278},[102,68956,68957],{"class":119},">小米11\u003C\u002F",[102,68959,9275],{"class":59165},[102,68961,63179],{"class":119},[102,68963,62],{"class":59165},[102,68965,59172],{"class":119},[102,68967,68968,68970,68972,68974,68976,68978,68980,68982,68985,68987,68989,68991],{"class":104,"line":2259},[102,68969,68912],{"class":119},[102,68971,62],{"class":59165},[102,68973,68917],{"class":119},[102,68975,9275],{"class":59165},[102,68977,68922],{"class":112},[102,68979,260],{"class":119},[102,68981,68927],{"class":278},[102,68983,68984],{"class":119},">小米10S\u003C\u002F",[102,68986,9275],{"class":59165},[102,68988,63179],{"class":119},[102,68990,62],{"class":59165},[102,68992,59172],{"class":119},[102,68994,68995,68997,68999,69001,69003,69005,69007,69009,69012,69014,69016,69018],{"class":104,"line":2270},[102,68996,68912],{"class":119},[102,68998,62],{"class":59165},[102,69000,68917],{"class":119},[102,69002,9275],{"class":59165},[102,69004,68922],{"class":112},[102,69006,260],{"class":119},[102,69008,68927],{"class":278},[102,69010,69011],{"class":119},">小米笔记本\u003C\u002F",[102,69013,9275],{"class":59165},[102,69015,63179],{"class":119},[102,69017,62],{"class":59165},[102,69019,59172],{"class":119},[102,69021,69022,69024,69026,69028,69030,69032,69034,69036,69039,69041,69043,69045],{"class":104,"line":2293},[102,69023,68912],{"class":119},[102,69025,62],{"class":59165},[102,69027,68917],{"class":119},[102,69029,9275],{"class":59165},[102,69031,68922],{"class":112},[102,69033,260],{"class":119},[102,69035,68927],{"class":278},[102,69037,69038],{"class":119},">小米手机\u003C\u002F",[102,69040,9275],{"class":59165},[102,69042,63179],{"class":119},[102,69044,62],{"class":59165},[102,69046,59172],{"class":119},[102,69048,69049,69051,69053,69055,69057,69059,69061,69063,69066,69068,69070,69072],{"class":104,"line":2315},[102,69050,68912],{"class":119},[102,69052,62],{"class":59165},[102,69054,68917],{"class":119},[102,69056,9275],{"class":59165},[102,69058,68922],{"class":112},[102,69060,260],{"class":119},[102,69062,68927],{"class":278},[102,69064,69065],{"class":119},">黑鲨4\u003C\u002F",[102,69067,9275],{"class":59165},[102,69069,63179],{"class":119},[102,69071,62],{"class":59165},[102,69073,59172],{"class":119},[102,69075,69076,69078,69080,69082,69084,69086,69088,69090,69093,69095,69097,69099],{"class":104,"line":2320},[102,69077,68912],{"class":119},[102,69079,62],{"class":59165},[102,69081,68917],{"class":119},[102,69083,9275],{"class":59165},[102,69085,68922],{"class":112},[102,69087,260],{"class":119},[102,69089,68927],{"class":278},[102,69091,69092],{"class":119},">空调\u003C\u002F",[102,69094,9275],{"class":59165},[102,69096,63179],{"class":119},[102,69098,62],{"class":59165},[102,69100,59172],{"class":119},[102,69102,69103,69106,69108],{"class":104,"line":2326},[102,69104,69105],{"class":119},"        \u003C\u002F",[102,69107,59],{"class":59165},[102,69109,59172],{"class":119},[102,69111,69112,69114,69116],{"class":104,"line":2340},[102,69113,59641],{"class":119},[102,69115,59476],{"class":59165},[102,69117,59172],{"class":119},[102,69119,69120,69122,69124],{"class":104,"line":2354},[102,69121,59206],{"class":119},[102,69123,59678],{"class":59165},[102,69125,59172],{"class":119},[102,69127,69128],{"class":104,"line":2359},[102,69129,69130],{"class":126},"        \u002F\u002F 1. 获取元素\n",[102,69132,69133,69136,69138,69140,69142,69144,69146,69149],{"class":104,"line":2373},[102,69134,69135],{"class":108},"        const",[102,69137,68470],{"class":187},[102,69139,22296],{"class":108},[102,69141,62261],{"class":119},[102,69143,62264],{"class":112},[102,69145,380],{"class":119},[102,69147,69148],{"class":278},"'[type=search]'",[102,69150,390],{"class":119},[102,69152,69153,69155,69158,69160,69162,69164,69166,69169],{"class":104,"line":2378},[102,69154,69135],{"class":108},[102,69156,69157],{"class":187}," ul",[102,69159,22296],{"class":108},[102,69161,62261],{"class":119},[102,69163,62264],{"class":112},[102,69165,380],{"class":119},[102,69167,69168],{"class":278},"'.result-list'",[102,69170,390],{"class":119},[102,69172,69173],{"class":104,"line":2384},[102,69174,69175],{"class":126},"        \u002F\u002F console.log(input)\n",[102,69177,69178],{"class":104,"line":2389},[102,69179,69180],{"class":126},"        \u002F\u002F 2. 监听事件 获得焦点\n",[102,69182,69183,69186,69188,69190,69193,69195,69197],{"class":104,"line":2403},[102,69184,69185],{"class":119},"        input.",[102,69187,65678],{"class":112},[102,69189,380],{"class":119},[102,69191,69192],{"class":278},"'focus'",[102,69194,2571],{"class":119},[102,69196,62314],{"class":108},[102,69198,62317],{"class":119},[102,69200,69201],{"class":104,"line":2408},[102,69202,69203],{"class":126},"            \u002F\u002F ul显示\n",[102,69205,69206,69209,69211],{"class":104,"line":2413},[102,69207,69208],{"class":119},"            ul.style.display ",[102,69210,260],{"class":108},[102,69212,69213],{"class":278}," 'block'\n",[102,69215,69216],{"class":104,"line":2427},[102,69217,69218],{"class":126},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[102,69220,69221,69224,69226,69228,69231],{"class":104,"line":2440},[102,69222,69223],{"class":119},"            input.classList.",[102,69225,14139],{"class":112},[102,69227,380],{"class":119},[102,69229,69230],{"class":278},"'search'",[102,69232,390],{"class":119},[102,69234,69235],{"class":104,"line":2445},[102,69236,69237],{"class":119},"        })\n",[102,69239,69240],{"class":104,"line":2458},[102,69241,69242],{"class":126},"        \u002F\u002F 3. 监听事件 失去焦点\n",[102,69244,69245,69247,69249,69251,69254,69256,69258],{"class":104,"line":2463},[102,69246,69185],{"class":119},[102,69248,65678],{"class":112},[102,69250,380],{"class":119},[102,69252,69253],{"class":278},"'blur'",[102,69255,2571],{"class":119},[102,69257,62314],{"class":108},[102,69259,62317],{"class":119},[102,69261,69262,69264,69266],{"class":104,"line":2468},[102,69263,69208],{"class":119},[102,69265,260],{"class":108},[102,69267,69268],{"class":278}," 'none'\n",[102,69270,69271,69273,69275,69277,69279],{"class":104,"line":2473},[102,69272,69223],{"class":119},[102,69274,64871],{"class":112},[102,69276,380],{"class":119},[102,69278,69230],{"class":278},[102,69280,390],{"class":119},[102,69282,69283],{"class":104,"line":2486},[102,69284,69237],{"class":119},[102,69286,69287,69289,69291],{"class":104,"line":2491},[102,69288,59641],{"class":119},[102,69290,59678],{"class":59165},[102,69292,59172],{"class":119},[102,69294,69295,69297,69299],{"class":104,"line":40498},[102,69296,59650],{"class":119},[102,69298,59665],{"class":59165},[102,69300,59172],{"class":119},[102,69302,69303],{"class":104,"line":40504},[102,69304,652],{"emptyLinePlaceholder":651},[102,69306,69307,69309,69311],{"class":104,"line":40510},[102,69308,59650],{"class":119},[102,69310,58500],{"class":59165},[102,69312,59172],{"class":119},[7601,69314,69316],{"id":69315},"_3253-键盘事件","3.2.5.3 键盘事件",[14,69318,69319],{},"评论字数统计案例",[14,69321,69322],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,69324,69325],{},"牢记focus伪类选择器",[59209,69327],{"charSet":69328},"UTF-8",[59209,69330],{"name":69331,"content":69332},"viewport","width=device-width, initial-scale=1.0",[59272,69334,69335],{},"Document",[8955,69337,69338],{},"\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",[61686,69340],{"type":6778},[59,69342,69343,69346],{},[62,69344,69345],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[62,69347,69348],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[93,69350,69352],{"className":58498,"code":69351,"language":58500,"meta":98,"style":98},"\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",[83,69353,69354,69364,69378,69382,69390,69404,69424,69444,69457,69465,69472,69485,69499,69509,69519,69523,69527,69534,69546,69558,69570,69582,69611,69624,69628,69632,69641,69652,69664,69675,69686,69698,69709,69721,69737,69749,69753,69757,69768,69779,69789,69801,69805,69809,69817,69828,69838,69849,69861,69874,69886,69898,69902,69906,69915,69927,69938,69951,69962,69976,69980,69984,69991,70003,70015,70025,70029,70033,70042,70054,70064,70068,70072,70083,70093,70112,70125,70129,70133,70143,70153,70157,70161,70172,70183,70195,70207,70211,70215,70226,70237,70251,70255,70259,70270,70280,70292,70296,70304,70312,70316,70324,70339,70358,70398,70411,70419,70433,70453,70461,70476,70499,70517,70532,70552,70572,70592,70600,70608,70616,70624,70644,70664,70669,70686,70695,70699,70704,70720,70728,70732,70737,70754,70759,70784,70788,70792,70797,70802,70810,70818,70822],{"__ignoreMap":98},[102,69355,69356,69358,69360,69362],{"class":104,"line":105},[102,69357,59162],{"class":119},[102,69359,59166],{"class":59165},[102,69361,59169],{"class":112},[102,69363,59172],{"class":119},[102,69365,69366,69368,69370,69372,69374,69376],{"class":104,"line":116},[102,69367,1208],{"class":119},[102,69369,58500],{"class":59165},[102,69371,59181],{"class":112},[102,69373,260],{"class":119},[102,69375,59186],{"class":278},[102,69377,59172],{"class":119},[102,69379,69380],{"class":104,"line":123},[102,69381,652],{"emptyLinePlaceholder":651},[102,69383,69384,69386,69388],{"class":104,"line":130},[102,69385,1208],{"class":119},[102,69387,59199],{"class":59165},[102,69389,59172],{"class":119},[102,69391,69392,69394,69396,69398,69400,69402],{"class":104,"line":136},[102,69393,60009],{"class":119},[102,69395,59209],{"class":59165},[102,69397,59212],{"class":112},[102,69399,260],{"class":119},[102,69401,59217],{"class":278},[102,69403,59172],{"class":119},[102,69405,69406,69408,69410,69412,69414,69416,69418,69420,69422],{"class":104,"line":142},[102,69407,60009],{"class":119},[102,69409,59209],{"class":59165},[102,69411,59228],{"class":112},[102,69413,260],{"class":119},[102,69415,59233],{"class":278},[102,69417,59236],{"class":112},[102,69419,260],{"class":119},[102,69421,59241],{"class":278},[102,69423,59172],{"class":119},[102,69425,69426,69428,69430,69432,69434,69436,69438,69440,69442],{"class":104,"line":148},[102,69427,60009],{"class":119},[102,69429,59209],{"class":59165},[102,69431,387],{"class":112},[102,69433,260],{"class":119},[102,69435,59256],{"class":278},[102,69437,59236],{"class":112},[102,69439,260],{"class":119},[102,69441,59263],{"class":278},[102,69443,59172],{"class":119},[102,69445,69446,69448,69450,69453,69455],{"class":104,"line":157},[102,69447,60009],{"class":119},[102,69449,59272],{"class":59165},[102,69451,69452],{"class":119},">评论回车发布\u003C\u002F",[102,69454,59272],{"class":59165},[102,69456,59172],{"class":119},[102,69458,69459,69461,69463],{"class":104,"line":163},[102,69460,60009],{"class":119},[102,69462,8955],{"class":59165},[102,69464,59172],{"class":119},[102,69466,69467,69470],{"class":104,"line":175},[102,69468,69469],{"class":112},"    .wrapper",[102,69471,1077],{"class":119},[102,69473,69474,69477,69479,69481,69483],{"class":104,"line":181},[102,69475,69476],{"class":187},"      min-width",[102,69478,59302],{"class":119},[102,69480,12800],{"class":187},[102,69482,59357],{"class":108},[102,69484,266],{"class":119},[102,69486,69487,69490,69492,69495,69497],{"class":104,"line":202},[102,69488,69489],{"class":187},"      max-width",[102,69491,59302],{"class":119},[102,69493,69494],{"class":187},"800",[102,69496,59357],{"class":108},[102,69498,266],{"class":119},[102,69500,69501,69503,69505,69507],{"class":104,"line":208},[102,69502,62874],{"class":187},[102,69504,59302],{"class":119},[102,69506,59342],{"class":187},[102,69508,266],{"class":119},[102,69510,69511,69513,69515,69517],{"class":104,"line":214},[102,69512,62885],{"class":187},[102,69514,59302],{"class":119},[102,69516,59445],{"class":187},[102,69518,266],{"class":119},[102,69520,69521],{"class":104,"line":225},[102,69522,205],{"class":119},[102,69524,69525],{"class":104,"line":230},[102,69526,652],{"emptyLinePlaceholder":651},[102,69528,69529,69532],{"class":104,"line":236},[102,69530,69531],{"class":112},"    .avatar",[102,69533,1077],{"class":119},[102,69535,69536,69538,69540,69542,69544],{"class":104,"line":242},[102,69537,62636],{"class":187},[102,69539,59302],{"class":119},[102,69541,9634],{"class":187},[102,69543,59357],{"class":108},[102,69545,266],{"class":119},[102,69547,69548,69550,69552,69554,69556],{"class":104,"line":248},[102,69549,62650],{"class":187},[102,69551,59302],{"class":119},[102,69553,9634],{"class":187},[102,69555,59357],{"class":108},[102,69557,266],{"class":119},[102,69559,69560,69562,69564,69566,69568],{"class":104,"line":254},[102,69561,62999],{"class":187},[102,69563,59302],{"class":119},[102,69565,1445],{"class":187},[102,69567,9363],{"class":108},[102,69569,266],{"class":119},[102,69571,69572,69575,69577,69580],{"class":104,"line":269},[102,69573,69574],{"class":187},"      overflow",[102,69576,59302],{"class":119},[102,69578,69579],{"class":187},"hidden",[102,69581,266],{"class":119},[102,69583,69584,69587,69589,69592,69594,69597,69599,69602,69604,69606,69609],{"class":104,"line":298},[102,69585,69586],{"class":187},"      background",[102,69588,59302],{"class":119},[102,69590,69591],{"class":187},"url",[102,69593,380],{"class":119},[102,69595,69596],{"class":386},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[102,69598,22445],{"class":119},[102,69600,69601],{"class":187},"no-repeat",[102,69603,2705],{"class":187},[102,69605,32843],{"class":119},[102,69607,69608],{"class":187},"cover",[102,69610,266],{"class":119},[102,69612,69613,69616,69618,69620,69622],{"class":104,"line":502},[102,69614,69615],{"class":187},"      margin-right",[102,69617,59302],{"class":119},[102,69619,5016],{"class":187},[102,69621,59357],{"class":108},[102,69623,266],{"class":119},[102,69625,69626],{"class":104,"line":507},[102,69627,205],{"class":119},[102,69629,69630],{"class":104,"line":512},[102,69631,652],{"emptyLinePlaceholder":651},[102,69633,69634,69636,69639],{"class":104,"line":521},[102,69635,69469],{"class":112},[102,69637,69638],{"class":59165}," textarea",[102,69640,1077],{"class":119},[102,69642,69643,69646,69648,69650],{"class":104,"line":526},[102,69644,69645],{"class":187},"      outline",[102,69647,59302],{"class":119},[102,69649,62602],{"class":187},[102,69651,266],{"class":119},[102,69653,69654,69657,69659,69662],{"class":104,"line":532},[102,69655,69656],{"class":187},"      border-color",[102,69658,59302],{"class":119},[102,69660,69661],{"class":187},"transparent",[102,69663,266],{"class":119},[102,69665,69666,69669,69671,69673],{"class":104,"line":538},[102,69667,69668],{"class":187},"      resize",[102,69670,59302],{"class":119},[102,69672,62602],{"class":187},[102,69674,266],{"class":119},[102,69676,69677,69679,69681,69684],{"class":104,"line":555},[102,69678,69586],{"class":187},[102,69680,59302],{"class":119},[102,69682,69683],{"class":187},"#f5f5f5",[102,69685,266],{"class":119},[102,69687,69688,69690,69692,69694,69696],{"class":104,"line":570},[102,69689,62999],{"class":187},[102,69691,59302],{"class":119},[102,69693,9329],{"class":187},[102,69695,59357],{"class":108},[102,69697,266],{"class":119},[102,69699,69700,69703,69705,69707],{"class":104,"line":581},[102,69701,69702],{"class":187},"      flex",[102,69704,59302],{"class":119},[102,69706,7039],{"class":187},[102,69708,266],{"class":119},[102,69710,69711,69713,69715,69717,69719],{"class":104,"line":819},[102,69712,62560],{"class":187},[102,69714,59302],{"class":119},[102,69716,263],{"class":187},[102,69718,59357],{"class":108},[102,69720,266],{"class":119},[102,69722,69723,69726,69728,69730,69733,69735],{"class":104,"line":828},[102,69724,69725],{"class":187},"      transition",[102,69727,59302],{"class":119},[102,69729,35986],{"class":187},[102,69731,69732],{"class":187}," 0.5",[102,69734,9720],{"class":108},[102,69736,266],{"class":119},[102,69738,69739,69741,69743,69745,69747],{"class":104,"line":837},[102,69740,62650],{"class":187},[102,69742,59302],{"class":119},[102,69744,9972],{"class":187},[102,69746,59357],{"class":108},[102,69748,266],{"class":119},[102,69750,69751],{"class":104,"line":842},[102,69752,205],{"class":119},[102,69754,69755],{"class":104,"line":855},[102,69756,652],{"emptyLinePlaceholder":651},[102,69758,69759,69761,69763,69766],{"class":104,"line":860},[102,69760,69469],{"class":112},[102,69762,69638],{"class":59165},[102,69764,69765],{"class":112},":focus",[102,69767,1077],{"class":119},[102,69769,69770,69772,69774,69777],{"class":104,"line":871},[102,69771,69656],{"class":187},[102,69773,59302],{"class":119},[102,69775,69776],{"class":187},"#e4e4e4",[102,69778,266],{"class":119},[102,69780,69781,69783,69785,69787],{"class":104,"line":1359},[102,69782,69586],{"class":187},[102,69784,59302],{"class":119},[102,69786,68707],{"class":187},[102,69788,266],{"class":119},[102,69790,69791,69793,69795,69797,69799],{"class":104,"line":1368},[102,69792,62650],{"class":187},[102,69794,59302],{"class":119},[102,69796,1445],{"class":187},[102,69798,59357],{"class":108},[102,69800,266],{"class":119},[102,69802,69803],{"class":104,"line":1373},[102,69804,205],{"class":119},[102,69806,69807],{"class":104,"line":1378},[102,69808,652],{"emptyLinePlaceholder":651},[102,69810,69811,69813,69815],{"class":104,"line":1384},[102,69812,69469],{"class":112},[102,69814,65332],{"class":59165},[102,69816,1077],{"class":119},[102,69818,69819,69821,69823,69826],{"class":104,"line":1398},[102,69820,69586],{"class":187},[102,69822,59302],{"class":119},[102,69824,69825],{"class":187},"#00aeec",[102,69827,266],{"class":119},[102,69829,69830,69832,69834,69836],{"class":104,"line":1424},[102,69831,65281],{"class":187},[102,69833,59302],{"class":119},[102,69835,68707],{"class":187},[102,69837,266],{"class":119},[102,69839,69840,69843,69845,69847],{"class":104,"line":1429},[102,69841,69842],{"class":187},"      border",[102,69844,59302],{"class":119},[102,69846,62602],{"class":187},[102,69848,266],{"class":119},[102,69850,69851,69853,69855,69857,69859],{"class":104,"line":1435},[102,69852,62999],{"class":187},[102,69854,59302],{"class":119},[102,69856,9329],{"class":187},[102,69858,59357],{"class":108},[102,69860,266],{"class":119},[102,69862,69863,69866,69868,69870,69872],{"class":104,"line":1450},[102,69864,69865],{"class":187},"      margin-left",[102,69867,59302],{"class":119},[102,69869,263],{"class":187},[102,69871,59357],{"class":108},[102,69873,266],{"class":119},[102,69875,69876,69878,69880,69882,69884],{"class":104,"line":1473},[102,69877,62636],{"class":187},[102,69879,59302],{"class":119},[102,69881,9390],{"class":187},[102,69883,59357],{"class":108},[102,69885,266],{"class":119},[102,69887,69888,69891,69893,69896],{"class":104,"line":1478},[102,69889,69890],{"class":187},"      cursor",[102,69892,59302],{"class":119},[102,69894,69895],{"class":187},"pointer",[102,69897,266],{"class":119},[102,69899,69900],{"class":104,"line":1484},[102,69901,205],{"class":119},[102,69903,69904],{"class":104,"line":1499},[102,69905,652],{"emptyLinePlaceholder":651},[102,69907,69908,69910,69913],{"class":104,"line":1508},[102,69909,69469],{"class":112},[102,69911,69912],{"class":112}," .total",[102,69914,1077],{"class":119},[102,69916,69917,69919,69921,69923,69925],{"class":104,"line":1513},[102,69918,69615],{"class":187},[102,69920,59302],{"class":119},[102,69922,9639],{"class":187},[102,69924,59357],{"class":108},[102,69926,266],{"class":119},[102,69928,69929,69931,69933,69936],{"class":104,"line":1524},[102,69930,65281],{"class":187},[102,69932,59302],{"class":119},[102,69934,69935],{"class":187},"#999",[102,69937,266],{"class":119},[102,69939,69940,69943,69945,69947,69949],{"class":104,"line":1529},[102,69941,69942],{"class":187},"      margin-top",[102,69944,59302],{"class":119},[102,69946,9354],{"class":187},[102,69948,59357],{"class":108},[102,69950,266],{"class":119},[102,69952,69953,69956,69958,69960],{"class":104,"line":1538},[102,69954,69955],{"class":187},"      opacity",[102,69957,59302],{"class":119},[102,69959,8423],{"class":187},[102,69961,266],{"class":119},[102,69963,69964,69966,69968,69970,69972,69974],{"class":104,"line":2089},[102,69965,69725],{"class":187},[102,69967,59302],{"class":119},[102,69969,35986],{"class":187},[102,69971,69732],{"class":187},[102,69973,9720],{"class":108},[102,69975,266],{"class":119},[102,69977,69978],{"class":104,"line":2094},[102,69979,205],{"class":119},[102,69981,69982],{"class":104,"line":2100},[102,69983,652],{"emptyLinePlaceholder":651},[102,69985,69986,69989],{"class":104,"line":2106},[102,69987,69988],{"class":112},"    .list",[102,69990,1077],{"class":119},[102,69992,69993,69995,69997,69999,70001],{"class":104,"line":2120},[102,69994,69476],{"class":187},[102,69996,59302],{"class":119},[102,69998,12800],{"class":187},[102,70000,59357],{"class":108},[102,70002,266],{"class":119},[102,70004,70005,70007,70009,70011,70013],{"class":104,"line":2128},[102,70006,69489],{"class":187},[102,70008,59302],{"class":119},[102,70010,69494],{"class":187},[102,70012,59357],{"class":108},[102,70014,266],{"class":119},[102,70016,70017,70019,70021,70023],{"class":104,"line":2149},[102,70018,62874],{"class":187},[102,70020,59302],{"class":119},[102,70022,59342],{"class":187},[102,70024,266],{"class":119},[102,70026,70027],{"class":104,"line":2161},[102,70028,205],{"class":119},[102,70030,70031],{"class":104,"line":2167},[102,70032,652],{"emptyLinePlaceholder":651},[102,70034,70035,70037,70040],{"class":104,"line":2190},[102,70036,69988],{"class":112},[102,70038,70039],{"class":112}," .item",[102,70041,1077],{"class":119},[102,70043,70044,70046,70048,70050,70052],{"class":104,"line":2196},[102,70045,62636],{"class":187},[102,70047,59302],{"class":119},[102,70049,5569],{"class":187},[102,70051,9363],{"class":108},[102,70053,266],{"class":119},[102,70055,70056,70058,70060,70062],{"class":104,"line":2219},[102,70057,62874],{"class":187},[102,70059,59302],{"class":119},[102,70061,59342],{"class":187},[102,70063,266],{"class":119},[102,70065,70066],{"class":104,"line":2233},[102,70067,205],{"class":119},[102,70069,70070],{"class":104,"line":2253},[102,70071,652],{"emptyLinePlaceholder":651},[102,70073,70074,70076,70078,70081],{"class":104,"line":2259},[102,70075,69988],{"class":112},[102,70077,70039],{"class":112},[102,70079,70080],{"class":112}," .info",[102,70082,1077],{"class":119},[102,70084,70085,70087,70089,70091],{"class":104,"line":2270},[102,70086,69702],{"class":187},[102,70088,59302],{"class":119},[102,70090,7039],{"class":187},[102,70092,266],{"class":119},[102,70094,70095,70098,70100,70102,70104,70107,70110],{"class":104,"line":2293},[102,70096,70097],{"class":187},"      border-bottom",[102,70099,59302],{"class":119},[102,70101,7039],{"class":187},[102,70103,59357],{"class":108},[102,70105,70106],{"class":187}," dashed",[102,70108,70109],{"class":187}," #e4e4e4",[102,70111,266],{"class":119},[102,70113,70114,70117,70119,70121,70123],{"class":104,"line":2315},[102,70115,70116],{"class":187},"      padding-bottom",[102,70118,59302],{"class":119},[102,70120,263],{"class":187},[102,70122,59357],{"class":108},[102,70124,266],{"class":119},[102,70126,70127],{"class":104,"line":2320},[102,70128,205],{"class":119},[102,70130,70131],{"class":104,"line":2326},[102,70132,652],{"emptyLinePlaceholder":651},[102,70134,70135,70137,70139,70141],{"class":104,"line":2340},[102,70136,69988],{"class":112},[102,70138,70039],{"class":112},[102,70140,5073],{"class":59165},[102,70142,1077],{"class":119},[102,70144,70145,70147,70149,70151],{"class":104,"line":2354},[102,70146,62571],{"class":187},[102,70148,59302],{"class":119},[102,70150,8423],{"class":187},[102,70152,266],{"class":119},[102,70154,70155],{"class":104,"line":2359},[102,70156,205],{"class":119},[102,70158,70159],{"class":104,"line":2373},[102,70160,652],{"emptyLinePlaceholder":651},[102,70162,70163,70165,70167,70170],{"class":104,"line":2378},[102,70164,69988],{"class":112},[102,70166,70039],{"class":112},[102,70168,70169],{"class":112}," .name",[102,70171,1077],{"class":119},[102,70173,70174,70176,70178,70181],{"class":104,"line":2384},[102,70175,65281],{"class":187},[102,70177,59302],{"class":119},[102,70179,70180],{"class":187},"#FB7299",[102,70182,266],{"class":119},[102,70184,70185,70187,70189,70191,70193],{"class":104,"line":2389},[102,70186,62787],{"class":187},[102,70188,59302],{"class":119},[102,70190,9576],{"class":187},[102,70192,59357],{"class":108},[102,70194,266],{"class":119},[102,70196,70197,70200,70202,70205],{"class":104,"line":2403},[102,70198,70199],{"class":187},"      font-weight",[102,70201,59302],{"class":119},[102,70203,70204],{"class":187},"bold",[102,70206,266],{"class":119},[102,70208,70209],{"class":104,"line":2408},[102,70210,205],{"class":119},[102,70212,70213],{"class":104,"line":2413},[102,70214,652],{"emptyLinePlaceholder":651},[102,70216,70217,70219,70221,70224],{"class":104,"line":2427},[102,70218,69988],{"class":112},[102,70220,70039],{"class":112},[102,70222,70223],{"class":112}," .text",[102,70225,1077],{"class":119},[102,70227,70228,70230,70232,70235],{"class":104,"line":2440},[102,70229,65281],{"class":187},[102,70231,59302],{"class":119},[102,70233,70234],{"class":187},"#333",[102,70236,266],{"class":119},[102,70238,70239,70241,70243,70245,70247,70249],{"class":104,"line":2445},[102,70240,62560],{"class":187},[102,70242,59302],{"class":119},[102,70244,263],{"class":187},[102,70246,59357],{"class":108},[102,70248,866],{"class":187},[102,70250,266],{"class":119},[102,70252,70253],{"class":104,"line":2458},[102,70254,205],{"class":119},[102,70256,70257],{"class":104,"line":2463},[102,70258,652],{"emptyLinePlaceholder":651},[102,70260,70261,70263,70265,70268],{"class":104,"line":2468},[102,70262,69988],{"class":112},[102,70264,70039],{"class":112},[102,70266,70267],{"class":112}," .time",[102,70269,1077],{"class":119},[102,70271,70272,70274,70276,70278],{"class":104,"line":2473},[102,70273,65281],{"class":187},[102,70275,59302],{"class":119},[102,70277,69935],{"class":187},[102,70279,266],{"class":119},[102,70281,70282,70284,70286,70288,70290],{"class":104,"line":2486},[102,70283,62787],{"class":187},[102,70285,59302],{"class":119},[102,70287,9527],{"class":187},[102,70289,59357],{"class":108},[102,70291,266],{"class":119},[102,70293,70294],{"class":104,"line":2491},[102,70295,205],{"class":119},[102,70297,70298,70300,70302],{"class":104,"line":40498},[102,70299,60282],{"class":119},[102,70301,8955],{"class":59165},[102,70303,59172],{"class":119},[102,70305,70306,70308,70310],{"class":104,"line":40504},[102,70307,59650],{"class":119},[102,70309,59199],{"class":59165},[102,70311,59172],{"class":119},[102,70313,70314],{"class":104,"line":40510},[102,70315,652],{"emptyLinePlaceholder":651},[102,70317,70318,70320,70322],{"class":104,"line":40516},[102,70319,1208],{"class":119},[102,70321,59665],{"class":59165},[102,70323,59172],{"class":119},[102,70325,70326,70328,70330,70332,70334,70337],{"class":104,"line":40522},[102,70327,60009],{"class":119},[102,70329,59476],{"class":59165},[102,70331,61351],{"class":112},[102,70333,260],{"class":119},[102,70335,70336],{"class":278},"\"wrapper\"",[102,70338,59172],{"class":119},[102,70340,70341,70343,70345,70347,70349,70352,70354,70356],{"class":104,"line":40533},[102,70342,59206],{"class":119},[102,70344,9473],{"class":59165},[102,70346,61351],{"class":112},[102,70348,260],{"class":119},[102,70350,70351],{"class":278},"\"avatar\"",[102,70353,63179],{"class":119},[102,70355,9473],{"class":59165},[102,70357,59172],{"class":119},[102,70359,70360,70362,70364,70366,70368,70371,70373,70375,70378,70380,70382,70384,70387,70389,70392,70394,70396],{"class":104,"line":40539},[102,70361,59206],{"class":119},[102,70363,62153],{"class":59165},[102,70365,427],{"class":112},[102,70367,260],{"class":119},[102,70369,70370],{"class":278},"\"tx\"",[102,70372,68885],{"class":112},[102,70374,260],{"class":119},[102,70376,70377],{"class":278},"\"发一条友善的评论\"",[102,70379,62176],{"class":112},[102,70381,260],{"class":119},[102,70383,12514],{"class":278},[102,70385,70386],{"class":112}," maxlength",[102,70388,260],{"class":119},[102,70390,70391],{"class":278},"\"200\"",[102,70393,63179],{"class":119},[102,70395,62153],{"class":59165},[102,70397,59172],{"class":119},[102,70399,70400,70402,70404,70407,70409],{"class":104,"line":40559},[102,70401,59206],{"class":119},[102,70403,61752],{"class":59165},[102,70405,70406],{"class":119},">发布\u003C\u002F",[102,70408,61752],{"class":59165},[102,70410,59172],{"class":119},[102,70412,70413,70415,70417],{"class":104,"line":40565},[102,70414,60282],{"class":119},[102,70416,59476],{"class":59165},[102,70418,59172],{"class":119},[102,70420,70421,70423,70425,70427,70429,70431],{"class":104,"line":40576},[102,70422,60009],{"class":119},[102,70424,59476],{"class":59165},[102,70426,61351],{"class":112},[102,70428,260],{"class":119},[102,70430,70336],{"class":278},[102,70432,59172],{"class":119},[102,70434,70435,70437,70439,70441,70443,70446,70449,70451],{"class":104,"line":40582},[102,70436,59206],{"class":119},[102,70438,102],{"class":59165},[102,70440,61351],{"class":112},[102,70442,260],{"class":119},[102,70444,70445],{"class":278},"\"total\"",[102,70447,70448],{"class":119},">0\u002F200字\u003C\u002F",[102,70450,102],{"class":59165},[102,70452,59172],{"class":119},[102,70454,70455,70457,70459],{"class":104,"line":40588},[102,70456,60282],{"class":119},[102,70458,59476],{"class":59165},[102,70460,59172],{"class":119},[102,70462,70463,70465,70467,70469,70471,70474],{"class":104,"line":40594},[102,70464,60009],{"class":119},[102,70466,59476],{"class":59165},[102,70468,61351],{"class":112},[102,70470,260],{"class":119},[102,70472,70473],{"class":278},"\"list\"",[102,70475,59172],{"class":119},[102,70477,70478,70480,70482,70484,70486,70489,70492,70494,70497],{"class":104,"line":40600},[102,70479,59206],{"class":119},[102,70481,59476],{"class":59165},[102,70483,61351],{"class":112},[102,70485,260],{"class":119},[102,70487,70488],{"class":278},"\"item\"",[102,70490,70491],{"class":112}," style",[102,70493,260],{"class":119},[102,70495,70496],{"class":278},"\"display: none;\"",[102,70498,59172],{"class":119},[102,70500,70501,70503,70505,70507,70509,70511,70513,70515],{"class":104,"line":40606},[102,70502,63099],{"class":119},[102,70504,9473],{"class":59165},[102,70506,61351],{"class":112},[102,70508,260],{"class":119},[102,70510,70351],{"class":278},[102,70512,63179],{"class":119},[102,70514,9473],{"class":59165},[102,70516,59172],{"class":119},[102,70518,70519,70521,70523,70525,70527,70530],{"class":104,"line":40612},[102,70520,63099],{"class":119},[102,70522,59476],{"class":59165},[102,70524,61351],{"class":112},[102,70526,260],{"class":119},[102,70528,70529],{"class":278},"\"info\"",[102,70531,59172],{"class":119},[102,70533,70534,70536,70538,70540,70542,70545,70548,70550],{"class":104,"line":40618},[102,70535,63167],{"class":119},[102,70537,14],{"class":59165},[102,70539,61351],{"class":112},[102,70541,260],{"class":119},[102,70543,70544],{"class":278},"\"name\"",[102,70546,70547],{"class":119},">清风徐来\u003C\u002F",[102,70549,14],{"class":59165},[102,70551,59172],{"class":119},[102,70553,70554,70556,70558,70560,70562,70565,70568,70570],{"class":104,"line":40638},[102,70555,63167],{"class":119},[102,70557,14],{"class":59165},[102,70559,61351],{"class":112},[102,70561,260],{"class":119},[102,70563,70564],{"class":278},"\"text\"",[102,70566,70567],{"class":119},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[102,70569,14],{"class":59165},[102,70571,59172],{"class":119},[102,70573,70574,70576,70578,70580,70582,70585,70588,70590],{"class":104,"line":40644},[102,70575,63167],{"class":119},[102,70577,14],{"class":59165},[102,70579,61351],{"class":112},[102,70581,260],{"class":119},[102,70583,70584],{"class":278},"\"time\"",[102,70586,70587],{"class":119},">2022-10-10 20:29:21\u003C\u002F",[102,70589,14],{"class":59165},[102,70591,59172],{"class":119},[102,70593,70594,70596,70598],{"class":104,"line":40660},[102,70595,63272],{"class":119},[102,70597,59476],{"class":59165},[102,70599,59172],{"class":119},[102,70601,70602,70604,70606],{"class":104,"line":40666},[102,70603,59641],{"class":119},[102,70605,59476],{"class":59165},[102,70607,59172],{"class":119},[102,70609,70610,70612,70614],{"class":104,"line":40680},[102,70611,60282],{"class":119},[102,70613,59476],{"class":59165},[102,70615,59172],{"class":119},[102,70617,70618,70620,70622],{"class":104,"line":40686},[102,70619,60009],{"class":119},[102,70621,59678],{"class":59165},[102,70623,59172],{"class":119},[102,70625,70626,70628,70631,70633,70635,70637,70639,70642],{"class":104,"line":40701},[102,70627,19961],{"class":108},[102,70629,70630],{"class":187}," tx",[102,70632,22296],{"class":108},[102,70634,62261],{"class":119},[102,70636,62264],{"class":112},[102,70638,380],{"class":119},[102,70640,70641],{"class":278},"'#tx'",[102,70643,390],{"class":119},[102,70645,70646,70648,70651,70653,70655,70657,70659,70662],{"class":104,"line":40707},[102,70647,19961],{"class":108},[102,70649,70650],{"class":187}," total",[102,70652,22296],{"class":108},[102,70654,62261],{"class":119},[102,70656,62264],{"class":112},[102,70658,380],{"class":119},[102,70660,70661],{"class":278},"'.total'",[102,70663,390],{"class":119},[102,70665,70666],{"class":104,"line":40716},[102,70667,70668],{"class":126},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[102,70670,70671,70674,70676,70678,70680,70682,70684],{"class":104,"line":40722},[102,70672,70673],{"class":119},"    tx.",[102,70675,65678],{"class":112},[102,70677,380],{"class":119},[102,70679,69192],{"class":278},[102,70681,2571],{"class":119},[102,70683,62314],{"class":108},[102,70685,62317],{"class":119},[102,70687,70688,70691,70693],{"class":104,"line":40731},[102,70689,70690],{"class":119},"      total.style.opacity ",[102,70692,260],{"class":108},[102,70694,63564],{"class":187},[102,70696,70697],{"class":104,"line":40737},[102,70698,41326],{"class":119},[102,70700,70701],{"class":104,"line":40743},[102,70702,70703],{"class":126},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[102,70705,70706,70708,70710,70712,70714,70716,70718],{"class":104,"line":40752},[102,70707,70673],{"class":119},[102,70709,65678],{"class":112},[102,70711,380],{"class":119},[102,70713,69253],{"class":278},[102,70715,2571],{"class":119},[102,70717,62314],{"class":108},[102,70719,62317],{"class":119},[102,70721,70722,70724,70726],{"class":104,"line":40758},[102,70723,70690],{"class":119},[102,70725,260],{"class":108},[102,70727,55198],{"class":187},[102,70729,70730],{"class":104,"line":40769},[102,70731,41326],{"class":119},[102,70733,70734],{"class":104,"line":40775},[102,70735,70736],{"class":126},"    \u002F\u002F 3. 检测用户输入\n",[102,70738,70739,70741,70743,70745,70748,70750,70752],{"class":104,"line":40794},[102,70740,70673],{"class":119},[102,70742,65678],{"class":112},[102,70744,380],{"class":119},[102,70746,70747],{"class":278},"'input'",[102,70749,2571],{"class":119},[102,70751,62314],{"class":108},[102,70753,62317],{"class":119},[102,70755,70756],{"class":104,"line":40800},[102,70757,70758],{"class":126},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[102,70760,70761,70764,70766,70769,70772,70774,70777,70779,70781],{"class":104,"line":40811},[102,70762,70763],{"class":119},"      total.innerHTML ",[102,70765,260],{"class":108},[102,70767,70768],{"class":278}," `${",[102,70770,70771],{"class":119},"tx",[102,70773,9585],{"class":278},[102,70775,70776],{"class":119},"value",[102,70778,9585],{"class":278},[102,70780,59833],{"class":187},[102,70782,70783],{"class":278},"}\u002F200字`\n",[102,70785,70786],{"class":104,"line":40817},[102,70787,41326],{"class":119},[102,70789,70790],{"class":104,"line":40837},[102,70791,652],{"emptyLinePlaceholder":651},[102,70793,70794],{"class":104,"line":40853},[102,70795,70796],{"class":126},"    \u002F\u002F const str = 'andy'\n",[102,70798,70799],{"class":104,"line":40859},[102,70800,70801],{"class":126},"    \u002F\u002F console.log(str.length)\n",[102,70803,70804,70806,70808],{"class":104,"line":40873},[102,70805,60282],{"class":119},[102,70807,59678],{"class":59165},[102,70809,59172],{"class":119},[102,70811,70812,70814,70816],{"class":104,"line":40879},[102,70813,59650],{"class":119},[102,70815,59665],{"class":59165},[102,70817,59172],{"class":119},[102,70819,70820],{"class":104,"line":40885},[102,70821,652],{"emptyLinePlaceholder":651},[102,70823,70824,70826,70828],{"class":104,"line":40896},[102,70825,59650],{"class":119},[102,70827,58500],{"class":59165},[102,70829,59172],{"class":119},[7601,70831,70833],{"id":70832},"_3254-change事件","3.2.5.4 change事件",[14,70835,70836],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,70838,70839],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,70841,70842],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[93,70844,70846],{"className":58498,"code":70845,"language":58500,"meta":98,"style":98},"\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",[83,70847,70848,70858,70872,70876,70884,70898,70918,70930,70938,70942,70950,70964,70972,70990,71008,71020,71024,71032,71040,71044],{"__ignoreMap":98},[102,70849,70850,70852,70854,70856],{"class":104,"line":105},[102,70851,59162],{"class":119},[102,70853,59166],{"class":59165},[102,70855,59169],{"class":112},[102,70857,59172],{"class":119},[102,70859,70860,70862,70864,70866,70868,70870],{"class":104,"line":116},[102,70861,1208],{"class":119},[102,70863,58500],{"class":59165},[102,70865,59181],{"class":112},[102,70867,260],{"class":119},[102,70869,59186],{"class":278},[102,70871,59172],{"class":119},[102,70873,70874],{"class":104,"line":123},[102,70875,652],{"emptyLinePlaceholder":651},[102,70877,70878,70880,70882],{"class":104,"line":130},[102,70879,1208],{"class":119},[102,70881,59199],{"class":59165},[102,70883,59172],{"class":119},[102,70885,70886,70888,70890,70892,70894,70896],{"class":104,"line":136},[102,70887,60009],{"class":119},[102,70889,59209],{"class":59165},[102,70891,59212],{"class":112},[102,70893,260],{"class":119},[102,70895,59217],{"class":278},[102,70897,59172],{"class":119},[102,70899,70900,70902,70904,70906,70908,70910,70912,70914,70916],{"class":104,"line":142},[102,70901,60009],{"class":119},[102,70903,59209],{"class":59165},[102,70905,387],{"class":112},[102,70907,260],{"class":119},[102,70909,59256],{"class":278},[102,70911,59236],{"class":112},[102,70913,260],{"class":119},[102,70915,59263],{"class":278},[102,70917,59172],{"class":119},[102,70919,70920,70922,70924,70926,70928],{"class":104,"line":148},[102,70921,60009],{"class":119},[102,70923,59272],{"class":59165},[102,70925,59275],{"class":119},[102,70927,59272],{"class":59165},[102,70929,59172],{"class":119},[102,70931,70932,70934,70936],{"class":104,"line":157},[102,70933,59650],{"class":119},[102,70935,59199],{"class":59165},[102,70937,59172],{"class":119},[102,70939,70940],{"class":104,"line":163},[102,70941,652],{"emptyLinePlaceholder":651},[102,70943,70944,70946,70948],{"class":104,"line":175},[102,70945,1208],{"class":119},[102,70947,59665],{"class":59165},[102,70949,59172],{"class":119},[102,70951,70952,70954,70956,70958,70960,70962],{"class":104,"line":181},[102,70953,60009],{"class":119},[102,70955,61686],{"class":59165},[102,70957,61689],{"class":112},[102,70959,260],{"class":119},[102,70961,70564],{"class":278},[102,70963,59172],{"class":119},[102,70965,70966,70968,70970],{"class":104,"line":202},[102,70967,60009],{"class":119},[102,70969,59678],{"class":59165},[102,70971,59172],{"class":119},[102,70973,70974,70976,70978,70980,70982,70984,70986,70988],{"class":104,"line":208},[102,70975,19961],{"class":108},[102,70977,68470],{"class":187},[102,70979,22296],{"class":108},[102,70981,62261],{"class":119},[102,70983,62264],{"class":112},[102,70985,380],{"class":119},[102,70987,70747],{"class":278},[102,70989,390],{"class":119},[102,70991,70992,70995,70997,70999,71002,71004,71006],{"class":104,"line":214},[102,70993,70994],{"class":119},"    input.",[102,70996,65678],{"class":112},[102,70998,380],{"class":119},[102,71000,71001],{"class":278},"'change'",[102,71003,2571],{"class":119},[102,71005,62314],{"class":108},[102,71007,62317],{"class":119},[102,71009,71010,71012,71014,71016,71018],{"class":104,"line":225},[102,71011,66109],{"class":119},[102,71013,66112],{"class":112},[102,71015,380],{"class":119},[102,71017,9620],{"class":187},[102,71019,390],{"class":119},[102,71021,71022],{"class":104,"line":230},[102,71023,41326],{"class":119},[102,71025,71026,71028,71030],{"class":104,"line":236},[102,71027,60282],{"class":119},[102,71029,59678],{"class":59165},[102,71031,59172],{"class":119},[102,71033,71034,71036,71038],{"class":104,"line":242},[102,71035,59650],{"class":119},[102,71037,59665],{"class":59165},[102,71039,59172],{"class":119},[102,71041,71042],{"class":104,"line":248},[102,71043,652],{"emptyLinePlaceholder":651},[102,71045,71046,71048,71050],{"class":104,"line":254},[102,71047,59650],{"class":119},[102,71049,58500],{"class":59165},[102,71051,59172],{"class":119},[14,71053,71054],{},"总结：内容发生改变才回去触发",[48,71056,71058],{"id":71057},"_326-事件对象","3.2.6 事件对象",[7601,71060,71062],{"id":71061},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,71064,71065],{},[6750,71066],{"alt":98,"src":71067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,71069,71070],{},[6750,71071],{"alt":98,"src":71072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,71074,71075],{},"点击一次，就输出了事件对象，它是个对象",[14,71077,71078],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,71080,71081],{},[6750,71082],{"alt":98,"src":71083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[7601,71085,71087],{"id":71086},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,71089,71090],{},[6750,71091],{"alt":98,"src":71092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,71094,71095],{},"实现按特殊字符才是实现打印输出效果：",[93,71097,71099],{"className":60932,"code":71098,"language":60934,"meta":98,"style":98},"\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",[83,71100,71101,71109,71114,71128,71136,71141,71146,71151,71156,71161,71166,71171,71176,71181,71185,71189,71197],{"__ignoreMap":98},[102,71102,71103,71105,71107],{"class":104,"line":105},[102,71104,1208],{"class":119},[102,71106,59665],{"class":59165},[102,71108,59172],{"class":119},[102,71110,71111],{"class":104,"line":116},[102,71112,71113],{"class":126},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[102,71115,71116,71118,71120,71122,71124,71126],{"class":104,"line":123},[102,71117,60009],{"class":119},[102,71119,61686],{"class":59165},[102,71121,61689],{"class":112},[102,71123,260],{"class":119},[102,71125,70564],{"class":278},[102,71127,59172],{"class":119},[102,71129,71130,71132,71134],{"class":104,"line":130},[102,71131,60009],{"class":119},[102,71133,59678],{"class":59165},[102,71135,59172],{"class":119},[102,71137,71138],{"class":104,"line":136},[102,71139,71140],{"class":119},"    \u002F\u002F const btn = document.querySelector('button')\n",[102,71142,71143],{"class":104,"line":142},[102,71144,71145],{"class":119},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[102,71147,71148],{"class":104,"line":148},[102,71149,71150],{"class":119},"    \u002F\u002F   console.log(e);\n",[102,71152,71153],{"class":104,"line":157},[102,71154,71155],{"class":119},"    \u002F\u002F })\n",[102,71157,71158],{"class":104,"line":163},[102,71159,71160],{"class":119},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[102,71162,71163],{"class":104,"line":175},[102,71164,71165],{"class":119},"    const input = document.querySelector('input')\n",[102,71167,71168],{"class":104,"line":181},[102,71169,71170],{"class":119},"    input.addEventListener('keyup', function (e) {\n",[102,71172,71173],{"class":104,"line":202},[102,71174,71175],{"class":119},"      if (e.key === 'Enter') {\n",[102,71177,71178],{"class":104,"line":208},[102,71179,71180],{"class":119},"        console.log('我按下了回车键')\n",[102,71182,71183],{"class":104,"line":214},[102,71184,60263],{"class":119},[102,71186,71187],{"class":104,"line":225},[102,71188,41326],{"class":119},[102,71190,71191,71193,71195],{"class":104,"line":230},[102,71192,60282],{"class":119},[102,71194,59678],{"class":59165},[102,71196,59172],{"class":119},[102,71198,71199,71201,71203],{"class":104,"line":236},[102,71200,59650],{"class":119},[102,71202,59665],{"class":59165},[102,71204,59172],{"class":119},[7601,71206,71208],{"id":71207},"_3263-trim方法","3.2.6.3 trim方法",[14,71210,71211],{},[6750,71212],{"alt":98,"src":71213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,71215,71216],{},[6750,71217],{"alt":98,"src":71218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,71220,71221],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,71223,71224],{},"str.trim()",[48,71226,71228],{"id":71227},"_327-环境对象","3.2.7 环境对象",[14,71230,71231],{},[6750,71232],{"alt":98,"src":71233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,71235,71236],{},[6750,71237],{"alt":98,"src":71238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,71240,71241],{},[6750,71242],{"alt":98,"src":71243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,71245,71246],{},"实际函数调用是window.fn()",[14,71248,71249],{},"普通函数里面this指向的是window",[59,71251,71252,71255,71258],{},[62,71253,71254],{},"在普通函数下，this指向的是window",[62,71256,71257],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[62,71259,71260],{},"箭头函数没有this",[14,71262,71263],{},"粗略记法就是：谁调用，this就指向谁",[14,71265,71266],{},[6750,71267],{"alt":98,"src":71268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,71270,71271],{},[6750,71272],{"alt":98,"src":71273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,71275,71276],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,71278,71279],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[93,71281,71283],{"className":60932,"code":71282,"language":60934,"meta":98,"style":98},"\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",[83,71284,71285,71293,71305,71313,71318,71323,71328,71333,71337,71345],{"__ignoreMap":98},[102,71286,71287,71289,71291],{"class":104,"line":105},[102,71288,1208],{"class":119},[102,71290,59665],{"class":59165},[102,71292,59172],{"class":119},[102,71294,71295,71297,71299,71301,71303],{"class":104,"line":116},[102,71296,60009],{"class":119},[102,71298,61752],{"class":59165},[102,71300,61758],{"class":119},[102,71302,61752],{"class":59165},[102,71304,59172],{"class":119},[102,71306,71307,71309,71311],{"class":104,"line":123},[102,71308,60009],{"class":119},[102,71310,59678],{"class":59165},[102,71312,59172],{"class":119},[102,71314,71315],{"class":104,"line":130},[102,71316,71317],{"class":119},"    const button = document.querySelector('button')\n",[102,71319,71320],{"class":104,"line":136},[102,71321,71322],{"class":119},"    button.addEventListener('click', function () {\n",[102,71324,71325],{"class":104,"line":142},[102,71326,71327],{"class":119},"      \u002F\u002F console.log(this);\n",[102,71329,71330],{"class":104,"line":148},[102,71331,71332],{"class":119},"      this.style.color = 'pink'\n",[102,71334,71335],{"class":104,"line":157},[102,71336,41326],{"class":119},[102,71338,71339,71341,71343],{"class":104,"line":163},[102,71340,60282],{"class":119},[102,71342,59678],{"class":59165},[102,71344,59172],{"class":119},[102,71346,71347,71349,71351],{"class":104,"line":175},[102,71348,59650],{"class":119},[102,71350,59665],{"class":59165},[102,71352,59172],{"class":119},[48,71354,71356],{"id":71355},"_328-回调函数","3.2.8 回调函数",[14,71358,71359],{},[6750,71360],{"alt":98,"src":71361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,71363,71364],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,71366,20072],{},[59,71368,71369,71372,71375],{},[62,71370,71371],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[62,71373,71374],{},"回调函数本质还是函数，只不过把它当成参数使用",[62,71376,71377],{},"使用匿名函数做为回调函数比较常见",[48,71379,71381],{"id":71380},"_329-tab栏切换","3.2.9 tab栏切换",[14,71383,71384],{},[6750,71385],{"alt":98,"src":71386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[93,71388,71390],{"className":58498,"code":71389,"language":58500,"meta":98,"style":98},"\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",[83,71391,71392,71402,71416,71420,71428,71442,71462,71482,71495,71503,71509,71519,71529,71533,71537,71544,71557,71570,71582,71598,71602,71606,71613,71625,71637,71649,71659,71669,71673,71677,71686,71698,71709,71721,71725,71729,71737,71747,71757,71767,71771,71775,71785,71799,71811,71815,71819,71831,71842,71859,71869,71873,71877,71892,71903,71913,71917,71921,71928,71943,71947,71951,71959,71969,71973,71977,71986,71996,72000,72008,72016,72020,72028,72043,72058,72071,72079,72113,72140,72167,72194,72221,72229,72237,72252,72289,72324,72359,72394,72429,72437,72445,72453,72458,72463,72483,72488,72517,72522,72527,72545,72550,72555,72560,72582,72587,72603,72607,72612,72617,72638,72643,72672,72676,72681,72685,72693,72701,72705],{"__ignoreMap":98},[102,71393,71394,71396,71398,71400],{"class":104,"line":105},[102,71395,59162],{"class":119},[102,71397,59166],{"class":59165},[102,71399,59169],{"class":112},[102,71401,59172],{"class":119},[102,71403,71404,71406,71408,71410,71412,71414],{"class":104,"line":116},[102,71405,1208],{"class":119},[102,71407,58500],{"class":59165},[102,71409,59181],{"class":112},[102,71411,260],{"class":119},[102,71413,59186],{"class":278},[102,71415,59172],{"class":119},[102,71417,71418],{"class":104,"line":123},[102,71419,652],{"emptyLinePlaceholder":651},[102,71421,71422,71424,71426],{"class":104,"line":130},[102,71423,1208],{"class":119},[102,71425,59199],{"class":59165},[102,71427,59172],{"class":119},[102,71429,71430,71432,71434,71436,71438,71440],{"class":104,"line":136},[102,71431,60009],{"class":119},[102,71433,59209],{"class":59165},[102,71435,59212],{"class":112},[102,71437,260],{"class":119},[102,71439,59217],{"class":278},[102,71441,66992],{"class":119},[102,71443,71444,71446,71448,71450,71452,71454,71456,71458,71460],{"class":104,"line":142},[102,71445,60009],{"class":119},[102,71447,59209],{"class":59165},[102,71449,59228],{"class":112},[102,71451,260],{"class":119},[102,71453,59233],{"class":278},[102,71455,59236],{"class":112},[102,71457,260],{"class":119},[102,71459,59241],{"class":278},[102,71461,66992],{"class":119},[102,71463,71464,71466,71468,71470,71472,71474,71476,71478,71480],{"class":104,"line":148},[102,71465,60009],{"class":119},[102,71467,59209],{"class":59165},[102,71469,387],{"class":112},[102,71471,260],{"class":119},[102,71473,59256],{"class":278},[102,71475,59236],{"class":112},[102,71477,260],{"class":119},[102,71479,59263],{"class":278},[102,71481,66992],{"class":119},[102,71483,71484,71486,71488,71491,71493],{"class":104,"line":157},[102,71485,60009],{"class":119},[102,71487,59272],{"class":59165},[102,71489,71490],{"class":119},">tab栏切换\u003C\u002F",[102,71492,59272],{"class":59165},[102,71494,59172],{"class":119},[102,71496,71497,71499,71501],{"class":104,"line":163},[102,71498,60009],{"class":119},[102,71500,8955],{"class":59165},[102,71502,59172],{"class":119},[102,71504,71505,71507],{"class":104,"line":175},[102,71506,15198],{"class":59165},[102,71508,1077],{"class":119},[102,71510,71511,71513,71515,71517],{"class":104,"line":181},[102,71512,62571],{"class":187},[102,71514,59302],{"class":119},[102,71516,8423],{"class":187},[102,71518,266],{"class":119},[102,71520,71521,71523,71525,71527],{"class":104,"line":202},[102,71522,62560],{"class":187},[102,71524,59302],{"class":119},[102,71526,8423],{"class":187},[102,71528,266],{"class":119},[102,71530,71531],{"class":104,"line":208},[102,71532,205],{"class":119},[102,71534,71535],{"class":104,"line":214},[102,71536,652],{"emptyLinePlaceholder":651},[102,71538,71539,71542],{"class":104,"line":225},[102,71540,71541],{"class":112},"    .tab",[102,71543,1077],{"class":119},[102,71545,71546,71548,71550,71553,71555],{"class":104,"line":230},[102,71547,62636],{"class":187},[102,71549,59302],{"class":119},[102,71551,71552],{"class":187},"590",[102,71554,59357],{"class":108},[102,71556,266],{"class":119},[102,71558,71559,71561,71563,71566,71568],{"class":104,"line":236},[102,71560,62650],{"class":187},[102,71562,59302],{"class":119},[102,71564,71565],{"class":187},"340",[102,71567,59357],{"class":108},[102,71569,266],{"class":119},[102,71571,71572,71574,71576,71578,71580],{"class":104,"line":242},[102,71573,62571],{"class":187},[102,71575,59302],{"class":119},[102,71577,5016],{"class":187},[102,71579,59357],{"class":108},[102,71581,266],{"class":119},[102,71583,71584,71586,71588,71590,71592,71594,71596],{"class":104,"line":248},[102,71585,69842],{"class":187},[102,71587,59302],{"class":119},[102,71589,7039],{"class":187},[102,71591,59357],{"class":108},[102,71593,59386],{"class":187},[102,71595,70109],{"class":187},[102,71597,266],{"class":119},[102,71599,71600],{"class":104,"line":254},[102,71601,205],{"class":119},[102,71603,71604],{"class":104,"line":269},[102,71605,652],{"emptyLinePlaceholder":651},[102,71607,71608,71611],{"class":104,"line":298},[102,71609,71610],{"class":112},"    .tab-nav",[102,71612,1077],{"class":119},[102,71614,71615,71617,71619,71621,71623],{"class":104,"line":502},[102,71616,62636],{"class":187},[102,71618,59302],{"class":119},[102,71620,5569],{"class":187},[102,71622,9363],{"class":108},[102,71624,266],{"class":119},[102,71626,71627,71629,71631,71633,71635],{"class":104,"line":507},[102,71628,62650],{"class":187},[102,71630,59302],{"class":119},[102,71632,9929],{"class":187},[102,71634,59357],{"class":108},[102,71636,266],{"class":119},[102,71638,71639,71641,71643,71645,71647],{"class":104,"line":512},[102,71640,65224],{"class":187},[102,71642,59302],{"class":119},[102,71644,9929],{"class":187},[102,71646,59357],{"class":108},[102,71648,266],{"class":119},[102,71650,71651,71653,71655,71657],{"class":104,"line":521},[102,71652,62874],{"class":187},[102,71654,59302],{"class":119},[102,71656,59342],{"class":187},[102,71658,266],{"class":119},[102,71660,71661,71663,71665,71667],{"class":104,"line":526},[102,71662,62885],{"class":187},[102,71664,59302],{"class":119},[102,71666,59533],{"class":187},[102,71668,266],{"class":119},[102,71670,71671],{"class":104,"line":532},[102,71672,205],{"class":119},[102,71674,71675],{"class":104,"line":538},[102,71676,652],{"emptyLinePlaceholder":651},[102,71678,71679,71681,71684],{"class":104,"line":555},[102,71680,71610],{"class":112},[102,71682,71683],{"class":59165}," h3",[102,71685,1077],{"class":119},[102,71687,71688,71690,71692,71694,71696],{"class":104,"line":570},[102,71689,62787],{"class":187},[102,71691,59302],{"class":119},[102,71693,9823],{"class":187},[102,71695,59357],{"class":108},[102,71697,266],{"class":119},[102,71699,71700,71702,71704,71707],{"class":104,"line":581},[102,71701,70199],{"class":187},[102,71703,59302],{"class":119},[102,71705,71706],{"class":187},"normal",[102,71708,266],{"class":119},[102,71710,71711,71713,71715,71717,71719],{"class":104,"line":819},[102,71712,69865],{"class":187},[102,71714,59302],{"class":119},[102,71716,5016],{"class":187},[102,71718,59357],{"class":108},[102,71720,266],{"class":119},[102,71722,71723],{"class":104,"line":828},[102,71724,205],{"class":119},[102,71726,71727],{"class":104,"line":837},[102,71728,652],{"emptyLinePlaceholder":651},[102,71730,71731,71733,71735],{"class":104,"line":842},[102,71732,71610],{"class":112},[102,71734,69157],{"class":59165},[102,71736,1077],{"class":119},[102,71738,71739,71741,71743,71745],{"class":104,"line":855},[102,71740,62597],{"class":187},[102,71742,59302],{"class":119},[102,71744,62602],{"class":187},[102,71746,266],{"class":119},[102,71748,71749,71751,71753,71755],{"class":104,"line":860},[102,71750,62874],{"class":187},[102,71752,59302],{"class":119},[102,71754,59342],{"class":187},[102,71756,266],{"class":119},[102,71758,71759,71761,71763,71765],{"class":104,"line":871},[102,71760,62885],{"class":187},[102,71762,59302],{"class":119},[102,71764,59445],{"class":187},[102,71766,266],{"class":119},[102,71768,71769],{"class":104,"line":1359},[102,71770,205],{"class":119},[102,71772,71773],{"class":104,"line":1368},[102,71774,652],{"emptyLinePlaceholder":651},[102,71776,71777,71779,71781,71783],{"class":104,"line":1373},[102,71778,71610],{"class":112},[102,71780,69157],{"class":59165},[102,71782,62940],{"class":59165},[102,71784,1077],{"class":119},[102,71786,71787,71789,71791,71793,71795,71797],{"class":104,"line":1378},[102,71788,62571],{"class":187},[102,71790,59302],{"class":119},[102,71792,8423],{"class":187},[102,71794,17718],{"class":187},[102,71796,59357],{"class":108},[102,71798,266],{"class":119},[102,71800,71801,71803,71805,71807,71809],{"class":104,"line":1384},[102,71802,62787],{"class":187},[102,71804,59302],{"class":119},[102,71806,9576],{"class":187},[102,71808,59357],{"class":108},[102,71810,266],{"class":119},[102,71812,71813],{"class":104,"line":1398},[102,71814,205],{"class":119},[102,71816,71817],{"class":104,"line":1424},[102,71818,652],{"emptyLinePlaceholder":651},[102,71820,71821,71823,71825,71827,71829],{"class":104,"line":1429},[102,71822,71610],{"class":112},[102,71824,69157],{"class":59165},[102,71826,62940],{"class":59165},[102,71828,4378],{"class":59165},[102,71830,1077],{"class":119},[102,71832,71833,71836,71838,71840],{"class":104,"line":1435},[102,71834,71835],{"class":187},"      text-decoration",[102,71837,59302],{"class":119},[102,71839,62602],{"class":187},[102,71841,266],{"class":119},[102,71843,71844,71846,71848,71850,71852,71854,71857],{"class":104,"line":1450},[102,71845,70097],{"class":187},[102,71847,59302],{"class":119},[102,71849,7044],{"class":187},[102,71851,59357],{"class":108},[102,71853,59386],{"class":187},[102,71855,71856],{"class":187}," transparent",[102,71858,266],{"class":119},[102,71860,71861,71863,71865,71867],{"class":104,"line":1473},[102,71862,65281],{"class":187},[102,71864,59302],{"class":119},[102,71866,70234],{"class":187},[102,71868,266],{"class":119},[102,71870,71871],{"class":104,"line":1478},[102,71872,205],{"class":119},[102,71874,71875],{"class":104,"line":1484},[102,71876,652],{"emptyLinePlaceholder":651},[102,71878,71879,71881,71883,71885,71887,71890],{"class":104,"line":1499},[102,71880,71610],{"class":112},[102,71882,69157],{"class":59165},[102,71884,62940],{"class":59165},[102,71886,4378],{"class":59165},[102,71888,71889],{"class":112},".active",[102,71891,1077],{"class":119},[102,71893,71894,71896,71898,71901],{"class":104,"line":1508},[102,71895,69656],{"class":187},[102,71897,59302],{"class":119},[102,71899,71900],{"class":187},"#e1251b",[102,71902,266],{"class":119},[102,71904,71905,71907,71909,71911],{"class":104,"line":1513},[102,71906,65281],{"class":187},[102,71908,59302],{"class":119},[102,71910,71900],{"class":187},[102,71912,266],{"class":119},[102,71914,71915],{"class":104,"line":1524},[102,71916,205],{"class":119},[102,71918,71919],{"class":104,"line":1529},[102,71920,652],{"emptyLinePlaceholder":651},[102,71922,71923,71926],{"class":104,"line":1538},[102,71924,71925],{"class":112},"    .tab-content",[102,71927,1077],{"class":119},[102,71929,71930,71932,71934,71936,71939,71941],{"class":104,"line":2089},[102,71931,62560],{"class":187},[102,71933,59302],{"class":119},[102,71935,8423],{"class":187},[102,71937,71938],{"class":187}," 16",[102,71940,59357],{"class":108},[102,71942,266],{"class":119},[102,71944,71945],{"class":104,"line":2094},[102,71946,205],{"class":119},[102,71948,71949],{"class":104,"line":2100},[102,71950,652],{"emptyLinePlaceholder":651},[102,71952,71953,71955,71957],{"class":104,"line":2106},[102,71954,71925],{"class":112},[102,71956,70039],{"class":112},[102,71958,1077],{"class":119},[102,71960,71961,71963,71965,71967],{"class":104,"line":2120},[102,71962,62874],{"class":187},[102,71964,59302],{"class":119},[102,71966,62602],{"class":187},[102,71968,266],{"class":119},[102,71970,71971],{"class":104,"line":2128},[102,71972,205],{"class":119},[102,71974,71975],{"class":104,"line":2149},[102,71976,652],{"emptyLinePlaceholder":651},[102,71978,71979,71981,71984],{"class":104,"line":2161},[102,71980,71925],{"class":112},[102,71982,71983],{"class":112}," .item.active",[102,71985,1077],{"class":119},[102,71987,71988,71990,71992,71994],{"class":104,"line":2167},[102,71989,62874],{"class":187},[102,71991,59302],{"class":119},[102,71993,68734],{"class":187},[102,71995,266],{"class":119},[102,71997,71998],{"class":104,"line":2190},[102,71999,205],{"class":119},[102,72001,72002,72004,72006],{"class":104,"line":2196},[102,72003,60282],{"class":119},[102,72005,8955],{"class":59165},[102,72007,59172],{"class":119},[102,72009,72010,72012,72014],{"class":104,"line":2219},[102,72011,59650],{"class":119},[102,72013,59199],{"class":59165},[102,72015,59172],{"class":119},[102,72017,72018],{"class":104,"line":2233},[102,72019,652],{"emptyLinePlaceholder":651},[102,72021,72022,72024,72026],{"class":104,"line":2253},[102,72023,1208],{"class":119},[102,72025,59665],{"class":59165},[102,72027,59172],{"class":119},[102,72029,72030,72032,72034,72036,72038,72041],{"class":104,"line":2259},[102,72031,60009],{"class":119},[102,72033,59476],{"class":59165},[102,72035,61351],{"class":112},[102,72037,260],{"class":119},[102,72039,72040],{"class":278},"\"tab\"",[102,72042,59172],{"class":119},[102,72044,72045,72047,72049,72051,72053,72056],{"class":104,"line":2270},[102,72046,59206],{"class":119},[102,72048,59476],{"class":59165},[102,72050,61351],{"class":112},[102,72052,260],{"class":119},[102,72054,72055],{"class":278},"\"tab-nav\"",[102,72057,59172],{"class":119},[102,72059,72060,72062,72064,72067,72069],{"class":104,"line":2293},[102,72061,63099],{"class":119},[102,72063,48],{"class":59165},[102,72065,72066],{"class":119},">每日特价\u003C\u002F",[102,72068,48],{"class":59165},[102,72070,59172],{"class":119},[102,72072,72073,72075,72077],{"class":104,"line":2315},[102,72074,63099],{"class":119},[102,72076,59],{"class":59165},[102,72078,59172],{"class":119},[102,72080,72081,72083,72085,72087,72089,72091,72093,72095,72097,72099,72102,72105,72107,72109,72111],{"class":104,"line":2320},[102,72082,63167],{"class":119},[102,72084,62],{"class":59165},[102,72086,68917],{"class":119},[102,72088,9275],{"class":59165},[102,72090,61351],{"class":112},[102,72092,260],{"class":119},[102,72094,67571],{"class":278},[102,72096,68922],{"class":112},[102,72098,260],{"class":119},[102,72100,72101],{"class":278},"\"javascript:;\"",[102,72103,72104],{"class":119},">精选\u003C\u002F",[102,72106,9275],{"class":59165},[102,72108,63179],{"class":119},[102,72110,62],{"class":59165},[102,72112,59172],{"class":119},[102,72114,72115,72117,72119,72121,72123,72125,72127,72129,72132,72134,72136,72138],{"class":104,"line":2326},[102,72116,63167],{"class":119},[102,72118,62],{"class":59165},[102,72120,68917],{"class":119},[102,72122,9275],{"class":59165},[102,72124,68922],{"class":112},[102,72126,260],{"class":119},[102,72128,72101],{"class":278},[102,72130,72131],{"class":119},">美食\u003C\u002F",[102,72133,9275],{"class":59165},[102,72135,63179],{"class":119},[102,72137,62],{"class":59165},[102,72139,59172],{"class":119},[102,72141,72142,72144,72146,72148,72150,72152,72154,72156,72159,72161,72163,72165],{"class":104,"line":2340},[102,72143,63167],{"class":119},[102,72145,62],{"class":59165},[102,72147,68917],{"class":119},[102,72149,9275],{"class":59165},[102,72151,68922],{"class":112},[102,72153,260],{"class":119},[102,72155,72101],{"class":278},[102,72157,72158],{"class":119},">百货\u003C\u002F",[102,72160,9275],{"class":59165},[102,72162,63179],{"class":119},[102,72164,62],{"class":59165},[102,72166,59172],{"class":119},[102,72168,72169,72171,72173,72175,72177,72179,72181,72183,72186,72188,72190,72192],{"class":104,"line":2354},[102,72170,63167],{"class":119},[102,72172,62],{"class":59165},[102,72174,68917],{"class":119},[102,72176,9275],{"class":59165},[102,72178,68922],{"class":112},[102,72180,260],{"class":119},[102,72182,72101],{"class":278},[102,72184,72185],{"class":119},">个护\u003C\u002F",[102,72187,9275],{"class":59165},[102,72189,63179],{"class":119},[102,72191,62],{"class":59165},[102,72193,59172],{"class":119},[102,72195,72196,72198,72200,72202,72204,72206,72208,72210,72213,72215,72217,72219],{"class":104,"line":2359},[102,72197,63167],{"class":119},[102,72199,62],{"class":59165},[102,72201,68917],{"class":119},[102,72203,9275],{"class":59165},[102,72205,68922],{"class":112},[102,72207,260],{"class":119},[102,72209,72101],{"class":278},[102,72211,72212],{"class":119},">预告\u003C\u002F",[102,72214,9275],{"class":59165},[102,72216,63179],{"class":119},[102,72218,62],{"class":59165},[102,72220,59172],{"class":119},[102,72222,72223,72225,72227],{"class":104,"line":2373},[102,72224,63272],{"class":119},[102,72226,59],{"class":59165},[102,72228,59172],{"class":119},[102,72230,72231,72233,72235],{"class":104,"line":2378},[102,72232,59641],{"class":119},[102,72234,59476],{"class":59165},[102,72236,59172],{"class":119},[102,72238,72239,72241,72243,72245,72247,72250],{"class":104,"line":2384},[102,72240,59206],{"class":119},[102,72242,59476],{"class":59165},[102,72244,61351],{"class":112},[102,72246,260],{"class":119},[102,72248,72249],{"class":278},"\"tab-content\"",[102,72251,59172],{"class":119},[102,72253,72254,72256,72258,72260,72262,72265,72267,72269,72271,72273,72276,72278,72280,72282,72285,72287],{"class":104,"line":2389},[102,72255,63099],{"class":119},[102,72257,59476],{"class":59165},[102,72259,61351],{"class":112},[102,72261,260],{"class":119},[102,72263,72264],{"class":278},"\"item active\"",[102,72266,68917],{"class":119},[102,72268,6750],{"class":59165},[102,72270,63104],{"class":112},[102,72272,260],{"class":119},[102,72274,72275],{"class":278},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[102,72277,63112],{"class":112},[102,72279,260],{"class":119},[102,72281,16439],{"class":278},[102,72283,72284],{"class":119}," \u002F>\u003C\u002F",[102,72286,59476],{"class":59165},[102,72288,59172],{"class":119},[102,72290,72291,72293,72295,72297,72299,72301,72303,72305,72307,72309,72312,72314,72316,72318,72320,72322],{"class":104,"line":2403},[102,72292,63099],{"class":119},[102,72294,59476],{"class":59165},[102,72296,61351],{"class":112},[102,72298,260],{"class":119},[102,72300,70488],{"class":278},[102,72302,68917],{"class":119},[102,72304,6750],{"class":59165},[102,72306,63104],{"class":112},[102,72308,260],{"class":119},[102,72310,72311],{"class":278},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[102,72313,63112],{"class":112},[102,72315,260],{"class":119},[102,72317,16439],{"class":278},[102,72319,72284],{"class":119},[102,72321,59476],{"class":59165},[102,72323,59172],{"class":119},[102,72325,72326,72328,72330,72332,72334,72336,72338,72340,72342,72344,72347,72349,72351,72353,72355,72357],{"class":104,"line":2408},[102,72327,63099],{"class":119},[102,72329,59476],{"class":59165},[102,72331,61351],{"class":112},[102,72333,260],{"class":119},[102,72335,70488],{"class":278},[102,72337,68917],{"class":119},[102,72339,6750],{"class":59165},[102,72341,63104],{"class":112},[102,72343,260],{"class":119},[102,72345,72346],{"class":278},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[102,72348,63112],{"class":112},[102,72350,260],{"class":119},[102,72352,16439],{"class":278},[102,72354,72284],{"class":119},[102,72356,59476],{"class":59165},[102,72358,59172],{"class":119},[102,72360,72361,72363,72365,72367,72369,72371,72373,72375,72377,72379,72382,72384,72386,72388,72390,72392],{"class":104,"line":2413},[102,72362,63099],{"class":119},[102,72364,59476],{"class":59165},[102,72366,61351],{"class":112},[102,72368,260],{"class":119},[102,72370,70488],{"class":278},[102,72372,68917],{"class":119},[102,72374,6750],{"class":59165},[102,72376,63104],{"class":112},[102,72378,260],{"class":119},[102,72380,72381],{"class":278},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[102,72383,63112],{"class":112},[102,72385,260],{"class":119},[102,72387,16439],{"class":278},[102,72389,72284],{"class":119},[102,72391,59476],{"class":59165},[102,72393,59172],{"class":119},[102,72395,72396,72398,72400,72402,72404,72406,72408,72410,72412,72414,72417,72419,72421,72423,72425,72427],{"class":104,"line":2427},[102,72397,63099],{"class":119},[102,72399,59476],{"class":59165},[102,72401,61351],{"class":112},[102,72403,260],{"class":119},[102,72405,70488],{"class":278},[102,72407,68917],{"class":119},[102,72409,6750],{"class":59165},[102,72411,63104],{"class":112},[102,72413,260],{"class":119},[102,72415,72416],{"class":278},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[102,72418,63112],{"class":112},[102,72420,260],{"class":119},[102,72422,16439],{"class":278},[102,72424,72284],{"class":119},[102,72426,59476],{"class":59165},[102,72428,59172],{"class":119},[102,72430,72431,72433,72435],{"class":104,"line":2440},[102,72432,59641],{"class":119},[102,72434,59476],{"class":59165},[102,72436,59172],{"class":119},[102,72438,72439,72441,72443],{"class":104,"line":2445},[102,72440,60282],{"class":119},[102,72442,59476],{"class":59165},[102,72444,59172],{"class":119},[102,72446,72447,72449,72451],{"class":104,"line":2458},[102,72448,60009],{"class":119},[102,72450,59678],{"class":59165},[102,72452,59172],{"class":119},[102,72454,72455],{"class":104,"line":2463},[102,72456,72457],{"class":126},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[102,72459,72460],{"class":104,"line":2468},[102,72461,72462],{"class":126},"    \u002F\u002F 1.1 获取 a 元素 \n",[102,72464,72465,72467,72470,72472,72474,72476,72478,72481],{"class":104,"line":2473},[102,72466,19961],{"class":108},[102,72468,72469],{"class":187}," as",[102,72471,22296],{"class":108},[102,72473,62261],{"class":119},[102,72475,63546],{"class":112},[102,72477,380],{"class":119},[102,72479,72480],{"class":278},"'.tab-nav a'",[102,72482,390],{"class":119},[102,72484,72485],{"class":104,"line":2486},[102,72486,72487],{"class":126},"    \u002F\u002F console.log(as) \n",[102,72489,72490,72492,72494,72496,72498,72500,72502,72504,72506,72509,72511,72513,72515],{"class":104,"line":2491},[102,72491,12016],{"class":108},[102,72493,2432],{"class":119},[102,72495,59712],{"class":108},[102,72497,18205],{"class":119},[102,72499,260],{"class":108},[102,72501,866],{"class":187},[102,72503,18212],{"class":119},[102,72505,1208],{"class":108},[102,72507,72508],{"class":119}," as.",[102,72510,59833],{"class":187},[102,72512,12029],{"class":119},[102,72514,11130],{"class":108},[102,72516,1105],{"class":119},[102,72518,72519],{"class":104,"line":40498},[102,72520,72521],{"class":126},"      \u002F\u002F console.log(as[i])\n",[102,72523,72524],{"class":104,"line":40504},[102,72525,72526],{"class":126},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[102,72528,72529,72532,72534,72536,72539,72541,72543],{"class":104,"line":40510},[102,72530,72531],{"class":119},"      as[i].",[102,72533,65678],{"class":112},[102,72535,380],{"class":119},[102,72537,72538],{"class":278},"'mouseenter'",[102,72540,2571],{"class":119},[102,72542,62314],{"class":108},[102,72544,62317],{"class":119},[102,72546,72547],{"class":104,"line":40516},[102,72548,72549],{"class":126},"        \u002F\u002F console.log('鼠标经过')\n",[102,72551,72552],{"class":104,"line":40522},[102,72553,72554],{"class":126},"        \u002F\u002F 排他思想  \n",[102,72556,72557],{"class":104,"line":40533},[102,72558,72559],{"class":126},"        \u002F\u002F 干掉别人 移除类active\n",[102,72561,72562,72564,72566,72568,72571,72573,72575,72577,72580],{"class":104,"line":40539},[102,72563,59790],{"class":119},[102,72565,62264],{"class":112},[102,72567,380],{"class":119},[102,72569,72570],{"class":278},"'.tab-nav .active'",[102,72572,64868],{"class":119},[102,72574,64871],{"class":112},[102,72576,380],{"class":119},[102,72578,72579],{"class":278},"'active'",[102,72581,390],{"class":119},[102,72583,72584],{"class":104,"line":40559},[102,72585,72586],{"class":126},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[102,72588,72589,72592,72595,72597,72599,72601],{"class":104,"line":40565},[102,72590,72591],{"class":187},"        this",[102,72593,72594],{"class":119},".classList.",[102,72596,14139],{"class":112},[102,72598,380],{"class":119},[102,72600,72579],{"class":278},[102,72602,390],{"class":119},[102,72604,72605],{"class":104,"line":40576},[102,72606,652],{"emptyLinePlaceholder":651},[102,72608,72609],{"class":104,"line":40582},[102,72610,72611],{"class":126},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[102,72613,72614],{"class":104,"line":40588},[102,72615,72616],{"class":126},"        \u002F\u002F 干掉别人\n",[102,72618,72619,72621,72623,72625,72628,72630,72632,72634,72636],{"class":104,"line":40594},[102,72620,59790],{"class":119},[102,72622,62264],{"class":112},[102,72624,380],{"class":119},[102,72626,72627],{"class":278},"'.tab-content .active'",[102,72629,64868],{"class":119},[102,72631,64871],{"class":112},[102,72633,380],{"class":119},[102,72635,72579],{"class":278},[102,72637,390],{"class":119},[102,72639,72640],{"class":104,"line":40600},[102,72641,72642],{"class":126},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[102,72644,72645,72647,72649,72651,72654,72656,72658,72660,72662,72664,72666,72668,72670],{"class":104,"line":40606},[102,72646,59790],{"class":119},[102,72648,62264],{"class":112},[102,72650,380],{"class":119},[102,72652,72653],{"class":278},"`.tab-content .item:nth-child(${",[102,72655,9473],{"class":119},[102,72657,53431],{"class":108},[102,72659,32983],{"class":187},[102,72661,64897],{"class":278},[102,72663,64868],{"class":119},[102,72665,14139],{"class":112},[102,72667,380],{"class":119},[102,72669,72579],{"class":278},[102,72671,390],{"class":119},[102,72673,72674],{"class":104,"line":40612},[102,72675,652],{"emptyLinePlaceholder":651},[102,72677,72678],{"class":104,"line":40618},[102,72679,72680],{"class":119},"      })\n",[102,72682,72683],{"class":104,"line":40638},[102,72684,205],{"class":119},[102,72686,72687,72689,72691],{"class":104,"line":40644},[102,72688,60282],{"class":119},[102,72690,59678],{"class":59165},[102,72692,59172],{"class":119},[102,72694,72695,72697,72699],{"class":104,"line":40660},[102,72696,59650],{"class":119},[102,72698,59665],{"class":59165},[102,72700,59172],{"class":119},[102,72702,72703],{"class":104,"line":40666},[102,72704,652],{"emptyLinePlaceholder":651},[102,72706,72707,72709,72711],{"class":104,"line":40680},[102,72708,59650],{"class":119},[102,72710,58500],{"class":59165},[102,72712,59172],{"class":119},[14,72714,72715],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,72717,72718],{},"在监听事件中，this指向的就是他的调用者",[14,72720,72721],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,72723,61585],{},[14,72725,72726],{},"(function () {",[14,72728,72729],{},"const list = document.querySelector('.xtx-elevator-list')",[14,72731,72732],{},"list.addEventListener('click', function (e) {",[14,72734,72735],{},"if (e.target.tagName === 'A') {",[14,72737,72738],{},"\u002F\u002F 排他思想",[14,72740,72741],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,72743,72744],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,72746,72747],{},"\u002F\u002F console.log(old);",[14,72749,72750],{},"\u002F\u002F 判断",[14,72752,72753],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,72755,72756],{},"if (old) old.classList.remove('active')",[14,72758,72759],{},"e.target.classList.add('active')",[14,72761,9967],{},[14,72763,60329],{},[14,72765,72766],{},"})();",[48,72768,72770],{"id":72769},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[93,72772,72774],{"className":58498,"code":72773,"language":58500,"meta":98,"style":98},"\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",[83,72775,72776,72786,72790,72798,72802,72816,72830,72842,72850,72856,72866,72876,72880,72884,72891,72903,72914,72931,72944,72958,72968,72972,72976,72983,72994,73012,73022,73034,73038,73042,73049,73066,73077,73089,73093,73097,73104,73116,73120,73128,73136,73140,73148,73156,73164,73179,73223,73231,73244,73257,73270,73278,73286,73294,73322,73330,73342,73355,73368,73376,73384,73392,73418,73426,73439,73451,73464,73472,73480,73488,73514,73522,73535,73547,73560,73568,73576,73584,73589,73609,73614,73634,73639,73656,73661,73669,73674,73703,73716,73720,73724,73729,73733,73761,73766,73783,73788,73793,73798,73803,73829,73833,73837,73845,73853,73857],{"__ignoreMap":98},[102,72777,72778,72780,72782,72784],{"class":104,"line":105},[102,72779,59162],{"class":119},[102,72781,59166],{"class":59165},[102,72783,59169],{"class":112},[102,72785,59172],{"class":119},[102,72787,72788],{"class":104,"line":116},[102,72789,652],{"emptyLinePlaceholder":651},[102,72791,72792,72794,72796],{"class":104,"line":123},[102,72793,1208],{"class":119},[102,72795,58500],{"class":59165},[102,72797,59172],{"class":119},[102,72799,72800],{"class":104,"line":130},[102,72801,652],{"emptyLinePlaceholder":651},[102,72803,72804,72806,72808,72810,72812,72814],{"class":104,"line":136},[102,72805,1208],{"class":119},[102,72807,59199],{"class":59165},[102,72809,59181],{"class":112},[102,72811,260],{"class":119},[102,72813,59186],{"class":278},[102,72815,59172],{"class":119},[102,72817,72818,72820,72822,72824,72826,72828],{"class":104,"line":142},[102,72819,60009],{"class":119},[102,72821,59209],{"class":59165},[102,72823,59212],{"class":112},[102,72825,260],{"class":119},[102,72827,59217],{"class":278},[102,72829,59172],{"class":119},[102,72831,72832,72834,72836,72838,72840],{"class":104,"line":148},[102,72833,60009],{"class":119},[102,72835,59272],{"class":59165},[102,72837,63179],{"class":119},[102,72839,59272],{"class":59165},[102,72841,59172],{"class":119},[102,72843,72844,72846,72848],{"class":104,"line":157},[102,72845,60009],{"class":119},[102,72847,8955],{"class":59165},[102,72849,59172],{"class":119},[102,72851,72852,72854],{"class":104,"line":163},[102,72853,15198],{"class":59165},[102,72855,1077],{"class":119},[102,72857,72858,72860,72862,72864],{"class":104,"line":175},[102,72859,62571],{"class":187},[102,72861,59302],{"class":119},[102,72863,8423],{"class":187},[102,72865,266],{"class":119},[102,72867,72868,72870,72872,72874],{"class":104,"line":181},[102,72869,62560],{"class":187},[102,72871,59302],{"class":119},[102,72873,8423],{"class":187},[102,72875,266],{"class":119},[102,72877,72878],{"class":104,"line":202},[102,72879,205],{"class":119},[102,72881,72882],{"class":104,"line":208},[102,72883,652],{"emptyLinePlaceholder":651},[102,72885,72886,72889],{"class":104,"line":214},[102,72887,72888],{"class":59165},"    table",[102,72890,1077],{"class":119},[102,72892,72893,72896,72898,72901],{"class":104,"line":225},[102,72894,72895],{"class":187},"      border-collapse",[102,72897,59302],{"class":119},[102,72899,72900],{"class":187},"collapse",[102,72902,266],{"class":119},[102,72904,72905,72908,72910,72912],{"class":104,"line":230},[102,72906,72907],{"class":187},"      border-spacing",[102,72909,59302],{"class":119},[102,72911,8423],{"class":187},[102,72913,266],{"class":119},[102,72915,72916,72918,72920,72922,72924,72926,72929],{"class":104,"line":236},[102,72917,69842],{"class":187},[102,72919,59302],{"class":119},[102,72921,7039],{"class":187},[102,72923,59357],{"class":108},[102,72925,59386],{"class":187},[102,72927,72928],{"class":187}," #c0c0c0",[102,72930,266],{"class":119},[102,72932,72933,72935,72937,72940,72942],{"class":104,"line":242},[102,72934,62636],{"class":187},[102,72936,59302],{"class":119},[102,72938,72939],{"class":187},"500",[102,72941,59357],{"class":108},[102,72943,266],{"class":119},[102,72945,72946,72948,72950,72952,72954,72956],{"class":104,"line":248},[102,72947,62571],{"class":187},[102,72949,59302],{"class":119},[102,72951,5569],{"class":187},[102,72953,59357],{"class":108},[102,72955,59421],{"class":187},[102,72957,266],{"class":119},[102,72959,72960,72962,72964,72966],{"class":104,"line":254},[102,72961,65151],{"class":187},[102,72963,59302],{"class":119},[102,72965,59457],{"class":187},[102,72967,266],{"class":119},[102,72969,72970],{"class":104,"line":269},[102,72971,205],{"class":119},[102,72973,72974],{"class":104,"line":298},[102,72975,652],{"emptyLinePlaceholder":651},[102,72977,72978,72981],{"class":104,"line":502},[102,72979,72980],{"class":59165},"    th",[102,72982,1077],{"class":119},[102,72984,72985,72987,72989,72992],{"class":104,"line":507},[102,72986,62749],{"class":187},[102,72988,59302],{"class":119},[102,72990,72991],{"class":187},"#09c",[102,72993,266],{"class":119},[102,72995,72996,72999,73001,73003,73005,73007,73010],{"class":104,"line":512},[102,72997,72998],{"class":187},"      font",[102,73000,59302],{"class":119},[102,73002,70204],{"class":187},[102,73004,71938],{"class":187},[102,73006,59357],{"class":108},[102,73008,73009],{"class":278}," \"微软雅黑\"",[102,73011,266],{"class":119},[102,73013,73014,73016,73018,73020],{"class":104,"line":521},[102,73015,65281],{"class":187},[102,73017,59302],{"class":119},[102,73019,68707],{"class":187},[102,73021,266],{"class":119},[102,73023,73024,73026,73028,73030,73032],{"class":104,"line":526},[102,73025,62650],{"class":187},[102,73027,59302],{"class":119},[102,73029,9823],{"class":187},[102,73031,59357],{"class":108},[102,73033,266],{"class":119},[102,73035,73036],{"class":104,"line":532},[102,73037,205],{"class":119},[102,73039,73040],{"class":104,"line":538},[102,73041,652],{"emptyLinePlaceholder":651},[102,73043,73044,73047],{"class":104,"line":555},[102,73045,73046],{"class":59165},"    td",[102,73048,1077],{"class":119},[102,73050,73051,73053,73055,73057,73059,73061,73064],{"class":104,"line":570},[102,73052,69842],{"class":187},[102,73054,59302],{"class":119},[102,73056,7039],{"class":187},[102,73058,59357],{"class":108},[102,73060,59386],{"class":187},[102,73062,73063],{"class":187}," #d0d0d0",[102,73065,266],{"class":119},[102,73067,73068,73070,73072,73075],{"class":104,"line":581},[102,73069,65281],{"class":187},[102,73071,59302],{"class":119},[102,73073,73074],{"class":187},"#404060",[102,73076,266],{"class":119},[102,73078,73079,73081,73083,73085,73087],{"class":104,"line":819},[102,73080,62560],{"class":187},[102,73082,59302],{"class":119},[102,73084,263],{"class":187},[102,73086,59357],{"class":108},[102,73088,266],{"class":119},[102,73090,73091],{"class":104,"line":828},[102,73092,205],{"class":119},[102,73094,73095],{"class":104,"line":837},[102,73096,652],{"emptyLinePlaceholder":651},[102,73098,73099,73102],{"class":104,"line":842},[102,73100,73101],{"class":112},"    .allCheck",[102,73103,1077],{"class":119},[102,73105,73106,73108,73110,73112,73114],{"class":104,"line":855},[102,73107,62636],{"class":187},[102,73109,59302],{"class":119},[102,73111,9639],{"class":187},[102,73113,59357],{"class":108},[102,73115,266],{"class":119},[102,73117,73118],{"class":104,"line":860},[102,73119,205],{"class":119},[102,73121,73122,73124,73126],{"class":104,"line":871},[102,73123,60282],{"class":119},[102,73125,8955],{"class":59165},[102,73127,59172],{"class":119},[102,73129,73130,73132,73134],{"class":104,"line":1359},[102,73131,59650],{"class":119},[102,73133,59199],{"class":59165},[102,73135,59172],{"class":119},[102,73137,73138],{"class":104,"line":1368},[102,73139,652],{"emptyLinePlaceholder":651},[102,73141,73142,73144,73146],{"class":104,"line":1373},[102,73143,1208],{"class":119},[102,73145,59665],{"class":59165},[102,73147,59172],{"class":119},[102,73149,73150,73152,73154],{"class":104,"line":1378},[102,73151,60009],{"class":119},[102,73153,9177],{"class":59165},[102,73155,59172],{"class":119},[102,73157,73158,73160,73162],{"class":104,"line":1384},[102,73159,59206],{"class":119},[102,73161,9183],{"class":59165},[102,73163,59172],{"class":119},[102,73165,73166,73168,73170,73172,73174,73177],{"class":104,"line":1398},[102,73167,63099],{"class":119},[102,73169,9186],{"class":59165},[102,73171,61351],{"class":112},[102,73173,260],{"class":119},[102,73175,73176],{"class":278},"\"allCheck\"",[102,73178,59172],{"class":119},[102,73180,73181,73183,73185,73187,73189,73191,73193,73195,73197,73199,73201,73204,73207,73209,73211,73213,73216,73219,73221],{"class":104,"line":1424},[102,73182,63167],{"class":119},[102,73184,61686],{"class":59165},[102,73186,61689],{"class":112},[102,73188,260],{"class":119},[102,73190,61694],{"class":278},[102,73192,387],{"class":112},[102,73194,260],{"class":119},[102,73196,16439],{"class":278},[102,73198,427],{"class":112},[102,73200,260],{"class":119},[102,73202,73203],{"class":278},"\"checkAll\"",[102,73205,73206],{"class":119},"> \u003C",[102,73208,102],{"class":59165},[102,73210,61351],{"class":112},[102,73212,260],{"class":119},[102,73214,73215],{"class":278},"\"all\"",[102,73217,73218],{"class":119},">全选\u003C\u002F",[102,73220,102],{"class":59165},[102,73222,59172],{"class":119},[102,73224,73225,73227,73229],{"class":104,"line":1429},[102,73226,63272],{"class":119},[102,73228,9186],{"class":59165},[102,73230,59172],{"class":119},[102,73232,73233,73235,73237,73240,73242],{"class":104,"line":1435},[102,73234,63099],{"class":119},[102,73236,9186],{"class":59165},[102,73238,73239],{"class":119},">商品\u003C\u002F",[102,73241,9186],{"class":59165},[102,73243,59172],{"class":119},[102,73245,73246,73248,73250,73253,73255],{"class":104,"line":1450},[102,73247,63099],{"class":119},[102,73249,9186],{"class":59165},[102,73251,73252],{"class":119},">商家\u003C\u002F",[102,73254,9186],{"class":59165},[102,73256,59172],{"class":119},[102,73258,73259,73261,73263,73266,73268],{"class":104,"line":1473},[102,73260,63099],{"class":119},[102,73262,9186],{"class":59165},[102,73264,73265],{"class":119},">价格\u003C\u002F",[102,73267,9186],{"class":59165},[102,73269,59172],{"class":119},[102,73271,73272,73274,73276],{"class":104,"line":1478},[102,73273,59641],{"class":119},[102,73275,9183],{"class":59165},[102,73277,59172],{"class":119},[102,73279,73280,73282,73284],{"class":104,"line":1484},[102,73281,59206],{"class":119},[102,73283,9183],{"class":59165},[102,73285,59172],{"class":119},[102,73287,73288,73290,73292],{"class":104,"line":1499},[102,73289,63099],{"class":119},[102,73291,9228],{"class":59165},[102,73293,59172],{"class":119},[102,73295,73296,73298,73300,73302,73304,73306,73308,73310,73313,73315,73317,73320],{"class":104,"line":1508},[102,73297,63167],{"class":119},[102,73299,61686],{"class":59165},[102,73301,61689],{"class":112},[102,73303,260],{"class":119},[102,73305,61694],{"class":278},[102,73307,387],{"class":112},[102,73309,260],{"class":119},[102,73311,73312],{"class":278},"\"check\"",[102,73314,61351],{"class":112},[102,73316,260],{"class":119},[102,73318,73319],{"class":278},"\"ck\"",[102,73321,59172],{"class":119},[102,73323,73324,73326,73328],{"class":104,"line":1513},[102,73325,63272],{"class":119},[102,73327,9228],{"class":59165},[102,73329,59172],{"class":119},[102,73331,73332,73334,73336,73338,73340],{"class":104,"line":1524},[102,73333,63099],{"class":119},[102,73335,9228],{"class":59165},[102,73337,69038],{"class":119},[102,73339,9228],{"class":59165},[102,73341,59172],{"class":119},[102,73343,73344,73346,73348,73351,73353],{"class":104,"line":1529},[102,73345,63099],{"class":119},[102,73347,9228],{"class":59165},[102,73349,73350],{"class":119},">小米\u003C\u002F",[102,73352,9228],{"class":59165},[102,73354,59172],{"class":119},[102,73356,73357,73359,73361,73364,73366],{"class":104,"line":1538},[102,73358,63099],{"class":119},[102,73360,9228],{"class":59165},[102,73362,73363],{"class":119},">￥1999\u003C\u002F",[102,73365,9228],{"class":59165},[102,73367,59172],{"class":119},[102,73369,73370,73372,73374],{"class":104,"line":2089},[102,73371,59641],{"class":119},[102,73373,9183],{"class":59165},[102,73375,59172],{"class":119},[102,73377,73378,73380,73382],{"class":104,"line":2094},[102,73379,59206],{"class":119},[102,73381,9183],{"class":59165},[102,73383,59172],{"class":119},[102,73385,73386,73388,73390],{"class":104,"line":2100},[102,73387,63099],{"class":119},[102,73389,9228],{"class":59165},[102,73391,59172],{"class":119},[102,73393,73394,73396,73398,73400,73402,73404,73406,73408,73410,73412,73414,73416],{"class":104,"line":2106},[102,73395,63167],{"class":119},[102,73397,61686],{"class":59165},[102,73399,61689],{"class":112},[102,73401,260],{"class":119},[102,73403,61694],{"class":278},[102,73405,387],{"class":112},[102,73407,260],{"class":119},[102,73409,73312],{"class":278},[102,73411,61351],{"class":112},[102,73413,260],{"class":119},[102,73415,73319],{"class":278},[102,73417,59172],{"class":119},[102,73419,73420,73422,73424],{"class":104,"line":2120},[102,73421,63272],{"class":119},[102,73423,9228],{"class":59165},[102,73425,59172],{"class":119},[102,73427,73428,73430,73432,73435,73437],{"class":104,"line":2128},[102,73429,63099],{"class":119},[102,73431,9228],{"class":59165},[102,73433,73434],{"class":119},">小米净水器\u003C\u002F",[102,73436,9228],{"class":59165},[102,73438,59172],{"class":119},[102,73440,73441,73443,73445,73447,73449],{"class":104,"line":2149},[102,73442,63099],{"class":119},[102,73444,9228],{"class":59165},[102,73446,73350],{"class":119},[102,73448,9228],{"class":59165},[102,73450,59172],{"class":119},[102,73452,73453,73455,73457,73460,73462],{"class":104,"line":2161},[102,73454,63099],{"class":119},[102,73456,9228],{"class":59165},[102,73458,73459],{"class":119},">￥4999\u003C\u002F",[102,73461,9228],{"class":59165},[102,73463,59172],{"class":119},[102,73465,73466,73468,73470],{"class":104,"line":2167},[102,73467,59641],{"class":119},[102,73469,9183],{"class":59165},[102,73471,59172],{"class":119},[102,73473,73474,73476,73478],{"class":104,"line":2190},[102,73475,59206],{"class":119},[102,73477,9183],{"class":59165},[102,73479,59172],{"class":119},[102,73481,73482,73484,73486],{"class":104,"line":2196},[102,73483,63099],{"class":119},[102,73485,9228],{"class":59165},[102,73487,59172],{"class":119},[102,73489,73490,73492,73494,73496,73498,73500,73502,73504,73506,73508,73510,73512],{"class":104,"line":2219},[102,73491,63167],{"class":119},[102,73493,61686],{"class":59165},[102,73495,61689],{"class":112},[102,73497,260],{"class":119},[102,73499,61694],{"class":278},[102,73501,387],{"class":112},[102,73503,260],{"class":119},[102,73505,73312],{"class":278},[102,73507,61351],{"class":112},[102,73509,260],{"class":119},[102,73511,73319],{"class":278},[102,73513,59172],{"class":119},[102,73515,73516,73518,73520],{"class":104,"line":2233},[102,73517,63272],{"class":119},[102,73519,9228],{"class":59165},[102,73521,59172],{"class":119},[102,73523,73524,73526,73528,73531,73533],{"class":104,"line":2253},[102,73525,63099],{"class":119},[102,73527,9228],{"class":59165},[102,73529,73530],{"class":119},">小米电视\u003C\u002F",[102,73532,9228],{"class":59165},[102,73534,59172],{"class":119},[102,73536,73537,73539,73541,73543,73545],{"class":104,"line":2259},[102,73538,63099],{"class":119},[102,73540,9228],{"class":59165},[102,73542,73350],{"class":119},[102,73544,9228],{"class":59165},[102,73546,59172],{"class":119},[102,73548,73549,73551,73553,73556,73558],{"class":104,"line":2270},[102,73550,63099],{"class":119},[102,73552,9228],{"class":59165},[102,73554,73555],{"class":119},">￥5999\u003C\u002F",[102,73557,9228],{"class":59165},[102,73559,59172],{"class":119},[102,73561,73562,73564,73566],{"class":104,"line":2293},[102,73563,59641],{"class":119},[102,73565,9183],{"class":59165},[102,73567,59172],{"class":119},[102,73569,73570,73572,73574],{"class":104,"line":2315},[102,73571,60282],{"class":119},[102,73573,9177],{"class":59165},[102,73575,59172],{"class":119},[102,73577,73578,73580,73582],{"class":104,"line":2320},[102,73579,60009],{"class":119},[102,73581,59678],{"class":59165},[102,73583,59172],{"class":119},[102,73585,73586],{"class":104,"line":2326},[102,73587,73588],{"class":126},"    \u002F\u002F 1. 获取大复选框\n",[102,73590,73591,73593,73596,73598,73600,73602,73604,73607],{"class":104,"line":2340},[102,73592,19961],{"class":108},[102,73594,73595],{"class":187}," checkAll",[102,73597,22296],{"class":108},[102,73599,62261],{"class":119},[102,73601,62264],{"class":112},[102,73603,380],{"class":119},[102,73605,73606],{"class":278},"'#checkAll'",[102,73608,390],{"class":119},[102,73610,73611],{"class":104,"line":2354},[102,73612,73613],{"class":126},"    \u002F\u002F 2. 获取所有的小复选框\n",[102,73615,73616,73618,73621,73623,73625,73627,73629,73632],{"class":104,"line":2359},[102,73617,19961],{"class":108},[102,73619,73620],{"class":187}," cks",[102,73622,22296],{"class":108},[102,73624,62261],{"class":119},[102,73626,63546],{"class":112},[102,73628,380],{"class":119},[102,73630,73631],{"class":278},"'.ck'",[102,73633,390],{"class":119},[102,73635,73636],{"class":104,"line":2373},[102,73637,73638],{"class":126},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[102,73640,73641,73644,73646,73648,73650,73652,73654],{"class":104,"line":2378},[102,73642,73643],{"class":119},"    checkAll.",[102,73645,65678],{"class":112},[102,73647,380],{"class":119},[102,73649,65683],{"class":278},[102,73651,2571],{"class":119},[102,73653,62314],{"class":108},[102,73655,62317],{"class":119},[102,73657,73658],{"class":104,"line":2384},[102,73659,73660],{"class":126},"      \u002F\u002F 得到当前大复选框的选中状态\n",[102,73662,73663,73666],{"class":104,"line":2389},[102,73664,73665],{"class":126},"      \u002F\u002F console.log(checkAll.checked)",[102,73667,73668],{"class":126},"  \u002F\u002F 得到 是 true 或者是 false\n",[102,73670,73671],{"class":104,"line":2403},[102,73672,73673],{"class":126},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[102,73675,73676,73678,73680,73682,73684,73686,73688,73690,73692,73695,73697,73699,73701],{"class":104,"line":2408},[102,73677,60149],{"class":108},[102,73679,2432],{"class":119},[102,73681,59712],{"class":108},[102,73683,18205],{"class":119},[102,73685,260],{"class":108},[102,73687,866],{"class":187},[102,73689,18212],{"class":119},[102,73691,1208],{"class":108},[102,73693,73694],{"class":119}," cks.",[102,73696,59833],{"class":187},[102,73698,12029],{"class":119},[102,73700,11130],{"class":108},[102,73702,1105],{"class":119},[102,73704,73705,73708,73710,73713],{"class":104,"line":2413},[102,73706,73707],{"class":119},"        cks[i].checked ",[102,73709,260],{"class":108},[102,73711,73712],{"class":187}," this",[102,73714,73715],{"class":119},".checked\n",[102,73717,73718],{"class":104,"line":2427},[102,73719,60263],{"class":119},[102,73721,73722],{"class":104,"line":2440},[102,73723,41326],{"class":119},[102,73725,73726],{"class":104,"line":2445},[102,73727,73728],{"class":126},"    \u002F\u002F 5. 小复选框控制大复选框\n",[102,73730,73731],{"class":104,"line":2458},[102,73732,652],{"emptyLinePlaceholder":651},[102,73734,73735,73737,73739,73741,73743,73745,73747,73749,73751,73753,73755,73757,73759],{"class":104,"line":2463},[102,73736,12016],{"class":108},[102,73738,2432],{"class":119},[102,73740,59712],{"class":108},[102,73742,18205],{"class":119},[102,73744,260],{"class":108},[102,73746,866],{"class":187},[102,73748,18212],{"class":119},[102,73750,1208],{"class":108},[102,73752,73694],{"class":119},[102,73754,59833],{"class":187},[102,73756,12029],{"class":119},[102,73758,11130],{"class":108},[102,73760,1105],{"class":119},[102,73762,73763],{"class":104,"line":2468},[102,73764,73765],{"class":126},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[102,73767,73768,73771,73773,73775,73777,73779,73781],{"class":104,"line":2473},[102,73769,73770],{"class":119},"      cks[i].",[102,73772,65678],{"class":112},[102,73774,380],{"class":119},[102,73776,65683],{"class":278},[102,73778,2571],{"class":119},[102,73780,62314],{"class":108},[102,73782,62317],{"class":119},[102,73784,73785],{"class":104,"line":2486},[102,73786,73787],{"class":126},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[102,73789,73790],{"class":104,"line":2491},[102,73791,73792],{"class":126},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[102,73794,73795],{"class":104,"line":40498},[102,73796,73797],{"class":126},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[102,73799,73800],{"class":104,"line":40504},[102,73801,73802],{"class":126},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[102,73804,73805,73808,73810,73812,73814,73816,73819,73821,73823,73825,73827],{"class":104,"line":40510},[102,73806,73807],{"class":119},"        checkAll.checked ",[102,73809,260],{"class":108},[102,73811,62261],{"class":119},[102,73813,63546],{"class":112},[102,73815,380],{"class":119},[102,73817,73818],{"class":278},"'.ck:checked'",[102,73820,38691],{"class":119},[102,73822,59833],{"class":187},[102,73824,65771],{"class":108},[102,73826,73694],{"class":119},[102,73828,63696],{"class":187},[102,73830,73831],{"class":104,"line":40516},[102,73832,72680],{"class":119},[102,73834,73835],{"class":104,"line":40522},[102,73836,205],{"class":119},[102,73838,73839,73841,73843],{"class":104,"line":40533},[102,73840,60282],{"class":119},[102,73842,59678],{"class":59165},[102,73844,59172],{"class":119},[102,73846,73847,73849,73851],{"class":104,"line":40539},[102,73848,59650],{"class":119},[102,73850,59665],{"class":59165},[102,73852,59172],{"class":119},[102,73854,73855],{"class":104,"line":40559},[102,73856,652],{"emptyLinePlaceholder":651},[102,73858,73859,73861,73863],{"class":104,"line":40565},[102,73860,59650],{"class":119},[102,73862,58500],{"class":59165},[102,73864,59172],{"class":119},[14,73866,73867],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,73869,73870],{},"用好之间比较得到的布尔值！！！",[14,73872,73873,73874,73877,73878,2432,73881,9611,73883,73886],{},"在 JS 里访问的时候，",[83,73875,73876],{},"checkbox.checked"," 是一个 ",[18,73879,73880],{},"布尔值",[83,73882,10244],{},[83,73884,73885],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,73888,73889,73890,73893,73894],{},"HTML 的 ",[83,73891,73892],{},"checked=\"checked\""," 只是 ",[18,73895,73896,73897,73900],{},"初始值；JS 的 ",[83,73898,73899],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,73902,73903],{},"：checked是一个伪类选择器",[14,73905,73906],{},[6750,73907],{"alt":98,"src":73908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,73910,73911,73914],{},[73912,73913],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,73916,73917],{},[6750,73918],{"alt":98,"src":73919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[43,73921,73923],{"id":73922},"_33-dom事件进阶","3.3 DOM事件进阶",[48,73925,73927],{"id":73926},"_331-事件流","3.3.1 事件流",[14,73929,73930],{},[6750,73931],{"alt":98,"src":73932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[7601,73934,73936],{"id":73935},"_3311-事件捕获","3.3.1.1 事件捕获",[14,73938,73939],{},[6750,73940],{"alt":98,"src":73941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[93,73943,73945],{"className":58498,"code":73944,"language":58500,"meta":98,"style":98},"\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",[83,73946,73947,73957,73971,73975,73983,73997,74017,74029,74037,74044,74056,74068,74078,74082,74086,74093,74105,74117,74127,74131,74139,74147,74151,74159,74174,74193,74201,74209,74229,74249,74265,74276,74284,74301,74312,74320,74337,74348,74356,74364,74372,74376],{"__ignoreMap":98},[102,73948,73949,73951,73953,73955],{"class":104,"line":105},[102,73950,59162],{"class":119},[102,73952,59166],{"class":59165},[102,73954,59169],{"class":112},[102,73956,59172],{"class":119},[102,73958,73959,73961,73963,73965,73967,73969],{"class":104,"line":116},[102,73960,1208],{"class":119},[102,73962,58500],{"class":59165},[102,73964,59181],{"class":112},[102,73966,260],{"class":119},[102,73968,59186],{"class":278},[102,73970,59172],{"class":119},[102,73972,73973],{"class":104,"line":123},[102,73974,652],{"emptyLinePlaceholder":651},[102,73976,73977,73979,73981],{"class":104,"line":130},[102,73978,1208],{"class":119},[102,73980,59199],{"class":59165},[102,73982,59172],{"class":119},[102,73984,73985,73987,73989,73991,73993,73995],{"class":104,"line":136},[102,73986,60009],{"class":119},[102,73988,59209],{"class":59165},[102,73990,59212],{"class":112},[102,73992,260],{"class":119},[102,73994,59217],{"class":278},[102,73996,59172],{"class":119},[102,73998,73999,74001,74003,74005,74007,74009,74011,74013,74015],{"class":104,"line":142},[102,74000,60009],{"class":119},[102,74002,59209],{"class":59165},[102,74004,387],{"class":112},[102,74006,260],{"class":119},[102,74008,59256],{"class":278},[102,74010,59236],{"class":112},[102,74012,260],{"class":119},[102,74014,59263],{"class":278},[102,74016,59172],{"class":119},[102,74018,74019,74021,74023,74025,74027],{"class":104,"line":148},[102,74020,60009],{"class":119},[102,74022,59272],{"class":59165},[102,74024,59275],{"class":119},[102,74026,59272],{"class":59165},[102,74028,59172],{"class":119},[102,74030,74031,74033,74035],{"class":104,"line":157},[102,74032,60009],{"class":119},[102,74034,8955],{"class":59165},[102,74036,59172],{"class":119},[102,74038,74039,74042],{"class":104,"line":163},[102,74040,74041],{"class":112},"    .father",[102,74043,1077],{"class":119},[102,74045,74046,74048,74050,74052,74054],{"class":104,"line":175},[102,74047,62636],{"class":187},[102,74049,59302],{"class":119},[102,74051,72939],{"class":187},[102,74053,59357],{"class":108},[102,74055,266],{"class":119},[102,74057,74058,74060,74062,74064,74066],{"class":104,"line":181},[102,74059,62650],{"class":187},[102,74061,59302],{"class":119},[102,74063,72939],{"class":187},[102,74065,59357],{"class":108},[102,74067,266],{"class":119},[102,74069,74070,74072,74074,74076],{"class":104,"line":202},[102,74071,62749],{"class":187},[102,74073,59302],{"class":119},[102,74075,59510],{"class":187},[102,74077,266],{"class":119},[102,74079,74080],{"class":104,"line":208},[102,74081,205],{"class":119},[102,74083,74084],{"class":104,"line":214},[102,74085,652],{"emptyLinePlaceholder":651},[102,74087,74088,74091],{"class":104,"line":225},[102,74089,74090],{"class":112},"    .son",[102,74092,1077],{"class":119},[102,74094,74095,74097,74099,74101,74103],{"class":104,"line":230},[102,74096,62636],{"class":187},[102,74098,59302],{"class":119},[102,74100,7866],{"class":187},[102,74102,59357],{"class":108},[102,74104,266],{"class":119},[102,74106,74107,74109,74111,74113,74115],{"class":104,"line":236},[102,74108,62650],{"class":187},[102,74110,59302],{"class":119},[102,74112,7866],{"class":187},[102,74114,59357],{"class":108},[102,74116,266],{"class":119},[102,74118,74119,74121,74123,74125],{"class":104,"line":242},[102,74120,62749],{"class":187},[102,74122,59302],{"class":119},[102,74124,62754],{"class":187},[102,74126,266],{"class":119},[102,74128,74129],{"class":104,"line":248},[102,74130,205],{"class":119},[102,74132,74133,74135,74137],{"class":104,"line":254},[102,74134,60282],{"class":119},[102,74136,8955],{"class":59165},[102,74138,59172],{"class":119},[102,74140,74141,74143,74145],{"class":104,"line":269},[102,74142,59650],{"class":119},[102,74144,59199],{"class":59165},[102,74146,59172],{"class":119},[102,74148,74149],{"class":104,"line":298},[102,74150,652],{"emptyLinePlaceholder":651},[102,74152,74153,74155,74157],{"class":104,"line":502},[102,74154,1208],{"class":119},[102,74156,59665],{"class":59165},[102,74158,59172],{"class":119},[102,74160,74161,74163,74165,74167,74169,74172],{"class":104,"line":507},[102,74162,60009],{"class":119},[102,74164,59476],{"class":59165},[102,74166,61351],{"class":112},[102,74168,260],{"class":119},[102,74170,74171],{"class":278},"\"father\"",[102,74173,59172],{"class":119},[102,74175,74176,74178,74180,74182,74184,74187,74189,74191],{"class":104,"line":512},[102,74177,59206],{"class":119},[102,74179,59476],{"class":59165},[102,74181,61351],{"class":112},[102,74183,260],{"class":119},[102,74185,74186],{"class":278},"\"son\"",[102,74188,63179],{"class":119},[102,74190,59476],{"class":59165},[102,74192,59172],{"class":119},[102,74194,74195,74197,74199],{"class":104,"line":521},[102,74196,60282],{"class":119},[102,74198,59476],{"class":59165},[102,74200,59172],{"class":119},[102,74202,74203,74205,74207],{"class":104,"line":526},[102,74204,60009],{"class":119},[102,74206,59678],{"class":59165},[102,74208,59172],{"class":119},[102,74210,74211,74213,74216,74218,74220,74222,74224,74227],{"class":104,"line":532},[102,74212,19961],{"class":108},[102,74214,74215],{"class":187}," fa",[102,74217,22296],{"class":108},[102,74219,62261],{"class":119},[102,74221,62264],{"class":112},[102,74223,380],{"class":119},[102,74225,74226],{"class":278},"'.father'",[102,74228,390],{"class":119},[102,74230,74231,74233,74236,74238,74240,74242,74244,74247],{"class":104,"line":538},[102,74232,19961],{"class":108},[102,74234,74235],{"class":187}," son",[102,74237,22296],{"class":108},[102,74239,62261],{"class":119},[102,74241,62264],{"class":112},[102,74243,380],{"class":119},[102,74245,74246],{"class":278},"'.son'",[102,74248,390],{"class":119},[102,74250,74251,74253,74255,74257,74259,74261,74263],{"class":104,"line":555},[102,74252,60272],{"class":119},[102,74254,65678],{"class":112},[102,74256,380],{"class":119},[102,74258,65683],{"class":278},[102,74260,2571],{"class":119},[102,74262,62314],{"class":108},[102,74264,62317],{"class":119},[102,74266,74267,74269,74271,74274],{"class":104,"line":570},[102,74268,66790],{"class":112},[102,74270,380],{"class":119},[102,74272,74273],{"class":278},"'woshiu1'",[102,74275,390],{"class":119},[102,74277,74278,74280,74282],{"class":104,"line":581},[102,74279,62400],{"class":119},[102,74281,10244],{"class":187},[102,74283,390],{"class":119},[102,74285,74286,74289,74291,74293,74295,74297,74299],{"class":104,"line":819},[102,74287,74288],{"class":119},"    fa.",[102,74290,65678],{"class":112},[102,74292,380],{"class":119},[102,74294,65683],{"class":278},[102,74296,2571],{"class":119},[102,74298,62314],{"class":108},[102,74300,62317],{"class":119},[102,74302,74303,74305,74307,74310],{"class":104,"line":828},[102,74304,66790],{"class":112},[102,74306,380],{"class":119},[102,74308,74309],{"class":278},"'1'",[102,74311,390],{"class":119},[102,74313,74314,74316,74318],{"class":104,"line":837},[102,74315,62400],{"class":119},[102,74317,10244],{"class":187},[102,74319,390],{"class":119},[102,74321,74322,74325,74327,74329,74331,74333,74335],{"class":104,"line":842},[102,74323,74324],{"class":119},"    son.",[102,74326,65678],{"class":112},[102,74328,380],{"class":119},[102,74330,65683],{"class":278},[102,74332,2571],{"class":119},[102,74334,62314],{"class":108},[102,74336,62317],{"class":119},[102,74338,74339,74341,74343,74346],{"class":104,"line":855},[102,74340,66790],{"class":112},[102,74342,380],{"class":119},[102,74344,74345],{"class":278},"'2'",[102,74347,390],{"class":119},[102,74349,74350,74352,74354],{"class":104,"line":860},[102,74351,62400],{"class":119},[102,74353,10244],{"class":187},[102,74355,390],{"class":119},[102,74357,74358,74360,74362],{"class":104,"line":871},[102,74359,60282],{"class":119},[102,74361,59678],{"class":59165},[102,74363,59172],{"class":119},[102,74365,74366,74368,74370],{"class":104,"line":1359},[102,74367,59650],{"class":119},[102,74369,59665],{"class":59165},[102,74371,59172],{"class":119},[102,74373,74374],{"class":104,"line":1368},[102,74375,652],{"emptyLinePlaceholder":651},[102,74377,74378,74380,74382],{"class":104,"line":1373},[102,74379,59650],{"class":119},[102,74381,58500],{"class":59165},[102,74383,59172],{"class":119},[14,74385,74386],{},[6750,74387],{"alt":98,"src":74388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,74390,74391],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[7601,74393,74395],{"id":74394},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,74397,74398],{},[6750,74399],{"alt":98,"src":74400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,74402,74403],{},"反着来",[14,74405,74406],{},"注意是同名事件，比如都是‘click’",[7601,74408,74410],{"id":74409},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,74412,74413],{},[6750,74414],{"alt":98,"src":74415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[7601,74417,74419],{"id":74418},"_3314-解绑事件","3.3.1.4 解绑事件",[14,74421,74422],{},[6750,74423],{"alt":98,"src":74424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,74426,74427],{},[6750,74428],{"alt":98,"src":74429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[7601,74431,74433],{"id":74432},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[87,74435,74436],{},[62,74437,74438],{},"事件类型的区别",[14,74440,74441],{},[6750,74442],{"alt":98,"src":74443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,74445,74446],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[87,74448,74449],{"start":116},[62,74450,74451],{},"注册事件的区别",[14,74453,74454],{},[6750,74455],{"alt":98,"src":74456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[7601,74458,74460],{"id":74459},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,74462,74463],{},[6750,74464],{"alt":98,"src":74465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,74467,74468],{},[6750,74469],{"alt":98,"src":74470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[93,74472,74474],{"className":60932,"code":74473,"language":60934,"meta":98,"style":98},"\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",[83,74475,74476,74484,74501,74524,74532,74537,74542,74547,74551,74559,74567],{"__ignoreMap":98},[102,74477,74478,74480,74482],{"class":104,"line":105},[102,74479,1208],{"class":119},[102,74481,59665],{"class":59165},[102,74483,59172],{"class":119},[102,74485,74486,74488,74491,74494,74496,74499],{"class":104,"line":116},[102,74487,60009],{"class":119},[102,74489,74490],{"class":59165},"form",[102,74492,74493],{"class":112}," action",[102,74495,260],{"class":119},[102,74497,74498],{"class":278},"\"http:\u002F\u002Fwww.itcast.cn\"",[102,74500,59172],{"class":119},[102,74502,74503,74505,74507,74509,74511,74514,74517,74519,74522],{"class":104,"line":123},[102,74504,59206],{"class":119},[102,74506,61686],{"class":59165},[102,74508,61689],{"class":112},[102,74510,260],{"class":119},[102,74512,74513],{"class":278},"\"submit\"",[102,74515,74516],{"class":112}," value",[102,74518,260],{"class":119},[102,74520,74521],{"class":278},"\"免费注册\"",[102,74523,59172],{"class":119},[102,74525,74526,74528,74530],{"class":104,"line":130},[102,74527,59206],{"class":119},[102,74529,59678],{"class":59165},[102,74531,59172],{"class":119},[102,74533,74534],{"class":104,"line":136},[102,74535,74536],{"class":119},"      const form = document.querySelector('form')\n",[102,74538,74539],{"class":104,"line":142},[102,74540,74541],{"class":119},"      form.addEventListener('submit', function (e) {\n",[102,74543,74544],{"class":104,"line":148},[102,74545,74546],{"class":119},"        e.preventDefault()\n",[102,74548,74549],{"class":104,"line":157},[102,74550,72680],{"class":119},[102,74552,74553,74555,74557],{"class":104,"line":163},[102,74554,59641],{"class":119},[102,74556,59678],{"class":59165},[102,74558,59172],{"class":119},[102,74560,74561,74563,74565],{"class":104,"line":175},[102,74562,60282],{"class":119},[102,74564,74490],{"class":59165},[102,74566,59172],{"class":119},[102,74568,74569,74571,74573],{"class":104,"line":181},[102,74570,59650],{"class":119},[102,74572,59665],{"class":59165},[102,74574,59172],{"class":119},[14,74576,74577],{},"点击不在跳转！！！",[48,74579,74581],{"id":74580},"_332-事件委托","3.3.2 事件委托",[14,74583,74584],{},[6750,74585],{"alt":98,"src":74586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[93,74588,74590],{"className":58498,"code":74589,"language":58500,"meta":98,"style":98},"\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",[83,74591,74592,74602,74616,74620,74628,74642,74662,74674,74682,74686,74694,74702,74714,74726,74738,74750,74762,74775,74783,74791,74796,74815,74836,74841,74846,74851,74856,74865,74869,74879,74883,74888,74893,74907,74917,74921,74925,74933,74941,74945],{"__ignoreMap":98},[102,74593,74594,74596,74598,74600],{"class":104,"line":105},[102,74595,59162],{"class":119},[102,74597,59166],{"class":59165},[102,74599,59169],{"class":112},[102,74601,59172],{"class":119},[102,74603,74604,74606,74608,74610,74612,74614],{"class":104,"line":116},[102,74605,1208],{"class":119},[102,74607,58500],{"class":59165},[102,74609,59181],{"class":112},[102,74611,260],{"class":119},[102,74613,59186],{"class":278},[102,74615,59172],{"class":119},[102,74617,74618],{"class":104,"line":123},[102,74619,652],{"emptyLinePlaceholder":651},[102,74621,74622,74624,74626],{"class":104,"line":130},[102,74623,1208],{"class":119},[102,74625,59199],{"class":59165},[102,74627,59172],{"class":119},[102,74629,74630,74632,74634,74636,74638,74640],{"class":104,"line":136},[102,74631,60009],{"class":119},[102,74633,59209],{"class":59165},[102,74635,59212],{"class":112},[102,74637,260],{"class":119},[102,74639,59217],{"class":278},[102,74641,59172],{"class":119},[102,74643,74644,74646,74648,74650,74652,74654,74656,74658,74660],{"class":104,"line":142},[102,74645,60009],{"class":119},[102,74647,59209],{"class":59165},[102,74649,387],{"class":112},[102,74651,260],{"class":119},[102,74653,59256],{"class":278},[102,74655,59236],{"class":112},[102,74657,260],{"class":119},[102,74659,59263],{"class":278},[102,74661,59172],{"class":119},[102,74663,74664,74666,74668,74670,74672],{"class":104,"line":148},[102,74665,60009],{"class":119},[102,74667,59272],{"class":59165},[102,74669,59275],{"class":119},[102,74671,59272],{"class":59165},[102,74673,59172],{"class":119},[102,74675,74676,74678,74680],{"class":104,"line":157},[102,74677,59650],{"class":119},[102,74679,59199],{"class":59165},[102,74681,59172],{"class":119},[102,74683,74684],{"class":104,"line":163},[102,74685,652],{"emptyLinePlaceholder":651},[102,74687,74688,74690,74692],{"class":104,"line":175},[102,74689,1208],{"class":119},[102,74691,59665],{"class":59165},[102,74693,59172],{"class":119},[102,74695,74696,74698,74700],{"class":104,"line":181},[102,74697,60009],{"class":119},[102,74699,59],{"class":59165},[102,74701,59172],{"class":119},[102,74703,74704,74706,74708,74710,74712],{"class":104,"line":202},[102,74705,59206],{"class":119},[102,74707,62],{"class":59165},[102,74709,61831],{"class":119},[102,74711,62],{"class":59165},[102,74713,59172],{"class":119},[102,74715,74716,74718,74720,74722,74724],{"class":104,"line":208},[102,74717,59206],{"class":119},[102,74719,62],{"class":59165},[102,74721,61850],{"class":119},[102,74723,62],{"class":59165},[102,74725,59172],{"class":119},[102,74727,74728,74730,74732,74734,74736],{"class":104,"line":214},[102,74729,59206],{"class":119},[102,74731,62],{"class":59165},[102,74733,61869],{"class":119},[102,74735,62],{"class":59165},[102,74737,59172],{"class":119},[102,74739,74740,74742,74744,74746,74748],{"class":104,"line":225},[102,74741,59206],{"class":119},[102,74743,62],{"class":59165},[102,74745,61888],{"class":119},[102,74747,62],{"class":59165},[102,74749,59172],{"class":119},[102,74751,74752,74754,74756,74758,74760],{"class":104,"line":230},[102,74753,59206],{"class":119},[102,74755,62],{"class":59165},[102,74757,61907],{"class":119},[102,74759,62],{"class":59165},[102,74761,59172],{"class":119},[102,74763,74764,74766,74768,74771,74773],{"class":104,"line":236},[102,74765,59206],{"class":119},[102,74767,14],{"class":59165},[102,74769,74770],{"class":119},">我不需要变色\u003C\u002F",[102,74772,14],{"class":59165},[102,74774,59172],{"class":119},[102,74776,74777,74779,74781],{"class":104,"line":242},[102,74778,60282],{"class":119},[102,74780,59],{"class":59165},[102,74782,59172],{"class":119},[102,74784,74785,74787,74789],{"class":104,"line":248},[102,74786,60009],{"class":119},[102,74788,59678],{"class":59165},[102,74790,59172],{"class":119},[102,74792,74793],{"class":104,"line":254},[102,74794,74795],{"class":126},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[102,74797,74798,74800,74802,74804,74806,74808,74810,74813],{"class":104,"line":269},[102,74799,19961],{"class":108},[102,74801,69157],{"class":187},[102,74803,22296],{"class":108},[102,74805,62261],{"class":119},[102,74807,62264],{"class":112},[102,74809,380],{"class":119},[102,74811,74812],{"class":278},"'ul'",[102,74814,390],{"class":119},[102,74816,74817,74820,74822,74824,74826,74828,74830,74832,74834],{"class":104,"line":298},[102,74818,74819],{"class":119},"    ul.",[102,74821,65678],{"class":112},[102,74823,380],{"class":119},[102,74825,65683],{"class":278},[102,74827,2571],{"class":119},[102,74829,62314],{"class":108},[102,74831,2432],{"class":119},[102,74833,9116],{"class":386},[102,74835,1105],{"class":119},[102,74837,74838],{"class":104,"line":502},[102,74839,74840],{"class":126},"      \u002F\u002F alert(1)\n",[102,74842,74843],{"class":104,"line":507},[102,74844,74845],{"class":126},"      \u002F\u002F e.target就是我们点击的对象\n",[102,74847,74848],{"class":104,"line":512},[102,74849,74850],{"class":126},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[102,74852,74853],{"class":104,"line":521},[102,74854,74855],{"class":126},"      \u002F\u002F e.target.style.color = 'red'\n",[102,74857,74858,74860,74862],{"class":104,"line":526},[102,74859,66109],{"class":119},[102,74861,66112],{"class":112},[102,74863,74864],{"class":119},"(e)\n",[102,74866,74867],{"class":104,"line":532},[102,74868,652],{"emptyLinePlaceholder":651},[102,74870,74871,74873,74876],{"class":104,"line":538},[102,74872,66109],{"class":119},[102,74874,74875],{"class":112},"dir",[102,74877,74878],{"class":119},"(e.target)\n",[102,74880,74881],{"class":104,"line":555},[102,74882,652],{"emptyLinePlaceholder":651},[102,74884,74885],{"class":104,"line":570},[102,74886,74887],{"class":126},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[102,74889,74890],{"class":104,"line":581},[102,74891,74892],{"class":126},"      \u002F\u002F 通过tagName来进行判断\n",[102,74894,74895,74897,74900,74902,74905],{"class":104,"line":819},[102,74896,62345],{"class":108},[102,74898,74899],{"class":119}," (e.target.tagName ",[102,74901,62351],{"class":108},[102,74903,74904],{"class":278}," 'LI'",[102,74906,1105],{"class":119},[102,74908,74909,74912,74914],{"class":104,"line":828},[102,74910,74911],{"class":119},"        e.target.style.color ",[102,74913,260],{"class":108},[102,74915,74916],{"class":278}," 'red'\n",[102,74918,74919],{"class":104,"line":837},[102,74920,60263],{"class":119},[102,74922,74923],{"class":104,"line":842},[102,74924,41326],{"class":119},[102,74926,74927,74929,74931],{"class":104,"line":855},[102,74928,60282],{"class":119},[102,74930,59678],{"class":59165},[102,74932,59172],{"class":119},[102,74934,74935,74937,74939],{"class":104,"line":860},[102,74936,59650],{"class":119},[102,74938,59665],{"class":59165},[102,74940,59172],{"class":119},[102,74942,74943],{"class":104,"line":871},[102,74944,652],{"emptyLinePlaceholder":651},[102,74946,74947,74949,74951],{"class":104,"line":1359},[102,74948,59650],{"class":119},[102,74950,58500],{"class":59165},[102,74952,59172],{"class":119},[14,74954,74955],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,74957,74958],{},"if(e.target.ragName==='P') {}",[14,74960,74961],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,74963,74964],{},"通过事件委托的方式实现tab栏切换改造：",[14,74966,74967],{},"一定要记住自定义属性！！！！！！",[14,74969,74970],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,74972,74973],{},"id是自定义的属性名",[14,74975,74976],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[93,74978,74980],{"className":58498,"code":74979,"language":58500,"meta":98,"style":98},"\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",[83,74981,74982,74992,75006,75010,75018,75032,75052,75072,75084,75092,75098,75108,75118,75122,75126,75132,75144,75156,75168,75184,75188,75192,75198,75210,75222,75234,75244,75254,75258,75262,75270,75282,75292,75304,75308,75312,75320,75330,75340,75350,75354,75358,75368,75382,75394,75398,75402,75414,75424,75440,75450,75454,75458,75472,75482,75492,75496,75500,75506,75520,75524,75528,75536,75546,75550,75554,75563,75573,75577,75585,75593,75597,75605,75619,75633,75645,75653,75692,75724,75756,75788,75820,75828,75836,75850,75884,75918,75952,75986,76020,76028,76036,76044,76049,76054,76073,76078,76098,76106,76111,76124,76145,76158,76162,76167,76172,76185,76205,76233,76237,76241,76245,76253,76261,76265],{"__ignoreMap":98},[102,74983,74984,74986,74988,74990],{"class":104,"line":105},[102,74985,59162],{"class":119},[102,74987,59166],{"class":59165},[102,74989,59169],{"class":112},[102,74991,59172],{"class":119},[102,74993,74994,74996,74998,75000,75002,75004],{"class":104,"line":116},[102,74995,1208],{"class":119},[102,74997,58500],{"class":59165},[102,74999,59181],{"class":112},[102,75001,260],{"class":119},[102,75003,59186],{"class":278},[102,75005,59172],{"class":119},[102,75007,75008],{"class":104,"line":123},[102,75009,652],{"emptyLinePlaceholder":651},[102,75011,75012,75014,75016],{"class":104,"line":130},[102,75013,1208],{"class":119},[102,75015,59199],{"class":59165},[102,75017,59172],{"class":119},[102,75019,75020,75022,75024,75026,75028,75030],{"class":104,"line":136},[102,75021,60009],{"class":119},[102,75023,59209],{"class":59165},[102,75025,59212],{"class":112},[102,75027,260],{"class":119},[102,75029,59217],{"class":278},[102,75031,66992],{"class":119},[102,75033,75034,75036,75038,75040,75042,75044,75046,75048,75050],{"class":104,"line":142},[102,75035,60009],{"class":119},[102,75037,59209],{"class":59165},[102,75039,59228],{"class":112},[102,75041,260],{"class":119},[102,75043,59233],{"class":278},[102,75045,59236],{"class":112},[102,75047,260],{"class":119},[102,75049,59241],{"class":278},[102,75051,66992],{"class":119},[102,75053,75054,75056,75058,75060,75062,75064,75066,75068,75070],{"class":104,"line":148},[102,75055,60009],{"class":119},[102,75057,59209],{"class":59165},[102,75059,387],{"class":112},[102,75061,260],{"class":119},[102,75063,59256],{"class":278},[102,75065,59236],{"class":112},[102,75067,260],{"class":119},[102,75069,59263],{"class":278},[102,75071,66992],{"class":119},[102,75073,75074,75076,75078,75080,75082],{"class":104,"line":157},[102,75075,60009],{"class":119},[102,75077,59272],{"class":59165},[102,75079,71490],{"class":119},[102,75081,59272],{"class":59165},[102,75083,59172],{"class":119},[102,75085,75086,75088,75090],{"class":104,"line":163},[102,75087,60009],{"class":119},[102,75089,8955],{"class":59165},[102,75091,59172],{"class":119},[102,75093,75094,75096],{"class":104,"line":175},[102,75095,15198],{"class":59165},[102,75097,1077],{"class":119},[102,75099,75100,75102,75104,75106],{"class":104,"line":181},[102,75101,62571],{"class":187},[102,75103,59302],{"class":119},[102,75105,8423],{"class":187},[102,75107,266],{"class":119},[102,75109,75110,75112,75114,75116],{"class":104,"line":202},[102,75111,62560],{"class":187},[102,75113,59302],{"class":119},[102,75115,8423],{"class":187},[102,75117,266],{"class":119},[102,75119,75120],{"class":104,"line":208},[102,75121,205],{"class":119},[102,75123,75124],{"class":104,"line":214},[102,75125,652],{"emptyLinePlaceholder":651},[102,75127,75128,75130],{"class":104,"line":225},[102,75129,71541],{"class":112},[102,75131,1077],{"class":119},[102,75133,75134,75136,75138,75140,75142],{"class":104,"line":230},[102,75135,62636],{"class":187},[102,75137,59302],{"class":119},[102,75139,71552],{"class":187},[102,75141,59357],{"class":108},[102,75143,266],{"class":119},[102,75145,75146,75148,75150,75152,75154],{"class":104,"line":236},[102,75147,62650],{"class":187},[102,75149,59302],{"class":119},[102,75151,71565],{"class":187},[102,75153,59357],{"class":108},[102,75155,266],{"class":119},[102,75157,75158,75160,75162,75164,75166],{"class":104,"line":242},[102,75159,62571],{"class":187},[102,75161,59302],{"class":119},[102,75163,5016],{"class":187},[102,75165,59357],{"class":108},[102,75167,266],{"class":119},[102,75169,75170,75172,75174,75176,75178,75180,75182],{"class":104,"line":248},[102,75171,69842],{"class":187},[102,75173,59302],{"class":119},[102,75175,7039],{"class":187},[102,75177,59357],{"class":108},[102,75179,59386],{"class":187},[102,75181,70109],{"class":187},[102,75183,266],{"class":119},[102,75185,75186],{"class":104,"line":254},[102,75187,205],{"class":119},[102,75189,75190],{"class":104,"line":269},[102,75191,652],{"emptyLinePlaceholder":651},[102,75193,75194,75196],{"class":104,"line":298},[102,75195,71610],{"class":112},[102,75197,1077],{"class":119},[102,75199,75200,75202,75204,75206,75208],{"class":104,"line":502},[102,75201,62636],{"class":187},[102,75203,59302],{"class":119},[102,75205,5569],{"class":187},[102,75207,9363],{"class":108},[102,75209,266],{"class":119},[102,75211,75212,75214,75216,75218,75220],{"class":104,"line":507},[102,75213,62650],{"class":187},[102,75215,59302],{"class":119},[102,75217,9929],{"class":187},[102,75219,59357],{"class":108},[102,75221,266],{"class":119},[102,75223,75224,75226,75228,75230,75232],{"class":104,"line":512},[102,75225,65224],{"class":187},[102,75227,59302],{"class":119},[102,75229,9929],{"class":187},[102,75231,59357],{"class":108},[102,75233,266],{"class":119},[102,75235,75236,75238,75240,75242],{"class":104,"line":521},[102,75237,62874],{"class":187},[102,75239,59302],{"class":119},[102,75241,59342],{"class":187},[102,75243,266],{"class":119},[102,75245,75246,75248,75250,75252],{"class":104,"line":526},[102,75247,62885],{"class":187},[102,75249,59302],{"class":119},[102,75251,59533],{"class":187},[102,75253,266],{"class":119},[102,75255,75256],{"class":104,"line":532},[102,75257,205],{"class":119},[102,75259,75260],{"class":104,"line":538},[102,75261,652],{"emptyLinePlaceholder":651},[102,75263,75264,75266,75268],{"class":104,"line":555},[102,75265,71610],{"class":112},[102,75267,71683],{"class":59165},[102,75269,1077],{"class":119},[102,75271,75272,75274,75276,75278,75280],{"class":104,"line":570},[102,75273,62787],{"class":187},[102,75275,59302],{"class":119},[102,75277,9823],{"class":187},[102,75279,59357],{"class":108},[102,75281,266],{"class":119},[102,75283,75284,75286,75288,75290],{"class":104,"line":581},[102,75285,70199],{"class":187},[102,75287,59302],{"class":119},[102,75289,71706],{"class":187},[102,75291,266],{"class":119},[102,75293,75294,75296,75298,75300,75302],{"class":104,"line":819},[102,75295,69865],{"class":187},[102,75297,59302],{"class":119},[102,75299,5016],{"class":187},[102,75301,59357],{"class":108},[102,75303,266],{"class":119},[102,75305,75306],{"class":104,"line":828},[102,75307,205],{"class":119},[102,75309,75310],{"class":104,"line":837},[102,75311,652],{"emptyLinePlaceholder":651},[102,75313,75314,75316,75318],{"class":104,"line":842},[102,75315,71610],{"class":112},[102,75317,69157],{"class":59165},[102,75319,1077],{"class":119},[102,75321,75322,75324,75326,75328],{"class":104,"line":855},[102,75323,62597],{"class":187},[102,75325,59302],{"class":119},[102,75327,62602],{"class":187},[102,75329,266],{"class":119},[102,75331,75332,75334,75336,75338],{"class":104,"line":860},[102,75333,62874],{"class":187},[102,75335,59302],{"class":119},[102,75337,59342],{"class":187},[102,75339,266],{"class":119},[102,75341,75342,75344,75346,75348],{"class":104,"line":871},[102,75343,62885],{"class":187},[102,75345,59302],{"class":119},[102,75347,59445],{"class":187},[102,75349,266],{"class":119},[102,75351,75352],{"class":104,"line":1359},[102,75353,205],{"class":119},[102,75355,75356],{"class":104,"line":1368},[102,75357,652],{"emptyLinePlaceholder":651},[102,75359,75360,75362,75364,75366],{"class":104,"line":1373},[102,75361,71610],{"class":112},[102,75363,69157],{"class":59165},[102,75365,62940],{"class":59165},[102,75367,1077],{"class":119},[102,75369,75370,75372,75374,75376,75378,75380],{"class":104,"line":1378},[102,75371,62571],{"class":187},[102,75373,59302],{"class":119},[102,75375,8423],{"class":187},[102,75377,17718],{"class":187},[102,75379,59357],{"class":108},[102,75381,266],{"class":119},[102,75383,75384,75386,75388,75390,75392],{"class":104,"line":1384},[102,75385,62787],{"class":187},[102,75387,59302],{"class":119},[102,75389,9576],{"class":187},[102,75391,59357],{"class":108},[102,75393,266],{"class":119},[102,75395,75396],{"class":104,"line":1398},[102,75397,205],{"class":119},[102,75399,75400],{"class":104,"line":1424},[102,75401,652],{"emptyLinePlaceholder":651},[102,75403,75404,75406,75408,75410,75412],{"class":104,"line":1429},[102,75405,71610],{"class":112},[102,75407,69157],{"class":59165},[102,75409,62940],{"class":59165},[102,75411,4378],{"class":59165},[102,75413,1077],{"class":119},[102,75415,75416,75418,75420,75422],{"class":104,"line":1435},[102,75417,71835],{"class":187},[102,75419,59302],{"class":119},[102,75421,62602],{"class":187},[102,75423,266],{"class":119},[102,75425,75426,75428,75430,75432,75434,75436,75438],{"class":104,"line":1450},[102,75427,70097],{"class":187},[102,75429,59302],{"class":119},[102,75431,7044],{"class":187},[102,75433,59357],{"class":108},[102,75435,59386],{"class":187},[102,75437,71856],{"class":187},[102,75439,266],{"class":119},[102,75441,75442,75444,75446,75448],{"class":104,"line":1473},[102,75443,65281],{"class":187},[102,75445,59302],{"class":119},[102,75447,70234],{"class":187},[102,75449,266],{"class":119},[102,75451,75452],{"class":104,"line":1478},[102,75453,205],{"class":119},[102,75455,75456],{"class":104,"line":1484},[102,75457,652],{"emptyLinePlaceholder":651},[102,75459,75460,75462,75464,75466,75468,75470],{"class":104,"line":1499},[102,75461,71610],{"class":112},[102,75463,69157],{"class":59165},[102,75465,62940],{"class":59165},[102,75467,4378],{"class":59165},[102,75469,71889],{"class":112},[102,75471,1077],{"class":119},[102,75473,75474,75476,75478,75480],{"class":104,"line":1508},[102,75475,69656],{"class":187},[102,75477,59302],{"class":119},[102,75479,71900],{"class":187},[102,75481,266],{"class":119},[102,75483,75484,75486,75488,75490],{"class":104,"line":1513},[102,75485,65281],{"class":187},[102,75487,59302],{"class":119},[102,75489,71900],{"class":187},[102,75491,266],{"class":119},[102,75493,75494],{"class":104,"line":1524},[102,75495,205],{"class":119},[102,75497,75498],{"class":104,"line":1529},[102,75499,652],{"emptyLinePlaceholder":651},[102,75501,75502,75504],{"class":104,"line":1538},[102,75503,71925],{"class":112},[102,75505,1077],{"class":119},[102,75507,75508,75510,75512,75514,75516,75518],{"class":104,"line":2089},[102,75509,62560],{"class":187},[102,75511,59302],{"class":119},[102,75513,8423],{"class":187},[102,75515,71938],{"class":187},[102,75517,59357],{"class":108},[102,75519,266],{"class":119},[102,75521,75522],{"class":104,"line":2094},[102,75523,205],{"class":119},[102,75525,75526],{"class":104,"line":2100},[102,75527,652],{"emptyLinePlaceholder":651},[102,75529,75530,75532,75534],{"class":104,"line":2106},[102,75531,71925],{"class":112},[102,75533,70039],{"class":112},[102,75535,1077],{"class":119},[102,75537,75538,75540,75542,75544],{"class":104,"line":2120},[102,75539,62874],{"class":187},[102,75541,59302],{"class":119},[102,75543,62602],{"class":187},[102,75545,266],{"class":119},[102,75547,75548],{"class":104,"line":2128},[102,75549,205],{"class":119},[102,75551,75552],{"class":104,"line":2149},[102,75553,652],{"emptyLinePlaceholder":651},[102,75555,75556,75558,75561],{"class":104,"line":2161},[102,75557,71925],{"class":112},[102,75559,75560],{"class":112}," .active",[102,75562,1077],{"class":119},[102,75564,75565,75567,75569,75571],{"class":104,"line":2167},[102,75566,62874],{"class":187},[102,75568,59302],{"class":119},[102,75570,68734],{"class":187},[102,75572,266],{"class":119},[102,75574,75575],{"class":104,"line":2190},[102,75576,205],{"class":119},[102,75578,75579,75581,75583],{"class":104,"line":2196},[102,75580,60282],{"class":119},[102,75582,8955],{"class":59165},[102,75584,59172],{"class":119},[102,75586,75587,75589,75591],{"class":104,"line":2219},[102,75588,59650],{"class":119},[102,75590,59199],{"class":59165},[102,75592,59172],{"class":119},[102,75594,75595],{"class":104,"line":2233},[102,75596,652],{"emptyLinePlaceholder":651},[102,75598,75599,75601,75603],{"class":104,"line":2253},[102,75600,1208],{"class":119},[102,75602,59665],{"class":59165},[102,75604,59172],{"class":119},[102,75606,75607,75609,75611,75613,75615,75617],{"class":104,"line":2259},[102,75608,60009],{"class":119},[102,75610,59476],{"class":59165},[102,75612,61351],{"class":112},[102,75614,260],{"class":119},[102,75616,72040],{"class":278},[102,75618,59172],{"class":119},[102,75620,75621,75623,75625,75627,75629,75631],{"class":104,"line":2270},[102,75622,59206],{"class":119},[102,75624,59476],{"class":59165},[102,75626,61351],{"class":112},[102,75628,260],{"class":119},[102,75630,72055],{"class":278},[102,75632,59172],{"class":119},[102,75634,75635,75637,75639,75641,75643],{"class":104,"line":2293},[102,75636,63099],{"class":119},[102,75638,48],{"class":59165},[102,75640,72066],{"class":119},[102,75642,48],{"class":59165},[102,75644,59172],{"class":119},[102,75646,75647,75649,75651],{"class":104,"line":2315},[102,75648,63099],{"class":119},[102,75650,59],{"class":59165},[102,75652,59172],{"class":119},[102,75654,75655,75657,75659,75661,75663,75665,75667,75669,75671,75673,75675,75677,75679,75682,75684,75686,75688,75690],{"class":104,"line":2320},[102,75656,63167],{"class":119},[102,75658,62],{"class":59165},[102,75660,68917],{"class":119},[102,75662,9275],{"class":59165},[102,75664,61351],{"class":112},[102,75666,260],{"class":119},[102,75668,67571],{"class":278},[102,75670,68922],{"class":112},[102,75672,260],{"class":119},[102,75674,72101],{"class":278},[102,75676,61816],{"class":112},[102,75678,260],{"class":119},[102,75680,75681],{"class":278},"\"0\"",[102,75683,72104],{"class":119},[102,75685,9275],{"class":59165},[102,75687,63179],{"class":119},[102,75689,62],{"class":59165},[102,75691,59172],{"class":119},[102,75693,75694,75696,75698,75700,75702,75704,75706,75708,75710,75712,75714,75716,75718,75720,75722],{"class":104,"line":2326},[102,75695,63167],{"class":119},[102,75697,62],{"class":59165},[102,75699,68917],{"class":119},[102,75701,9275],{"class":59165},[102,75703,68922],{"class":112},[102,75705,260],{"class":119},[102,75707,72101],{"class":278},[102,75709,61816],{"class":112},[102,75711,260],{"class":119},[102,75713,12491],{"class":278},[102,75715,72131],{"class":119},[102,75717,9275],{"class":59165},[102,75719,63179],{"class":119},[102,75721,62],{"class":59165},[102,75723,59172],{"class":119},[102,75725,75726,75728,75730,75732,75734,75736,75738,75740,75742,75744,75746,75748,75750,75752,75754],{"class":104,"line":2340},[102,75727,63167],{"class":119},[102,75729,62],{"class":59165},[102,75731,68917],{"class":119},[102,75733,9275],{"class":59165},[102,75735,68922],{"class":112},[102,75737,260],{"class":119},[102,75739,72101],{"class":278},[102,75741,61816],{"class":112},[102,75743,260],{"class":119},[102,75745,12514],{"class":278},[102,75747,72158],{"class":119},[102,75749,9275],{"class":59165},[102,75751,63179],{"class":119},[102,75753,62],{"class":59165},[102,75755,59172],{"class":119},[102,75757,75758,75760,75762,75764,75766,75768,75770,75772,75774,75776,75778,75780,75782,75784,75786],{"class":104,"line":2354},[102,75759,63167],{"class":119},[102,75761,62],{"class":59165},[102,75763,68917],{"class":119},[102,75765,9275],{"class":59165},[102,75767,68922],{"class":112},[102,75769,260],{"class":119},[102,75771,72101],{"class":278},[102,75773,61816],{"class":112},[102,75775,260],{"class":119},[102,75777,12527],{"class":278},[102,75779,72185],{"class":119},[102,75781,9275],{"class":59165},[102,75783,63179],{"class":119},[102,75785,62],{"class":59165},[102,75787,59172],{"class":119},[102,75789,75790,75792,75794,75796,75798,75800,75802,75804,75806,75808,75810,75812,75814,75816,75818],{"class":104,"line":2359},[102,75791,63167],{"class":119},[102,75793,62],{"class":59165},[102,75795,68917],{"class":119},[102,75797,9275],{"class":59165},[102,75799,68922],{"class":112},[102,75801,260],{"class":119},[102,75803,72101],{"class":278},[102,75805,61816],{"class":112},[102,75807,260],{"class":119},[102,75809,12540],{"class":278},[102,75811,72212],{"class":119},[102,75813,9275],{"class":59165},[102,75815,63179],{"class":119},[102,75817,62],{"class":59165},[102,75819,59172],{"class":119},[102,75821,75822,75824,75826],{"class":104,"line":2373},[102,75823,63272],{"class":119},[102,75825,59],{"class":59165},[102,75827,59172],{"class":119},[102,75829,75830,75832,75834],{"class":104,"line":2378},[102,75831,59641],{"class":119},[102,75833,59476],{"class":59165},[102,75835,59172],{"class":119},[102,75837,75838,75840,75842,75844,75846,75848],{"class":104,"line":2384},[102,75839,59206],{"class":119},[102,75841,59476],{"class":59165},[102,75843,61351],{"class":112},[102,75845,260],{"class":119},[102,75847,72249],{"class":278},[102,75849,59172],{"class":119},[102,75851,75852,75854,75856,75858,75860,75862,75864,75866,75868,75870,75872,75874,75876,75878,75880,75882],{"class":104,"line":2389},[102,75853,63099],{"class":119},[102,75855,59476],{"class":59165},[102,75857,61351],{"class":112},[102,75859,260],{"class":119},[102,75861,72264],{"class":278},[102,75863,68917],{"class":119},[102,75865,6750],{"class":59165},[102,75867,63104],{"class":112},[102,75869,260],{"class":119},[102,75871,72275],{"class":278},[102,75873,63112],{"class":112},[102,75875,260],{"class":119},[102,75877,16439],{"class":278},[102,75879,72284],{"class":119},[102,75881,59476],{"class":59165},[102,75883,59172],{"class":119},[102,75885,75886,75888,75890,75892,75894,75896,75898,75900,75902,75904,75906,75908,75910,75912,75914,75916],{"class":104,"line":2403},[102,75887,63099],{"class":119},[102,75889,59476],{"class":59165},[102,75891,61351],{"class":112},[102,75893,260],{"class":119},[102,75895,70488],{"class":278},[102,75897,68917],{"class":119},[102,75899,6750],{"class":59165},[102,75901,63104],{"class":112},[102,75903,260],{"class":119},[102,75905,72311],{"class":278},[102,75907,63112],{"class":112},[102,75909,260],{"class":119},[102,75911,16439],{"class":278},[102,75913,72284],{"class":119},[102,75915,59476],{"class":59165},[102,75917,59172],{"class":119},[102,75919,75920,75922,75924,75926,75928,75930,75932,75934,75936,75938,75940,75942,75944,75946,75948,75950],{"class":104,"line":2408},[102,75921,63099],{"class":119},[102,75923,59476],{"class":59165},[102,75925,61351],{"class":112},[102,75927,260],{"class":119},[102,75929,70488],{"class":278},[102,75931,68917],{"class":119},[102,75933,6750],{"class":59165},[102,75935,63104],{"class":112},[102,75937,260],{"class":119},[102,75939,72346],{"class":278},[102,75941,63112],{"class":112},[102,75943,260],{"class":119},[102,75945,16439],{"class":278},[102,75947,72284],{"class":119},[102,75949,59476],{"class":59165},[102,75951,59172],{"class":119},[102,75953,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972,75974,75976,75978,75980,75982,75984],{"class":104,"line":2413},[102,75955,63099],{"class":119},[102,75957,59476],{"class":59165},[102,75959,61351],{"class":112},[102,75961,260],{"class":119},[102,75963,70488],{"class":278},[102,75965,68917],{"class":119},[102,75967,6750],{"class":59165},[102,75969,63104],{"class":112},[102,75971,260],{"class":119},[102,75973,72381],{"class":278},[102,75975,63112],{"class":112},[102,75977,260],{"class":119},[102,75979,16439],{"class":278},[102,75981,72284],{"class":119},[102,75983,59476],{"class":59165},[102,75985,59172],{"class":119},[102,75987,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76008,76010,76012,76014,76016,76018],{"class":104,"line":2427},[102,75989,63099],{"class":119},[102,75991,59476],{"class":59165},[102,75993,61351],{"class":112},[102,75995,260],{"class":119},[102,75997,70488],{"class":278},[102,75999,68917],{"class":119},[102,76001,6750],{"class":59165},[102,76003,63104],{"class":112},[102,76005,260],{"class":119},[102,76007,72416],{"class":278},[102,76009,63112],{"class":112},[102,76011,260],{"class":119},[102,76013,16439],{"class":278},[102,76015,72284],{"class":119},[102,76017,59476],{"class":59165},[102,76019,59172],{"class":119},[102,76021,76022,76024,76026],{"class":104,"line":2440},[102,76023,59641],{"class":119},[102,76025,59476],{"class":59165},[102,76027,59172],{"class":119},[102,76029,76030,76032,76034],{"class":104,"line":2445},[102,76031,60282],{"class":119},[102,76033,59476],{"class":59165},[102,76035,59172],{"class":119},[102,76037,76038,76040,76042],{"class":104,"line":2458},[102,76039,60009],{"class":119},[102,76041,59678],{"class":59165},[102,76043,59172],{"class":119},[102,76045,76046],{"class":104,"line":2463},[102,76047,76048],{"class":126},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[102,76050,76051],{"class":104,"line":2468},[102,76052,76053],{"class":126},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[102,76055,76056,76058,76060,76062,76064,76066,76068,76071],{"class":104,"line":2473},[102,76057,19961],{"class":108},[102,76059,69157],{"class":187},[102,76061,22296],{"class":108},[102,76063,62261],{"class":119},[102,76065,62264],{"class":112},[102,76067,380],{"class":119},[102,76069,76070],{"class":278},"'.tab-nav ul'",[102,76072,390],{"class":119},[102,76074,76075],{"class":104,"line":2486},[102,76076,76077],{"class":126},"    \u002F\u002F 2.添加事件\n",[102,76079,76080,76082,76084,76086,76088,76090,76092,76094,76096],{"class":104,"line":2491},[102,76081,74819],{"class":119},[102,76083,65678],{"class":112},[102,76085,380],{"class":119},[102,76087,65683],{"class":278},[102,76089,2571],{"class":119},[102,76091,62314],{"class":108},[102,76093,2432],{"class":119},[102,76095,9116],{"class":386},[102,76097,1105],{"class":119},[102,76099,76100,76102,76104],{"class":104,"line":40498},[102,76101,66109],{"class":119},[102,76103,74875],{"class":112},[102,76105,74878],{"class":119},[102,76107,76108],{"class":104,"line":40504},[102,76109,76110],{"class":126},"      \u002F\u002Fe.targer是我们点击的对象\n",[102,76112,76113,76115,76117,76119,76122],{"class":104,"line":40510},[102,76114,62345],{"class":108},[102,76116,74899],{"class":119},[102,76118,62351],{"class":108},[102,76120,76121],{"class":278}," 'A'",[102,76123,1105],{"class":119},[102,76125,76126,76128,76130,76132,76135,76137,76139,76141,76143],{"class":104,"line":40516},[102,76127,59790],{"class":119},[102,76129,62264],{"class":112},[102,76131,380],{"class":119},[102,76133,76134],{"class":278},"'.active'",[102,76136,64868],{"class":119},[102,76138,64871],{"class":112},[102,76140,380],{"class":119},[102,76142,72579],{"class":278},[102,76144,390],{"class":119},[102,76146,76147,76150,76152,76154,76156],{"class":104,"line":40522},[102,76148,76149],{"class":119},"        e.target.classList.",[102,76151,14139],{"class":112},[102,76153,380],{"class":119},[102,76155,72579],{"class":278},[102,76157,390],{"class":119},[102,76159,76160],{"class":104,"line":40533},[102,76161,652],{"emptyLinePlaceholder":651},[102,76163,76164],{"class":104,"line":40539},[102,76165,76166],{"class":126},"        \u002F\u002F 下面大盒子模块\n",[102,76168,76169],{"class":104,"line":40559},[102,76170,76171],{"class":126},"        \u002F\u002F console.log(e.target.dataset.id)\n",[102,76173,76174,76176,76178,76180,76182],{"class":104,"line":40565},[102,76175,69135],{"class":108},[102,76177,11848],{"class":187},[102,76179,22296],{"class":108},[102,76181,53431],{"class":108},[102,76183,76184],{"class":119},"e.target.dataset.id\n",[102,76186,76187,76189,76191,76193,76195,76197,76199,76201,76203],{"class":104,"line":40576},[102,76188,59790],{"class":119},[102,76190,62264],{"class":112},[102,76192,380],{"class":119},[102,76194,72627],{"class":278},[102,76196,64868],{"class":119},[102,76198,64871],{"class":112},[102,76200,380],{"class":119},[102,76202,72579],{"class":278},[102,76204,390],{"class":119},[102,76206,76207,76209,76211,76213,76215,76217,76219,76221,76223,76225,76227,76229,76231],{"class":104,"line":40582},[102,76208,59790],{"class":119},[102,76210,62264],{"class":112},[102,76212,380],{"class":119},[102,76214,72653],{"class":278},[102,76216,9473],{"class":119},[102,76218,53431],{"class":108},[102,76220,32983],{"class":187},[102,76222,64897],{"class":278},[102,76224,64868],{"class":119},[102,76226,14139],{"class":112},[102,76228,380],{"class":119},[102,76230,72579],{"class":278},[102,76232,390],{"class":119},[102,76234,76235],{"class":104,"line":40588},[102,76236,652],{"emptyLinePlaceholder":651},[102,76238,76239],{"class":104,"line":40594},[102,76240,60263],{"class":119},[102,76242,76243],{"class":104,"line":40600},[102,76244,41326],{"class":119},[102,76246,76247,76249,76251],{"class":104,"line":40606},[102,76248,60282],{"class":119},[102,76250,59678],{"class":59165},[102,76252,59172],{"class":119},[102,76254,76255,76257,76259],{"class":104,"line":40612},[102,76256,59650],{"class":119},[102,76258,59665],{"class":59165},[102,76260,59172],{"class":119},[102,76262,76263],{"class":104,"line":40618},[102,76264,652],{"emptyLinePlaceholder":651},[102,76266,76267,76269,76271],{"class":104,"line":40638},[102,76268,59650],{"class":119},[102,76270,58500],{"class":59165},[102,76272,59172],{"class":119},[48,76274,76276],{"id":76275},"_333-页面加载事件","3.3.3 页面加载事件",[87,76278,76279],{},[62,76280,76281],{},"load",[14,76283,76284],{},[6750,76285],{"alt":98,"src":76286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,76288,76289],{},"window代表整个窗口，比document还要大",[14,76291,76292],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,76294,76295],{},"img.addEventListener('load', function () {",[14,76297,76298],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,76300,60329],{},[87,76302,76303],{"start":116},[62,76304,76305],{},"DOMContentLoaded",[14,76307,76308],{},[6750,76309],{"alt":98,"src":76310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,76312,76313],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[48,76315,76317],{"id":76316},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,76319,76320],{},[6750,76321],{"alt":98,"src":76322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,76324,76325],{},[6750,76326],{"alt":98,"src":76327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,76329,76330],{},[6750,76331],{"alt":98,"src":76332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,76334,76335],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,76337,76338],{},"获得的是数字型数据，不带单位",[14,76340,76341],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,76343,76344],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,76346,76347],{},"它是通过document.documentElement来获取",[14,76349,76350],{},[6750,76351],{"alt":98,"src":76352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,76354,76355],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[48,76357,76359],{"id":76358},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,76361,76362],{},[6750,76363],{"alt":98,"src":76364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,76366,76367],{},[6750,76368],{"alt":98,"src":76369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[48,76371,76373],{"id":76372},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,76375,76376],{},[6750,76377],{"alt":98,"src":76378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,76380,76381],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,76383,76384],{},[6750,76385],{"alt":98,"src":76386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,76388,76389],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,76391,76392],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,76394,76395],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,76397,76398],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,76400,76401],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,76403,76404],{},[6750,76405],{"alt":98,"src":76406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,76408,76409],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,76411,76412],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,76414,76415],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,76417,76418],{},"e.pageX-box.getBoundingClientRect()",[48,76420,76422],{"id":76421},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,76424,76425],{},[6750,76426],{"alt":98,"src":76427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,76429,76430],{},"这个是相对于视口来说的，它是个方法，不是属性值",[48,76432,76434],{"id":76433},"_338-总结","3.3.8 总结",[14,76436,76437],{},[6750,76438],{"alt":98,"src":76439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,76441,76442],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,76444,76445],{},"修改盒子的宽高只能通过width和height来实现",[48,76447,76449],{"id":76448},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[93,76451,76453],{"className":58498,"code":76452,"language":58500,"meta":98,"style":98},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[83,76454,76455,76460,76465,76470,76475],{"__ignoreMap":98},[102,76456,76457],{"class":104,"line":105},[102,76458,76459],{"class":119},"\u002F* 页面滑动 *\u002F\n",[102,76461,76462],{"class":104,"line":116},[102,76463,76464],{"class":119},"html {\n",[102,76466,76467],{"class":104,"line":123},[102,76468,76469],{"class":119},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[102,76471,76472],{"class":104,"line":130},[102,76473,76474],{"class":119},"  scroll-behavior: smooth;\n",[102,76476,76477],{"class":104,"line":136},[102,76478,301],{"class":119},[14,76480,76481],{},"默认是auto",[48,76483,76485],{"id":76484},"_3310-日期对象","3.3.10 日期对象",[7601,76487,76489],{"id":76488},"_33101-实例化","3.3.10.1 实例化",[14,76491,76492],{},[6750,76493],{"alt":98,"src":76494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[7601,76496,76498],{"id":76497},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,76500,76501],{},[6750,76502],{"alt":98,"src":76503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,76505,76506],{},"月份+1",[14,76508,76509],{},"老外认为第一天为0，星期天",[14,76511,76512],{},"方法使用的时候必须要跟括号",[14,76514,76515],{},"快速获得日期",[14,76517,76518],{},"\u002F\u002F 得到年月日",[14,76520,76521],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,76523,76524],{},"\u002F\u002F 得到当地日期",[14,76526,76527],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,76529,76530],{},"\u002F\u002F 得到当地时间",[14,76532,76533],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,76535,76536],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,76538,76539],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[59678,76541,76542],{},"\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",[14,76544,76545],{},"学会去封装函数！",[7601,76547,76549],{"id":76548},"_33103-时间戳","3.3.10.3 时间戳",[14,76551,76552],{},[6750,76553],{"alt":98,"src":76554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,76556,76557],{},[6750,76558],{"alt":98,"src":76559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,76561,76562],{},"三种方法记住一个就可以",[48,76564,76566],{"id":76565},"_3311-节点操作","3.3.11 节点操作",[7601,76568,76570],{"id":76569},"_33111-dom节点","3.3.11.1 DOM节点",[14,76572,76573],{},[6750,76574],{"alt":98,"src":76575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,76577,76578],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[7601,76580,76582],{"id":76581},"_33112-查找节点","3.3.11.2 查找节点",[14,76584,76585],{},"前边的document.querySelector()是获取的元素",[14,76587,76588],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,76590,76591],{},[6750,76592],{"alt":98,"src":76593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[87,76595,76596],{},[62,76597,76598],{},"父节点",[14,76600,76601],{},[6750,76602],{"alt":98,"src":76603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[87,76605,76606],{"start":116},[62,76607,76608],{},"子节点",[14,76610,76611],{},[6750,76612],{"alt":98,"src":76613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,76615,76616],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,76618,76619],{},"children获得的是伪数组，是亲儿子",[87,76621,76622],{"start":123},[62,76623,76624],{},"兄弟节点",[14,76626,76627],{},[6750,76628],{"alt":98,"src":76629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[7601,76631,76633],{"id":76632},"_33113-增加节点","3.3.11.3 增加节点",[14,76635,76636],{},[6750,76637],{"alt":98,"src":76638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,76640,76641],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,76643,76644],{},[6750,76645],{"alt":98,"src":76646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,76648,76649],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,76651,76652],{},"下面是写法的部分展示，就按照下边的格式来写",[14,76654,76655],{},"例：",[59678,76657,76658],{},"\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",[14,76660,76661],{},[6750,76662],{"alt":98,"src":76663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,76665,76666],{},"false只克隆标签，里边的内容不会克隆过来",[93,76668,76670],{"className":58498,"code":76669,"language":58500,"meta":98,"style":98},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[83,76671,76672],{"__ignoreMap":98},[102,76673,76674],{"class":104,"line":105},[102,76675,76669],{"class":119},[7601,76677,76679],{"id":76678},"_33114-删除节点","3.3.11.4 删除节点",[14,76681,76682],{},[6750,76683],{"alt":98,"src":76684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,76686,76687],{},"父亲删儿子",[14,76689,76690],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[48,76692,76694],{"id":76693},"_3312-m端事件","3.3.12 M端事件",[14,76696,76697],{},"M端就是移动端",[14,76699,76700],{},[6750,76701],{"alt":98,"src":76702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[48,76704,76706],{"id":76705},"_3313-插件","3.3.13 插件",[14,76708,76709],{},"要熟悉官网！！！",[14,76711,76712],{},[9275,76713,76714],{"href":76714,"rel":76715},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[31729],[14,76717,76718],{},[9275,76719,76720],{"href":76720,"rel":76721},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[31729],[48,76723,76725],{"id":76724},"_3314-学生信息表","3.3.14 学生信息表",[87,76727,76728,76731,76734,76737,76740,76743,76746,76749],{},[62,76729,76730],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[62,76732,76733],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[62,76735,76736],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[62,76738,76739],{},"用好表单元素自带的属性，value,name等",[62,76741,76742],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[62,76744,76745],{},"不要忘记事件对象",[62,76747,76748],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[62,76750,76751],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,76753,76754],{},"结构：",[93,76756,76758],{"className":58498,"code":76757,"language":58500,"meta":98,"style":98},"\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",[83,76759,76760,76770,76784,76788,76796,76810,76830,76851,76864,76888,76896,76900,76908,76921,76942,76970,76998,77003,77025,77045,77064,77072,77100,77122,77142,77162,77182,77202,77222,77230,77250,77258,77262,77275,77283,77291,77299,77312,77325,77338,77351,77364,77377,77390,77398,77406,77414,77419,77424,77429,77434,77439,77444,77449,77454,77459,77464,77469,77474,77479,77487,77495,77503,77507,77527,77546,77566,77586,77606,77626,77630,77635,77655,77660,77670,77675,77680,77700,77722,77727,77737,77741,77745,77750,77755,77784,77798,77813,77817,77821,77825,77830,77841,77854,77859,77864,77869,77874,77879,77883,77888,77893,77902,77907,77912,77924,77929,77936,77940,77945,77955,77960,77970,77975,78003,78024,78034,78054,78072,78089,78106,78123,78140,78144,78154,78159,78164,78169,78180,78184,78188,78192,78197,78202,78223,78235,78240,78245,78250,78264,78269,78276,78280,78284,78292,78296,78304,78308],{"__ignoreMap":98},[102,76761,76762,76764,76766,76768],{"class":104,"line":105},[102,76763,59162],{"class":119},[102,76765,59166],{"class":59165},[102,76767,59169],{"class":112},[102,76769,59172],{"class":119},[102,76771,76772,76774,76776,76778,76780,76782],{"class":104,"line":116},[102,76773,1208],{"class":119},[102,76775,58500],{"class":59165},[102,76777,59181],{"class":112},[102,76779,260],{"class":119},[102,76781,59186],{"class":278},[102,76783,59172],{"class":119},[102,76785,76786],{"class":104,"line":123},[102,76787,652],{"emptyLinePlaceholder":651},[102,76789,76790,76792,76794],{"class":104,"line":130},[102,76791,1208],{"class":119},[102,76793,59199],{"class":59165},[102,76795,59172],{"class":119},[102,76797,76798,76800,76802,76804,76806,76808],{"class":104,"line":136},[102,76799,60009],{"class":119},[102,76801,59209],{"class":59165},[102,76803,59212],{"class":112},[102,76805,260],{"class":119},[102,76807,59217],{"class":278},[102,76809,66992],{"class":119},[102,76811,76812,76814,76816,76818,76820,76822,76824,76826,76828],{"class":104,"line":142},[102,76813,60009],{"class":119},[102,76815,59209],{"class":59165},[102,76817,387],{"class":112},[102,76819,260],{"class":119},[102,76821,59256],{"class":278},[102,76823,59236],{"class":112},[102,76825,260],{"class":119},[102,76827,59263],{"class":278},[102,76829,66992],{"class":119},[102,76831,76832,76834,76836,76838,76840,76842,76844,76846,76849],{"class":104,"line":148},[102,76833,60009],{"class":119},[102,76835,59209],{"class":59165},[102,76837,59228],{"class":112},[102,76839,260],{"class":119},[102,76841,59233],{"class":278},[102,76843,59236],{"class":112},[102,76845,260],{"class":119},[102,76847,76848],{"class":278},"\"ie=edge\"",[102,76850,66992],{"class":119},[102,76852,76853,76855,76857,76860,76862],{"class":104,"line":157},[102,76854,60009],{"class":119},[102,76856,59272],{"class":59165},[102,76858,76859],{"class":119},">学生信息管理\u003C\u002F",[102,76861,59272],{"class":59165},[102,76863,59172],{"class":119},[102,76865,76866,76868,76871,76874,76876,76879,76881,76883,76886],{"class":104,"line":163},[102,76867,60009],{"class":119},[102,76869,76870],{"class":59165},"link",[102,76872,76873],{"class":112}," rel",[102,76875,260],{"class":119},[102,76877,76878],{"class":278},"\"stylesheet\"",[102,76880,68922],{"class":112},[102,76882,260],{"class":119},[102,76884,76885],{"class":278},"\"css\u002Findex.css\"",[102,76887,66992],{"class":119},[102,76889,76890,76892,76894],{"class":104,"line":175},[102,76891,59650],{"class":119},[102,76893,59199],{"class":59165},[102,76895,59172],{"class":119},[102,76897,76898],{"class":104,"line":181},[102,76899,652],{"emptyLinePlaceholder":651},[102,76901,76902,76904,76906],{"class":104,"line":202},[102,76903,1208],{"class":119},[102,76905,59665],{"class":59165},[102,76907,59172],{"class":119},[102,76909,76910,76912,76914,76917,76919],{"class":104,"line":208},[102,76911,60009],{"class":119},[102,76913,10],{"class":59165},[102,76915,76916],{"class":119},">新增学员\u003C\u002F",[102,76918,10],{"class":59165},[102,76920,59172],{"class":119},[102,76922,76923,76925,76927,76929,76931,76933,76936,76938,76940],{"class":104,"line":214},[102,76924,60009],{"class":119},[102,76926,74490],{"class":59165},[102,76928,61351],{"class":112},[102,76930,260],{"class":119},[102,76932,70529],{"class":278},[102,76934,76935],{"class":112}," autocomplete",[102,76937,260],{"class":119},[102,76939,39641],{"class":278},[102,76941,59172],{"class":119},[102,76943,76944,76947,76949,76951,76953,76955,76957,76959,76962,76964,76966,76968],{"class":104,"line":225},[102,76945,76946],{"class":119},"    姓名：\u003C",[102,76948,61686],{"class":59165},[102,76950,61689],{"class":112},[102,76952,260],{"class":119},[102,76954,70564],{"class":278},[102,76956,61351],{"class":112},[102,76958,260],{"class":119},[102,76960,76961],{"class":278},"\"uname\"",[102,76963,387],{"class":112},[102,76965,260],{"class":119},[102,76967,76961],{"class":278},[102,76969,66992],{"class":119},[102,76971,76972,76975,76977,76979,76981,76983,76985,76987,76990,76992,76994,76996],{"class":104,"line":230},[102,76973,76974],{"class":119},"    年龄：\u003C",[102,76976,61686],{"class":59165},[102,76978,61689],{"class":112},[102,76980,260],{"class":119},[102,76982,70564],{"class":278},[102,76984,61351],{"class":112},[102,76986,260],{"class":119},[102,76988,76989],{"class":278},"\"age\"",[102,76991,387],{"class":112},[102,76993,260],{"class":119},[102,76995,76989],{"class":278},[102,76997,66992],{"class":119},[102,76999,77000],{"class":104,"line":236},[102,77001,77002],{"class":119},"    性别:\n",[102,77004,77005,77007,77010,77012,77014,77017,77019,77021,77023],{"class":104,"line":242},[102,77006,59206],{"class":119},[102,77008,77009],{"class":59165},"select",[102,77011,387],{"class":112},[102,77013,260],{"class":119},[102,77015,77016],{"class":278},"\"gender\"",[102,77018,61351],{"class":112},[102,77020,260],{"class":119},[102,77022,77016],{"class":278},[102,77024,59172],{"class":119},[102,77026,77027,77029,77032,77034,77036,77038,77041,77043],{"class":104,"line":248},[102,77028,63099],{"class":119},[102,77030,77031],{"class":59165},"option",[102,77033,74516],{"class":112},[102,77035,260],{"class":119},[102,77037,18704],{"class":278},[102,77039,77040],{"class":119},">男\u003C\u002F",[102,77042,77031],{"class":59165},[102,77044,59172],{"class":119},[102,77046,77047,77049,77051,77053,77055,77057,77060,77062],{"class":104,"line":254},[102,77048,63099],{"class":119},[102,77050,77031],{"class":59165},[102,77052,74516],{"class":112},[102,77054,260],{"class":119},[102,77056,18773],{"class":278},[102,77058,77059],{"class":119},">女\u003C\u002F",[102,77061,77031],{"class":59165},[102,77063,59172],{"class":119},[102,77065,77066,77068,77070],{"class":104,"line":269},[102,77067,59641],{"class":119},[102,77069,77009],{"class":59165},[102,77071,59172],{"class":119},[102,77073,77074,77077,77079,77081,77083,77085,77087,77089,77092,77094,77096,77098],{"class":104,"line":298},[102,77075,77076],{"class":119},"    薪资：\u003C",[102,77078,61686],{"class":59165},[102,77080,61689],{"class":112},[102,77082,260],{"class":119},[102,77084,70564],{"class":278},[102,77086,61351],{"class":112},[102,77088,260],{"class":119},[102,77090,77091],{"class":278},"\"salary\"",[102,77093,387],{"class":112},[102,77095,260],{"class":119},[102,77097,77091],{"class":278},[102,77099,66992],{"class":119},[102,77101,77102,77105,77107,77109,77111,77114,77116,77118,77120],{"class":104,"line":502},[102,77103,77104],{"class":119},"    就业城市：\u003C",[102,77106,77009],{"class":59165},[102,77108,387],{"class":112},[102,77110,260],{"class":119},[102,77112,77113],{"class":278},"\"city\"",[102,77115,61351],{"class":112},[102,77117,260],{"class":119},[102,77119,77113],{"class":278},[102,77121,59172],{"class":119},[102,77123,77124,77126,77128,77130,77132,77135,77138,77140],{"class":104,"line":507},[102,77125,63099],{"class":119},[102,77127,77031],{"class":59165},[102,77129,74516],{"class":112},[102,77131,260],{"class":119},[102,77133,77134],{"class":278},"\"北京\"",[102,77136,77137],{"class":119},">北京\u003C\u002F",[102,77139,77031],{"class":59165},[102,77141,59172],{"class":119},[102,77143,77144,77146,77148,77150,77152,77155,77158,77160],{"class":104,"line":512},[102,77145,63099],{"class":119},[102,77147,77031],{"class":59165},[102,77149,74516],{"class":112},[102,77151,260],{"class":119},[102,77153,77154],{"class":278},"\"上海\"",[102,77156,77157],{"class":119},">上海\u003C\u002F",[102,77159,77031],{"class":59165},[102,77161,59172],{"class":119},[102,77163,77164,77166,77168,77170,77172,77175,77178,77180],{"class":104,"line":521},[102,77165,63099],{"class":119},[102,77167,77031],{"class":59165},[102,77169,74516],{"class":112},[102,77171,260],{"class":119},[102,77173,77174],{"class":278},"\"广州\"",[102,77176,77177],{"class":119},">广州\u003C\u002F",[102,77179,77031],{"class":59165},[102,77181,59172],{"class":119},[102,77183,77184,77186,77188,77190,77192,77195,77198,77200],{"class":104,"line":526},[102,77185,63099],{"class":119},[102,77187,77031],{"class":59165},[102,77189,74516],{"class":112},[102,77191,260],{"class":119},[102,77193,77194],{"class":278},"\"深圳\"",[102,77196,77197],{"class":119},">深圳\u003C\u002F",[102,77199,77031],{"class":59165},[102,77201,59172],{"class":119},[102,77203,77204,77206,77208,77210,77212,77215,77218,77220],{"class":104,"line":532},[102,77205,63099],{"class":119},[102,77207,77031],{"class":59165},[102,77209,74516],{"class":112},[102,77211,260],{"class":119},[102,77213,77214],{"class":278},"\"曹县\"",[102,77216,77217],{"class":119},">曹县\u003C\u002F",[102,77219,77031],{"class":59165},[102,77221,59172],{"class":119},[102,77223,77224,77226,77228],{"class":104,"line":538},[102,77225,59641],{"class":119},[102,77227,77009],{"class":59165},[102,77229,59172],{"class":119},[102,77231,77232,77234,77236,77238,77240,77243,77246,77248],{"class":104,"line":555},[102,77233,59206],{"class":119},[102,77235,61752],{"class":59165},[102,77237,61351],{"class":112},[102,77239,260],{"class":119},[102,77241,77242],{"class":278},"\"add\"",[102,77244,77245],{"class":119},">录入\u003C\u002F",[102,77247,61752],{"class":59165},[102,77249,59172],{"class":119},[102,77251,77252,77254,77256],{"class":104,"line":570},[102,77253,60282],{"class":119},[102,77255,74490],{"class":59165},[102,77257,59172],{"class":119},[102,77259,77260],{"class":104,"line":581},[102,77261,652],{"emptyLinePlaceholder":651},[102,77263,77264,77266,77268,77271,77273],{"class":104,"line":819},[102,77265,60009],{"class":119},[102,77267,10],{"class":59165},[102,77269,77270],{"class":119},">就业榜\u003C\u002F",[102,77272,10],{"class":59165},[102,77274,59172],{"class":119},[102,77276,77277,77279,77281],{"class":104,"line":828},[102,77278,60009],{"class":119},[102,77280,9177],{"class":59165},[102,77282,59172],{"class":119},[102,77284,77285,77287,77289],{"class":104,"line":837},[102,77286,59206],{"class":119},[102,77288,9180],{"class":59165},[102,77290,59172],{"class":119},[102,77292,77293,77295,77297],{"class":104,"line":842},[102,77294,63099],{"class":119},[102,77296,9183],{"class":59165},[102,77298,59172],{"class":119},[102,77300,77301,77303,77305,77308,77310],{"class":104,"line":855},[102,77302,63167],{"class":119},[102,77304,9186],{"class":59165},[102,77306,77307],{"class":119},">序号\u003C\u002F",[102,77309,9186],{"class":59165},[102,77311,59172],{"class":119},[102,77313,77314,77316,77318,77321,77323],{"class":104,"line":860},[102,77315,63167],{"class":119},[102,77317,9186],{"class":59165},[102,77319,77320],{"class":119},">姓名\u003C\u002F",[102,77322,9186],{"class":59165},[102,77324,59172],{"class":119},[102,77326,77327,77329,77331,77334,77336],{"class":104,"line":871},[102,77328,63167],{"class":119},[102,77330,9186],{"class":59165},[102,77332,77333],{"class":119},">年龄\u003C\u002F",[102,77335,9186],{"class":59165},[102,77337,59172],{"class":119},[102,77339,77340,77342,77344,77347,77349],{"class":104,"line":1359},[102,77341,63167],{"class":119},[102,77343,9186],{"class":59165},[102,77345,77346],{"class":119},">性别\u003C\u002F",[102,77348,9186],{"class":59165},[102,77350,59172],{"class":119},[102,77352,77353,77355,77357,77360,77362],{"class":104,"line":1368},[102,77354,63167],{"class":119},[102,77356,9186],{"class":59165},[102,77358,77359],{"class":119},">薪资\u003C\u002F",[102,77361,9186],{"class":59165},[102,77363,59172],{"class":119},[102,77365,77366,77368,77370,77373,77375],{"class":104,"line":1373},[102,77367,63167],{"class":119},[102,77369,9186],{"class":59165},[102,77371,77372],{"class":119},">就业城市\u003C\u002F",[102,77374,9186],{"class":59165},[102,77376,59172],{"class":119},[102,77378,77379,77381,77383,77386,77388],{"class":104,"line":1378},[102,77380,63167],{"class":119},[102,77382,9186],{"class":59165},[102,77384,77385],{"class":119},">操作\u003C\u002F",[102,77387,9186],{"class":59165},[102,77389,59172],{"class":119},[102,77391,77392,77394,77396],{"class":104,"line":1384},[102,77393,63272],{"class":119},[102,77395,9183],{"class":59165},[102,77397,59172],{"class":119},[102,77399,77400,77402,77404],{"class":104,"line":1398},[102,77401,59641],{"class":119},[102,77403,9180],{"class":59165},[102,77405,59172],{"class":119},[102,77407,77408,77410,77412],{"class":104,"line":1424},[102,77409,59206],{"class":119},[102,77411,9223],{"class":59165},[102,77413,59172],{"class":119},[102,77415,77416],{"class":104,"line":1429},[102,77417,77418],{"class":126},"      \u003C!-- \n",[102,77420,77421],{"class":104,"line":1435},[102,77422,77423],{"class":126},"        \u003Ctr>\n",[102,77425,77426],{"class":104,"line":1450},[102,77427,77428],{"class":126},"          \u003Ctd>1001\u003C\u002Ftd>\n",[102,77430,77431],{"class":104,"line":1473},[102,77432,77433],{"class":126},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[102,77435,77436],{"class":104,"line":1478},[102,77437,77438],{"class":126},"          \u003Ctd>19\u003C\u002Ftd>\n",[102,77440,77441],{"class":104,"line":1484},[102,77442,77443],{"class":126},"          \u003Ctd>男\u003C\u002Ftd>\n",[102,77445,77446],{"class":104,"line":1499},[102,77447,77448],{"class":126},"          \u003Ctd>15000\u003C\u002Ftd>\n",[102,77450,77451],{"class":104,"line":1508},[102,77452,77453],{"class":126},"          \u003Ctd>上海\u003C\u002Ftd>\n",[102,77455,77456],{"class":104,"line":1513},[102,77457,77458],{"class":126},"          \u003Ctd>\n",[102,77460,77461],{"class":104,"line":1524},[102,77462,77463],{"class":126},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[102,77465,77466],{"class":104,"line":1529},[102,77467,77468],{"class":126},"          \u003C\u002Ftd>\n",[102,77470,77471],{"class":104,"line":1538},[102,77472,77473],{"class":126},"        \u003C\u002Ftr> \n",[102,77475,77476],{"class":104,"line":2089},[102,77477,77478],{"class":126},"        -->\n",[102,77480,77481,77483,77485],{"class":104,"line":2094},[102,77482,59641],{"class":119},[102,77484,9223],{"class":59165},[102,77486,59172],{"class":119},[102,77488,77489,77491,77493],{"class":104,"line":2100},[102,77490,60282],{"class":119},[102,77492,9177],{"class":59165},[102,77494,59172],{"class":119},[102,77496,77497,77499,77501],{"class":104,"line":2106},[102,77498,60009],{"class":119},[102,77500,59678],{"class":59165},[102,77502,59172],{"class":119},[102,77504,77505],{"class":104,"line":2120},[102,77506,67823],{"class":126},[102,77508,77509,77511,77514,77516,77518,77520,77522,77525],{"class":104,"line":2128},[102,77510,19961],{"class":108},[102,77512,77513],{"class":187}," uname",[102,77515,22296],{"class":108},[102,77517,62261],{"class":119},[102,77519,62264],{"class":112},[102,77521,380],{"class":119},[102,77523,77524],{"class":278},"'.uname'",[102,77526,390],{"class":119},[102,77528,77529,77531,77533,77535,77537,77539,77541,77544],{"class":104,"line":2149},[102,77530,19961],{"class":108},[102,77532,1195],{"class":187},[102,77534,22296],{"class":108},[102,77536,62261],{"class":119},[102,77538,62264],{"class":112},[102,77540,380],{"class":119},[102,77542,77543],{"class":278},"'.age'",[102,77545,390],{"class":119},[102,77547,77548,77550,77553,77555,77557,77559,77561,77564],{"class":104,"line":2161},[102,77549,19961],{"class":108},[102,77551,77552],{"class":187}," gender",[102,77554,22296],{"class":108},[102,77556,62261],{"class":119},[102,77558,62264],{"class":112},[102,77560,380],{"class":119},[102,77562,77563],{"class":278},"'.gender'",[102,77565,390],{"class":119},[102,77567,77568,77570,77573,77575,77577,77579,77581,77584],{"class":104,"line":2167},[102,77569,19961],{"class":108},[102,77571,77572],{"class":187}," salary",[102,77574,22296],{"class":108},[102,77576,62261],{"class":119},[102,77578,62264],{"class":112},[102,77580,380],{"class":119},[102,77582,77583],{"class":278},"'.salary'",[102,77585,390],{"class":119},[102,77587,77588,77590,77593,77595,77597,77599,77601,77604],{"class":104,"line":2190},[102,77589,19961],{"class":108},[102,77591,77592],{"class":187}," city",[102,77594,22296],{"class":108},[102,77596,62261],{"class":119},[102,77598,62264],{"class":112},[102,77600,380],{"class":119},[102,77602,77603],{"class":278},"'.city'",[102,77605,390],{"class":119},[102,77607,77608,77610,77613,77615,77617,77619,77621,77624],{"class":104,"line":2196},[102,77609,19961],{"class":108},[102,77611,77612],{"class":187}," tbody",[102,77614,22296],{"class":108},[102,77616,62261],{"class":119},[102,77618,62264],{"class":112},[102,77620,380],{"class":119},[102,77622,77623],{"class":278},"'tbody'",[102,77625,390],{"class":119},[102,77627,77628],{"class":104,"line":2219},[102,77629,652],{"emptyLinePlaceholder":651},[102,77631,77632],{"class":104,"line":2233},[102,77633,77634],{"class":126},"    \u002F\u002F 获取所有带有name属性的元素\n",[102,77636,77637,77639,77642,77644,77646,77648,77650,77653],{"class":104,"line":2253},[102,77638,19961],{"class":108},[102,77640,77641],{"class":187}," items",[102,77643,22296],{"class":108},[102,77645,62261],{"class":119},[102,77647,63546],{"class":112},[102,77649,380],{"class":119},[102,77651,77652],{"class":278},"'[name]'",[102,77654,390],{"class":119},[102,77656,77657],{"class":104,"line":2259},[102,77658,77659],{"class":126},"    \u002F\u002F 声明一个空的数组\n",[102,77661,77662,77664,77666,77668],{"class":104,"line":2270},[102,77663,19961],{"class":108},[102,77665,65560],{"class":187},[102,77667,22296],{"class":108},[102,77669,59703],{"class":119},[102,77671,77672],{"class":104,"line":2293},[102,77673,77674],{"class":126},"    \u002F\u002F 1.录入模块\n",[102,77676,77677],{"class":104,"line":2315},[102,77678,77679],{"class":126},"    \u002F\u002F 1.1这是一个表单提交事件\n",[102,77681,77682,77684,77687,77689,77691,77693,77695,77698],{"class":104,"line":2320},[102,77683,19961],{"class":108},[102,77685,77686],{"class":187}," info",[102,77688,22296],{"class":108},[102,77690,62261],{"class":119},[102,77692,62264],{"class":112},[102,77694,380],{"class":119},[102,77696,77697],{"class":278},"'.info'",[102,77699,390],{"class":119},[102,77701,77702,77705,77707,77709,77712,77714,77716,77718,77720],{"class":104,"line":2326},[102,77703,77704],{"class":119},"    info.",[102,77706,65678],{"class":112},[102,77708,380],{"class":119},[102,77710,77711],{"class":278},"'submit'",[102,77713,2571],{"class":119},[102,77715,62314],{"class":108},[102,77717,2432],{"class":119},[102,77719,9116],{"class":386},[102,77721,1105],{"class":119},[102,77723,77724],{"class":104,"line":2340},[102,77725,77726],{"class":126},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[102,77728,77729,77732,77735],{"class":104,"line":2354},[102,77730,77731],{"class":119},"      e.",[102,77733,77734],{"class":112},"preventDefault",[102,77736,172],{"class":119},[102,77738,77739],{"class":104,"line":2359},[102,77740,67877],{"class":126},[102,77742,77743],{"class":104,"line":2373},[102,77744,652],{"emptyLinePlaceholder":651},[102,77746,77747],{"class":104,"line":2378},[102,77748,77749],{"class":126},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[102,77751,77752],{"class":104,"line":2384},[102,77753,77754],{"class":126},"      \u002F\u002F 先遍历循环\n",[102,77756,77757,77759,77761,77763,77765,77767,77769,77771,77773,77776,77778,77780,77782],{"class":104,"line":2389},[102,77758,60149],{"class":108},[102,77760,2432],{"class":119},[102,77762,59712],{"class":108},[102,77764,18205],{"class":119},[102,77766,260],{"class":108},[102,77768,866],{"class":187},[102,77770,18212],{"class":119},[102,77772,1208],{"class":108},[102,77774,77775],{"class":119}," items.",[102,77777,59833],{"class":187},[102,77779,12029],{"class":119},[102,77781,11130],{"class":108},[102,77783,1105],{"class":119},[102,77785,77786,77788,77791,77793,77796],{"class":104,"line":2403},[102,77787,1202],{"class":108},[102,77789,77790],{"class":119}," (items[i].value ",[102,77792,62351],{"class":108},[102,77794,77795],{"class":278}," ''",[102,77797,1105],{"class":119},[102,77799,77800,77803,77806,77808,77811],{"class":104,"line":2408},[102,77801,77802],{"class":108},"          return",[102,77804,77805],{"class":112}," alert",[102,77807,380],{"class":119},[102,77809,77810],{"class":278},"'输入内容不能为空'",[102,77812,390],{"class":119},[102,77814,77815],{"class":104,"line":2413},[102,77816,1252],{"class":119},[102,77818,77819],{"class":104,"line":2427},[102,77820,60263],{"class":119},[102,77822,77823],{"class":104,"line":2440},[102,77824,652],{"emptyLinePlaceholder":651},[102,77826,77827],{"class":104,"line":2445},[102,77828,77829],{"class":126},"      \u002F\u002F 创建新的对象\n",[102,77831,77832,77834,77837,77839],{"class":104,"line":2458},[102,77833,66093],{"class":108},[102,77835,77836],{"class":187}," obj",[102,77838,22296],{"class":108},[102,77840,1077],{"class":119},[102,77842,77843,77846,77848,77850,77852],{"class":104,"line":2463},[102,77844,77845],{"class":119},"        stuID: arr.",[102,77847,59833],{"class":187},[102,77849,53431],{"class":108},[102,77851,32983],{"class":187},[102,77853,39331],{"class":119},[102,77855,77856],{"class":104,"line":2468},[102,77857,77858],{"class":119},"        uname: uname.value,\n",[102,77860,77861],{"class":104,"line":2473},[102,77862,77863],{"class":119},"        age: age.value,\n",[102,77865,77866],{"class":104,"line":2486},[102,77867,77868],{"class":119},"        gender: gender.value,\n",[102,77870,77871],{"class":104,"line":2491},[102,77872,77873],{"class":119},"        salary: salary.value,\n",[102,77875,77876],{"class":104,"line":40498},[102,77877,77878],{"class":119},"        city: city.value\n",[102,77880,77881],{"class":104,"line":40504},[102,77882,60263],{"class":119},[102,77884,77885],{"class":104,"line":40510},[102,77886,77887],{"class":126},"      \u002F\u002F console.log(obj);\n",[102,77889,77890],{"class":104,"line":40516},[102,77891,77892],{"class":126},"      \u002F\u002F 追加到数组里面\n",[102,77894,77895,77897,77899],{"class":104,"line":40522},[102,77896,65872],{"class":119},[102,77898,59749],{"class":112},[102,77900,77901],{"class":119},"(obj)\n",[102,77903,77904],{"class":104,"line":40533},[102,77905,77906],{"class":126},"      \u002F\u002F console.log(arr);\n",[102,77908,77909],{"class":104,"line":40539},[102,77910,77911],{"class":126},"      \u002F\u002F 清空表单  reset重置表单\n",[102,77913,77914,77917,77919,77922],{"class":104,"line":40559},[102,77915,77916],{"class":187},"      this",[102,77918,9585],{"class":119},[102,77920,77921],{"class":112},"reset",[102,77923,172],{"class":119},[102,77925,77926],{"class":104,"line":40565},[102,77927,77928],{"class":126},"      \u002F\u002F 调用渲染函数\n",[102,77930,77931,77934],{"class":104,"line":40576},[102,77932,77933],{"class":112},"      render",[102,77935,172],{"class":119},[102,77937,77938],{"class":104,"line":40582},[102,77939,41326],{"class":119},[102,77941,77942],{"class":104,"line":40588},[102,77943,77944],{"class":126},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[102,77946,77947,77950,77953],{"class":104,"line":40594},[102,77948,77949],{"class":108},"    function",[102,77951,77952],{"class":112}," render",[102,77954,795],{"class":119},[102,77956,77957],{"class":104,"line":40600},[102,77958,77959],{"class":126},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[102,77961,77962,77965,77967],{"class":104,"line":40606},[102,77963,77964],{"class":119},"      tbody.innerHTML ",[102,77966,260],{"class":108},[102,77968,77969],{"class":278}," ''\n",[102,77971,77972],{"class":104,"line":40612},[102,77973,77974],{"class":126},"      \u002F\u002F 遍历数组\n",[102,77976,77977,77979,77981,77983,77985,77987,77989,77991,77993,77995,77997,77999,78001],{"class":104,"line":40618},[102,77978,60149],{"class":108},[102,77980,2432],{"class":119},[102,77982,59712],{"class":108},[102,77984,18205],{"class":119},[102,77986,260],{"class":108},[102,77988,866],{"class":187},[102,77990,18212],{"class":119},[102,77992,1208],{"class":108},[102,77994,59830],{"class":119},[102,77996,59833],{"class":187},[102,77998,12029],{"class":119},[102,78000,11130],{"class":108},[102,78002,1105],{"class":119},[102,78004,78005,78007,78010,78012,78014,78017,78019,78022],{"class":104,"line":40638},[102,78006,69135],{"class":108},[102,78008,78009],{"class":187}," tr",[102,78011,22296],{"class":108},[102,78013,62261],{"class":119},[102,78015,78016],{"class":112},"createElement",[102,78018,380],{"class":119},[102,78020,78021],{"class":278},"'tr'",[102,78023,390],{"class":119},[102,78025,78026,78029,78031],{"class":104,"line":40644},[102,78027,78028],{"class":119},"        tr.innerHTML ",[102,78030,260],{"class":108},[102,78032,78033],{"class":278}," `\n",[102,78035,78036,78039,78041,78043,78045,78048,78051],{"class":104,"line":40660},[102,78037,78038],{"class":278},"        \u003Ctd>${",[102,78040,12693],{"class":119},[102,78042,9912],{"class":278},[102,78044,9473],{"class":119},[102,78046,78047],{"class":278},"].",[102,78049,78050],{"class":119},"stuID",[102,78052,78053],{"class":278},"}\u003C\u002Ftd>\n",[102,78055,78056,78059,78061,78063,78065,78067,78070],{"class":104,"line":40666},[102,78057,78058],{"class":278},"          \u003Ctd>${",[102,78060,12693],{"class":119},[102,78062,9912],{"class":278},[102,78064,9473],{"class":119},[102,78066,78047],{"class":278},[102,78068,78069],{"class":119},"uname",[102,78071,78053],{"class":278},[102,78073,78074,78076,78078,78080,78082,78084,78087],{"class":104,"line":40680},[102,78075,78058],{"class":278},[102,78077,12693],{"class":119},[102,78079,9912],{"class":278},[102,78081,9473],{"class":119},[102,78083,78047],{"class":278},[102,78085,78086],{"class":119},"age",[102,78088,78053],{"class":278},[102,78090,78091,78093,78095,78097,78099,78101,78104],{"class":104,"line":40686},[102,78092,78058],{"class":278},[102,78094,12693],{"class":119},[102,78096,9912],{"class":278},[102,78098,9473],{"class":119},[102,78100,78047],{"class":278},[102,78102,78103],{"class":119},"gender",[102,78105,78053],{"class":278},[102,78107,78108,78110,78112,78114,78116,78118,78121],{"class":104,"line":40701},[102,78109,78058],{"class":278},[102,78111,12693],{"class":119},[102,78113,9912],{"class":278},[102,78115,9473],{"class":119},[102,78117,78047],{"class":278},[102,78119,78120],{"class":119},"salary",[102,78122,78053],{"class":278},[102,78124,78125,78127,78129,78131,78133,78135,78138],{"class":104,"line":40707},[102,78126,78058],{"class":278},[102,78128,12693],{"class":119},[102,78130,9912],{"class":278},[102,78132,9473],{"class":119},[102,78134,78047],{"class":278},[102,78136,78137],{"class":119},"city",[102,78139,78053],{"class":278},[102,78141,78142],{"class":104,"line":40716},[102,78143,77458],{"class":278},[102,78145,78146,78149,78151],{"class":104,"line":40722},[102,78147,78148],{"class":278},"            \u003Ca href=\"javascript:\" data-id=${",[102,78150,9473],{"class":119},[102,78152,78153],{"class":278},"}>删除\u003C\u002Fa>\n",[102,78155,78156],{"class":104,"line":40731},[102,78157,78158],{"class":278},"          \u003C\u002Ftd> \n",[102,78160,78161],{"class":104,"line":40737},[102,78162,78163],{"class":278},"          `\n",[102,78165,78166],{"class":104,"line":40743},[102,78167,78168],{"class":126},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[102,78170,78171,78174,78177],{"class":104,"line":40752},[102,78172,78173],{"class":119},"        tbody.",[102,78175,78176],{"class":112},"appendChild",[102,78178,78179],{"class":119},"(tr)\n",[102,78181,78182],{"class":104,"line":40758},[102,78183,60263],{"class":119},[102,78185,78186],{"class":104,"line":40769},[102,78187,205],{"class":119},[102,78189,78190],{"class":104,"line":40775},[102,78191,652],{"emptyLinePlaceholder":651},[102,78193,78194],{"class":104,"line":40794},[102,78195,78196],{"class":126},"    \u002F\u002F 3.删除委托\n",[102,78198,78199],{"class":104,"line":40800},[102,78200,78201],{"class":126},"    \u002F\u002F 3.1 事件委托 tbody\n",[102,78203,78204,78207,78209,78211,78213,78215,78217,78219,78221],{"class":104,"line":40811},[102,78205,78206],{"class":119},"    tbody.",[102,78208,65678],{"class":112},[102,78210,380],{"class":119},[102,78212,65683],{"class":278},[102,78214,2571],{"class":119},[102,78216,62314],{"class":108},[102,78218,2432],{"class":119},[102,78220,9116],{"class":386},[102,78222,1105],{"class":119},[102,78224,78225,78227,78229,78231,78233],{"class":104,"line":40817},[102,78226,62345],{"class":108},[102,78228,74899],{"class":119},[102,78230,62351],{"class":108},[102,78232,76121],{"class":278},[102,78234,1105],{"class":119},[102,78236,78237],{"class":104,"line":40837},[102,78238,78239],{"class":126},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[102,78241,78242],{"class":104,"line":40853},[102,78243,78244],{"class":126},"        \u002F\u002F console.log(e.target.dataset.id);\n",[102,78246,78247],{"class":104,"line":40859},[102,78248,78249],{"class":126},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[102,78251,78252,78255,78257,78260,78262],{"class":104,"line":40873},[102,78253,78254],{"class":119},"        arr.",[102,78256,65875],{"class":112},[102,78258,78259],{"class":119},"(e.target.dataset.id, ",[102,78261,7039],{"class":187},[102,78263,390],{"class":119},[102,78265,78266],{"class":104,"line":40879},[102,78267,78268],{"class":126},"        \u002F\u002F 重新渲染一次\n",[102,78270,78271,78274],{"class":104,"line":40885},[102,78272,78273],{"class":112},"        render",[102,78275,172],{"class":119},[102,78277,78278],{"class":104,"line":40896},[102,78279,60263],{"class":119},[102,78281,78282],{"class":104,"line":40902},[102,78283,41326],{"class":119},[102,78285,78286,78288,78290],{"class":104,"line":40908},[102,78287,60282],{"class":119},[102,78289,59678],{"class":59165},[102,78291,59172],{"class":119},[102,78293,78294],{"class":104,"line":40918},[102,78295,652],{"emptyLinePlaceholder":651},[102,78297,78298,78300,78302],{"class":104,"line":40924},[102,78299,59650],{"class":119},[102,78301,59665],{"class":59165},[102,78303,59172],{"class":119},[102,78305,78306],{"class":104,"line":40935},[102,78307,652],{"emptyLinePlaceholder":651},[102,78309,78310,78312,78314],{"class":104,"line":40941},[102,78311,59650],{"class":119},[102,78313,58500],{"class":59165},[102,78315,59172],{"class":119},[14,78317,78318],{},"样式：",[93,78320,78324],{"className":78321,"code":78322,"language":78323,"meta":98,"style":98},"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",[83,78325,78326,78331,78341,78350,78354,78358,78363,78373,78378,78382,78387,78397,78402,78411,78415,78419,78424,78429,78439,78449,78454,78458,78463,78472,78482,78487,78497,78507,78511,78516,78524,78528,78533,78538,78543,78551,78560,78564,78569,78578,78582,78587,78596,78600,78605,78614,78623,78631,78635,78640,78649,78659,78668,78678,78684,78693,78703,78713,78717,78722,78731,78739,78749,78757,78766,78775,78785,78793,78797,78802,78811],{"__ignoreMap":98},[102,78327,78328],{"class":104,"line":105},[102,78329,78330],{"class":119},"* {\n",[102,78332,78333,78336,78338],{"class":104,"line":116},[102,78334,78335],{"class":59165},"  margin",[102,78337,59302],{"class":119},[102,78339,78340],{"class":278},"0;\n",[102,78342,78343,78346,78348],{"class":104,"line":123},[102,78344,78345],{"class":278},"  padding",[102,78347,59302],{"class":119},[102,78349,78340],{"class":278},[102,78351,78352],{"class":104,"line":130},[102,78353,301],{"class":119},[102,78355,78356],{"class":104,"line":136},[102,78357,652],{"emptyLinePlaceholder":651},[102,78359,78360],{"class":104,"line":142},[102,78361,78362],{"class":278},"a {\n",[102,78364,78365,78368,78370],{"class":104,"line":148},[102,78366,78367],{"class":59165},"  text-decoration",[102,78369,59302],{"class":119},[102,78371,78372],{"class":278},"none;\n",[102,78374,78375],{"class":104,"line":157},[102,78376,78377],{"class":278},"  color:#721c24;\n",[102,78379,78380],{"class":104,"line":163},[102,78381,301],{"class":119},[102,78383,78384],{"class":104,"line":175},[102,78385,78386],{"class":278},"h1 {\n",[102,78388,78389,78392,78394],{"class":104,"line":181},[102,78390,78391],{"class":59165},"  text-align",[102,78393,59302],{"class":119},[102,78395,78396],{"class":278},"center;\n",[102,78398,78399],{"class":104,"line":202},[102,78400,78401],{"class":278},"  color:#333;\n",[102,78403,78404,78406,78408],{"class":104,"line":208},[102,78405,78335],{"class":59165},[102,78407,59302],{"class":119},[102,78409,78410],{"class":278},"20px 0;\n",[102,78412,78413],{"class":104,"line":214},[102,78414,4328],{"class":119},[102,78416,78417],{"class":104,"line":225},[102,78418,301],{"class":119},[102,78420,78421],{"class":104,"line":230},[102,78422,78423],{"class":278},"table {\n",[102,78425,78426],{"class":104,"line":236},[102,78427,78428],{"class":278},"  margin:0 auto;\n",[102,78430,78431,78434,78436],{"class":104,"line":242},[102,78432,78433],{"class":59165},"  width",[102,78435,59302],{"class":119},[102,78437,78438],{"class":278},"800px;\n",[102,78440,78441,78444,78446],{"class":104,"line":248},[102,78442,78443],{"class":59165},"  border-collapse",[102,78445,59302],{"class":119},[102,78447,78448],{"class":278},"collapse;\n",[102,78450,78451],{"class":104,"line":254},[102,78452,78453],{"class":278},"  color:#004085;\n",[102,78455,78456],{"class":104,"line":269},[102,78457,301],{"class":119},[102,78459,78460],{"class":104,"line":298},[102,78461,78462],{"class":278},"th {\n",[102,78464,78465,78467,78469],{"class":104,"line":502},[102,78466,78345],{"class":59165},[102,78468,59302],{"class":119},[102,78470,78471],{"class":278},"10px;\n",[102,78473,78474,78477,78479],{"class":104,"line":507},[102,78475,78476],{"class":59165},"  background",[102,78478,59302],{"class":119},[102,78480,78481],{"class":126},"#cfe5ff;\n",[102,78483,78484],{"class":104,"line":512},[102,78485,78486],{"class":119},"  \n",[102,78488,78489,78492,78494],{"class":104,"line":521},[102,78490,78491],{"class":59165},"  font-size",[102,78493,59302],{"class":119},[102,78495,78496],{"class":278},"20px;\n",[102,78498,78499,78502,78504],{"class":104,"line":526},[102,78500,78501],{"class":59165},"  font-weight",[102,78503,59302],{"class":119},[102,78505,78506],{"class":278},"400;\n",[102,78508,78509],{"class":104,"line":532},[102,78510,301],{"class":119},[102,78512,78513],{"class":104,"line":538},[102,78514,78515],{"class":278},"td,th {\n",[102,78517,78518,78521],{"class":104,"line":555},[102,78519,78520],{"class":278},"  border:1px solid",[102,78522,78523],{"class":126}," #b8daff;\n",[102,78525,78526],{"class":104,"line":570},[102,78527,301],{"class":119},[102,78529,78530],{"class":104,"line":581},[102,78531,78532],{"class":278},"td {\n",[102,78534,78535],{"class":104,"line":819},[102,78536,78537],{"class":278},"  padding:10px;\n",[102,78539,78540],{"class":104,"line":828},[102,78541,78542],{"class":278},"  color:#666;\n",[102,78544,78545,78547,78549],{"class":104,"line":837},[102,78546,78391],{"class":59165},[102,78548,59302],{"class":119},[102,78550,78396],{"class":278},[102,78552,78553,78555,78557],{"class":104,"line":842},[102,78554,78491],{"class":59165},[102,78556,59302],{"class":119},[102,78558,78559],{"class":278},"16px;\n",[102,78561,78562],{"class":104,"line":855},[102,78563,301],{"class":119},[102,78565,78566],{"class":104,"line":860},[102,78567,78568],{"class":278},"tbody tr {\n",[102,78570,78571,78573,78575],{"class":104,"line":871},[102,78572,78476],{"class":59165},[102,78574,59302],{"class":119},[102,78576,78577],{"class":126},"#fff;\n",[102,78579,78580],{"class":104,"line":1359},[102,78581,301],{"class":119},[102,78583,78584],{"class":104,"line":1368},[102,78585,78586],{"class":278},"tbody tr:hover {\n",[102,78588,78589,78591,78593],{"class":104,"line":1373},[102,78590,78476],{"class":59165},[102,78592,59302],{"class":119},[102,78594,78595],{"class":126},"#e1ecf8;\n",[102,78597,78598],{"class":104,"line":1378},[102,78599,301],{"class":119},[102,78601,78602],{"class":104,"line":1384},[102,78603,78604],{"class":278},".info {\n",[102,78606,78607,78609,78611],{"class":104,"line":1398},[102,78608,78433],{"class":59165},[102,78610,59302],{"class":119},[102,78612,78613],{"class":278},"900px;\n",[102,78615,78616,78618,78620],{"class":104,"line":1424},[102,78617,78335],{"class":59165},[102,78619,59302],{"class":119},[102,78621,78622],{"class":278},"50px auto;\n",[102,78624,78625,78627,78629],{"class":104,"line":1429},[102,78626,78391],{"class":59165},[102,78628,59302],{"class":119},[102,78630,78396],{"class":278},[102,78632,78633],{"class":104,"line":1435},[102,78634,301],{"class":119},[102,78636,78637],{"class":104,"line":1450},[102,78638,78639],{"class":278},".info  input, .info select {\n",[102,78641,78642,78644,78646],{"class":104,"line":1473},[102,78643,78433],{"class":59165},[102,78645,59302],{"class":119},[102,78647,78648],{"class":278},"80px;\n",[102,78650,78651,78654,78656],{"class":104,"line":1478},[102,78652,78653],{"class":59165},"  height",[102,78655,59302],{"class":119},[102,78657,78658],{"class":278},"27px;\n",[102,78660,78661,78664,78666],{"class":104,"line":1484},[102,78662,78663],{"class":59165},"  outline",[102,78665,59302],{"class":119},[102,78667,78372],{"class":278},[102,78669,78670,78673,78675],{"class":104,"line":1499},[102,78671,78672],{"class":59165},"  border-radius",[102,78674,59302],{"class":119},[102,78676,78677],{"class":278},"5px;\n",[102,78679,78680,78682],{"class":104,"line":1508},[102,78681,78520],{"class":278},[102,78683,78523],{"class":126},[102,78685,78686,78689,78691],{"class":104,"line":1513},[102,78687,78688],{"class":59165},"  padding-left",[102,78690,59302],{"class":119},[102,78692,78677],{"class":278},[102,78694,78695,78698,78700],{"class":104,"line":1524},[102,78696,78697],{"class":59165},"  box-sizing",[102,78699,59302],{"class":119},[102,78701,78702],{"class":278},"border-box;\n",[102,78704,78705,78708,78710],{"class":104,"line":1529},[102,78706,78707],{"class":59165},"  margin-right",[102,78709,59302],{"class":119},[102,78711,78712],{"class":278},"15px;\n",[102,78714,78715],{"class":104,"line":1538},[102,78716,301],{"class":119},[102,78718,78719],{"class":104,"line":2089},[102,78720,78721],{"class":278},".info button {\n",[102,78723,78724,78726,78728],{"class":104,"line":2094},[102,78725,78433],{"class":59165},[102,78727,59302],{"class":119},[102,78729,78730],{"class":278},"60px;\n",[102,78732,78733,78735,78737],{"class":104,"line":2100},[102,78734,78653],{"class":59165},[102,78736,59302],{"class":119},[102,78738,78658],{"class":278},[102,78740,78741,78744,78746],{"class":104,"line":2106},[102,78742,78743],{"class":59165},"  background-color",[102,78745,59302],{"class":119},[102,78747,78748],{"class":126},"#004085;\n",[102,78750,78751,78753,78755],{"class":104,"line":2120},[102,78752,78663],{"class":59165},[102,78754,59302],{"class":119},[102,78756,78372],{"class":278},[102,78758,78759,78762,78764],{"class":104,"line":2128},[102,78760,78761],{"class":59165},"  border",[102,78763,59302],{"class":119},[102,78765,78340],{"class":278},[102,78767,78768,78771,78773],{"class":104,"line":2149},[102,78769,78770],{"class":59165},"  color",[102,78772,59302],{"class":119},[102,78774,78577],{"class":126},[102,78776,78777,78780,78782],{"class":104,"line":2161},[102,78778,78779],{"class":59165},"  cursor",[102,78781,59302],{"class":119},[102,78783,78784],{"class":278},"pointer;\n",[102,78786,78787,78789,78791],{"class":104,"line":2167},[102,78788,78672],{"class":59165},[102,78790,59302],{"class":119},[102,78792,78677],{"class":278},[102,78794,78795],{"class":104,"line":2190},[102,78796,301],{"class":119},[102,78798,78799],{"class":104,"line":2196},[102,78800,78801],{"class":278},".info .age {\n",[102,78803,78804,78806,78808],{"class":104,"line":2219},[102,78805,78433],{"class":59165},[102,78807,59302],{"class":119},[102,78809,78810],{"class":278},"50px;\n",[102,78812,78813],{"class":104,"line":2233},[102,78814,301],{"class":119},[14,78816,78817],{},"思路：",[14,78819,78820],{},[6750,78821],{"alt":98,"src":78822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,78824,78825],{},[6750,78826],{"alt":98,"src":78827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,78829,78830],{},[6750,78831],{"alt":98,"src":78832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[48,78834,78836],{"id":78835},"_3315-重绘回流","3.3.15 重绘回流",[14,78838,78839],{},[6750,78840],{"alt":98,"src":78841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,78843,78844],{},[6750,78845],{"alt":98,"src":78846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,78848,78849],{},[6750,78850],{"alt":98,"src":78851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[43,78853,78855],{"id":78854},"_34-bom","3.4 BOM",[14,78857,78858],{},[6750,78859],{"alt":98,"src":78860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,78862,78863],{},"平时写的document省略了window而已，实际上是window.document",[14,78865,78866],{},"函数也是这样，调用的时候实际为window.fn()",[14,78868,78869],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,78871,78872],{},"window大部分情况下可以省略",[48,78874,78876],{"id":78875},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,78878,78879],{},"只执行一次",[14,78881,78882],{},[6750,78883],{"alt":98,"src":78884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,78886,78887],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,78889,78890],{},[6750,78891],{"alt":98,"src":78892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[48,78894,78896],{"id":78895},"_342-js执行机制","3.4.2 JS执行机制",[14,78898,78899],{},[6750,78900],{"alt":98,"src":78901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,78903,78904],{},"两个的结果都是1111 3333 2222",[14,78906,78907],{},[6750,78908],{"alt":98,"src":78909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,78911,78912],{},[6750,78913],{"alt":98,"src":78914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,78916,78917],{},[6750,78918],{"alt":98,"src":78919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,78921,78922],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,78924,78925],{},"工作流程：",[14,78927,78928],{},[6750,78929],{"alt":98,"src":78930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,78932,78933],{},[6750,78934],{"alt":98,"src":78935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,78937,78938],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,78940,78941],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[48,78943,78945],{"id":78944},"_343-location对象","3.4.3 location对象",[14,78947,78948],{},"location对象属于window这个全局对象下的，可以 省略window",[14,78950,78951],{},[6750,78952],{"alt":98,"src":78953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,78955,78956],{},"href可以跳转页面",[87,78958,78959],{},[62,78960,78961],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,78963,78964],{},"search得到提交信息之后网站后边的地址",[14,78966,78967],{},[6750,78968],{"alt":98,"src":78969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,78971,78972],{},[6750,78973],{"alt":98,"src":78974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[87,78976,78977],{"start":116},[62,78978,78979],{},"hash:这个获取单页面应用#后边的地址",[14,78981,78982],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,78984,78985],{},[6750,78986],{"alt":98,"src":78987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[93,78989,78991],{"className":60932,"code":78990,"language":60934,"meta":98,"style":98},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[83,78992,78993,79013,79033],{"__ignoreMap":98},[102,78994,78995,78997,78999,79001,79003,79006,79009,79011],{"class":104,"line":105},[102,78996,60009],{"class":119},[102,78998,9275],{"class":59165},[102,79000,68922],{"class":112},[102,79002,260],{"class":119},[102,79004,79005],{"class":278},"\"#\u002Fmy\"",[102,79007,79008],{"class":119},">我的\u003C\u002F",[102,79010,9275],{"class":59165},[102,79012,59172],{"class":119},[102,79014,79015,79017,79019,79021,79023,79026,79029,79031],{"class":104,"line":116},[102,79016,60009],{"class":119},[102,79018,9275],{"class":59165},[102,79020,68922],{"class":112},[102,79022,260],{"class":119},[102,79024,79025],{"class":278},"\"#\u002Ffriend\"",[102,79027,79028],{"class":119},">关注\u003C\u002F",[102,79030,9275],{"class":59165},[102,79032,59172],{"class":119},[102,79034,79035,79037,79039,79041,79043,79046,79049,79051],{"class":104,"line":123},[102,79036,60009],{"class":119},[102,79038,9275],{"class":59165},[102,79040,68922],{"class":112},[102,79042,260],{"class":119},[102,79044,79045],{"class":278},"\"#\u002Fdownload\"",[102,79047,79048],{"class":119},">下载\u003C\u002F",[102,79050,9275],{"class":59165},[102,79052,59172],{"class":119},[14,79054,79055],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[87,79057,79058],{"start":123},[62,79059,79060,79061,79063,79064,79066],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[61581,79062],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[61581,79065],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[48,79068,79070],{"id":79069},"_345-navigator对象","3.4.5 navigator对象",[14,79072,79073],{},[6750,79074],{"alt":98,"src":79075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[93,79077,79081],{"className":79078,"code":79079,"language":79080,"meta":98,"style":98},"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",[83,79082,79083,79088,79099,79111,79116,79167,79208,79213,79226,79238,79243],{"__ignoreMap":98},[102,79084,79085],{"class":104,"line":105},[102,79086,79087],{"class":126},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[102,79089,79090,79092,79094,79096],{"class":104,"line":116},[102,79091,9263],{"class":108},[102,79093,380],{"class":119},[102,79095,62314],{"class":108},[102,79097,79098],{"class":119}," () { \n",[102,79100,79101,79103,79106,79108],{"class":104,"line":123},[102,79102,4456],{"class":108},[102,79104,79105],{"class":187}," userAgent",[102,79107,22296],{"class":108},[102,79109,79110],{"class":119}," navigator.userAgent \n",[102,79112,79113],{"class":104,"line":130},[102,79114,79115],{"class":126},"\u002F\u002F 验证是否为Android或iPhone \n",[102,79117,79118,79120,79123,79125,79128,79131,79133,79135,79138,79140,79143,79147,79149,79151,79153,79156,79158,79160,79162,79164],{"class":104,"line":136},[102,79119,4456],{"class":108},[102,79121,79122],{"class":187}," android",[102,79124,22296],{"class":108},[102,79126,79127],{"class":119}," userAgent.",[102,79129,79130],{"class":112},"match",[102,79132,380],{"class":119},[102,79134,9611],{"class":278},[102,79136,79137],{"class":55842},"(Android);",[102,79139,10006],{"class":108},[102,79141,79142],{"class":187},"[\\s",[102,79144,79146],{"class":79145},"snhLl","\\\u002F",[102,79148,9961],{"class":187},[102,79150,1702],{"class":108},[102,79152,380],{"class":55842},[102,79154,79155],{"class":187},"[\\d.]",[102,79157,1702],{"class":108},[102,79159,4033],{"class":55842},[102,79161,10006],{"class":108},[102,79163,9611],{"class":278},[102,79165,79166],{"class":119},") \n",[102,79168,79169,79171,79174,79176,79178,79180,79182,79184,79187,79190,79193,79195,79197,79200,79202,79204,79206],{"class":104,"line":142},[102,79170,4456],{"class":108},[102,79172,79173],{"class":187}," iphone",[102,79175,22296],{"class":108},[102,79177,79127],{"class":119},[102,79179,79130],{"class":112},[102,79181,380],{"class":119},[102,79183,9611],{"class":278},[102,79185,79186],{"class":55842},"(iPhone",[102,79188,79189],{"class":187},"\\s",[102,79191,79192],{"class":55842},"OS)",[102,79194,79189],{"class":187},[102,79196,380],{"class":55842},[102,79198,79199],{"class":187},"[\\d_]",[102,79201,1702],{"class":108},[102,79203,4033],{"class":55842},[102,79205,9611],{"class":278},[102,79207,79166],{"class":119},[102,79209,79210],{"class":104,"line":148},[102,79211,79212],{"class":126},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[102,79214,79215,79217,79220,79223],{"class":104,"line":157},[102,79216,10407],{"class":108},[102,79218,79219],{"class":119}," (android ",[102,79221,79222],{"class":108},"||",[102,79224,79225],{"class":119}," iphone) { \n",[102,79227,79228,79231,79233,79236],{"class":104,"line":163},[102,79229,79230],{"class":119},"location.href ",[102,79232,260],{"class":108},[102,79234,79235],{"class":278}," 'http:\u002F\u002Fm.itcast.cn'",[102,79237,4328],{"class":119},[102,79239,79240],{"class":104,"line":175},[102,79241,79242],{"class":119},"} \n",[102,79244,79245],{"class":104,"line":181},[102,79246,79247],{"class":119},"})()\n",[48,79249,79251],{"id":79250},"_346-histroy对象","3.4.6 histroy对象",[14,79253,79254],{},[6750,79255],{"alt":98,"src":79256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,79258,79259],{},"浏览器地址的前进与后退!!!",[14,79261,79262],{},"history.back() 等效于 history.go(-1)",[14,79264,79265],{},"history.forward() 等效于 history.go(1)",[43,79267,79269],{"id":79268},"_35-本地存储","3.5 本地存储",[87,79271,79272,79275,79278],{},[62,79273,79274],{},"数据存储在用户浏览器中",[62,79276,79277],{},"设置、读取方便、甚至页面刷新不丢失数据",[62,79279,79280],{},"容量较大，sessionStorage和localStorage约 5M 左右",[48,79282,79284],{"id":79283},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,79286,79287],{},"只能存储字符串",[14,79289,79290],{},[6750,79291],{"alt":98,"src":79292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,79294,79295],{},[6750,79296],{"alt":98,"src":79297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,79299,79300],{},"键值对要加引号,不然就会当变量来看了",[14,79302,79303],{},"localStorage.setItem('uname', 'pink')",[14,79305,79306],{},"刷新之后信息不再丢失",[14,79308,79309],{},"操作key,value会跟着变",[14,79311,79312],{},"删除只删除键就可以,即名字",[14,79314,79303],{},[14,79316,79317],{},"改:",[14,79319,79320],{},"localStorage.setItem('uname','red')",[14,79322,79323],{},"有这个键就是改,没有这个键就是改",[14,79325,79326],{},[6750,79327],{"alt":98,"src":79328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,79330,79331],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,79333,79334],{},[6750,79335],{"alt":98,"src":79336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,79338,79339],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[48,79341,79343],{"id":79342},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,79345,79346],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,79348,79349],{},"特性:",[87,79351,79352,79355,79358,79361],{},[62,79353,79354],{},"生命周期为关闭浏览器窗口",[62,79356,79357],{},"在同一个窗口(页面)下数据可以共享",[62,79359,79360],{},"以键值对的形式存储使用",[62,79362,79363],{},"用法跟localStorage 基本相同",[48,79365,79367],{"id":79366},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,79369,79370],{},"本地只能存储字符串,无法直接存储复杂数据类型",[93,79372,79374],{"className":60932,"code":79373,"language":60934,"meta":98,"style":98},"\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",[83,79375,79376,79384,79389,79394,79399,79404,79408,79413,79418],{"__ignoreMap":98},[102,79377,79378,79380,79382],{"class":104,"line":105},[102,79379,1208],{"class":119},[102,79381,59678],{"class":59165},[102,79383,59172],{"class":119},[102,79385,79386],{"class":104,"line":116},[102,79387,79388],{"class":119},"    const obj = {\n",[102,79390,79391],{"class":104,"line":123},[102,79392,79393],{"class":119},"      uname: 'pink老师',\n",[102,79395,79396],{"class":104,"line":130},[102,79397,79398],{"class":119},"      age: 18,\n",[102,79400,79401],{"class":104,"line":136},[102,79402,79403],{"class":119},"      gender: '女'\n",[102,79405,79406],{"class":104,"line":142},[102,79407,205],{"class":119},[102,79409,79410],{"class":104,"line":148},[102,79411,79412],{"class":119},"    \u002F\u002F 存储复杂数据类型\n",[102,79414,79415],{"class":104,"line":157},[102,79416,79417],{"class":119},"    localStorage.setItem('obj', obj)\n",[102,79419,79420,79422,79424],{"class":104,"line":163},[102,79421,60282],{"class":119},[102,79423,59678],{"class":59165},[102,79425,59172],{"class":119},[14,79427,79428],{},[6750,79429],{"alt":98,"src":79430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,79432,79433],{},"如果获取一下数据:",[14,79435,79436],{},"log(localStorage.getItem('obj'))",[14,79438,79439],{},[6750,79440],{"alt":98,"src":79441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,79443,79444],{},"发现直接存对象是使用不了的!!!",[7601,79446,79448],{"id":79447},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,79450,79451],{},[6750,79452],{"alt":98,"src":79453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[93,79455,79457],{"className":58498,"code":79456,"language":58500,"meta":98,"style":98},"\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",[83,79458,79459,79467,79477,79487,79496,79504,79508,79512,79538,79557,79565,79569,79574,79579],{"__ignoreMap":98},[102,79460,79461,79463,79465],{"class":104,"line":105},[102,79462,1208],{"class":119},[102,79464,59678],{"class":59165},[102,79466,59172],{"class":119},[102,79468,79469,79471,79473,79475],{"class":104,"line":116},[102,79470,19961],{"class":108},[102,79472,77836],{"class":187},[102,79474,22296],{"class":108},[102,79476,1077],{"class":119},[102,79478,79479,79482,79485],{"class":104,"line":123},[102,79480,79481],{"class":119},"      uname: ",[102,79483,79484],{"class":278},"'pink老师'",[102,79486,39331],{"class":119},[102,79488,79489,79492,79494],{"class":104,"line":130},[102,79490,79491],{"class":119},"      age: ",[102,79493,6080],{"class":187},[102,79495,39331],{"class":119},[102,79497,79498,79501],{"class":104,"line":136},[102,79499,79500],{"class":119},"      gender: ",[102,79502,79503],{"class":278},"'女'\n",[102,79505,79506],{"class":104,"line":142},[102,79507,205],{"class":119},[102,79509,79510],{"class":104,"line":148},[102,79511,79412],{"class":126},[102,79513,79514,79517,79520,79522,79525,79527,79530,79532,79535],{"class":104,"line":157},[102,79515,79516],{"class":119},"  localStorage.",[102,79518,79519],{"class":112},"setItem",[102,79521,380],{"class":119},[102,79523,79524],{"class":278},"'obj'",[102,79526,2571],{"class":119},[102,79528,79529],{"class":187},"JSON",[102,79531,9585],{"class":119},[102,79533,79534],{"class":112},"stringify",[102,79536,79537],{"class":119},"(obj))\n",[102,79539,79540,79543,79545,79548,79551,79553,79555],{"class":104,"line":163},[102,79541,79542],{"class":119},"  console.",[102,79544,66112],{"class":112},[102,79546,79547],{"class":119},"(localStorage.",[102,79549,79550],{"class":112},"getItem",[102,79552,380],{"class":119},[102,79554,79524],{"class":278},[102,79556,38362],{"class":119},[102,79558,79559,79561,79563],{"class":104,"line":175},[102,79560,60282],{"class":119},[102,79562,59678],{"class":59165},[102,79564,59172],{"class":119},[102,79566,79567],{"class":104,"line":181},[102,79568,78486],{"class":119},[102,79570,79571],{"class":104,"line":202},[102,79572,79573],{"class":119},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[102,79575,79576],{"class":104,"line":208},[102,79577,79578],{"class":119},"  类型是字符串的\n",[102,79580,79581],{"class":104,"line":214},[102,79582,79583],{"class":119},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[7601,79585,79587],{"id":79586},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,79589,79590],{},[6750,79591],{"alt":98,"src":79592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,79594,79595],{},[6750,79596],{"alt":98,"src":79597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[93,79599,79601],{"className":60932,"code":79600,"language":60934,"meta":98,"style":98},"  \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",[83,79602,79603,79611,79615,79619,79623,79627,79631,79636,79641,79646,79651,79656,79661,79666,79671],{"__ignoreMap":98},[102,79604,79605,79607,79609],{"class":104,"line":105},[102,79606,60009],{"class":119},[102,79608,59678],{"class":59165},[102,79610,59172],{"class":119},[102,79612,79613],{"class":104,"line":116},[102,79614,79388],{"class":119},[102,79616,79617],{"class":104,"line":123},[102,79618,79393],{"class":119},[102,79620,79621],{"class":104,"line":130},[102,79622,79398],{"class":119},[102,79624,79625],{"class":104,"line":136},[102,79626,79403],{"class":119},[102,79628,79629],{"class":104,"line":142},[102,79630,205],{"class":119},[102,79632,79633],{"class":104,"line":148},[102,79634,79635],{"class":119},"    \u002F\u002F 1.存储复杂数据类型\n",[102,79637,79638],{"class":104,"line":157},[102,79639,79640],{"class":119},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[102,79642,79643],{"class":104,"line":163},[102,79644,79645],{"class":119},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[102,79647,79648],{"class":104,"line":175},[102,79649,79650],{"class":119},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[102,79652,79653],{"class":104,"line":181},[102,79654,79655],{"class":119},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[102,79657,79658],{"class":104,"line":202},[102,79659,79660],{"class":119},"    \u002F\u002F 取\n",[102,79662,79663],{"class":104,"line":208},[102,79664,79665],{"class":119},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[102,79667,79668],{"class":104,"line":214},[102,79669,79670],{"class":119},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[102,79672,79673,79675,79677],{"class":104,"line":225},[102,79674,60282],{"class":119},[102,79676,59678],{"class":59165},[102,79678,59172],{"class":119},[14,79680,79681],{},[6750,79682],{"alt":98,"src":79683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[48,79685,79687],{"id":79686},"_356-数组map方法","3.5.6 数组map方法",[14,79689,79690],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,79692,79693],{},[6750,79694],{"alt":98,"src":79695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,79697,79698],{},[6750,79699],{"alt":98,"src":79700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,79702,79703,79706],{},[18,79704,79705],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,79708,79709],{},"map有返回值，但是forEach没有返回值",[14,79711,79712],{},"map是个方法。用的时候要加 ()",[14,79714,79715],{},"map返回的是一个数组",[48,79717,79719],{"id":79718},"_357-数组中join方法","3.5.7 数组中join方法",[14,79721,79722],{},[6750,79723],{"alt":98,"src":79724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,79726,79727],{},"类似于python中拼接字符串一样！",[87,79729,79730,79733,79736],{},[62,79731,79732],{},"小括号为空则逗号分开",[62,79734,79735],{},"小括号为空字符串 ''，则元素之间没有分隔符",[62,79737,79738],{},"小括号用啥符号就用进行分割",[48,79740,79742],{"id":79741},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[87,79744,79745,79748,79751,79754,79757],{},[62,79746,79747],{},"记住本地时间获取快速方式：new Date().toDateString()",[62,79749,79750],{},"尽量减少DOM操作，用好map+join的渲染方式",[62,79752,79753],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[62,79755,79756],{},"return可以实现函数的结束",[62,79758,79759],{},"禁止跳转是 preventDefault() 不要忘记",[93,79761,79763],{"className":58498,"code":79762,"language":58500,"meta":98,"style":98},"\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",[83,79764,79765,79775,79789,79793,79801,79815,79835,79847,79855,79861,79871,79881,79885,79889,79895,79905,79917,79921,79925,79932,79944,79958,79968,79972,79976,79983,79990,79997,80009,80021,80031,80043,80047,80051,80058,80065,80077,80089,80099,80111,80141,80145,80149,80156,80168,80180,80204,80214,80224,80228,80232,80240,80251,80263,80275,80287,80304,80316,80328,80332,80336,80343,80355,80367,80379,80390,80408,80421,80433,80457,80468,80472,80476,80484,80494,80498,80502,80508,80520,80531,80541,80545,80549,80555,80577,80581,80585,80591,80597,80609,80619,80631,80661,80674,80691,80695,80699,80710,80732,80742,80746,80750,80763,80773,80785,80797,80809,80821,80831,80841,80851,80862,80875,80879,80887,80895,80899,80907,80920,80940,80973,81006,81039,81065,81083,81101,81109,81135,81153,81171,81189,81207,81225,81233,81241,81259,81267,81296,81304,81312,81320,81333,81345,81357,81369,81381,81393,81406,81418,81426,81434,81442,81447,81452,81456,81460,81464,81468,81472,81476,81481,81486,81491,81496,81504,81512,81520,81525,81530,81535,81540,81545,81550,81555,81560,81565,81570,81575,81580,81585,81590,81594,81599,81604,81614,81623,81627,81632,81641,81657,81699,81739,81778,81843,81851,81855,81860,81878,81886,81891,81896,81926,81932,81937,81950,81962,81974,81986,81998,82010,82022,82026,82036,82040,82045,82050,82054,82063,82067,82072,82077,82096,82101,82121,82125,82130,82134,82139,82157,82175,82193,82212,82231,82250,82255,82261,82282,82288,82297,82303,82309,82315,82342,82355,82360,82370,82376,82382,82388,82394,82399,82405,82411,82417,82423,82456,82461,82466,82471,82476,82482,82488,82494,82505,82510,82516,82523,82537,82543,82567,82572,82577,82583,82589,82610,82616,82629,82635,82641,82647,82653,82658,82664,82670,82676,82694,82708,82714,82722,82728,82750,82755,82760,82765,82770,82775,82784,82793,82798],{"__ignoreMap":98},[102,79766,79767,79769,79771,79773],{"class":104,"line":105},[102,79768,59162],{"class":119},[102,79770,59166],{"class":59165},[102,79772,59169],{"class":112},[102,79774,59172],{"class":119},[102,79776,79777,79779,79781,79783,79785,79787],{"class":104,"line":116},[102,79778,1208],{"class":119},[102,79780,58500],{"class":59165},[102,79782,59181],{"class":112},[102,79784,260],{"class":119},[102,79786,59186],{"class":278},[102,79788,59172],{"class":119},[102,79790,79791],{"class":104,"line":123},[102,79792,652],{"emptyLinePlaceholder":651},[102,79794,79795,79797,79799],{"class":104,"line":130},[102,79796,1208],{"class":119},[102,79798,59199],{"class":59165},[102,79800,59172],{"class":119},[102,79802,79803,79805,79807,79809,79811,79813],{"class":104,"line":136},[102,79804,60009],{"class":119},[102,79806,59209],{"class":59165},[102,79808,59212],{"class":112},[102,79810,260],{"class":119},[102,79812,59217],{"class":278},[102,79814,59172],{"class":119},[102,79816,79817,79819,79821,79823,79825,79827,79829,79831,79833],{"class":104,"line":142},[102,79818,60009],{"class":119},[102,79820,59209],{"class":59165},[102,79822,387],{"class":112},[102,79824,260],{"class":119},[102,79826,59256],{"class":278},[102,79828,59236],{"class":112},[102,79830,260],{"class":119},[102,79832,59263],{"class":278},[102,79834,59172],{"class":119},[102,79836,79837,79839,79841,79843,79845],{"class":104,"line":148},[102,79838,60009],{"class":119},[102,79840,59272],{"class":59165},[102,79842,59275],{"class":119},[102,79844,59272],{"class":59165},[102,79846,59172],{"class":119},[102,79848,79849,79851,79853],{"class":104,"line":157},[102,79850,60009],{"class":119},[102,79852,8955],{"class":59165},[102,79854,59172],{"class":119},[102,79856,79857,79859],{"class":104,"line":163},[102,79858,15198],{"class":59165},[102,79860,1077],{"class":119},[102,79862,79863,79865,79867,79869],{"class":104,"line":175},[102,79864,62560],{"class":187},[102,79866,59302],{"class":119},[102,79868,8423],{"class":187},[102,79870,266],{"class":119},[102,79872,79873,79875,79877,79879],{"class":104,"line":181},[102,79874,62571],{"class":187},[102,79876,59302],{"class":119},[102,79878,8423],{"class":187},[102,79880,266],{"class":119},[102,79882,79883],{"class":104,"line":202},[102,79884,205],{"class":119},[102,79886,79887],{"class":104,"line":208},[102,79888,652],{"emptyLinePlaceholder":651},[102,79890,79891,79893],{"class":104,"line":214},[102,79892,65144],{"class":59165},[102,79894,1077],{"class":119},[102,79896,79897,79899,79901,79903],{"class":104,"line":225},[102,79898,65151],{"class":187},[102,79900,59302],{"class":119},[102,79902,59457],{"class":187},[102,79904,266],{"class":119},[102,79906,79907,79909,79911,79913,79915],{"class":104,"line":230},[102,79908,69942],{"class":187},[102,79910,59302],{"class":119},[102,79912,5016],{"class":187},[102,79914,59357],{"class":108},[102,79916,266],{"class":119},[102,79918,79919],{"class":104,"line":236},[102,79920,205],{"class":119},[102,79922,79923],{"class":104,"line":242},[102,79924,652],{"emptyLinePlaceholder":651},[102,79926,79927,79930],{"class":104,"line":248},[102,79928,79929],{"class":112},"    .info",[102,79931,1077],{"class":119},[102,79933,79934,79936,79938,79940,79942],{"class":104,"line":254},[102,79935,62636],{"class":187},[102,79937,59302],{"class":119},[102,79939,59354],{"class":187},[102,79941,59357],{"class":108},[102,79943,266],{"class":119},[102,79945,79946,79948,79950,79952,79954,79956],{"class":104,"line":269},[102,79947,62571],{"class":187},[102,79949,59302],{"class":119},[102,79951,263],{"class":187},[102,79953,59357],{"class":108},[102,79955,59421],{"class":187},[102,79957,266],{"class":119},[102,79959,79960,79962,79964,79966],{"class":104,"line":298},[102,79961,65151],{"class":187},[102,79963,59302],{"class":119},[102,79965,59457],{"class":187},[102,79967,266],{"class":119},[102,79969,79970],{"class":104,"line":502},[102,79971,205],{"class":119},[102,79973,79974],{"class":104,"line":507},[102,79975,652],{"emptyLinePlaceholder":651},[102,79977,79978,79981],{"class":104,"line":512},[102,79979,79980],{"class":112},"    .uname",[102,79982,39331],{"class":119},[102,79984,79985,79988],{"class":104,"line":521},[102,79986,79987],{"class":112},"    .age",[102,79989,39331],{"class":119},[102,79991,79992,79995],{"class":104,"line":526},[102,79993,79994],{"class":112},"    .salary",[102,79996,1077],{"class":119},[102,79998,79999,80001,80003,80005,80007],{"class":104,"line":532},[102,80000,62636],{"class":187},[102,80002,59302],{"class":119},[102,80004,5569],{"class":187},[102,80006,59357],{"class":108},[102,80008,266],{"class":119},[102,80010,80011,80013,80015,80017,80019],{"class":104,"line":538},[102,80012,62650],{"class":187},[102,80014,59302],{"class":119},[102,80016,5016],{"class":187},[102,80018,59357],{"class":108},[102,80020,266],{"class":119},[102,80022,80023,80025,80027,80029],{"class":104,"line":555},[102,80024,69645],{"class":187},[102,80026,59302],{"class":119},[102,80028,62602],{"class":187},[102,80030,266],{"class":119},[102,80032,80033,80035,80037,80039,80041],{"class":104,"line":570},[102,80034,69615],{"class":187},[102,80036,59302],{"class":119},[102,80038,9602],{"class":187},[102,80040,59357],{"class":108},[102,80042,266],{"class":119},[102,80044,80045],{"class":104,"line":581},[102,80046,205],{"class":119},[102,80048,80049],{"class":104,"line":819},[102,80050,652],{"emptyLinePlaceholder":651},[102,80052,80053,80056],{"class":104,"line":828},[102,80054,80055],{"class":112},"    .gender",[102,80057,39331],{"class":119},[102,80059,80060,80063],{"class":104,"line":837},[102,80061,80062],{"class":112},"    .city",[102,80064,1077],{"class":119},[102,80066,80067,80069,80071,80073,80075],{"class":104,"line":842},[102,80068,62636],{"class":187},[102,80070,59302],{"class":119},[102,80072,5569],{"class":187},[102,80074,59357],{"class":108},[102,80076,266],{"class":119},[102,80078,80079,80081,80083,80085,80087],{"class":104,"line":855},[102,80080,62650],{"class":187},[102,80082,59302],{"class":119},[102,80084,9847],{"class":187},[102,80086,59357],{"class":108},[102,80088,266],{"class":119},[102,80090,80091,80093,80095,80097],{"class":104,"line":860},[102,80092,69645],{"class":187},[102,80094,59302],{"class":119},[102,80096,62602],{"class":187},[102,80098,266],{"class":119},[102,80100,80101,80103,80105,80107,80109],{"class":104,"line":871},[102,80102,69615],{"class":187},[102,80104,59302],{"class":119},[102,80106,9602],{"class":187},[102,80108,59357],{"class":108},[102,80110,266],{"class":119},[102,80112,80113,80115,80117,80119,80121,80123,80126,80128,80130,80132,80135,80137,80139],{"class":104,"line":1359},[102,80114,69842],{"class":187},[102,80116,59302],{"class":119},[102,80118,7039],{"class":187},[102,80120,59357],{"class":108},[102,80122,59386],{"class":187},[102,80124,80125],{"class":187}," rgb",[102,80127,380],{"class":119},[102,80129,7866],{"class":187},[102,80131,2571],{"class":119},[102,80133,80134],{"class":187},"197",[102,80136,2571],{"class":119},[102,80138,80134],{"class":187},[102,80140,552],{"class":119},[102,80142,80143],{"class":104,"line":1368},[102,80144,205],{"class":119},[102,80146,80147],{"class":104,"line":1373},[102,80148,652],{"emptyLinePlaceholder":651},[102,80150,80151,80154],{"class":104,"line":1378},[102,80152,80153],{"class":59165},"    button",[102,80155,1077],{"class":119},[102,80157,80158,80160,80162,80164,80166],{"class":104,"line":1384},[102,80159,62650],{"class":187},[102,80161,59302],{"class":119},[102,80163,9847],{"class":187},[102,80165,59357],{"class":108},[102,80167,266],{"class":119},[102,80169,80170,80172,80174,80176,80178],{"class":104,"line":1398},[102,80171,62636],{"class":187},[102,80173,59302],{"class":119},[102,80175,9513],{"class":187},[102,80177,59357],{"class":108},[102,80179,266],{"class":119},[102,80181,80182,80184,80186,80189,80191,80193,80195,80198,80200,80202],{"class":104,"line":1424},[102,80183,62749],{"class":187},[102,80185,59302],{"class":119},[102,80187,80188],{"class":187},"rgb",[102,80190,380],{"class":119},[102,80192,9989],{"class":187},[102,80194,2571],{"class":119},[102,80196,80197],{"class":187},"187",[102,80199,2571],{"class":119},[102,80201,9335],{"class":187},[102,80203,552],{"class":119},[102,80205,80206,80208,80210,80212],{"class":104,"line":1429},[102,80207,65281],{"class":187},[102,80209,59302],{"class":119},[102,80211,68707],{"class":187},[102,80213,266],{"class":119},[102,80215,80216,80218,80220,80222],{"class":104,"line":1435},[102,80217,69842],{"class":187},[102,80219,59302],{"class":119},[102,80221,8423],{"class":187},[102,80223,266],{"class":119},[102,80225,80226],{"class":104,"line":1450},[102,80227,205],{"class":119},[102,80229,80230],{"class":104,"line":1473},[102,80231,652],{"emptyLinePlaceholder":651},[102,80233,80234,80236,80238],{"class":104,"line":1478},[102,80235,80153],{"class":59165},[102,80237,59553],{"class":59165},[102,80239,1077],{"class":119},[102,80241,80242,80244,80246,80249],{"class":104,"line":1484},[102,80243,62874],{"class":187},[102,80245,59302],{"class":119},[102,80247,80248],{"class":187},"inline-block",[102,80250,266],{"class":119},[102,80252,80253,80255,80257,80259,80261],{"class":104,"line":1499},[102,80254,62636],{"class":187},[102,80256,59302],{"class":119},[102,80258,263],{"class":187},[102,80260,59357],{"class":108},[102,80262,266],{"class":119},[102,80264,80265,80267,80269,80271,80273],{"class":104,"line":1508},[102,80266,62650],{"class":187},[102,80268,59302],{"class":119},[102,80270,263],{"class":187},[102,80272,59357],{"class":108},[102,80274,266],{"class":119},[102,80276,80277,80279,80281,80283,80285],{"class":104,"line":1513},[102,80278,65224],{"class":187},[102,80280,59302],{"class":119},[102,80282,9502],{"class":187},[102,80284,59357],{"class":108},[102,80286,266],{"class":119},[102,80288,80289,80291,80293,80295,80297,80299,80302],{"class":104,"line":1524},[102,80290,69842],{"class":187},[102,80292,59302],{"class":119},[102,80294,7039],{"class":187},[102,80296,59357],{"class":108},[102,80298,59386],{"class":187},[102,80300,80301],{"class":187}," #fff",[102,80303,266],{"class":119},[102,80305,80306,80308,80310,80312,80314],{"class":104,"line":1529},[102,80307,62999],{"class":187},[102,80309,59302],{"class":119},[102,80311,9354],{"class":187},[102,80313,59357],{"class":108},[102,80315,266],{"class":119},[102,80317,80318,80320,80322,80324,80326],{"class":104,"line":1538},[102,80319,69615],{"class":187},[102,80321,59302],{"class":119},[102,80323,7039],{"class":187},[102,80325,59357],{"class":108},[102,80327,266],{"class":119},[102,80329,80330],{"class":104,"line":2089},[102,80331,205],{"class":119},[102,80333,80334],{"class":104,"line":2094},[102,80335,652],{"emptyLinePlaceholder":651},[102,80337,80338,80341],{"class":104,"line":2100},[102,80339,80340],{"class":112},"    .total",[102,80342,1077],{"class":119},[102,80344,80345,80347,80349,80351,80353],{"class":104,"line":2106},[102,80346,62636],{"class":187},[102,80348,59302],{"class":119},[102,80350,69494],{"class":187},[102,80352,59357],{"class":108},[102,80354,266],{"class":119},[102,80356,80357,80359,80361,80363,80365],{"class":104,"line":2120},[102,80358,62650],{"class":187},[102,80360,59302],{"class":119},[102,80362,9434],{"class":187},[102,80364,59357],{"class":108},[102,80366,266],{"class":119},[102,80368,80369,80371,80373,80375,80377],{"class":104,"line":2128},[102,80370,65224],{"class":187},[102,80372,59302],{"class":119},[102,80374,9434],{"class":187},[102,80376,59357],{"class":108},[102,80378,266],{"class":119},[102,80380,80381,80383,80385,80388],{"class":104,"line":2149},[102,80382,65151],{"class":187},[102,80384,59302],{"class":119},[102,80386,80387],{"class":187},"right",[102,80389,266],{"class":119},[102,80391,80392,80394,80396,80398,80400,80402,80404,80406],{"class":104,"line":2161},[102,80393,62571],{"class":187},[102,80395,59302],{"class":119},[102,80397,9434],{"class":187},[102,80399,59357],{"class":108},[102,80401,59421],{"class":187},[102,80403,989],{"class":187},[102,80405,59357],{"class":108},[102,80407,266],{"class":119},[102,80409,80410,80413,80415,80417,80419],{"class":104,"line":2167},[102,80411,80412],{"class":187},"      padding-right",[102,80414,59302],{"class":119},[102,80416,263],{"class":187},[102,80418,59357],{"class":108},[102,80420,266],{"class":119},[102,80422,80423,80425,80427,80429,80431],{"class":104,"line":2190},[102,80424,62787],{"class":187},[102,80426,59302],{"class":119},[102,80428,9551],{"class":187},[102,80430,59357],{"class":108},[102,80432,266],{"class":119},[102,80434,80435,80437,80439,80441,80443,80446,80448,80451,80453,80455],{"class":104,"line":2196},[102,80436,62749],{"class":187},[102,80438,59302],{"class":119},[102,80440,80188],{"class":187},[102,80442,380],{"class":119},[102,80444,80445],{"class":187},"237",[102,80447,2571],{"class":119},[102,80449,80450],{"class":187},"235",[102,80452,2571],{"class":119},[102,80454,80450],{"class":187},[102,80456,552],{"class":119},[102,80458,80459,80462,80464,80466],{"class":104,"line":2219},[102,80460,80461],{"class":187},"      box-sizing",[102,80463,59302],{"class":119},[102,80465,68370],{"class":187},[102,80467,266],{"class":119},[102,80469,80470],{"class":104,"line":2233},[102,80471,205],{"class":119},[102,80473,80474],{"class":104,"line":2253},[102,80475,652],{"emptyLinePlaceholder":651},[102,80477,80478,80480,80482],{"class":104,"line":2259},[102,80479,80340],{"class":112},[102,80481,59553],{"class":59165},[102,80483,1077],{"class":119},[102,80485,80486,80488,80490,80492],{"class":104,"line":2270},[102,80487,65281],{"class":187},[102,80489,59302],{"class":119},[102,80491,65286],{"class":187},[102,80493,266],{"class":119},[102,80495,80496],{"class":104,"line":2293},[102,80497,205],{"class":119},[102,80499,80500],{"class":104,"line":2315},[102,80501,652],{"emptyLinePlaceholder":651},[102,80503,80504,80506],{"class":104,"line":2320},[102,80505,72888],{"class":59165},[102,80507,1077],{"class":119},[102,80509,80510,80512,80514,80516,80518],{"class":104,"line":2326},[102,80511,62636],{"class":187},[102,80513,59302],{"class":119},[102,80515,69494],{"class":187},[102,80517,59357],{"class":108},[102,80519,266],{"class":119},[102,80521,80522,80524,80526,80529],{"class":104,"line":2340},[102,80523,62571],{"class":187},[102,80525,59302],{"class":119},[102,80527,80528],{"class":187},"auto",[102,80530,266],{"class":119},[102,80532,80533,80535,80537,80539],{"class":104,"line":2354},[102,80534,72895],{"class":187},[102,80536,59302],{"class":119},[102,80538,72900],{"class":187},[102,80540,266],{"class":119},[102,80542,80543],{"class":104,"line":2359},[102,80544,205],{"class":119},[102,80546,80547],{"class":104,"line":2373},[102,80548,652],{"emptyLinePlaceholder":651},[102,80550,80551,80553],{"class":104,"line":2378},[102,80552,72980],{"class":59165},[102,80554,1077],{"class":119},[102,80556,80557,80559,80561,80563,80565,80567,80569,80571,80573,80575],{"class":104,"line":2384},[102,80558,62749],{"class":187},[102,80560,59302],{"class":119},[102,80562,80188],{"class":187},[102,80564,380],{"class":119},[102,80566,80445],{"class":187},[102,80568,2571],{"class":119},[102,80570,80450],{"class":187},[102,80572,2571],{"class":119},[102,80574,80450],{"class":187},[102,80576,552],{"class":119},[102,80578,80579],{"class":104,"line":2389},[102,80580,205],{"class":119},[102,80582,80583],{"class":104,"line":2403},[102,80584,652],{"emptyLinePlaceholder":651},[102,80586,80587,80589],{"class":104,"line":2408},[102,80588,72980],{"class":59165},[102,80590,39331],{"class":119},[102,80592,80593,80595],{"class":104,"line":2413},[102,80594,73046],{"class":59165},[102,80596,1077],{"class":119},[102,80598,80599,80601,80603,80605,80607],{"class":104,"line":2427},[102,80600,62650],{"class":187},[102,80602,59302],{"class":119},[102,80604,9310],{"class":187},[102,80606,59357],{"class":108},[102,80608,266],{"class":119},[102,80610,80611,80613,80615,80617],{"class":104,"line":2440},[102,80612,65151],{"class":187},[102,80614,59302],{"class":119},[102,80616,31600],{"class":187},[102,80618,266],{"class":119},[102,80620,80621,80623,80625,80627,80629],{"class":104,"line":2445},[102,80622,62787],{"class":187},[102,80624,59302],{"class":119},[102,80626,9576],{"class":187},[102,80628,59357],{"class":108},[102,80630,266],{"class":119},[102,80632,80633,80635,80637,80639,80641,80643,80645,80647,80650,80652,80655,80657,80659],{"class":104,"line":2458},[102,80634,69842],{"class":187},[102,80636,59302],{"class":119},[102,80638,7039],{"class":187},[102,80640,59357],{"class":108},[102,80642,59386],{"class":187},[102,80644,80125],{"class":187},[102,80646,380],{"class":119},[102,80648,80649],{"class":187},"228",[102,80651,2571],{"class":119},[102,80653,80654],{"class":187},"225",[102,80656,2571],{"class":119},[102,80658,80654],{"class":187},[102,80660,552],{"class":119},[102,80662,80663,80666,80668,80670,80672],{"class":104,"line":2463},[102,80664,80665],{"class":187},"      padding-left",[102,80667,59302],{"class":119},[102,80669,9354],{"class":187},[102,80671,59357],{"class":108},[102,80673,266],{"class":119},[102,80675,80676,80678,80680,80682,80685,80687,80689],{"class":104,"line":2468},[102,80677,69725],{"class":187},[102,80679,59302],{"class":119},[102,80681,35986],{"class":187},[102,80683,80684],{"class":187}," linear",[102,80686,69732],{"class":187},[102,80688,9720],{"class":108},[102,80690,266],{"class":119},[102,80692,80693],{"class":104,"line":2473},[102,80694,205],{"class":119},[102,80696,80697],{"class":104,"line":2486},[102,80698,652],{"emptyLinePlaceholder":651},[102,80700,80701,80704,80706,80708],{"class":104,"line":2491},[102,80702,80703],{"class":59165},"    tbody",[102,80705,78009],{"class":59165},[102,80707,68805],{"class":112},[102,80709,1077],{"class":119},[102,80711,80712,80714,80716,80718,80720,80722,80724,80726,80728,80730],{"class":104,"line":40498},[102,80713,62749],{"class":187},[102,80715,59302],{"class":119},[102,80717,80188],{"class":187},[102,80719,380],{"class":119},[102,80721,80445],{"class":187},[102,80723,2571],{"class":119},[102,80725,80450],{"class":187},[102,80727,2571],{"class":119},[102,80729,80450],{"class":187},[102,80731,552],{"class":119},[102,80733,80734,80736,80738,80740],{"class":104,"line":40504},[102,80735,69890],{"class":187},[102,80737,59302],{"class":119},[102,80739,69895],{"class":187},[102,80741,266],{"class":119},[102,80743,80744],{"class":104,"line":40510},[102,80745,205],{"class":119},[102,80747,80748],{"class":104,"line":40516},[102,80749,652],{"emptyLinePlaceholder":651},[102,80751,80752,80754,80756,80759,80761],{"class":104,"line":40522},[102,80753,80703],{"class":59165},[102,80755,78009],{"class":59165},[102,80757,80758],{"class":59165}," td",[102,80760,4378],{"class":59165},[102,80762,1077],{"class":119},[102,80764,80765,80767,80769,80771],{"class":104,"line":40533},[102,80766,62874],{"class":187},[102,80768,59302],{"class":119},[102,80770,68734],{"class":187},[102,80772,266],{"class":119},[102,80774,80775,80777,80779,80781,80783],{"class":104,"line":40539},[102,80776,62636],{"class":187},[102,80778,59302],{"class":119},[102,80780,9929],{"class":187},[102,80782,59357],{"class":108},[102,80784,266],{"class":119},[102,80786,80787,80789,80791,80793,80795],{"class":104,"line":40559},[102,80788,62650],{"class":187},[102,80790,59302],{"class":119},[102,80792,9847],{"class":187},[102,80794,59357],{"class":108},[102,80796,266],{"class":119},[102,80798,80799,80801,80803,80805,80807],{"class":104,"line":40565},[102,80800,65224],{"class":187},[102,80802,59302],{"class":119},[102,80804,9847],{"class":187},[102,80806,59357],{"class":108},[102,80808,266],{"class":119},[102,80810,80811,80813,80815,80817,80819],{"class":104,"line":40576},[102,80812,69942],{"class":187},[102,80814,59302],{"class":119},[102,80816,7044],{"class":187},[102,80818,59357],{"class":108},[102,80820,266],{"class":119},[102,80822,80823,80825,80827,80829],{"class":104,"line":40582},[102,80824,65281],{"class":187},[102,80826,59302],{"class":119},[102,80828,68707],{"class":187},[102,80830,266],{"class":119},[102,80832,80833,80835,80837,80839],{"class":104,"line":40588},[102,80834,65151],{"class":187},[102,80836,59302],{"class":119},[102,80838,59457],{"class":187},[102,80840,266],{"class":119},[102,80842,80843,80845,80847,80849],{"class":104,"line":40594},[102,80844,71835],{"class":187},[102,80846,59302],{"class":119},[102,80848,62602],{"class":187},[102,80850,266],{"class":119},[102,80852,80853,80855,80857,80860],{"class":104,"line":40600},[102,80854,62749],{"class":187},[102,80856,59302],{"class":119},[102,80858,80859],{"class":187},"orange",[102,80861,266],{"class":119},[102,80863,80864,80866,80868,80871,80873],{"class":104,"line":40606},[102,80865,62999],{"class":187},[102,80867,59302],{"class":119},[102,80869,80870],{"class":187},"12.5",[102,80872,59357],{"class":108},[102,80874,266],{"class":119},[102,80876,80877],{"class":104,"line":40612},[102,80878,205],{"class":119},[102,80880,80881,80883,80885],{"class":104,"line":40618},[102,80882,60282],{"class":119},[102,80884,8955],{"class":59165},[102,80886,59172],{"class":119},[102,80888,80889,80891,80893],{"class":104,"line":40638},[102,80890,59650],{"class":119},[102,80892,59199],{"class":59165},[102,80894,59172],{"class":119},[102,80896,80897],{"class":104,"line":40644},[102,80898,652],{"emptyLinePlaceholder":651},[102,80900,80901,80903,80905],{"class":104,"line":40660},[102,80902,1208],{"class":119},[102,80904,59665],{"class":59165},[102,80906,59172],{"class":119},[102,80908,80909,80911,80913,80916,80918],{"class":104,"line":40666},[102,80910,60009],{"class":119},[102,80912,43],{"class":59165},[102,80914,80915],{"class":119},">学生就业统计表\u003C\u002F",[102,80917,43],{"class":59165},[102,80919,59172],{"class":119},[102,80921,80922,80924,80926,80928,80930,80932,80934,80936,80938],{"class":104,"line":40680},[102,80923,60009],{"class":119},[102,80925,74490],{"class":59165},[102,80927,61351],{"class":112},[102,80929,260],{"class":119},[102,80931,70529],{"class":278},[102,80933,76935],{"class":112},[102,80935,260],{"class":119},[102,80937,39641],{"class":278},[102,80939,59172],{"class":119},[102,80941,80942,80944,80946,80948,80950,80952,80954,80956,80958,80960,80962,80965,80967,80969,80971],{"class":104,"line":40686},[102,80943,59206],{"class":119},[102,80945,61686],{"class":59165},[102,80947,61689],{"class":112},[102,80949,260],{"class":119},[102,80951,70564],{"class":278},[102,80953,387],{"class":112},[102,80955,260],{"class":119},[102,80957,76961],{"class":278},[102,80959,68885],{"class":112},[102,80961,260],{"class":119},[102,80963,80964],{"class":278},"\"姓名\"",[102,80966,61351],{"class":112},[102,80968,260],{"class":119},[102,80970,76961],{"class":278},[102,80972,59172],{"class":119},[102,80974,80975,80977,80979,80981,80983,80985,80987,80989,80991,80993,80995,80998,81000,81002,81004],{"class":104,"line":40701},[102,80976,59206],{"class":119},[102,80978,61686],{"class":59165},[102,80980,61689],{"class":112},[102,80982,260],{"class":119},[102,80984,70564],{"class":278},[102,80986,387],{"class":112},[102,80988,260],{"class":119},[102,80990,76989],{"class":278},[102,80992,68885],{"class":112},[102,80994,260],{"class":119},[102,80996,80997],{"class":278},"\"年龄\"",[102,80999,61351],{"class":112},[102,81001,260],{"class":119},[102,81003,76989],{"class":278},[102,81005,59172],{"class":119},[102,81007,81008,81010,81012,81014,81016,81018,81020,81022,81024,81026,81028,81031,81033,81035,81037],{"class":104,"line":40707},[102,81009,59206],{"class":119},[102,81011,61686],{"class":59165},[102,81013,61689],{"class":112},[102,81015,260],{"class":119},[102,81017,70564],{"class":278},[102,81019,387],{"class":112},[102,81021,260],{"class":119},[102,81023,77091],{"class":278},[102,81025,68885],{"class":112},[102,81027,260],{"class":119},[102,81029,81030],{"class":278},"\"薪资\"",[102,81032,61351],{"class":112},[102,81034,260],{"class":119},[102,81036,77091],{"class":278},[102,81038,59172],{"class":119},[102,81040,81041,81043,81045,81047,81049,81051,81053,81055,81057,81059,81061,81063],{"class":104,"line":40716},[102,81042,59206],{"class":119},[102,81044,77009],{"class":59165},[102,81046,387],{"class":112},[102,81048,260],{"class":119},[102,81050,77016],{"class":278},[102,81052,427],{"class":112},[102,81054,260],{"class":119},[102,81056,16439],{"class":278},[102,81058,61351],{"class":112},[102,81060,260],{"class":119},[102,81062,77016],{"class":278},[102,81064,59172],{"class":119},[102,81066,81067,81069,81071,81073,81075,81077,81079,81081],{"class":104,"line":40722},[102,81068,63099],{"class":119},[102,81070,77031],{"class":59165},[102,81072,74516],{"class":112},[102,81074,260],{"class":119},[102,81076,18704],{"class":278},[102,81078,77040],{"class":119},[102,81080,77031],{"class":59165},[102,81082,59172],{"class":119},[102,81084,81085,81087,81089,81091,81093,81095,81097,81099],{"class":104,"line":40731},[102,81086,63099],{"class":119},[102,81088,77031],{"class":59165},[102,81090,74516],{"class":112},[102,81092,260],{"class":119},[102,81094,18773],{"class":278},[102,81096,77059],{"class":119},[102,81098,77031],{"class":59165},[102,81100,59172],{"class":119},[102,81102,81103,81105,81107],{"class":104,"line":40737},[102,81104,59641],{"class":119},[102,81106,77009],{"class":59165},[102,81108,59172],{"class":119},[102,81110,81111,81113,81115,81117,81119,81121,81123,81125,81127,81129,81131,81133],{"class":104,"line":40743},[102,81112,59206],{"class":119},[102,81114,77009],{"class":59165},[102,81116,387],{"class":112},[102,81118,260],{"class":119},[102,81120,77113],{"class":278},[102,81122,427],{"class":112},[102,81124,260],{"class":119},[102,81126,16439],{"class":278},[102,81128,61351],{"class":112},[102,81130,260],{"class":119},[102,81132,77113],{"class":278},[102,81134,59172],{"class":119},[102,81136,81137,81139,81141,81143,81145,81147,81149,81151],{"class":104,"line":40752},[102,81138,63099],{"class":119},[102,81140,77031],{"class":59165},[102,81142,74516],{"class":112},[102,81144,260],{"class":119},[102,81146,77134],{"class":278},[102,81148,77137],{"class":119},[102,81150,77031],{"class":59165},[102,81152,59172],{"class":119},[102,81154,81155,81157,81159,81161,81163,81165,81167,81169],{"class":104,"line":40758},[102,81156,63099],{"class":119},[102,81158,77031],{"class":59165},[102,81160,74516],{"class":112},[102,81162,260],{"class":119},[102,81164,77154],{"class":278},[102,81166,77157],{"class":119},[102,81168,77031],{"class":59165},[102,81170,59172],{"class":119},[102,81172,81173,81175,81177,81179,81181,81183,81185,81187],{"class":104,"line":40769},[102,81174,63099],{"class":119},[102,81176,77031],{"class":59165},[102,81178,74516],{"class":112},[102,81180,260],{"class":119},[102,81182,77174],{"class":278},[102,81184,77177],{"class":119},[102,81186,77031],{"class":59165},[102,81188,59172],{"class":119},[102,81190,81191,81193,81195,81197,81199,81201,81203,81205],{"class":104,"line":40775},[102,81192,63099],{"class":119},[102,81194,77031],{"class":59165},[102,81196,74516],{"class":112},[102,81198,260],{"class":119},[102,81200,77194],{"class":278},[102,81202,77197],{"class":119},[102,81204,77031],{"class":59165},[102,81206,59172],{"class":119},[102,81208,81209,81211,81213,81215,81217,81219,81221,81223],{"class":104,"line":40794},[102,81210,63099],{"class":119},[102,81212,77031],{"class":59165},[102,81214,74516],{"class":112},[102,81216,260],{"class":119},[102,81218,77214],{"class":278},[102,81220,77217],{"class":119},[102,81222,77031],{"class":59165},[102,81224,59172],{"class":119},[102,81226,81227,81229,81231],{"class":104,"line":40800},[102,81228,59641],{"class":119},[102,81230,77009],{"class":59165},[102,81232,59172],{"class":119},[102,81234,81235,81237,81239],{"class":104,"line":40811},[102,81236,59206],{"class":119},[102,81238,61752],{"class":59165},[102,81240,59172],{"class":119},[102,81242,81243,81245,81247,81250,81252,81255,81257],{"class":104,"line":40817},[102,81244,63099],{"class":119},[102,81246,102],{"class":59165},[102,81248,81249],{"class":119},">+\u003C\u002F",[102,81251,102],{"class":59165},[102,81253,81254],{"class":119},">添加\u003C\u002F",[102,81256,61752],{"class":59165},[102,81258,59172],{"class":119},[102,81260,81261,81263,81265],{"class":104,"line":40837},[102,81262,60282],{"class":119},[102,81264,74490],{"class":59165},[102,81266,59172],{"class":119},[102,81268,81269,81271,81273,81275,81277,81279,81282,81284,81287,81289,81292,81294],{"class":104,"line":40853},[102,81270,60009],{"class":119},[102,81272,59476],{"class":59165},[102,81274,61351],{"class":112},[102,81276,260],{"class":119},[102,81278,70445],{"class":278},[102,81280,81281],{"class":119},">共有数据 \u003C",[102,81283,102],{"class":59165},[102,81285,81286],{"class":119},">0\u003C\u002F",[102,81288,102],{"class":59165},[102,81290,81291],{"class":119},"> 条\u003C\u002F",[102,81293,59476],{"class":59165},[102,81295,59172],{"class":119},[102,81297,81298,81300,81302],{"class":104,"line":40859},[102,81299,60009],{"class":119},[102,81301,9177],{"class":59165},[102,81303,59172],{"class":119},[102,81305,81306,81308,81310],{"class":104,"line":40873},[102,81307,59206],{"class":119},[102,81309,9180],{"class":59165},[102,81311,59172],{"class":119},[102,81313,81314,81316,81318],{"class":104,"line":40879},[102,81315,63099],{"class":119},[102,81317,9183],{"class":59165},[102,81319,59172],{"class":119},[102,81321,81322,81324,81326,81329,81331],{"class":104,"line":40885},[102,81323,63167],{"class":119},[102,81325,9186],{"class":59165},[102,81327,81328],{"class":119},">ID\u003C\u002F",[102,81330,9186],{"class":59165},[102,81332,59172],{"class":119},[102,81334,81335,81337,81339,81341,81343],{"class":104,"line":40896},[102,81336,63167],{"class":119},[102,81338,9186],{"class":59165},[102,81340,77320],{"class":119},[102,81342,9186],{"class":59165},[102,81344,59172],{"class":119},[102,81346,81347,81349,81351,81353,81355],{"class":104,"line":40902},[102,81348,63167],{"class":119},[102,81350,9186],{"class":59165},[102,81352,77333],{"class":119},[102,81354,9186],{"class":59165},[102,81356,59172],{"class":119},[102,81358,81359,81361,81363,81365,81367],{"class":104,"line":40908},[102,81360,63167],{"class":119},[102,81362,9186],{"class":59165},[102,81364,77346],{"class":119},[102,81366,9186],{"class":59165},[102,81368,59172],{"class":119},[102,81370,81371,81373,81375,81377,81379],{"class":104,"line":40918},[102,81372,63167],{"class":119},[102,81374,9186],{"class":59165},[102,81376,77359],{"class":119},[102,81378,9186],{"class":59165},[102,81380,59172],{"class":119},[102,81382,81383,81385,81387,81389,81391],{"class":104,"line":40924},[102,81384,63167],{"class":119},[102,81386,9186],{"class":59165},[102,81388,77372],{"class":119},[102,81390,9186],{"class":59165},[102,81392,59172],{"class":119},[102,81394,81395,81397,81399,81402,81404],{"class":104,"line":40935},[102,81396,63167],{"class":119},[102,81398,9186],{"class":59165},[102,81400,81401],{"class":119},">录入时间\u003C\u002F",[102,81403,9186],{"class":59165},[102,81405,59172],{"class":119},[102,81407,81408,81410,81412,81414,81416],{"class":104,"line":40941},[102,81409,63167],{"class":119},[102,81411,9186],{"class":59165},[102,81413,77385],{"class":119},[102,81415,9186],{"class":59165},[102,81417,59172],{"class":119},[102,81419,81420,81422,81424],{"class":104,"line":40951},[102,81421,63272],{"class":119},[102,81423,9183],{"class":59165},[102,81425,59172],{"class":119},[102,81427,81428,81430,81432],{"class":104,"line":40956},[102,81429,59641],{"class":119},[102,81431,9180],{"class":59165},[102,81433,59172],{"class":119},[102,81435,81436,81438,81440],{"class":104,"line":40962},[102,81437,59206],{"class":119},[102,81439,9223],{"class":59165},[102,81441,59172],{"class":119},[102,81443,81444],{"class":104,"line":41011},[102,81445,81446],{"class":126},"      \u003C!-- \u003Ctr>\n",[102,81448,81449],{"class":104,"line":41058},[102,81450,81451],{"class":126},"        \u003Ctd>1\u003C\u002Ftd>\n",[102,81453,81454],{"class":104,"line":41063},[102,81455,81451],{"class":126},[102,81457,81458],{"class":104,"line":41069},[102,81459,81451],{"class":126},[102,81461,81462],{"class":104,"line":41088},[102,81463,81451],{"class":126},[102,81465,81466],{"class":104,"line":41094},[102,81467,81451],{"class":126},[102,81469,81470],{"class":104,"line":41114},[102,81471,81451],{"class":126},[102,81473,81474],{"class":104,"line":41120},[102,81475,81451],{"class":126},[102,81477,81478],{"class":104,"line":41126},[102,81479,81480],{"class":126},"        \u003Ctd>\n",[102,81482,81483],{"class":104,"line":41136},[102,81484,81485],{"class":126},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[102,81487,81488],{"class":104,"line":41141},[102,81489,81490],{"class":126},"        \u003C\u002Ftd>\n",[102,81492,81493],{"class":104,"line":41147},[102,81494,81495],{"class":126},"      \u003C\u002Ftr> -->\n",[102,81497,81498,81500,81502],{"class":104,"line":41163},[102,81499,59641],{"class":119},[102,81501,9223],{"class":59165},[102,81503,59172],{"class":119},[102,81505,81506,81508,81510],{"class":104,"line":41208},[102,81507,60282],{"class":119},[102,81509,9177],{"class":59165},[102,81511,59172],{"class":119},[102,81513,81514,81516,81518],{"class":104,"line":41214},[102,81515,60009],{"class":119},[102,81517,59678],{"class":59165},[102,81519,59172],{"class":119},[102,81521,81522],{"class":104,"line":41220},[102,81523,81524],{"class":126},"    \u002F\u002F const initData = [{\n",[102,81526,81527],{"class":104,"line":41226},[102,81528,81529],{"class":126},"    \u002F\u002F   unameId: 1,\n",[102,81531,81532],{"class":104,"line":41237},[102,81533,81534],{"class":126},"    \u002F\u002F   uname: '华晨宇',\n",[102,81536,81537],{"class":104,"line":41243},[102,81538,81539],{"class":126},"    \u002F\u002F   age: 22,\n",[102,81541,81542],{"class":104,"line":41249},[102,81543,81544],{"class":126},"    \u002F\u002F   salary: 12000,\n",[102,81546,81547],{"class":104,"line":41255},[102,81548,81549],{"class":126},"    \u002F\u002F   gender: '男',\n",[102,81551,81552],{"class":104,"line":41273},[102,81553,81554],{"class":126},"    \u002F\u002F   city: '北京',\n",[102,81556,81557],{"class":104,"line":41287},[102,81558,81559],{"class":126},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[102,81561,81562],{"class":104,"line":41296},[102,81563,81564],{"class":126},"    \u002F\u002F }]\n",[102,81566,81567],{"class":104,"line":41305},[102,81568,81569],{"class":126},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[102,81571,81572],{"class":104,"line":41314},[102,81573,81574],{"class":126},"    \u002F\u002F 1.渲染业务\n",[102,81576,81577],{"class":104,"line":41323},[102,81578,81579],{"class":126},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[102,81581,81582],{"class":104,"line":41329},[102,81583,81584],{"class":126},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[102,81586,81587],{"class":104,"line":41335},[102,81588,81589],{"class":126},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[102,81591,81592],{"class":104,"line":41343},[102,81593,652],{"emptyLinePlaceholder":651},[102,81595,81596],{"class":104,"line":41348},[102,81597,81598],{"class":126},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[102,81600,81601],{"class":104,"line":41354},[102,81602,81603],{"class":126},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[102,81605,81606,81608,81610,81612],{"class":104,"line":41365},[102,81607,19961],{"class":108},[102,81609,65560],{"class":187},[102,81611,22296],{"class":108},[102,81613,59703],{"class":119},[102,81615,81616,81619,81621],{"class":104,"line":41371},[102,81617,81618],{"class":119},"    console.",[102,81620,66112],{"class":112},[102,81622,60277],{"class":119},[102,81624,81625],{"class":104,"line":41391},[102,81626,652],{"emptyLinePlaceholder":651},[102,81628,81629],{"class":104,"line":41397},[102,81630,81631],{"class":126},"    \u002F\u002F 时间函数\n",[102,81633,81634,81636,81639],{"class":104,"line":41403},[102,81635,77949],{"class":108},[102,81637,81638],{"class":112}," getTime",[102,81640,795],{"class":119},[102,81642,81643,81645,81648,81650,81652,81655],{"class":104,"line":41409},[102,81644,66093],{"class":108},[102,81646,81647],{"class":187}," date",[102,81649,22296],{"class":108},[102,81651,20315],{"class":108},[102,81653,81654],{"class":112}," Date",[102,81656,172],{"class":119},[102,81658,81659,81661,81663,81665,81668,81671,81673,81675,81677,81680,81683,81685,81687,81689,81691,81693,81695,81697],{"class":104,"line":41426},[102,81660,66093],{"class":108},[102,81662,1630],{"class":187},[102,81664,22296],{"class":108},[102,81666,81667],{"class":119}," date.",[102,81669,81670],{"class":112},"getHours",[102,81672,1417],{"class":119},[102,81674,1208],{"class":108},[102,81676,989],{"class":187},[102,81678,81679],{"class":108}," ?",[102,81681,81682],{"class":278}," '0'",[102,81684,53431],{"class":108},[102,81686,81667],{"class":119},[102,81688,81670],{"class":112},[102,81690,1417],{"class":119},[102,81692,9881],{"class":108},[102,81694,81667],{"class":119},[102,81696,81670],{"class":112},[102,81698,172],{"class":119},[102,81700,81701,81703,81706,81708,81710,81713,81715,81717,81719,81721,81723,81725,81727,81729,81731,81733,81735,81737],{"class":104,"line":41432},[102,81702,66093],{"class":108},[102,81704,81705],{"class":187}," m",[102,81707,22296],{"class":108},[102,81709,81667],{"class":119},[102,81711,81712],{"class":112},"getMinutes",[102,81714,1417],{"class":119},[102,81716,1208],{"class":108},[102,81718,989],{"class":187},[102,81720,81679],{"class":108},[102,81722,81682],{"class":278},[102,81724,53431],{"class":108},[102,81726,81667],{"class":119},[102,81728,81712],{"class":112},[102,81730,1417],{"class":119},[102,81732,9881],{"class":108},[102,81734,81667],{"class":119},[102,81736,81712],{"class":112},[102,81738,172],{"class":119},[102,81740,81741,81743,81745,81747,81749,81752,81754,81756,81758,81760,81762,81764,81766,81768,81770,81772,81774,81776],{"class":104,"line":41438},[102,81742,66093],{"class":108},[102,81744,17198],{"class":187},[102,81746,22296],{"class":108},[102,81748,81667],{"class":119},[102,81750,81751],{"class":112},"getSeconds",[102,81753,1417],{"class":119},[102,81755,1208],{"class":108},[102,81757,989],{"class":187},[102,81759,81679],{"class":108},[102,81761,81682],{"class":278},[102,81763,53431],{"class":108},[102,81765,81667],{"class":119},[102,81767,81751],{"class":112},[102,81769,1417],{"class":119},[102,81771,9881],{"class":108},[102,81773,81667],{"class":119},[102,81775,81751],{"class":112},[102,81777,172],{"class":119},[102,81779,81780,81782,81785,81787,81789,81792,81794,81797,81799,81802,81804,81806,81809,81811,81813,81815,81817,81819,81821,81824,81826,81829,81831,81834,81836,81838,81840],{"class":104,"line":41444},[102,81781,66093],{"class":108},[102,81783,81784],{"class":187}," str",[102,81786,22296],{"class":108},[102,81788,70768],{"class":278},[102,81790,81791],{"class":119},"date",[102,81793,9585],{"class":278},[102,81795,81796],{"class":112},"getFullYear",[102,81798,290],{"class":278},[102,81800,81801],{"class":278},"}\u002F${",[102,81803,81791],{"class":119},[102,81805,9585],{"class":278},[102,81807,81808],{"class":112},"getMonth",[102,81810,1417],{"class":278},[102,81812,1702],{"class":108},[102,81814,32983],{"class":187},[102,81816,81801],{"class":278},[102,81818,81791],{"class":119},[102,81820,9585],{"class":278},[102,81822,81823],{"class":112},"getDate",[102,81825,290],{"class":278},[102,81827,81828],{"class":278},"} ${",[102,81830,9448],{"class":119},[102,81832,81833],{"class":278},"}:${",[102,81835,9571],{"class":119},[102,81837,81833],{"class":278},[102,81839,9720],{"class":119},[102,81841,81842],{"class":278},"}`\n",[102,81844,81845,81848],{"class":104,"line":41450},[102,81846,81847],{"class":108},"      return",[102,81849,81850],{"class":119}," str\n",[102,81852,81853],{"class":104,"line":41456},[102,81854,205],{"class":119},[102,81856,81857],{"class":104,"line":41483},[102,81858,81859],{"class":126},"    \u002F\u002F 渲染函数\n",[102,81861,81862,81864,81866,81868,81870,81872,81874,81876],{"class":104,"line":41507},[102,81863,19961],{"class":108},[102,81865,77612],{"class":187},[102,81867,22296],{"class":108},[102,81869,62261],{"class":119},[102,81871,62264],{"class":112},[102,81873,380],{"class":119},[102,81875,77623],{"class":278},[102,81877,390],{"class":119},[102,81879,81880,81882,81884],{"class":104,"line":41513},[102,81881,77949],{"class":108},[102,81883,77952],{"class":112},[102,81885,795],{"class":119},[102,81887,81888],{"class":104,"line":41519},[102,81889,81890],{"class":126},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[102,81892,81893],{"class":104,"line":41525},[102,81894,81895],{"class":126},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[102,81897,81898,81900,81903,81905,81907,81910,81912,81914,81916,81919,81921,81924],{"class":104,"line":41536},[102,81899,66093],{"class":108},[102,81901,81902],{"class":187}," trArr",[102,81904,22296],{"class":108},[102,81906,59830],{"class":119},[102,81908,81909],{"class":112},"map",[102,81911,380],{"class":119},[102,81913,62314],{"class":108},[102,81915,2432],{"class":119},[102,81917,81918],{"class":386},"ele",[102,81920,2571],{"class":119},[102,81922,81923],{"class":386},"index",[102,81925,1105],{"class":119},[102,81927,81928,81930],{"class":104,"line":41547},[102,81929,184],{"class":108},[102,81931,78033],{"class":278},[102,81933,81934],{"class":104,"line":41553},[102,81935,81936],{"class":278},"      \u003Ctr>\n",[102,81938,81939,81941,81943,81945,81948],{"class":104,"line":41570},[102,81940,78038],{"class":278},[102,81942,81918],{"class":119},[102,81944,9585],{"class":278},[102,81946,81947],{"class":119},"unameId",[102,81949,78053],{"class":278},[102,81951,81952,81954,81956,81958,81960],{"class":104,"line":41593},[102,81953,78038],{"class":278},[102,81955,81918],{"class":119},[102,81957,9585],{"class":278},[102,81959,78069],{"class":119},[102,81961,78053],{"class":278},[102,81963,81964,81966,81968,81970,81972],{"class":104,"line":41616},[102,81965,78038],{"class":278},[102,81967,81918],{"class":119},[102,81969,9585],{"class":278},[102,81971,78086],{"class":119},[102,81973,78053],{"class":278},[102,81975,81976,81978,81980,81982,81984],{"class":104,"line":41622},[102,81977,78038],{"class":278},[102,81979,81918],{"class":119},[102,81981,9585],{"class":278},[102,81983,78103],{"class":119},[102,81985,78053],{"class":278},[102,81987,81988,81990,81992,81994,81996],{"class":104,"line":41627},[102,81989,78038],{"class":278},[102,81991,81918],{"class":119},[102,81993,9585],{"class":278},[102,81995,78120],{"class":119},[102,81997,78053],{"class":278},[102,81999,82000,82002,82004,82006,82008],{"class":104,"line":41636},[102,82001,78038],{"class":278},[102,82003,81918],{"class":119},[102,82005,9585],{"class":278},[102,82007,78137],{"class":119},[102,82009,78053],{"class":278},[102,82011,82012,82014,82016,82018,82020],{"class":104,"line":41646},[102,82013,78038],{"class":278},[102,82015,81918],{"class":119},[102,82017,9585],{"class":278},[102,82019,11222],{"class":119},[102,82021,78053],{"class":278},[102,82023,82024],{"class":104,"line":41652},[102,82025,81480],{"class":278},[102,82027,82028,82031,82033],{"class":104,"line":41657},[102,82029,82030],{"class":278},"          \u003Ca href=\"#\" data-id=\"${",[102,82032,81923],{"class":119},[102,82034,82035],{"class":278},"}\">删除\u003C\u002Fa>\n",[102,82037,82038],{"class":104,"line":41663},[102,82039,81490],{"class":278},[102,82041,82042],{"class":104,"line":41676},[102,82043,82044],{"class":278},"      \u003C\u002Ftr>\n",[102,82046,82047],{"class":104,"line":41682},[102,82048,82049],{"class":278},"  `\n",[102,82051,82052],{"class":104,"line":41693},[102,82053,72680],{"class":119},[102,82055,82056,82058,82060],{"class":104,"line":41704},[102,82057,66109],{"class":119},[102,82059,66112],{"class":112},[102,82061,82062],{"class":119},"(trArr)\n",[102,82064,82065],{"class":104,"line":41723},[102,82066,652],{"emptyLinePlaceholder":651},[102,82068,82069],{"class":104,"line":57383},[102,82070,82071],{"class":126},"      \u002F\u002F (2) 把数组转换为字符串join\n",[102,82073,82074],{"class":104,"line":57388},[102,82075,82076],{"class":126},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[102,82078,82079,82081,82083,82086,82089,82091,82094],{"class":104,"line":57397},[102,82080,77964],{"class":119},[102,82082,260],{"class":108},[102,82084,82085],{"class":119}," trArr.",[102,82087,82088],{"class":112},"join",[102,82090,380],{"class":119},[102,82092,82093],{"class":278},"''",[102,82095,390],{"class":119},[102,82097,82098],{"class":104,"line":57406},[102,82099,82100],{"class":126},"      \u002F\u002F 显示共有几条\n",[102,82102,82103,82105,82107,82109,82112,82115,82117,82119],{"class":104,"line":57411},[102,82104,63636],{"class":119},[102,82106,62264],{"class":112},[102,82108,380],{"class":119},[102,82110,82111],{"class":278},"'.total span'",[102,82113,82114],{"class":119},").innerHTML ",[102,82116,260],{"class":108},[102,82118,59830],{"class":119},[102,82120,63696],{"class":187},[102,82122,82123],{"class":104,"line":57416},[102,82124,205],{"class":119},[102,82126,82127],{"class":104,"line":57421},[102,82128,82129],{"class":126},"    \u002F\u002F render()\n",[102,82131,82132],{"class":104,"line":57434},[102,82133,652],{"emptyLinePlaceholder":651},[102,82135,82136],{"class":104,"line":57439},[102,82137,82138],{"class":126},"    \u002F\u002F 获取DOM对象\n",[102,82140,82141,82143,82145,82147,82149,82151,82153,82155],{"class":104,"line":57448},[102,82142,19961],{"class":108},[102,82144,77686],{"class":187},[102,82146,22296],{"class":108},[102,82148,62261],{"class":119},[102,82150,62264],{"class":112},[102,82152,380],{"class":119},[102,82154,77697],{"class":278},[102,82156,390],{"class":119},[102,82158,82159,82161,82163,82165,82167,82169,82171,82173],{"class":104,"line":57457},[102,82160,19961],{"class":108},[102,82162,77513],{"class":187},[102,82164,22296],{"class":108},[102,82166,62261],{"class":119},[102,82168,62264],{"class":112},[102,82170,380],{"class":119},[102,82172,77524],{"class":278},[102,82174,390],{"class":119},[102,82176,82177,82179,82181,82183,82185,82187,82189,82191],{"class":104,"line":57474},[102,82178,19961],{"class":108},[102,82180,1195],{"class":187},[102,82182,22296],{"class":108},[102,82184,62261],{"class":119},[102,82186,62264],{"class":112},[102,82188,380],{"class":119},[102,82190,77543],{"class":278},[102,82192,390],{"class":119},[102,82194,82196,82198,82200,82202,82204,82206,82208,82210],{"class":104,"line":82195},231,[102,82197,19961],{"class":108},[102,82199,77572],{"class":187},[102,82201,22296],{"class":108},[102,82203,62261],{"class":119},[102,82205,62264],{"class":112},[102,82207,380],{"class":119},[102,82209,77583],{"class":278},[102,82211,390],{"class":119},[102,82213,82215,82217,82219,82221,82223,82225,82227,82229],{"class":104,"line":82214},232,[102,82216,19961],{"class":108},[102,82218,77552],{"class":187},[102,82220,22296],{"class":108},[102,82222,62261],{"class":119},[102,82224,62264],{"class":112},[102,82226,380],{"class":119},[102,82228,77563],{"class":278},[102,82230,390],{"class":119},[102,82232,82234,82236,82238,82240,82242,82244,82246,82248],{"class":104,"line":82233},233,[102,82235,19961],{"class":108},[102,82237,77592],{"class":187},[102,82239,22296],{"class":108},[102,82241,62261],{"class":119},[102,82243,62264],{"class":112},[102,82245,380],{"class":119},[102,82247,77603],{"class":278},[102,82249,390],{"class":119},[102,82251,82253],{"class":104,"line":82252},234,[102,82254,652],{"emptyLinePlaceholder":651},[102,82256,82258],{"class":104,"line":82257},235,[102,82259,82260],{"class":126},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[102,82262,82264,82266,82268,82270,82272,82274,82276,82278,82280],{"class":104,"line":82263},236,[102,82265,77704],{"class":119},[102,82267,65678],{"class":112},[102,82269,380],{"class":119},[102,82271,77711],{"class":278},[102,82273,2571],{"class":119},[102,82275,62314],{"class":108},[102,82277,2432],{"class":119},[102,82279,9116],{"class":386},[102,82281,1105],{"class":119},[102,82283,82285],{"class":104,"line":82284},237,[102,82286,82287],{"class":126},"      \u002F\u002F 禁止浏览器跳转\n",[102,82289,82291,82293,82295],{"class":104,"line":82290},238,[102,82292,77731],{"class":119},[102,82294,77734],{"class":112},[102,82296,172],{"class":119},[102,82298,82300],{"class":104,"line":82299},239,[102,82301,82302],{"class":126},"      \u002F\u002F 非空判断\n",[102,82304,82306],{"class":104,"line":82305},240,[102,82307,82308],{"class":126},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[102,82310,82312],{"class":104,"line":82311},241,[102,82313,82314],{"class":126},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[102,82316,82318,82320,82322,82324,82327,82329,82332,82335,82337,82339],{"class":104,"line":82317},242,[102,82319,62345],{"class":108},[102,82321,2432],{"class":119},[102,82323,9263],{"class":108},[102,82325,82326],{"class":119},"uname.value ",[102,82328,79222],{"class":108},[102,82330,82331],{"class":108}," !",[102,82333,82334],{"class":119},"age.value ",[102,82336,79222],{"class":108},[102,82338,82331],{"class":108},[102,82340,82341],{"class":119},"salary.value) {\n",[102,82343,82345,82347,82349,82351,82353],{"class":104,"line":82344},243,[102,82346,184],{"class":108},[102,82348,77805],{"class":112},[102,82350,380],{"class":119},[102,82352,77810],{"class":278},[102,82354,390],{"class":119},[102,82356,82358],{"class":104,"line":82357},244,[102,82359,60263],{"class":119},[102,82361,82363,82365,82367],{"class":104,"line":82362},245,[102,82364,65872],{"class":119},[102,82366,59749],{"class":112},[102,82368,82369],{"class":119},"({\n",[102,82371,82373],{"class":104,"line":82372},246,[102,82374,82375],{"class":126},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[102,82377,82379],{"class":104,"line":82378},247,[102,82380,82381],{"class":126},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[102,82383,82385],{"class":104,"line":82384},248,[102,82386,82387],{"class":126},"        \u002F\u002F 对象的序号应为数组长度+1\n",[102,82389,82391],{"class":104,"line":82390},249,[102,82392,82393],{"class":126},"        \u002F\u002F unameId: arr.length + 1,\n",[102,82395,82397],{"class":104,"line":82396},250,[102,82398,652],{"emptyLinePlaceholder":651},[102,82400,82402],{"class":104,"line":82401},251,[102,82403,82404],{"class":126},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[102,82406,82408],{"class":104,"line":82407},252,[102,82409,82410],{"class":126},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[102,82412,82414],{"class":104,"line":82413},253,[102,82415,82416],{"class":126},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[102,82418,82420],{"class":104,"line":82419},254,[102,82421,82422],{"class":126},"        \u002F\u002F 0当假看\n",[102,82424,82426,82429,82431,82433,82436,82438,82440,82442,82445,82447,82449,82452,82454],{"class":104,"line":82425},255,[102,82427,82428],{"class":119},"        unameId: arr.",[102,82430,59833],{"class":187},[102,82432,81679],{"class":108},[102,82434,82435],{"class":119}," arr[arr.",[102,82437,59833],{"class":187},[102,82439,60136],{"class":108},[102,82441,32983],{"class":187},[102,82443,82444],{"class":119},"].unameId ",[102,82446,1702],{"class":108},[102,82448,32983],{"class":187},[102,82450,82451],{"class":108}," :",[102,82453,32983],{"class":187},[102,82455,39331],{"class":119},[102,82457,82459],{"class":104,"line":82458},256,[102,82460,77858],{"class":119},[102,82462,82464],{"class":104,"line":82463},257,[102,82465,77863],{"class":119},[102,82467,82469],{"class":104,"line":82468},258,[102,82470,77873],{"class":119},[102,82472,82474],{"class":104,"line":82473},259,[102,82475,77868],{"class":119},[102,82477,82479],{"class":104,"line":82478},260,[102,82480,82481],{"class":119},"        city: city.value,\n",[102,82483,82485],{"class":104,"line":82484},261,[102,82486,82487],{"class":126},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[102,82489,82491],{"class":104,"line":82490},262,[102,82492,82493],{"class":126},"        \u002F\u002F time: new Date().toDateString()\n",[102,82495,82497,82500,82503],{"class":104,"line":82496},263,[102,82498,82499],{"class":119},"        time: ",[102,82501,82502],{"class":112},"getTime",[102,82504,172],{"class":119},[102,82506,82508],{"class":104,"line":82507},264,[102,82509,72680],{"class":119},[102,82511,82513],{"class":104,"line":82512},265,[102,82514,82515],{"class":126},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[102,82517,82519,82521],{"class":104,"line":82518},266,[102,82520,77933],{"class":112},[102,82522,172],{"class":119},[102,82524,82526,82528,82530,82532,82534],{"class":104,"line":82525},267,[102,82527,77916],{"class":187},[102,82529,9585],{"class":119},[102,82531,77921],{"class":112},[102,82533,1417],{"class":119},[102,82535,82536],{"class":126},"\u002F\u002F重置表单\n",[102,82538,82540],{"class":104,"line":82539},268,[102,82541,82542],{"class":126},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[102,82544,82546,82549,82551,82553,82556,82558,82560,82562,82564],{"class":104,"line":82545},269,[102,82547,82548],{"class":119},"      localStorage.",[102,82550,79519],{"class":112},[102,82552,380],{"class":119},[102,82554,82555],{"class":278},"'data'",[102,82557,2571],{"class":119},[102,82559,79529],{"class":187},[102,82561,9585],{"class":119},[102,82563,79534],{"class":112},[102,82565,82566],{"class":119},"(arr))\n",[102,82568,82570],{"class":104,"line":82569},270,[102,82571,41326],{"class":119},[102,82573,82575],{"class":104,"line":82574},271,[102,82576,652],{"emptyLinePlaceholder":651},[102,82578,82580],{"class":104,"line":82579},272,[102,82581,82582],{"class":126},"    \u002F\u002F 3.删除业务\n",[102,82584,82586],{"class":104,"line":82585},273,[102,82587,82588],{"class":126},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[102,82590,82592,82594,82596,82598,82600,82602,82604,82606,82608],{"class":104,"line":82591},274,[102,82593,78206],{"class":119},[102,82595,65678],{"class":112},[102,82597,380],{"class":119},[102,82599,65683],{"class":278},[102,82601,2571],{"class":119},[102,82603,62314],{"class":108},[102,82605,2432],{"class":119},[102,82607,9116],{"class":386},[102,82609,1105],{"class":119},[102,82611,82613],{"class":104,"line":82612},275,[102,82614,82615],{"class":126},"      \u002F\u002F 判断是否点击的是删除按钮\n",[102,82617,82619,82621,82623,82625,82627],{"class":104,"line":82618},276,[102,82620,62345],{"class":108},[102,82622,74899],{"class":119},[102,82624,62351],{"class":108},[102,82626,76121],{"class":278},[102,82628,1105],{"class":119},[102,82630,82632],{"class":104,"line":82631},277,[102,82633,82634],{"class":126},"        \u002F\u002F alert(1)\n",[102,82636,82638],{"class":104,"line":82637},278,[102,82639,82640],{"class":126},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[102,82642,82644],{"class":104,"line":82643},279,[102,82645,82646],{"class":126},"        \u002F\u002F console.log(e.target)\n",[102,82648,82650],{"class":104,"line":82649},280,[102,82651,82652],{"class":126},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[102,82654,82656],{"class":104,"line":82655},281,[102,82657,652],{"emptyLinePlaceholder":651},[102,82659,82661],{"class":104,"line":82660},282,[102,82662,82663],{"class":126},"        \u002F\u002F 确认框，确然是否真的要删除\n",[102,82665,82667],{"class":104,"line":82666},283,[102,82668,82669],{"class":126},"        \u002F\u002F confirm()为确认框\n",[102,82671,82673],{"class":104,"line":82672},284,[102,82674,82675],{"class":126},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[102,82677,82679,82681,82683,82686,82688,82691],{"class":104,"line":82678},285,[102,82680,1202],{"class":108},[102,82682,2432],{"class":119},[102,82684,82685],{"class":112},"confirm",[102,82687,380],{"class":119},[102,82689,82690],{"class":278},"'您确定要删除这条数据吗？'",[102,82692,82693],{"class":119},")) {\n",[102,82695,82697,82700,82702,82704,82706],{"class":104,"line":82696},286,[102,82698,82699],{"class":119},"          arr.",[102,82701,65875],{"class":112},[102,82703,78259],{"class":119},[102,82705,7039],{"class":187},[102,82707,390],{"class":119},[102,82709,82711],{"class":104,"line":82710},287,[102,82712,82713],{"class":126},"          \u002F\u002F 3.4 重新渲染页面\n",[102,82715,82717,82720],{"class":104,"line":82716},288,[102,82718,82719],{"class":112},"          render",[102,82721,172],{"class":119},[102,82723,82725],{"class":104,"line":82724},289,[102,82726,82727],{"class":126},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[102,82729,82731,82734,82736,82738,82740,82742,82744,82746,82748],{"class":104,"line":82730},290,[102,82732,82733],{"class":119},"          localStorage.",[102,82735,79519],{"class":112},[102,82737,380],{"class":119},[102,82739,82555],{"class":278},[102,82741,2571],{"class":119},[102,82743,79529],{"class":187},[102,82745,9585],{"class":119},[102,82747,79534],{"class":112},[102,82749,82566],{"class":119},[102,82751,82753],{"class":104,"line":82752},291,[102,82754,1252],{"class":119},[102,82756,82758],{"class":104,"line":82757},292,[102,82759,60263],{"class":119},[102,82761,82763],{"class":104,"line":82762},293,[102,82764,652],{"emptyLinePlaceholder":651},[102,82766,82768],{"class":104,"line":82767},294,[102,82769,41326],{"class":119},[102,82771,82773],{"class":104,"line":82772},295,[102,82774,652],{"emptyLinePlaceholder":651},[102,82776,82778,82780,82782],{"class":104,"line":82777},296,[102,82779,60282],{"class":119},[102,82781,59678],{"class":59165},[102,82783,59172],{"class":119},[102,82785,82787,82789,82791],{"class":104,"line":82786},297,[102,82788,59650],{"class":119},[102,82790,59665],{"class":59165},[102,82792,59172],{"class":119},[102,82794,82796],{"class":104,"line":82795},298,[102,82797,652],{"emptyLinePlaceholder":651},[102,82799,82801,82803,82805],{"class":104,"line":82800},299,[102,82802,59650],{"class":119},[102,82804,58500],{"class":59165},[102,82806,59172],{"class":119},[43,82808,82810],{"id":82809},"_36-正则表达式","3.6 正则表达式",[14,82812,82813],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,82815,82816],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,82818,82819],{},"正则表达式的作用：",[59,82821,82822,82829,82835],{},[62,82823,82824,82825,82828],{},"表单验证（ ",[18,82826,82827],{},"匹配"," ）",[62,82830,82831,82832,82828],{},"过滤敏感词（ ",[18,82833,82834],{},"替换",[62,82836,82837,82838,82828],{},"字符串中提取我们想要的部分（ ",[18,82839,82840],{},"提取",[48,82842,82844],{"id":82843},"_361-语法","3.6.1 语法",[14,82846,82847],{},"正则表达式使用步骤：",[87,82849,82850,82853],{},[62,82851,82852],{},"定义规则",[62,82854,82855],{},"查找是否匹配",[14,82857,82858],{},"正则表达式里边不需要写引号",[14,82860,82861],{},[6750,82862],{"alt":98,"src":82863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,82865,82866],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,82868,82869],{},"reg.test(str)",[14,82871,82872],{},[6750,82873],{"alt":98,"src":82874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,82876,82877],{},[6750,82878],{"alt":98,"src":82879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[48,82881,82883],{"id":82882},"_362-元字符","3.6.2 元字符",[87,82885,82886,82889,82892,82895,82902],{},[62,82887,82888],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[62,82890,82891],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[62,82893,82894],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[62,82896,82897,82898],{},"正则验证工具：",[9275,82899,82900],{"href":82900,"rel":82901},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[31729],[62,82903,82904],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[7601,82906,82908],{"id":82907},"_3621-边界符","3.6.2.1 边界符",[14,82910,82911],{},[6750,82912],{"alt":98,"src":82913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,82915,82916],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,82918,82919],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,82921,82922],{},"只匹配一次",[14,82924,82925],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[7601,82927,82929],{"id":82928},"_3622-量词","3.6.2.2 量词",[14,82931,82932],{},[6750,82933],{"alt":98,"src":82934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,82936,82937],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[7601,82939,82941],{"id":82940},"_3623-元字符","3.6.2.3 元字符",[14,82943,82944],{},[6750,82945],{"alt":98,"src":82946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,82948,82949],{},"匹配的是a或b或c []只选一个",[14,82951,82952],{},[6750,82953],{"alt":98,"src":82954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,82956,82957],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,82959,82960],{},[6750,82961],{"alt":98,"src":82962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,82964,82965],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,82967,82968],{},[6750,82969],{"alt":98,"src":82970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[93,82972,82974],{"className":58498,"code":82973,"language":58500,"meta":98,"style":98},"\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",[83,82975,82976,82986,83000,83004,83012,83026,83046,83058,83066,83070,83078,83086,83091,83122,83149,83177,83181,83186,83214,83245,83250,83255,83286,83318,83350,83354,83359,83390,83420,83450,83454,83459,83490,83521,83551,83581,83585,83590,83623,83627,83632,83663,83694,83698,83703,83734,83764,83795,83799,83804,83836,83867,83898,83925,83956,83988,84021,84052,84083,84115,84146,84154,84162,84166],{"__ignoreMap":98},[102,82977,82978,82980,82982,82984],{"class":104,"line":105},[102,82979,59162],{"class":119},[102,82981,59166],{"class":59165},[102,82983,59169],{"class":112},[102,82985,59172],{"class":119},[102,82987,82988,82990,82992,82994,82996,82998],{"class":104,"line":116},[102,82989,1208],{"class":119},[102,82991,58500],{"class":59165},[102,82993,59181],{"class":112},[102,82995,260],{"class":119},[102,82997,59186],{"class":278},[102,82999,59172],{"class":119},[102,83001,83002],{"class":104,"line":123},[102,83003,652],{"emptyLinePlaceholder":651},[102,83005,83006,83008,83010],{"class":104,"line":130},[102,83007,1208],{"class":119},[102,83009,59199],{"class":59165},[102,83011,59172],{"class":119},[102,83013,83014,83016,83018,83020,83022,83024],{"class":104,"line":136},[102,83015,60009],{"class":119},[102,83017,59209],{"class":59165},[102,83019,59212],{"class":112},[102,83021,260],{"class":119},[102,83023,59217],{"class":278},[102,83025,59172],{"class":119},[102,83027,83028,83030,83032,83034,83036,83038,83040,83042,83044],{"class":104,"line":142},[102,83029,60009],{"class":119},[102,83031,59209],{"class":59165},[102,83033,387],{"class":112},[102,83035,260],{"class":119},[102,83037,59256],{"class":278},[102,83039,59236],{"class":112},[102,83041,260],{"class":119},[102,83043,59263],{"class":278},[102,83045,59172],{"class":119},[102,83047,83048,83050,83052,83054,83056],{"class":104,"line":148},[102,83049,60009],{"class":119},[102,83051,59272],{"class":59165},[102,83053,59275],{"class":119},[102,83055,59272],{"class":59165},[102,83057,59172],{"class":119},[102,83059,83060,83062,83064],{"class":104,"line":157},[102,83061,59650],{"class":119},[102,83063,59199],{"class":59165},[102,83065,59172],{"class":119},[102,83067,83068],{"class":104,"line":163},[102,83069,652],{"emptyLinePlaceholder":651},[102,83071,83072,83074,83076],{"class":104,"line":175},[102,83073,1208],{"class":119},[102,83075,59665],{"class":59165},[102,83077,59172],{"class":119},[102,83079,83080,83082,83084],{"class":104,"line":181},[102,83081,60009],{"class":119},[102,83083,59678],{"class":59165},[102,83085,59172],{"class":119},[102,83087,83088],{"class":104,"line":202},[102,83089,83090],{"class":126},"    \u002F\u002F 元字符中\n",[102,83092,83093,83095,83097,83099,83101,83104,83106,83108,83111,83113,83116,83119],{"class":104,"line":208},[102,83094,81618],{"class":119},[102,83096,66112],{"class":112},[102,83098,380],{"class":119},[102,83100,9611],{"class":278},[102,83102,83103],{"class":55842},"哈",[102,83105,9611],{"class":278},[102,83107,9585],{"class":119},[102,83109,83110],{"class":112},"test",[102,83112,380],{"class":119},[102,83114,83115],{"class":278},"'哈'",[102,83117,83118],{"class":119},"))  ",[102,83120,83121],{"class":126},"\u002F\u002Ftrue\n",[102,83123,83124,83126,83128,83130,83132,83134,83136,83138,83140,83142,83145,83147],{"class":104,"line":214},[102,83125,81618],{"class":119},[102,83127,66112],{"class":112},[102,83129,380],{"class":119},[102,83131,9611],{"class":278},[102,83133,83103],{"class":55842},[102,83135,9611],{"class":278},[102,83137,9585],{"class":119},[102,83139,83110],{"class":112},[102,83141,380],{"class":119},[102,83143,83144],{"class":278},"'哈哈'",[102,83146,83118],{"class":119},[102,83148,83121],{"class":126},[102,83150,83151,83153,83155,83157,83159,83161,83163,83165,83167,83169,83172,83175],{"class":104,"line":225},[102,83152,81618],{"class":119},[102,83154,66112],{"class":112},[102,83156,380],{"class":119},[102,83158,9611],{"class":278},[102,83160,83103],{"class":55842},[102,83162,9611],{"class":278},[102,83164,9585],{"class":119},[102,83166,83110],{"class":112},[102,83168,380],{"class":119},[102,83170,83171],{"class":278},"'二哈'",[102,83173,83174],{"class":119},"))   ",[102,83176,83121],{"class":126},[102,83178,83179],{"class":104,"line":230},[102,83180,652],{"emptyLinePlaceholder":651},[102,83182,83183],{"class":104,"line":236},[102,83184,83185],{"class":126},"    \u002F\u002F 1.边界符\n",[102,83187,83188,83190,83192,83194,83196,83198,83200,83202,83204,83206,83208,83210,83212],{"class":104,"line":242},[102,83189,81618],{"class":119},[102,83191,66112],{"class":112},[102,83193,380],{"class":119},[102,83195,9611],{"class":278},[102,83197,9986],{"class":108},[102,83199,83103],{"class":55842},[102,83201,9611],{"class":278},[102,83203,9585],{"class":119},[102,83205,83110],{"class":112},[102,83207,380],{"class":119},[102,83209,83115],{"class":278},[102,83211,83118],{"class":119},[102,83213,83121],{"class":126},[102,83215,83216,83218,83220,83222,83224,83226,83228,83230,83232,83234,83236,83238,83240,83242],{"class":104,"line":248},[102,83217,81618],{"class":119},[102,83219,66112],{"class":112},[102,83221,380],{"class":119},[102,83223,9611],{"class":278},[102,83225,9986],{"class":108},[102,83227,83103],{"class":55842},[102,83229,9338],{"class":108},[102,83231,9611],{"class":278},[102,83233,9585],{"class":119},[102,83235,83110],{"class":112},[102,83237,380],{"class":119},[102,83239,83144],{"class":278},[102,83241,83118],{"class":119},[102,83243,83244],{"class":126},"\u002F\u002Ffalse\n",[102,83246,83247],{"class":104,"line":254},[102,83248,83249],{"class":126},"    \u002F\u002F 2.量词\n",[102,83251,83252],{"class":104,"line":269},[102,83253,83254],{"class":126},"    \u002F\u002F 量词 * 类似于 >= 0\n",[102,83256,83257,83259,83261,83263,83265,83267,83269,83272,83274,83276,83278,83280,83282,83284],{"class":104,"line":298},[102,83258,81618],{"class":119},[102,83260,66112],{"class":112},[102,83262,380],{"class":119},[102,83264,9611],{"class":278},[102,83266,9986],{"class":108},[102,83268,83103],{"class":55842},[102,83270,83271],{"class":108},"*$",[102,83273,9611],{"class":278},[102,83275,9585],{"class":119},[102,83277,83110],{"class":112},[102,83279,380],{"class":119},[102,83281,83144],{"class":278},[102,83283,83118],{"class":119},[102,83285,83121],{"class":126},[102,83287,83288,83290,83292,83294,83296,83298,83300,83302,83304,83306,83308,83310,83313,83315],{"class":104,"line":502},[102,83289,81618],{"class":119},[102,83291,66112],{"class":112},[102,83293,380],{"class":119},[102,83295,9611],{"class":278},[102,83297,9986],{"class":108},[102,83299,83103],{"class":55842},[102,83301,83271],{"class":108},[102,83303,9611],{"class":278},[102,83305,9585],{"class":119},[102,83307,83110],{"class":112},[102,83309,380],{"class":119},[102,83311,83312],{"class":278},"'二哈好傻'",[102,83314,83118],{"class":119},[102,83316,83317],{"class":126},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[102,83319,83320,83322,83324,83326,83328,83330,83332,83334,83336,83338,83340,83342,83345,83347],{"class":104,"line":507},[102,83321,81618],{"class":119},[102,83323,66112],{"class":112},[102,83325,380],{"class":119},[102,83327,9611],{"class":278},[102,83329,9986],{"class":108},[102,83331,83103],{"class":55842},[102,83333,83271],{"class":108},[102,83335,9611],{"class":278},[102,83337,9585],{"class":119},[102,83339,83110],{"class":112},[102,83341,380],{"class":119},[102,83343,83344],{"class":278},"'哈好哈'",[102,83346,83174],{"class":119},[102,83348,83349],{"class":126},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[102,83351,83352],{"class":104,"line":512},[102,83353,652],{"emptyLinePlaceholder":651},[102,83355,83356],{"class":104,"line":521},[102,83357,83358],{"class":126},"    \u002F\u002F +类似于>=1\n",[102,83360,83361,83363,83365,83367,83369,83371,83373,83376,83378,83380,83382,83384,83386,83388],{"class":104,"line":526},[102,83362,81618],{"class":119},[102,83364,66112],{"class":112},[102,83366,380],{"class":119},[102,83368,9611],{"class":278},[102,83370,9986],{"class":108},[102,83372,83103],{"class":55842},[102,83374,83375],{"class":108},"+$",[102,83377,9611],{"class":278},[102,83379,9585],{"class":119},[102,83381,83110],{"class":112},[102,83383,380],{"class":119},[102,83385,83144],{"class":278},[102,83387,83118],{"class":119},[102,83389,83121],{"class":126},[102,83391,83392,83394,83396,83398,83400,83402,83404,83406,83408,83410,83412,83414,83416,83418],{"class":104,"line":532},[102,83393,81618],{"class":119},[102,83395,66112],{"class":112},[102,83397,380],{"class":119},[102,83399,9611],{"class":278},[102,83401,9986],{"class":108},[102,83403,83103],{"class":55842},[102,83405,83375],{"class":108},[102,83407,9611],{"class":278},[102,83409,9585],{"class":119},[102,83411,83110],{"class":112},[102,83413,380],{"class":119},[102,83415,83312],{"class":278},[102,83417,83118],{"class":119},[102,83419,83317],{"class":126},[102,83421,83422,83424,83426,83428,83430,83432,83434,83436,83438,83440,83442,83444,83446,83448],{"class":104,"line":538},[102,83423,81618],{"class":119},[102,83425,66112],{"class":112},[102,83427,380],{"class":119},[102,83429,9611],{"class":278},[102,83431,9986],{"class":108},[102,83433,83103],{"class":55842},[102,83435,83375],{"class":108},[102,83437,9611],{"class":278},[102,83439,9585],{"class":119},[102,83441,83110],{"class":112},[102,83443,380],{"class":119},[102,83445,83344],{"class":278},[102,83447,83174],{"class":119},[102,83449,83244],{"class":126},[102,83451,83452],{"class":104,"line":555},[102,83453,652],{"emptyLinePlaceholder":651},[102,83455,83456],{"class":104,"line":570},[102,83457,83458],{"class":126},"    \u002F\u002F ?类似于0次或一次\n",[102,83460,83461,83463,83465,83467,83469,83471,83474,83476,83478,83480,83482,83484,83486,83488],{"class":104,"line":581},[102,83462,81618],{"class":119},[102,83464,66112],{"class":112},[102,83466,380],{"class":119},[102,83468,9611],{"class":278},[102,83470,9986],{"class":108},[102,83472,83473],{"class":55842},"哈？",[102,83475,9338],{"class":108},[102,83477,9611],{"class":278},[102,83479,9585],{"class":119},[102,83481,83110],{"class":112},[102,83483,380],{"class":119},[102,83485,82093],{"class":278},[102,83487,83174],{"class":119},[102,83489,83121],{"class":126},[102,83491,83492,83494,83496,83498,83500,83502,83504,83507,83509,83511,83513,83515,83517,83519],{"class":104,"line":819},[102,83493,81618],{"class":119},[102,83495,66112],{"class":112},[102,83497,380],{"class":119},[102,83499,9611],{"class":278},[102,83501,9986],{"class":108},[102,83503,83103],{"class":55842},[102,83505,83506],{"class":108},"?$",[102,83508,9611],{"class":278},[102,83510,9585],{"class":119},[102,83512,83110],{"class":112},[102,83514,380],{"class":119},[102,83516,83144],{"class":278},[102,83518,83118],{"class":119},[102,83520,83244],{"class":126},[102,83522,83523,83525,83527,83529,83531,83533,83535,83537,83539,83541,83543,83545,83547,83549],{"class":104,"line":828},[102,83524,81618],{"class":119},[102,83526,66112],{"class":112},[102,83528,380],{"class":119},[102,83530,9611],{"class":278},[102,83532,9986],{"class":108},[102,83534,83103],{"class":55842},[102,83536,83506],{"class":108},[102,83538,9611],{"class":278},[102,83540,9585],{"class":119},[102,83542,83110],{"class":112},[102,83544,380],{"class":119},[102,83546,83312],{"class":278},[102,83548,83118],{"class":119},[102,83550,83317],{"class":126},[102,83552,83553,83555,83557,83559,83561,83563,83565,83567,83569,83571,83573,83575,83577,83579],{"class":104,"line":837},[102,83554,81618],{"class":119},[102,83556,66112],{"class":112},[102,83558,380],{"class":119},[102,83560,9611],{"class":278},[102,83562,9986],{"class":108},[102,83564,83103],{"class":55842},[102,83566,83506],{"class":108},[102,83568,9611],{"class":278},[102,83570,9585],{"class":119},[102,83572,83110],{"class":112},[102,83574,380],{"class":119},[102,83576,83344],{"class":278},[102,83578,83118],{"class":119},[102,83580,83244],{"class":126},[102,83582,83583],{"class":104,"line":842},[102,83584,652],{"emptyLinePlaceholder":651},[102,83586,83587],{"class":104,"line":855},[102,83588,83589],{"class":126},"    \u002F\u002F {n}写几，就必须出现几次\n",[102,83591,83592,83594,83596,83598,83600,83602,83604,83607,83609,83611,83613,83615,83618,83621],{"class":104,"line":860},[102,83593,81618],{"class":119},[102,83595,66112],{"class":112},[102,83597,380],{"class":119},[102,83599,9611],{"class":278},[102,83601,9986],{"class":108},[102,83603,83103],{"class":55842},[102,83605,83606],{"class":108},"{4}$",[102,83608,9611],{"class":278},[102,83610,9585],{"class":119},[102,83612,83110],{"class":112},[102,83614,380],{"class":119},[102,83616,83617],{"class":278},"'哈哈哈哈'",[102,83619,83620],{"class":119},")) ",[102,83622,83121],{"class":126},[102,83624,83625],{"class":104,"line":871},[102,83626,652],{"emptyLinePlaceholder":651},[102,83628,83629],{"class":104,"line":1359},[102,83630,83631],{"class":126},"    \u002F\u002F {n,}大于等于n次\n",[102,83633,83634,83636,83638,83640,83642,83644,83646,83649,83651,83653,83655,83657,83659,83661],{"class":104,"line":1368},[102,83635,81618],{"class":119},[102,83637,66112],{"class":112},[102,83639,380],{"class":119},[102,83641,9611],{"class":278},[102,83643,9986],{"class":108},[102,83645,83103],{"class":55842},[102,83647,83648],{"class":108},"{4,}$",[102,83650,9611],{"class":278},[102,83652,9585],{"class":119},[102,83654,83110],{"class":112},[102,83656,380],{"class":119},[102,83658,83617],{"class":278},[102,83660,83620],{"class":119},[102,83662,83121],{"class":126},[102,83664,83665,83667,83669,83671,83673,83675,83677,83679,83681,83683,83685,83687,83690,83692],{"class":104,"line":1373},[102,83666,81618],{"class":119},[102,83668,66112],{"class":112},[102,83670,380],{"class":119},[102,83672,9611],{"class":278},[102,83674,9986],{"class":108},[102,83676,83103],{"class":55842},[102,83678,83648],{"class":108},[102,83680,9611],{"class":278},[102,83682,9585],{"class":119},[102,83684,83110],{"class":112},[102,83686,380],{"class":119},[102,83688,83689],{"class":278},"'哈哈哈哈哈'",[102,83691,83620],{"class":119},[102,83693,83121],{"class":126},[102,83695,83696],{"class":104,"line":1378},[102,83697,652],{"emptyLinePlaceholder":651},[102,83699,83700],{"class":104,"line":1384},[102,83701,83702],{"class":126},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[102,83704,83705,83707,83709,83711,83713,83715,83717,83720,83722,83724,83726,83728,83730,83732],{"class":104,"line":1398},[102,83706,81618],{"class":119},[102,83708,66112],{"class":112},[102,83710,380],{"class":119},[102,83712,9611],{"class":278},[102,83714,9986],{"class":108},[102,83716,83103],{"class":55842},[102,83718,83719],{"class":108},"{4,6}$",[102,83721,9611],{"class":278},[102,83723,9585],{"class":119},[102,83725,83110],{"class":112},[102,83727,380],{"class":119},[102,83729,83617],{"class":278},[102,83731,83620],{"class":119},[102,83733,83121],{"class":126},[102,83735,83736,83738,83740,83742,83744,83746,83748,83750,83752,83754,83756,83758,83760,83762],{"class":104,"line":1424},[102,83737,81618],{"class":119},[102,83739,66112],{"class":112},[102,83741,380],{"class":119},[102,83743,9611],{"class":278},[102,83745,9986],{"class":108},[102,83747,83103],{"class":55842},[102,83749,83719],{"class":108},[102,83751,9611],{"class":278},[102,83753,9585],{"class":119},[102,83755,83110],{"class":112},[102,83757,380],{"class":119},[102,83759,83689],{"class":278},[102,83761,83620],{"class":119},[102,83763,83121],{"class":126},[102,83765,83766,83768,83770,83772,83774,83776,83778,83780,83782,83784,83786,83788,83791,83793],{"class":104,"line":1429},[102,83767,81618],{"class":119},[102,83769,66112],{"class":112},[102,83771,380],{"class":119},[102,83773,9611],{"class":278},[102,83775,9986],{"class":108},[102,83777,83103],{"class":55842},[102,83779,83719],{"class":108},[102,83781,9611],{"class":278},[102,83783,9585],{"class":119},[102,83785,83110],{"class":112},[102,83787,380],{"class":119},[102,83789,83790],{"class":278},"'哈哈哈哈哈哈哈'",[102,83792,83620],{"class":119},[102,83794,83244],{"class":126},[102,83796,83797],{"class":104,"line":1435},[102,83798,652],{"emptyLinePlaceholder":651},[102,83800,83801],{"class":104,"line":1450},[102,83802,83803],{"class":126},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[102,83805,83806,83808,83810,83812,83814,83816,83819,83821,83823,83825,83827,83829,83832,83834],{"class":104,"line":1473},[102,83807,81618],{"class":119},[102,83809,66112],{"class":112},[102,83811,380],{"class":119},[102,83813,9611],{"class":278},[102,83815,9986],{"class":108},[102,83817,83818],{"class":187},"[abc]",[102,83820,9338],{"class":108},[102,83822,9611],{"class":278},[102,83824,9585],{"class":119},[102,83826,83110],{"class":112},[102,83828,380],{"class":119},[102,83830,83831],{"class":278},"'a'",[102,83833,83118],{"class":119},[102,83835,83121],{"class":126},[102,83837,83838,83840,83842,83844,83846,83848,83850,83852,83854,83856,83858,83860,83863,83865],{"class":104,"line":1478},[102,83839,81618],{"class":119},[102,83841,66112],{"class":112},[102,83843,380],{"class":119},[102,83845,9611],{"class":278},[102,83847,9986],{"class":108},[102,83849,83818],{"class":187},[102,83851,9338],{"class":108},[102,83853,9611],{"class":278},[102,83855,9585],{"class":119},[102,83857,83110],{"class":112},[102,83859,380],{"class":119},[102,83861,83862],{"class":278},"'b'",[102,83864,83118],{"class":119},[102,83866,83121],{"class":126},[102,83868,83869,83871,83873,83875,83877,83879,83881,83883,83885,83887,83889,83891,83894,83896],{"class":104,"line":1484},[102,83870,81618],{"class":119},[102,83872,66112],{"class":112},[102,83874,380],{"class":119},[102,83876,9611],{"class":278},[102,83878,9986],{"class":108},[102,83880,83818],{"class":187},[102,83882,9338],{"class":108},[102,83884,9611],{"class":278},[102,83886,9585],{"class":119},[102,83888,83110],{"class":112},[102,83890,380],{"class":119},[102,83892,83893],{"class":278},"'c'",[102,83895,83118],{"class":119},[102,83897,83121],{"class":126},[102,83899,83900,83902,83904,83906,83908,83910,83912,83914,83916,83918,83921,83923],{"class":104,"line":1499},[102,83901,81618],{"class":119},[102,83903,66112],{"class":112},[102,83905,380],{"class":119},[102,83907,9611],{"class":278},[102,83909,83818],{"class":187},[102,83911,9611],{"class":278},[102,83913,9585],{"class":119},[102,83915,83110],{"class":112},[102,83917,380],{"class":119},[102,83919,83920],{"class":278},"'ab'",[102,83922,83118],{"class":119},[102,83924,83121],{"class":126},[102,83926,83927,83929,83931,83933,83935,83937,83939,83941,83943,83945,83947,83949,83951,83953],{"class":104,"line":1508},[102,83928,81618],{"class":119},[102,83930,66112],{"class":112},[102,83932,380],{"class":119},[102,83934,9611],{"class":278},[102,83936,9986],{"class":108},[102,83938,83818],{"class":187},[102,83940,9338],{"class":108},[102,83942,9611],{"class":278},[102,83944,9585],{"class":119},[102,83946,83110],{"class":112},[102,83948,380],{"class":119},[102,83950,83920],{"class":278},[102,83952,83118],{"class":119},[102,83954,83955],{"class":126},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[102,83957,83958,83960,83962,83964,83966,83968,83970,83973,83975,83977,83979,83981,83983,83985],{"class":104,"line":1513},[102,83959,81618],{"class":119},[102,83961,66112],{"class":112},[102,83963,380],{"class":119},[102,83965,9611],{"class":278},[102,83967,9986],{"class":108},[102,83969,83818],{"class":187},[102,83971,83972],{"class":108},"{2}$",[102,83974,9611],{"class":278},[102,83976,9585],{"class":119},[102,83978,83110],{"class":112},[102,83980,380],{"class":119},[102,83982,83920],{"class":278},[102,83984,83118],{"class":119},[102,83986,83987],{"class":126},"\u002F\u002Ftrue   可以选两个\n",[102,83989,83990,83992,83994,83996,83998,84000,84003,84005,84007,84009,84011,84013,84016,84018],{"class":104,"line":1524},[102,83991,81618],{"class":119},[102,83993,66112],{"class":112},[102,83995,380],{"class":119},[102,83997,9611],{"class":278},[102,83999,9986],{"class":108},[102,84001,84002],{"class":187},"[a-z]",[102,84004,9338],{"class":108},[102,84006,9611],{"class":278},[102,84008,9585],{"class":119},[102,84010,83110],{"class":112},[102,84012,380],{"class":119},[102,84014,84015],{"class":278},"'p'",[102,84017,83174],{"class":119},[102,84019,84020],{"class":126},"\u002F\u002Ftrue   依然只能选一个\n",[102,84022,84023,84025,84027,84029,84031,84033,84036,84038,84040,84042,84044,84046,84048,84050],{"class":104,"line":1529},[102,84024,81618],{"class":119},[102,84026,66112],{"class":112},[102,84028,380],{"class":119},[102,84030,9611],{"class":278},[102,84032,9986],{"class":108},[102,84034,84035],{"class":187},"[A-Z]",[102,84037,9338],{"class":108},[102,84039,9611],{"class":278},[102,84041,9585],{"class":119},[102,84043,83110],{"class":112},[102,84045,380],{"class":119},[102,84047,84015],{"class":278},[102,84049,83174],{"class":119},[102,84051,83244],{"class":126},[102,84053,84054,84056,84058,84060,84062,84064,84066,84068,84070,84072,84074,84076,84079,84081],{"class":104,"line":1538},[102,84055,81618],{"class":119},[102,84057,66112],{"class":112},[102,84059,380],{"class":119},[102,84061,9611],{"class":278},[102,84063,9986],{"class":108},[102,84065,84035],{"class":187},[102,84067,9338],{"class":108},[102,84069,9611],{"class":278},[102,84071,9585],{"class":119},[102,84073,83110],{"class":112},[102,84075,380],{"class":119},[102,84077,84078],{"class":278},"'P'",[102,84080,83174],{"class":119},[102,84082,83121],{"class":126},[102,84084,84085,84087,84089,84091,84093,84095,84098,84100,84102,84104,84106,84108,84111,84113],{"class":104,"line":2089},[102,84086,81618],{"class":119},[102,84088,66112],{"class":112},[102,84090,380],{"class":119},[102,84092,9611],{"class":278},[102,84094,9986],{"class":108},[102,84096,84097],{"class":187},"[0-9]",[102,84099,9338],{"class":108},[102,84101,9611],{"class":278},[102,84103,9585],{"class":119},[102,84105,83110],{"class":112},[102,84107,380],{"class":119},[102,84109,84110],{"class":278},"'0'",[102,84112,83174],{"class":119},[102,84114,83121],{"class":126},[102,84116,84117,84119,84121,84123,84125,84127,84130,84132,84134,84136,84138,84140,84142,84144],{"class":104,"line":2094},[102,84118,81618],{"class":119},[102,84120,66112],{"class":112},[102,84122,380],{"class":119},[102,84124,9611],{"class":278},[102,84126,9986],{"class":108},[102,84128,84129],{"class":187},"[a-zA-Z0-9]",[102,84131,9338],{"class":108},[102,84133,9611],{"class":278},[102,84135,9585],{"class":119},[102,84137,83110],{"class":112},[102,84139,380],{"class":119},[102,84141,84015],{"class":278},[102,84143,83118],{"class":119},[102,84145,83121],{"class":126},[102,84147,84148,84150,84152],{"class":104,"line":2100},[102,84149,60282],{"class":119},[102,84151,59678],{"class":59165},[102,84153,59172],{"class":119},[102,84155,84156,84158,84160],{"class":104,"line":2106},[102,84157,59650],{"class":119},[102,84159,59665],{"class":59165},[102,84161,59172],{"class":119},[102,84163,84164],{"class":104,"line":2120},[102,84165,652],{"emptyLinePlaceholder":651},[102,84167,84168,84170,84172],{"class":104,"line":2128},[102,84169,59650],{"class":119},[102,84171,58500],{"class":59165},[102,84173,59172],{"class":119},[7601,84175,84177],{"id":84176},"_3624-修饰符","3.6.2.4 修饰符",[14,84179,84180],{},[6750,84181],{"alt":98,"src":84182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,84184,84185],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,84187,84188],{},[6750,84189],{"alt":98,"src":84190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[93,84192,84194],{"className":58498,"code":84193,"language":58500,"meta":98,"style":98},"\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",[83,84195,84196,84206,84220,84228,84242,84262,84274,84282,84290,84298,84330,84361,84366,84398,84409,84442,84451,84459,84467],{"__ignoreMap":98},[102,84197,84198,84200,84202,84204],{"class":104,"line":105},[102,84199,59162],{"class":119},[102,84201,59166],{"class":59165},[102,84203,59169],{"class":112},[102,84205,59172],{"class":119},[102,84207,84208,84210,84212,84214,84216,84218],{"class":104,"line":116},[102,84209,1208],{"class":119},[102,84211,58500],{"class":59165},[102,84213,59181],{"class":112},[102,84215,260],{"class":119},[102,84217,59186],{"class":278},[102,84219,59172],{"class":119},[102,84221,84222,84224,84226],{"class":104,"line":123},[102,84223,1208],{"class":119},[102,84225,59199],{"class":59165},[102,84227,59172],{"class":119},[102,84229,84230,84232,84234,84236,84238,84240],{"class":104,"line":130},[102,84231,60009],{"class":119},[102,84233,59209],{"class":59165},[102,84235,59212],{"class":112},[102,84237,260],{"class":119},[102,84239,59217],{"class":278},[102,84241,59172],{"class":119},[102,84243,84244,84246,84248,84250,84252,84254,84256,84258,84260],{"class":104,"line":136},[102,84245,60009],{"class":119},[102,84247,59209],{"class":59165},[102,84249,387],{"class":112},[102,84251,260],{"class":119},[102,84253,59256],{"class":278},[102,84255,59236],{"class":112},[102,84257,260],{"class":119},[102,84259,59263],{"class":278},[102,84261,59172],{"class":119},[102,84263,84264,84266,84268,84270,84272],{"class":104,"line":142},[102,84265,60009],{"class":119},[102,84267,59272],{"class":59165},[102,84269,59275],{"class":119},[102,84271,59272],{"class":59165},[102,84273,59172],{"class":119},[102,84275,84276,84278,84280],{"class":104,"line":148},[102,84277,59650],{"class":119},[102,84279,59199],{"class":59165},[102,84281,59172],{"class":119},[102,84283,84284,84286,84288],{"class":104,"line":157},[102,84285,1208],{"class":119},[102,84287,59665],{"class":59165},[102,84289,59172],{"class":119},[102,84291,84292,84294,84296],{"class":104,"line":163},[102,84293,60009],{"class":119},[102,84295,59678],{"class":59165},[102,84297,59172],{"class":119},[102,84299,84300,84302,84304,84306,84308,84310,84313,84315,84317,84319,84321,84323,84326,84328],{"class":104,"line":175},[102,84301,81618],{"class":119},[102,84303,66112],{"class":112},[102,84305,380],{"class":119},[102,84307,9611],{"class":278},[102,84309,9986],{"class":108},[102,84311,84312],{"class":55842},"java",[102,84314,9338],{"class":108},[102,84316,9611],{"class":278},[102,84318,9585],{"class":119},[102,84320,83110],{"class":112},[102,84322,380],{"class":119},[102,84324,84325],{"class":278},"'java'",[102,84327,83620],{"class":119},[102,84329,83121],{"class":126},[102,84331,84332,84334,84336,84338,84340,84342,84344,84346,84348,84350,84352,84354,84357,84359],{"class":104,"line":181},[102,84333,81618],{"class":119},[102,84335,66112],{"class":112},[102,84337,380],{"class":119},[102,84339,9611],{"class":278},[102,84341,9986],{"class":108},[102,84343,84312],{"class":55842},[102,84345,9338],{"class":108},[102,84347,9611],{"class":278},[102,84349,9585],{"class":119},[102,84351,83110],{"class":112},[102,84353,380],{"class":119},[102,84355,84356],{"class":278},"'Java'",[102,84358,83620],{"class":119},[102,84360,83244],{"class":126},[102,84362,84363],{"class":104,"line":202},[102,84364,84365],{"class":126},"    \u002F\u002F 不区分大小写、\n",[102,84367,84368,84370,84372,84374,84376,84378,84380,84382,84384,84386,84388,84390,84392,84394,84396],{"class":104,"line":208},[102,84369,81618],{"class":119},[102,84371,66112],{"class":112},[102,84373,380],{"class":119},[102,84375,9611],{"class":278},[102,84377,9986],{"class":108},[102,84379,84312],{"class":55842},[102,84381,9338],{"class":108},[102,84383,9611],{"class":278},[102,84385,9473],{"class":108},[102,84387,9585],{"class":119},[102,84389,83110],{"class":112},[102,84391,380],{"class":119},[102,84393,84356],{"class":278},[102,84395,83620],{"class":119},[102,84397,83121],{"class":126},[102,84399,84400,84402,84404,84406],{"class":104,"line":214},[102,84401,19961],{"class":108},[102,84403,81784],{"class":187},[102,84405,22296],{"class":108},[102,84407,84408],{"class":278}," 'java是一门编程语言，学完java工资很高'\n",[102,84410,84411,84413,84416,84418,84421,84424,84426,84428,84430,84432,84435,84437,84440],{"class":104,"line":225},[102,84412,19961],{"class":108},[102,84414,84415],{"class":187}," result",[102,84417,22296],{"class":108},[102,84419,84420],{"class":119}," str.",[102,84422,84423],{"class":112},"replace",[102,84425,380],{"class":119},[102,84427,9611],{"class":278},[102,84429,84312],{"class":55842},[102,84431,9611],{"class":278},[102,84433,84434],{"class":108},"ig",[102,84436,2571],{"class":119},[102,84438,84439],{"class":278},"'前端'",[102,84441,390],{"class":119},[102,84443,84444,84446,84448],{"class":104,"line":230},[102,84445,81618],{"class":119},[102,84447,66112],{"class":112},[102,84449,84450],{"class":119},"(result)\n",[102,84452,84453,84455,84457],{"class":104,"line":236},[102,84454,60282],{"class":119},[102,84456,59678],{"class":59165},[102,84458,59172],{"class":119},[102,84460,84461,84463,84465],{"class":104,"line":242},[102,84462,59650],{"class":119},[102,84464,59665],{"class":59165},[102,84466,59172],{"class":119},[102,84468,84469,84471,84473],{"class":104,"line":248},[102,84470,59650],{"class":119},[102,84472,58500],{"class":59165},[102,84474,59172],{"class":119},[8955,84476,84477],{},"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":98,"searchDepth":116,"depth":116,"links":84479},[84480,84490,84502,84519,84526,84534],{"id":61225,"depth":116,"text":61226,"children":84481},[84482,84483,84484,84485,84486,84487,84488,84489],{"id":61229,"depth":123,"text":61230},{"id":61262,"depth":123,"text":61263},{"id":61301,"depth":123,"text":61302},{"id":61459,"depth":123,"text":61460},{"id":61507,"depth":123,"text":61508},{"id":61644,"depth":123,"text":61645},{"id":61966,"depth":123,"text":61967},{"id":64954,"depth":123,"text":64955},{"id":64982,"depth":116,"text":64983,"children":84491},[84492,84493,84494,84495,84496,84497,84498,84499,84500,84501],{"id":64986,"depth":123,"text":64987},{"id":65009,"depth":123,"text":65010},{"id":65924,"depth":123,"text":65925},{"id":66614,"depth":123,"text":66615},{"id":66896,"depth":123,"text":66897},{"id":71057,"depth":123,"text":71058},{"id":71227,"depth":123,"text":71228},{"id":71355,"depth":123,"text":71356},{"id":71380,"depth":123,"text":71381},{"id":72769,"depth":123,"text":72770},{"id":73922,"depth":116,"text":73923,"children":84503},[84504,84505,84506,84507,84508,84509,84510,84511,84512,84513,84514,84515,84516,84517,84518],{"id":73926,"depth":123,"text":73927},{"id":74580,"depth":123,"text":74581},{"id":76275,"depth":123,"text":76276},{"id":76316,"depth":123,"text":76317},{"id":76358,"depth":123,"text":76359},{"id":76372,"depth":123,"text":76373},{"id":76421,"depth":123,"text":76422},{"id":76433,"depth":123,"text":76434},{"id":76448,"depth":123,"text":76449},{"id":76484,"depth":123,"text":76485},{"id":76565,"depth":123,"text":76566},{"id":76693,"depth":123,"text":76694},{"id":76705,"depth":123,"text":76706},{"id":76724,"depth":123,"text":76725},{"id":78835,"depth":123,"text":78836},{"id":78854,"depth":116,"text":78855,"children":84520},[84521,84522,84523,84524,84525],{"id":78875,"depth":123,"text":78876},{"id":78895,"depth":123,"text":78896},{"id":78944,"depth":123,"text":78945},{"id":79069,"depth":123,"text":79070},{"id":79250,"depth":123,"text":79251},{"id":79268,"depth":116,"text":79269,"children":84527},[84528,84529,84530,84531,84532,84533],{"id":79283,"depth":123,"text":79284},{"id":79342,"depth":123,"text":79343},{"id":79366,"depth":123,"text":79367},{"id":79686,"depth":123,"text":79687},{"id":79718,"depth":123,"text":79719},{"id":79741,"depth":123,"text":79742},{"id":82809,"depth":116,"text":82810,"children":84535},[84536,84537],{"id":82843,"depth":123,"text":82844},{"id":82882,"depth":123,"text":82883},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":61197,"description":31240},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":84544,"title":84545,"body":84546,"description":31240,"extension":8978,"meta":100683,"navigation":651,"path":100684,"seo":100685,"stem":100686,"__hash__":100687},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":84547,"toc":100619},[84548,84551,84554,84558,84562,84567,84572,84583,84587,84592,84595,84599,84602,84607,84611,84615,84618,84623,84626,84630,84633,84641,84644,84648,84653,84658,84661,84665,84670,84675,84678,84682,84687,84690,84695,84698,84703,84706,84711,84716,84719,84722,84726,84731,84736,84739,84743,84747,84750,84753,84756,84760,84764,84769,84774,84777,84781,84786,84791,84794,84797,84800,84803,84806,84809,84812,84815,84818,84823,84827,84832,84837,84840,84843,84846,84849,84852,84855,84858,84861,84865,84869,84872,84875,84878,84883,84885,84888,84891,84894,84897,84900,84903,84906,84909,84912,84915,84918,84921,84924,84929,84934,84939,84942,84946,84949,84954,84958,84960,84971,84976,85077,85080,85083,85086,85089,85092,85095,85098,85101,85103,85106,85109,85112,85115,85118,85120,85123,85126,85129,85132,85135,85138,85140,85143,85145,85147,85150,85154,85158,85161,85164,85167,85170,85173,85176,85179,85182,85185,85190,85310,85313,85316,85321,85324,85327,85330,85333,85338,85341,85344,85347,85350,85355,85358,85458,85523,85597,85601,85604,85607,85611,85614,85628,85657,85660,85663,85666,85669,85672,85675,85678,85680,85683,85686,85689,85692,85696,85701,85705,85710,85785,85788,85971,85974,85977,85980,85983,85986,85988,85991,85994,85997,86000,86003,86006,86008,86012,86015,86020,86023,86026,86029,86032,86034,86039,86042,86045,86048,86051,86053,86058,86061,86064,86066,86068,86071,86075,86078,86081,86086,86089,86092,86095,86145,86150,86154,86159,86162,86231,86234,86243,86247,86252,86255,86258,86266,86269,86286,88088,88092,88096,88101,88104,88108,88114,88120,88272,88277,88282,88285,88288,88291,88294,88297,88300,88303,88306,88309,88312,88315,88318,88323,88327,88330,88341,88345,88350,88353,88356,88359,88362,88365,88367,88370,88373,88376,88379,88381,88398,88401,88405,88408,88413,88418,88421,88424,88428,88431,88434,88443,88446,88450,88453,88458,88463,88530,88534,88537,88540,88545,88550,88636,88641,88645,88648,88651,88666,88669,88674,88678,88683,88792,88795,88806,88956,88960,88965,89074,89078,89083,89088,89093,89096,89103,89123,89159,89323,89328,89331,89336,89343,89346,89349,89352,89411,89467,89523,89527,89532,89847,89850,89854,89857,89862,89971,89976,89980,89985,89989,90060,90064,90066,90069,90072,90110,90386,90390,90407,90473,90507,90511,90514,90519,90548,90555,90564,90569,90584,90589,90598,90601,90738,90742,90804,90808,90813,91058,91062,91067,91070,91073,91076,91079,91083,91088,92669,92673,92677,92683,92686,92691,92695,92698,92703,92706,92717,92721,92726,92730,92735,92740,92743,92748,92752,92756,92759,92764,92769,92772,92775,92778,92900,92905,93007,93010,93013,93017,93022,93194,93199,93203,93206,93211,93277,93282,93285,93416,93419,93424,93427,93430,93521,93526,93529,93532,93535,93538,93543,93548,93551,93556,93561,93566,93570,93573,93576,93581,93586,93591,93596,93650,93653,93656,93661,93664,93667,93672,93677,93682,93686,93691,93705,93710,93713,93718,93722,93727,93732,93737,93742,93747,93752,93757,93762,93765,93769,93774,93777,93780,93783,93788,93793,93796,93799,93803,93806,93809,93814,93819,93824,93829,93832,93837,93842,93903,93908,93911,93916,95157,95162,95166,95170,95175,95178,95183,95188,95191,95196,95198,95203,95207,95210,95213,95224,95228,95233,95238,95293,95298,95303,95308,95519,95524,95528,95533,95536,95538,95541,95544,95991,95996,96003,96009,96012,96015,96279,96284,96288,96553,96558,96562,96567,96572,96577,96582,96913,96916,96921,96926,96929,96933,96937,96942,96947,96952,96957,96962,96967,96971,96974,96979,96984,96987,97061,97066,97071,97076,97078,97081,97451,97456,97461,97466,97469,97472,97574,97579,97584,97687,97691,97696,97700,97704,97709,97714,97717,97722,97725,97728,98121,98126,98129,98132,98135,98138,98658,98662,98667,98672,98677,98680,98685,98688,98691,99073,99078,99080,99082,99085,99088,99600,99604,99665,99668,99671,99674,99678,99681,99686,99691,100616],[10,84549,84545],{"id":84550},"_4js进阶",[14,84552,84553],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[43,84555,84557],{"id":84556},"_41-作用域","4.1 作用域",[48,84559,84561],{"id":84560},"_411-局部作用域","4.1.1 局部作用域",[14,84563,84564],{},[6750,84565],{"alt":98,"src":84566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,84568,84569],{},[6750,84570],{"alt":98,"src":84571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[59,84573,84574,84577,84580],{},[62,84575,84576],{},"函数作用域在函数内部",[62,84578,84579],{},"块级作用域在{}",[62,84581,84582],{},"对象的那个{}不是作用域，不是块作用域",[48,84584,84586],{"id":84585},"_412-全局作用域","4.1.2 全局作用域",[14,84588,84589],{},[6750,84590],{"alt":98,"src":84591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,84593,84594],{},"window.a=10不要这样写",[48,84596,84598],{"id":84597},"_413-作用域链","4.1.3 作用域链",[14,84600,84601],{},"变量查找机制",[14,84603,84604],{},[6750,84605],{"alt":98,"src":84606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[43,84608,84610],{"id":84609},"_42-垃圾回收机制","4.2 垃圾回收机制",[48,84612,84614],{"id":84613},"_421-大体介绍","4.2.1 大体介绍",[14,84616,84617],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,84619,84620],{},[6750,84621],{"alt":98,"src":84622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,84624,84625],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[48,84627,84629],{"id":84628},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,84631,84632],{},"堆栈空间分配区别：",[87,84634,84635,84638],{},[62,84636,84637],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[62,84639,84640],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,84642,84643],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[7601,84645,84647],{"id":84646},"_4221-引用计数","4.2.2.1 引用计数",[14,84649,84650],{},[6750,84651],{"alt":98,"src":84652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,84654,84655],{},[6750,84656],{"alt":98,"src":84657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,84659,84660],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[7601,84662,84664],{"id":84663},"_4222-标记清除法","4.2.2.2 标记清除法",[14,84666,84667],{},[6750,84668],{"alt":98,"src":84669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,84671,84672],{},[6750,84673],{"alt":98,"src":84674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,84676,84677],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[43,84679,84681],{"id":84680},"_43-闭包","4.3 闭包",[14,84683,84684],{},[6750,84685],{"alt":98,"src":84686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,84688,84689],{},"闭包：内层函数+外层函数的变量",[14,84691,84692],{},[6750,84693],{"alt":98,"src":84694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,84696,84697],{},"closure就是闭包",[14,84699,84700],{},[6750,84701],{"alt":98,"src":84702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,84704,84705],{},"内层函数必须包含外层函数的变量才是闭包",[14,84707,84708],{},[6750,84709],{"alt":98,"src":84710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,84712,84713],{},[6750,84714],{"alt":98,"src":84715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,84717,84718],{},"闭包可能会引起内存泄漏",[14,84720,84721],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[43,84723,84725],{"id":84724},"_44-变量提升","4.4 变量提升",[14,84727,84728],{},[6750,84729],{"alt":98,"src":84730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,84732,84733],{},[6750,84734],{"alt":98,"src":84735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,84737,84738],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[43,84740,84742],{"id":84741},"_45-函数进阶","4.5 函数进阶",[48,84744,84746],{"id":84745},"_451-函数提升","4.5.1 函数提升",[14,84748,84749],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,84751,84752],{},"只提升函数声明，不提升函数调用",[59678,84754,84755],{},"\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",[48,84757,84759],{"id":84758},"_452-函数参数","4.5.2 函数参数",[7601,84761,84763],{"id":84762},"_4521-动态参数","4.5.2.1 动态参数",[14,84765,84766],{},[6750,84767],{"alt":98,"src":84768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,84770,84771],{},[6750,84772],{"alt":98,"src":84773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,84775,84776],{},"箭头函数里边没有arguments",[7601,84778,84780],{"id":84779},"_4522-剩余参数","4.5.2.2 剩余参数",[14,84782,84783],{},[6750,84784],{"alt":98,"src":84785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,84787,84788],{},[6750,84789],{"alt":98,"src":84790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,84792,84793],{},"剩余参数使用的时候不需要写...",[14,84795,84796],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,84798,84799],{},"  function getSum(a,b,...arr) {",[14,84801,84802],{},"  console.log(11)",[14,84804,84805],{},"  }",[14,84807,84808],{},"  getSum(1,2,3,4)",[14,84810,84811],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,84813,84814],{},"  getSum(1,2)",[14,84816,84817],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,84819,84820],{},[6750,84821],{"alt":98,"src":84822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[7601,84824,84826],{"id":84825},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,84828,84829],{},[6750,84830],{"alt":98,"src":84831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,84833,84834],{},[6750,84835],{"alt":98,"src":84836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,84838,84839],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,84841,84842],{},"展开运算符可以用于数组之间的合并：",[14,84844,84845],{},"const arr1 = [1, 2, 3]",[14,84847,84848],{},"const arr2 = [3, 4, 5]",[14,84850,84851],{},"const arr = [...arr1, ...arr2]",[14,84853,84854],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,84856,84857],{},"剩余参数：函数参数使用，得到真数组",[14,84859,84860],{},"展开运算符：数组中使用，数组展开",[48,84862,84864],{"id":84863},"_453-箭头函数","4.5.3 箭头函数",[7601,84866,84868],{"id":84867},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,84870,84871],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,84873,84874],{},"它不是万能的！！！",[14,84876,84877],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,84879,84880],{},[6750,84881],{"alt":98,"src":84882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,84884,9076],{},[14,84886,84887],{},"① 只有一个形参的时候，可以省略小括号：",[14,84889,84890],{},"const fn=x=>{console.log(x)}",[14,84892,84893],{},"② 只有一行代码时可以省略大括号：",[14,84895,84896],{},"const fn=x=>console.log(11)",[14,84898,84899],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,84901,84902],{},"const fn=x=>x+x",[14,84904,84905],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,84907,84908],{},"⑤ 阻止表单默认提交：",[14,84910,84911],{},"const form = document.querySelector('form')",[14,84913,84914],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,84916,84917],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,84919,84920],{},"const fn=uname=>({uname:uname})",[14,84922,84923],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,84925,84926],{},[6750,84927],{"alt":98,"src":84928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,84930,84931],{},[6750,84932],{"alt":98,"src":84933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,84935,84936],{},[6750,84937],{"alt":98,"src":84938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,84940,84941],{},"一定不要忘记用()，有()就理解为自带return",[7601,84943,84945],{"id":84944},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,84947,84948],{},"箭头函数是没有动态参数的arguments",[14,84950,84951],{},[6750,84952],{"alt":98,"src":84953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[7601,84955,84957],{"id":84956},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,84959,20072],{},[87,84961,84962,84965,84968],{},[62,84963,84964],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[62,84966,84967],{},"事件回调函数使用箭头函数时，this 为全局的 window",[62,84969,84970],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,84972,84973],{},[6750,84974],{"alt":98,"src":84975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[93,84977,84979],{"className":60932,"code":84978,"language":60934,"meta":98,"style":98},"  \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",[83,84980,84981,84989,84994,84999,85004,85009,85014,85018,85023,85027,85031,85036,85041,85046,85050,85054,85059,85064,85069],{"__ignoreMap":98},[102,84982,84983,84985,84987],{"class":104,"line":105},[102,84984,60009],{"class":119},[102,84986,59678],{"class":59165},[102,84988,59172],{"class":119},[102,84990,84991],{"class":104,"line":116},[102,84992,84993],{"class":119},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[102,84995,84996],{"class":104,"line":123},[102,84997,84998],{"class":119},"    console.log(this) \u002F\u002F指向window\n",[102,85000,85001],{"class":104,"line":130},[102,85002,85003],{"class":119},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[102,85005,85006],{"class":104,"line":136},[102,85007,85008],{"class":119},"    function fn() {\n",[102,85010,85011],{"class":104,"line":142},[102,85012,85013],{"class":119},"      console.log(this)  \u002F\u002F指向window\n",[102,85015,85016],{"class":104,"line":148},[102,85017,205],{"class":119},[102,85019,85020],{"class":104,"line":157},[102,85021,85022],{"class":119},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[102,85024,85025],{"class":104,"line":163},[102,85026,652],{"emptyLinePlaceholder":651},[102,85028,85029],{"class":104,"line":175},[102,85030,79388],{"class":119},[102,85032,85033],{"class":104,"line":181},[102,85034,85035],{"class":119},"      name: 'andy',\n",[102,85037,85038],{"class":104,"line":202},[102,85039,85040],{"class":119},"      sayHai: function () {\n",[102,85042,85043],{"class":104,"line":208},[102,85044,85045],{"class":119},"        console.log(this)\n",[102,85047,85048],{"class":104,"line":214},[102,85049,60263],{"class":119},[102,85051,85052],{"class":104,"line":225},[102,85053,205],{"class":119},[102,85055,85056],{"class":104,"line":230},[102,85057,85058],{"class":119},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[102,85060,85061],{"class":104,"line":236},[102,85062,85063],{"class":119},"    \u002F\u002F 2.箭头函数的this\n",[102,85065,85066],{"class":104,"line":242},[102,85067,85068],{"class":119},"    const fn = () => console.log(this)\n",[102,85070,85071,85073,85075],{"class":104,"line":248},[102,85072,60282],{"class":119},[102,85074,59678],{"class":59165},[102,85076,59172],{"class":119},[14,85078,85079],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,85081,85082],{},"const fn = () => console.log(this)",[14,85084,85085],{},"fn() \u002F\u002F指向window",[14,85087,85088],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,85090,85091],{},"①",[14,85093,85094],{},"const obj = {",[14,85096,85097],{},"uname: 'pink老师',",[14,85099,85100],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,85102,9967],{},[14,85104,85105],{},"调用对象里边的函数",[14,85107,85108],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,85110,85111],{},"obj.sayHai()",[14,85113,85114],{},"②",[14,85116,85117],{},"const obj1 = {",[14,85119,85097],{},[14,85121,85122],{},"sayHai: function () {",[14,85124,85125],{},"let i = 10",[14,85127,85128],{},"const count = () => {",[14,85130,85131],{},"console.log(this)",[14,85133,85134],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,85136,85137],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,85139,9967],{},[14,85141,85142],{},"count()",[14,85144,9967],{},[14,85146,9967],{},[14,85148,85149],{},"obj1.sayHai()",[43,85151,85153],{"id":85152},"_46-解构赋值","4.6 解构赋值",[48,85155,85157],{"id":85156},"_461-数组解构","4.6.1 数组解构",[14,85159,85160],{},"以前要是使用数组中的值的话：",[14,85162,85163],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,85165,85166],{},"const arr=[100,60,80]",[14,85168,85169],{},"const max=arr[0]",[14,85171,85172],{},"const min=arr[1]",[14,85174,85175],{},"const avg=arr[2]",[14,85177,85178],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,85180,85181],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,85183,85184],{},"这个写法就类似于上边的那种用很多const的方法",[14,85186,85187],{},[6750,85188],{"alt":98,"src":85189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[93,85191,85193],{"className":58498,"code":85192,"language":58500,"meta":98,"style":98},"①变量之间交换值:\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",[83,85194,85195,85200,85205,85210,85215,85220,85224,85228,85233,85237,85242,85247,85251,85256,85261,85272,85282,85287,85292,85297,85301,85305],{"__ignoreMap":98},[102,85196,85197],{"class":104,"line":105},[102,85198,85199],{"class":119},"①变量之间交换值:\n",[102,85201,85202],{"class":104,"line":116},[102,85203,85204],{"class":119},"let a=1\n",[102,85206,85207],{"class":104,"line":123},[102,85208,85209],{"class":119},"let b=2;\n",[102,85211,85212],{"class":104,"line":130},[102,85213,85214],{"class":119},"必须加这行代码，不然就会报错\n",[102,85216,85217],{"class":104,"line":136},[102,85218,85219],{"class":119},"[b,a]=[a,b]\n",[102,85221,85222],{"class":104,"line":142},[102,85223,652],{"emptyLinePlaceholder":651},[102,85225,85226],{"class":104,"line":148},[102,85227,652],{"emptyLinePlaceholder":651},[102,85229,85230],{"class":104,"line":157},[102,85231,85232],{"class":119},"可以写成下面的方式：\n",[102,85234,85235],{"class":104,"line":163},[102,85236,85204],{"class":119},[102,85238,85239],{"class":104,"line":175},[102,85240,85241],{"class":119},"let b=2\n",[102,85243,85244],{"class":104,"line":181},[102,85245,85246],{"class":119},";[b,a]=[a,b]\n",[102,85248,85249],{"class":104,"line":202},[102,85250,652],{"emptyLinePlaceholder":651},[102,85252,85253],{"class":104,"line":208},[102,85254,85255],{"class":119},"②排序\n",[102,85257,85258],{"class":104,"line":214},[102,85259,85260],{"class":119},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[102,85262,85263,85266,85269],{"class":104,"line":225},[102,85264,85265],{"class":119},"for (let i = 0; i ",[102,85267,1208],{"class":85268},"s7hpK",[102,85270,85271],{"class":119}," arr1.length; i++) {\n",[102,85273,85274,85277,85279],{"class":104,"line":230},[102,85275,85276],{"class":119},"   for (let j = 0; j ",[102,85278,1208],{"class":85268},[102,85280,85281],{"class":119}," arr1.length - 1; j++) {\n",[102,85283,85284],{"class":104,"line":236},[102,85285,85286],{"class":119},"      if (arr1[j] > arr1[j + 1]) {\n",[102,85288,85289],{"class":104,"line":242},[102,85290,85291],{"class":119},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[102,85293,85294],{"class":104,"line":248},[102,85295,85296],{"class":119},"       }\n",[102,85298,85299],{"class":104,"line":254},[102,85300,13119],{"class":119},[102,85302,85303],{"class":104,"line":269},[102,85304,301],{"class":119},[102,85306,85307],{"class":104,"line":298},[102,85308,85309],{"class":119},"console.log(arr1)\n",[14,85311,85312],{},"数组解构的细节：",[14,85314,85315],{},"①变量多，单元值少",[14,85317,85318],{},[6750,85319],{"alt":98,"src":85320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,85322,85323],{},"防止出现undefined的方法：",[14,85325,85326],{},"const [a=0,b=0] =[1]",[14,85328,85329],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,85331,85332],{},"②变量少，单元值多",[14,85334,85335],{},[6750,85336],{"alt":98,"src":85337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,85339,85340],{},"此时可以使用剩余参数来接收多余的值",[14,85342,85343],{},"const [a,b,...c]=[1,2,3,4]",[14,85345,85346],{},"console.log(c) 输出[3,4]",[14,85348,85349],{},"③可以按需导入，忽略某些返回值",[14,85351,85352],{},[6750,85353],{"alt":98,"src":85354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,85356,85357],{},"④支持多维数组的结构",[93,85359,85363],{"className":85360,"code":85361,"language":85362,"meta":98,"style":98},"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",[83,85364,85365,85393,85409,85424,85439],{"__ignoreMap":98},[102,85366,85367,85369,85371,85373,85375,85377,85379,85381,85384,85386,85388,85390],{"class":104,"line":105},[102,85368,4456],{"class":108},[102,85370,59698],{"class":119},[102,85372,260],{"class":108},[102,85374,60091],{"class":119},[102,85376,7039],{"class":187},[102,85378,2571],{"class":119},[102,85380,7044],{"class":187},[102,85382,85383],{"class":119},", [",[102,85385,7049],{"class":187},[102,85387,2571],{"class":119},[102,85389,9329],{"class":187},[102,85391,85392],{"class":119},"]]\n",[102,85394,85395,85398,85400,85402,85404,85406],{"class":104,"line":116},[102,85396,85397],{"class":119},"console.",[102,85399,66112],{"class":112},[102,85401,12664],{"class":119},[102,85403,8423],{"class":187},[102,85405,13026],{"class":119},[102,85407,85408],{"class":126},"  \u002F\u002F1\n",[102,85410,85411,85413,85415,85417,85419,85421],{"class":104,"line":123},[102,85412,85397],{"class":119},[102,85414,66112],{"class":112},[102,85416,12664],{"class":119},[102,85418,7039],{"class":187},[102,85420,13026],{"class":119},[102,85422,85423],{"class":126},"  \u002F\u002F2\n",[102,85425,85426,85428,85430,85432,85434,85436],{"class":104,"line":130},[102,85427,85397],{"class":119},[102,85429,66112],{"class":112},[102,85431,12664],{"class":119},[102,85433,7044],{"class":187},[102,85435,13026],{"class":119},[102,85437,85438],{"class":126},"  \u002F\u002F[3,4]\n",[102,85440,85441,85443,85445,85447,85449,85451,85453,85455],{"class":104,"line":136},[102,85442,85397],{"class":119},[102,85444,66112],{"class":112},[102,85446,12664],{"class":119},[102,85448,7044],{"class":187},[102,85450,13710],{"class":119},[102,85452,8423],{"class":187},[102,85454,13026],{"class":119},[102,85456,85457],{"class":126},"  \u002F\u002F3\n",[93,85459,85461],{"className":85360,"code":85460,"language":85362,"meta":98,"style":98},"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",[83,85462,85463,85490,85501,85512],{"__ignoreMap":98},[102,85464,85465,85467,85470,85472,85474,85476,85478,85480,85482,85484,85486,85488],{"class":104,"line":105},[102,85466,4456],{"class":108},[102,85468,85469],{"class":119}," [a, b, c] ",[102,85471,260],{"class":108},[102,85473,60091],{"class":119},[102,85475,7039],{"class":187},[102,85477,2571],{"class":119},[102,85479,7044],{"class":187},[102,85481,85383],{"class":119},[102,85483,7049],{"class":187},[102,85485,2571],{"class":119},[102,85487,9329],{"class":187},[102,85489,85392],{"class":119},[102,85491,85492,85494,85496,85499],{"class":104,"line":116},[102,85493,85397],{"class":119},[102,85495,66112],{"class":112},[102,85497,85498],{"class":119},"(a)",[102,85500,85408],{"class":126},[102,85502,85503,85505,85507,85510],{"class":104,"line":123},[102,85504,85397],{"class":119},[102,85506,66112],{"class":112},[102,85508,85509],{"class":119},"(b)",[102,85511,85423],{"class":126},[102,85513,85514,85516,85518,85521],{"class":104,"line":130},[102,85515,85397],{"class":119},[102,85517,66112],{"class":112},[102,85519,85520],{"class":119},"(c)",[102,85522,85438],{"class":126},[93,85524,85526],{"className":85360,"code":85525,"language":85362,"meta":98,"style":98},"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",[83,85527,85528,85555,85565,85575,85585],{"__ignoreMap":98},[102,85529,85530,85532,85535,85537,85539,85541,85543,85545,85547,85549,85551,85553],{"class":104,"line":105},[102,85531,4456],{"class":108},[102,85533,85534],{"class":119}," [a, b, [c, d]] ",[102,85536,260],{"class":108},[102,85538,60091],{"class":119},[102,85540,7039],{"class":187},[102,85542,2571],{"class":119},[102,85544,7044],{"class":187},[102,85546,85383],{"class":119},[102,85548,7049],{"class":187},[102,85550,2571],{"class":119},[102,85552,9329],{"class":187},[102,85554,85392],{"class":119},[102,85556,85557,85559,85561,85563],{"class":104,"line":116},[102,85558,85397],{"class":119},[102,85560,66112],{"class":112},[102,85562,85498],{"class":119},[102,85564,85408],{"class":126},[102,85566,85567,85569,85571,85573],{"class":104,"line":123},[102,85568,85397],{"class":119},[102,85570,66112],{"class":112},[102,85572,85509],{"class":119},[102,85574,85423],{"class":126},[102,85576,85577,85579,85581,85583],{"class":104,"line":130},[102,85578,85397],{"class":119},[102,85580,66112],{"class":112},[102,85582,85520],{"class":119},[102,85584,85457],{"class":126},[102,85586,85587,85589,85591,85594],{"class":104,"line":136},[102,85588,85397],{"class":119},[102,85590,66112],{"class":112},[102,85592,85593],{"class":119},"(d)",[102,85595,85596],{"class":126},"  \u002F\u002F4\n",[48,85598,85600],{"id":85599},"_462-对象解构","4.6.2 对象解构",[14,85602,85603],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,85605,85606],{},"用的非常非常多！！！！！！",[7601,85608,85610],{"id":85609},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,85612,85613],{},"基本语法：",[87,85615,85616,85619,85622,85625],{},[62,85617,85618],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[62,85620,85621],{},"对象属性的值将被赋值给与属性名相同的变量",[62,85623,85624],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[62,85626,85627],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[93,85629,85631],{"className":58498,"code":85630,"language":58500,"meta":98,"style":98},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[83,85632,85633,85638,85643,85648,85652],{"__ignoreMap":98},[102,85634,85635],{"class":104,"line":105},[102,85636,85637],{"class":119},"const obj = {\n",[102,85639,85640],{"class":104,"line":116},[102,85641,85642],{"class":119},"   uname: 'pink老师',\n",[102,85644,85645],{"class":104,"line":123},[102,85646,85647],{"class":119},"   age: 18,\n",[102,85649,85650],{"class":104,"line":130},[102,85651,301],{"class":119},[102,85653,85654],{"class":104,"line":136},[102,85655,85656],{"class":119},"const { uname, age } = obj\n",[14,85658,85659],{},"上方代码这样写等价于：",[14,85661,85662],{},"const uname等价于obj.uname",[14,85664,85665],{},"变量名可以重新改名：",[14,85667,85668],{},"const uname='red老师'",[14,85670,85671],{},"const user={",[14,85673,85674],{},"  uname:'pink老师',",[14,85676,85677],{},"  age:18",[14,85679,9967],{},[14,85681,85682],{},"const {uname,age}=user",[14,85684,85685],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,85687,85688],{},"const {旧变量名：新变量名}=对象",[14,85690,85691],{},"const {uname:username,age}=user",[7601,85693,85695],{"id":85694},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,85697,85698],{},[6750,85699],{"alt":98,"src":85700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[7601,85702,85704],{"id":85703},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,85706,85707],{},[6750,85708],{"alt":98,"src":85709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[93,85711,85713],{"className":60932,"code":85712,"language":60934,"meta":98,"style":98},"  \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",[83,85714,85715,85723,85728,85733,85738,85743,85748,85753,85758,85763,85767,85772,85777],{"__ignoreMap":98},[102,85716,85717,85719,85721],{"class":104,"line":105},[102,85718,60009],{"class":119},[102,85720,59678],{"class":59165},[102,85722,59172],{"class":119},[102,85724,85725],{"class":104,"line":116},[102,85726,85727],{"class":119},"    const pig = {\n",[102,85729,85730],{"class":104,"line":123},[102,85731,85732],{"class":119},"      name: '佩奇',\n",[102,85734,85735],{"class":104,"line":130},[102,85736,85737],{"class":119},"      family: {\n",[102,85739,85740],{"class":104,"line":136},[102,85741,85742],{"class":119},"        mother: '猪妈妈',\n",[102,85744,85745],{"class":104,"line":142},[102,85746,85747],{"class":119},"        father: '猪爸爸',\n",[102,85749,85750],{"class":104,"line":148},[102,85751,85752],{"class":119},"        sister: '乔治'\n",[102,85754,85755],{"class":104,"line":157},[102,85756,85757],{"class":119},"      },\n",[102,85759,85760],{"class":104,"line":163},[102,85761,85762],{"class":119},"      age: 6\n",[102,85764,85765],{"class":104,"line":175},[102,85766,205],{"class":119},[102,85768,85769],{"class":104,"line":181},[102,85770,85771],{"class":119},"    \u002F\u002F 多级对象解构\n",[102,85773,85774],{"class":104,"line":202},[102,85775,85776],{"class":119},"    const { name, family: { mother, father, sister }, age } = pig\n",[102,85778,85779,85781,85783],{"class":104,"line":208},[102,85780,60282],{"class":119},[102,85782,59678],{"class":59165},[102,85784,59172],{"class":119},[14,85786,85787],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[93,85789,85792],{"className":85790,"code":85791,"language":84312,"meta":98,"style":98},"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",[83,85793,85794,85799,85810,85822,85834,85843,85847,85858,85870,85880,85885,85889,85899,85910,85919,85923,85927,85938,85949,85958,85962,85967],{"__ignoreMap":98},[102,85795,85796],{"class":104,"line":105},[102,85797,85798],{"class":126},"    \u002F\u002F 这是后台传递过来的数据\n",[102,85800,85801,85803,85806,85808],{"class":104,"line":116},[102,85802,19961],{"class":108},[102,85804,85805],{"class":119}," msg ",[102,85807,260],{"class":108},[102,85809,1077],{"class":119},[102,85811,85812,85815,85817,85820],{"class":104,"line":123},[102,85813,85814],{"class":278},"      \"code\"",[102,85816,9881],{"class":108},[102,85818,85819],{"class":187}," 200",[102,85821,39331],{"class":119},[102,85823,85824,85827,85829,85832],{"class":104,"line":130},[102,85825,85826],{"class":278},"      \"msg\"",[102,85828,9881],{"class":108},[102,85830,85831],{"class":278}," \"获取新闻列表成功\"",[102,85833,39331],{"class":119},[102,85835,85836,85839,85841],{"class":104,"line":136},[102,85837,85838],{"class":278},"      \"data\"",[102,85840,9881],{"class":108},[102,85842,63312],{"class":119},[102,85844,85845],{"class":104,"line":142},[102,85846,1914],{"class":119},[102,85848,85849,85852,85854,85856],{"class":104,"line":148},[102,85850,85851],{"class":278},"          \"id\"",[102,85853,9881],{"class":108},[102,85855,32983],{"class":187},[102,85857,39331],{"class":119},[102,85859,85860,85863,85865,85868],{"class":104,"line":157},[102,85861,85862],{"class":278},"          \"title\"",[102,85864,9881],{"class":108},[102,85866,85867],{"class":278}," \"5G商用自己，三大运用商收入下降\"",[102,85869,39331],{"class":119},[102,85871,85872,85875,85877],{"class":104,"line":163},[102,85873,85874],{"class":278},"          \"count\"",[102,85876,9881],{"class":108},[102,85878,85879],{"class":187}," 58\n",[102,85881,85882],{"class":104,"line":175},[102,85883,85884],{"class":119},"        },\n",[102,85886,85887],{"class":104,"line":181},[102,85888,1914],{"class":119},[102,85890,85891,85893,85895,85897],{"class":104,"line":202},[102,85892,85851],{"class":278},[102,85894,9881],{"class":108},[102,85896,188],{"class":187},[102,85898,39331],{"class":119},[102,85900,85901,85903,85905,85908],{"class":104,"line":208},[102,85902,85862],{"class":278},[102,85904,9881],{"class":108},[102,85906,85907],{"class":278}," \"国际媒体头条速览\"",[102,85909,39331],{"class":119},[102,85911,85912,85914,85916],{"class":104,"line":214},[102,85913,85874],{"class":278},[102,85915,9881],{"class":108},[102,85917,85918],{"class":187}," 56\n",[102,85920,85921],{"class":104,"line":225},[102,85922,85884],{"class":119},[102,85924,85925],{"class":104,"line":230},[102,85926,1914],{"class":119},[102,85928,85929,85931,85933,85936],{"class":104,"line":236},[102,85930,85851],{"class":278},[102,85932,9881],{"class":108},[102,85934,85935],{"class":187}," 3",[102,85937,39331],{"class":119},[102,85939,85940,85942,85944,85947],{"class":104,"line":242},[102,85941,85862],{"class":278},[102,85943,9881],{"class":108},[102,85945,85946],{"class":278}," \"乌克兰和俄罗斯持续冲突\"",[102,85948,39331],{"class":119},[102,85950,85951,85953,85955],{"class":104,"line":248},[102,85952,85874],{"class":278},[102,85954,9881],{"class":108},[102,85956,85957],{"class":187}," 1669\n",[102,85959,85960],{"class":104,"line":254},[102,85961,85884],{"class":119},[102,85963,85964],{"class":104,"line":269},[102,85965,85966],{"class":119},"      ]\n",[102,85968,85969],{"class":104,"line":298},[102,85970,205],{"class":119},[14,85972,85973],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,85975,85976],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,85978,85979],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,85981,85982],{},"function({data}) {",[14,85984,85985],{},"console.log(data)",[14,85987,9967],{},[14,85989,85990],{},"render(msg)",[14,85992,85993],{},"实参传递给形参的时候解构了",[14,85995,85996],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,85998,85999],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,86001,86002],{},"function render({data:mydata}) {",[14,86004,86005],{},"  console.log(data)",[14,86007,9967],{},[48,86009,86011],{"id":86010},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,86013,86014],{},"有两种情况：一个是数组结构，一个是立即执行函数",[87,86016,86017],{},[62,86018,86019],{},"如果对一个数组进行遍历，有两种方式：",[14,86021,86022],{},"①法1",[14,86024,86025],{},"const arr=[1,2,3]",[14,86027,86028],{},"arr.map(function(item,index) {",[14,86030,86031],{},"  console.log(item)",[14,86033,60329],{},[14,86035,86036],{},[6750,86037],{"alt":98,"src":86038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,86040,86041],{},"②法2",[14,86043,86044],{},"const str='pink'",[14,86046,86047],{},"[1,2,3].map(function(item,index) {",[14,86049,86050],{},"console.log(item)",[14,86052,60329],{},[14,86054,86055],{},[6750,86056],{"alt":98,"src":86057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,86059,86060],{},"此时会报错",[14,86062,86063],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,86065,86050],{},[14,86067,60329],{},[14,86069,86070],{},"内部会当成这样处理，所以我们用分号进行隔开",[43,86072,86074],{"id":86073},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,86076,86077],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,86079,86080],{},"可以理解为加强版的for循环",[14,86082,86083],{},[6750,86084],{"alt":98,"src":86085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,86087,86088],{},"里边不写return，不返回数组，只遍历不返回",[14,86090,86091],{},"map是返回数组",[14,86093,86094],{},"forEach主要用于遍历数组对象",[93,86096,86098],{"className":60932,"code":86097,"language":60934,"meta":98,"style":98},"  \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",[83,86099,86100,86108,86113,86118,86123,86128,86132,86137],{"__ignoreMap":98},[102,86101,86102,86104,86106],{"class":104,"line":105},[102,86103,60009],{"class":119},[102,86105,59678],{"class":59165},[102,86107,59172],{"class":119},[102,86109,86110],{"class":104,"line":116},[102,86111,86112],{"class":119},"    const arr = ['red', 'green', 'pink']\n",[102,86114,86115],{"class":104,"line":123},[102,86116,86117],{"class":119},"    const result = arr.forEach(function (item, index) {\n",[102,86119,86120],{"class":104,"line":130},[102,86121,86122],{"class":119},"      console.log(item)\n",[102,86124,86125],{"class":104,"line":136},[102,86126,86127],{"class":119},"      console.log(index)\n",[102,86129,86130],{"class":104,"line":142},[102,86131,41326],{"class":119},[102,86133,86134],{"class":104,"line":148},[102,86135,86136],{"class":119},"    console.log(result)\n",[102,86138,86139,86141,86143],{"class":104,"line":157},[102,86140,60282],{"class":119},[102,86142,59678],{"class":59165},[102,86144,59172],{"class":119},[14,86146,86147],{},[6750,86148],{"alt":98,"src":86149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[43,86151,86153],{"id":86152},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,86155,86156],{},[6750,86157],{"alt":98,"src":86158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,86160,86161],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[93,86163,86165],{"className":60932,"code":86164,"language":60934,"meta":98,"style":98},"\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",[83,86166,86167,86175,86183,86188,86193,86197,86201,86206,86210,86215,86223],{"__ignoreMap":98},[102,86168,86169,86171,86173],{"class":104,"line":105},[102,86170,1208],{"class":119},[102,86172,59665],{"class":59165},[102,86174,59172],{"class":119},[102,86176,86177,86179,86181],{"class":104,"line":116},[102,86178,60009],{"class":119},[102,86180,59678],{"class":59165},[102,86182,59172],{"class":119},[102,86184,86185],{"class":104,"line":123},[102,86186,86187],{"class":119},"    const arr = [10, 20, 30]\n",[102,86189,86190],{"class":104,"line":130},[102,86191,86192],{"class":119},"    const newArr = arr.filter(function (item, index) {\n",[102,86194,86195],{"class":104,"line":136},[102,86196,86122],{"class":119},[102,86198,86199],{"class":104,"line":142},[102,86200,86127],{"class":119},[102,86202,86203],{"class":104,"line":148},[102,86204,86205],{"class":119},"      return item >= 20\n",[102,86207,86208],{"class":104,"line":157},[102,86209,41326],{"class":119},[102,86211,86212],{"class":104,"line":163},[102,86213,86214],{"class":119},"    console.log(newArr)\n",[102,86216,86217,86219,86221],{"class":104,"line":175},[102,86218,60282],{"class":119},[102,86220,59678],{"class":59165},[102,86222,59172],{"class":119},[102,86224,86225,86227,86229],{"class":104,"line":181},[102,86226,59650],{"class":119},[102,86228,59665],{"class":59165},[102,86230,59172],{"class":119},[14,86232,86233],{},"这个也可以写成箭头函数：",[93,86235,86237],{"className":58498,"code":86236,"language":58500,"meta":98,"style":98},"const newArr = arr.filter(item => item >= 20)\n",[83,86238,86239],{"__ignoreMap":98},[102,86240,86241],{"class":104,"line":105},[102,86242,86236],{"class":119},[43,86244,86246],{"id":86245},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,86248,86249],{},[6750,86250],{"alt":98,"src":86251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,86253,86254],{},"步骤：",[14,86256,86257],{},"①：渲染页面模块",[59,86259,86260,86263],{},[62,86261,86262],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[62,86264,86265],{},"用forEach+字符串的形式",[14,86267,86268],{},"②：点击不同需求，显示不同页面内容",[59,86270,86271,86274,86277,86280,86283],{},[62,86272,86273],{},"点击采取事件委托方式 .filter",[62,86275,86276],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[62,86278,86279],{},"筛选条件是根据点击的 data-index 来判断",[62,86281,86282],{},"可以使用对象解构，把事件对象解构",[62,86284,86285],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[93,86287,86289],{"className":58498,"code":86288,"language":58500,"meta":98,"style":98},"\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",[83,86290,86291,86301,86315,86319,86327,86341,86361,86373,86381,86387,86397,86407,86417,86421,86425,86431,86444,86456,86466,86478,86482,86486,86493,86506,86518,86535,86553,86566,86570,86574,86586,86596,86600,86604,86611,86652,86679,86689,86693,86697,86705,86717,86721,86725,86733,86745,86757,86768,86772,86776,86785,86797,86808,86812,86816,86825,86837,86849,86853,86857,86864,86874,86886,86898,86913,86917,86921,86929,86945,86955,86965,86975,86987,86991,86995,87005,87016,87026,87030,87038,87046,87050,87058,87073,87099,87124,87149,87168,87176,87190,87195,87200,87205,87210,87215,87223,87231,87236,87247,87252,87262,87272,87282,87292,87296,87300,87309,87318,87327,87336,87340,87344,87353,87362,87371,87380,87384,87388,87397,87406,87415,87424,87428,87432,87441,87450,87459,87468,87472,87476,87485,87494,87503,87512,87516,87520,87529,87538,87547,87556,87560,87564,87573,87582,87590,87599,87603,87607,87611,87616,87628,87633,87645,87649,87666,87694,87703,87708,87718,87728,87737,87742,87747,87751,87756,87773,87777,87782,87790,87795,87822,87827,87847,87852,87864,87869,87874,87879,87890,87904,87941,87959,87992,88009,88033,88037,88042,88048,88052,88056,88060,88068,88076,88080],{"__ignoreMap":98},[102,86292,86293,86295,86297,86299],{"class":104,"line":105},[102,86294,59162],{"class":119},[102,86296,59166],{"class":59165},[102,86298,59169],{"class":112},[102,86300,59172],{"class":119},[102,86302,86303,86305,86307,86309,86311,86313],{"class":104,"line":116},[102,86304,1208],{"class":119},[102,86306,58500],{"class":59165},[102,86308,59181],{"class":112},[102,86310,260],{"class":119},[102,86312,59186],{"class":278},[102,86314,59172],{"class":119},[102,86316,86317],{"class":104,"line":123},[102,86318,652],{"emptyLinePlaceholder":651},[102,86320,86321,86323,86325],{"class":104,"line":130},[102,86322,1208],{"class":119},[102,86324,59199],{"class":59165},[102,86326,59172],{"class":119},[102,86328,86329,86331,86333,86335,86337,86339],{"class":104,"line":136},[102,86330,60009],{"class":119},[102,86332,59209],{"class":59165},[102,86334,59212],{"class":112},[102,86336,260],{"class":119},[102,86338,59217],{"class":278},[102,86340,59172],{"class":119},[102,86342,86343,86345,86347,86349,86351,86353,86355,86357,86359],{"class":104,"line":142},[102,86344,60009],{"class":119},[102,86346,59209],{"class":59165},[102,86348,387],{"class":112},[102,86350,260],{"class":119},[102,86352,59256],{"class":278},[102,86354,59236],{"class":112},[102,86356,260],{"class":119},[102,86358,59263],{"class":278},[102,86360,59172],{"class":119},[102,86362,86363,86365,86367,86369,86371],{"class":104,"line":148},[102,86364,60009],{"class":119},[102,86366,59272],{"class":59165},[102,86368,59275],{"class":119},[102,86370,59272],{"class":59165},[102,86372,59172],{"class":119},[102,86374,86375,86377,86379],{"class":104,"line":157},[102,86376,60009],{"class":119},[102,86378,8955],{"class":59165},[102,86380,59172],{"class":119},[102,86382,86383,86385],{"class":104,"line":163},[102,86384,15198],{"class":59165},[102,86386,1077],{"class":119},[102,86388,86389,86391,86393,86395],{"class":104,"line":175},[102,86390,62560],{"class":187},[102,86392,59302],{"class":119},[102,86394,8423],{"class":187},[102,86396,266],{"class":119},[102,86398,86399,86401,86403,86405],{"class":104,"line":181},[102,86400,62571],{"class":187},[102,86402,59302],{"class":119},[102,86404,8423],{"class":187},[102,86406,266],{"class":119},[102,86408,86409,86411,86413,86415],{"class":104,"line":202},[102,86410,80461],{"class":187},[102,86412,59302],{"class":119},[102,86414,68370],{"class":187},[102,86416,266],{"class":119},[102,86418,86419],{"class":104,"line":208},[102,86420,205],{"class":119},[102,86422,86423],{"class":104,"line":214},[102,86424,652],{"emptyLinePlaceholder":651},[102,86426,86427,86429],{"class":104,"line":225},[102,86428,69988],{"class":112},[102,86430,1077],{"class":119},[102,86432,86433,86435,86437,86440,86442],{"class":104,"line":230},[102,86434,62636],{"class":187},[102,86436,59302],{"class":119},[102,86438,86439],{"class":187},"990",[102,86441,59357],{"class":108},[102,86443,266],{"class":119},[102,86445,86446,86448,86450,86452,86454],{"class":104,"line":236},[102,86447,62571],{"class":187},[102,86449,59302],{"class":119},[102,86451,8423],{"class":187},[102,86453,59421],{"class":187},[102,86455,266],{"class":119},[102,86457,86458,86460,86462,86464],{"class":104,"line":242},[102,86459,62874],{"class":187},[102,86461,59302],{"class":119},[102,86463,59342],{"class":187},[102,86465,266],{"class":119},[102,86467,86468,86471,86473,86476],{"class":104,"line":248},[102,86469,86470],{"class":187},"      flex-wrap",[102,86472,59302],{"class":119},[102,86474,86475],{"class":187},"wrap",[102,86477,266],{"class":119},[102,86479,86480],{"class":104,"line":254},[102,86481,205],{"class":119},[102,86483,86484],{"class":104,"line":269},[102,86485,652],{"emptyLinePlaceholder":651},[102,86487,86488,86491],{"class":104,"line":298},[102,86489,86490],{"class":112},"    .item",[102,86492,1077],{"class":119},[102,86494,86495,86497,86499,86502,86504],{"class":104,"line":502},[102,86496,62636],{"class":187},[102,86498,59302],{"class":119},[102,86500,86501],{"class":187},"240",[102,86503,59357],{"class":108},[102,86505,266],{"class":119},[102,86507,86508,86510,86512,86514,86516],{"class":104,"line":507},[102,86509,69865],{"class":187},[102,86511,59302],{"class":119},[102,86513,263],{"class":187},[102,86515,59357],{"class":108},[102,86517,266],{"class":119},[102,86519,86520,86522,86524,86526,86528,86531,86533],{"class":104,"line":512},[102,86521,62560],{"class":187},[102,86523,59302],{"class":119},[102,86525,5016],{"class":187},[102,86527,59357],{"class":108},[102,86529,86530],{"class":187}," 30",[102,86532,59357],{"class":108},[102,86534,266],{"class":119},[102,86536,86537,86539,86541,86543,86546,86549,86551],{"class":104,"line":521},[102,86538,69725],{"class":187},[102,86540,59302],{"class":119},[102,86542,35986],{"class":187},[102,86544,86545],{"class":187}," ease",[102,86547,86548],{"class":187}," .5",[102,86550,9720],{"class":108},[102,86552,266],{"class":119},[102,86554,86555,86558,86560,86562,86564],{"class":104,"line":526},[102,86556,86557],{"class":187},"      margin-bottom",[102,86559,59302],{"class":119},[102,86561,5016],{"class":187},[102,86563,59357],{"class":108},[102,86565,266],{"class":119},[102,86567,86568],{"class":104,"line":532},[102,86569,205],{"class":119},[102,86571,86572],{"class":104,"line":538},[102,86573,652],{"emptyLinePlaceholder":651},[102,86575,86576,86579,86581,86584],{"class":104,"line":555},[102,86577,86578],{"class":112},"    .item:nth-child",[102,86580,380],{"class":119},[102,86582,86583],{"class":187},"4n",[102,86585,1105],{"class":119},[102,86587,86588,86590,86592,86594],{"class":104,"line":570},[102,86589,69865],{"class":187},[102,86591,59302],{"class":119},[102,86593,8423],{"class":187},[102,86595,266],{"class":119},[102,86597,86598],{"class":104,"line":581},[102,86599,205],{"class":119},[102,86601,86602],{"class":104,"line":819},[102,86603,652],{"emptyLinePlaceholder":651},[102,86605,86606,86609],{"class":104,"line":828},[102,86607,86608],{"class":112},"    .item:hover",[102,86610,1077],{"class":119},[102,86612,86613,86616,86618,86620,86622,86624,86626,86628,86630,86633,86635,86637,86639,86641,86643,86645,86647,86650],{"class":104,"line":837},[102,86614,86615],{"class":187},"      box-shadow",[102,86617,59302],{"class":119},[102,86619,8423],{"class":187},[102,86621,59357],{"class":108},[102,86623,866],{"class":187},[102,86625,59357],{"class":108},[102,86627,10987],{"class":187},[102,86629,59357],{"class":108},[102,86631,86632],{"class":187}," rgba",[102,86634,380],{"class":119},[102,86636,8423],{"class":187},[102,86638,2571],{"class":119},[102,86640,8423],{"class":187},[102,86642,2571],{"class":119},[102,86644,8423],{"class":187},[102,86646,2571],{"class":119},[102,86648,86649],{"class":187},".2",[102,86651,552],{"class":119},[102,86653,86654,86657,86659,86662,86664,86666,86668,86671,86673,86675,86677],{"class":104,"line":842},[102,86655,86656],{"class":187},"      transform",[102,86658,59302],{"class":119},[102,86660,86661],{"class":187},"translate3d",[102,86663,380],{"class":119},[102,86665,8423],{"class":187},[102,86667,2571],{"class":119},[102,86669,86670],{"class":187},"-4",[102,86672,59357],{"class":108},[102,86674,2571],{"class":119},[102,86676,8423],{"class":187},[102,86678,552],{"class":119},[102,86680,86681,86683,86685,86687],{"class":104,"line":855},[102,86682,69890],{"class":187},[102,86684,59302],{"class":119},[102,86686,69895],{"class":187},[102,86688,266],{"class":119},[102,86690,86691],{"class":104,"line":860},[102,86692,205],{"class":119},[102,86694,86695],{"class":104,"line":871},[102,86696,652],{"emptyLinePlaceholder":651},[102,86698,86699,86701,86703],{"class":104,"line":1359},[102,86700,86490],{"class":112},[102,86702,63480],{"class":59165},[102,86704,1077],{"class":119},[102,86706,86707,86709,86711,86713,86715],{"class":104,"line":1368},[102,86708,62636],{"class":187},[102,86710,59302],{"class":119},[102,86712,5569],{"class":187},[102,86714,9363],{"class":108},[102,86716,266],{"class":119},[102,86718,86719],{"class":104,"line":1373},[102,86720,205],{"class":119},[102,86722,86723],{"class":104,"line":1378},[102,86724,652],{"emptyLinePlaceholder":651},[102,86726,86727,86729,86731],{"class":104,"line":1384},[102,86728,86490],{"class":112},[102,86730,70169],{"class":112},[102,86732,1077],{"class":119},[102,86734,86735,86737,86739,86741,86743],{"class":104,"line":1398},[102,86736,62787],{"class":187},[102,86738,59302],{"class":119},[102,86740,6080],{"class":187},[102,86742,59357],{"class":108},[102,86744,266],{"class":119},[102,86746,86747,86749,86751,86753,86755],{"class":104,"line":1424},[102,86748,86557],{"class":187},[102,86750,59302],{"class":119},[102,86752,263],{"class":187},[102,86754,59357],{"class":108},[102,86756,266],{"class":119},[102,86758,86759,86761,86763,86766],{"class":104,"line":1429},[102,86760,65281],{"class":187},[102,86762,59302],{"class":119},[102,86764,86765],{"class":187},"#666",[102,86767,266],{"class":119},[102,86769,86770],{"class":104,"line":1435},[102,86771,205],{"class":119},[102,86773,86774],{"class":104,"line":1450},[102,86775,652],{"emptyLinePlaceholder":651},[102,86777,86778,86780,86783],{"class":104,"line":1473},[102,86779,86490],{"class":112},[102,86781,86782],{"class":112}," .price",[102,86784,1077],{"class":119},[102,86786,86787,86789,86791,86793,86795],{"class":104,"line":1478},[102,86788,62787],{"class":187},[102,86790,59302],{"class":119},[102,86792,9774],{"class":187},[102,86794,59357],{"class":108},[102,86796,266],{"class":119},[102,86798,86799,86801,86803,86806],{"class":104,"line":1484},[102,86800,65281],{"class":187},[102,86802,59302],{"class":119},[102,86804,86805],{"class":187},"firebrick",[102,86807,266],{"class":119},[102,86809,86810],{"class":104,"line":1499},[102,86811,205],{"class":119},[102,86813,86814],{"class":104,"line":1508},[102,86815,652],{"emptyLinePlaceholder":651},[102,86817,86818,86820,86823],{"class":104,"line":1513},[102,86819,86490],{"class":112},[102,86821,86822],{"class":112}," .price::before",[102,86824,1077],{"class":119},[102,86826,86827,86830,86832,86835],{"class":104,"line":1524},[102,86828,86829],{"class":187},"      content",[102,86831,59302],{"class":119},[102,86833,86834],{"class":278},"'￥'",[102,86836,266],{"class":119},[102,86838,86839,86841,86843,86845,86847],{"class":104,"line":1529},[102,86840,62787],{"class":187},[102,86842,59302],{"class":119},[102,86844,9576],{"class":187},[102,86846,59357],{"class":108},[102,86848,266],{"class":119},[102,86850,86851],{"class":104,"line":1538},[102,86852,205],{"class":119},[102,86854,86855],{"class":104,"line":2089},[102,86856,652],{"emptyLinePlaceholder":651},[102,86858,86859,86862],{"class":104,"line":2094},[102,86860,86861],{"class":112},"    .filter",[102,86863,1077],{"class":119},[102,86865,86866,86868,86870,86872],{"class":104,"line":2100},[102,86867,62874],{"class":187},[102,86869,59302],{"class":119},[102,86871,59342],{"class":187},[102,86873,266],{"class":119},[102,86875,86876,86878,86880,86882,86884],{"class":104,"line":2106},[102,86877,62636],{"class":187},[102,86879,59302],{"class":119},[102,86881,86439],{"class":187},[102,86883,59357],{"class":108},[102,86885,266],{"class":119},[102,86887,86888,86890,86892,86894,86896],{"class":104,"line":2120},[102,86889,62571],{"class":187},[102,86891,59302],{"class":119},[102,86893,8423],{"class":187},[102,86895,59421],{"class":187},[102,86897,266],{"class":119},[102,86899,86900,86902,86904,86906,86908,86910],{"class":104,"line":2128},[102,86901,62560],{"class":187},[102,86903,59302],{"class":119},[102,86905,1445],{"class":187},[102,86907,59357],{"class":108},[102,86909,86530],{"class":187},[102,86911,86912],{"class":108},"px\n",[102,86914,86915],{"class":104,"line":2149},[102,86916,205],{"class":119},[102,86918,86919],{"class":104,"line":2161},[102,86920,652],{"emptyLinePlaceholder":651},[102,86922,86923,86925,86927],{"class":104,"line":2167},[102,86924,86861],{"class":112},[102,86926,4378],{"class":59165},[102,86928,1077],{"class":119},[102,86930,86931,86933,86935,86937,86939,86941,86943],{"class":104,"line":2190},[102,86932,62560],{"class":187},[102,86934,59302],{"class":119},[102,86936,263],{"class":187},[102,86938,59357],{"class":108},[102,86940,17718],{"class":187},[102,86942,59357],{"class":108},[102,86944,266],{"class":119},[102,86946,86947,86949,86951,86953],{"class":104,"line":2196},[102,86948,69586],{"class":187},[102,86950,59302],{"class":119},[102,86952,69683],{"class":187},[102,86954,266],{"class":119},[102,86956,86957,86959,86961,86963],{"class":104,"line":2219},[102,86958,65281],{"class":187},[102,86960,59302],{"class":119},[102,86962,86765],{"class":187},[102,86964,266],{"class":119},[102,86966,86967,86969,86971,86973],{"class":104,"line":2233},[102,86968,71835],{"class":187},[102,86970,59302],{"class":119},[102,86972,62602],{"class":187},[102,86974,266],{"class":119},[102,86976,86977,86979,86981,86983,86985],{"class":104,"line":2253},[102,86978,69615],{"class":187},[102,86980,59302],{"class":119},[102,86982,5016],{"class":187},[102,86984,59357],{"class":108},[102,86986,266],{"class":119},[102,86988,86989],{"class":104,"line":2259},[102,86990,205],{"class":119},[102,86992,86993],{"class":104,"line":2270},[102,86994,652],{"emptyLinePlaceholder":651},[102,86996,86997,86999,87001,87003],{"class":104,"line":2293},[102,86998,86861],{"class":112},[102,87000,4378],{"class":59165},[102,87002,69765],{"class":112},[102,87004,1077],{"class":119},[102,87006,87007,87009,87011,87014],{"class":104,"line":2315},[102,87008,62749],{"class":187},[102,87010,59302],{"class":119},[102,87012,87013],{"class":187},"#05943c",[102,87015,266],{"class":119},[102,87017,87018,87020,87022,87024],{"class":104,"line":2320},[102,87019,65281],{"class":187},[102,87021,59302],{"class":119},[102,87023,68707],{"class":187},[102,87025,266],{"class":119},[102,87027,87028],{"class":104,"line":2326},[102,87029,205],{"class":119},[102,87031,87032,87034,87036],{"class":104,"line":2340},[102,87033,60282],{"class":119},[102,87035,8955],{"class":59165},[102,87037,59172],{"class":119},[102,87039,87040,87042,87044],{"class":104,"line":2354},[102,87041,59650],{"class":119},[102,87043,59199],{"class":59165},[102,87045,59172],{"class":119},[102,87047,87048],{"class":104,"line":2359},[102,87049,652],{"emptyLinePlaceholder":651},[102,87051,87052,87054,87056],{"class":104,"line":2373},[102,87053,1208],{"class":119},[102,87055,59665],{"class":59165},[102,87057,59172],{"class":119},[102,87059,87060,87062,87064,87066,87068,87071],{"class":104,"line":2378},[102,87061,60009],{"class":119},[102,87063,59476],{"class":59165},[102,87065,61351],{"class":112},[102,87067,260],{"class":119},[102,87069,87070],{"class":278},"\"filter\"",[102,87072,59172],{"class":119},[102,87074,87075,87077,87079,87081,87083,87085,87088,87090,87092,87095,87097],{"class":104,"line":2384},[102,87076,59206],{"class":119},[102,87078,9275],{"class":59165},[102,87080,68922],{"class":112},[102,87082,260],{"class":119},[102,87084,68927],{"class":278},[102,87086,87087],{"class":112}," data-index",[102,87089,260],{"class":119},[102,87091,12491],{"class":278},[102,87093,87094],{"class":119},">0-100元\u003C\u002F",[102,87096,9275],{"class":59165},[102,87098,59172],{"class":119},[102,87100,87101,87103,87105,87107,87109,87111,87113,87115,87117,87120,87122],{"class":104,"line":2389},[102,87102,59206],{"class":119},[102,87104,9275],{"class":59165},[102,87106,68922],{"class":112},[102,87108,260],{"class":119},[102,87110,68927],{"class":278},[102,87112,87087],{"class":112},[102,87114,260],{"class":119},[102,87116,12514],{"class":278},[102,87118,87119],{"class":119},">100-300元\u003C\u002F",[102,87121,9275],{"class":59165},[102,87123,59172],{"class":119},[102,87125,87126,87128,87130,87132,87134,87136,87138,87140,87142,87145,87147],{"class":104,"line":2403},[102,87127,59206],{"class":119},[102,87129,9275],{"class":59165},[102,87131,68922],{"class":112},[102,87133,260],{"class":119},[102,87135,68927],{"class":278},[102,87137,87087],{"class":112},[102,87139,260],{"class":119},[102,87141,12527],{"class":278},[102,87143,87144],{"class":119},">300元以上\u003C\u002F",[102,87146,9275],{"class":59165},[102,87148,59172],{"class":119},[102,87150,87151,87153,87155,87157,87159,87161,87164,87166],{"class":104,"line":2408},[102,87152,59206],{"class":119},[102,87154,9275],{"class":59165},[102,87156,68922],{"class":112},[102,87158,260],{"class":119},[102,87160,68927],{"class":278},[102,87162,87163],{"class":119},">全部区间\u003C\u002F",[102,87165,9275],{"class":59165},[102,87167,59172],{"class":119},[102,87169,87170,87172,87174],{"class":104,"line":2413},[102,87171,60282],{"class":119},[102,87173,59476],{"class":59165},[102,87175,59172],{"class":119},[102,87177,87178,87180,87182,87184,87186,87188],{"class":104,"line":2427},[102,87179,60009],{"class":119},[102,87181,59476],{"class":59165},[102,87183,61351],{"class":112},[102,87185,260],{"class":119},[102,87187,70473],{"class":278},[102,87189,59172],{"class":119},[102,87191,87192],{"class":104,"line":2440},[102,87193,87194],{"class":126},"    \u003C!-- \u003Cdiv class=\"item\">\n",[102,87196,87197],{"class":104,"line":2445},[102,87198,87199],{"class":126},"      \u003Cimg src=\"\" alt=\"\">\n",[102,87201,87202],{"class":104,"line":2458},[102,87203,87204],{"class":126},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[102,87206,87207],{"class":104,"line":2463},[102,87208,87209],{"class":126},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[102,87211,87212],{"class":104,"line":2468},[102,87213,87214],{"class":126},"    \u003C\u002Fdiv> -->\n",[102,87216,87217,87219,87221],{"class":104,"line":2473},[102,87218,60282],{"class":119},[102,87220,59476],{"class":59165},[102,87222,59172],{"class":119},[102,87224,87225,87227,87229],{"class":104,"line":2486},[102,87226,60009],{"class":119},[102,87228,59678],{"class":59165},[102,87230,59172],{"class":119},[102,87232,87233],{"class":104,"line":2491},[102,87234,87235],{"class":126},"    \u002F\u002F 2. 初始化数据\n",[102,87237,87238,87240,87243,87245],{"class":104,"line":40498},[102,87239,19961],{"class":108},[102,87241,87242],{"class":187}," goodsList",[102,87244,22296],{"class":108},[102,87246,63312],{"class":119},[102,87248,87249],{"class":104,"line":40504},[102,87250,87251],{"class":119},"      {\n",[102,87253,87254,87257,87260],{"class":104,"line":40510},[102,87255,87256],{"class":119},"        id: ",[102,87258,87259],{"class":278},"'4001172'",[102,87261,39331],{"class":119},[102,87263,87264,87267,87270],{"class":104,"line":40516},[102,87265,87266],{"class":119},"        name: ",[102,87268,87269],{"class":278},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[102,87271,39331],{"class":119},[102,87273,87274,87277,87280],{"class":104,"line":40522},[102,87275,87276],{"class":119},"        price: ",[102,87278,87279],{"class":278},"'289.00'",[102,87281,39331],{"class":119},[102,87283,87284,87287,87290],{"class":104,"line":40533},[102,87285,87286],{"class":119},"        picture: ",[102,87288,87289],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[102,87291,39331],{"class":119},[102,87293,87294],{"class":104,"line":40539},[102,87295,85757],{"class":119},[102,87297,87298],{"class":104,"line":40559},[102,87299,87251],{"class":119},[102,87301,87302,87304,87307],{"class":104,"line":40565},[102,87303,87256],{"class":119},[102,87305,87306],{"class":278},"'4001594'",[102,87308,39331],{"class":119},[102,87310,87311,87313,87316],{"class":104,"line":40576},[102,87312,87266],{"class":119},[102,87314,87315],{"class":278},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[102,87317,39331],{"class":119},[102,87319,87320,87322,87325],{"class":104,"line":40582},[102,87321,87276],{"class":119},[102,87323,87324],{"class":278},"'288.00'",[102,87326,39331],{"class":119},[102,87328,87329,87331,87334],{"class":104,"line":40588},[102,87330,87286],{"class":119},[102,87332,87333],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[102,87335,39331],{"class":119},[102,87337,87338],{"class":104,"line":40594},[102,87339,85757],{"class":119},[102,87341,87342],{"class":104,"line":40600},[102,87343,87251],{"class":119},[102,87345,87346,87348,87351],{"class":104,"line":40606},[102,87347,87256],{"class":119},[102,87349,87350],{"class":278},"'4001009'",[102,87352,39331],{"class":119},[102,87354,87355,87357,87360],{"class":104,"line":40612},[102,87356,87266],{"class":119},[102,87358,87359],{"class":278},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[102,87361,39331],{"class":119},[102,87363,87364,87366,87369],{"class":104,"line":40618},[102,87365,87276],{"class":119},[102,87367,87368],{"class":278},"'109.00'",[102,87370,39331],{"class":119},[102,87372,87373,87375,87378],{"class":104,"line":40638},[102,87374,87286],{"class":119},[102,87376,87377],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[102,87379,39331],{"class":119},[102,87381,87382],{"class":104,"line":40644},[102,87383,85757],{"class":119},[102,87385,87386],{"class":104,"line":40660},[102,87387,87251],{"class":119},[102,87389,87390,87392,87395],{"class":104,"line":40666},[102,87391,87256],{"class":119},[102,87393,87394],{"class":278},"'4001874'",[102,87396,39331],{"class":119},[102,87398,87399,87401,87404],{"class":104,"line":40680},[102,87400,87266],{"class":119},[102,87402,87403],{"class":278},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[102,87405,39331],{"class":119},[102,87407,87408,87410,87413],{"class":104,"line":40686},[102,87409,87276],{"class":119},[102,87411,87412],{"class":278},"'488.00'",[102,87414,39331],{"class":119},[102,87416,87417,87419,87422],{"class":104,"line":40701},[102,87418,87286],{"class":119},[102,87420,87421],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[102,87423,39331],{"class":119},[102,87425,87426],{"class":104,"line":40707},[102,87427,85757],{"class":119},[102,87429,87430],{"class":104,"line":40716},[102,87431,87251],{"class":119},[102,87433,87434,87436,87439],{"class":104,"line":40722},[102,87435,87256],{"class":119},[102,87437,87438],{"class":278},"'4001649'",[102,87440,39331],{"class":119},[102,87442,87443,87445,87448],{"class":104,"line":40731},[102,87444,87266],{"class":119},[102,87446,87447],{"class":278},"'大师监制龙泉青瓷茶叶罐'",[102,87449,39331],{"class":119},[102,87451,87452,87454,87457],{"class":104,"line":40737},[102,87453,87276],{"class":119},[102,87455,87456],{"class":278},"'139.00'",[102,87458,39331],{"class":119},[102,87460,87461,87463,87466],{"class":104,"line":40743},[102,87462,87286],{"class":119},[102,87464,87465],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[102,87467,39331],{"class":119},[102,87469,87470],{"class":104,"line":40752},[102,87471,85757],{"class":119},[102,87473,87474],{"class":104,"line":40758},[102,87475,87251],{"class":119},[102,87477,87478,87480,87483],{"class":104,"line":40769},[102,87479,87256],{"class":119},[102,87481,87482],{"class":278},"'3997185'",[102,87484,39331],{"class":119},[102,87486,87487,87489,87492],{"class":104,"line":40775},[102,87488,87266],{"class":119},[102,87490,87491],{"class":278},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[102,87493,39331],{"class":119},[102,87495,87496,87498,87501],{"class":104,"line":40794},[102,87497,87276],{"class":119},[102,87499,87500],{"class":278},"'108.00'",[102,87502,39331],{"class":119},[102,87504,87505,87507,87510],{"class":104,"line":40800},[102,87506,87286],{"class":119},[102,87508,87509],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[102,87511,39331],{"class":119},[102,87513,87514],{"class":104,"line":40811},[102,87515,85757],{"class":119},[102,87517,87518],{"class":104,"line":40817},[102,87519,87251],{"class":119},[102,87521,87522,87524,87527],{"class":104,"line":40837},[102,87523,87256],{"class":119},[102,87525,87526],{"class":278},"'3997403'",[102,87528,39331],{"class":119},[102,87530,87531,87533,87536],{"class":104,"line":40853},[102,87532,87266],{"class":119},[102,87534,87535],{"class":278},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[102,87537,39331],{"class":119},[102,87539,87540,87542,87545],{"class":104,"line":40859},[102,87541,87276],{"class":119},[102,87543,87544],{"class":278},"'100.00'",[102,87546,39331],{"class":119},[102,87548,87549,87551,87554],{"class":104,"line":40873},[102,87550,87286],{"class":119},[102,87552,87553],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[102,87555,39331],{"class":119},[102,87557,87558],{"class":104,"line":40879},[102,87559,85757],{"class":119},[102,87561,87562],{"class":104,"line":40885},[102,87563,87251],{"class":119},[102,87565,87566,87568,87571],{"class":104,"line":40896},[102,87567,87256],{"class":119},[102,87569,87570],{"class":278},"'3998274'",[102,87572,39331],{"class":119},[102,87574,87575,87577,87580],{"class":104,"line":40902},[102,87576,87266],{"class":119},[102,87578,87579],{"class":278},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[102,87581,39331],{"class":119},[102,87583,87584,87586,87588],{"class":104,"line":40908},[102,87585,87276],{"class":119},[102,87587,87456],{"class":278},[102,87589,39331],{"class":119},[102,87591,87592,87594,87597],{"class":104,"line":40918},[102,87593,87286],{"class":119},[102,87595,87596],{"class":278},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[102,87598,39331],{"class":119},[102,87600,87601],{"class":104,"line":40924},[102,87602,85757],{"class":119},[102,87604,87605],{"class":104,"line":40935},[102,87606,60974],{"class":119},[102,87608,87609],{"class":104,"line":40941},[102,87610,652],{"emptyLinePlaceholder":651},[102,87612,87613],{"class":104,"line":40951},[102,87614,87615],{"class":126},"    \u002F\u002F 1.渲染函数\n",[102,87617,87618,87620,87622,87624,87626],{"class":104,"line":40956},[102,87619,77949],{"class":108},[102,87621,77952],{"class":112},[102,87623,380],{"class":119},[102,87625,12693],{"class":386},[102,87627,1105],{"class":119},[102,87629,87630],{"class":104,"line":40962},[102,87631,87632],{"class":126},"      \u002F\u002F 声明空字符串\n",[102,87634,87635,87638,87641,87643],{"class":104,"line":41011},[102,87636,87637],{"class":108},"      let",[102,87639,87640],{"class":119}," str ",[102,87642,260],{"class":108},[102,87644,77969],{"class":278},[102,87646,87647],{"class":104,"line":41058},[102,87648,77974],{"class":126},[102,87650,87651,87653,87656,87658,87661,87664],{"class":104,"line":41063},[102,87652,65872],{"class":119},[102,87654,87655],{"class":112},"forEach",[102,87657,380],{"class":119},[102,87659,87660],{"class":386},"item",[102,87662,87663],{"class":108}," =>",[102,87665,1077],{"class":119},[102,87667,87668,87670,87673,87676,87678,87681,87683,87686,87689,87691],{"class":104,"line":41069},[102,87669,69135],{"class":108},[102,87671,87672],{"class":119}," { ",[102,87674,87675],{"class":187},"name",[102,87677,2571],{"class":119},[102,87679,87680],{"class":187},"price",[102,87682,2571],{"class":119},[102,87684,87685],{"class":187},"picture",[102,87687,87688],{"class":119}," } ",[102,87690,260],{"class":108},[102,87692,87693],{"class":119}," item\n",[102,87695,87696,87699,87701],{"class":104,"line":41088},[102,87697,87698],{"class":119},"        str ",[102,87700,18244],{"class":108},[102,87702,78033],{"class":278},[102,87704,87705],{"class":104,"line":41094},[102,87706,87707],{"class":278},"          \u003Cdiv class=\"item\">\n",[102,87709,87710,87713,87715],{"class":104,"line":41114},[102,87711,87712],{"class":278},"            \u003Cimg src=\"${",[102,87714,87685],{"class":119},[102,87716,87717],{"class":278},"}\" alt=\"\">\n",[102,87719,87720,87723,87725],{"class":104,"line":41120},[102,87721,87722],{"class":278},"            \u003Cp class=\"name\">${",[102,87724,87675],{"class":119},[102,87726,87727],{"class":278},"}\u003C\u002Fp>\n",[102,87729,87730,87733,87735],{"class":104,"line":41126},[102,87731,87732],{"class":278},"            \u003Cp class=\"price\">${",[102,87734,87680],{"class":119},[102,87736,87727],{"class":278},[102,87738,87739],{"class":104,"line":41136},[102,87740,87741],{"class":278},"          \u003C\u002Fdiv>\n",[102,87743,87744],{"class":104,"line":41141},[102,87745,87746],{"class":278},"        `\n",[102,87748,87749],{"class":104,"line":41147},[102,87750,72680],{"class":119},[102,87752,87753],{"class":104,"line":41163},[102,87754,87755],{"class":126},"      \u002F\u002F 追加给List\n",[102,87757,87758,87760,87762,87764,87767,87769,87771],{"class":104,"line":41208},[102,87759,63636],{"class":119},[102,87761,62264],{"class":112},[102,87763,380],{"class":119},[102,87765,87766],{"class":278},"'.list'",[102,87768,82114],{"class":119},[102,87770,260],{"class":108},[102,87772,81850],{"class":119},[102,87774,87775],{"class":104,"line":41214},[102,87776,205],{"class":119},[102,87778,87779],{"class":104,"line":41220},[102,87780,87781],{"class":126},"    \u002F\u002F 页面一打开就需要渲染\n",[102,87783,87784,87787],{"class":104,"line":41226},[102,87785,87786],{"class":112},"    render",[102,87788,87789],{"class":119},"(goodsList)\n",[102,87791,87792],{"class":104,"line":41237},[102,87793,87794],{"class":126},"    \u002F\u002F 2.过滤筛选\n",[102,87796,87797,87799,87801,87803,87806,87808,87810,87812,87814,87816,87818,87820],{"class":104,"line":41243},[102,87798,60272],{"class":119},[102,87800,62264],{"class":112},[102,87802,380],{"class":119},[102,87804,87805],{"class":278},"'.filter'",[102,87807,38691],{"class":119},[102,87809,65678],{"class":112},[102,87811,380],{"class":119},[102,87813,65683],{"class":278},[102,87815,2571],{"class":119},[102,87817,9116],{"class":386},[102,87819,87663],{"class":108},[102,87821,1077],{"class":119},[102,87823,87824],{"class":104,"line":41249},[102,87825,87826],{"class":126},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[102,87828,87829,87831,87833,87836,87838,87840,87842,87844],{"class":104,"line":41255},[102,87830,66093],{"class":108},[102,87832,87672],{"class":119},[102,87834,87835],{"class":187},"tagName",[102,87837,2571],{"class":119},[102,87839,39402],{"class":187},[102,87841,87688],{"class":119},[102,87843,260],{"class":108},[102,87845,87846],{"class":119}," e.target\n",[102,87848,87849],{"class":104,"line":41273},[102,87850,87851],{"class":126},"      \u002F\u002F 判断\n",[102,87853,87854,87856,87858,87860,87862],{"class":104,"line":41287},[102,87855,62345],{"class":108},[102,87857,74899],{"class":119},[102,87859,62351],{"class":108},[102,87861,76121],{"class":278},[102,87863,1105],{"class":119},[102,87865,87866],{"class":104,"line":41296},[102,87867,87868],{"class":126},"        \u002F\u002F console.log(11)\n",[102,87870,87871],{"class":104,"line":41305},[102,87872,87873],{"class":126},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[102,87875,87876],{"class":104,"line":41314},[102,87877,87878],{"class":126},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[102,87880,87881,87883,87885,87887],{"class":104,"line":41323},[102,87882,59695],{"class":108},[102,87884,59698],{"class":119},[102,87886,260],{"class":108},[102,87888,87889],{"class":119}," goodsList\n",[102,87891,87892,87894,87897,87899,87902],{"class":104,"line":41329},[102,87893,1202],{"class":108},[102,87895,87896],{"class":119}," (dataset.index ",[102,87898,62351],{"class":108},[102,87900,87901],{"class":278}," '1'",[102,87903,1105],{"class":119},[102,87905,87906,87909,87911,87914,87917,87919,87921,87923,87926,87928,87930,87933,87935,87937,87939],{"class":104,"line":41335},[102,87907,87908],{"class":119},"          arr ",[102,87910,260],{"class":108},[102,87912,87913],{"class":119}," goodsList.",[102,87915,87916],{"class":112},"filter",[102,87918,380],{"class":119},[102,87920,87660],{"class":386},[102,87922,87663],{"class":108},[102,87924,87925],{"class":119}," item.price ",[102,87927,10571],{"class":108},[102,87929,866],{"class":187},[102,87931,87932],{"class":108}," &&",[102,87934,87925],{"class":119},[102,87936,10461],{"class":108},[102,87938,14552],{"class":187},[102,87940,390],{"class":119},[102,87942,87943,87946,87948,87950,87952,87954,87957],{"class":104,"line":41343},[102,87944,87945],{"class":119},"        } ",[102,87947,10562],{"class":108},[102,87949,10565],{"class":108},[102,87951,87896],{"class":119},[102,87953,62351],{"class":108},[102,87955,87956],{"class":278}," '2'",[102,87958,1105],{"class":119},[102,87960,87961,87963,87965,87967,87969,87971,87973,87975,87977,87979,87981,87983,87985,87987,87990],{"class":104,"line":41348},[102,87962,87908],{"class":119},[102,87964,260],{"class":108},[102,87966,87913],{"class":119},[102,87968,87916],{"class":112},[102,87970,380],{"class":119},[102,87972,87660],{"class":386},[102,87974,87663],{"class":108},[102,87976,87925],{"class":119},[102,87978,10571],{"class":108},[102,87980,14552],{"class":187},[102,87982,87932],{"class":108},[102,87984,87925],{"class":119},[102,87986,10461],{"class":108},[102,87988,87989],{"class":187}," 300",[102,87991,390],{"class":119},[102,87993,87994,87996,87998,88000,88002,88004,88007],{"class":104,"line":41354},[102,87995,87945],{"class":119},[102,87997,10562],{"class":108},[102,87999,10565],{"class":108},[102,88001,87896],{"class":119},[102,88003,62351],{"class":108},[102,88005,88006],{"class":278}," '3'",[102,88008,1105],{"class":119},[102,88010,88011,88013,88015,88017,88019,88021,88023,88025,88027,88029,88031],{"class":104,"line":41365},[102,88012,87908],{"class":119},[102,88014,260],{"class":108},[102,88016,87913],{"class":119},[102,88018,87916],{"class":112},[102,88020,380],{"class":119},[102,88022,87660],{"class":386},[102,88024,87663],{"class":108},[102,88026,87925],{"class":119},[102,88028,10571],{"class":108},[102,88030,87989],{"class":187},[102,88032,390],{"class":119},[102,88034,88035],{"class":104,"line":41371},[102,88036,1252],{"class":119},[102,88038,88039],{"class":104,"line":41391},[102,88040,88041],{"class":126},"        \u002F\u002F 渲染函数\n",[102,88043,88044,88046],{"class":104,"line":41397},[102,88045,78273],{"class":112},[102,88047,60277],{"class":119},[102,88049,88050],{"class":104,"line":41403},[102,88051,60263],{"class":119},[102,88053,88054],{"class":104,"line":41409},[102,88055,652],{"emptyLinePlaceholder":651},[102,88057,88058],{"class":104,"line":41426},[102,88059,41326],{"class":119},[102,88061,88062,88064,88066],{"class":104,"line":41432},[102,88063,60282],{"class":119},[102,88065,59678],{"class":59165},[102,88067,59172],{"class":119},[102,88069,88070,88072,88074],{"class":104,"line":41438},[102,88071,59650],{"class":119},[102,88073,59665],{"class":59165},[102,88075,59172],{"class":119},[102,88077,88078],{"class":104,"line":41444},[102,88079,652],{"emptyLinePlaceholder":651},[102,88081,88082,88084,88086],{"class":104,"line":41450},[102,88083,59650],{"class":119},[102,88085,58500],{"class":59165},[102,88087,59172],{"class":119},[43,88089,88091],{"id":88090},"_410-深入了解对象","4.10 深入了解对象",[48,88093,88095],{"id":88094},"_4101-创建对象","4.10.1 创建对象",[14,88097,88098],{},[6750,88099],{"alt":98,"src":88100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,88102,88103],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[48,88105,88107],{"id":88106},"_4102-构造函数","4.10.2 构造函数",[14,88109,88110,88113],{},[18,88111,88112],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,88115,88116,88119],{},[18,88117,88118],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[93,88121,88123],{"className":58498,"code":88122,"language":58500,"meta":98,"style":98},"\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",[83,88124,88125,88133,88138,88159,88172,88184,88196,88200,88205,88232,88237,88264],{"__ignoreMap":98},[102,88126,88127,88129,88131],{"class":104,"line":105},[102,88128,1208],{"class":119},[102,88130,59678],{"class":59165},[102,88132,59172],{"class":119},[102,88134,88135],{"class":104,"line":116},[102,88136,88137],{"class":126},"\u002F\u002F例：\n",[102,88139,88140,88142,88145,88147,88149,88151,88153,88155,88157],{"class":104,"line":123},[102,88141,62314],{"class":108},[102,88143,88144],{"class":112}," Pig",[102,88146,380],{"class":119},[102,88148,87675],{"class":386},[102,88150,1618],{"class":119},[102,88152,78086],{"class":386},[102,88154,1618],{"class":119},[102,88156,78103],{"class":386},[102,88158,1105],{"class":119},[102,88160,88161,88164,88167,88169],{"class":104,"line":130},[102,88162,88163],{"class":187},"    this",[102,88165,88166],{"class":119},".name",[102,88168,260],{"class":108},[102,88170,88171],{"class":119},"name\n",[102,88173,88174,88176,88179,88181],{"class":104,"line":136},[102,88175,88163],{"class":187},[102,88177,88178],{"class":119},".age",[102,88180,260],{"class":108},[102,88182,88183],{"class":119},"age\n",[102,88185,88186,88188,88191,88193],{"class":104,"line":142},[102,88187,88163],{"class":187},[102,88189,88190],{"class":119},".gender",[102,88192,260],{"class":108},[102,88194,88195],{"class":119},"gender    \n",[102,88197,88198],{"class":104,"line":148},[102,88199,301],{"class":119},[102,88201,88202],{"class":104,"line":157},[102,88203,88204],{"class":126},"\u002F\u002F创建佩奇对象\n",[102,88206,88207,88209,88212,88214,88216,88218,88221,88223,88225,88227,88230],{"class":104,"line":163},[102,88208,4456],{"class":108},[102,88210,88211],{"class":187}," Peppa",[102,88213,6389],{"class":108},[102,88215,88144],{"class":112},[102,88217,380],{"class":119},[102,88219,88220],{"class":278},"'佩奇'",[102,88222,1618],{"class":119},[102,88224,9379],{"class":187},[102,88226,1618],{"class":119},[102,88228,88229],{"class":278},"'女'",[102,88231,390],{"class":119},[102,88233,88234],{"class":104,"line":175},[102,88235,88236],{"class":126},"\u002F\u002F创建乔治对象\n",[102,88238,88239,88241,88244,88246,88248,88250,88253,88255,88257,88259,88262],{"class":104,"line":181},[102,88240,4456],{"class":108},[102,88242,88243],{"class":187}," George",[102,88245,6389],{"class":108},[102,88247,88144],{"class":112},[102,88249,380],{"class":119},[102,88251,88252],{"class":278},"'乔治'",[102,88254,1618],{"class":119},[102,88256,7049],{"class":187},[102,88258,1618],{"class":119},[102,88260,88261],{"class":278},"'男'",[102,88263,390],{"class":119},[102,88265,88266,88268,88270],{"class":104,"line":202},[102,88267,59650],{"class":119},[102,88269,59678],{"class":59165},[102,88271,59172],{"class":119},[14,88273,88274],{},[6750,88275],{"alt":98,"src":88276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,88278,88279],{},[6750,88280],{"alt":98,"src":88281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,88283,88284],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,88286,88287],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,88289,88290],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,88292,88293],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,88295,88296],{},"这里用等号是因为：对象.属性=值",[14,88298,88299],{},"①利用对象字面量创建对象",[14,88301,88302],{},"const o={",[14,88304,88305],{},"name:'pink'",[14,88307,88308],{},"} ②利用new Object创建对象",[14,88310,88311],{},"const o=new Object({name:'pink'})",[14,88313,88314],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,88316,88317],{},"构造函数创建对象的执行过程：",[14,88319,88320],{},[6750,88321],{"alt":98,"src":88322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[48,88324,88326],{"id":88325},"_4103-实例成员","4.10.3 实例成员",[14,88328,88329],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[87,88331,88332,88335,88338],{},[62,88333,88334],{},"实例对象的属性和方法即为实例成员",[62,88336,88337],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[62,88339,88340],{},"构造函数创建的实例对象彼此独立互不影响",[48,88342,88344],{"id":88343},"_4104-静态成员","4.10.4 静态成员",[14,88346,88347],{},[6750,88348],{"alt":98,"src":88349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,88351,88352],{},"静态成员有Date.now() Math.PI Math.random()",[14,88354,88355],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,88357,88358],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,88360,88361],{},"function Pig(name) n {",[14,88363,88364],{},"this.name=name",[14,88366,9967],{},[14,88368,88369],{},"Pig.eyes=2",[14,88371,88372],{},"Pig.sayHai=function () { console.log(this) }",[14,88374,88375],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,88377,88378],{},"console.log(Pig.eyes) \u002F\u002F2",[14,88380,20072],{},[87,88382,88383,88386,88389,88392,88395],{},[62,88384,88385],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[62,88387,88388],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[62,88390,88391],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[62,88393,88394],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[62,88396,88397],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,88399,88400],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[48,88402,88404],{"id":88403},"_4105-内置构造函数","4.10.5 内置构造函数",[14,88406,88407],{},"内置构造函数包含：",[14,88409,88410],{},[6750,88411],{"alt":98,"src":88412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,88414,88415],{},[6750,88416],{"alt":98,"src":88417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,88419,88420],{},"这些基本数据类型，js对他们进行了包装",[59678,88422,88423],{},"\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",[7601,88425,88427],{"id":88426},"_41051-object","4.10.5.1 Object",[14,88429,88430],{},"Object 是内置的构造函数，用于创建普通对象",[14,88432,88433],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[93,88435,88437],{"className":58498,"code":88436,"language":58500,"meta":98,"style":98},"const user=new Object({name:'小明',age:15})\n",[83,88438,88439],{"__ignoreMap":98},[102,88440,88441],{"class":104,"line":105},[102,88442,88436],{"class":119},[14,88444,88445],{},"三个常用的静态方法：",[8518,88447,88449],{"id":88448},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,88451,88452],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,88454,88455],{},[6750,88456],{"alt":98,"src":88457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,88459,88460],{},[6750,88461],{"alt":98,"src":88462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[93,88464,88466],{"className":60932,"code":88465,"language":60934,"meta":98,"style":98},"\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",[83,88467,88468,88476,88484,88489,88494,88499,88504,88509,88514,88522],{"__ignoreMap":98},[102,88469,88470,88472,88474],{"class":104,"line":105},[102,88471,1208],{"class":119},[102,88473,59665],{"class":59165},[102,88475,59172],{"class":119},[102,88477,88478,88480,88482],{"class":104,"line":116},[102,88479,60009],{"class":119},[102,88481,59678],{"class":59165},[102,88483,59172],{"class":119},[102,88485,88486],{"class":104,"line":123},[102,88487,88488],{"class":119},"    const o = { name: 'pink', age: 6 }\n",[102,88490,88491],{"class":104,"line":130},[102,88492,88493],{"class":119},"    \u002F\u002F 获得所有属性名\n",[102,88495,88496],{"class":104,"line":136},[102,88497,88498],{"class":119},"    const arr = Object.keys(o)\n",[102,88500,88501],{"class":104,"line":142},[102,88502,88503],{"class":119},"    console.log(arr)\n",[102,88505,88506],{"class":104,"line":148},[102,88507,88508],{"class":119},"    \u002F\u002F 获得所有属性值\n",[102,88510,88511],{"class":104,"line":157},[102,88512,88513],{"class":119},"    console.log(Object.values(o))\n",[102,88515,88516,88518,88520],{"class":104,"line":163},[102,88517,60282],{"class":119},[102,88519,59678],{"class":59165},[102,88521,59172],{"class":119},[102,88523,88524,88526,88528],{"class":104,"line":175},[102,88525,59650],{"class":119},[102,88527,59665],{"class":59165},[102,88529,59172],{"class":119},[8518,88531,88533],{"id":88532},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,88535,88536],{},"Object.assign(oo,o)",[14,88538,88539],{},"后的东西添加给前 是追加",[14,88541,88542],{},[6750,88543],{"alt":98,"src":88544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,88546,88547],{},[6750,88548],{"alt":98,"src":88549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[93,88551,88553],{"className":60932,"code":88552,"language":60934,"meta":98,"style":98},"\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",[83,88554,88555,88563,88571,88575,88579,88583,88587,88591,88595,88600,88605,88610,88615,88620,88628],{"__ignoreMap":98},[102,88556,88557,88559,88561],{"class":104,"line":105},[102,88558,1208],{"class":119},[102,88560,59665],{"class":59165},[102,88562,59172],{"class":119},[102,88564,88565,88567,88569],{"class":104,"line":116},[102,88566,60009],{"class":119},[102,88568,59678],{"class":59165},[102,88570,59172],{"class":119},[102,88572,88573],{"class":104,"line":123},[102,88574,88488],{"class":119},[102,88576,88577],{"class":104,"line":130},[102,88578,88493],{"class":119},[102,88580,88581],{"class":104,"line":136},[102,88582,88498],{"class":119},[102,88584,88585],{"class":104,"line":142},[102,88586,88503],{"class":119},[102,88588,88589],{"class":104,"line":148},[102,88590,88508],{"class":119},[102,88592,88593],{"class":104,"line":157},[102,88594,88513],{"class":119},[102,88596,88597],{"class":104,"line":163},[102,88598,88599],{"class":119},"    const oo = {}\n",[102,88601,88602],{"class":104,"line":175},[102,88603,88604],{"class":119},"    Object.assign(oo, o)\n",[102,88606,88607],{"class":104,"line":181},[102,88608,88609],{"class":119},"    console.log(oo)\n",[102,88611,88612],{"class":104,"line":202},[102,88613,88614],{"class":119},"    Object.assign(o, { gender: '女' })\n",[102,88616,88617],{"class":104,"line":208},[102,88618,88619],{"class":119},"    console.log(o)\n",[102,88621,88622,88624,88626],{"class":104,"line":214},[102,88623,60282],{"class":119},[102,88625,59678],{"class":59165},[102,88627,59172],{"class":119},[102,88629,88630,88632,88634],{"class":104,"line":225},[102,88631,59650],{"class":119},[102,88633,59665],{"class":59165},[102,88635,59172],{"class":119},[14,88637,88638],{},[6750,88639],{"alt":98,"src":88640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[7601,88642,88644],{"id":88643},"_41052-array","4.10.5.2 Array",[14,88646,88647],{},"Array 是内置的构造函数，用于创建数组",[14,88649,88650],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[93,88652,88654],{"className":58498,"code":88653,"language":58500,"meta":98,"style":98},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[83,88655,88656,88661],{"__ignoreMap":98},[102,88657,88658],{"class":104,"line":105},[102,88659,88660],{"class":119},"const arr=new Array(3,5)\n",[102,88662,88663],{"class":104,"line":116},[102,88664,88665],{"class":119},"console.log(arr)  \u002F\u002F[3,5]\n",[14,88667,88668],{},"Array的实例方法，这个方法是实例成员",[14,88670,88671],{},[6750,88672],{"alt":98,"src":88673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[8518,88675,88677],{"id":88676},"_410521-reduce","4.10.5.2.1 reduce",[14,88679,88680],{},[6750,88681],{"alt":98,"src":88682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[93,88684,88686],{"className":60932,"code":88685,"language":60934,"meta":98,"style":98},"\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",[83,88687,88688,88696,88704,88709,88714,88719,88724,88728,88733,88738,88743,88747,88752,88757,88761,88766,88771,88776,88784],{"__ignoreMap":98},[102,88689,88690,88692,88694],{"class":104,"line":105},[102,88691,1208],{"class":119},[102,88693,59665],{"class":59165},[102,88695,59172],{"class":119},[102,88697,88698,88700,88702],{"class":104,"line":116},[102,88699,60009],{"class":119},[102,88701,59678],{"class":59165},[102,88703,59172],{"class":119},[102,88705,88706],{"class":104,"line":123},[102,88707,88708],{"class":119},"    const arr = [1, 5, 8]\n",[102,88710,88711],{"class":104,"line":130},[102,88712,88713],{"class":119},"    \u002F\u002F 1.没有初始值\n",[102,88715,88716],{"class":104,"line":136},[102,88717,88718],{"class":119},"    const total = arr.reduce(function (prev, current) {\n",[102,88720,88721],{"class":104,"line":142},[102,88722,88723],{"class":119},"      return prev + current\n",[102,88725,88726],{"class":104,"line":148},[102,88727,41326],{"class":119},[102,88729,88730],{"class":104,"line":157},[102,88731,88732],{"class":119},"    console.log(total)   \u002F\u002F14\n",[102,88734,88735],{"class":104,"line":163},[102,88736,88737],{"class":119},"    \u002F\u002F 2.有初始值\n",[102,88739,88740],{"class":104,"line":175},[102,88741,88742],{"class":119},"    const total1 = arr.reduce(function (prev, current) {\n",[102,88744,88745],{"class":104,"line":181},[102,88746,88723],{"class":119},[102,88748,88749],{"class":104,"line":202},[102,88750,88751],{"class":119},"    }, 10)\n",[102,88753,88754],{"class":104,"line":208},[102,88755,88756],{"class":119},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[102,88758,88759],{"class":104,"line":214},[102,88760,652],{"emptyLinePlaceholder":651},[102,88762,88763],{"class":104,"line":225},[102,88764,88765],{"class":119},"    \u002F\u002F 3.箭头函数写法\n",[102,88767,88768],{"class":104,"line":230},[102,88769,88770],{"class":119},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[102,88772,88773],{"class":104,"line":236},[102,88774,88775],{"class":119},"    console.log(total2)   \u002F\u002F24\n",[102,88777,88778,88780,88782],{"class":104,"line":242},[102,88779,60282],{"class":119},[102,88781,59678],{"class":59165},[102,88783,59172],{"class":119},[102,88785,88786,88788,88790],{"class":104,"line":248},[102,88787,59650],{"class":119},[102,88789,59665],{"class":59165},[102,88791,59172],{"class":119},[14,88793,88794],{},"执行过程：",[87,88796,88797,88800,88803],{},[62,88798,88799],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[62,88801,88802],{},"每一次循环，把返回值给作为下一次循环的上一次值",[62,88804,88805],{},"如果有起始值，则起始值作为上一次值",[93,88807,88809],{"className":60932,"code":88808,"language":60934,"meta":98,"style":98},"\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",[83,88810,88811,88819,88827,88831,88835,88839,88843,88847,88851,88856,88861,88866,88871,88876,88880,88884,88888,88892,88896,88900,88905,88909,88914,88918,88923,88928,88932,88936,88940,88948],{"__ignoreMap":98},[102,88812,88813,88815,88817],{"class":104,"line":105},[102,88814,1208],{"class":119},[102,88816,59665],{"class":59165},[102,88818,59172],{"class":119},[102,88820,88821,88823,88825],{"class":104,"line":116},[102,88822,60009],{"class":119},[102,88824,59678],{"class":59165},[102,88826,59172],{"class":119},[102,88828,88829],{"class":104,"line":123},[102,88830,88708],{"class":119},[102,88832,88833],{"class":104,"line":130},[102,88834,88713],{"class":119},[102,88836,88837],{"class":104,"line":136},[102,88838,88718],{"class":119},[102,88840,88841],{"class":104,"line":142},[102,88842,88723],{"class":119},[102,88844,88845],{"class":104,"line":148},[102,88846,41326],{"class":119},[102,88848,88849],{"class":104,"line":157},[102,88850,88732],{"class":119},[102,88852,88853],{"class":104,"line":163},[102,88854,88855],{"class":119},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[102,88857,88858],{"class":104,"line":175},[102,88859,88860],{"class":119},"    \u002F\u002F     1              5                    6\n",[102,88862,88863],{"class":104,"line":181},[102,88864,88865],{"class":119},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[102,88867,88868],{"class":104,"line":202},[102,88869,88870],{"class":119},"    \u002F\u002F     6              8                    14\n",[102,88872,88873],{"class":104,"line":208},[102,88874,88875],{"class":119},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[102,88877,88878],{"class":104,"line":214},[102,88879,88737],{"class":119},[102,88881,88882],{"class":104,"line":225},[102,88883,88742],{"class":119},[102,88885,88886],{"class":104,"line":230},[102,88887,88723],{"class":119},[102,88889,88890],{"class":104,"line":236},[102,88891,88751],{"class":119},[102,88893,88894],{"class":104,"line":242},[102,88895,88756],{"class":119},[102,88897,88898],{"class":104,"line":248},[102,88899,88855],{"class":119},[102,88901,88902],{"class":104,"line":254},[102,88903,88904],{"class":119},"    \u002F\u002F     10             1                     11\n",[102,88906,88907],{"class":104,"line":269},[102,88908,88865],{"class":119},[102,88910,88911],{"class":104,"line":298},[102,88912,88913],{"class":119},"    \u002F\u002F     11             5                    16\n",[102,88915,88916],{"class":104,"line":502},[102,88917,88865],{"class":119},[102,88919,88920],{"class":104,"line":507},[102,88921,88922],{"class":119},"    \u002F\u002F     16             8                    24\n",[102,88924,88925],{"class":104,"line":512},[102,88926,88927],{"class":119},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[102,88929,88930],{"class":104,"line":521},[102,88931,88765],{"class":119},[102,88933,88934],{"class":104,"line":526},[102,88935,88770],{"class":119},[102,88937,88938],{"class":104,"line":532},[102,88939,88775],{"class":119},[102,88941,88942,88944,88946],{"class":104,"line":538},[102,88943,60282],{"class":119},[102,88945,59678],{"class":59165},[102,88947,59172],{"class":119},[102,88949,88950,88952,88954],{"class":104,"line":555},[102,88951,59650],{"class":119},[102,88953,59665],{"class":59165},[102,88955,59172],{"class":119},[8518,88957,88959],{"id":88958},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,88961,88962],{},[6750,88963],{"alt":98,"src":88964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[93,88966,88968],{"className":60932,"code":88967,"language":60934,"meta":98,"style":98},"\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",[83,88969,88970,88978,88986,88991,88996,89001,89006,89010,89015,89020,89025,89030,89035,89040,89044,89049,89053,89058,89066],{"__ignoreMap":98},[102,88971,88972,88974,88976],{"class":104,"line":105},[102,88973,1208],{"class":119},[102,88975,59665],{"class":59165},[102,88977,59172],{"class":119},[102,88979,88980,88982,88984],{"class":104,"line":116},[102,88981,60009],{"class":119},[102,88983,59678],{"class":59165},[102,88985,59172],{"class":119},[102,88987,88988],{"class":104,"line":123},[102,88989,88990],{"class":119},"    const arr = [\n",[102,88992,88993],{"class":104,"line":130},[102,88994,88995],{"class":119},"      { name: '张三', salary: 10000 },\n",[102,88997,88998],{"class":104,"line":136},[102,88999,89000],{"class":119},"      { name: '李四', salary: 10000 },\n",[102,89002,89003],{"class":104,"line":142},[102,89004,89005],{"class":119},"      { name: '王五', salary: 10000 }\n",[102,89007,89008],{"class":104,"line":148},[102,89009,60974],{"class":119},[102,89011,89012],{"class":104,"line":157},[102,89013,89014],{"class":119},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[102,89016,89017],{"class":104,"line":163},[102,89018,89019],{"class":119},"    \u002F\u002F prev是累计值\n",[102,89021,89022],{"class":104,"line":175},[102,89023,89024],{"class":119},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[102,89026,89027],{"class":104,"line":181},[102,89028,89029],{"class":119},"    console.log(total)\n",[102,89031,89032],{"class":104,"line":202},[102,89033,89034],{"class":119},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[102,89036,89037],{"class":104,"line":208},[102,89038,89039],{"class":119},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[102,89041,89042],{"class":104,"line":214},[102,89043,89034],{"class":119},[102,89045,89046],{"class":104,"line":225},[102,89047,89048],{"class":119},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[102,89050,89051],{"class":104,"line":230},[102,89052,89034],{"class":119},[102,89054,89055],{"class":104,"line":236},[102,89056,89057],{"class":119},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[102,89059,89060,89062,89064],{"class":104,"line":242},[102,89061,60282],{"class":119},[102,89063,59678],{"class":59165},[102,89065,59172],{"class":119},[102,89067,89068,89070,89072],{"class":104,"line":248},[102,89069,59650],{"class":119},[102,89071,59665],{"class":59165},[102,89073,59172],{"class":119},[8518,89075,89077],{"id":89076},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,89079,89080],{},[6750,89081],{"alt":98,"src":89082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,89084,89085],{},[6750,89086],{"alt":98,"src":89087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[87,89089,89090],{},[62,89091,89092],{},"find()",[14,89094,89095],{},"循环查找，找到第一个就ok",[14,89097,89098],{},[9275,89099,89102],{"href":89100,"rel":89101},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[31729],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[93,89104,89106],{"className":58498,"code":89105,"language":58500,"meta":98,"style":98},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[83,89107,89108,89113,89118],{"__ignoreMap":98},[102,89109,89110],{"class":104,"line":105},[102,89111,89112],{"class":119},"const array1 = [5, 12, 8, 130, 44]\n",[102,89114,89115],{"class":104,"line":116},[102,89116,89117],{"class":119},"const found = array1.find((element) => element > 10)\n",[102,89119,89120],{"class":104,"line":123},[102,89121,89122],{"class":119},"console.log(found)  \u002F\u002F12\n",[14,89124,89125,89127,89128,89133,89134,89137,89138,89140,89141,89146,89147,89149,89150,89152,89153,89155,89156],{},[83,89126,89092],{}," 方法是一个",[9275,89129,89132],{"href":89130,"rel":89131},"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",[31729],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[83,89135,89136],{},"callbackFn"," 函数，直到 ",[83,89139,89136],{}," 返回一个",[9275,89142,89145],{"href":89143,"rel":89144},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[31729],"真值","。然后 ",[83,89148,89092],{}," 返回该元素并停止迭代数组。如果 ",[83,89151,89136],{}," 从未返回真值，则 ",[83,89154,89092],{}," 返回 ",[83,89157,89158],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[93,89160,89162],{"className":60932,"code":89161,"language":60934,"meta":98,"style":98},"\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",[83,89163,89164,89172,89180,89185,89190,89195,89199,89204,89209,89213,89218,89223,89227,89231,89236,89241,89245,89249,89254,89259,89264,89269,89274,89278,89283,89288,89293,89298,89302,89307,89315],{"__ignoreMap":98},[102,89165,89166,89168,89170],{"class":104,"line":105},[102,89167,1208],{"class":119},[102,89169,59665],{"class":59165},[102,89171,59172],{"class":119},[102,89173,89174,89176,89178],{"class":104,"line":116},[102,89175,60009],{"class":119},[102,89177,59678],{"class":59165},[102,89179,59172],{"class":119},[102,89181,89182],{"class":104,"line":123},[102,89183,89184],{"class":119},"    const arr = ['red', 'blue', 'green']\n",[102,89186,89187],{"class":104,"line":130},[102,89188,89189],{"class":119},"    const found = arr.find(item => item === 'pink')\n",[102,89191,89192],{"class":104,"line":136},[102,89193,89194],{"class":119},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[102,89196,89197],{"class":104,"line":142},[102,89198,652],{"emptyLinePlaceholder":651},[102,89200,89201],{"class":104,"line":148},[102,89202,89203],{"class":119},"    \u002F\u002F 使用场景，用于查找数据\n",[102,89205,89206],{"class":104,"line":157},[102,89207,89208],{"class":119},"    const arr1 = [\n",[102,89210,89211],{"class":104,"line":163},[102,89212,87251],{"class":119},[102,89214,89215],{"class":104,"line":175},[102,89216,89217],{"class":119},"        name: '小米',\n",[102,89219,89220],{"class":104,"line":181},[102,89221,89222],{"class":119},"        price: 1999\n",[102,89224,89225],{"class":104,"line":202},[102,89226,85757],{"class":119},[102,89228,89229],{"class":104,"line":208},[102,89230,87251],{"class":119},[102,89232,89233],{"class":104,"line":214},[102,89234,89235],{"class":119},"        name: '华为',\n",[102,89237,89238],{"class":104,"line":225},[102,89239,89240],{"class":119},"        price: 3999\n",[102,89242,89243],{"class":104,"line":230},[102,89244,60263],{"class":119},[102,89246,89247],{"class":104,"line":236},[102,89248,60974],{"class":119},[102,89250,89251],{"class":104,"line":242},[102,89252,89253],{"class":119},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[102,89255,89256],{"class":104,"line":248},[102,89257,89258],{"class":119},"    \u002F\u002F const found1 = arr1.find(item => {\n",[102,89260,89261],{"class":104,"line":254},[102,89262,89263],{"class":119},"    \u002F\u002F   if (item.name === '小米') {\n",[102,89265,89266],{"class":104,"line":269},[102,89267,89268],{"class":119},"    \u002F\u002F     return item\n",[102,89270,89271],{"class":104,"line":298},[102,89272,89273],{"class":119},"    \u002F\u002F   }\n",[102,89275,89276],{"class":104,"line":502},[102,89277,71155],{"class":119},[102,89279,89280],{"class":104,"line":507},[102,89281,89282],{"class":119},"    \u002F\u002F 另一种写法\n",[102,89284,89285],{"class":104,"line":512},[102,89286,89287],{"class":119},"    const found1 = arr1.find(item => {\n",[102,89289,89290],{"class":104,"line":521},[102,89291,89292],{"class":119},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[102,89294,89295],{"class":104,"line":526},[102,89296,89297],{"class":119},"      return item.name = '小米'\n",[102,89299,89300],{"class":104,"line":532},[102,89301,41326],{"class":119},[102,89303,89304],{"class":104,"line":538},[102,89305,89306],{"class":119},"    console.log(found1)\n",[102,89308,89309,89311,89313],{"class":104,"line":555},[102,89310,60282],{"class":119},[102,89312,59678],{"class":59165},[102,89314,59172],{"class":119},[102,89316,89317,89319,89321],{"class":104,"line":570},[102,89318,59650],{"class":119},[102,89320,59665],{"class":59165},[102,89322,59172],{"class":119},[14,89324,89325],{},[6750,89326],{"alt":98,"src":89327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,89329,89330],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[87,89332,89333],{"start":116},[62,89334,89335],{},"every()返回的是布尔值",[14,89337,89338],{},[9275,89339,89342],{"href":89340,"rel":89341},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[31729],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,89344,89345],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,89347,89348],{},"some是只有有一个就没问题",[14,89350,89351],{},"every是必须全是才行",[93,89353,89357],{"className":89354,"code":89355,"language":89356,"meta":98,"style":98},"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",[83,89358,89359,89375,89389,89393,89402],{"__ignoreMap":98},[102,89360,89361,89363,89366,89368,89370,89373],{"class":104,"line":105},[102,89362,62314],{"class":108},[102,89364,89365],{"class":119}," isBigEnough(element, ",[102,89367,81923],{"class":108},[102,89369,2571],{"class":119},[102,89371,89372],{"class":108},"array",[102,89374,1105],{"class":119},[102,89376,89377,89380,89383,89385,89387],{"class":104,"line":116},[102,89378,89379],{"class":108},"  return",[102,89381,89382],{"class":119}," element ",[102,89384,10571],{"class":108},[102,89386,989],{"class":187},[102,89388,266],{"class":119},[102,89390,89391],{"class":104,"line":123},[102,89392,301],{"class":119},[102,89394,89395,89398,89400],{"class":104,"line":130},[102,89396,89397],{"class":119},"[12, 5, 8, 130, 44].every(isBigEnough); ",[102,89399,41194],{"class":108},[102,89401,62381],{"class":119},[102,89403,89404,89407,89409],{"class":104,"line":136},[102,89405,89406],{"class":119},"[12, 54, 18, 130, 44].every(isBigEnough); ",[102,89408,41194],{"class":108},[102,89410,65805],{"class":119},[93,89412,89414],{"className":60932,"code":89413,"language":60934,"meta":98,"style":98},"\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",[83,89415,89416,89424,89432,89437,89441,89446,89451,89459],{"__ignoreMap":98},[102,89417,89418,89420,89422],{"class":104,"line":105},[102,89419,1208],{"class":119},[102,89421,59665],{"class":59165},[102,89423,59172],{"class":119},[102,89425,89426,89428,89430],{"class":104,"line":116},[102,89427,60009],{"class":119},[102,89429,59678],{"class":59165},[102,89431,59172],{"class":119},[102,89433,89434],{"class":104,"line":123},[102,89435,89436],{"class":119},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[102,89438,89439],{"class":104,"line":130},[102,89440,86187],{"class":119},[102,89442,89443],{"class":104,"line":136},[102,89444,89445],{"class":119},"    const flag = arr.every(item => item >= 10)\n",[102,89447,89448],{"class":104,"line":142},[102,89449,89450],{"class":119},"    console.log(flag)    \u002F\u002Ftrue\n",[102,89452,89453,89455,89457],{"class":104,"line":148},[102,89454,60282],{"class":119},[102,89456,59678],{"class":59165},[102,89458,59172],{"class":119},[102,89460,89461,89463,89465],{"class":104,"line":157},[102,89462,59650],{"class":119},[102,89464,59665],{"class":59165},[102,89466,59172],{"class":119},[93,89468,89470],{"className":60932,"code":89469,"language":60934,"meta":98,"style":98},"\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",[83,89471,89472,89480,89488,89492,89497,89502,89507,89515],{"__ignoreMap":98},[102,89473,89474,89476,89478],{"class":104,"line":105},[102,89475,1208],{"class":119},[102,89477,59665],{"class":59165},[102,89479,59172],{"class":119},[102,89481,89482,89484,89486],{"class":104,"line":116},[102,89483,60009],{"class":119},[102,89485,59678],{"class":59165},[102,89487,59172],{"class":119},[102,89489,89490],{"class":104,"line":123},[102,89491,89436],{"class":119},[102,89493,89494],{"class":104,"line":130},[102,89495,89496],{"class":119},"    const arr = [10, 0, 5]\n",[102,89498,89499],{"class":104,"line":136},[102,89500,89501],{"class":119},"    const flag = arr.some(item => item >= 10)\n",[102,89503,89504],{"class":104,"line":142},[102,89505,89506],{"class":119},"    console.log(flag)   \u002F\u002Ftrue\n",[102,89508,89509,89511,89513],{"class":104,"line":148},[102,89510,60282],{"class":119},[102,89512,59678],{"class":59165},[102,89514,59172],{"class":119},[102,89516,89517,89519,89521],{"class":104,"line":157},[102,89518,59650],{"class":119},[102,89520,59665],{"class":59165},[102,89522,59172],{"class":119},[8518,89524,89526],{"id":89525},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,89528,89529],{},[6750,89530],{"alt":98,"src":89531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[93,89533,89535],{"className":58498,"code":89534,"language":58500,"meta":98,"style":98},"\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",[83,89536,89537,89547,89561,89565,89573,89587,89607,89619,89627,89634,89646,89658,89670,89682,89692,89702,89706,89714,89722,89726,89734,89746,89754,89776,89781,89786,89819,89827,89835,89839],{"__ignoreMap":98},[102,89538,89539,89541,89543,89545],{"class":104,"line":105},[102,89540,59162],{"class":119},[102,89542,59166],{"class":59165},[102,89544,59169],{"class":112},[102,89546,59172],{"class":119},[102,89548,89549,89551,89553,89555,89557,89559],{"class":104,"line":116},[102,89550,1208],{"class":119},[102,89552,58500],{"class":59165},[102,89554,59181],{"class":112},[102,89556,260],{"class":119},[102,89558,59186],{"class":278},[102,89560,59172],{"class":119},[102,89562,89563],{"class":104,"line":123},[102,89564,652],{"emptyLinePlaceholder":651},[102,89566,89567,89569,89571],{"class":104,"line":130},[102,89568,1208],{"class":119},[102,89570,59199],{"class":59165},[102,89572,59172],{"class":119},[102,89574,89575,89577,89579,89581,89583,89585],{"class":104,"line":136},[102,89576,60009],{"class":119},[102,89578,59209],{"class":59165},[102,89580,59212],{"class":112},[102,89582,260],{"class":119},[102,89584,59217],{"class":278},[102,89586,59172],{"class":119},[102,89588,89589,89591,89593,89595,89597,89599,89601,89603,89605],{"class":104,"line":142},[102,89590,60009],{"class":119},[102,89592,59209],{"class":59165},[102,89594,387],{"class":112},[102,89596,260],{"class":119},[102,89598,59256],{"class":278},[102,89600,59236],{"class":112},[102,89602,260],{"class":119},[102,89604,59263],{"class":278},[102,89606,59172],{"class":119},[102,89608,89609,89611,89613,89615,89617],{"class":104,"line":148},[102,89610,60009],{"class":119},[102,89612,59272],{"class":59165},[102,89614,59275],{"class":119},[102,89616,59272],{"class":59165},[102,89618,59172],{"class":119},[102,89620,89621,89623,89625],{"class":104,"line":157},[102,89622,60009],{"class":119},[102,89624,8955],{"class":59165},[102,89626,59172],{"class":119},[102,89628,89629,89632],{"class":104,"line":163},[102,89630,89631],{"class":59165},"    div",[102,89633,1077],{"class":119},[102,89635,89636,89638,89640,89642,89644],{"class":104,"line":175},[102,89637,62636],{"class":187},[102,89639,59302],{"class":119},[102,89641,7866],{"class":187},[102,89643,59357],{"class":108},[102,89645,266],{"class":119},[102,89647,89648,89650,89652,89654,89656],{"class":104,"line":181},[102,89649,62650],{"class":187},[102,89651,59302],{"class":119},[102,89653,9434],{"class":187},[102,89655,59357],{"class":108},[102,89657,266],{"class":119},[102,89659,89660,89662,89664,89666,89668],{"class":104,"line":202},[102,89661,65224],{"class":187},[102,89663,59302],{"class":119},[102,89665,9434],{"class":187},[102,89667,59357],{"class":108},[102,89669,266],{"class":119},[102,89671,89672,89674,89676,89678,89680],{"class":104,"line":208},[102,89673,72998],{"class":187},[102,89675,59302],{"class":119},[102,89677,9527],{"class":187},[102,89679,59357],{"class":108},[102,89681,266],{"class":119},[102,89683,89684,89686,89688,89690],{"class":104,"line":214},[102,89685,65151],{"class":187},[102,89687,59302],{"class":119},[102,89689,59457],{"class":187},[102,89691,266],{"class":119},[102,89693,89694,89696,89698,89700],{"class":104,"line":225},[102,89695,62749],{"class":187},[102,89697,59302],{"class":119},[102,89699,59510],{"class":187},[102,89701,266],{"class":119},[102,89703,89704],{"class":104,"line":230},[102,89705,205],{"class":119},[102,89707,89708,89710,89712],{"class":104,"line":236},[102,89709,60282],{"class":119},[102,89711,8955],{"class":59165},[102,89713,59172],{"class":119},[102,89715,89716,89718,89720],{"class":104,"line":242},[102,89717,59650],{"class":119},[102,89719,59199],{"class":59165},[102,89721,59172],{"class":119},[102,89723,89724],{"class":104,"line":248},[102,89725,652],{"emptyLinePlaceholder":651},[102,89727,89728,89730,89732],{"class":104,"line":254},[102,89729,1208],{"class":119},[102,89731,59665],{"class":59165},[102,89733,59172],{"class":119},[102,89735,89736,89738,89740,89742,89744],{"class":104,"line":269},[102,89737,60009],{"class":119},[102,89739,59476],{"class":59165},[102,89741,63179],{"class":119},[102,89743,59476],{"class":59165},[102,89745,59172],{"class":119},[102,89747,89748,89750,89752],{"class":104,"line":298},[102,89749,60009],{"class":119},[102,89751,59678],{"class":59165},[102,89753,59172],{"class":119},[102,89755,89756,89758,89761,89763,89766,89769,89771,89774],{"class":104,"line":502},[102,89757,19961],{"class":108},[102,89759,89760],{"class":187}," spec",[102,89762,22296],{"class":108},[102,89764,89765],{"class":119}," { size: ",[102,89767,89768],{"class":278},"'40cm*40cm'",[102,89770,63329],{"class":119},[102,89772,89773],{"class":278},"'黑色'",[102,89775,63469],{"class":119},[102,89777,89778],{"class":104,"line":507},[102,89779,89780],{"class":126},"    \u002F\u002F const arr = Object.values(spec)\n",[102,89782,89783],{"class":104,"line":512},[102,89784,89785],{"class":126},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[102,89787,89788,89790,89792,89794,89797,89799,89801,89804,89807,89810,89812,89814,89817],{"class":104,"line":521},[102,89789,60272],{"class":119},[102,89791,62264],{"class":112},[102,89793,380],{"class":119},[102,89795,89796],{"class":278},"'div'",[102,89798,82114],{"class":119},[102,89800,260],{"class":108},[102,89802,89803],{"class":119}," Object.",[102,89805,89806],{"class":112},"values",[102,89808,89809],{"class":119},"(spec).",[102,89811,82088],{"class":112},[102,89813,380],{"class":119},[102,89815,89816],{"class":278},"'\u002F'",[102,89818,390],{"class":119},[102,89820,89821,89823,89825],{"class":104,"line":526},[102,89822,60282],{"class":119},[102,89824,59678],{"class":59165},[102,89826,59172],{"class":119},[102,89828,89829,89831,89833],{"class":104,"line":532},[102,89830,59650],{"class":119},[102,89832,59665],{"class":59165},[102,89834,59172],{"class":119},[102,89836,89837],{"class":104,"line":538},[102,89838,652],{"emptyLinePlaceholder":651},[102,89840,89841,89843,89845],{"class":104,"line":555},[102,89842,59650],{"class":119},[102,89844,58500],{"class":59165},[102,89846,59172],{"class":119},[14,89848,89849],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[8518,89851,89853],{"id":89852},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,89855,89856],{},"静态方法，将伪数组转换为真数组",[14,89858,89859],{},[6750,89860],{"alt":98,"src":89861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[93,89863,89865],{"className":60932,"code":89864,"language":60934,"meta":98,"style":98},"\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",[83,89866,89867,89875,89883,89895,89907,89919,89927,89935,89940,89945,89950,89955,89963],{"__ignoreMap":98},[102,89868,89869,89871,89873],{"class":104,"line":105},[102,89870,1208],{"class":119},[102,89872,59665],{"class":59165},[102,89874,59172],{"class":119},[102,89876,89877,89879,89881],{"class":104,"line":116},[102,89878,60009],{"class":119},[102,89880,59],{"class":59165},[102,89882,59172],{"class":119},[102,89884,89885,89887,89889,89891,89893],{"class":104,"line":123},[102,89886,59206],{"class":119},[102,89888,62],{"class":59165},[102,89890,63179],{"class":119},[102,89892,62],{"class":59165},[102,89894,59172],{"class":119},[102,89896,89897,89899,89901,89903,89905],{"class":104,"line":130},[102,89898,59206],{"class":119},[102,89900,62],{"class":59165},[102,89902,63179],{"class":119},[102,89904,62],{"class":59165},[102,89906,59172],{"class":119},[102,89908,89909,89911,89913,89915,89917],{"class":104,"line":136},[102,89910,59206],{"class":119},[102,89912,62],{"class":59165},[102,89914,63179],{"class":119},[102,89916,62],{"class":59165},[102,89918,59172],{"class":119},[102,89920,89921,89923,89925],{"class":104,"line":142},[102,89922,60282],{"class":119},[102,89924,59],{"class":59165},[102,89926,59172],{"class":119},[102,89928,89929,89931,89933],{"class":104,"line":148},[102,89930,60009],{"class":119},[102,89932,59678],{"class":59165},[102,89934,59172],{"class":119},[102,89936,89937],{"class":104,"line":157},[102,89938,89939],{"class":119},"    const lis = document.querySelectorAll('li')\n",[102,89941,89942],{"class":104,"line":163},[102,89943,89944],{"class":119},"    const liss = Array.from(lis)\n",[102,89946,89947],{"class":104,"line":175},[102,89948,89949],{"class":119},"    liss.pop()\n",[102,89951,89952],{"class":104,"line":181},[102,89953,89954],{"class":119},"    console.log(liss)\n",[102,89956,89957,89959,89961],{"class":104,"line":202},[102,89958,60282],{"class":119},[102,89960,59678],{"class":59165},[102,89962,59172],{"class":119},[102,89964,89965,89967,89969],{"class":104,"line":208},[102,89966,59650],{"class":119},[102,89968,59665],{"class":59165},[102,89970,59172],{"class":119},[14,89972,89973],{},[6750,89974],{"alt":98,"src":89975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[7601,89977,89979],{"id":89978},"_41053-string","4.10.5.3 String",[14,89981,89982],{},[6750,89983],{"alt":98,"src":89984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[8518,89986,89988],{"id":89987},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[93,89990,89992],{"className":60932,"code":89991,"language":60934,"meta":98,"style":98},"\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",[83,89993,89994,90002,90010,90015,90020,90025,90029,90034,90039,90044,90052],{"__ignoreMap":98},[102,89995,89996,89998,90000],{"class":104,"line":105},[102,89997,1208],{"class":119},[102,89999,59665],{"class":59165},[102,90001,59172],{"class":119},[102,90003,90004,90006,90008],{"class":104,"line":116},[102,90005,60009],{"class":119},[102,90007,59678],{"class":59165},[102,90009,59172],{"class":119},[102,90011,90012],{"class":104,"line":123},[102,90013,90014],{"class":119},"    \u002F\u002F 把字符串转化为数组\n",[102,90016,90017],{"class":104,"line":130},[102,90018,90019],{"class":119},"    const str = 'pink,red'\n",[102,90021,90022],{"class":104,"line":136},[102,90023,90024],{"class":119},"    const arr = str.split(',')\n",[102,90026,90027],{"class":104,"line":142},[102,90028,88503],{"class":119},[102,90030,90031],{"class":104,"line":148},[102,90032,90033],{"class":119},"    const str1 = '2025-8-25'\n",[102,90035,90036],{"class":104,"line":157},[102,90037,90038],{"class":119},"    const arr1 = str1.split('-')\n",[102,90040,90041],{"class":104,"line":163},[102,90042,90043],{"class":119},"    console.log(arr1)\n",[102,90045,90046,90048,90050],{"class":104,"line":175},[102,90047,60282],{"class":119},[102,90049,59678],{"class":59165},[102,90051,59172],{"class":119},[102,90053,90054,90056,90058],{"class":104,"line":181},[102,90055,59650],{"class":119},[102,90057,59665],{"class":59165},[102,90059,59172],{"class":119},[8518,90061,90063],{"id":90062},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,90065,80],{},[14,90067,90068],{},"substring(indexStart)",[14,90070,90071],{},"substring(indexStart, indexEnd)",[59,90073,90074,90085,90097,90107],{},[62,90075,90076,90077,90080,90081,90084],{},"如果省略了 ",[83,90078,90079],{},"indexEnd","，则 ",[83,90082,90083],{},"substring()"," 提取字符直到字符串的末尾",[62,90086,90087,90088,90091,90092,90080,90094,90096],{},"如果 ",[83,90089,90090],{},"indexStart"," 等于 ",[83,90093,90079],{},[83,90095,90083],{}," 返回一个空字符串",[62,90098,90087,90099,90101,90102,90080,90104,90106],{},[83,90100,90090],{}," 大于 ",[83,90103,90079],{},[83,90105,90083],{}," 的效果就像交换了这两个参数一样",[62,90108,90109],{},"结束的索引号不包含想要截取的部分",[93,90111,90113],{"className":89354,"code":90112,"language":89356,"meta":98,"style":98},"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",[83,90114,90115,90127,90131,90165,90195,90199,90230,90234,90261,90291,90321,90325,90356],{"__ignoreMap":98},[102,90116,90117,90120,90122,90125],{"class":104,"line":105},[102,90118,90119],{"class":119},"const anyString ",[102,90121,260],{"class":108},[102,90123,90124],{"class":278}," \"Mozilla\"",[102,90126,266],{"class":119},[102,90128,90129],{"class":104,"line":116},[102,90130,652],{"emptyLinePlaceholder":651},[102,90132,90133,90136,90138,90140,90142,90145,90147,90150,90152,90154,90156,90158,90160,90162],{"class":104,"line":123},[102,90134,90135],{"class":187},"console",[102,90137,9585],{"class":119},[102,90139,66112],{"class":187},[102,90141,380],{"class":119},[102,90143,90144],{"class":187},"anyString",[102,90146,9585],{"class":119},[102,90148,90149],{"class":187},"substring",[102,90151,380],{"class":119},[102,90153,8423],{"class":187},[102,90155,2571],{"class":119},[102,90157,7039],{"class":187},[102,90159,83118],{"class":119},[102,90161,41194],{"class":108},[102,90163,90164],{"class":278}," 'M'\n",[102,90166,90167,90169,90171,90173,90175,90177,90179,90181,90183,90185,90187,90189,90191,90193],{"class":104,"line":130},[102,90168,90135],{"class":187},[102,90170,9585],{"class":119},[102,90172,66112],{"class":187},[102,90174,380],{"class":119},[102,90176,90144],{"class":187},[102,90178,9585],{"class":119},[102,90180,90149],{"class":187},[102,90182,380],{"class":119},[102,90184,7039],{"class":187},[102,90186,2571],{"class":119},[102,90188,8423],{"class":187},[102,90190,83118],{"class":119},[102,90192,41194],{"class":108},[102,90194,90164],{"class":278},[102,90196,90197],{"class":104,"line":136},[102,90198,652],{"emptyLinePlaceholder":651},[102,90200,90201,90203,90205,90207,90209,90211,90213,90215,90217,90219,90221,90223,90225,90227],{"class":104,"line":142},[102,90202,90135],{"class":187},[102,90204,9585],{"class":119},[102,90206,66112],{"class":187},[102,90208,380],{"class":119},[102,90210,90144],{"class":187},[102,90212,9585],{"class":119},[102,90214,90149],{"class":187},[102,90216,380],{"class":119},[102,90218,8423],{"class":187},[102,90220,2571],{"class":119},[102,90222,9379],{"class":187},[102,90224,83118],{"class":119},[102,90226,41194],{"class":108},[102,90228,90229],{"class":278}," 'Mozill'\n",[102,90231,90232],{"class":104,"line":148},[102,90233,652],{"emptyLinePlaceholder":651},[102,90235,90236,90238,90240,90242,90244,90246,90248,90250,90252,90254,90256,90258],{"class":104,"line":157},[102,90237,90135],{"class":187},[102,90239,9585],{"class":119},[102,90241,66112],{"class":187},[102,90243,380],{"class":119},[102,90245,90144],{"class":187},[102,90247,9585],{"class":119},[102,90249,90149],{"class":187},[102,90251,380],{"class":119},[102,90253,9329],{"class":187},[102,90255,83118],{"class":119},[102,90257,41194],{"class":108},[102,90259,90260],{"class":278}," 'lla'\n",[102,90262,90263,90265,90267,90269,90271,90273,90275,90277,90279,90281,90283,90285,90287,90289],{"class":104,"line":163},[102,90264,90135],{"class":187},[102,90266,9585],{"class":119},[102,90268,66112],{"class":187},[102,90270,380],{"class":119},[102,90272,90144],{"class":187},[102,90274,9585],{"class":119},[102,90276,90149],{"class":187},[102,90278,380],{"class":119},[102,90280,9329],{"class":187},[102,90282,2571],{"class":119},[102,90284,9403],{"class":187},[102,90286,83174],{"class":119},[102,90288,41194],{"class":108},[102,90290,90260],{"class":278},[102,90292,90293,90295,90297,90299,90301,90303,90305,90307,90309,90311,90313,90315,90317,90319],{"class":104,"line":175},[102,90294,90135],{"class":187},[102,90296,9585],{"class":119},[102,90298,66112],{"class":187},[102,90300,380],{"class":119},[102,90302,90144],{"class":187},[102,90304,9585],{"class":119},[102,90306,90149],{"class":187},[102,90308,380],{"class":119},[102,90310,9403],{"class":187},[102,90312,2571],{"class":119},[102,90314,9329],{"class":187},[102,90316,83118],{"class":119},[102,90318,41194],{"class":108},[102,90320,90260],{"class":278},[102,90322,90323],{"class":104,"line":181},[102,90324,652],{"emptyLinePlaceholder":651},[102,90326,90327,90329,90331,90333,90335,90337,90339,90341,90343,90345,90347,90349,90351,90353],{"class":104,"line":202},[102,90328,90135],{"class":187},[102,90330,9585],{"class":119},[102,90332,66112],{"class":187},[102,90334,380],{"class":119},[102,90336,90144],{"class":187},[102,90338,9585],{"class":119},[102,90340,90149],{"class":187},[102,90342,380],{"class":119},[102,90344,8423],{"class":187},[102,90346,2571],{"class":119},[102,90348,9403],{"class":187},[102,90350,83118],{"class":119},[102,90352,41194],{"class":108},[102,90354,90355],{"class":278}," 'Mozilla'\n",[102,90357,90358,90360,90362,90364,90366,90368,90370,90372,90374,90376,90378,90380,90382,90384],{"class":104,"line":208},[102,90359,90135],{"class":187},[102,90361,9585],{"class":119},[102,90363,66112],{"class":187},[102,90365,380],{"class":119},[102,90367,90144],{"class":187},[102,90369,9585],{"class":119},[102,90371,90149],{"class":187},[102,90373,380],{"class":119},[102,90375,8423],{"class":187},[102,90377,2571],{"class":119},[102,90379,263],{"class":187},[102,90381,83118],{"class":119},[102,90383,41194],{"class":108},[102,90385,90355],{"class":278},[8518,90387,90389],{"id":90388},"_410533-startswith","4.10.5.3.3 startsWith",[14,90391,90392,90395,90396,90401,90402,90404,90405],{},[83,90393,90394],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[18,90397,90398],{},[83,90399,90400],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[83,90403,10244],{}," 或 ",[83,90406,73885],{},[93,90408,90410],{"className":85360,"code":90409,"language":85362,"meta":98,"style":98},"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",[83,90411,90412,90424,90443,90448,90468],{"__ignoreMap":98},[102,90413,90414,90416,90419,90421],{"class":104,"line":105},[102,90415,4456],{"class":108},[102,90417,90418],{"class":119}," str1 ",[102,90420,260],{"class":108},[102,90422,90423],{"class":278}," \"Saturday night plans\"\n",[102,90425,90426,90428,90430,90433,90436,90438,90441],{"class":104,"line":116},[102,90427,85397],{"class":119},[102,90429,66112],{"class":112},[102,90431,90432],{"class":119},"(str1.",[102,90434,90435],{"class":112},"startsWith",[102,90437,380],{"class":119},[102,90439,90440],{"class":278},"\"Sat\"",[102,90442,38362],{"class":119},[102,90444,90445],{"class":104,"line":123},[102,90446,90447],{"class":126},"\u002F\u002F Expected output: true\n",[102,90449,90450,90452,90454,90456,90458,90460,90462,90464,90466],{"class":104,"line":130},[102,90451,85397],{"class":119},[102,90453,66112],{"class":112},[102,90455,90432],{"class":119},[102,90457,90435],{"class":112},[102,90459,380],{"class":119},[102,90461,90440],{"class":278},[102,90463,2571],{"class":119},[102,90465,7049],{"class":187},[102,90467,38362],{"class":119},[102,90469,90470],{"class":104,"line":136},[102,90471,90472],{"class":126},"\u002F\u002F Expected output: false\n",[93,90474,90476],{"className":58498,"code":90475,"language":58500,"meta":98,"style":98},"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",[83,90477,90478,90483,90488,90492,90497,90502],{"__ignoreMap":98},[102,90479,90480],{"class":104,"line":105},[102,90481,90482],{"class":119},"startsWith(searchString)\n",[102,90484,90485],{"class":104,"line":116},[102,90486,90487],{"class":119},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[102,90489,90490],{"class":104,"line":123},[102,90491,652],{"emptyLinePlaceholder":651},[102,90493,90494],{"class":104,"line":130},[102,90495,90496],{"class":119},"const str3 = 'pink老师上课中'\n",[102,90498,90499],{"class":104,"line":136},[102,90500,90501],{"class":119},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[102,90503,90504],{"class":104,"line":142},[102,90505,90506],{"class":119},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[8518,90508,90510],{"id":90509},"_410534-includes","4.10.5.3.4 includes",[14,90512,90513],{},"includes(searchString) includes(searchString, position)",[87,90515,90516],{},[62,90517,90518],{},"searchString:",[14,90520,90521,90522,90524,90525,90530,90531,90536,90537,7101,90540,90543,90544,90547],{},"一个要在 ",[83,90523,10185],{}," 中查找的字符串。",[9275,90526,90529],{"href":90527,"rel":90528},"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",[31729],"不能是正则表达式","。所有非正则表达式的值都会被",[9275,90532,90535],{"href":90533,"rel":90534},"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",[31729],"强制转换为字符串","，因此如果该参数被省略或传入 ",[83,90538,90539],{},"undefined",[83,90541,90542],{},"includes()"," 方法会在字符串中搜索 ",[83,90545,90546],{},"\"undefined\"","，这通常不是你想要的",[87,90549,90550],{"start":116},[62,90551,90552,9881],{},[83,90553,90554],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,90556,90557,90558,90561,90562],{},"在字符串中开始搜索 ",[83,90559,90560],{},"searchString"," 的位置。默认值为 ",[83,90563,8423],{},[87,90565,90566],{"start":123},[62,90567,90568],{},"返回值：",[14,90570,90571,90572,90574,90575,90579,90580],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[83,90573,90560],{}," 为空字符串的情况），则返回 ",[18,90576,90577],{},[83,90578,10244],{}," ，否则返回 ",[18,90581,90582],{},[83,90583,73885],{},[87,90585,90586],{"start":130},[62,90587,90588],{},"异常：",[14,90590,90087,90591,81,90593,90597],{},[83,90592,90560],{},[9275,90594,90596],{"href":90527,"rel":90595},[31729],"是一个正则表达式","，则会抛出",[14,90599,90600],{},"只要是有就是true，不需要非得以谁开头结尾",[93,90602,90604],{"className":85360,"code":90603,"language":85362,"meta":98,"style":98},"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",[83,90605,90606,90617,90640,90659,90679,90701,90720],{"__ignoreMap":98},[102,90607,90608,90610,90612,90614],{"class":104,"line":105},[102,90609,4456],{"class":108},[102,90611,87640],{"class":119},[102,90613,260],{"class":108},[102,90615,90616],{"class":278}," \"To be, or not to be, that is the question.\"\n",[102,90618,90619,90621,90623,90626,90629,90631,90634,90637],{"class":104,"line":116},[102,90620,85397],{"class":119},[102,90622,66112],{"class":112},[102,90624,90625],{"class":119},"(str.",[102,90627,90628],{"class":112},"includes",[102,90630,380],{"class":119},[102,90632,90633],{"class":278},"\"To be\"",[102,90635,90636],{"class":119},"))",[102,90638,90639],{"class":126},"  \u002F\u002F true\n",[102,90641,90642,90644,90646,90648,90650,90652,90655,90657],{"class":104,"line":123},[102,90643,85397],{"class":119},[102,90645,66112],{"class":112},[102,90647,90625],{"class":119},[102,90649,90628],{"class":112},[102,90651,380],{"class":119},[102,90653,90654],{"class":278},"\"question\"",[102,90656,90636],{"class":119},[102,90658,90639],{"class":126},[102,90660,90661,90663,90665,90667,90669,90671,90674,90676],{"class":104,"line":130},[102,90662,85397],{"class":119},[102,90664,66112],{"class":112},[102,90666,90625],{"class":119},[102,90668,90628],{"class":112},[102,90670,380],{"class":119},[102,90672,90673],{"class":278},"\"nonexistent\"",[102,90675,90636],{"class":119},[102,90677,90678],{"class":126},"  \u002F\u002F false\n",[102,90680,90681,90683,90685,90687,90689,90691,90693,90695,90697,90699],{"class":104,"line":136},[102,90682,85397],{"class":119},[102,90684,66112],{"class":112},[102,90686,90625],{"class":119},[102,90688,90628],{"class":112},[102,90690,380],{"class":119},[102,90692,90633],{"class":278},[102,90694,2571],{"class":119},[102,90696,7039],{"class":187},[102,90698,90636],{"class":119},[102,90700,90678],{"class":126},[102,90702,90703,90705,90707,90709,90711,90713,90716,90718],{"class":104,"line":142},[102,90704,85397],{"class":119},[102,90706,66112],{"class":112},[102,90708,90625],{"class":119},[102,90710,90628],{"class":112},[102,90712,380],{"class":119},[102,90714,90715],{"class":278},"\"TO BE\"",[102,90717,90636],{"class":119},[102,90719,90678],{"class":126},[102,90721,90722,90724,90726,90728,90730,90732,90734,90736],{"class":104,"line":148},[102,90723,85397],{"class":119},[102,90725,66112],{"class":112},[102,90727,90625],{"class":119},[102,90729,90628],{"class":112},[102,90731,380],{"class":119},[102,90733,16439],{"class":278},[102,90735,90636],{"class":119},[102,90737,90639],{"class":126},[8518,90739,90741],{"id":90740},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[93,90743,90745],{"className":60932,"code":90744,"language":60934,"meta":98,"style":98},"\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",[83,90746,90747,90755,90763,90768,90773,90778,90783,90788,90796],{"__ignoreMap":98},[102,90748,90749,90751,90753],{"class":104,"line":105},[102,90750,1208],{"class":119},[102,90752,59665],{"class":59165},[102,90754,59172],{"class":119},[102,90756,90757,90759,90761],{"class":104,"line":116},[102,90758,60009],{"class":119},[102,90760,59678],{"class":59165},[102,90762,59172],{"class":119},[102,90764,90765],{"class":104,"line":123},[102,90766,90767],{"class":119},"    const num = 10\n",[102,90769,90770],{"class":104,"line":130},[102,90771,90772],{"class":119},"    \u002F\u002F 强制转换\n",[102,90774,90775],{"class":104,"line":136},[102,90776,90777],{"class":119},"    console.log(String(num))\n",[102,90779,90780],{"class":104,"line":142},[102,90781,90782],{"class":119},"    \u002F\u002F toString()方法转换\n",[102,90784,90785],{"class":104,"line":148},[102,90786,90787],{"class":119},"    console.log(num.toString())\n",[102,90789,90790,90792,90794],{"class":104,"line":157},[102,90791,60282],{"class":119},[102,90793,59678],{"class":59165},[102,90795,59172],{"class":119},[102,90797,90798,90800,90802],{"class":104,"line":163},[102,90799,59650],{"class":119},[102,90801,59665],{"class":59165},[102,90803,59172],{"class":119},[8518,90805,90807],{"id":90806},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,90809,90810],{},[6750,90811],{"alt":98,"src":90812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[93,90814,90816],{"className":58498,"code":90815,"language":58500,"meta":98,"style":98},"\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",[83,90817,90818,90828,90842,90846,90854,90868,90888,90900,90908,90912,90920,90932,90940,90952,90957,90962,90967,91014,91030,91038,91046,91050],{"__ignoreMap":98},[102,90819,90820,90822,90824,90826],{"class":104,"line":105},[102,90821,59162],{"class":119},[102,90823,59166],{"class":59165},[102,90825,59169],{"class":112},[102,90827,59172],{"class":119},[102,90829,90830,90832,90834,90836,90838,90840],{"class":104,"line":116},[102,90831,1208],{"class":119},[102,90833,58500],{"class":59165},[102,90835,59181],{"class":112},[102,90837,260],{"class":119},[102,90839,59186],{"class":278},[102,90841,59172],{"class":119},[102,90843,90844],{"class":104,"line":123},[102,90845,652],{"emptyLinePlaceholder":651},[102,90847,90848,90850,90852],{"class":104,"line":130},[102,90849,1208],{"class":119},[102,90851,59199],{"class":59165},[102,90853,59172],{"class":119},[102,90855,90856,90858,90860,90862,90864,90866],{"class":104,"line":136},[102,90857,60009],{"class":119},[102,90859,59209],{"class":59165},[102,90861,59212],{"class":112},[102,90863,260],{"class":119},[102,90865,59217],{"class":278},[102,90867,59172],{"class":119},[102,90869,90870,90872,90874,90876,90878,90880,90882,90884,90886],{"class":104,"line":142},[102,90871,60009],{"class":119},[102,90873,59209],{"class":59165},[102,90875,387],{"class":112},[102,90877,260],{"class":119},[102,90879,59256],{"class":278},[102,90881,59236],{"class":112},[102,90883,260],{"class":119},[102,90885,59263],{"class":278},[102,90887,59172],{"class":119},[102,90889,90890,90892,90894,90896,90898],{"class":104,"line":148},[102,90891,60009],{"class":119},[102,90893,59272],{"class":59165},[102,90895,59275],{"class":119},[102,90897,59272],{"class":59165},[102,90899,59172],{"class":119},[102,90901,90902,90904,90906],{"class":104,"line":157},[102,90903,59650],{"class":119},[102,90905,59199],{"class":59165},[102,90907,59172],{"class":119},[102,90909,90910],{"class":104,"line":163},[102,90911,652],{"emptyLinePlaceholder":651},[102,90913,90914,90916,90918],{"class":104,"line":175},[102,90915,1208],{"class":119},[102,90917,59665],{"class":59165},[102,90919,59172],{"class":119},[102,90921,90922,90924,90926,90928,90930],{"class":104,"line":181},[102,90923,60009],{"class":119},[102,90925,59476],{"class":59165},[102,90927,63179],{"class":119},[102,90929,59476],{"class":59165},[102,90931,59172],{"class":119},[102,90933,90934,90936,90938],{"class":104,"line":202},[102,90935,60009],{"class":119},[102,90937,59678],{"class":59165},[102,90939,59172],{"class":119},[102,90941,90942,90944,90947,90949],{"class":104,"line":208},[102,90943,19961],{"class":108},[102,90945,90946],{"class":187}," gift",[102,90948,22296],{"class":108},[102,90950,90951],{"class":278}," '50g的茶叶，清洗球'\n",[102,90953,90954],{"class":104,"line":214},[102,90955,90956],{"class":126},"    \u002F\u002F 1.把字符串拆分为数组\n",[102,90958,90959],{"class":104,"line":225},[102,90960,90961],{"class":126},"    \u002F\u002F console.log(gift.split(','))\n",[102,90963,90964],{"class":104,"line":230},[102,90965,90966],{"class":126},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[102,90968,90969,90971,90973,90975,90978,90981,90983,90986,90988,90990,90992,90994,90996,90999,91001,91004,91006,91008,91010,91012],{"class":104,"line":236},[102,90970,19961],{"class":108},[102,90972,81784],{"class":187},[102,90974,22296],{"class":108},[102,90976,90977],{"class":119}," gift.",[102,90979,90980],{"class":112},"split",[102,90982,380],{"class":119},[102,90984,90985],{"class":278},"'，'",[102,90987,38691],{"class":119},[102,90989,81909],{"class":112},[102,90991,380],{"class":119},[102,90993,87660],{"class":386},[102,90995,87663],{"class":108},[102,90997,90998],{"class":278}," `\u003Cspan>【赠品】${",[102,91000,87660],{"class":119},[102,91002,91003],{"class":278},"}\u003C\u002Fspan>\u003Cbr>`",[102,91005,38691],{"class":119},[102,91007,82088],{"class":112},[102,91009,380],{"class":119},[102,91011,82093],{"class":278},[102,91013,390],{"class":119},[102,91015,91016,91018,91020,91022,91024,91026,91028],{"class":104,"line":242},[102,91017,60272],{"class":119},[102,91019,62264],{"class":112},[102,91021,380],{"class":119},[102,91023,89796],{"class":278},[102,91025,82114],{"class":119},[102,91027,260],{"class":108},[102,91029,81850],{"class":119},[102,91031,91032,91034,91036],{"class":104,"line":248},[102,91033,60282],{"class":119},[102,91035,59678],{"class":59165},[102,91037,59172],{"class":119},[102,91039,91040,91042,91044],{"class":104,"line":254},[102,91041,59650],{"class":119},[102,91043,59665],{"class":59165},[102,91045,59172],{"class":119},[102,91047,91048],{"class":104,"line":269},[102,91049,652],{"emptyLinePlaceholder":651},[102,91051,91052,91054,91056],{"class":104,"line":298},[102,91053,59650],{"class":119},[102,91055,58500],{"class":59165},[102,91057,59172],{"class":119},[7601,91059,91061],{"id":91060},"_41054-number","4.10.5.4 Number",[14,91063,91064],{},[6750,91065],{"alt":98,"src":91066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,91068,91069],{},"整数也可以进行toFixed来保留小数",[14,91071,91072],{},"比如：",[14,91074,91075],{},"const price=10",[14,91077,91078],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[7601,91080,91082],{"id":91081},"_41055-购物车展示","4.10.5.5 购物车展示",[14,91084,91085],{},[6750,91086],{"alt":98,"src":91087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[93,91089,91091],{"className":58498,"code":91090,"language":58500,"meta":98,"style":98},"\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",[83,91092,91093,91103,91117,91121,91129,91143,91163,91175,91183,91189,91199,91209,91219,91223,91227,91233,91245,91259,91263,91267,91273,91285,91301,91311,91327,91331,91335,91341,91351,91361,91365,91369,91377,91389,91401,91413,91417,91421,91429,91441,91445,91449,91460,91470,91482,91494,91504,91508,91512,91520,91529,91541,91551,91561,91565,91569,91577,91586,91593,91603,91615,91619,91623,91632,91642,91653,91665,91677,91681,91685,91694,91704,91715,91719,91723,91729,91741,91753,91763,91773,91791,91803,91807,91811,91820,91832,91842,91852,91864,91868,91876,91884,91888,91896,91910,91918,91932,91960,91968,91976,91986,91990,91998,92006,92015,92023,92032,92042,92046,92050,92058,92066,92075,92083,92091,92104,92108,92112,92120,92128,92137,92145,92153,92168,92172,92176,92184,92192,92201,92209,92217,92231,92239,92243,92247,92252,92278,92283,92320,92325,92348,92353,92407,92412,92448,92452,92458,92463,92472,92486,92495,92514,92523,92533,92538,92543,92556,92561,92615,92641,92649,92657,92661],{"__ignoreMap":98},[102,91094,91095,91097,91099,91101],{"class":104,"line":105},[102,91096,59162],{"class":119},[102,91098,59166],{"class":59165},[102,91100,59169],{"class":112},[102,91102,59172],{"class":119},[102,91104,91105,91107,91109,91111,91113,91115],{"class":104,"line":116},[102,91106,1208],{"class":119},[102,91108,58500],{"class":59165},[102,91110,59181],{"class":112},[102,91112,260],{"class":119},[102,91114,59186],{"class":278},[102,91116,59172],{"class":119},[102,91118,91119],{"class":104,"line":123},[102,91120,652],{"emptyLinePlaceholder":651},[102,91122,91123,91125,91127],{"class":104,"line":130},[102,91124,1208],{"class":119},[102,91126,59199],{"class":59165},[102,91128,59172],{"class":119},[102,91130,91131,91133,91135,91137,91139,91141],{"class":104,"line":136},[102,91132,60009],{"class":119},[102,91134,59209],{"class":59165},[102,91136,59212],{"class":112},[102,91138,260],{"class":119},[102,91140,59217],{"class":278},[102,91142,59172],{"class":119},[102,91144,91145,91147,91149,91151,91153,91155,91157,91159,91161],{"class":104,"line":142},[102,91146,60009],{"class":119},[102,91148,59209],{"class":59165},[102,91150,387],{"class":112},[102,91152,260],{"class":119},[102,91154,59256],{"class":278},[102,91156,59236],{"class":112},[102,91158,260],{"class":119},[102,91160,59263],{"class":278},[102,91162,59172],{"class":119},[102,91164,91165,91167,91169,91171,91173],{"class":104,"line":148},[102,91166,60009],{"class":119},[102,91168,59272],{"class":59165},[102,91170,59275],{"class":119},[102,91172,59272],{"class":59165},[102,91174,59172],{"class":119},[102,91176,91177,91179,91181],{"class":104,"line":157},[102,91178,60009],{"class":119},[102,91180,8955],{"class":59165},[102,91182,59172],{"class":119},[102,91184,91185,91187],{"class":104,"line":163},[102,91186,15198],{"class":59165},[102,91188,1077],{"class":119},[102,91190,91191,91193,91195,91197],{"class":104,"line":175},[102,91192,62560],{"class":187},[102,91194,59302],{"class":119},[102,91196,8423],{"class":187},[102,91198,266],{"class":119},[102,91200,91201,91203,91205,91207],{"class":104,"line":181},[102,91202,62571],{"class":187},[102,91204,59302],{"class":119},[102,91206,8423],{"class":187},[102,91208,266],{"class":119},[102,91210,91211,91213,91215,91217],{"class":104,"line":202},[102,91212,80461],{"class":187},[102,91214,59302],{"class":119},[102,91216,68370],{"class":187},[102,91218,266],{"class":119},[102,91220,91221],{"class":104,"line":208},[102,91222,205],{"class":119},[102,91224,91225],{"class":104,"line":214},[102,91226,652],{"emptyLinePlaceholder":651},[102,91228,91229,91231],{"class":104,"line":225},[102,91230,69988],{"class":112},[102,91232,1077],{"class":119},[102,91234,91235,91237,91239,91241,91243],{"class":104,"line":230},[102,91236,62636],{"class":187},[102,91238,59302],{"class":119},[102,91240,86439],{"class":187},[102,91242,59357],{"class":108},[102,91244,266],{"class":119},[102,91246,91247,91249,91251,91253,91255,91257],{"class":104,"line":236},[102,91248,62571],{"class":187},[102,91250,59302],{"class":119},[102,91252,5569],{"class":187},[102,91254,59357],{"class":108},[102,91256,59421],{"class":187},[102,91258,266],{"class":119},[102,91260,91261],{"class":104,"line":242},[102,91262,205],{"class":119},[102,91264,91265],{"class":104,"line":248},[102,91266,652],{"emptyLinePlaceholder":651},[102,91268,91269,91271],{"class":104,"line":254},[102,91270,86490],{"class":112},[102,91272,1077],{"class":119},[102,91274,91275,91277,91279,91281,91283],{"class":104,"line":269},[102,91276,62560],{"class":187},[102,91278,59302],{"class":119},[102,91280,9602],{"class":187},[102,91282,59357],{"class":108},[102,91284,266],{"class":119},[102,91286,91287,91289,91291,91293,91295,91297,91299],{"class":104,"line":298},[102,91288,69725],{"class":187},[102,91290,59302],{"class":119},[102,91292,35986],{"class":187},[102,91294,86545],{"class":187},[102,91296,86548],{"class":187},[102,91298,9720],{"class":108},[102,91300,266],{"class":119},[102,91302,91303,91305,91307,91309],{"class":104,"line":502},[102,91304,62874],{"class":187},[102,91306,59302],{"class":119},[102,91308,59342],{"class":187},[102,91310,266],{"class":119},[102,91312,91313,91315,91317,91319,91321,91323,91325],{"class":104,"line":507},[102,91314,69842],{"class":187},[102,91316,59302],{"class":119},[102,91318,7039],{"class":187},[102,91320,59357],{"class":108},[102,91322,59386],{"class":187},[102,91324,70109],{"class":187},[102,91326,266],{"class":119},[102,91328,91329],{"class":104,"line":512},[102,91330,205],{"class":119},[102,91332,91333],{"class":104,"line":521},[102,91334,652],{"emptyLinePlaceholder":651},[102,91336,91337,91339],{"class":104,"line":526},[102,91338,86608],{"class":112},[102,91340,1077],{"class":119},[102,91342,91343,91345,91347,91349],{"class":104,"line":532},[102,91344,69890],{"class":187},[102,91346,59302],{"class":119},[102,91348,69895],{"class":187},[102,91350,266],{"class":119},[102,91352,91353,91355,91357,91359],{"class":104,"line":538},[102,91354,62749],{"class":187},[102,91356,59302],{"class":119},[102,91358,69683],{"class":187},[102,91360,266],{"class":119},[102,91362,91363],{"class":104,"line":555},[102,91364,205],{"class":119},[102,91366,91367],{"class":104,"line":570},[102,91368,652],{"emptyLinePlaceholder":651},[102,91370,91371,91373,91375],{"class":104,"line":581},[102,91372,86490],{"class":112},[102,91374,63480],{"class":59165},[102,91376,1077],{"class":119},[102,91378,91379,91381,91383,91385,91387],{"class":104,"line":819},[102,91380,62636],{"class":187},[102,91382,59302],{"class":119},[102,91384,9639],{"class":187},[102,91386,59357],{"class":108},[102,91388,266],{"class":119},[102,91390,91391,91393,91395,91397,91399],{"class":104,"line":828},[102,91392,62650],{"class":187},[102,91394,59302],{"class":119},[102,91396,9639],{"class":187},[102,91398,59357],{"class":108},[102,91400,266],{"class":119},[102,91402,91403,91405,91407,91409,91411],{"class":104,"line":837},[102,91404,69615],{"class":187},[102,91406,59302],{"class":119},[102,91408,9354],{"class":187},[102,91410,59357],{"class":108},[102,91412,266],{"class":119},[102,91414,91415],{"class":104,"line":842},[102,91416,205],{"class":119},[102,91418,91419],{"class":104,"line":855},[102,91420,652],{"emptyLinePlaceholder":651},[102,91422,91423,91425,91427],{"class":104,"line":860},[102,91424,86490],{"class":112},[102,91426,70169],{"class":112},[102,91428,1077],{"class":119},[102,91430,91431,91433,91435,91437,91439],{"class":104,"line":871},[102,91432,62636],{"class":187},[102,91434,59302],{"class":119},[102,91436,7866],{"class":187},[102,91438,59357],{"class":108},[102,91440,266],{"class":119},[102,91442,91443],{"class":104,"line":1359},[102,91444,205],{"class":119},[102,91446,91447],{"class":104,"line":1368},[102,91448,652],{"emptyLinePlaceholder":651},[102,91450,91451,91453,91455,91458],{"class":104,"line":1373},[102,91452,86490],{"class":112},[102,91454,70169],{"class":112},[102,91456,91457],{"class":112}," .tag",[102,91459,1077],{"class":119},[102,91461,91462,91464,91466,91468],{"class":104,"line":1378},[102,91463,62874],{"class":187},[102,91465,59302],{"class":119},[102,91467,68734],{"class":187},[102,91469,266],{"class":119},[102,91471,91472,91474,91476,91478,91480],{"class":104,"line":1384},[102,91473,62560],{"class":187},[102,91475,59302],{"class":119},[102,91477,7044],{"class":187},[102,91479,59357],{"class":108},[102,91481,266],{"class":119},[102,91483,91484,91486,91488,91490,91492],{"class":104,"line":1398},[102,91485,62787],{"class":187},[102,91487,59302],{"class":119},[102,91489,9527],{"class":187},[102,91491,59357],{"class":108},[102,91493,266],{"class":119},[102,91495,91496,91498,91500,91502],{"class":104,"line":1424},[102,91497,65281],{"class":187},[102,91499,59302],{"class":119},[102,91501,69935],{"class":187},[102,91503,266],{"class":119},[102,91505,91506],{"class":104,"line":1429},[102,91507,205],{"class":119},[102,91509,91510],{"class":104,"line":1435},[102,91511,652],{"emptyLinePlaceholder":651},[102,91513,91514,91516,91518],{"class":104,"line":1450},[102,91515,86490],{"class":112},[102,91517,86782],{"class":112},[102,91519,39331],{"class":119},[102,91521,91522,91524,91527],{"class":104,"line":1473},[102,91523,86490],{"class":112},[102,91525,91526],{"class":112}," .sub-total",[102,91528,1077],{"class":119},[102,91530,91531,91533,91535,91537,91539],{"class":104,"line":1478},[102,91532,62787],{"class":187},[102,91534,59302],{"class":119},[102,91536,6080],{"class":187},[102,91538,59357],{"class":108},[102,91540,266],{"class":119},[102,91542,91543,91545,91547,91549],{"class":104,"line":1484},[102,91544,65281],{"class":187},[102,91546,59302],{"class":119},[102,91548,86805],{"class":187},[102,91550,266],{"class":119},[102,91552,91553,91555,91557,91559],{"class":104,"line":1499},[102,91554,69702],{"class":187},[102,91556,59302],{"class":119},[102,91558,7039],{"class":187},[102,91560,266],{"class":119},[102,91562,91563],{"class":104,"line":1508},[102,91564,205],{"class":119},[102,91566,91567],{"class":104,"line":1513},[102,91568,652],{"emptyLinePlaceholder":651},[102,91570,91571,91573,91575],{"class":104,"line":1524},[102,91572,86490],{"class":112},[102,91574,86822],{"class":112},[102,91576,39331],{"class":119},[102,91578,91579,91581,91584],{"class":104,"line":1529},[102,91580,86490],{"class":112},[102,91582,91583],{"class":112}," .sub-total::before",[102,91585,39331],{"class":119},[102,91587,91588,91591],{"class":104,"line":1538},[102,91589,91590],{"class":112},"    .amount::before",[102,91592,1077],{"class":119},[102,91594,91595,91597,91599,91601],{"class":104,"line":2089},[102,91596,86829],{"class":187},[102,91598,59302],{"class":119},[102,91600,86834],{"class":278},[102,91602,266],{"class":119},[102,91604,91605,91607,91609,91611,91613],{"class":104,"line":2094},[102,91606,62787],{"class":187},[102,91608,59302],{"class":119},[102,91610,9527],{"class":187},[102,91612,59357],{"class":108},[102,91614,266],{"class":119},[102,91616,91617],{"class":104,"line":2100},[102,91618,205],{"class":119},[102,91620,91621],{"class":104,"line":2106},[102,91622,652],{"emptyLinePlaceholder":651},[102,91624,91625,91627,91630],{"class":104,"line":2120},[102,91626,86490],{"class":112},[102,91628,91629],{"class":112}," .spec",[102,91631,1077],{"class":119},[102,91633,91634,91636,91638,91640],{"class":104,"line":2128},[102,91635,69702],{"class":187},[102,91637,59302],{"class":119},[102,91639,7044],{"class":187},[102,91641,266],{"class":119},[102,91643,91644,91646,91648,91651],{"class":104,"line":2149},[102,91645,65281],{"class":187},[102,91647,59302],{"class":119},[102,91649,91650],{"class":187},"#888",[102,91652,266],{"class":119},[102,91654,91655,91657,91659,91661,91663],{"class":104,"line":2161},[102,91656,62787],{"class":187},[102,91658,59302],{"class":119},[102,91660,9576],{"class":187},[102,91662,59357],{"class":108},[102,91664,266],{"class":119},[102,91666,91667,91669,91671,91673,91675],{"class":104,"line":2167},[102,91668,69865],{"class":187},[102,91670,59302],{"class":119},[102,91672,5016],{"class":187},[102,91674,59357],{"class":108},[102,91676,266],{"class":119},[102,91678,91679],{"class":104,"line":2190},[102,91680,205],{"class":119},[102,91682,91683],{"class":104,"line":2196},[102,91684,652],{"emptyLinePlaceholder":651},[102,91686,91687,91689,91692],{"class":104,"line":2219},[102,91688,86490],{"class":112},[102,91690,91691],{"class":112}," .count",[102,91693,1077],{"class":119},[102,91695,91696,91698,91700,91702],{"class":104,"line":2233},[102,91697,69702],{"class":187},[102,91699,59302],{"class":119},[102,91701,7039],{"class":187},[102,91703,266],{"class":119},[102,91705,91706,91708,91710,91713],{"class":104,"line":2253},[102,91707,65281],{"class":187},[102,91709,59302],{"class":119},[102,91711,91712],{"class":187},"#aaa",[102,91714,266],{"class":119},[102,91716,91717],{"class":104,"line":2259},[102,91718,205],{"class":119},[102,91720,91721],{"class":104,"line":2270},[102,91722,652],{"emptyLinePlaceholder":651},[102,91724,91725,91727],{"class":104,"line":2293},[102,91726,80340],{"class":112},[102,91728,1077],{"class":119},[102,91730,91731,91733,91735,91737,91739],{"class":104,"line":2315},[102,91732,62636],{"class":187},[102,91734,59302],{"class":119},[102,91736,86439],{"class":187},[102,91738,59357],{"class":108},[102,91740,266],{"class":119},[102,91742,91743,91745,91747,91749,91751],{"class":104,"line":2320},[102,91744,62571],{"class":187},[102,91746,59302],{"class":119},[102,91748,8423],{"class":187},[102,91750,59421],{"class":187},[102,91752,266],{"class":119},[102,91754,91755,91757,91759,91761],{"class":104,"line":2326},[102,91756,62874],{"class":187},[102,91758,59302],{"class":119},[102,91760,59342],{"class":187},[102,91762,266],{"class":119},[102,91764,91765,91767,91769,91771],{"class":104,"line":2340},[102,91766,62885],{"class":187},[102,91768,59302],{"class":119},[102,91770,59445],{"class":187},[102,91772,266],{"class":119},[102,91774,91775,91778,91780,91782,91784,91786,91789],{"class":104,"line":2354},[102,91776,91777],{"class":187},"      border-top",[102,91779,59302],{"class":119},[102,91781,7039],{"class":187},[102,91783,59357],{"class":108},[102,91785,59386],{"class":187},[102,91787,91788],{"class":187}," #4e4e4e",[102,91790,266],{"class":119},[102,91792,91793,91795,91797,91799,91801],{"class":104,"line":2359},[102,91794,62560],{"class":187},[102,91796,59302],{"class":119},[102,91798,5016],{"class":187},[102,91800,59357],{"class":108},[102,91802,266],{"class":119},[102,91804,91805],{"class":104,"line":2373},[102,91806,205],{"class":119},[102,91808,91809],{"class":104,"line":2378},[102,91810,652],{"emptyLinePlaceholder":651},[102,91812,91813,91815,91818],{"class":104,"line":2384},[102,91814,80340],{"class":112},[102,91816,91817],{"class":112}," .amount",[102,91819,1077],{"class":119},[102,91821,91822,91824,91826,91828,91830],{"class":104,"line":2389},[102,91823,62787],{"class":187},[102,91825,59302],{"class":119},[102,91827,6080],{"class":187},[102,91829,59357],{"class":108},[102,91831,266],{"class":119},[102,91833,91834,91836,91838,91840],{"class":104,"line":2403},[102,91835,65281],{"class":187},[102,91837,59302],{"class":119},[102,91839,86805],{"class":187},[102,91841,266],{"class":119},[102,91843,91844,91846,91848,91850],{"class":104,"line":2408},[102,91845,70199],{"class":187},[102,91847,59302],{"class":119},[102,91849,59354],{"class":187},[102,91851,266],{"class":119},[102,91853,91854,91856,91858,91860,91862],{"class":104,"line":2413},[102,91855,69615],{"class":187},[102,91857,59302],{"class":119},[102,91859,1445],{"class":187},[102,91861,59357],{"class":108},[102,91863,266],{"class":119},[102,91865,91866],{"class":104,"line":2427},[102,91867,205],{"class":119},[102,91869,91870,91872,91874],{"class":104,"line":2440},[102,91871,60282],{"class":119},[102,91873,8955],{"class":59165},[102,91875,59172],{"class":119},[102,91877,91878,91880,91882],{"class":104,"line":2445},[102,91879,59650],{"class":119},[102,91881,59199],{"class":59165},[102,91883,59172],{"class":119},[102,91885,91886],{"class":104,"line":2458},[102,91887,652],{"emptyLinePlaceholder":651},[102,91889,91890,91892,91894],{"class":104,"line":2463},[102,91891,1208],{"class":119},[102,91893,59665],{"class":59165},[102,91895,59172],{"class":119},[102,91897,91898,91900,91902,91904,91906,91908],{"class":104,"line":2468},[102,91899,60009],{"class":119},[102,91901,59476],{"class":59165},[102,91903,61351],{"class":112},[102,91905,260],{"class":119},[102,91907,70473],{"class":278},[102,91909,59172],{"class":119},[102,91911,91912,91914,91916],{"class":104,"line":2473},[102,91913,60282],{"class":119},[102,91915,59476],{"class":59165},[102,91917,59172],{"class":119},[102,91919,91920,91922,91924,91926,91928,91930],{"class":104,"line":2486},[102,91921,60009],{"class":119},[102,91923,59476],{"class":59165},[102,91925,61351],{"class":112},[102,91927,260],{"class":119},[102,91929,70445],{"class":278},[102,91931,59172],{"class":119},[102,91933,91934,91936,91938,91941,91943,91945,91947,91950,91952,91954,91956,91958],{"class":104,"line":2491},[102,91935,59206],{"class":119},[102,91937,59476],{"class":59165},[102,91939,91940],{"class":119},">合计：\u003C",[102,91942,102],{"class":59165},[102,91944,61351],{"class":112},[102,91946,260],{"class":119},[102,91948,91949],{"class":278},"\"amount\"",[102,91951,63179],{"class":119},[102,91953,102],{"class":59165},[102,91955,63179],{"class":119},[102,91957,59476],{"class":59165},[102,91959,59172],{"class":119},[102,91961,91962,91964,91966],{"class":104,"line":40498},[102,91963,60282],{"class":119},[102,91965,59476],{"class":59165},[102,91967,59172],{"class":119},[102,91969,91970,91972,91974],{"class":104,"line":40504},[102,91971,60009],{"class":119},[102,91973,59678],{"class":59165},[102,91975,59172],{"class":119},[102,91977,91978,91980,91982,91984],{"class":104,"line":40510},[102,91979,19961],{"class":108},[102,91981,87242],{"class":187},[102,91983,22296],{"class":108},[102,91985,63312],{"class":119},[102,91987,91988],{"class":104,"line":40516},[102,91989,87251],{"class":119},[102,91991,91992,91994,91996],{"class":104,"line":40522},[102,91993,87256],{"class":119},[102,91995,87259],{"class":278},[102,91997,39331],{"class":119},[102,91999,92000,92002,92004],{"class":104,"line":40533},[102,92001,87266],{"class":119},[102,92003,87269],{"class":278},[102,92005,39331],{"class":119},[102,92007,92008,92010,92013],{"class":104,"line":40539},[102,92009,87276],{"class":119},[102,92011,92012],{"class":187},"289.9",[102,92014,39331],{"class":119},[102,92016,92017,92019,92021],{"class":104,"line":40559},[102,92018,87286],{"class":119},[102,92020,87289],{"class":278},[102,92022,39331],{"class":119},[102,92024,92025,92028,92030],{"class":104,"line":40565},[102,92026,92027],{"class":119},"        count: ",[102,92029,7044],{"class":187},[102,92031,39331],{"class":119},[102,92033,92034,92037,92040],{"class":104,"line":40576},[102,92035,92036],{"class":119},"        spec: { color: ",[102,92038,92039],{"class":278},"'白色'",[102,92041,63469],{"class":119},[102,92043,92044],{"class":104,"line":40582},[102,92045,85757],{"class":119},[102,92047,92048],{"class":104,"line":40588},[102,92049,87251],{"class":119},[102,92051,92052,92054,92056],{"class":104,"line":40594},[102,92053,87256],{"class":119},[102,92055,87350],{"class":278},[102,92057,39331],{"class":119},[102,92059,92060,92062,92064],{"class":104,"line":40600},[102,92061,87266],{"class":119},[102,92063,87359],{"class":278},[102,92065,39331],{"class":119},[102,92067,92068,92070,92073],{"class":104,"line":40606},[102,92069,87276],{"class":119},[102,92071,92072],{"class":187},"109.8",[102,92074,39331],{"class":119},[102,92076,92077,92079,92081],{"class":104,"line":40612},[102,92078,87286],{"class":119},[102,92080,87377],{"class":278},[102,92082,39331],{"class":119},[102,92084,92085,92087,92089],{"class":104,"line":40618},[102,92086,92027],{"class":119},[102,92088,7049],{"class":187},[102,92090,39331],{"class":119},[102,92092,92093,92096,92098,92100,92102],{"class":104,"line":40638},[102,92094,92095],{"class":119},"        spec: { size: ",[102,92097,89768],{"class":278},[102,92099,63329],{"class":119},[102,92101,89773],{"class":278},[102,92103,63469],{"class":119},[102,92105,92106],{"class":104,"line":40644},[102,92107,85757],{"class":119},[102,92109,92110],{"class":104,"line":40660},[102,92111,87251],{"class":119},[102,92113,92114,92116,92118],{"class":104,"line":40666},[102,92115,87256],{"class":119},[102,92117,87394],{"class":278},[102,92119,39331],{"class":119},[102,92121,92122,92124,92126],{"class":104,"line":40680},[102,92123,87266],{"class":119},[102,92125,87403],{"class":278},[102,92127,39331],{"class":119},[102,92129,92130,92132,92135],{"class":104,"line":40686},[102,92131,87276],{"class":119},[102,92133,92134],{"class":187},"488",[102,92136,39331],{"class":119},[102,92138,92139,92141,92143],{"class":104,"line":40701},[102,92140,87286],{"class":119},[102,92142,87421],{"class":278},[102,92144,39331],{"class":119},[102,92146,92147,92149,92151],{"class":104,"line":40707},[102,92148,92027],{"class":119},[102,92150,7039],{"class":187},[102,92152,39331],{"class":119},[102,92154,92155,92157,92160,92163,92166],{"class":104,"line":40716},[102,92156,92036],{"class":119},[102,92158,92159],{"class":278},"'青色'",[102,92161,92162],{"class":119},", sum: ",[102,92164,92165],{"class":278},"'一大四小'",[102,92167,63469],{"class":119},[102,92169,92170],{"class":104,"line":40722},[102,92171,85757],{"class":119},[102,92173,92174],{"class":104,"line":40731},[102,92175,87251],{"class":119},[102,92177,92178,92180,92182],{"class":104,"line":40737},[102,92179,87256],{"class":119},[102,92181,87438],{"class":278},[102,92183,39331],{"class":119},[102,92185,92186,92188,92190],{"class":104,"line":40743},[102,92187,87266],{"class":119},[102,92189,87447],{"class":278},[102,92191,39331],{"class":119},[102,92193,92194,92196,92199],{"class":104,"line":40752},[102,92195,87276],{"class":119},[102,92197,92198],{"class":187},"139",[102,92200,39331],{"class":119},[102,92202,92203,92205,92207],{"class":104,"line":40758},[102,92204,87286],{"class":119},[102,92206,87465],{"class":278},[102,92208,39331],{"class":119},[102,92210,92211,92213,92215],{"class":104,"line":40769},[102,92212,92027],{"class":119},[102,92214,7039],{"class":187},[102,92216,39331],{"class":119},[102,92218,92219,92221,92224,92226,92229],{"class":104,"line":40775},[102,92220,92095],{"class":119},[102,92222,92223],{"class":278},"'小号'",[102,92225,63329],{"class":119},[102,92227,92228],{"class":278},"'紫色'",[102,92230,63335],{"class":119},[102,92232,92233,92236],{"class":104,"line":40794},[102,92234,92235],{"class":119},"        gift: ",[102,92237,92238],{"class":278},"'50g茶叶,清洗球'\n",[102,92240,92241],{"class":104,"line":40800},[102,92242,60263],{"class":119},[102,92244,92245],{"class":104,"line":40811},[102,92246,60974],{"class":119},[102,92248,92249],{"class":104,"line":40817},[102,92250,92251],{"class":126},"    \u002F\u002F  1.根据数据渲染页面\n",[102,92253,92254,92256,92258,92260,92262,92264,92266,92268,92270,92272,92274,92276],{"class":104,"line":40837},[102,92255,60272],{"class":119},[102,92257,62264],{"class":112},[102,92259,380],{"class":119},[102,92261,87766],{"class":278},[102,92263,82114],{"class":119},[102,92265,260],{"class":108},[102,92267,87913],{"class":119},[102,92269,81909],{"class":112},[102,92271,380],{"class":119},[102,92273,87660],{"class":386},[102,92275,87663],{"class":108},[102,92277,1077],{"class":119},[102,92279,92280],{"class":104,"line":40853},[102,92281,92282],{"class":126},"      \u002F\u002F 对象解构\n",[102,92284,92285,92287,92289,92291,92293,92295,92297,92300,92302,92304,92306,92309,92311,92314,92316,92318],{"class":104,"line":40859},[102,92286,66093],{"class":108},[102,92288,87672],{"class":119},[102,92290,87685],{"class":187},[102,92292,2571],{"class":119},[102,92294,87675],{"class":187},[102,92296,2571],{"class":119},[102,92298,92299],{"class":187},"count",[102,92301,2571],{"class":119},[102,92303,87680],{"class":187},[102,92305,2571],{"class":119},[102,92307,92308],{"class":187},"spec",[102,92310,2571],{"class":119},[102,92312,92313],{"class":187},"gift",[102,92315,87688],{"class":119},[102,92317,260],{"class":108},[102,92319,87693],{"class":119},[102,92321,92322],{"class":104,"line":40873},[102,92323,92324],{"class":126},"      \u002F\u002F 规格文字模块处理\n",[102,92326,92327,92329,92332,92334,92336,92338,92340,92342,92344,92346],{"class":104,"line":40879},[102,92328,66093],{"class":108},[102,92330,92331],{"class":187}," text",[102,92333,22296],{"class":108},[102,92335,89803],{"class":119},[102,92337,89806],{"class":112},[102,92339,89809],{"class":119},[102,92341,82088],{"class":112},[102,92343,380],{"class":119},[102,92345,89816],{"class":278},[102,92347,390],{"class":119},[102,92349,92350],{"class":104,"line":40885},[102,92351,92352],{"class":126},"      \u002F\u002F 处理赠品模块\n",[102,92354,92355,92357,92359,92361,92364,92366,92368,92370,92372,92375,92377,92379,92381,92383,92385,92388,92390,92393,92395,92397,92399,92401,92403,92405],{"class":104,"line":40896},[102,92356,66093],{"class":108},[102,92358,81784],{"class":187},[102,92360,22296],{"class":108},[102,92362,92363],{"class":119}," gift ",[102,92365,10006],{"class":108},[102,92367,90977],{"class":119},[102,92369,90980],{"class":112},[102,92371,380],{"class":119},[102,92373,92374],{"class":278},"','",[102,92376,38691],{"class":119},[102,92378,81909],{"class":112},[102,92380,380],{"class":119},[102,92382,87660],{"class":386},[102,92384,87663],{"class":108},[102,92386,92387],{"class":278}," `\u003Cspan class=\"tag\">【赠品】${",[102,92389,87660],{"class":119},[102,92391,92392],{"class":278},"}\u003C\u002Fspan>`",[102,92394,38691],{"class":119},[102,92396,82088],{"class":112},[102,92398,380],{"class":119},[102,92400,82093],{"class":278},[102,92402,22445],{"class":119},[102,92404,9881],{"class":108},[102,92406,77969],{"class":278},[102,92408,92409],{"class":104,"line":40902},[102,92410,92411],{"class":126},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[102,92413,92414,92416,92419,92421,92424,92426,92428,92430,92433,92435,92437,92439,92442,92444,92446],{"class":104,"line":40908},[102,92415,66093],{"class":108},[102,92417,92418],{"class":187}," subtotal",[102,92420,22296],{"class":108},[102,92422,92423],{"class":119}," ((price ",[102,92425,191],{"class":108},[102,92427,14552],{"class":187},[102,92429,5159],{"class":108},[102,92431,92432],{"class":119}," count) ",[102,92434,9611],{"class":108},[102,92436,14552],{"class":187},[102,92438,38691],{"class":119},[102,92440,92441],{"class":112},"toFixed",[102,92443,380],{"class":119},[102,92445,7044],{"class":187},[102,92447,390],{"class":119},[102,92449,92450],{"class":104,"line":40918},[102,92451,652],{"emptyLinePlaceholder":651},[102,92453,92454,92456],{"class":104,"line":40924},[102,92455,81847],{"class":108},[102,92457,78033],{"class":278},[102,92459,92460],{"class":104,"line":40935},[102,92461,92462],{"class":278},"        \u003Cdiv class=\"item\">\n",[102,92464,92465,92468,92470],{"class":104,"line":40941},[102,92466,92467],{"class":278},"          \u003Cimg src=\"${",[102,92469,87685],{"class":119},[102,92471,87717],{"class":278},[102,92473,92474,92477,92479,92482,92484],{"class":104,"line":40951},[102,92475,92476],{"class":278},"          \u003Cp class=\"name\">${",[102,92478,87675],{"class":119},[102,92480,92481],{"class":278},"}${",[102,92483,10185],{"class":119},[102,92485,87727],{"class":278},[102,92487,92488,92491,92493],{"class":104,"line":40956},[102,92489,92490],{"class":278},"          \u003Cp class=\"spec\">${",[102,92492,6778],{"class":119},[102,92494,87727],{"class":278},[102,92496,92497,92500,92502,92504,92506,92508,92510,92512],{"class":104,"line":40962},[102,92498,92499],{"class":278},"          \u003Cp class=\"price\">${",[102,92501,87680],{"class":119},[102,92503,9585],{"class":278},[102,92505,92441],{"class":112},[102,92507,380],{"class":278},[102,92509,7044],{"class":187},[102,92511,4033],{"class":278},[102,92513,87727],{"class":278},[102,92515,92516,92519,92521],{"class":104,"line":41011},[102,92517,92518],{"class":278},"          \u003Cp class=\"count\">x${",[102,92520,92299],{"class":119},[102,92522,87727],{"class":278},[102,92524,92525,92528,92531],{"class":104,"line":41058},[102,92526,92527],{"class":278},"          \u003Cp class=\"sub-total\">${",[102,92529,92530],{"class":119},"subtotal",[102,92532,87727],{"class":278},[102,92534,92535],{"class":104,"line":41063},[102,92536,92537],{"class":278},"        \u003C\u002Fdiv> \n",[102,92539,92540],{"class":104,"line":41069},[102,92541,92542],{"class":278},"             `\n",[102,92544,92545,92548,92550,92552,92554],{"class":104,"line":41088},[102,92546,92547],{"class":119},"    }).",[102,92549,82088],{"class":112},[102,92551,380],{"class":119},[102,92553,82093],{"class":278},[102,92555,390],{"class":119},[102,92557,92558],{"class":104,"line":41094},[102,92559,92560],{"class":126},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[102,92562,92563,92565,92567,92569,92571,92574,92576,92579,92581,92583,92585,92588,92591,92593,92596,92598,92600,92602,92605,92607,92609,92611,92613],{"class":104,"line":41114},[102,92564,19961],{"class":108},[102,92566,70650],{"class":187},[102,92568,22296],{"class":108},[102,92570,87913],{"class":119},[102,92572,92573],{"class":112},"reduce",[102,92575,11212],{"class":119},[102,92577,92578],{"class":386},"prev",[102,92580,2571],{"class":119},[102,92582,87660],{"class":386},[102,92584,22445],{"class":119},[102,92586,92587],{"class":108},"=>",[102,92589,92590],{"class":119}," prev ",[102,92592,1702],{"class":108},[102,92594,92595],{"class":119}," (item.price ",[102,92597,191],{"class":108},[102,92599,14552],{"class":187},[102,92601,5159],{"class":108},[102,92603,92604],{"class":119}," item.count) ",[102,92606,9611],{"class":108},[102,92608,14552],{"class":187},[102,92610,2571],{"class":119},[102,92612,8423],{"class":187},[102,92614,390],{"class":119},[102,92616,92617,92619,92621,92623,92626,92628,92630,92633,92635,92637,92639],{"class":104,"line":41120},[102,92618,60272],{"class":119},[102,92620,62264],{"class":112},[102,92622,380],{"class":119},[102,92624,92625],{"class":278},"'.amount'",[102,92627,82114],{"class":119},[102,92629,260],{"class":108},[102,92631,92632],{"class":119}," total.",[102,92634,92441],{"class":112},[102,92636,380],{"class":119},[102,92638,7044],{"class":187},[102,92640,390],{"class":119},[102,92642,92643,92645,92647],{"class":104,"line":41126},[102,92644,60282],{"class":119},[102,92646,59678],{"class":59165},[102,92648,59172],{"class":119},[102,92650,92651,92653,92655],{"class":104,"line":41136},[102,92652,59650],{"class":119},[102,92654,59665],{"class":59165},[102,92656,59172],{"class":119},[102,92658,92659],{"class":104,"line":41141},[102,92660,652],{"emptyLinePlaceholder":651},[102,92662,92663,92665,92667],{"class":104,"line":41147},[102,92664,59650],{"class":119},[102,92666,58500],{"class":59165},[102,92668,59172],{"class":119},[43,92670,92672],{"id":92671},"_411-编程思想","4.11 编程思想",[48,92674,92676],{"id":92675},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,92678,92679,92682],{},[18,92680,92681],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,92684,92685],{},"调用就可以了",[14,92687,92688],{},[6750,92689],{"alt":98,"src":92690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[48,92692,92694],{"id":92693},"_4112-面向对象","4.11.2 面向对象",[14,92696,92697],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,92699,92700],{},[6750,92701],{"alt":98,"src":92702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,92704,92705],{},"面向对象的特性：",[59,92707,92708,92711,92714],{},[62,92709,92710],{},"封装性",[62,92712,92713],{},"继承性",[62,92715,92716],{},"多态性",[48,92718,92720],{"id":92719},"_4113-两者比较","4.11.3 两者比较",[14,92722,92723],{},[6750,92724],{"alt":98,"src":92725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[43,92727,92729],{"id":92728},"_412-构造函数回顾","4.12 构造函数回顾",[14,92731,92732],{},[6750,92733],{"alt":98,"src":92734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,92736,92737],{},[6750,92738],{"alt":98,"src":92739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,92741,92742],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,92744,92745],{},[6750,92746],{"alt":98,"src":92747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[43,92749,92751],{"id":92750},"_413-原型","4.13 原型",[48,92753,92755],{"id":92754},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,92757,92758],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,92760,92761],{},[6750,92762],{"alt":98,"src":92763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,92765,92766],{},[6750,92767],{"alt":98,"src":92768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,92770,92771],{},"原型是构造函数的属性，它也是一个对象",[14,92773,92774],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,92776,92777],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[93,92779,92781],{"className":60932,"code":92780,"language":60934,"meta":98,"style":98},"\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",[83,92782,92783,92791,92796,92804,92809,92814,92819,92824,92829,92833,92837,92841,92846,92851,92855,92860,92865,92870,92875,92880,92884,92892],{"__ignoreMap":98},[102,92784,92785,92787,92789],{"class":104,"line":105},[102,92786,1208],{"class":119},[102,92788,59665],{"class":59165},[102,92790,59172],{"class":119},[102,92792,92793],{"class":104,"line":116},[102,92794,92795],{"class":126},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[102,92797,92798,92800,92802],{"class":104,"line":123},[102,92799,60009],{"class":119},[102,92801,59678],{"class":59165},[102,92803,59172],{"class":119},[102,92805,92806],{"class":104,"line":130},[102,92807,92808],{"class":119},"    function Star(uname, age) {\n",[102,92810,92811],{"class":104,"line":136},[102,92812,92813],{"class":119},"      this.uname = uname,\n",[102,92815,92816],{"class":104,"line":142},[102,92817,92818],{"class":119},"        this.age = age\n",[102,92820,92821],{"class":104,"line":148},[102,92822,92823],{"class":119},"      \u002F\u002F this.sing = function () {\n",[102,92825,92826],{"class":104,"line":157},[102,92827,92828],{"class":119},"      \u002F\u002F   console.log('唱歌')\n",[102,92830,92831],{"class":104,"line":163},[102,92832,652],{"emptyLinePlaceholder":651},[102,92834,92835],{"class":104,"line":175},[102,92836,67902],{"class":119},[102,92838,92839],{"class":104,"line":181},[102,92840,205],{"class":119},[102,92842,92843],{"class":104,"line":202},[102,92844,92845],{"class":119},"    Star.prototype.sing = function () {\n",[102,92847,92848],{"class":104,"line":208},[102,92849,92850],{"class":119},"      console.log('唱歌')\n",[102,92852,92853],{"class":104,"line":214},[102,92854,205],{"class":119},[102,92856,92857],{"class":104,"line":225},[102,92858,92859],{"class":119},"    \u002F\u002F console.dir(Star.prototype)\n",[102,92861,92862],{"class":104,"line":230},[102,92863,92864],{"class":119},"    const pink = new Star('pink', 18)\n",[102,92866,92867],{"class":104,"line":236},[102,92868,92869],{"class":119},"    const red = new Star('red', 20)\n",[102,92871,92872],{"class":104,"line":242},[102,92873,92874],{"class":119},"    pink.sing()\n",[102,92876,92877],{"class":104,"line":248},[102,92878,92879],{"class":119},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[102,92881,92882],{"class":104,"line":254},[102,92883,652],{"emptyLinePlaceholder":651},[102,92885,92886,92888,92890],{"class":104,"line":269},[102,92887,60282],{"class":119},[102,92889,59678],{"class":59165},[102,92891,59172],{"class":119},[102,92893,92894,92896,92898],{"class":104,"line":298},[102,92895,59650],{"class":119},[102,92897,59665],{"class":59165},[102,92899,59172],{"class":119},[14,92901,92902],{},[6750,92903],{"alt":98,"src":92904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[93,92906,92908],{"className":60932,"code":92907,"language":60934,"meta":98,"style":98},"\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",[83,92909,92910,92918,92926,92931,92936,92941,92946,92950,92955,92960,92965,92969,92974,92978,92982,92987,92991,92999],{"__ignoreMap":98},[102,92911,92912,92914,92916],{"class":104,"line":105},[102,92913,1208],{"class":119},[102,92915,59665],{"class":59165},[102,92917,59172],{"class":119},[102,92919,92920,92922,92924],{"class":104,"line":116},[102,92921,60009],{"class":119},[102,92923,59678],{"class":59165},[102,92925,59172],{"class":119},[102,92927,92928],{"class":104,"line":123},[102,92929,92930],{"class":119},"    let that\n",[102,92932,92933],{"class":104,"line":130},[102,92934,92935],{"class":119},"    function Star(uname) {\n",[102,92937,92938],{"class":104,"line":136},[102,92939,92940],{"class":119},"      this.uname = uname\n",[102,92942,92943],{"class":104,"line":142},[102,92944,92945],{"class":119},"      that = this\n",[102,92947,92948],{"class":104,"line":148},[102,92949,205],{"class":119},[102,92951,92952],{"class":104,"line":157},[102,92953,92954],{"class":119},"    \u002F\u002F 实例对象是 ldh\n",[102,92956,92957],{"class":104,"line":163},[102,92958,92959],{"class":119},"    const ldh = new Star('刘德华')\n",[102,92961,92962],{"class":104,"line":175},[102,92963,92964],{"class":119},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[102,92966,92967],{"class":104,"line":181},[102,92968,652],{"emptyLinePlaceholder":651},[102,92970,92971],{"class":104,"line":202},[102,92972,92973],{"class":119},"    Star.sing = function () {\n",[102,92975,92976],{"class":104,"line":208},[102,92977,92850],{"class":119},[102,92979,92980],{"class":104,"line":214},[102,92981,205],{"class":119},[102,92983,92984],{"class":104,"line":225},[102,92985,92986],{"class":119},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[102,92988,92989],{"class":104,"line":230},[102,92990,652],{"emptyLinePlaceholder":651},[102,92992,92993,92995,92997],{"class":104,"line":236},[102,92994,60282],{"class":119},[102,92996,59678],{"class":59165},[102,92998,59172],{"class":119},[102,93000,93001,93003,93005],{"class":104,"line":242},[102,93002,59650],{"class":119},[102,93004,59665],{"class":59165},[102,93006,59172],{"class":119},[14,93008,93009],{},"构造函数的this指向的是实例对象；",[14,93011,93012],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[48,93014,93016],{"id":93015},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,93018,93019],{},[6750,93020],{"alt":98,"src":93021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[93,93023,93025],{"className":60932,"code":93024,"language":60934,"meta":98,"style":98},"\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",[83,93026,93027,93035,93043,93048,93053,93058,93063,93068,93073,93078,93083,93088,93093,93097,93102,93107,93112,93117,93121,93126,93131,93136,93141,93145,93150,93155,93160,93165,93169,93174,93178,93186],{"__ignoreMap":98},[102,93028,93029,93031,93033],{"class":104,"line":105},[102,93030,1208],{"class":119},[102,93032,59665],{"class":59165},[102,93034,59172],{"class":119},[102,93036,93037,93039,93041],{"class":104,"line":116},[102,93038,60009],{"class":119},[102,93040,59678],{"class":59165},[102,93042,59172],{"class":119},[102,93044,93045],{"class":104,"line":123},[102,93046,93047],{"class":119},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[102,93049,93050],{"class":104,"line":130},[102,93051,93052],{"class":119},"    const arr = [1, 2, 3]\n",[102,93054,93055],{"class":104,"line":136},[102,93056,93057],{"class":119},"    \u002F\u002F 自己定义数组的扩展方法\n",[102,93059,93060],{"class":104,"line":142},[102,93061,93062],{"class":119},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[102,93064,93065],{"class":104,"line":148},[102,93066,93067],{"class":119},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[102,93069,93070],{"class":104,"line":157},[102,93071,93072],{"class":119},"    \u002F\u002F ①.最大值\n",[102,93074,93075],{"class":104,"line":163},[102,93076,93077],{"class":119},"    Array.prototype.max = function () {\n",[102,93079,93080],{"class":104,"line":175},[102,93081,93082],{"class":119},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[102,93084,93085],{"class":104,"line":181},[102,93086,93087],{"class":119},"      return Math.max(...this)\n",[102,93089,93090],{"class":104,"line":202},[102,93091,93092],{"class":119},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[102,93094,93095],{"class":104,"line":208},[102,93096,205],{"class":119},[102,93098,93099],{"class":104,"line":214},[102,93100,93101],{"class":119},"    console.log(arr.max())\n",[102,93103,93104],{"class":104,"line":225},[102,93105,93106],{"class":119},"    \u002F\u002F ②最小值\n",[102,93108,93109],{"class":104,"line":230},[102,93110,93111],{"class":119},"    Array.prototype.min = function () {\n",[102,93113,93114],{"class":104,"line":236},[102,93115,93116],{"class":119},"      return Math.min(...this)\n",[102,93118,93119],{"class":104,"line":242},[102,93120,205],{"class":119},[102,93122,93123],{"class":104,"line":248},[102,93124,93125],{"class":119},"    console.log(arr.min())\n",[102,93127,93128],{"class":104,"line":254},[102,93129,93130],{"class":119},"    \u002F\u002F③求和\n",[102,93132,93133],{"class":104,"line":269},[102,93134,93135],{"class":119},"    Array.prototype.sum = function () {\n",[102,93137,93138],{"class":104,"line":298},[102,93139,93140],{"class":119},"      return this.reduce((prev, current) => prev + current, 0)\n",[102,93142,93143],{"class":104,"line":502},[102,93144,205],{"class":119},[102,93146,93147],{"class":104,"line":507},[102,93148,93149],{"class":119},"    console.log(arr.sum())\n",[102,93151,93152],{"class":104,"line":512},[102,93153,93154],{"class":119},"    \u002F\u002F ③排序\n",[102,93156,93157],{"class":104,"line":521},[102,93158,93159],{"class":119},"    Array.prototype.rever = function () {\n",[102,93161,93162],{"class":104,"line":526},[102,93163,93164],{"class":119},"      return this.reverse()\n",[102,93166,93167],{"class":104,"line":532},[102,93168,205],{"class":119},[102,93170,93171],{"class":104,"line":538},[102,93172,93173],{"class":119},"    console.log(arr.rever())\n",[102,93175,93176],{"class":104,"line":555},[102,93177,652],{"emptyLinePlaceholder":651},[102,93179,93180,93182,93184],{"class":104,"line":570},[102,93181,60282],{"class":119},[102,93183,59678],{"class":59165},[102,93185,59172],{"class":119},[102,93187,93188,93190,93192],{"class":104,"line":581},[102,93189,59650],{"class":119},[102,93191,59665],{"class":59165},[102,93193,59172],{"class":119},[14,93195,93196],{},[6750,93197],{"alt":98,"src":93198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[48,93200,93202],{"id":93201},"_4133-constructor-属性","4.13.3 constructor 属性",[14,93204,93205],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,93207,93208],{},[6750,93209],{"alt":98,"src":93210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[93,93212,93214],{"className":60932,"code":93213,"language":60934,"meta":98,"style":98},"\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",[83,93215,93216,93224,93232,93237,93242,93246,93251,93256,93261,93269],{"__ignoreMap":98},[102,93217,93218,93220,93222],{"class":104,"line":105},[102,93219,1208],{"class":119},[102,93221,59665],{"class":59165},[102,93223,59172],{"class":119},[102,93225,93226,93228,93230],{"class":104,"line":116},[102,93227,60009],{"class":119},[102,93229,59678],{"class":59165},[102,93231,59172],{"class":119},[102,93233,93234],{"class":104,"line":123},[102,93235,93236],{"class":119},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[102,93238,93239],{"class":104,"line":130},[102,93240,93241],{"class":119},"    function Star() {\n",[102,93243,93244],{"class":104,"line":136},[102,93245,205],{"class":119},[102,93247,93248],{"class":104,"line":142},[102,93249,93250],{"class":119},"    const ldh = new Star()\n",[102,93252,93253],{"class":104,"line":148},[102,93254,93255],{"class":119},"    console.log(Star.prototype)\n",[102,93257,93258],{"class":104,"line":157},[102,93259,93260],{"class":119},"    console.log(Star.prototype.constructor === Star)\n",[102,93262,93263,93265,93267],{"class":104,"line":163},[102,93264,60282],{"class":119},[102,93266,59678],{"class":59165},[102,93268,59172],{"class":119},[102,93270,93271,93273,93275],{"class":104,"line":175},[102,93272,59650],{"class":119},[102,93274,59665],{"class":59165},[102,93276,59172],{"class":119},[14,93278,93279],{},[6750,93280],{"alt":98,"src":93281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,93283,93284],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[93,93286,93288],{"className":60932,"code":93287,"language":60934,"meta":98,"style":98},"  \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",[83,93289,93290,93298,93302,93306,93310,93315,93320,93325,93329,93334,93339,93344,93349,93354,93359,93363,93367,93372,93377,93382,93386,93391,93396,93400,93404,93408],{"__ignoreMap":98},[102,93291,93292,93294,93296],{"class":104,"line":105},[102,93293,60009],{"class":119},[102,93295,59678],{"class":59165},[102,93297,59172],{"class":119},[102,93299,93300],{"class":104,"line":116},[102,93301,93236],{"class":119},[102,93303,93304],{"class":104,"line":123},[102,93305,93241],{"class":119},[102,93307,93308],{"class":104,"line":130},[102,93309,205],{"class":119},[102,93311,93312],{"class":104,"line":136},[102,93313,93314],{"class":119},"    \u002F\u002F const ldh = new Star()\n",[102,93316,93317],{"class":104,"line":142},[102,93318,93319],{"class":119},"    \u002F\u002F console.log(Star.prototype)\n",[102,93321,93322],{"class":104,"line":148},[102,93323,93324],{"class":119},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[102,93326,93327],{"class":104,"line":157},[102,93328,652],{"emptyLinePlaceholder":651},[102,93330,93331],{"class":104,"line":163},[102,93332,93333],{"class":119},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[102,93335,93336],{"class":104,"line":175},[102,93337,93338],{"class":119},"    \u002F\u002F Star.prototype.sing = function () {\n",[102,93340,93341],{"class":104,"line":181},[102,93342,93343],{"class":119},"    \u002F\u002F   console.log('唱歌')\n",[102,93345,93346],{"class":104,"line":202},[102,93347,93348],{"class":119},"    \u002F\u002F }\n",[102,93350,93351],{"class":104,"line":208},[102,93352,93353],{"class":119},"    \u002F\u002F Star.prototype.dance = function () {\n",[102,93355,93356],{"class":104,"line":214},[102,93357,93358],{"class":119},"    \u002F\u002F   console.log('跳舞')\n",[102,93360,93361],{"class":104,"line":225},[102,93362,93348],{"class":119},[102,93364,93365],{"class":104,"line":230},[102,93366,93255],{"class":119},[102,93368,93369],{"class":104,"line":236},[102,93370,93371],{"class":119},"    Star.prototype = {\n",[102,93373,93374],{"class":104,"line":242},[102,93375,93376],{"class":119},"      sing: function () {\n",[102,93378,93379],{"class":104,"line":248},[102,93380,93381],{"class":119},"        console.log('唱歌')\n",[102,93383,93384],{"class":104,"line":254},[102,93385,85757],{"class":119},[102,93387,93388],{"class":104,"line":269},[102,93389,93390],{"class":119},"      dance: function () {\n",[102,93392,93393],{"class":104,"line":298},[102,93394,93395],{"class":119},"        console.log('跳舞')\n",[102,93397,93398],{"class":104,"line":502},[102,93399,60263],{"class":119},[102,93401,93402],{"class":104,"line":507},[102,93403,205],{"class":119},[102,93405,93406],{"class":104,"line":512},[102,93407,93255],{"class":119},[102,93409,93410,93412,93414],{"class":104,"line":521},[102,93411,60282],{"class":119},[102,93413,59678],{"class":59165},[102,93415,59172],{"class":119},[14,93417,93418],{},"进行输出结果后会发现：",[14,93420,93421],{},[6750,93422],{"alt":98,"src":93423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,93425,93426],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,93428,93429],{},"所以，要重新指回创造这个原型对象的构造函数",[93,93431,93433],{"className":79078,"code":93432,"language":79080,"meta":98,"style":98},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[83,93434,93435,93449,93454,93459,93470,93483,93488,93499,93513,93517],{"__ignoreMap":98},[102,93436,93437,93440,93442,93445,93447],{"class":104,"line":105},[102,93438,93439],{"class":187},"Star",[102,93441,9585],{"class":119},[102,93443,93444],{"class":187},"prototype",[102,93446,22296],{"class":108},[102,93448,1077],{"class":119},[102,93450,93451],{"class":104,"line":116},[102,93452,93453],{"class":126},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[102,93455,93456],{"class":104,"line":123},[102,93457,93458],{"class":119},"  constructor: Star,\n",[102,93460,93461,93464,93466,93468],{"class":104,"line":130},[102,93462,93463],{"class":112},"  sing",[102,93465,59302],{"class":119},[102,93467,62314],{"class":108},[102,93469,62317],{"class":119},[102,93471,93472,93474,93476,93478,93481],{"class":104,"line":136},[102,93473,81618],{"class":119},[102,93475,66112],{"class":112},[102,93477,380],{"class":119},[102,93479,93480],{"class":278},"'唱歌'",[102,93482,390],{"class":119},[102,93484,93485],{"class":104,"line":142},[102,93486,93487],{"class":119},"   },\n",[102,93489,93490,93493,93495,93497],{"class":104,"line":148},[102,93491,93492],{"class":112},"   dance",[102,93494,59302],{"class":119},[102,93496,62314],{"class":108},[102,93498,62317],{"class":119},[102,93500,93501,93504,93506,93508,93511],{"class":104,"line":157},[102,93502,93503],{"class":119},"     console.",[102,93505,66112],{"class":112},[102,93507,380],{"class":119},[102,93509,93510],{"class":278},"'跳舞'",[102,93512,390],{"class":119},[102,93514,93515],{"class":104,"line":163},[102,93516,13119],{"class":119},[102,93518,93519],{"class":104,"line":175},[102,93520,301],{"class":119},[14,93522,93523],{},[6750,93524],{"alt":98,"src":93525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,93527,93528],{},"总结1：",[14,93530,93531],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,93533,93534],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,93536,93537],{},"constructor指的是他的来源",[14,93539,93540],{},[6750,93541],{"alt":98,"src":93542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,93544,93545],{},[6750,93546],{"alt":98,"src":93547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,93549,93550],{},"总结2：",[14,93552,93553],{},[6750,93554],{"alt":98,"src":93555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,93557,93558],{},[6750,93559],{"alt":98,"src":93560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,93562,93563],{},[6750,93564],{"alt":98,"src":93565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[48,93567,93569],{"id":93568},"_4134-对象原型","4.13.4 对象原型",[14,93571,93572],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,93574,93575],{},"对象原型就是__proto__这个属性",[14,93577,93578],{},[6750,93579],{"alt":98,"src":93580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,93582,93583],{},[6750,93584],{"alt":98,"src":93585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,93587,93588],{},[6750,93589],{"alt":98,"src":93590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,93592,93593],{},[6750,93594],{"alt":98,"src":93595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[93,93597,93599],{"className":60932,"code":93598,"language":60934,"meta":98,"style":98},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[83,93600,93601,93609,93617,93621,93625,93629,93634,93642],{"__ignoreMap":98},[102,93602,93603,93605,93607],{"class":104,"line":105},[102,93604,1208],{"class":119},[102,93606,59665],{"class":59165},[102,93608,59172],{"class":119},[102,93610,93611,93613,93615],{"class":104,"line":116},[102,93612,60009],{"class":119},[102,93614,59678],{"class":59165},[102,93616,59172],{"class":119},[102,93618,93619],{"class":104,"line":123},[102,93620,93241],{"class":119},[102,93622,93623],{"class":104,"line":130},[102,93624,205],{"class":119},[102,93626,93627],{"class":104,"line":136},[102,93628,93250],{"class":119},[102,93630,93631],{"class":104,"line":142},[102,93632,93633],{"class":119},"    console.log(ldh)\n",[102,93635,93636,93638,93640],{"class":104,"line":148},[102,93637,60282],{"class":119},[102,93639,59678],{"class":59165},[102,93641,59172],{"class":119},[102,93643,93644,93646,93648],{"class":104,"line":157},[102,93645,59650],{"class":119},[102,93647,59665],{"class":59165},[102,93649,59172],{"class":119},[14,93651,93652],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,93654,93655],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,93657,93658],{},[6750,93659],{"alt":98,"src":93660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,93662,93663],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,93665,93666],{},"对象原型指向原型对象",[14,93668,93669],{},[6750,93670],{"alt":98,"src":93671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,93673,93674],{},[6750,93675],{"alt":98,"src":93676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,93678,93679],{},[6750,93680],{"alt":98,"src":93681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[48,93683,93685],{"id":93684},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,93687,93688],{},[6750,93689],{"alt":98,"src":93690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[87,93692,93693,93696,93699,93702],{},[62,93694,93695],{},"构造函数通过new的形式实例化得到实例对象",[62,93697,93698],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[62,93700,93701],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[62,93703,93704],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,93706,93707],{},[6750,93708],{"alt":98,"src":93709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,93711,93712],{},"题目梳理：",[14,93714,93715],{},[6750,93716],{"alt":98,"src":93717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[48,93719,93721],{"id":93720},"_4136-原型继承","4.13.6 原型继承",[14,93723,93724],{},[6750,93725],{"alt":98,"src":93726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,93728,93729],{},[6750,93730],{"alt":98,"src":93731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,93733,93734],{},[6750,93735],{"alt":98,"src":93736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,93738,93739],{},[6750,93740],{"alt":98,"src":93741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,93743,93744],{},[6750,93745],{"alt":98,"src":93746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,93748,93749],{},[6750,93750],{"alt":98,"src":93751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,93753,93754],{},[6750,93755],{"alt":98,"src":93756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,93758,93759],{},[6750,93760],{"alt":98,"src":93761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,93763,93764],{},"回顾：构造函数每次new得到对象都是不同的",[48,93766,93768],{"id":93767},"_4137-原型链","4.13.7 原型链",[14,93770,93771],{},[6750,93772],{"alt":98,"src":93773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,93775,93776],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,93778,93779],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,93781,93782],{},"大哥是Object",[14,93784,93785],{},[6750,93786],{"alt":98,"src":93787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,93789,93790],{},[6750,93791],{"alt":98,"src":93792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,93794,93795],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,93797,93798],{},"万物皆对象",[48,93800,93802],{"id":93801},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,93804,93805],{},"模态框",[14,93807,93808],{},"以后遇见这个效果直接使用这个就行",[14,93810,93811],{},[6750,93812],{"alt":98,"src":93813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,93815,93816],{},[6750,93817],{"alt":98,"src":93818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,93820,93821],{},[6750,93822],{"alt":98,"src":93823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,93825,93826],{},[6750,93827],{"alt":98,"src":93828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,93830,93831],{},"补充知识点：",[87,93833,93834],{},[62,93835,93836],{},"append()",[14,93838,93839],{},[6750,93840],{"alt":98,"src":93841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[93,93843,93845],{"className":58498,"code":93844,"language":58500,"meta":98,"style":98},"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",[83,93846,93847,93852,93857,93862,93866,93870,93874,93879,93884,93889,93893],{"__ignoreMap":98},[102,93848,93849],{"class":104,"line":105},[102,93850,93851],{"class":119},"append(param1)\n",[102,93853,93854],{"class":104,"line":116},[102,93855,93856],{"class":119},"append(param1, param2)\n",[102,93858,93859],{"class":104,"line":123},[102,93860,93861],{"class":119},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[102,93863,93864],{"class":104,"line":130},[102,93865,652],{"emptyLinePlaceholder":651},[102,93867,93868],{"class":104,"line":136},[102,93869,652],{"emptyLinePlaceholder":651},[102,93871,93872],{"class":104,"line":142},[102,93873,652],{"emptyLinePlaceholder":651},[102,93875,93876],{"class":104,"line":148},[102,93877,93878],{"class":119},"let div = document.createElement(\"div\");\n",[102,93880,93881],{"class":104,"line":157},[102,93882,93883],{"class":119},"let p = document.createElement(\"p\");\n",[102,93885,93886],{"class":104,"line":163},[102,93887,93888],{"class":119},"div.append(p);\n",[102,93890,93891],{"class":104,"line":175},[102,93892,652],{"emptyLinePlaceholder":651},[102,93894,93895,93898,93900],{"class":104,"line":181},[102,93896,93897],{"class":119},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[102,93899,14],{"class":59165},[102,93901,93902],{"class":119},"> ]\n",[87,93904,93905],{"start":116},[62,93906,93907],{},"remove()",[14,93909,93910],{},"自己删自己",[14,93912,93913],{},[6750,93914],{"alt":98,"src":93915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[93,93917,93919],{"className":58498,"code":93918,"language":58500,"meta":98,"style":98},"\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",[83,93920,93921,93931,93945,93949,93957,93971,93991,94003,94011,94018,94030,94043,94078,94090,94101,94113,94125,94137,94164,94174,94178,94182,94191,94203,94217,94227,94239,94243,94247,94257,94268,94278,94288,94301,94314,94324,94328,94332,94341,94351,94363,94367,94371,94380,94390,94400,94412,94416,94420,94430,94446,94457,94467,94477,94489,94501,94513,94517,94521,94534,94545,94549,94557,94565,94569,94577,94597,94617,94625,94630,94656,94661,94666,94685,94690,94702,94707,94718,94728,94738,94743,94748,94752,94757,94762,94767,94787,94792,94812,94817,94831,94836,94841,94846,94862,94866,94871,94900,94905,94910,94915,94926,94930,94934,94938,94943,94968,94973,94998,95003,95012,95016,95021,95046,95050,95075,95079,95088,95092,95097,95115,95125,95129,95137,95145,95149],{"__ignoreMap":98},[102,93922,93923,93925,93927,93929],{"class":104,"line":105},[102,93924,59162],{"class":119},[102,93926,59166],{"class":59165},[102,93928,59169],{"class":112},[102,93930,59172],{"class":119},[102,93932,93933,93935,93937,93939,93941,93943],{"class":104,"line":116},[102,93934,1208],{"class":119},[102,93936,58500],{"class":59165},[102,93938,59181],{"class":112},[102,93940,260],{"class":119},[102,93942,59186],{"class":278},[102,93944,59172],{"class":119},[102,93946,93947],{"class":104,"line":123},[102,93948,652],{"emptyLinePlaceholder":651},[102,93950,93951,93953,93955],{"class":104,"line":130},[102,93952,1208],{"class":119},[102,93954,59199],{"class":59165},[102,93956,59172],{"class":119},[102,93958,93959,93961,93963,93965,93967,93969],{"class":104,"line":136},[102,93960,60009],{"class":119},[102,93962,59209],{"class":59165},[102,93964,59212],{"class":112},[102,93966,260],{"class":119},[102,93968,59217],{"class":278},[102,93970,59172],{"class":119},[102,93972,93973,93975,93977,93979,93981,93983,93985,93987,93989],{"class":104,"line":142},[102,93974,60009],{"class":119},[102,93976,59209],{"class":59165},[102,93978,387],{"class":112},[102,93980,260],{"class":119},[102,93982,59256],{"class":278},[102,93984,59236],{"class":112},[102,93986,260],{"class":119},[102,93988,59263],{"class":278},[102,93990,59172],{"class":119},[102,93992,93993,93995,93997,93999,94001],{"class":104,"line":148},[102,93994,60009],{"class":119},[102,93996,59272],{"class":59165},[102,93998,59275],{"class":119},[102,94000,59272],{"class":59165},[102,94002,59172],{"class":119},[102,94004,94005,94007,94009],{"class":104,"line":157},[102,94006,60009],{"class":119},[102,94008,8955],{"class":59165},[102,94010,59172],{"class":119},[102,94012,94013,94016],{"class":104,"line":163},[102,94014,94015],{"class":112},"    .modal",[102,94017,1077],{"class":119},[102,94019,94020,94022,94024,94026,94028],{"class":104,"line":175},[102,94021,62636],{"class":187},[102,94023,59302],{"class":119},[102,94025,12786],{"class":187},[102,94027,59357],{"class":108},[102,94029,266],{"class":119},[102,94031,94032,94035,94037,94039,94041],{"class":104,"line":181},[102,94033,94034],{"class":187},"      min-height",[102,94036,59302],{"class":119},[102,94038,5569],{"class":187},[102,94040,59357],{"class":108},[102,94042,266],{"class":119},[102,94044,94045,94047,94049,94051,94053,94055,94057,94059,94061,94063,94065,94067,94069,94071,94073,94076],{"class":104,"line":202},[102,94046,86615],{"class":187},[102,94048,59302],{"class":119},[102,94050,8423],{"class":187},[102,94052,866],{"class":187},[102,94054,989],{"class":187},[102,94056,59357],{"class":108},[102,94058,86632],{"class":187},[102,94060,380],{"class":119},[102,94062,8423],{"class":187},[102,94064,2571],{"class":119},[102,94066,8423],{"class":187},[102,94068,2571],{"class":119},[102,94070,8423],{"class":187},[102,94072,2571],{"class":119},[102,94074,94075],{"class":187},"0.1",[102,94077,552],{"class":119},[102,94079,94080,94082,94084,94086,94088],{"class":104,"line":208},[102,94081,62999],{"class":187},[102,94083,59302],{"class":119},[102,94085,9329],{"class":187},[102,94087,59357],{"class":108},[102,94089,266],{"class":119},[102,94091,94092,94094,94096,94099],{"class":104,"line":214},[102,94093,62624],{"class":187},[102,94095,59302],{"class":119},[102,94097,94098],{"class":187},"fixed",[102,94100,266],{"class":119},[102,94102,94103,94106,94108,94111],{"class":104,"line":225},[102,94104,94105],{"class":187},"      z-index",[102,94107,59302],{"class":119},[102,94109,94110],{"class":187},"999",[102,94112,266],{"class":119},[102,94114,94115,94117,94119,94121,94123],{"class":104,"line":230},[102,94116,62703],{"class":187},[102,94118,59302],{"class":119},[102,94120,1445],{"class":187},[102,94122,9363],{"class":108},[102,94124,266],{"class":119},[102,94126,94127,94129,94131,94133,94135],{"class":104,"line":236},[102,94128,62812],{"class":187},[102,94130,59302],{"class":119},[102,94132,1445],{"class":187},[102,94134,9363],{"class":108},[102,94136,266],{"class":119},[102,94138,94139,94141,94143,94145,94147,94150,94152,94154,94156,94158,94160,94162],{"class":104,"line":242},[102,94140,86656],{"class":187},[102,94142,59302],{"class":119},[102,94144,86661],{"class":187},[102,94146,380],{"class":119},[102,94148,94149],{"class":187},"-50",[102,94151,9363],{"class":108},[102,94153,2571],{"class":119},[102,94155,94149],{"class":187},[102,94157,9363],{"class":108},[102,94159,2571],{"class":119},[102,94161,8423],{"class":187},[102,94163,552],{"class":119},[102,94165,94166,94168,94170,94172],{"class":104,"line":248},[102,94167,62749],{"class":187},[102,94169,59302],{"class":119},[102,94171,68707],{"class":187},[102,94173,266],{"class":119},[102,94175,94176],{"class":104,"line":254},[102,94177,205],{"class":119},[102,94179,94180],{"class":104,"line":269},[102,94181,652],{"emptyLinePlaceholder":651},[102,94183,94184,94186,94189],{"class":104,"line":298},[102,94185,94015],{"class":112},[102,94187,94188],{"class":112}," .header",[102,94190,1077],{"class":119},[102,94192,94193,94195,94197,94199,94201],{"class":104,"line":502},[102,94194,65224],{"class":187},[102,94196,59302],{"class":119},[102,94198,9434],{"class":187},[102,94200,59357],{"class":108},[102,94202,266],{"class":119},[102,94204,94205,94207,94209,94211,94213,94215],{"class":104,"line":507},[102,94206,62560],{"class":187},[102,94208,59302],{"class":119},[102,94210,8423],{"class":187},[102,94212,989],{"class":187},[102,94214,59357],{"class":108},[102,94216,266],{"class":119},[102,94218,94219,94221,94223,94225],{"class":104,"line":512},[102,94220,62624],{"class":187},[102,94222,59302],{"class":119},[102,94224,62629],{"class":187},[102,94226,266],{"class":119},[102,94228,94229,94231,94233,94235,94237],{"class":104,"line":521},[102,94230,62787],{"class":187},[102,94232,59302],{"class":119},[102,94234,5016],{"class":187},[102,94236,59357],{"class":108},[102,94238,266],{"class":119},[102,94240,94241],{"class":104,"line":526},[102,94242,205],{"class":119},[102,94244,94245],{"class":104,"line":532},[102,94246,652],{"emptyLinePlaceholder":651},[102,94248,94249,94251,94253,94255],{"class":104,"line":538},[102,94250,94015],{"class":112},[102,94252,94188],{"class":112},[102,94254,11848],{"class":59165},[102,94256,1077],{"class":119},[102,94258,94259,94262,94264,94266],{"class":104,"line":555},[102,94260,94261],{"class":187},"      font-style",[102,94263,59302],{"class":119},[102,94265,71706],{"class":187},[102,94267,266],{"class":119},[102,94269,94270,94272,94274,94276],{"class":104,"line":570},[102,94271,65281],{"class":187},[102,94273,59302],{"class":119},[102,94275,69935],{"class":187},[102,94277,266],{"class":119},[102,94279,94280,94282,94284,94286],{"class":104,"line":581},[102,94281,62624],{"class":187},[102,94283,59302],{"class":119},[102,94285,62696],{"class":187},[102,94287,266],{"class":119},[102,94289,94290,94293,94295,94297,94299],{"class":104,"line":819},[102,94291,94292],{"class":187},"      right",[102,94294,59302],{"class":119},[102,94296,9602],{"class":187},[102,94298,59357],{"class":108},[102,94300,266],{"class":119},[102,94302,94303,94305,94307,94310,94312],{"class":104,"line":828},[102,94304,62812],{"class":187},[102,94306,59302],{"class":119},[102,94308,94309],{"class":187},"-2",[102,94311,59357],{"class":108},[102,94313,266],{"class":119},[102,94315,94316,94318,94320,94322],{"class":104,"line":837},[102,94317,69890],{"class":187},[102,94319,59302],{"class":119},[102,94321,69895],{"class":187},[102,94323,266],{"class":119},[102,94325,94326],{"class":104,"line":842},[102,94327,205],{"class":119},[102,94329,94330],{"class":104,"line":855},[102,94331,652],{"emptyLinePlaceholder":651},[102,94333,94334,94336,94339],{"class":104,"line":860},[102,94335,94015],{"class":112},[102,94337,94338],{"class":112}," .body",[102,94340,1077],{"class":119},[102,94342,94343,94345,94347,94349],{"class":104,"line":871},[102,94344,65151],{"class":187},[102,94346,59302],{"class":119},[102,94348,59457],{"class":187},[102,94350,266],{"class":119},[102,94352,94353,94355,94357,94359,94361],{"class":104,"line":1359},[102,94354,62560],{"class":187},[102,94356,59302],{"class":119},[102,94358,263],{"class":187},[102,94360,59357],{"class":108},[102,94362,266],{"class":119},[102,94364,94365],{"class":104,"line":1368},[102,94366,205],{"class":119},[102,94368,94369],{"class":104,"line":1373},[102,94370,652],{"emptyLinePlaceholder":651},[102,94372,94373,94375,94378],{"class":104,"line":1378},[102,94374,94015],{"class":112},[102,94376,94377],{"class":112}," .footer",[102,94379,1077],{"class":119},[102,94381,94382,94384,94386,94388],{"class":104,"line":1384},[102,94383,62874],{"class":187},[102,94385,59302],{"class":119},[102,94387,59342],{"class":187},[102,94389,266],{"class":119},[102,94391,94392,94394,94396,94398],{"class":104,"line":1398},[102,94393,62885],{"class":187},[102,94395,59302],{"class":119},[102,94397,59445],{"class":187},[102,94399,266],{"class":119},[102,94401,94402,94404,94406,94408,94410],{"class":104,"line":1424},[102,94403,62560],{"class":187},[102,94405,59302],{"class":119},[102,94407,263],{"class":187},[102,94409,59357],{"class":108},[102,94411,266],{"class":119},[102,94413,94414],{"class":104,"line":1429},[102,94415,205],{"class":119},[102,94417,94418],{"class":104,"line":1435},[102,94419,652],{"emptyLinePlaceholder":651},[102,94421,94422,94424,94426,94428],{"class":104,"line":1450},[102,94423,94015],{"class":112},[102,94425,94377],{"class":112},[102,94427,4378],{"class":59165},[102,94429,1077],{"class":119},[102,94431,94432,94434,94436,94438,94440,94442,94444],{"class":104,"line":1473},[102,94433,62560],{"class":187},[102,94435,59302],{"class":119},[102,94437,7049],{"class":187},[102,94439,59357],{"class":108},[102,94441,10922],{"class":187},[102,94443,59357],{"class":108},[102,94445,266],{"class":119},[102,94447,94448,94450,94452,94455],{"class":104,"line":1478},[102,94449,69586],{"class":187},[102,94451,59302],{"class":119},[102,94453,94454],{"class":187},"#ccc",[102,94456,266],{"class":119},[102,94458,94459,94461,94463,94465],{"class":104,"line":1484},[102,94460,71835],{"class":187},[102,94462,59302],{"class":119},[102,94464,62602],{"class":187},[102,94466,266],{"class":119},[102,94468,94469,94471,94473,94475],{"class":104,"line":1499},[102,94470,65281],{"class":187},[102,94472,59302],{"class":119},[102,94474,68707],{"class":187},[102,94476,266],{"class":119},[102,94478,94479,94481,94483,94485,94487],{"class":104,"line":1508},[102,94480,62999],{"class":187},[102,94482,59302],{"class":119},[102,94484,7044],{"class":187},[102,94486,59357],{"class":108},[102,94488,266],{"class":119},[102,94490,94491,94493,94495,94497,94499],{"class":104,"line":1513},[102,94492,69615],{"class":187},[102,94494,59302],{"class":119},[102,94496,263],{"class":187},[102,94498,59357],{"class":108},[102,94500,266],{"class":119},[102,94502,94503,94505,94507,94509,94511],{"class":104,"line":1524},[102,94504,62787],{"class":187},[102,94506,59302],{"class":119},[102,94508,9576],{"class":187},[102,94510,59357],{"class":108},[102,94512,266],{"class":119},[102,94514,94515],{"class":104,"line":1529},[102,94516,205],{"class":119},[102,94518,94519],{"class":104,"line":1538},[102,94520,652],{"emptyLinePlaceholder":651},[102,94522,94523,94525,94527,94529,94532],{"class":104,"line":2089},[102,94524,94015],{"class":112},[102,94526,94377],{"class":112},[102,94528,4378],{"class":59165},[102,94530,94531],{"class":112},".submit",[102,94533,1077],{"class":119},[102,94535,94536,94538,94540,94543],{"class":104,"line":2094},[102,94537,62749],{"class":187},[102,94539,59302],{"class":119},[102,94541,94542],{"class":187},"#369",[102,94544,266],{"class":119},[102,94546,94547],{"class":104,"line":2100},[102,94548,205],{"class":119},[102,94550,94551,94553,94555],{"class":104,"line":2106},[102,94552,60282],{"class":119},[102,94554,8955],{"class":59165},[102,94556,59172],{"class":119},[102,94558,94559,94561,94563],{"class":104,"line":2120},[102,94560,59650],{"class":119},[102,94562,59199],{"class":59165},[102,94564,59172],{"class":119},[102,94566,94567],{"class":104,"line":2128},[102,94568,652],{"emptyLinePlaceholder":651},[102,94570,94571,94573,94575],{"class":104,"line":2149},[102,94572,1208],{"class":119},[102,94574,59665],{"class":59165},[102,94576,59172],{"class":119},[102,94578,94579,94581,94583,94585,94587,94590,94593,94595],{"class":104,"line":2161},[102,94580,60009],{"class":119},[102,94582,61752],{"class":59165},[102,94584,427],{"class":112},[102,94586,260],{"class":119},[102,94588,94589],{"class":278},"\"delete\"",[102,94591,94592],{"class":119},">删除\u003C\u002F",[102,94594,61752],{"class":59165},[102,94596,59172],{"class":119},[102,94598,94599,94601,94603,94605,94607,94610,94613,94615],{"class":104,"line":2167},[102,94600,60009],{"class":119},[102,94602,61752],{"class":59165},[102,94604,427],{"class":112},[102,94606,260],{"class":119},[102,94608,94609],{"class":278},"\"login\"",[102,94611,94612],{"class":119},">登录\u003C\u002F",[102,94614,61752],{"class":59165},[102,94616,59172],{"class":119},[102,94618,94619,94621,94623],{"class":104,"line":2190},[102,94620,60009],{"class":119},[102,94622,59678],{"class":59165},[102,94624,59172],{"class":119},[102,94626,94627],{"class":104,"line":2196},[102,94628,94629],{"class":126},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[102,94631,94632,94634,94637,94639,94641,94643,94645,94647,94650,94652,94654],{"class":104,"line":2219},[102,94633,77949],{"class":108},[102,94635,94636],{"class":112}," Modal",[102,94638,380],{"class":119},[102,94640,59272],{"class":386},[102,94642,22296],{"class":108},[102,94644,77795],{"class":278},[102,94646,2571],{"class":119},[102,94648,94649],{"class":386},"message",[102,94651,22296],{"class":108},[102,94653,77795],{"class":278},[102,94655,1105],{"class":119},[102,94657,94658],{"class":104,"line":2233},[102,94659,94660],{"class":126},"      \u002F\u002F 创建Model 模态框盒子\n",[102,94662,94663],{"class":104,"line":2253},[102,94664,94665],{"class":126},"      \u002F\u002F 1.1 创建div标签\n",[102,94667,94668,94670,94673,94675,94677,94679,94681,94683],{"class":104,"line":2259},[102,94669,77916],{"class":187},[102,94671,94672],{"class":119},".modalBox ",[102,94674,260],{"class":108},[102,94676,62261],{"class":119},[102,94678,78016],{"class":112},[102,94680,380],{"class":119},[102,94682,89796],{"class":278},[102,94684,390],{"class":119},[102,94686,94687],{"class":104,"line":2270},[102,94688,94689],{"class":126},"      \u002F\u002F 1.2 给div 添加类名为model\n",[102,94691,94692,94694,94697,94699],{"class":104,"line":2293},[102,94693,77916],{"class":187},[102,94695,94696],{"class":119},".modalBox.className ",[102,94698,260],{"class":108},[102,94700,94701],{"class":278}," 'modal'\n",[102,94703,94704],{"class":104,"line":2315},[102,94705,94706],{"class":126},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[102,94708,94709,94711,94714,94716],{"class":104,"line":2320},[102,94710,77916],{"class":187},[102,94712,94713],{"class":119},".modalBox.innerHTML ",[102,94715,260],{"class":108},[102,94717,78033],{"class":278},[102,94719,94720,94723,94725],{"class":104,"line":2326},[102,94721,94722],{"class":278},"        \u003Cdiv class=\"header\">${",[102,94724,59272],{"class":119},[102,94726,94727],{"class":278},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[102,94729,94730,94733,94735],{"class":104,"line":2340},[102,94731,94732],{"class":278},"        \u003Cdiv class=\"body\">${",[102,94734,94649],{"class":119},[102,94736,94737],{"class":278},"}\u003C\u002Fdiv>\n",[102,94739,94740],{"class":104,"line":2354},[102,94741,94742],{"class":278},"      `\n",[102,94744,94745],{"class":104,"line":2359},[102,94746,94747],{"class":126},"      \u002F\u002F console.log(this.modalBox)\n",[102,94749,94750],{"class":104,"line":2373},[102,94751,205],{"class":119},[102,94753,94754],{"class":104,"line":2378},[102,94755,94756],{"class":126},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[102,94758,94759],{"class":104,"line":2384},[102,94760,94761],{"class":126},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[102,94763,94764],{"class":104,"line":2389},[102,94765,94766],{"class":126},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[102,94768,94769,94772,94774,94776,94778,94781,94783,94785],{"class":104,"line":2403},[102,94770,94771],{"class":187},"    Modal",[102,94773,9585],{"class":119},[102,94775,93444],{"class":187},[102,94777,9585],{"class":119},[102,94779,94780],{"class":112},"open",[102,94782,22296],{"class":108},[102,94784,66783],{"class":108},[102,94786,62317],{"class":119},[102,94788,94789],{"class":104,"line":2408},[102,94790,94791],{"class":126},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[102,94793,94794,94796,94799,94801,94803,94805,94807,94810],{"class":104,"line":2413},[102,94795,66093],{"class":108},[102,94797,94798],{"class":187}," box",[102,94800,22296],{"class":108},[102,94802,62261],{"class":119},[102,94804,62264],{"class":112},[102,94806,380],{"class":119},[102,94808,94809],{"class":278},"'.modal'",[102,94811,390],{"class":119},[102,94813,94814],{"class":104,"line":2427},[102,94815,94816],{"class":126},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[102,94818,94819,94822,94824,94827,94829],{"class":104,"line":2440},[102,94820,94821],{"class":119},"      box ",[102,94823,1882],{"class":108},[102,94825,94826],{"class":119}," box.",[102,94828,64871],{"class":112},[102,94830,172],{"class":119},[102,94832,94833],{"class":104,"line":2445},[102,94834,94835],{"class":126},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[102,94837,94838],{"class":104,"line":2458},[102,94839,94840],{"class":126},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[102,94842,94843],{"class":104,"line":2463},[102,94844,94845],{"class":126},"      \u002F\u002F append可以增加对象\n",[102,94847,94848,94851,94854,94856,94859],{"class":104,"line":2468},[102,94849,94850],{"class":119},"      document.body.",[102,94852,94853],{"class":112},"append",[102,94855,380],{"class":119},[102,94857,94858],{"class":187},"this",[102,94860,94861],{"class":119},".modalBox)\n",[102,94863,94864],{"class":104,"line":2473},[102,94865,652],{"emptyLinePlaceholder":651},[102,94867,94868],{"class":104,"line":2486},[102,94869,94870],{"class":126},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[102,94872,94873,94875,94878,94880,94882,94885,94887,94889,94891,94893,94896,94898],{"class":104,"line":2491},[102,94874,77916],{"class":187},[102,94876,94877],{"class":119},".modalBox.",[102,94879,62264],{"class":112},[102,94881,380],{"class":119},[102,94883,94884],{"class":278},"'i'",[102,94886,38691],{"class":119},[102,94888,65678],{"class":112},[102,94890,380],{"class":119},[102,94892,65683],{"class":278},[102,94894,94895],{"class":119},", () ",[102,94897,92587],{"class":108},[102,94899,1077],{"class":119},[102,94901,94902],{"class":104,"line":40498},[102,94903,94904],{"class":126},"        \u002F\u002F 这个地方需要用到箭头函数\n",[102,94906,94907],{"class":104,"line":40504},[102,94908,94909],{"class":126},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[102,94911,94912],{"class":104,"line":40510},[102,94913,94914],{"class":126},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[102,94916,94917,94919,94921,94924],{"class":104,"line":40516},[102,94918,72591],{"class":187},[102,94920,9585],{"class":119},[102,94922,94923],{"class":112},"close",[102,94925,172],{"class":119},[102,94927,94928],{"class":104,"line":40522},[102,94929,72680],{"class":119},[102,94931,94932],{"class":104,"line":40533},[102,94933,205],{"class":119},[102,94935,94936],{"class":104,"line":40539},[102,94937,652],{"emptyLinePlaceholder":651},[102,94939,94940],{"class":104,"line":40559},[102,94941,94942],{"class":126},"    \u002F\u002F 测试一下 点击 删除按钮\n",[102,94944,94945,94947,94949,94951,94954,94956,94958,94960,94962,94964,94966],{"class":104,"line":40565},[102,94946,60272],{"class":119},[102,94948,62264],{"class":112},[102,94950,380],{"class":119},[102,94952,94953],{"class":278},"'#delete'",[102,94955,38691],{"class":119},[102,94957,65678],{"class":112},[102,94959,380],{"class":119},[102,94961,65683],{"class":278},[102,94963,94895],{"class":119},[102,94965,92587],{"class":108},[102,94967,1077],{"class":119},[102,94969,94970],{"class":104,"line":40576},[102,94971,94972],{"class":126},"      \u002F\u002F 先调用Model构造函数\n",[102,94974,94975,94977,94980,94982,94984,94986,94988,94991,94993,94996],{"class":104,"line":40582},[102,94976,66093],{"class":108},[102,94978,94979],{"class":187}," del",[102,94981,22296],{"class":108},[102,94983,20315],{"class":108},[102,94985,94636],{"class":112},[102,94987,380],{"class":119},[102,94989,94990],{"class":278},"'温馨的提示'",[102,94992,2571],{"class":119},[102,94994,94995],{"class":278},"'您没有删除权限操作'",[102,94997,390],{"class":119},[102,94999,95000],{"class":104,"line":40588},[102,95001,95002],{"class":126},"      \u002F\u002F 实例对象调用open方法\n",[102,95004,95005,95008,95010],{"class":104,"line":40594},[102,95006,95007],{"class":119},"      del.",[102,95009,94780],{"class":112},[102,95011,172],{"class":119},[102,95013,95014],{"class":104,"line":40600},[102,95015,41326],{"class":119},[102,95017,95018],{"class":104,"line":40606},[102,95019,95020],{"class":126},"    \u002F\u002F 测试一下 点击 登录按钮\n",[102,95022,95023,95025,95027,95029,95032,95034,95036,95038,95040,95042,95044],{"class":104,"line":40612},[102,95024,60272],{"class":119},[102,95026,62264],{"class":112},[102,95028,380],{"class":119},[102,95030,95031],{"class":278},"'#login'",[102,95033,38691],{"class":119},[102,95035,65678],{"class":112},[102,95037,380],{"class":119},[102,95039,65683],{"class":278},[102,95041,94895],{"class":119},[102,95043,92587],{"class":108},[102,95045,1077],{"class":119},[102,95047,95048],{"class":104,"line":40618},[102,95049,94972],{"class":126},[102,95051,95052,95054,95057,95059,95061,95063,95065,95068,95070,95073],{"class":104,"line":40638},[102,95053,66093],{"class":108},[102,95055,95056],{"class":187}," log",[102,95058,22296],{"class":108},[102,95060,20315],{"class":108},[102,95062,94636],{"class":112},[102,95064,380],{"class":119},[102,95066,95067],{"class":278},"'友情提示'",[102,95069,2571],{"class":119},[102,95071,95072],{"class":278},"'您还没有登录呢'",[102,95074,390],{"class":119},[102,95076,95077],{"class":104,"line":40644},[102,95078,95002],{"class":126},[102,95080,95081,95084,95086],{"class":104,"line":40660},[102,95082,95083],{"class":119},"      log.",[102,95085,94780],{"class":112},[102,95087,172],{"class":119},[102,95089,95090],{"class":104,"line":40666},[102,95091,41326],{"class":119},[102,95093,95094],{"class":104,"line":40680},[102,95095,95096],{"class":126},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[102,95098,95099,95101,95103,95105,95107,95109,95111,95113],{"class":104,"line":40686},[102,95100,94771],{"class":187},[102,95102,9585],{"class":119},[102,95104,93444],{"class":187},[102,95106,9585],{"class":119},[102,95108,94923],{"class":112},[102,95110,22296],{"class":108},[102,95112,66783],{"class":108},[102,95114,62317],{"class":119},[102,95116,95117,95119,95121,95123],{"class":104,"line":40701},[102,95118,77916],{"class":187},[102,95120,94877],{"class":119},[102,95122,64871],{"class":112},[102,95124,172],{"class":119},[102,95126,95127],{"class":104,"line":40707},[102,95128,205],{"class":119},[102,95130,95131,95133,95135],{"class":104,"line":40716},[102,95132,60282],{"class":119},[102,95134,59678],{"class":59165},[102,95136,59172],{"class":119},[102,95138,95139,95141,95143],{"class":104,"line":40722},[102,95140,59650],{"class":119},[102,95142,59665],{"class":59165},[102,95144,59172],{"class":119},[102,95146,95147],{"class":104,"line":40731},[102,95148,652],{"emptyLinePlaceholder":651},[102,95150,95151,95153,95155],{"class":104,"line":40737},[102,95152,59650],{"class":119},[102,95154,58500],{"class":59165},[102,95156,59172],{"class":119},[14,95158,95159],{},[6750,95160],{"alt":98,"src":95161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[43,95163,95165],{"id":95164},"_414-深浅拷贝","4.14 深浅拷贝",[48,95167,95169],{"id":95168},"_4141-浅拷贝","4.14.1 浅拷贝",[14,95171,95172],{},[6750,95173],{"alt":98,"src":95174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,95176,95177],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,95179,95180],{},[6750,95181],{"alt":98,"src":95182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,95184,95185],{},[6750,95186],{"alt":98,"src":95187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,95189,95190],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,95192,95193],{},[6750,95194],{"alt":98,"src":95195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,95197,20072],{},[14,95199,95200],{},[6750,95201],{"alt":98,"src":95202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[48,95204,95206],{"id":95205},"_4142-深拷贝","4.14.2 深拷贝",[14,95208,95209],{},"深拷贝：拷贝的是对象，不是地址",[14,95211,95212],{},"常用的三种方法：",[87,95214,95215,95218,95221],{},[62,95216,95217],{},"通过递归实现深拷贝",[62,95219,95220],{},"lodash\u002FcloneDeep",[62,95222,95223],{},"通过JSON.stringify()实现",[7601,95225,95227],{"id":95226},"_41421-递归函数","4.14.2.1 递归函数",[14,95229,95230],{},[6750,95231],{"alt":98,"src":95232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[87,95234,95235],{},[62,95236,95237],{},"死递归占溢出：",[93,95239,95241],{"className":60932,"code":95240,"language":60934,"meta":98,"style":98},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[83,95242,95243,95251,95259,95263,95268,95272,95277,95285],{"__ignoreMap":98},[102,95244,95245,95247,95249],{"class":104,"line":105},[102,95246,1208],{"class":119},[102,95248,59665],{"class":59165},[102,95250,59172],{"class":119},[102,95252,95253,95255,95257],{"class":104,"line":116},[102,95254,60009],{"class":119},[102,95256,59678],{"class":59165},[102,95258,59172],{"class":119},[102,95260,95261],{"class":104,"line":123},[102,95262,85008],{"class":119},[102,95264,95265],{"class":104,"line":130},[102,95266,95267],{"class":119},"      fn()\n",[102,95269,95270],{"class":104,"line":136},[102,95271,205],{"class":119},[102,95273,95274],{"class":104,"line":142},[102,95275,95276],{"class":119},"    fn()\n",[102,95278,95279,95281,95283],{"class":104,"line":148},[102,95280,60282],{"class":119},[102,95282,59678],{"class":59165},[102,95284,59172],{"class":119},[102,95286,95287,95289,95291],{"class":104,"line":157},[102,95288,59650],{"class":119},[102,95290,59665],{"class":59165},[102,95292,59172],{"class":119},[87,95294,95295],{"start":116},[62,95296,95297],{},"递归函数要加判断条件：",[14,95299,95300],{},[6750,95301],{"alt":98,"src":95302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[87,95304,95305],{"start":123},[62,95306,95307],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[93,95309,95311],{"className":58498,"code":95310,"language":58500,"meta":98,"style":98},"\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",[83,95312,95313,95323,95337,95341,95349,95363,95383,95395,95403,95407,95415,95427,95435,95443,95468,95480,95484,95491,95499,95507,95511],{"__ignoreMap":98},[102,95314,95315,95317,95319,95321],{"class":104,"line":105},[102,95316,59162],{"class":119},[102,95318,59166],{"class":59165},[102,95320,59169],{"class":112},[102,95322,59172],{"class":119},[102,95324,95325,95327,95329,95331,95333,95335],{"class":104,"line":116},[102,95326,1208],{"class":119},[102,95328,58500],{"class":59165},[102,95330,59181],{"class":112},[102,95332,260],{"class":119},[102,95334,59186],{"class":278},[102,95336,59172],{"class":119},[102,95338,95339],{"class":104,"line":123},[102,95340,652],{"emptyLinePlaceholder":651},[102,95342,95343,95345,95347],{"class":104,"line":130},[102,95344,1208],{"class":119},[102,95346,59199],{"class":59165},[102,95348,59172],{"class":119},[102,95350,95351,95353,95355,95357,95359,95361],{"class":104,"line":136},[102,95352,60009],{"class":119},[102,95354,59209],{"class":59165},[102,95356,59212],{"class":112},[102,95358,260],{"class":119},[102,95360,59217],{"class":278},[102,95362,59172],{"class":119},[102,95364,95365,95367,95369,95371,95373,95375,95377,95379,95381],{"class":104,"line":142},[102,95366,60009],{"class":119},[102,95368,59209],{"class":59165},[102,95370,387],{"class":112},[102,95372,260],{"class":119},[102,95374,59256],{"class":278},[102,95376,59236],{"class":112},[102,95378,260],{"class":119},[102,95380,59263],{"class":278},[102,95382,59172],{"class":119},[102,95384,95385,95387,95389,95391,95393],{"class":104,"line":148},[102,95386,60009],{"class":119},[102,95388,59272],{"class":59165},[102,95390,59275],{"class":119},[102,95392,59272],{"class":59165},[102,95394,59172],{"class":119},[102,95396,95397,95399,95401],{"class":104,"line":157},[102,95398,59650],{"class":119},[102,95400,59199],{"class":59165},[102,95402,59172],{"class":119},[102,95404,95405],{"class":104,"line":163},[102,95406,652],{"emptyLinePlaceholder":651},[102,95408,95409,95411,95413],{"class":104,"line":175},[102,95410,1208],{"class":119},[102,95412,59665],{"class":59165},[102,95414,59172],{"class":119},[102,95416,95417,95419,95421,95423,95425],{"class":104,"line":181},[102,95418,60009],{"class":119},[102,95420,59476],{"class":59165},[102,95422,63179],{"class":119},[102,95424,59476],{"class":59165},[102,95426,59172],{"class":119},[102,95428,95429,95431,95433],{"class":104,"line":202},[102,95430,60009],{"class":119},[102,95432,59678],{"class":59165},[102,95434,59172],{"class":119},[102,95436,95437,95439,95441],{"class":104,"line":208},[102,95438,77949],{"class":108},[102,95440,81638],{"class":112},[102,95442,795],{"class":119},[102,95444,95445,95447,95449,95451,95453,95455,95457,95459,95461,95463,95466],{"class":104,"line":214},[102,95446,63636],{"class":119},[102,95448,62264],{"class":112},[102,95450,380],{"class":119},[102,95452,89796],{"class":278},[102,95454,82114],{"class":119},[102,95456,260],{"class":108},[102,95458,20315],{"class":108},[102,95460,81654],{"class":112},[102,95462,2825],{"class":119},[102,95464,95465],{"class":112},"toLocaleString",[102,95467,172],{"class":119},[102,95469,95470,95473,95476,95478],{"class":104,"line":225},[102,95471,95472],{"class":112},"      setTimeout",[102,95474,95475],{"class":119},"(getTime, ",[102,95477,15205],{"class":187},[102,95479,390],{"class":119},[102,95481,95482],{"class":104,"line":230},[102,95483,205],{"class":119},[102,95485,95486,95489],{"class":104,"line":236},[102,95487,95488],{"class":112},"    getTime",[102,95490,172],{"class":119},[102,95492,95493,95495,95497],{"class":104,"line":242},[102,95494,60282],{"class":119},[102,95496,59678],{"class":59165},[102,95498,59172],{"class":119},[102,95500,95501,95503,95505],{"class":104,"line":248},[102,95502,59650],{"class":119},[102,95504,59665],{"class":59165},[102,95506,59172],{"class":119},[102,95508,95509],{"class":104,"line":254},[102,95510,652],{"emptyLinePlaceholder":651},[102,95512,95513,95515,95517],{"class":104,"line":269},[102,95514,59650],{"class":119},[102,95516,58500],{"class":59165},[102,95518,59172],{"class":119},[14,95520,95521],{},[6750,95522],{"alt":98,"src":95523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[87,95525,95526],{"start":130},[62,95527,95217],{},[14,95529,95530],{},[6750,95531],{"alt":98,"src":95532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,95534,95535],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,95537,47054],{},[14,95539,95540],{},"这个是简易版的递归函数深拷贝",[14,95542,95543],{},"一定要注意先数组再对象，因为万物皆可对象",[93,95545,95547],{"className":58498,"code":95546,"language":58500,"meta":98,"style":98},"\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",[83,95548,95549,95559,95573,95577,95585,95599,95619,95631,95639,95643,95651,95659,95669,95678,95686,95702,95706,95714,95718,95722,95734,95739,95758,95774,95779,95784,95789,95804,95809,95814,95823,95831,95848,95856,95862,95870,95875,95880,95889,95893,95897,95901,95912,95921,95931,95945,95955,95963,95971,95979,95983],{"__ignoreMap":98},[102,95550,95551,95553,95555,95557],{"class":104,"line":105},[102,95552,59162],{"class":119},[102,95554,59166],{"class":59165},[102,95556,59169],{"class":112},[102,95558,59172],{"class":119},[102,95560,95561,95563,95565,95567,95569,95571],{"class":104,"line":116},[102,95562,1208],{"class":119},[102,95564,58500],{"class":59165},[102,95566,59181],{"class":112},[102,95568,260],{"class":119},[102,95570,59186],{"class":278},[102,95572,59172],{"class":119},[102,95574,95575],{"class":104,"line":123},[102,95576,652],{"emptyLinePlaceholder":651},[102,95578,95579,95581,95583],{"class":104,"line":130},[102,95580,1208],{"class":119},[102,95582,59199],{"class":59165},[102,95584,59172],{"class":119},[102,95586,95587,95589,95591,95593,95595,95597],{"class":104,"line":136},[102,95588,60009],{"class":119},[102,95590,59209],{"class":59165},[102,95592,59212],{"class":112},[102,95594,260],{"class":119},[102,95596,59217],{"class":278},[102,95598,59172],{"class":119},[102,95600,95601,95603,95605,95607,95609,95611,95613,95615,95617],{"class":104,"line":142},[102,95602,60009],{"class":119},[102,95604,59209],{"class":59165},[102,95606,387],{"class":112},[102,95608,260],{"class":119},[102,95610,59256],{"class":278},[102,95612,59236],{"class":112},[102,95614,260],{"class":119},[102,95616,59263],{"class":278},[102,95618,59172],{"class":119},[102,95620,95621,95623,95625,95627,95629],{"class":104,"line":148},[102,95622,60009],{"class":119},[102,95624,59272],{"class":59165},[102,95626,59275],{"class":119},[102,95628,59272],{"class":59165},[102,95630,59172],{"class":119},[102,95632,95633,95635,95637],{"class":104,"line":157},[102,95634,59650],{"class":119},[102,95636,59199],{"class":59165},[102,95638,59172],{"class":119},[102,95640,95641],{"class":104,"line":163},[102,95642,652],{"emptyLinePlaceholder":651},[102,95644,95645,95647,95649],{"class":104,"line":175},[102,95646,1208],{"class":119},[102,95648,59665],{"class":59165},[102,95650,59172],{"class":119},[102,95652,95653,95655,95657],{"class":104,"line":181},[102,95654,60009],{"class":119},[102,95656,59678],{"class":59165},[102,95658,59172],{"class":119},[102,95660,95661,95663,95665,95667],{"class":104,"line":202},[102,95662,19961],{"class":108},[102,95664,77836],{"class":187},[102,95666,22296],{"class":108},[102,95668,1077],{"class":119},[102,95670,95671,95673,95676],{"class":104,"line":208},[102,95672,79481],{"class":119},[102,95674,95675],{"class":278},"'pink'",[102,95677,39331],{"class":119},[102,95679,95680,95682,95684],{"class":104,"line":214},[102,95681,79491],{"class":119},[102,95683,6080],{"class":187},[102,95685,39331],{"class":119},[102,95687,95688,95691,95694,95696,95699],{"class":104,"line":225},[102,95689,95690],{"class":119},"      hobby: [",[102,95692,95693],{"class":278},"'乒乓球'",[102,95695,2571],{"class":119},[102,95697,95698],{"class":278},"'足球'",[102,95700,95701],{"class":119},"],\n",[102,95703,95704],{"class":104,"line":230},[102,95705,85737],{"class":119},[102,95707,95708,95711],{"class":104,"line":236},[102,95709,95710],{"class":119},"        baby: ",[102,95712,95713],{"class":278},"'小pink'\n",[102,95715,95716],{"class":104,"line":242},[102,95717,60263],{"class":119},[102,95719,95720],{"class":104,"line":248},[102,95721,205],{"class":119},[102,95723,95724,95726,95729,95731],{"class":104,"line":254},[102,95725,19961],{"class":108},[102,95727,95728],{"class":187}," o",[102,95730,22296],{"class":108},[102,95732,95733],{"class":119}," {}\n",[102,95735,95736],{"class":104,"line":269},[102,95737,95738],{"class":126},"    \u002F\u002F 拷贝函数\n",[102,95740,95741,95743,95746,95748,95751,95753,95756],{"class":104,"line":298},[102,95742,77949],{"class":108},[102,95744,95745],{"class":112}," deepCopy",[102,95747,380],{"class":119},[102,95749,95750],{"class":386},"newObj",[102,95752,2571],{"class":119},[102,95754,95755],{"class":386},"oldObj",[102,95757,1105],{"class":119},[102,95759,95760,95762,95764,95766,95769,95771],{"class":104,"line":502},[102,95761,60149],{"class":108},[102,95763,2432],{"class":119},[102,95765,59712],{"class":108},[102,95767,95768],{"class":119}," k ",[102,95770,33908],{"class":108},[102,95772,95773],{"class":119}," oldObj) {\n",[102,95775,95776],{"class":104,"line":507},[102,95777,95778],{"class":126},"        \u002F\u002F 处理数组的问题\n",[102,95780,95781],{"class":104,"line":512},[102,95782,95783],{"class":126},"        \u002F\u002F 判断是否属于数组\n",[102,95785,95786],{"class":104,"line":521},[102,95787,95788],{"class":126},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[102,95790,95791,95793,95796,95799,95802],{"class":104,"line":526},[102,95792,1202],{"class":108},[102,95794,95795],{"class":119}," (oldObj[k] ",[102,95797,95798],{"class":108},"instanceof",[102,95800,95801],{"class":112}," Array",[102,95803,1105],{"class":119},[102,95805,95806],{"class":104,"line":532},[102,95807,95808],{"class":126},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[102,95810,95811],{"class":104,"line":538},[102,95812,95813],{"class":126},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[102,95815,95816,95819,95821],{"class":104,"line":555},[102,95817,95818],{"class":119},"          newObj[k] ",[102,95820,260],{"class":108},[102,95822,59703],{"class":119},[102,95824,95825,95828],{"class":104,"line":570},[102,95826,95827],{"class":112},"          deepCopy",[102,95829,95830],{"class":119},"(newObj[k], oldObj[k])\n",[102,95832,95833,95835,95837,95839,95841,95843,95846],{"class":104,"line":581},[102,95834,87945],{"class":119},[102,95836,10562],{"class":108},[102,95838,10565],{"class":108},[102,95840,95795],{"class":119},[102,95842,95798],{"class":108},[102,95844,95845],{"class":112}," Object",[102,95847,1105],{"class":119},[102,95849,95850,95852,95854],{"class":104,"line":819},[102,95851,95818],{"class":119},[102,95853,260],{"class":108},[102,95855,95733],{"class":119},[102,95857,95858,95860],{"class":104,"line":828},[102,95859,95827],{"class":112},[102,95861,95830],{"class":119},[102,95863,95864,95866,95868],{"class":104,"line":837},[102,95865,87945],{"class":119},[102,95867,10562],{"class":108},[102,95869,1077],{"class":119},[102,95871,95872],{"class":104,"line":842},[102,95873,95874],{"class":126},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[102,95876,95877],{"class":104,"line":855},[102,95878,95879],{"class":126},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[102,95881,95882,95884,95886],{"class":104,"line":860},[102,95883,95818],{"class":119},[102,95885,260],{"class":108},[102,95887,95888],{"class":119}," oldObj[k]\n",[102,95890,95891],{"class":104,"line":871},[102,95892,1252],{"class":119},[102,95894,95895],{"class":104,"line":1359},[102,95896,60263],{"class":119},[102,95898,95899],{"class":104,"line":1368},[102,95900,205],{"class":119},[102,95902,95903,95906,95909],{"class":104,"line":1373},[102,95904,95905],{"class":112},"    deepCopy",[102,95907,95908],{"class":119},"(o, obj) ",[102,95910,95911],{"class":126},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[102,95913,95914,95916,95918],{"class":104,"line":1378},[102,95915,81618],{"class":119},[102,95917,66112],{"class":112},[102,95919,95920],{"class":119},"(o)\n",[102,95922,95923,95926,95928],{"class":104,"line":1384},[102,95924,95925],{"class":119},"    o.age ",[102,95927,260],{"class":108},[102,95929,95930],{"class":187}," 20\n",[102,95932,95933,95936,95938,95940,95942],{"class":104,"line":1398},[102,95934,95935],{"class":119},"    o.hobby[",[102,95937,8423],{"class":187},[102,95939,13252],{"class":119},[102,95941,260],{"class":108},[102,95943,95944],{"class":278}," '篮球'\n",[102,95946,95947,95950,95952],{"class":104,"line":1424},[102,95948,95949],{"class":119},"    o.family ",[102,95951,260],{"class":108},[102,95953,95954],{"class":278}," '老pink'\n",[102,95956,95957,95959,95961],{"class":104,"line":1429},[102,95958,81618],{"class":119},[102,95960,66112],{"class":112},[102,95962,77901],{"class":119},[102,95964,95965,95967,95969],{"class":104,"line":1435},[102,95966,60282],{"class":119},[102,95968,59678],{"class":59165},[102,95970,59172],{"class":119},[102,95972,95973,95975,95977],{"class":104,"line":1450},[102,95974,59650],{"class":119},[102,95976,59665],{"class":59165},[102,95978,59172],{"class":119},[102,95980,95981],{"class":104,"line":1473},[102,95982,652],{"emptyLinePlaceholder":651},[102,95984,95985,95987,95989],{"class":104,"line":1478},[102,95986,59650],{"class":119},[102,95988,58500],{"class":59165},[102,95990,59172],{"class":119},[14,95992,95993],{},[6750,95994],{"alt":98,"src":95995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[7601,95997,95999,96000],{"id":95998},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[18,96001,96002],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,96004,96005],{},[9275,96006,96007],{"href":96007,"rel":96008},"https:\u002F\u002Fwww.lodashjs.com\u002F",[31729],[14,96010,96011],{},"lodash里边的方法都要加上一个下划线_",[14,96013,96014],{},"_.cloneDeep()",[93,96016,96018],{"className":58498,"code":96017,"language":58500,"meta":98,"style":98},"\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",[83,96019,96020,96030,96044,96048,96056,96070,96090,96102,96110,96114,96122,96127,96146,96154,96164,96172,96180,96192,96196,96202,96206,96210,96226,96234,96243,96251,96259,96267,96271],{"__ignoreMap":98},[102,96021,96022,96024,96026,96028],{"class":104,"line":105},[102,96023,59162],{"class":119},[102,96025,59166],{"class":59165},[102,96027,59169],{"class":112},[102,96029,59172],{"class":119},[102,96031,96032,96034,96036,96038,96040,96042],{"class":104,"line":116},[102,96033,1208],{"class":119},[102,96035,58500],{"class":59165},[102,96037,59181],{"class":112},[102,96039,260],{"class":119},[102,96041,59186],{"class":278},[102,96043,59172],{"class":119},[102,96045,96046],{"class":104,"line":123},[102,96047,652],{"emptyLinePlaceholder":651},[102,96049,96050,96052,96054],{"class":104,"line":130},[102,96051,1208],{"class":119},[102,96053,59199],{"class":59165},[102,96055,59172],{"class":119},[102,96057,96058,96060,96062,96064,96066,96068],{"class":104,"line":136},[102,96059,60009],{"class":119},[102,96061,59209],{"class":59165},[102,96063,59212],{"class":112},[102,96065,260],{"class":119},[102,96067,59217],{"class":278},[102,96069,59172],{"class":119},[102,96071,96072,96074,96076,96078,96080,96082,96084,96086,96088],{"class":104,"line":142},[102,96073,60009],{"class":119},[102,96075,59209],{"class":59165},[102,96077,387],{"class":112},[102,96079,260],{"class":119},[102,96081,59256],{"class":278},[102,96083,59236],{"class":112},[102,96085,260],{"class":119},[102,96087,59263],{"class":278},[102,96089,59172],{"class":119},[102,96091,96092,96094,96096,96098,96100],{"class":104,"line":148},[102,96093,60009],{"class":119},[102,96095,59272],{"class":59165},[102,96097,59275],{"class":119},[102,96099,59272],{"class":59165},[102,96101,59172],{"class":119},[102,96103,96104,96106,96108],{"class":104,"line":157},[102,96105,59650],{"class":119},[102,96107,59199],{"class":59165},[102,96109,59172],{"class":119},[102,96111,96112],{"class":104,"line":163},[102,96113,652],{"emptyLinePlaceholder":651},[102,96115,96116,96118,96120],{"class":104,"line":175},[102,96117,1208],{"class":119},[102,96119,59665],{"class":59165},[102,96121,59172],{"class":119},[102,96123,96124],{"class":104,"line":181},[102,96125,96126],{"class":126},"  \u003C!-- 先引用这个库 -->\n",[102,96128,96129,96131,96133,96135,96137,96140,96142,96144],{"class":104,"line":202},[102,96130,60009],{"class":119},[102,96132,59678],{"class":59165},[102,96134,63104],{"class":112},[102,96136,260],{"class":119},[102,96138,96139],{"class":278},"\"lodash.min.js\"",[102,96141,63179],{"class":119},[102,96143,59678],{"class":59165},[102,96145,59172],{"class":119},[102,96147,96148,96150,96152],{"class":104,"line":208},[102,96149,60009],{"class":119},[102,96151,59678],{"class":59165},[102,96153,59172],{"class":119},[102,96155,96156,96158,96160,96162],{"class":104,"line":214},[102,96157,19961],{"class":108},[102,96159,77836],{"class":187},[102,96161,22296],{"class":108},[102,96163,1077],{"class":119},[102,96165,96166,96168,96170],{"class":104,"line":225},[102,96167,79481],{"class":119},[102,96169,95675],{"class":278},[102,96171,39331],{"class":119},[102,96173,96174,96176,96178],{"class":104,"line":230},[102,96175,79491],{"class":119},[102,96177,6080],{"class":187},[102,96179,39331],{"class":119},[102,96181,96182,96184,96186,96188,96190],{"class":104,"line":236},[102,96183,95690],{"class":119},[102,96185,95693],{"class":278},[102,96187,2571],{"class":119},[102,96189,95698],{"class":278},[102,96191,95701],{"class":119},[102,96193,96194],{"class":104,"line":242},[102,96195,85737],{"class":119},[102,96197,96198,96200],{"class":104,"line":248},[102,96199,95710],{"class":119},[102,96201,95713],{"class":278},[102,96203,96204],{"class":104,"line":254},[102,96205,60263],{"class":119},[102,96207,96208],{"class":104,"line":269},[102,96209,205],{"class":119},[102,96211,96212,96214,96216,96218,96221,96224],{"class":104,"line":298},[102,96213,19961],{"class":108},[102,96215,95728],{"class":187},[102,96217,22296],{"class":108},[102,96219,96220],{"class":119}," _.",[102,96222,96223],{"class":112},"cloneDeep",[102,96225,77901],{"class":119},[102,96227,96228,96230,96232],{"class":104,"line":502},[102,96229,81618],{"class":119},[102,96231,66112],{"class":112},[102,96233,95920],{"class":119},[102,96235,96236,96239,96241],{"class":104,"line":507},[102,96237,96238],{"class":119},"    o.family.baby ",[102,96240,260],{"class":108},[102,96242,95954],{"class":278},[102,96244,96245,96247,96249],{"class":104,"line":512},[102,96246,81618],{"class":119},[102,96248,66112],{"class":112},[102,96250,77901],{"class":119},[102,96252,96253,96255,96257],{"class":104,"line":521},[102,96254,60282],{"class":119},[102,96256,59678],{"class":59165},[102,96258,59172],{"class":119},[102,96260,96261,96263,96265],{"class":104,"line":526},[102,96262,59650],{"class":119},[102,96264,59665],{"class":59165},[102,96266,59172],{"class":119},[102,96268,96269],{"class":104,"line":532},[102,96270,652],{"emptyLinePlaceholder":651},[102,96272,96273,96275,96277],{"class":104,"line":538},[102,96274,59650],{"class":119},[102,96276,58500],{"class":59165},[102,96278,59172],{"class":119},[14,96280,96281],{},[6750,96282],{"alt":98,"src":96283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[7601,96285,96287],{"id":96286},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[93,96289,96291],{"className":58498,"code":96290,"language":58500,"meta":98,"style":98},"\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",[83,96292,96293,96303,96317,96321,96329,96343,96363,96375,96383,96387,96395,96403,96413,96421,96429,96441,96445,96451,96455,96459,96464,96469,96474,96500,96508,96517,96525,96533,96541,96545],{"__ignoreMap":98},[102,96294,96295,96297,96299,96301],{"class":104,"line":105},[102,96296,59162],{"class":119},[102,96298,59166],{"class":59165},[102,96300,59169],{"class":112},[102,96302,59172],{"class":119},[102,96304,96305,96307,96309,96311,96313,96315],{"class":104,"line":116},[102,96306,1208],{"class":119},[102,96308,58500],{"class":59165},[102,96310,59181],{"class":112},[102,96312,260],{"class":119},[102,96314,59186],{"class":278},[102,96316,59172],{"class":119},[102,96318,96319],{"class":104,"line":123},[102,96320,652],{"emptyLinePlaceholder":651},[102,96322,96323,96325,96327],{"class":104,"line":130},[102,96324,1208],{"class":119},[102,96326,59199],{"class":59165},[102,96328,59172],{"class":119},[102,96330,96331,96333,96335,96337,96339,96341],{"class":104,"line":136},[102,96332,60009],{"class":119},[102,96334,59209],{"class":59165},[102,96336,59212],{"class":112},[102,96338,260],{"class":119},[102,96340,59217],{"class":278},[102,96342,59172],{"class":119},[102,96344,96345,96347,96349,96351,96353,96355,96357,96359,96361],{"class":104,"line":142},[102,96346,60009],{"class":119},[102,96348,59209],{"class":59165},[102,96350,387],{"class":112},[102,96352,260],{"class":119},[102,96354,59256],{"class":278},[102,96356,59236],{"class":112},[102,96358,260],{"class":119},[102,96360,59263],{"class":278},[102,96362,59172],{"class":119},[102,96364,96365,96367,96369,96371,96373],{"class":104,"line":148},[102,96366,60009],{"class":119},[102,96368,59272],{"class":59165},[102,96370,59275],{"class":119},[102,96372,59272],{"class":59165},[102,96374,59172],{"class":119},[102,96376,96377,96379,96381],{"class":104,"line":157},[102,96378,59650],{"class":119},[102,96380,59199],{"class":59165},[102,96382,59172],{"class":119},[102,96384,96385],{"class":104,"line":163},[102,96386,652],{"emptyLinePlaceholder":651},[102,96388,96389,96391,96393],{"class":104,"line":175},[102,96390,1208],{"class":119},[102,96392,59665],{"class":59165},[102,96394,59172],{"class":119},[102,96396,96397,96399,96401],{"class":104,"line":181},[102,96398,60009],{"class":119},[102,96400,59678],{"class":59165},[102,96402,59172],{"class":119},[102,96404,96405,96407,96409,96411],{"class":104,"line":202},[102,96406,19961],{"class":108},[102,96408,77836],{"class":187},[102,96410,22296],{"class":108},[102,96412,1077],{"class":119},[102,96414,96415,96417,96419],{"class":104,"line":208},[102,96416,79481],{"class":119},[102,96418,95675],{"class":278},[102,96420,39331],{"class":119},[102,96422,96423,96425,96427],{"class":104,"line":214},[102,96424,79491],{"class":119},[102,96426,6080],{"class":187},[102,96428,39331],{"class":119},[102,96430,96431,96433,96435,96437,96439],{"class":104,"line":225},[102,96432,95690],{"class":119},[102,96434,95693],{"class":278},[102,96436,2571],{"class":119},[102,96438,95698],{"class":278},[102,96440,95701],{"class":119},[102,96442,96443],{"class":104,"line":230},[102,96444,85737],{"class":119},[102,96446,96447,96449],{"class":104,"line":236},[102,96448,95710],{"class":119},[102,96450,95713],{"class":278},[102,96452,96453],{"class":104,"line":242},[102,96454,60263],{"class":119},[102,96456,96457],{"class":104,"line":248},[102,96458,205],{"class":119},[102,96460,96461],{"class":104,"line":254},[102,96462,96463],{"class":126},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[102,96465,96466],{"class":104,"line":269},[102,96467,96468],{"class":126},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[102,96470,96471],{"class":104,"line":298},[102,96472,96473],{"class":126},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[102,96475,96476,96478,96480,96482,96485,96487,96490,96492,96494,96496,96498],{"class":104,"line":502},[102,96477,19961],{"class":108},[102,96479,95728],{"class":187},[102,96481,22296],{"class":108},[102,96483,96484],{"class":187}," JSON",[102,96486,9585],{"class":119},[102,96488,96489],{"class":112},"parse",[102,96491,380],{"class":119},[102,96493,79529],{"class":187},[102,96495,9585],{"class":119},[102,96497,79534],{"class":112},[102,96499,79537],{"class":119},[102,96501,96502,96504,96506],{"class":104,"line":507},[102,96503,81618],{"class":119},[102,96505,66112],{"class":112},[102,96507,95920],{"class":119},[102,96509,96510,96512,96514],{"class":104,"line":512},[102,96511,96238],{"class":119},[102,96513,260],{"class":108},[102,96515,96516],{"class":278}," '123'\n",[102,96518,96519,96521,96523],{"class":104,"line":521},[102,96520,81618],{"class":119},[102,96522,66112],{"class":112},[102,96524,77901],{"class":119},[102,96526,96527,96529,96531],{"class":104,"line":526},[102,96528,60282],{"class":119},[102,96530,59678],{"class":59165},[102,96532,59172],{"class":119},[102,96534,96535,96537,96539],{"class":104,"line":532},[102,96536,59650],{"class":119},[102,96538,59665],{"class":59165},[102,96540,59172],{"class":119},[102,96542,96543],{"class":104,"line":538},[102,96544,652],{"emptyLinePlaceholder":651},[102,96546,96547,96549,96551],{"class":104,"line":555},[102,96548,59650],{"class":119},[102,96550,58500],{"class":59165},[102,96552,59172],{"class":119},[14,96554,96555],{},[6750,96556],{"alt":98,"src":96557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[43,96559,96561],{"id":96560},"_415-异常处理","4.15 异常处理",[87,96563,96564],{},[62,96565,96566],{},"throw抛异常",[14,96568,96569],{},[6750,96570],{"alt":98,"src":96571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[87,96573,96574],{"start":116},[62,96575,96576],{},"try\u002Fcatch 捕获错误信息",[14,96578,96579],{},[6750,96580],{"alt":98,"src":96581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[93,96583,96585],{"className":58498,"code":96584,"language":58500,"meta":98,"style":98},"\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",[83,96586,96587,96597,96611,96615,96623,96637,96657,96669,96677,96681,96689,96701,96709,96718,96725,96730,96749,96758,96769,96774,96784,96789,96794,96799,96816,96820,96825,96832,96844,96848,96860,96864,96868,96873,96878,96885,96893,96901,96905],{"__ignoreMap":98},[102,96588,96589,96591,96593,96595],{"class":104,"line":105},[102,96590,59162],{"class":119},[102,96592,59166],{"class":59165},[102,96594,59169],{"class":112},[102,96596,59172],{"class":119},[102,96598,96599,96601,96603,96605,96607,96609],{"class":104,"line":116},[102,96600,1208],{"class":119},[102,96602,58500],{"class":59165},[102,96604,59181],{"class":112},[102,96606,260],{"class":119},[102,96608,59186],{"class":278},[102,96610,59172],{"class":119},[102,96612,96613],{"class":104,"line":123},[102,96614,652],{"emptyLinePlaceholder":651},[102,96616,96617,96619,96621],{"class":104,"line":130},[102,96618,1208],{"class":119},[102,96620,59199],{"class":59165},[102,96622,59172],{"class":119},[102,96624,96625,96627,96629,96631,96633,96635],{"class":104,"line":136},[102,96626,60009],{"class":119},[102,96628,59209],{"class":59165},[102,96630,59212],{"class":112},[102,96632,260],{"class":119},[102,96634,59217],{"class":278},[102,96636,59172],{"class":119},[102,96638,96639,96641,96643,96645,96647,96649,96651,96653,96655],{"class":104,"line":142},[102,96640,60009],{"class":119},[102,96642,59209],{"class":59165},[102,96644,387],{"class":112},[102,96646,260],{"class":119},[102,96648,59256],{"class":278},[102,96650,59236],{"class":112},[102,96652,260],{"class":119},[102,96654,59263],{"class":278},[102,96656,59172],{"class":119},[102,96658,96659,96661,96663,96665,96667],{"class":104,"line":148},[102,96660,60009],{"class":119},[102,96662,59272],{"class":59165},[102,96664,59275],{"class":119},[102,96666,59272],{"class":59165},[102,96668,59172],{"class":119},[102,96670,96671,96673,96675],{"class":104,"line":157},[102,96672,59650],{"class":119},[102,96674,59199],{"class":59165},[102,96676,59172],{"class":119},[102,96678,96679],{"class":104,"line":163},[102,96680,652],{"emptyLinePlaceholder":651},[102,96682,96683,96685,96687],{"class":104,"line":175},[102,96684,1208],{"class":119},[102,96686,59665],{"class":59165},[102,96688,59172],{"class":119},[102,96690,96691,96693,96695,96697,96699],{"class":104,"line":181},[102,96692,60009],{"class":119},[102,96694,14],{"class":59165},[102,96696,61359],{"class":119},[102,96698,14],{"class":59165},[102,96700,59172],{"class":119},[102,96702,96703,96705,96707],{"class":104,"line":202},[102,96704,60009],{"class":119},[102,96706,59678],{"class":59165},[102,96708,59172],{"class":119},[102,96710,96711,96713,96716],{"class":104,"line":208},[102,96712,77949],{"class":108},[102,96714,96715],{"class":112}," fn",[102,96717,795],{"class":119},[102,96719,96720,96723],{"class":104,"line":214},[102,96721,96722],{"class":108},"      try",[102,96724,1077],{"class":119},[102,96726,96727],{"class":104,"line":225},[102,96728,96729],{"class":126},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[102,96731,96732,96734,96736,96738,96740,96742,96744,96747],{"class":104,"line":230},[102,96733,69135],{"class":108},[102,96735,5073],{"class":187},[102,96737,22296],{"class":108},[102,96739,62261],{"class":119},[102,96741,62264],{"class":112},[102,96743,380],{"class":119},[102,96745,96746],{"class":278},"'.p'",[102,96748,390],{"class":119},[102,96750,96751,96754,96756],{"class":104,"line":236},[102,96752,96753],{"class":119},"        p.style.color ",[102,96755,260],{"class":108},[102,96757,74916],{"class":278},[102,96759,96760,96763,96766],{"class":104,"line":242},[102,96761,96762],{"class":119},"      } ",[102,96764,96765],{"class":108},"catch",[102,96767,96768],{"class":119}," (err) {\n",[102,96770,96771],{"class":104,"line":248},[102,96772,96773],{"class":126},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[102,96775,96776,96779,96781],{"class":104,"line":254},[102,96777,96778],{"class":119},"        console.",[102,96780,66112],{"class":112},[102,96782,96783],{"class":119},"(err.message)\n",[102,96785,96786],{"class":104,"line":269},[102,96787,96788],{"class":126},"        \u002F\u002F 想要中断程序，需要加return\n",[102,96790,96791],{"class":104,"line":298},[102,96792,96793],{"class":126},"        \u002F\u002F return\n",[102,96795,96796],{"class":104,"line":502},[102,96797,96798],{"class":126},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[102,96800,96801,96804,96806,96809,96811,96814],{"class":104,"line":507},[102,96802,96803],{"class":108},"        throw",[102,96805,20315],{"class":108},[102,96807,96808],{"class":112}," Error",[102,96810,380],{"class":119},[102,96812,96813],{"class":278},"'你看看，选择器错误了吧'",[102,96815,390],{"class":119},[102,96817,96818],{"class":104,"line":512},[102,96819,60263],{"class":119},[102,96821,96822],{"class":104,"line":521},[102,96823,96824],{"class":126},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[102,96826,96827,96830],{"class":104,"line":526},[102,96828,96829],{"class":108},"      finally",[102,96831,1077],{"class":119},[102,96833,96834,96837,96839,96842],{"class":104,"line":532},[102,96835,96836],{"class":112},"        alert",[102,96838,380],{"class":119},[102,96840,96841],{"class":278},"'弹出对话框'",[102,96843,390],{"class":119},[102,96845,96846],{"class":104,"line":538},[102,96847,60263],{"class":119},[102,96849,96850,96852,96854,96856,96858],{"class":104,"line":555},[102,96851,66109],{"class":119},[102,96853,66112],{"class":112},[102,96855,380],{"class":119},[102,96857,9502],{"class":187},[102,96859,390],{"class":119},[102,96861,96862],{"class":104,"line":570},[102,96863,652],{"emptyLinePlaceholder":651},[102,96865,96866],{"class":104,"line":581},[102,96867,205],{"class":119},[102,96869,96870],{"class":104,"line":819},[102,96871,96872],{"class":126},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[102,96874,96875],{"class":104,"line":828},[102,96876,96877],{"class":126},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[102,96879,96880,96883],{"class":104,"line":837},[102,96881,96882],{"class":112},"    fn",[102,96884,172],{"class":119},[102,96886,96887,96889,96891],{"class":104,"line":842},[102,96888,60282],{"class":119},[102,96890,59678],{"class":59165},[102,96892,59172],{"class":119},[102,96894,96895,96897,96899],{"class":104,"line":855},[102,96896,59650],{"class":119},[102,96898,59665],{"class":59165},[102,96900,59172],{"class":119},[102,96902,96903],{"class":104,"line":860},[102,96904,652],{"emptyLinePlaceholder":651},[102,96906,96907,96909,96911],{"class":104,"line":871},[102,96908,59650],{"class":119},[102,96910,58500],{"class":59165},[102,96912,59172],{"class":119},[14,96914,96915],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[87,96917,96918],{"start":123},[62,96919,96920],{},"debugger",[14,96922,96923],{},[6750,96924],{"alt":98,"src":96925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,96927,96928],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[43,96930,96932],{"id":96931},"_416-处理this","4.16 处理this",[48,96934,96936],{"id":96935},"_4161-this的指向","4.16.1 this的指向",[87,96938,96939],{},[62,96940,96941],{},"普通函数的this",[14,96943,96944],{},[6750,96945],{"alt":98,"src":96946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[87,96948,96949],{"start":116},[62,96950,96951],{},"箭头函数的this",[14,96953,96954],{},[6750,96955],{"alt":98,"src":96956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,96958,96959],{},[6750,96960],{"alt":98,"src":96961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,96963,96964],{},[6750,96965],{"alt":98,"src":96966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[48,96968,96970],{"id":96969},"_4162-this的改变","4.16.2 this的改变",[14,96972,96973],{},"call() apply() bind()",[87,96975,96976],{},[62,96977,96978],{},"call()",[14,96980,96981],{},[6750,96982],{"alt":98,"src":96983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,96985,96986],{},"两个作用：①调用函数；②改变this指向",[93,96988,96990],{"className":60932,"code":96989,"language":60934,"meta":98,"style":98},"\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",[83,96991,96992,97000,97008,97012,97017,97021,97026,97031,97036,97040,97045,97053],{"__ignoreMap":98},[102,96993,96994,96996,96998],{"class":104,"line":105},[102,96995,1208],{"class":119},[102,96997,59665],{"class":59165},[102,96999,59172],{"class":119},[102,97001,97002,97004,97006],{"class":104,"line":116},[102,97003,60009],{"class":119},[102,97005,59678],{"class":59165},[102,97007,59172],{"class":119},[102,97009,97010],{"class":104,"line":123},[102,97011,79388],{"class":119},[102,97013,97014],{"class":104,"line":130},[102,97015,97016],{"class":119},"      uname: 'pink'\n",[102,97018,97019],{"class":104,"line":136},[102,97020,205],{"class":119},[102,97022,97023],{"class":104,"line":142},[102,97024,97025],{"class":119},"    function fn(x, y) {\n",[102,97027,97028],{"class":104,"line":148},[102,97029,97030],{"class":119},"      console.log(this)  \u002F\u002Fwindow\n",[102,97032,97033],{"class":104,"line":157},[102,97034,97035],{"class":119},"      console.log(x + y)\n",[102,97037,97038],{"class":104,"line":163},[102,97039,205],{"class":119},[102,97041,97042],{"class":104,"line":175},[102,97043,97044],{"class":119},"    fn.call(obj, 1, 2)\n",[102,97046,97047,97049,97051],{"class":104,"line":181},[102,97048,60282],{"class":119},[102,97050,59678],{"class":59165},[102,97052,59172],{"class":119},[102,97054,97055,97057,97059],{"class":104,"line":202},[102,97056,59650],{"class":119},[102,97058,59665],{"class":59165},[102,97060,59172],{"class":119},[14,97062,97063],{},[6750,97064],{"alt":98,"src":97065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[87,97067,97068],{"start":116},[62,97069,97070],{},"apply()",[14,97072,97073],{},[6750,97074],{"alt":98,"src":97075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,97077,96986],{},[14,97079,97080],{},"call传递的是普通参数，而apply必须传递的是数组",[93,97082,97084],{"className":58498,"code":97083,"language":58500,"meta":98,"style":98},"\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",[83,97085,97086,97096,97110,97114,97122,97136,97156,97168,97176,97180,97188,97196,97206,97213,97217,97222,97238,97250,97264,97268,97273,97292,97297,97301,97306,97311,97319,97324,97346,97351,97367,97383,97395,97399,97404,97423,97431,97439,97443],{"__ignoreMap":98},[102,97087,97088,97090,97092,97094],{"class":104,"line":105},[102,97089,59162],{"class":119},[102,97091,59166],{"class":59165},[102,97093,59169],{"class":112},[102,97095,59172],{"class":119},[102,97097,97098,97100,97102,97104,97106,97108],{"class":104,"line":116},[102,97099,1208],{"class":119},[102,97101,58500],{"class":59165},[102,97103,59181],{"class":112},[102,97105,260],{"class":119},[102,97107,59186],{"class":278},[102,97109,59172],{"class":119},[102,97111,97112],{"class":104,"line":123},[102,97113,652],{"emptyLinePlaceholder":651},[102,97115,97116,97118,97120],{"class":104,"line":130},[102,97117,1208],{"class":119},[102,97119,59199],{"class":59165},[102,97121,59172],{"class":119},[102,97123,97124,97126,97128,97130,97132,97134],{"class":104,"line":136},[102,97125,60009],{"class":119},[102,97127,59209],{"class":59165},[102,97129,59212],{"class":112},[102,97131,260],{"class":119},[102,97133,59217],{"class":278},[102,97135,59172],{"class":119},[102,97137,97138,97140,97142,97144,97146,97148,97150,97152,97154],{"class":104,"line":142},[102,97139,60009],{"class":119},[102,97141,59209],{"class":59165},[102,97143,387],{"class":112},[102,97145,260],{"class":119},[102,97147,59256],{"class":278},[102,97149,59236],{"class":112},[102,97151,260],{"class":119},[102,97153,59263],{"class":278},[102,97155,59172],{"class":119},[102,97157,97158,97160,97162,97164,97166],{"class":104,"line":148},[102,97159,60009],{"class":119},[102,97161,59272],{"class":59165},[102,97163,59275],{"class":119},[102,97165,59272],{"class":59165},[102,97167,59172],{"class":119},[102,97169,97170,97172,97174],{"class":104,"line":157},[102,97171,59650],{"class":119},[102,97173,59199],{"class":59165},[102,97175,59172],{"class":119},[102,97177,97178],{"class":104,"line":163},[102,97179,652],{"emptyLinePlaceholder":651},[102,97181,97182,97184,97186],{"class":104,"line":175},[102,97183,1208],{"class":119},[102,97185,59665],{"class":59165},[102,97187,59172],{"class":119},[102,97189,97190,97192,97194],{"class":104,"line":181},[102,97191,60009],{"class":119},[102,97193,59678],{"class":59165},[102,97195,59172],{"class":119},[102,97197,97198,97200,97202,97204],{"class":104,"line":202},[102,97199,19961],{"class":108},[102,97201,77836],{"class":187},[102,97203,22296],{"class":108},[102,97205,1077],{"class":119},[102,97207,97208,97210],{"class":104,"line":208},[102,97209,79491],{"class":119},[102,97211,97212],{"class":187},"18\n",[102,97214,97215],{"class":104,"line":214},[102,97216,205],{"class":119},[102,97218,97219],{"class":104,"line":225},[102,97220,97221],{"class":126},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[102,97223,97224,97226,97228,97230,97232,97234,97236],{"class":104,"line":230},[102,97225,77949],{"class":108},[102,97227,96715],{"class":112},[102,97229,380],{"class":119},[102,97231,3056],{"class":386},[102,97233,2571],{"class":119},[102,97235,9867],{"class":386},[102,97237,1105],{"class":119},[102,97239,97240,97242,97244,97246,97248],{"class":104,"line":236},[102,97241,66109],{"class":119},[102,97243,66112],{"class":112},[102,97245,380],{"class":119},[102,97247,94858],{"class":187},[102,97249,390],{"class":119},[102,97251,97252,97254,97256,97259,97261],{"class":104,"line":242},[102,97253,66109],{"class":119},[102,97255,66112],{"class":112},[102,97257,97258],{"class":119},"(x ",[102,97260,1702],{"class":108},[102,97262,97263],{"class":119}," y)\n",[102,97265,97266],{"class":104,"line":248},[102,97267,205],{"class":119},[102,97269,97270],{"class":104,"line":254},[102,97271,97272],{"class":126},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[102,97274,97275,97278,97281,97284,97286,97288,97290],{"class":104,"line":269},[102,97276,97277],{"class":119},"    fn.",[102,97279,97280],{"class":112},"apply",[102,97282,97283],{"class":119},"(obj, [",[102,97285,7039],{"class":187},[102,97287,2571],{"class":119},[102,97289,7044],{"class":187},[102,97291,13466],{"class":119},[102,97293,97294],{"class":104,"line":298},[102,97295,97296],{"class":126},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[102,97298,97299],{"class":104,"line":502},[102,97300,652],{"emptyLinePlaceholder":651},[102,97302,97303],{"class":104,"line":507},[102,97304,97305],{"class":126},"    \u002F\u002F 使用场景：求数组最大值\n",[102,97307,97308],{"class":104,"line":512},[102,97309,97310],{"class":126},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[102,97312,97313,97316],{"class":104,"line":521},[102,97314,97315],{"class":126},"    \u002F\u002F console.log(max)",[102,97317,97318],{"class":126},"   \u002F\u002F3\n",[102,97320,97321],{"class":104,"line":526},[102,97322,97323],{"class":126},"    \u002F\u002F 指向空或者Math都是可以的\n",[102,97325,97326,97328,97330,97332,97334,97336,97338,97340,97342,97344],{"class":104,"line":532},[102,97327,19961],{"class":108},[102,97329,65560],{"class":187},[102,97331,22296],{"class":108},[102,97333,60091],{"class":119},[102,97335,5569],{"class":187},[102,97337,2571],{"class":119},[102,97339,9533],{"class":187},[102,97341,2571],{"class":119},[102,97343,9562],{"class":187},[102,97345,41111],{"class":119},[102,97347,97348],{"class":104,"line":538},[102,97349,97350],{"class":126},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[102,97352,97353,97355,97357,97359,97362,97364],{"class":104,"line":555},[102,97354,19961],{"class":108},[102,97356,14749],{"class":187},[102,97358,22296],{"class":108},[102,97360,97361],{"class":119}," Math.max.",[102,97363,97280],{"class":112},[102,97365,97366],{"class":119},"(Math, arr)\n",[102,97368,97369,97371,97374,97376,97379,97381],{"class":104,"line":570},[102,97370,19961],{"class":108},[102,97372,97373],{"class":187}," min",[102,97375,22296],{"class":108},[102,97377,97378],{"class":119}," Math.min.",[102,97380,97280],{"class":112},[102,97382,97366],{"class":119},[102,97384,97385,97387,97389,97392],{"class":104,"line":581},[102,97386,81618],{"class":119},[102,97388,66112],{"class":112},[102,97390,97391],{"class":119},"(max, min)     ",[102,97393,97394],{"class":126},"\u002F\u002F100,4\n",[102,97396,97397],{"class":104,"line":819},[102,97398,652],{"emptyLinePlaceholder":651},[102,97400,97401],{"class":104,"line":828},[102,97402,97403],{"class":126},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[102,97405,97406,97408,97410,97413,97415,97417,97420],{"class":104,"line":837},[102,97407,81618],{"class":119},[102,97409,66112],{"class":112},[102,97411,97412],{"class":119},"(Max.",[102,97414,14811],{"class":112},[102,97416,380],{"class":119},[102,97418,97419],{"class":108},"...",[102,97421,97422],{"class":119},"arr))\n",[102,97424,97425,97427,97429],{"class":104,"line":842},[102,97426,60282],{"class":119},[102,97428,59678],{"class":59165},[102,97430,59172],{"class":119},[102,97432,97433,97435,97437],{"class":104,"line":855},[102,97434,59650],{"class":119},[102,97436,59665],{"class":59165},[102,97438,59172],{"class":119},[102,97440,97441],{"class":104,"line":860},[102,97442,652],{"emptyLinePlaceholder":651},[102,97444,97445,97447,97449],{"class":104,"line":871},[102,97446,59650],{"class":119},[102,97448,58500],{"class":59165},[102,97450,59172],{"class":119},[14,97452,97453],{},[6750,97454],{"alt":98,"src":97455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[87,97457,97458],{"start":123},[62,97459,97460],{},"bind()",[14,97462,97463],{},[6750,97464],{"alt":98,"src":97465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,97467,97468],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,97470,97471],{},"bind的语法跟call很相似",[93,97473,97475],{"className":60932,"code":97474,"language":60934,"meta":98,"style":98},"\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",[83,97476,97477,97485,97493,97497,97502,97506,97510,97515,97519,97524,97529,97534,97539,97544,97549,97554,97558,97566],{"__ignoreMap":98},[102,97478,97479,97481,97483],{"class":104,"line":105},[102,97480,1208],{"class":119},[102,97482,59665],{"class":59165},[102,97484,59172],{"class":119},[102,97486,97487,97489,97491],{"class":104,"line":116},[102,97488,60009],{"class":119},[102,97490,59678],{"class":59165},[102,97492,59172],{"class":119},[102,97494,97495],{"class":104,"line":123},[102,97496,79388],{"class":119},[102,97498,97499],{"class":104,"line":130},[102,97500,97501],{"class":119},"      age: 18\n",[102,97503,97504],{"class":104,"line":136},[102,97505,205],{"class":119},[102,97507,97508],{"class":104,"line":142},[102,97509,85008],{"class":119},[102,97511,97512],{"class":104,"line":148},[102,97513,97514],{"class":119},"      console.log(this)\n",[102,97516,97517],{"class":104,"line":157},[102,97518,205],{"class":119},[102,97520,97521],{"class":104,"line":163},[102,97522,97523],{"class":119},"    \u002F\u002F 1.bind 不会调用函数\n",[102,97525,97526],{"class":104,"line":175},[102,97527,97528],{"class":119},"    \u002F\u002F 2.bind能改变this的指向\n",[102,97530,97531],{"class":104,"line":181},[102,97532,97533],{"class":119},"    fn.bind()\n",[102,97535,97536],{"class":104,"line":202},[102,97537,97538],{"class":119},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[102,97540,97541],{"class":104,"line":208},[102,97542,97543],{"class":119},"    const fun = fn.bind(obj)\n",[102,97545,97546],{"class":104,"line":214},[102,97547,97548],{"class":119},"    \u002F\u002F console.log(fun)\n",[102,97550,97551],{"class":104,"line":225},[102,97552,97553],{"class":119},"    \u002F\u002F 调用,查看this的指向\n",[102,97555,97556],{"class":104,"line":230},[102,97557,60516],{"class":119},[102,97559,97560,97562,97564],{"class":104,"line":236},[102,97561,60282],{"class":119},[102,97563,59678],{"class":59165},[102,97565,59172],{"class":119},[102,97567,97568,97570,97572],{"class":104,"line":242},[102,97569,59650],{"class":119},[102,97571,59665],{"class":59165},[102,97573,59172],{"class":119},[14,97575,97576],{},[6750,97577],{"alt":98,"src":97578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[87,97580,97581],{"start":130},[62,97582,97583],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[93,97585,97587],{"className":60932,"code":97586,"language":60934,"meta":98,"style":98},"\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",[83,97588,97589,97597,97610,97618,97623,97627,97632,97637,97642,97647,97652,97657,97662,97667,97671,97679],{"__ignoreMap":98},[102,97590,97591,97593,97595],{"class":104,"line":105},[102,97592,1208],{"class":119},[102,97594,59665],{"class":59165},[102,97596,59172],{"class":119},[102,97598,97599,97601,97603,97606,97608],{"class":104,"line":116},[102,97600,60009],{"class":119},[102,97602,61752],{"class":59165},[102,97604,97605],{"class":119},">禁用\u003C\u002F",[102,97607,61752],{"class":59165},[102,97609,59172],{"class":119},[102,97611,97612,97614,97616],{"class":104,"line":123},[102,97613,60009],{"class":119},[102,97615,59678],{"class":59165},[102,97617,59172],{"class":119},[102,97619,97620],{"class":104,"line":130},[102,97621,97622],{"class":119},"    const btn = document.querySelector('button')\n",[102,97624,97625],{"class":104,"line":136},[102,97626,66881],{"class":119},[102,97628,97629],{"class":104,"line":142},[102,97630,97631],{"class":119},"      this.disabled = true\n",[102,97633,97634],{"class":104,"line":148},[102,97635,97636],{"class":119},"      \u002F\u002F 定时器是window进行调用的\n",[102,97638,97639],{"class":104,"line":157},[102,97640,97641],{"class":119},"      setTimeout(function () {\n",[102,97643,97644],{"class":104,"line":163},[102,97645,97646],{"class":119},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[102,97648,97649],{"class":104,"line":175},[102,97650,97651],{"class":119},"        this.disabled = false\n",[102,97653,97654],{"class":104,"line":181},[102,97655,97656],{"class":119},"      }.bind(this), 2000)\n",[102,97658,97659],{"class":104,"line":202},[102,97660,97661],{"class":119},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[102,97663,97664],{"class":104,"line":208},[102,97665,97666],{"class":119},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[102,97668,97669],{"class":104,"line":214},[102,97670,41326],{"class":119},[102,97672,97673,97675,97677],{"class":104,"line":225},[102,97674,60282],{"class":119},[102,97676,59678],{"class":59165},[102,97678,59172],{"class":119},[102,97680,97681,97683,97685],{"class":104,"line":230},[102,97682,59650],{"class":119},[102,97684,59665],{"class":59165},[102,97686,59172],{"class":119},[87,97688,97689],{"start":136},[62,97690,7556],{},[14,97692,97693],{},[6750,97694],{"alt":98,"src":97695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[43,97697,97699],{"id":97698},"_417-性能优化","4.17 性能优化",[48,97701,97703],{"id":97702},"_4171-防抖","4.17.1 防抖",[14,97705,97706],{},[6750,97707],{"alt":98,"src":97708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,97710,97711],{},[18,97712,97713],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,97715,97716],{},"防抖实现方式：",[59,97718,97719],{},[62,97720,97721],{},"lodash 提供了防抖处理",[14,97723,97724],{},"_.debounce(func,[wait=0],[options={}])",[14,97726,97727],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[93,97729,97731],{"className":58498,"code":97730,"language":58500,"meta":98,"style":98},"\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",[83,97732,97733,97743,97757,97761,97769,97783,97803,97815,97823,97829,97839,97851,97863,97874,97886,97896,97906,97919,97923,97931,97939,97943,97951,97969,97987,97995,98014,98024,98033,98044,98049,98053,98058,98063,98068,98093,98101,98109,98113],{"__ignoreMap":98},[102,97734,97735,97737,97739,97741],{"class":104,"line":105},[102,97736,59162],{"class":119},[102,97738,59166],{"class":59165},[102,97740,59169],{"class":112},[102,97742,59172],{"class":119},[102,97744,97745,97747,97749,97751,97753,97755],{"class":104,"line":116},[102,97746,1208],{"class":119},[102,97748,58500],{"class":59165},[102,97750,59181],{"class":112},[102,97752,260],{"class":119},[102,97754,59186],{"class":278},[102,97756,59172],{"class":119},[102,97758,97759],{"class":104,"line":123},[102,97760,652],{"emptyLinePlaceholder":651},[102,97762,97763,97765,97767],{"class":104,"line":130},[102,97764,1208],{"class":119},[102,97766,59199],{"class":59165},[102,97768,59172],{"class":119},[102,97770,97771,97773,97775,97777,97779,97781],{"class":104,"line":136},[102,97772,60009],{"class":119},[102,97774,59209],{"class":59165},[102,97776,59212],{"class":112},[102,97778,260],{"class":119},[102,97780,59217],{"class":278},[102,97782,59172],{"class":119},[102,97784,97785,97787,97789,97791,97793,97795,97797,97799,97801],{"class":104,"line":142},[102,97786,60009],{"class":119},[102,97788,59209],{"class":59165},[102,97790,387],{"class":112},[102,97792,260],{"class":119},[102,97794,59256],{"class":278},[102,97796,59236],{"class":112},[102,97798,260],{"class":119},[102,97800,59263],{"class":278},[102,97802,59172],{"class":119},[102,97804,97805,97807,97809,97811,97813],{"class":104,"line":148},[102,97806,60009],{"class":119},[102,97808,59272],{"class":59165},[102,97810,59275],{"class":119},[102,97812,59272],{"class":59165},[102,97814,59172],{"class":119},[102,97816,97817,97819,97821],{"class":104,"line":157},[102,97818,60009],{"class":119},[102,97820,8955],{"class":59165},[102,97822,59172],{"class":119},[102,97824,97825,97827],{"class":104,"line":163},[102,97826,62617],{"class":112},[102,97828,1077],{"class":119},[102,97830,97831,97833,97835,97837],{"class":104,"line":175},[102,97832,80461],{"class":187},[102,97834,59302],{"class":119},[102,97836,68370],{"class":187},[102,97838,266],{"class":119},[102,97840,97841,97843,97845,97847,97849],{"class":104,"line":181},[102,97842,62636],{"class":187},[102,97844,59302],{"class":119},[102,97846,7866],{"class":187},[102,97848,59357],{"class":108},[102,97850,266],{"class":119},[102,97852,97853,97855,97857,97859,97861],{"class":104,"line":202},[102,97854,62650],{"class":187},[102,97856,59302],{"class":119},[102,97858,7866],{"class":187},[102,97860,59357],{"class":108},[102,97862,266],{"class":119},[102,97864,97865,97867,97869,97872],{"class":104,"line":208},[102,97866,62749],{"class":187},[102,97868,59302],{"class":119},[102,97870,97871],{"class":187},"gray",[102,97873,266],{"class":119},[102,97875,97876,97878,97880,97882,97884],{"class":104,"line":214},[102,97877,62787],{"class":187},[102,97879,59302],{"class":119},[102,97881,9847],{"class":187},[102,97883,59357],{"class":108},[102,97885,266],{"class":119},[102,97887,97888,97890,97892,97894],{"class":104,"line":225},[102,97889,65281],{"class":187},[102,97891,59302],{"class":119},[102,97893,68707],{"class":187},[102,97895,266],{"class":119},[102,97897,97898,97900,97902,97904],{"class":104,"line":230},[102,97899,65151],{"class":187},[102,97901,59302],{"class":119},[102,97903,59457],{"class":187},[102,97905,266],{"class":119},[102,97907,97908,97911,97913,97915,97917],{"class":104,"line":236},[102,97909,97910],{"class":187},"      padding-top",[102,97912,59302],{"class":119},[102,97914,9354],{"class":187},[102,97916,59357],{"class":108},[102,97918,266],{"class":119},[102,97920,97921],{"class":104,"line":242},[102,97922,205],{"class":119},[102,97924,97925,97927,97929],{"class":104,"line":248},[102,97926,60282],{"class":119},[102,97928,8955],{"class":59165},[102,97930,59172],{"class":119},[102,97932,97933,97935,97937],{"class":104,"line":254},[102,97934,59650],{"class":119},[102,97936,59199],{"class":59165},[102,97938,59172],{"class":119},[102,97940,97941],{"class":104,"line":269},[102,97942,652],{"emptyLinePlaceholder":651},[102,97944,97945,97947,97949],{"class":104,"line":298},[102,97946,1208],{"class":119},[102,97948,59665],{"class":59165},[102,97950,59172],{"class":119},[102,97952,97953,97955,97957,97959,97961,97963,97965,97967],{"class":104,"line":502},[102,97954,60009],{"class":119},[102,97956,59476],{"class":59165},[102,97958,61351],{"class":112},[102,97960,260],{"class":119},[102,97962,61356],{"class":278},[102,97964,63179],{"class":119},[102,97966,59476],{"class":59165},[102,97968,59172],{"class":119},[102,97970,97971,97973,97975,97977,97979,97981,97983,97985],{"class":104,"line":507},[102,97972,60009],{"class":119},[102,97974,59678],{"class":59165},[102,97976,63104],{"class":112},[102,97978,260],{"class":119},[102,97980,96139],{"class":278},[102,97982,63179],{"class":119},[102,97984,59678],{"class":59165},[102,97986,59172],{"class":119},[102,97988,97989,97991,97993],{"class":104,"line":512},[102,97990,60009],{"class":119},[102,97992,59678],{"class":59165},[102,97994,59172],{"class":119},[102,97996,97997,97999,98001,98003,98005,98007,98009,98012],{"class":104,"line":521},[102,97998,19961],{"class":108},[102,98000,94798],{"class":187},[102,98002,22296],{"class":108},[102,98004,62261],{"class":119},[102,98006,62264],{"class":112},[102,98008,380],{"class":119},[102,98010,98011],{"class":278},"'.box'",[102,98013,390],{"class":119},[102,98015,98016,98018,98020,98022],{"class":104,"line":526},[102,98017,60084],{"class":108},[102,98019,18205],{"class":119},[102,98021,260],{"class":108},[102,98023,55198],{"class":187},[102,98025,98026,98028,98031],{"class":104,"line":532},[102,98027,77949],{"class":108},[102,98029,98030],{"class":112}," mouseMove",[102,98032,795],{"class":119},[102,98034,98035,98038,98040,98042],{"class":104,"line":538},[102,98036,98037],{"class":119},"      box.innerHTML ",[102,98039,260],{"class":108},[102,98041,11848],{"class":119},[102,98043,11522],{"class":108},[102,98045,98046],{"class":104,"line":555},[102,98047,98048],{"class":126},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[102,98050,98051],{"class":104,"line":570},[102,98052,205],{"class":119},[102,98054,98055],{"class":104,"line":581},[102,98056,98057],{"class":126},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[102,98059,98060],{"class":104,"line":819},[102,98061,98062],{"class":126},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[102,98064,98065],{"class":104,"line":828},[102,98066,98067],{"class":126},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[102,98069,98070,98073,98075,98077,98080,98083,98086,98089,98091],{"class":104,"line":837},[102,98071,98072],{"class":119},"    box.",[102,98074,65678],{"class":112},[102,98076,380],{"class":119},[102,98078,98079],{"class":278},"'mousemove'",[102,98081,98082],{"class":119},", _.",[102,98084,98085],{"class":112},"debounce",[102,98087,98088],{"class":119},"(mouseMove, ",[102,98090,72939],{"class":187},[102,98092,38362],{"class":119},[102,98094,98095,98097,98099],{"class":104,"line":842},[102,98096,60282],{"class":119},[102,98098,59678],{"class":59165},[102,98100,59172],{"class":119},[102,98102,98103,98105,98107],{"class":104,"line":855},[102,98104,59650],{"class":119},[102,98106,59665],{"class":59165},[102,98108,59172],{"class":119},[102,98110,98111],{"class":104,"line":860},[102,98112,652],{"emptyLinePlaceholder":651},[102,98114,98115,98117,98119],{"class":104,"line":871},[102,98116,59650],{"class":119},[102,98118,58500],{"class":59165},[102,98120,59172],{"class":119},[59,98122,98123],{},[62,98124,98125],{},"手写一个防抖函数来处理",[14,98127,98128],{},"防抖的核心就是利用定时器来实现的：",[14,98130,98131],{},"①声明一个定时器变量",[14,98133,98134],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,98136,98137],{},"③如果没有定时器则开启定时器，记得存到变量里面",[93,98139,98141],{"className":58498,"code":98140,"language":58500,"meta":98,"style":98},"\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",[83,98142,98143,98153,98167,98171,98179,98193,98213,98225,98233,98239,98249,98261,98273,98283,98295,98305,98315,98327,98331,98339,98347,98351,98359,98377,98395,98403,98421,98431,98439,98449,98453,98457,98461,98466,98471,98476,98481,98486,98491,98509,98516,98521,98529,98534,98547,98563,98573,98578,98582,98586,98606,98610,98615,98620,98625,98630,98638,98646,98650],{"__ignoreMap":98},[102,98144,98145,98147,98149,98151],{"class":104,"line":105},[102,98146,59162],{"class":119},[102,98148,59166],{"class":59165},[102,98150,59169],{"class":112},[102,98152,59172],{"class":119},[102,98154,98155,98157,98159,98161,98163,98165],{"class":104,"line":116},[102,98156,1208],{"class":119},[102,98158,58500],{"class":59165},[102,98160,59181],{"class":112},[102,98162,260],{"class":119},[102,98164,59186],{"class":278},[102,98166,59172],{"class":119},[102,98168,98169],{"class":104,"line":123},[102,98170,652],{"emptyLinePlaceholder":651},[102,98172,98173,98175,98177],{"class":104,"line":130},[102,98174,1208],{"class":119},[102,98176,59199],{"class":59165},[102,98178,59172],{"class":119},[102,98180,98181,98183,98185,98187,98189,98191],{"class":104,"line":136},[102,98182,60009],{"class":119},[102,98184,59209],{"class":59165},[102,98186,59212],{"class":112},[102,98188,260],{"class":119},[102,98190,59217],{"class":278},[102,98192,59172],{"class":119},[102,98194,98195,98197,98199,98201,98203,98205,98207,98209,98211],{"class":104,"line":142},[102,98196,60009],{"class":119},[102,98198,59209],{"class":59165},[102,98200,387],{"class":112},[102,98202,260],{"class":119},[102,98204,59256],{"class":278},[102,98206,59236],{"class":112},[102,98208,260],{"class":119},[102,98210,59263],{"class":278},[102,98212,59172],{"class":119},[102,98214,98215,98217,98219,98221,98223],{"class":104,"line":148},[102,98216,60009],{"class":119},[102,98218,59272],{"class":59165},[102,98220,59275],{"class":119},[102,98222,59272],{"class":59165},[102,98224,59172],{"class":119},[102,98226,98227,98229,98231],{"class":104,"line":157},[102,98228,60009],{"class":119},[102,98230,8955],{"class":59165},[102,98232,59172],{"class":119},[102,98234,98235,98237],{"class":104,"line":163},[102,98236,62617],{"class":112},[102,98238,1077],{"class":119},[102,98240,98241,98243,98245,98247],{"class":104,"line":175},[102,98242,80461],{"class":187},[102,98244,59302],{"class":119},[102,98246,68370],{"class":187},[102,98248,266],{"class":119},[102,98250,98251,98253,98255,98257,98259],{"class":104,"line":181},[102,98252,62636],{"class":187},[102,98254,59302],{"class":119},[102,98256,7866],{"class":187},[102,98258,59357],{"class":108},[102,98260,266],{"class":119},[102,98262,98263,98265,98267,98269,98271],{"class":104,"line":202},[102,98264,62650],{"class":187},[102,98266,59302],{"class":119},[102,98268,7866],{"class":187},[102,98270,59357],{"class":108},[102,98272,266],{"class":119},[102,98274,98275,98277,98279,98281],{"class":104,"line":208},[102,98276,62749],{"class":187},[102,98278,59302],{"class":119},[102,98280,97871],{"class":187},[102,98282,266],{"class":119},[102,98284,98285,98287,98289,98291,98293],{"class":104,"line":214},[102,98286,62787],{"class":187},[102,98288,59302],{"class":119},[102,98290,9847],{"class":187},[102,98292,59357],{"class":108},[102,98294,266],{"class":119},[102,98296,98297,98299,98301,98303],{"class":104,"line":225},[102,98298,65281],{"class":187},[102,98300,59302],{"class":119},[102,98302,68707],{"class":187},[102,98304,266],{"class":119},[102,98306,98307,98309,98311,98313],{"class":104,"line":230},[102,98308,65151],{"class":187},[102,98310,59302],{"class":119},[102,98312,59457],{"class":187},[102,98314,266],{"class":119},[102,98316,98317,98319,98321,98323,98325],{"class":104,"line":236},[102,98318,97910],{"class":187},[102,98320,59302],{"class":119},[102,98322,9354],{"class":187},[102,98324,59357],{"class":108},[102,98326,266],{"class":119},[102,98328,98329],{"class":104,"line":242},[102,98330,205],{"class":119},[102,98332,98333,98335,98337],{"class":104,"line":248},[102,98334,60282],{"class":119},[102,98336,8955],{"class":59165},[102,98338,59172],{"class":119},[102,98340,98341,98343,98345],{"class":104,"line":254},[102,98342,59650],{"class":119},[102,98344,59199],{"class":59165},[102,98346,59172],{"class":119},[102,98348,98349],{"class":104,"line":269},[102,98350,652],{"emptyLinePlaceholder":651},[102,98352,98353,98355,98357],{"class":104,"line":298},[102,98354,1208],{"class":119},[102,98356,59665],{"class":59165},[102,98358,59172],{"class":119},[102,98360,98361,98363,98365,98367,98369,98371,98373,98375],{"class":104,"line":502},[102,98362,60009],{"class":119},[102,98364,59476],{"class":59165},[102,98366,61351],{"class":112},[102,98368,260],{"class":119},[102,98370,61356],{"class":278},[102,98372,63179],{"class":119},[102,98374,59476],{"class":59165},[102,98376,59172],{"class":119},[102,98378,98379,98381,98383,98385,98387,98389,98391,98393],{"class":104,"line":507},[102,98380,60009],{"class":119},[102,98382,59678],{"class":59165},[102,98384,63104],{"class":112},[102,98386,260],{"class":119},[102,98388,96139],{"class":278},[102,98390,63179],{"class":119},[102,98392,59678],{"class":59165},[102,98394,59172],{"class":119},[102,98396,98397,98399,98401],{"class":104,"line":512},[102,98398,60009],{"class":119},[102,98400,59678],{"class":59165},[102,98402,59172],{"class":119},[102,98404,98405,98407,98409,98411,98413,98415,98417,98419],{"class":104,"line":521},[102,98406,19961],{"class":108},[102,98408,94798],{"class":187},[102,98410,22296],{"class":108},[102,98412,62261],{"class":119},[102,98414,62264],{"class":112},[102,98416,380],{"class":119},[102,98418,98011],{"class":278},[102,98420,390],{"class":119},[102,98422,98423,98425,98427,98429],{"class":104,"line":526},[102,98424,60084],{"class":108},[102,98426,18205],{"class":119},[102,98428,260],{"class":108},[102,98430,55198],{"class":187},[102,98432,98433,98435,98437],{"class":104,"line":532},[102,98434,77949],{"class":108},[102,98436,98030],{"class":112},[102,98438,795],{"class":119},[102,98440,98441,98443,98445,98447],{"class":104,"line":538},[102,98442,98037],{"class":119},[102,98444,260],{"class":108},[102,98446,11848],{"class":119},[102,98448,11522],{"class":108},[102,98450,98451],{"class":104,"line":555},[102,98452,98048],{"class":126},[102,98454,98455],{"class":104,"line":570},[102,98456,205],{"class":119},[102,98458,98459],{"class":104,"line":581},[102,98460,98057],{"class":126},[102,98462,98463],{"class":104,"line":819},[102,98464,98465],{"class":126},"    \u002F\u002F 手写防抖函数\n",[102,98467,98468],{"class":104,"line":828},[102,98469,98470],{"class":126},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[102,98472,98473],{"class":104,"line":837},[102,98474,98475],{"class":126},"    \u002F\u002F 1.声明定时器变量\n",[102,98477,98478],{"class":104,"line":842},[102,98479,98480],{"class":126},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[102,98482,98483],{"class":104,"line":855},[102,98484,98485],{"class":126},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[102,98487,98488],{"class":104,"line":860},[102,98489,98490],{"class":126},"    \u002F\u002F 4.定时器里面写函数调用\n",[102,98492,98493,98495,98498,98500,98503,98505,98507],{"class":104,"line":871},[102,98494,77949],{"class":108},[102,98496,98497],{"class":112}," debounce",[102,98499,380],{"class":119},[102,98501,98502],{"class":386},"fn",[102,98504,2571],{"class":119},[102,98506,9744],{"class":386},[102,98508,1105],{"class":119},[102,98510,98511,98513],{"class":104,"line":1359},[102,98512,87637],{"class":108},[102,98514,98515],{"class":119}," timer\n",[102,98517,98518],{"class":104,"line":1368},[102,98519,98520],{"class":126},"      \u002F\u002F return 返回一个匿名函数\n",[102,98522,98523,98525,98527],{"class":104,"line":1373},[102,98524,81847],{"class":108},[102,98526,66783],{"class":108},[102,98528,62317],{"class":119},[102,98530,98531],{"class":104,"line":1378},[102,98532,98533],{"class":126},"        \u002F\u002F 这里边写第二三四步\n",[102,98535,98536,98538,98541,98544],{"class":104,"line":1384},[102,98537,1202],{"class":108},[102,98539,98540],{"class":119}," (timer) ",[102,98542,98543],{"class":112},"clearTimeout",[102,98545,98546],{"class":119},"(timer)\n",[102,98548,98549,98552,98554,98557,98559,98561],{"class":104,"line":1398},[102,98550,98551],{"class":119},"        timer ",[102,98553,260],{"class":108},[102,98555,98556],{"class":112}," setTimeout",[102,98558,380],{"class":119},[102,98560,62314],{"class":108},[102,98562,62317],{"class":119},[102,98564,98565,98568,98570],{"class":104,"line":1424},[102,98566,98567],{"class":112},"          fn",[102,98569,1417],{"class":119},[102,98571,98572],{"class":126},"\u002F\u002F加小括号调用fn }, t)\n",[102,98574,98575],{"class":104,"line":1429},[102,98576,98577],{"class":119},"        }, t)\n",[102,98579,98580],{"class":104,"line":1435},[102,98581,60263],{"class":119},[102,98583,98584],{"class":104,"line":1450},[102,98585,205],{"class":119},[102,98587,98588,98590,98592,98594,98596,98598,98600,98602,98604],{"class":104,"line":1473},[102,98589,98072],{"class":119},[102,98591,65678],{"class":112},[102,98593,380],{"class":119},[102,98595,98079],{"class":278},[102,98597,2571],{"class":119},[102,98599,98085],{"class":112},[102,98601,98088],{"class":119},[102,98603,72939],{"class":187},[102,98605,38362],{"class":119},[102,98607,98608],{"class":104,"line":1478},[102,98609,652],{"emptyLinePlaceholder":651},[102,98611,98612],{"class":104,"line":1484},[102,98613,98614],{"class":126},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[102,98616,98617],{"class":104,"line":1499},[102,98618,98619],{"class":126},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[102,98621,98622],{"class":104,"line":1508},[102,98623,98624],{"class":126},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[102,98626,98627],{"class":104,"line":1513},[102,98628,98629],{"class":126},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[102,98631,98632,98634,98636],{"class":104,"line":1524},[102,98633,60282],{"class":119},[102,98635,59678],{"class":59165},[102,98637,59172],{"class":119},[102,98639,98640,98642,98644],{"class":104,"line":1529},[102,98641,59650],{"class":119},[102,98643,59665],{"class":59165},[102,98645,59172],{"class":119},[102,98647,98648],{"class":104,"line":1538},[102,98649,652],{"emptyLinePlaceholder":651},[102,98651,98652,98654,98656],{"class":104,"line":2089},[102,98653,59650],{"class":119},[102,98655,58500],{"class":59165},[102,98657,59172],{"class":119},[48,98659,98661],{"id":98660},"_4172-节流","4.17.2 节流",[14,98663,98664],{},[6750,98665],{"alt":98,"src":98666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,98668,98669],{},[6750,98670],{"alt":98,"src":98671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,98673,98674],{},[18,98675,98676],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,98678,98679],{},"实现方式：",[59,98681,98682],{},[62,98683,98684],{},"lodash 提供的节流函数来处理",[14,98686,98687],{},"_.throttle(func,[wait=0],[options=])",[14,98689,98690],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[93,98692,98694],{"className":58498,"code":98693,"language":58500,"meta":98,"style":98},"\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",[83,98695,98696,98706,98720,98724,98732,98746,98766,98778,98786,98792,98802,98814,98826,98836,98848,98858,98868,98880,98884,98892,98900,98904,98912,98930,98948,98956,98974,98984,98992,99002,99006,99010,99014,99019,99024,99045,99053,99061,99065],{"__ignoreMap":98},[102,98697,98698,98700,98702,98704],{"class":104,"line":105},[102,98699,59162],{"class":119},[102,98701,59166],{"class":59165},[102,98703,59169],{"class":112},[102,98705,59172],{"class":119},[102,98707,98708,98710,98712,98714,98716,98718],{"class":104,"line":116},[102,98709,1208],{"class":119},[102,98711,58500],{"class":59165},[102,98713,59181],{"class":112},[102,98715,260],{"class":119},[102,98717,59186],{"class":278},[102,98719,59172],{"class":119},[102,98721,98722],{"class":104,"line":123},[102,98723,652],{"emptyLinePlaceholder":651},[102,98725,98726,98728,98730],{"class":104,"line":130},[102,98727,1208],{"class":119},[102,98729,59199],{"class":59165},[102,98731,59172],{"class":119},[102,98733,98734,98736,98738,98740,98742,98744],{"class":104,"line":136},[102,98735,60009],{"class":119},[102,98737,59209],{"class":59165},[102,98739,59212],{"class":112},[102,98741,260],{"class":119},[102,98743,59217],{"class":278},[102,98745,59172],{"class":119},[102,98747,98748,98750,98752,98754,98756,98758,98760,98762,98764],{"class":104,"line":142},[102,98749,60009],{"class":119},[102,98751,59209],{"class":59165},[102,98753,387],{"class":112},[102,98755,260],{"class":119},[102,98757,59256],{"class":278},[102,98759,59236],{"class":112},[102,98761,260],{"class":119},[102,98763,59263],{"class":278},[102,98765,59172],{"class":119},[102,98767,98768,98770,98772,98774,98776],{"class":104,"line":148},[102,98769,60009],{"class":119},[102,98771,59272],{"class":59165},[102,98773,59275],{"class":119},[102,98775,59272],{"class":59165},[102,98777,59172],{"class":119},[102,98779,98780,98782,98784],{"class":104,"line":157},[102,98781,60009],{"class":119},[102,98783,8955],{"class":59165},[102,98785,59172],{"class":119},[102,98787,98788,98790],{"class":104,"line":163},[102,98789,62617],{"class":112},[102,98791,1077],{"class":119},[102,98793,98794,98796,98798,98800],{"class":104,"line":175},[102,98795,80461],{"class":187},[102,98797,59302],{"class":119},[102,98799,68370],{"class":187},[102,98801,266],{"class":119},[102,98803,98804,98806,98808,98810,98812],{"class":104,"line":181},[102,98805,62636],{"class":187},[102,98807,59302],{"class":119},[102,98809,7866],{"class":187},[102,98811,59357],{"class":108},[102,98813,266],{"class":119},[102,98815,98816,98818,98820,98822,98824],{"class":104,"line":202},[102,98817,62650],{"class":187},[102,98819,59302],{"class":119},[102,98821,7866],{"class":187},[102,98823,59357],{"class":108},[102,98825,266],{"class":119},[102,98827,98828,98830,98832,98834],{"class":104,"line":208},[102,98829,62749],{"class":187},[102,98831,59302],{"class":119},[102,98833,97871],{"class":187},[102,98835,266],{"class":119},[102,98837,98838,98840,98842,98844,98846],{"class":104,"line":214},[102,98839,62787],{"class":187},[102,98841,59302],{"class":119},[102,98843,9847],{"class":187},[102,98845,59357],{"class":108},[102,98847,266],{"class":119},[102,98849,98850,98852,98854,98856],{"class":104,"line":225},[102,98851,65281],{"class":187},[102,98853,59302],{"class":119},[102,98855,68707],{"class":187},[102,98857,266],{"class":119},[102,98859,98860,98862,98864,98866],{"class":104,"line":230},[102,98861,65151],{"class":187},[102,98863,59302],{"class":119},[102,98865,59457],{"class":187},[102,98867,266],{"class":119},[102,98869,98870,98872,98874,98876,98878],{"class":104,"line":236},[102,98871,97910],{"class":187},[102,98873,59302],{"class":119},[102,98875,9354],{"class":187},[102,98877,59357],{"class":108},[102,98879,266],{"class":119},[102,98881,98882],{"class":104,"line":242},[102,98883,205],{"class":119},[102,98885,98886,98888,98890],{"class":104,"line":248},[102,98887,60282],{"class":119},[102,98889,8955],{"class":59165},[102,98891,59172],{"class":119},[102,98893,98894,98896,98898],{"class":104,"line":254},[102,98895,59650],{"class":119},[102,98897,59199],{"class":59165},[102,98899,59172],{"class":119},[102,98901,98902],{"class":104,"line":269},[102,98903,652],{"emptyLinePlaceholder":651},[102,98905,98906,98908,98910],{"class":104,"line":298},[102,98907,1208],{"class":119},[102,98909,59665],{"class":59165},[102,98911,59172],{"class":119},[102,98913,98914,98916,98918,98920,98922,98924,98926,98928],{"class":104,"line":502},[102,98915,60009],{"class":119},[102,98917,59476],{"class":59165},[102,98919,61351],{"class":112},[102,98921,260],{"class":119},[102,98923,61356],{"class":278},[102,98925,63179],{"class":119},[102,98927,59476],{"class":59165},[102,98929,59172],{"class":119},[102,98931,98932,98934,98936,98938,98940,98942,98944,98946],{"class":104,"line":507},[102,98933,60009],{"class":119},[102,98935,59678],{"class":59165},[102,98937,63104],{"class":112},[102,98939,260],{"class":119},[102,98941,96139],{"class":278},[102,98943,63179],{"class":119},[102,98945,59678],{"class":59165},[102,98947,59172],{"class":119},[102,98949,98950,98952,98954],{"class":104,"line":512},[102,98951,60009],{"class":119},[102,98953,59678],{"class":59165},[102,98955,59172],{"class":119},[102,98957,98958,98960,98962,98964,98966,98968,98970,98972],{"class":104,"line":521},[102,98959,19961],{"class":108},[102,98961,94798],{"class":187},[102,98963,22296],{"class":108},[102,98965,62261],{"class":119},[102,98967,62264],{"class":112},[102,98969,380],{"class":119},[102,98971,98011],{"class":278},[102,98973,390],{"class":119},[102,98975,98976,98978,98980,98982],{"class":104,"line":526},[102,98977,60084],{"class":108},[102,98979,18205],{"class":119},[102,98981,260],{"class":108},[102,98983,55198],{"class":187},[102,98985,98986,98988,98990],{"class":104,"line":532},[102,98987,77949],{"class":108},[102,98989,98030],{"class":112},[102,98991,795],{"class":119},[102,98993,98994,98996,98998,99000],{"class":104,"line":538},[102,98995,98037],{"class":119},[102,98997,260],{"class":108},[102,98999,11848],{"class":119},[102,99001,11522],{"class":108},[102,99003,99004],{"class":104,"line":555},[102,99005,98048],{"class":126},[102,99007,99008],{"class":104,"line":570},[102,99009,205],{"class":119},[102,99011,99012],{"class":104,"line":581},[102,99013,98057],{"class":126},[102,99015,99016],{"class":104,"line":819},[102,99017,99018],{"class":126},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[102,99020,99021],{"class":104,"line":828},[102,99022,99023],{"class":126},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[102,99025,99026,99028,99030,99032,99034,99036,99039,99041,99043],{"class":104,"line":837},[102,99027,98072],{"class":119},[102,99029,65678],{"class":112},[102,99031,380],{"class":119},[102,99033,98079],{"class":278},[102,99035,98082],{"class":119},[102,99037,99038],{"class":112},"throttle",[102,99040,98088],{"class":119},[102,99042,72939],{"class":187},[102,99044,38362],{"class":119},[102,99046,99047,99049,99051],{"class":104,"line":842},[102,99048,60282],{"class":119},[102,99050,59678],{"class":59165},[102,99052,59172],{"class":119},[102,99054,99055,99057,99059],{"class":104,"line":855},[102,99056,59650],{"class":119},[102,99058,59665],{"class":59165},[102,99060,59172],{"class":119},[102,99062,99063],{"class":104,"line":860},[102,99064,652],{"emptyLinePlaceholder":651},[102,99066,99067,99069,99071],{"class":104,"line":871},[102,99068,59650],{"class":119},[102,99070,58500],{"class":59165},[102,99072,59172],{"class":119},[59,99074,99075],{},[62,99076,99077],{},"手写一个节流函数来处理",[14,99079,78817],{},[14,99081,98131],{},[14,99083,99084],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,99086,99087],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[93,99089,99091],{"className":58498,"code":99090,"language":58500,"meta":98,"style":98},"\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",[83,99092,99093,99103,99117,99121,99129,99143,99163,99175,99183,99189,99199,99211,99223,99233,99245,99255,99265,99277,99281,99289,99297,99301,99309,99327,99345,99353,99371,99381,99389,99399,99403,99407,99411,99416,99421,99426,99431,99436,99441,99458,99464,99472,99483,99498,99505,99510,99515,99525,99530,99535,99540,99544,99548,99552,99572,99580,99588,99592],{"__ignoreMap":98},[102,99094,99095,99097,99099,99101],{"class":104,"line":105},[102,99096,59162],{"class":119},[102,99098,59166],{"class":59165},[102,99100,59169],{"class":112},[102,99102,59172],{"class":119},[102,99104,99105,99107,99109,99111,99113,99115],{"class":104,"line":116},[102,99106,1208],{"class":119},[102,99108,58500],{"class":59165},[102,99110,59181],{"class":112},[102,99112,260],{"class":119},[102,99114,59186],{"class":278},[102,99116,59172],{"class":119},[102,99118,99119],{"class":104,"line":123},[102,99120,652],{"emptyLinePlaceholder":651},[102,99122,99123,99125,99127],{"class":104,"line":130},[102,99124,1208],{"class":119},[102,99126,59199],{"class":59165},[102,99128,59172],{"class":119},[102,99130,99131,99133,99135,99137,99139,99141],{"class":104,"line":136},[102,99132,60009],{"class":119},[102,99134,59209],{"class":59165},[102,99136,59212],{"class":112},[102,99138,260],{"class":119},[102,99140,59217],{"class":278},[102,99142,59172],{"class":119},[102,99144,99145,99147,99149,99151,99153,99155,99157,99159,99161],{"class":104,"line":142},[102,99146,60009],{"class":119},[102,99148,59209],{"class":59165},[102,99150,387],{"class":112},[102,99152,260],{"class":119},[102,99154,59256],{"class":278},[102,99156,59236],{"class":112},[102,99158,260],{"class":119},[102,99160,59263],{"class":278},[102,99162,59172],{"class":119},[102,99164,99165,99167,99169,99171,99173],{"class":104,"line":148},[102,99166,60009],{"class":119},[102,99168,59272],{"class":59165},[102,99170,59275],{"class":119},[102,99172,59272],{"class":59165},[102,99174,59172],{"class":119},[102,99176,99177,99179,99181],{"class":104,"line":157},[102,99178,60009],{"class":119},[102,99180,8955],{"class":59165},[102,99182,59172],{"class":119},[102,99184,99185,99187],{"class":104,"line":163},[102,99186,62617],{"class":112},[102,99188,1077],{"class":119},[102,99190,99191,99193,99195,99197],{"class":104,"line":175},[102,99192,80461],{"class":187},[102,99194,59302],{"class":119},[102,99196,68370],{"class":187},[102,99198,266],{"class":119},[102,99200,99201,99203,99205,99207,99209],{"class":104,"line":181},[102,99202,62636],{"class":187},[102,99204,59302],{"class":119},[102,99206,7866],{"class":187},[102,99208,59357],{"class":108},[102,99210,266],{"class":119},[102,99212,99213,99215,99217,99219,99221],{"class":104,"line":202},[102,99214,62650],{"class":187},[102,99216,59302],{"class":119},[102,99218,7866],{"class":187},[102,99220,59357],{"class":108},[102,99222,266],{"class":119},[102,99224,99225,99227,99229,99231],{"class":104,"line":208},[102,99226,62749],{"class":187},[102,99228,59302],{"class":119},[102,99230,97871],{"class":187},[102,99232,266],{"class":119},[102,99234,99235,99237,99239,99241,99243],{"class":104,"line":214},[102,99236,62787],{"class":187},[102,99238,59302],{"class":119},[102,99240,9847],{"class":187},[102,99242,59357],{"class":108},[102,99244,266],{"class":119},[102,99246,99247,99249,99251,99253],{"class":104,"line":225},[102,99248,65281],{"class":187},[102,99250,59302],{"class":119},[102,99252,68707],{"class":187},[102,99254,266],{"class":119},[102,99256,99257,99259,99261,99263],{"class":104,"line":230},[102,99258,65151],{"class":187},[102,99260,59302],{"class":119},[102,99262,59457],{"class":187},[102,99264,266],{"class":119},[102,99266,99267,99269,99271,99273,99275],{"class":104,"line":236},[102,99268,97910],{"class":187},[102,99270,59302],{"class":119},[102,99272,9354],{"class":187},[102,99274,59357],{"class":108},[102,99276,266],{"class":119},[102,99278,99279],{"class":104,"line":242},[102,99280,205],{"class":119},[102,99282,99283,99285,99287],{"class":104,"line":248},[102,99284,60282],{"class":119},[102,99286,8955],{"class":59165},[102,99288,59172],{"class":119},[102,99290,99291,99293,99295],{"class":104,"line":254},[102,99292,59650],{"class":119},[102,99294,59199],{"class":59165},[102,99296,59172],{"class":119},[102,99298,99299],{"class":104,"line":269},[102,99300,652],{"emptyLinePlaceholder":651},[102,99302,99303,99305,99307],{"class":104,"line":298},[102,99304,1208],{"class":119},[102,99306,59665],{"class":59165},[102,99308,59172],{"class":119},[102,99310,99311,99313,99315,99317,99319,99321,99323,99325],{"class":104,"line":502},[102,99312,60009],{"class":119},[102,99314,59476],{"class":59165},[102,99316,61351],{"class":112},[102,99318,260],{"class":119},[102,99320,61356],{"class":278},[102,99322,63179],{"class":119},[102,99324,59476],{"class":59165},[102,99326,59172],{"class":119},[102,99328,99329,99331,99333,99335,99337,99339,99341,99343],{"class":104,"line":507},[102,99330,60009],{"class":119},[102,99332,59678],{"class":59165},[102,99334,63104],{"class":112},[102,99336,260],{"class":119},[102,99338,96139],{"class":278},[102,99340,63179],{"class":119},[102,99342,59678],{"class":59165},[102,99344,59172],{"class":119},[102,99346,99347,99349,99351],{"class":104,"line":512},[102,99348,60009],{"class":119},[102,99350,59678],{"class":59165},[102,99352,59172],{"class":119},[102,99354,99355,99357,99359,99361,99363,99365,99367,99369],{"class":104,"line":521},[102,99356,19961],{"class":108},[102,99358,94798],{"class":187},[102,99360,22296],{"class":108},[102,99362,62261],{"class":119},[102,99364,62264],{"class":112},[102,99366,380],{"class":119},[102,99368,98011],{"class":278},[102,99370,390],{"class":119},[102,99372,99373,99375,99377,99379],{"class":104,"line":526},[102,99374,60084],{"class":108},[102,99376,18205],{"class":119},[102,99378,260],{"class":108},[102,99380,55198],{"class":187},[102,99382,99383,99385,99387],{"class":104,"line":532},[102,99384,77949],{"class":108},[102,99386,98030],{"class":112},[102,99388,795],{"class":119},[102,99390,99391,99393,99395,99397],{"class":104,"line":538},[102,99392,98037],{"class":119},[102,99394,260],{"class":108},[102,99396,11848],{"class":119},[102,99398,11522],{"class":108},[102,99400,99401],{"class":104,"line":555},[102,99402,98048],{"class":126},[102,99404,99405],{"class":104,"line":570},[102,99406,205],{"class":119},[102,99408,99409],{"class":104,"line":581},[102,99410,98057],{"class":126},[102,99412,99413],{"class":104,"line":819},[102,99414,99415],{"class":126},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[102,99417,99418],{"class":104,"line":828},[102,99419,99420],{"class":126},"    \u002F\u002F 1.声明一个定时器变量\n",[102,99422,99423],{"class":104,"line":837},[102,99424,99425],{"class":126},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[102,99427,99428],{"class":104,"line":842},[102,99429,99430],{"class":126},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[102,99432,99433],{"class":104,"line":855},[102,99434,99435],{"class":126},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[102,99437,99438],{"class":104,"line":860},[102,99439,99440],{"class":126},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[102,99442,99443,99445,99448,99450,99452,99454,99456],{"class":104,"line":871},[102,99444,77949],{"class":108},[102,99446,99447],{"class":112}," throttle",[102,99449,380],{"class":119},[102,99451,98502],{"class":386},[102,99453,2571],{"class":119},[102,99455,9744],{"class":386},[102,99457,1105],{"class":119},[102,99459,99460,99462],{"class":104,"line":1359},[102,99461,87637],{"class":108},[102,99463,98515],{"class":119},[102,99465,99466,99468,99470],{"class":104,"line":1368},[102,99467,81847],{"class":108},[102,99469,66783],{"class":108},[102,99471,62317],{"class":119},[102,99473,99474,99476,99478,99480],{"class":104,"line":1373},[102,99475,1202],{"class":108},[102,99477,2432],{"class":119},[102,99479,9263],{"class":108},[102,99481,99482],{"class":119},"timer) {\n",[102,99484,99485,99488,99490,99492,99494,99496],{"class":104,"line":1378},[102,99486,99487],{"class":119},"          timer ",[102,99489,260],{"class":108},[102,99491,98556],{"class":112},[102,99493,380],{"class":119},[102,99495,62314],{"class":108},[102,99497,62317],{"class":119},[102,99499,99500,99503],{"class":104,"line":1384},[102,99501,99502],{"class":112},"            fn",[102,99504,172],{"class":119},[102,99506,99507],{"class":104,"line":1398},[102,99508,99509],{"class":126},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[102,99511,99512],{"class":104,"line":1424},[102,99513,99514],{"class":126},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[102,99516,99517,99520,99522],{"class":104,"line":1429},[102,99518,99519],{"class":119},"            timer ",[102,99521,260],{"class":108},[102,99523,99524],{"class":187}," null\n",[102,99526,99527],{"class":104,"line":1435},[102,99528,99529],{"class":126},"            \u002F\u002F 不能用clearTimeout(timer)\n",[102,99531,99532],{"class":104,"line":1450},[102,99533,99534],{"class":126},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[102,99536,99537],{"class":104,"line":1473},[102,99538,99539],{"class":119},"          }, t)\n",[102,99541,99542],{"class":104,"line":1478},[102,99543,1252],{"class":119},[102,99545,99546],{"class":104,"line":1484},[102,99547,60263],{"class":119},[102,99549,99550],{"class":104,"line":1499},[102,99551,205],{"class":119},[102,99553,99554,99556,99558,99560,99562,99564,99566,99568,99570],{"class":104,"line":1508},[102,99555,98072],{"class":119},[102,99557,65678],{"class":112},[102,99559,380],{"class":119},[102,99561,98079],{"class":278},[102,99563,2571],{"class":119},[102,99565,99038],{"class":112},[102,99567,98088],{"class":119},[102,99569,72939],{"class":187},[102,99571,38362],{"class":119},[102,99573,99574,99576,99578],{"class":104,"line":1513},[102,99575,60282],{"class":119},[102,99577,59678],{"class":59165},[102,99579,59172],{"class":119},[102,99581,99582,99584,99586],{"class":104,"line":1524},[102,99583,59650],{"class":119},[102,99585,59665],{"class":59165},[102,99587,59172],{"class":119},[102,99589,99590],{"class":104,"line":1529},[102,99591,652],{"emptyLinePlaceholder":651},[102,99593,99594,99596,99598],{"class":104,"line":1538},[102,99595,59650],{"class":119},[102,99597,58500],{"class":59165},[102,99599,59172],{"class":119},[48,99601,99603],{"id":99602},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[93,99605,99607],{"className":60932,"code":99606,"language":60934,"meta":98,"style":98},"\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",[83,99608,99609,99617,99625,99630,99635,99640,99645,99649,99657],{"__ignoreMap":98},[102,99610,99611,99613,99615],{"class":104,"line":105},[102,99612,1208],{"class":119},[102,99614,59665],{"class":59165},[102,99616,59172],{"class":119},[102,99618,99619,99621,99623],{"class":104,"line":116},[102,99620,60009],{"class":119},[102,99622,59678],{"class":59165},[102,99624,59172],{"class":119},[102,99626,99627],{"class":104,"line":123},[102,99628,99629],{"class":119},"    let timer = null\n",[102,99631,99632],{"class":104,"line":130},[102,99633,99634],{"class":119},"    timer = setTimeout(() => {\n",[102,99636,99637],{"class":104,"line":136},[102,99638,99639],{"class":119},"      clearTimeout(timer)\n",[102,99641,99642],{"class":104,"line":142},[102,99643,99644],{"class":119},"      console.log(timer)\n",[102,99646,99647],{"class":104,"line":148},[102,99648,68090],{"class":119},[102,99650,99651,99653,99655],{"class":104,"line":157},[102,99652,60282],{"class":119},[102,99654,59678],{"class":59165},[102,99656,59172],{"class":119},[102,99658,99659,99661,99663],{"class":104,"line":163},[102,99660,59650],{"class":119},[102,99662,59665],{"class":59165},[102,99664,59172],{"class":119},[14,99666,99667],{},"输出为1",[14,99669,99670],{},"在开启的定时器里边写清除定时器",[14,99672,99673],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[48,99675,99677],{"id":99676},"_4174-节流综合案例","4.17.4 节流综合案例",[14,99679,99680],{},"页面打开，可以记录上一次的视频播放位置",[14,99682,99683],{},[6750,99684],{"alt":98,"src":99685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,99687,99688],{},[6750,99689],{"alt":98,"src":99690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[93,99692,99694],{"className":58498,"code":99693,"language":58500,"meta":98,"style":98},"\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",[83,99695,99696,99706,99720,99724,99732,99746,99766,99786,99808,99821,99829,99835,99845,99855,99865,99869,99873,99880,99893,99905,99909,99913,99923,99935,99949,99953,99957,99964,99974,99987,99999,100009,100019,100035,100047,100051,100055,100063,100073,100085,100095,100105,100115,100119,100123,100133,100144,100148,100156,100164,100168,100176,100191,100206,100221,100242,100250,100258,100273,100295,100303,100318,100344,100370,100396,100404,100412,100431,100439,100444,100463,100468,100486,100491,100496,100504,100509,100523,100531,100536,100553,100557,100562,100584,100588,100596,100604,100608],{"__ignoreMap":98},[102,99697,99698,99700,99702,99704],{"class":104,"line":105},[102,99699,59162],{"class":119},[102,99701,59166],{"class":59165},[102,99703,59169],{"class":112},[102,99705,59172],{"class":119},[102,99707,99708,99710,99712,99714,99716,99718],{"class":104,"line":116},[102,99709,1208],{"class":119},[102,99711,58500],{"class":59165},[102,99713,59181],{"class":112},[102,99715,260],{"class":119},[102,99717,59186],{"class":278},[102,99719,59172],{"class":119},[102,99721,99722],{"class":104,"line":123},[102,99723,652],{"emptyLinePlaceholder":651},[102,99725,99726,99728,99730],{"class":104,"line":130},[102,99727,1208],{"class":119},[102,99729,59199],{"class":59165},[102,99731,59172],{"class":119},[102,99733,99734,99736,99738,99740,99742,99744],{"class":104,"line":136},[102,99735,60009],{"class":119},[102,99737,59209],{"class":59165},[102,99739,59212],{"class":112},[102,99741,260],{"class":119},[102,99743,59217],{"class":278},[102,99745,66992],{"class":119},[102,99747,99748,99750,99752,99754,99756,99758,99760,99762,99764],{"class":104,"line":142},[102,99749,60009],{"class":119},[102,99751,59209],{"class":59165},[102,99753,59228],{"class":112},[102,99755,260],{"class":119},[102,99757,59233],{"class":278},[102,99759,59236],{"class":112},[102,99761,260],{"class":119},[102,99763,59241],{"class":278},[102,99765,66992],{"class":119},[102,99767,99768,99770,99772,99774,99776,99778,99780,99782,99784],{"class":104,"line":148},[102,99769,60009],{"class":119},[102,99771,59209],{"class":59165},[102,99773,387],{"class":112},[102,99775,260],{"class":119},[102,99777,59256],{"class":278},[102,99779,59236],{"class":112},[102,99781,260],{"class":119},[102,99783,59263],{"class":278},[102,99785,66992],{"class":119},[102,99787,99788,99790,99792,99794,99796,99799,99801,99803,99806],{"class":104,"line":157},[102,99789,60009],{"class":119},[102,99791,59209],{"class":59165},[102,99793,387],{"class":112},[102,99795,260],{"class":119},[102,99797,99798],{"class":278},"\"referrer\"",[102,99800,59236],{"class":112},[102,99802,260],{"class":119},[102,99804,99805],{"class":278},"\"never\"",[102,99807,66992],{"class":119},[102,99809,99810,99812,99814,99817,99819],{"class":104,"line":163},[102,99811,60009],{"class":119},[102,99813,59272],{"class":59165},[102,99815,99816],{"class":119},">综合案例\u003C\u002F",[102,99818,59272],{"class":59165},[102,99820,59172],{"class":119},[102,99822,99823,99825,99827],{"class":104,"line":175},[102,99824,60009],{"class":119},[102,99826,8955],{"class":59165},[102,99828,59172],{"class":119},[102,99830,99831,99833],{"class":104,"line":181},[102,99832,15198],{"class":59165},[102,99834,1077],{"class":119},[102,99836,99837,99839,99841,99843],{"class":104,"line":202},[102,99838,62560],{"class":187},[102,99840,59302],{"class":119},[102,99842,8423],{"class":187},[102,99844,266],{"class":119},[102,99846,99847,99849,99851,99853],{"class":104,"line":208},[102,99848,62571],{"class":187},[102,99850,59302],{"class":119},[102,99852,8423],{"class":187},[102,99854,266],{"class":119},[102,99856,99857,99859,99861,99863],{"class":104,"line":214},[102,99858,80461],{"class":187},[102,99860,59302],{"class":119},[102,99862,68370],{"class":187},[102,99864,266],{"class":119},[102,99866,99867],{"class":104,"line":225},[102,99868,205],{"class":119},[102,99870,99871],{"class":104,"line":230},[102,99872,652],{"emptyLinePlaceholder":651},[102,99874,99875,99878],{"class":104,"line":236},[102,99876,99877],{"class":112},"    .container",[102,99879,1077],{"class":119},[102,99881,99882,99884,99886,99889,99891],{"class":104,"line":242},[102,99883,62636],{"class":187},[102,99885,59302],{"class":119},[102,99887,99888],{"class":187},"1200",[102,99890,59357],{"class":108},[102,99892,266],{"class":119},[102,99894,99895,99897,99899,99901,99903],{"class":104,"line":248},[102,99896,62571],{"class":187},[102,99898,59302],{"class":119},[102,99900,8423],{"class":187},[102,99902,59421],{"class":187},[102,99904,266],{"class":119},[102,99906,99907],{"class":104,"line":254},[102,99908,205],{"class":119},[102,99910,99911],{"class":104,"line":269},[102,99912,652],{"emptyLinePlaceholder":651},[102,99914,99915,99918,99921],{"class":104,"line":298},[102,99916,99917],{"class":112},"    .video",[102,99919,99920],{"class":59165}," video",[102,99922,1077],{"class":119},[102,99924,99925,99927,99929,99931,99933],{"class":104,"line":502},[102,99926,62636],{"class":187},[102,99928,59302],{"class":119},[102,99930,5569],{"class":187},[102,99932,9363],{"class":108},[102,99934,266],{"class":119},[102,99936,99937,99939,99941,99943,99945,99947],{"class":104,"line":507},[102,99938,62560],{"class":187},[102,99940,59302],{"class":119},[102,99942,5016],{"class":187},[102,99944,59357],{"class":108},[102,99946,866],{"class":187},[102,99948,266],{"class":119},[102,99950,99951],{"class":104,"line":512},[102,99952,205],{"class":119},[102,99954,99955],{"class":104,"line":521},[102,99956,652],{"emptyLinePlaceholder":651},[102,99958,99959,99962],{"class":104,"line":526},[102,99960,99961],{"class":112},"    .elevator",[102,99963,1077],{"class":119},[102,99965,99966,99968,99970,99972],{"class":104,"line":532},[102,99967,62624],{"class":187},[102,99969,59302],{"class":119},[102,99971,94098],{"class":187},[102,99973,266],{"class":119},[102,99975,99976,99978,99980,99983,99985],{"class":104,"line":538},[102,99977,62812],{"class":187},[102,99979,59302],{"class":119},[102,99981,99982],{"class":187},"280",[102,99984,59357],{"class":108},[102,99986,266],{"class":119},[102,99988,99989,99991,99993,99995,99997],{"class":104,"line":555},[102,99990,94292],{"class":187},[102,99992,59302],{"class":119},[102,99994,5016],{"class":187},[102,99996,59357],{"class":108},[102,99998,266],{"class":119},[102,100000,100001,100003,100005,100007],{"class":104,"line":570},[102,100002,94105],{"class":187},[102,100004,59302],{"class":119},[102,100006,94110],{"class":187},[102,100008,266],{"class":119},[102,100010,100011,100013,100015,100017],{"class":104,"line":581},[102,100012,69586],{"class":187},[102,100014,59302],{"class":119},[102,100016,68707],{"class":187},[102,100018,266],{"class":119},[102,100020,100021,100023,100025,100027,100029,100031,100033],{"class":104,"line":819},[102,100022,69842],{"class":187},[102,100024,59302],{"class":119},[102,100026,7039],{"class":187},[102,100028,59357],{"class":108},[102,100030,59386],{"class":187},[102,100032,70109],{"class":187},[102,100034,266],{"class":119},[102,100036,100037,100039,100041,100043,100045],{"class":104,"line":828},[102,100038,62636],{"class":187},[102,100040,59302],{"class":119},[102,100042,9929],{"class":187},[102,100044,59357],{"class":108},[102,100046,266],{"class":119},[102,100048,100049],{"class":104,"line":837},[102,100050,205],{"class":119},[102,100052,100053],{"class":104,"line":842},[102,100054,652],{"emptyLinePlaceholder":651},[102,100056,100057,100059,100061],{"class":104,"line":855},[102,100058,99961],{"class":112},[102,100060,4378],{"class":59165},[102,100062,1077],{"class":119},[102,100064,100065,100067,100069,100071],{"class":104,"line":860},[102,100066,62874],{"class":187},[102,100068,59302],{"class":119},[102,100070,68734],{"class":187},[102,100072,266],{"class":119},[102,100074,100075,100077,100079,100081,100083],{"class":104,"line":871},[102,100076,62560],{"class":187},[102,100078,59302],{"class":119},[102,100080,263],{"class":187},[102,100082,59357],{"class":108},[102,100084,266],{"class":119},[102,100086,100087,100089,100091,100093],{"class":104,"line":1359},[102,100088,71835],{"class":187},[102,100090,59302],{"class":119},[102,100092,62602],{"class":187},[102,100094,266],{"class":119},[102,100096,100097,100099,100101,100103],{"class":104,"line":1368},[102,100098,65151],{"class":187},[102,100100,59302],{"class":119},[102,100102,59457],{"class":187},[102,100104,266],{"class":119},[102,100106,100107,100109,100111,100113],{"class":104,"line":1373},[102,100108,65281],{"class":187},[102,100110,59302],{"class":119},[102,100112,69935],{"class":187},[102,100114,266],{"class":119},[102,100116,100117],{"class":104,"line":1378},[102,100118,205],{"class":119},[102,100120,100121],{"class":104,"line":1384},[102,100122,652],{"emptyLinePlaceholder":651},[102,100124,100125,100127,100129,100131],{"class":104,"line":1398},[102,100126,99961],{"class":112},[102,100128,4378],{"class":59165},[102,100130,71889],{"class":112},[102,100132,1077],{"class":119},[102,100134,100135,100137,100139,100142],{"class":104,"line":1424},[102,100136,65281],{"class":187},[102,100138,59302],{"class":119},[102,100140,100141],{"class":187},"#1286ff",[102,100143,266],{"class":119},[102,100145,100146],{"class":104,"line":1429},[102,100147,205],{"class":119},[102,100149,100150,100152,100154],{"class":104,"line":1435},[102,100151,60282],{"class":119},[102,100153,8955],{"class":59165},[102,100155,59172],{"class":119},[102,100157,100158,100160,100162],{"class":104,"line":1450},[102,100159,59650],{"class":119},[102,100161,59199],{"class":59165},[102,100163,59172],{"class":119},[102,100165,100166],{"class":104,"line":1473},[102,100167,652],{"emptyLinePlaceholder":651},[102,100169,100170,100172,100174],{"class":104,"line":1478},[102,100171,1208],{"class":119},[102,100173,59665],{"class":59165},[102,100175,59172],{"class":119},[102,100177,100178,100180,100182,100184,100186,100189],{"class":104,"line":1484},[102,100179,60009],{"class":119},[102,100181,59476],{"class":59165},[102,100183,61351],{"class":112},[102,100185,260],{"class":119},[102,100187,100188],{"class":278},"\"container\"",[102,100190,59172],{"class":119},[102,100192,100193,100195,100197,100199,100201,100204],{"class":104,"line":1499},[102,100194,59206],{"class":119},[102,100196,59476],{"class":59165},[102,100198,61351],{"class":112},[102,100200,260],{"class":119},[102,100202,100203],{"class":278},"\"header\"",[102,100205,59172],{"class":119},[102,100207,100208,100210,100212,100214,100216,100219],{"class":104,"line":1508},[102,100209,63099],{"class":119},[102,100211,9275],{"class":59165},[102,100213,68922],{"class":112},[102,100215,260],{"class":119},[102,100217,100218],{"class":278},"\"http:\u002F\u002Fpip.itcast.cn\"",[102,100220,59172],{"class":119},[102,100222,100223,100225,100227,100229,100231,100234,100236,100238,100240],{"class":104,"line":1513},[102,100224,63167],{"class":119},[102,100226,6750],{"class":59165},[102,100228,63104],{"class":112},[102,100230,260],{"class":119},[102,100232,100233],{"class":278},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[102,100235,63112],{"class":112},[102,100237,260],{"class":119},[102,100239,16439],{"class":278},[102,100241,66992],{"class":119},[102,100243,100244,100246,100248],{"class":104,"line":1524},[102,100245,63272],{"class":119},[102,100247,9275],{"class":59165},[102,100249,59172],{"class":119},[102,100251,100252,100254,100256],{"class":104,"line":1529},[102,100253,59641],{"class":119},[102,100255,59476],{"class":59165},[102,100257,59172],{"class":119},[102,100259,100260,100262,100264,100266,100268,100271],{"class":104,"line":1538},[102,100261,59206],{"class":119},[102,100263,59476],{"class":59165},[102,100265,61351],{"class":112},[102,100267,260],{"class":119},[102,100269,100270],{"class":278},"\"video\"",[102,100272,59172],{"class":119},[102,100274,100275,100277,100279,100281,100283,100286,100289,100291,100293],{"class":104,"line":2089},[102,100276,63099],{"class":119},[102,100278,36048],{"class":59165},[102,100280,63104],{"class":112},[102,100282,260],{"class":119},[102,100284,100285],{"class":278},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[102,100287,100288],{"class":112}," controls",[102,100290,63179],{"class":119},[102,100292,36048],{"class":59165},[102,100294,59172],{"class":119},[102,100296,100297,100299,100301],{"class":104,"line":2094},[102,100298,59641],{"class":119},[102,100300,59476],{"class":59165},[102,100302,59172],{"class":119},[102,100304,100305,100307,100309,100311,100313,100316],{"class":104,"line":2100},[102,100306,59206],{"class":119},[102,100308,59476],{"class":59165},[102,100310,61351],{"class":112},[102,100312,260],{"class":119},[102,100314,100315],{"class":278},"\"elevator\"",[102,100317,59172],{"class":119},[102,100319,100320,100322,100324,100326,100328,100330,100333,100335,100337,100340,100342],{"class":104,"line":2106},[102,100321,63099],{"class":119},[102,100323,9275],{"class":59165},[102,100325,68922],{"class":112},[102,100327,260],{"class":119},[102,100329,72101],{"class":278},[102,100331,100332],{"class":112}," data-ref",[102,100334,260],{"class":119},[102,100336,100270],{"class":278},[102,100338,100339],{"class":119},">视频介绍\u003C\u002F",[102,100341,9275],{"class":59165},[102,100343,59172],{"class":119},[102,100345,100346,100348,100350,100352,100354,100356,100358,100360,100363,100366,100368],{"class":104,"line":2120},[102,100347,63099],{"class":119},[102,100349,9275],{"class":59165},[102,100351,68922],{"class":112},[102,100353,260],{"class":119},[102,100355,72101],{"class":278},[102,100357,100332],{"class":112},[102,100359,260],{"class":119},[102,100361,100362],{"class":278},"\"intro\"",[102,100364,100365],{"class":119},">课程简介\u003C\u002F",[102,100367,9275],{"class":59165},[102,100369,59172],{"class":119},[102,100371,100372,100374,100376,100378,100380,100382,100384,100386,100389,100392,100394],{"class":104,"line":2128},[102,100373,63099],{"class":119},[102,100375,9275],{"class":59165},[102,100377,68922],{"class":112},[102,100379,260],{"class":119},[102,100381,72101],{"class":278},[102,100383,100332],{"class":112},[102,100385,260],{"class":119},[102,100387,100388],{"class":278},"\"outline\"",[102,100390,100391],{"class":119},">评论列表\u003C\u002F",[102,100393,9275],{"class":59165},[102,100395,59172],{"class":119},[102,100397,100398,100400,100402],{"class":104,"line":2149},[102,100399,59641],{"class":119},[102,100401,59476],{"class":59165},[102,100403,59172],{"class":119},[102,100405,100406,100408,100410],{"class":104,"line":2161},[102,100407,60282],{"class":119},[102,100409,59476],{"class":59165},[102,100411,59172],{"class":119},[102,100413,100414,100416,100418,100420,100422,100425,100427,100429],{"class":104,"line":2167},[102,100415,60009],{"class":119},[102,100417,59678],{"class":59165},[102,100419,63104],{"class":112},[102,100421,260],{"class":119},[102,100423,100424],{"class":278},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[102,100426,63179],{"class":119},[102,100428,59678],{"class":59165},[102,100430,59172],{"class":119},[102,100432,100433,100435,100437],{"class":104,"line":2190},[102,100434,60009],{"class":119},[102,100436,59678],{"class":59165},[102,100438,59172],{"class":119},[102,100440,100441],{"class":104,"line":2196},[102,100442,100443],{"class":126},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[102,100445,100446,100448,100450,100452,100454,100456,100458,100461],{"class":104,"line":2219},[102,100447,19961],{"class":108},[102,100449,99920],{"class":187},[102,100451,22296],{"class":108},[102,100453,62261],{"class":119},[102,100455,62264],{"class":112},[102,100457,380],{"class":119},[102,100459,100460],{"class":278},"'video'",[102,100462,390],{"class":119},[102,100464,100465],{"class":104,"line":2233},[102,100466,100467],{"class":126},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[102,100469,100470,100473,100475,100477,100479,100482,100484],{"class":104,"line":2253},[102,100471,100472],{"class":119},"    video.ontimeupdate ",[102,100474,260],{"class":108},[102,100476,96220],{"class":119},[102,100478,99038],{"class":112},[102,100480,100481],{"class":119},"(() ",[102,100483,92587],{"class":108},[102,100485,1077],{"class":119},[102,100487,100488],{"class":104,"line":2259},[102,100489,100490],{"class":126},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[102,100492,100493],{"class":104,"line":2270},[102,100494,100495],{"class":126},"      \u002F\u002F 控制台输出当前的时间\n",[102,100497,100498,100501],{"class":104,"line":2293},[102,100499,100500],{"class":126},"      \u002F\u002F console.log(video.currentTime)",[102,100502,100503],{"class":126},"  \u002F\u002F获得当前的视频时间\n",[102,100505,100506],{"class":104,"line":2315},[102,100507,100508],{"class":126},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[102,100510,100511,100513,100515,100517,100520],{"class":104,"line":2320},[102,100512,82548],{"class":119},[102,100514,79519],{"class":112},[102,100516,380],{"class":119},[102,100518,100519],{"class":278},"'currentTime'",[102,100521,100522],{"class":119},", video.currentTime)\n",[102,100524,100525,100527,100529],{"class":104,"line":2326},[102,100526,62400],{"class":119},[102,100528,15205],{"class":187},[102,100530,390],{"class":119},[102,100532,100533],{"class":104,"line":2340},[102,100534,100535],{"class":126},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[102,100537,100538,100541,100544,100546,100549,100551],{"class":104,"line":2354},[102,100539,100540],{"class":119},"    video.",[102,100542,100543],{"class":112},"onloadeddata",[102,100545,22296],{"class":108},[102,100547,100548],{"class":119}," () ",[102,100550,92587],{"class":108},[102,100552,1077],{"class":119},[102,100554,100555],{"class":104,"line":2359},[102,100556,67877],{"class":126},[102,100558,100559],{"class":104,"line":2373},[102,100560,100561],{"class":126},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[102,100563,100564,100567,100569,100572,100574,100576,100578,100580,100582],{"class":104,"line":2378},[102,100565,100566],{"class":119},"      video.currentTime ",[102,100568,260],{"class":108},[102,100570,100571],{"class":119}," localStorage.",[102,100573,79550],{"class":112},[102,100575,380],{"class":119},[102,100577,100519],{"class":278},[102,100579,22445],{"class":119},[102,100581,79222],{"class":108},[102,100583,55198],{"class":187},[102,100585,100586],{"class":104,"line":2384},[102,100587,205],{"class":119},[102,100589,100590,100592,100594],{"class":104,"line":2389},[102,100591,60282],{"class":119},[102,100593,59678],{"class":59165},[102,100595,59172],{"class":119},[102,100597,100598,100600,100602],{"class":104,"line":2403},[102,100599,59650],{"class":119},[102,100601,59665],{"class":59165},[102,100603,59172],{"class":119},[102,100605,100606],{"class":104,"line":2408},[102,100607,652],{"emptyLinePlaceholder":651},[102,100609,100610,100612,100614],{"class":104,"line":2413},[102,100611,59650],{"class":119},[102,100613,58500],{"class":59165},[102,100615,59172],{"class":119},[8955,100617,100618],{},"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":98,"searchDepth":116,"depth":116,"links":100620},[100621,100626,100630,100631,100632,100637,100642,100643,100644,100645,100652,100657,100658,100668,100672,100673,100677],{"id":84556,"depth":116,"text":84557,"children":100622},[100623,100624,100625],{"id":84560,"depth":123,"text":84561},{"id":84585,"depth":123,"text":84586},{"id":84597,"depth":123,"text":84598},{"id":84609,"depth":116,"text":84610,"children":100627},[100628,100629],{"id":84613,"depth":123,"text":84614},{"id":84628,"depth":123,"text":84629},{"id":84680,"depth":116,"text":84681},{"id":84724,"depth":116,"text":84725},{"id":84741,"depth":116,"text":84742,"children":100633},[100634,100635,100636],{"id":84745,"depth":123,"text":84746},{"id":84758,"depth":123,"text":84759},{"id":84863,"depth":123,"text":84864},{"id":85152,"depth":116,"text":85153,"children":100638},[100639,100640,100641],{"id":85156,"depth":123,"text":85157},{"id":85599,"depth":123,"text":85600},{"id":86010,"depth":123,"text":86011},{"id":86073,"depth":116,"text":86074},{"id":86152,"depth":116,"text":86153},{"id":86245,"depth":116,"text":86246},{"id":88090,"depth":116,"text":88091,"children":100646},[100647,100648,100649,100650,100651],{"id":88094,"depth":123,"text":88095},{"id":88106,"depth":123,"text":88107},{"id":88325,"depth":123,"text":88326},{"id":88343,"depth":123,"text":88344},{"id":88403,"depth":123,"text":88404},{"id":92671,"depth":116,"text":92672,"children":100653},[100654,100655,100656],{"id":92675,"depth":123,"text":92676},{"id":92693,"depth":123,"text":92694},{"id":92719,"depth":123,"text":92720},{"id":92728,"depth":116,"text":92729},{"id":92750,"depth":116,"text":92751,"children":100659},[100660,100661,100662,100663,100664,100665,100666,100667],{"id":92754,"depth":123,"text":92755},{"id":93015,"depth":123,"text":93016},{"id":93201,"depth":123,"text":93202},{"id":93568,"depth":123,"text":93569},{"id":93684,"depth":123,"text":93685},{"id":93720,"depth":123,"text":93721},{"id":93767,"depth":123,"text":93768},{"id":93801,"depth":123,"text":93802},{"id":95164,"depth":116,"text":95165,"children":100669},[100670,100671],{"id":95168,"depth":123,"text":95169},{"id":95205,"depth":123,"text":95206},{"id":96560,"depth":116,"text":96561},{"id":96931,"depth":116,"text":96932,"children":100674},[100675,100676],{"id":96935,"depth":123,"text":96936},{"id":96969,"depth":123,"text":96970},{"id":97698,"depth":116,"text":97699,"children":100678},[100679,100680,100681,100682],{"id":97702,"depth":123,"text":97703},{"id":98660,"depth":123,"text":98661},{"id":99602,"depth":123,"text":99603},{"id":99676,"depth":123,"text":99677},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":84545,"description":31240},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":100689,"title":100690,"body":100691,"description":100702,"extension":8978,"meta":100703,"navigation":651,"path":100705,"seo":100706,"stem":100707,"__hash__":100708},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":100692,"toc":100700},[100693],[14,100694,100695,100696],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[9275,100697,100698],{"href":100698,"rel":100699},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[31729],{"title":98,"searchDepth":116,"depth":116,"links":100701},[],"三件套第三套学习",{"category":100704},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":100690,"description":100702},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":100710,"title":100711,"body":100712,"description":31240,"extension":8978,"meta":100817,"navigation":651,"path":100818,"seo":100819,"stem":100820,"__hash__":100821},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":100713,"toc":100812},[100714,100721,100724,100727,100730,100734,100743,100746,100749,100753,100762,100765,100769,100772,100792,100795,100809],[14,100715,100716],{},[9275,100717,100720],{"href":100718,"rel":100719},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[31729],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,100722,100711],{"id":100723},"_1安装",[14,100725,100726],{},"numpy是科学计算基础库,底层是C语言",[14,100728,100729],{},"三种方式：",[43,100731,100733],{"id":100732},"_11-通过pip安装","1.1 通过pip安装",[93,100735,100737],{"className":38243,"code":100736,"language":38245,"meta":98,"style":98},"pip install numpy\n",[83,100738,100739],{"__ignoreMap":98},[102,100740,100741],{"class":104,"line":105},[102,100742,100736],{"class":119},[14,100744,100745],{},"首选方式，自动处理依赖项",[14,100747,100748],{},"在提示系统命令符中使用cmd",[43,100750,100752],{"id":100751},"_12-通过anaconda安装","1.2 通过Anaconda安装",[93,100754,100756],{"className":38243,"code":100755,"language":38245,"meta":98,"style":98},"conda install numpy\n",[83,100757,100758],{"__ignoreMap":98},[102,100759,100760],{"class":104,"line":105},[102,100761,100755],{"class":119},[14,100763,100764],{},"自动解决环境依赖",[43,100766,100768],{"id":100767},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,100770,100771],{},"对于Debian\u002FUbuntu",[93,100773,100775],{"className":38243,"code":100774,"language":38245,"meta":98,"style":98},"sudo apt-get install python3-numpy\n",[83,100776,100777],{"__ignoreMap":98},[102,100778,100779,100782,100784,100787,100789],{"class":104,"line":105},[102,100780,100781],{"class":119},"sudo apt",[102,100783,2833],{"class":108},[102,100785,100786],{"class":119},"get install python3",[102,100788,2833],{"class":108},[102,100790,100791],{"class":119},"numpy\n",[14,100793,100794],{},"对于Fedora:",[93,100796,100798],{"className":38243,"code":100797,"language":38245,"meta":98,"style":98},"sudo dnf install python3-numpy\n",[83,100799,100800],{"__ignoreMap":98},[102,100801,100802,100805,100807],{"class":104,"line":105},[102,100803,100804],{"class":119},"sudo dnf install python3",[102,100806,2833],{"class":108},[102,100808,100791],{"class":119},[8955,100810,100811],{},"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":98,"searchDepth":116,"depth":116,"links":100813},[100814,100815,100816],{"id":100732,"depth":116,"text":100733},{"id":100751,"depth":116,"text":100752},{"id":100767,"depth":116,"text":100768},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":100711,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":100823,"title":100824,"body":100825,"description":31240,"extension":8978,"meta":100938,"navigation":651,"path":100939,"seo":100940,"stem":100941,"__hash__":100942},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":100826,"toc":100936},[100827,100830,100833,100836,100839,100842,100845,100848,100851,100854,100930,100933],[10,100828,100824],{"id":100829},"_10算数函数",[14,100831,100832],{},"加减乘除运算跟python基础语法没区别",[14,100834,100835],{},"除了python那种方法外还可以使用函数",[14,100837,100838],{},"加：np.add(a,b)",[14,100840,100841],{},"减：np.subtract(a,b)",[14,100843,100844],{},"乘：np.multiply(a,b)",[14,100846,100847],{},"除：np.divide(a,b) == a\u002Fb",[14,100849,100850],{},"取余：np.mod(a,b) == a%b",[14,100852,100853],{},"必须会的用法：",[93,100855,100857],{"className":38243,"code":100856,"language":38245,"meta":98,"style":98},"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",[83,100858,100859,100881,100902,100912,100925],{"__ignoreMap":98},[102,100860,100861,100863,100865,100868,100870,100873,100875,100877,100879],{"class":104,"line":105},[102,100862,9275],{"class":119},[102,100864,260],{"class":108},[102,100866,100867],{"class":119},"np.arange(",[102,100869,9453],{"class":187},[102,100871,100872],{"class":119},").reshape(",[102,100874,7049],{"class":187},[102,100876,1618],{"class":119},[102,100878,7049],{"class":187},[102,100880,390],{"class":119},[102,100882,100883,100885,100887,100890,100892,100894,100896,100898,100900],{"class":104,"line":116},[102,100884,9300],{"class":119},[102,100886,260],{"class":108},[102,100888,100889],{"class":119},"np.array([",[102,100891,263],{"class":187},[102,100893,1618],{"class":119},[102,100895,263],{"class":187},[102,100897,1618],{"class":119},[102,100899,263],{"class":187},[102,100901,13466],{"class":119},[102,100903,100904,100907,100909],{"class":104,"line":123},[102,100905,100906],{"class":119},"result",[102,100908,260],{"class":108},[102,100910,100911],{"class":119},"np.empty_like(a)\n",[102,100913,100914,100917,100920,100922],{"class":104,"line":130},[102,100915,100916],{"class":119},"np.add(a,b,",[102,100918,100919],{"class":386},"out",[102,100921,260],{"class":108},[102,100923,100924],{"class":119},"result)\n",[102,100926,100927],{"class":104,"line":136},[102,100928,100929],{"class":119},"result\n",[14,100931,100932],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[8955,100934,100935],{},"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":98,"searchDepth":116,"depth":116,"links":100937},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":100824,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":100944,"title":100945,"body":100946,"description":31240,"extension":8978,"meta":101708,"navigation":651,"path":101709,"seo":101710,"stem":101711,"__hash__":101712},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":100947,"toc":101695},[100948,100951,100954,100957,100961,101000,101004,101048,101108,101112,101115,101154,101157,101202,101206,101242,101246,101315,101319,101383,101387,101390,101393,101396,101399,101435,101439,101479,101483,101555,101558,101562,101625,101629,101692],[10,100949,100945],{"id":100950},"_11统计函数",[14,100952,100953],{},"sum max min mean",[14,100955,100956],{},"这些有axis参数，可以指定方向",[43,100958,100960],{"id":100959},"_111-sum求和函数","11.1 sum()求和函数",[93,100962,100964],{"className":38243,"code":100963,"language":38245,"meta":98,"style":98},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[83,100965,100966,100971,100992],{"__ignoreMap":98},[102,100967,100968],{"class":104,"line":105},[102,100969,100970],{"class":126},"#创建一维数组\n",[102,100972,100973,100975,100977,100980,100982,100984,100986,100988,100990],{"class":104,"line":116},[102,100974,9275],{"class":119},[102,100976,260],{"class":108},[102,100978,100979],{"class":119},"np.random.randint(",[102,100981,7039],{"class":187},[102,100983,1618],{"class":119},[102,100985,5569],{"class":187},[102,100987,1618],{"class":119},[102,100989,5016],{"class":187},[102,100991,390],{"class":119},[102,100993,100994,100997],{"class":104,"line":123},[102,100995,100996],{"class":119},"np.sum(a)",[102,100998,100999],{"class":126},"#求和\n",[43,101001,101003],{"id":101002},"_112-max求最大值函数","11.2 max()求最大值函数",[93,101005,101007],{"className":38243,"code":101006,"language":38245,"meta":98,"style":98},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[83,101008,101009,101013,101033,101038,101043],{"__ignoreMap":98},[102,101010,101011],{"class":104,"line":105},[102,101012,100970],{"class":126},[102,101014,101015,101017,101019,101021,101023,101025,101027,101029,101031],{"class":104,"line":116},[102,101016,9275],{"class":119},[102,101018,260],{"class":108},[102,101020,100979],{"class":119},[102,101022,7039],{"class":187},[102,101024,1618],{"class":119},[102,101026,5569],{"class":187},[102,101028,1618],{"class":119},[102,101030,5016],{"class":187},[102,101032,390],{"class":119},[102,101034,101035],{"class":104,"line":123},[102,101036,101037],{"class":119},"np.max(a)\n",[102,101039,101040],{"class":104,"line":130},[102,101041,101042],{"class":126},"#最大索引(求最大元素的索引)arg\n",[102,101044,101045],{"class":104,"line":136},[102,101046,101047],{"class":119},"np.argmax(a)\n",[93,101049,101051],{"className":38243,"code":101050,"language":38245,"meta":98,"style":98},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[83,101052,101053,101074,101094,101098],{"__ignoreMap":98},[102,101054,101055,101057,101059,101062,101064,101066,101068,101070,101072],{"class":104,"line":105},[102,101056,19660],{"class":119},[102,101058,260],{"class":108},[102,101060,101061],{"class":119}," np.array([",[102,101063,7039],{"class":187},[102,101065,2571],{"class":119},[102,101067,9354],{"class":187},[102,101069,2571],{"class":119},[102,101071,7049],{"class":187},[102,101073,13466],{"class":119},[102,101075,101076,101078,101080,101082,101084,101086,101088,101090,101092],{"class":104,"line":116},[102,101077,19686],{"class":119},[102,101079,260],{"class":108},[102,101081,101061],{"class":119},[102,101083,7049],{"class":187},[102,101085,2571],{"class":119},[102,101087,7044],{"class":187},[102,101089,2571],{"class":119},[102,101091,9329],{"class":187},[102,101093,13466],{"class":119},[102,101095,101096],{"class":104,"line":123},[102,101097,652],{"emptyLinePlaceholder":651},[102,101099,101100,101102,101105],{"class":104,"line":130},[102,101101,38280],{"class":187},[102,101103,101104],{"class":119},"(np.maximum(a, b))   ",[102,101106,101107],{"class":126},"# [3 5 4]，每个位置上取较大值\n",[43,101109,101111],{"id":101110},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,101113,101114],{},"①一维数组：",[93,101116,101118],{"className":38243,"code":101117,"language":38245,"meta":98,"style":98},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[83,101119,101120,101124,101144,101149],{"__ignoreMap":98},[102,101121,101122],{"class":104,"line":105},[102,101123,100970],{"class":126},[102,101125,101126,101128,101130,101132,101134,101136,101138,101140,101142],{"class":104,"line":116},[102,101127,9275],{"class":119},[102,101129,260],{"class":108},[102,101131,100979],{"class":119},[102,101133,7039],{"class":187},[102,101135,1618],{"class":119},[102,101137,5569],{"class":187},[102,101139,1618],{"class":119},[102,101141,5016],{"class":187},[102,101143,390],{"class":119},[102,101145,101146],{"class":104,"line":123},[102,101147,101148],{"class":126},"#求平均值\n",[102,101150,101151],{"class":104,"line":130},[102,101152,101153],{"class":119},"np.mean(a)\n",[14,101155,101156],{},"②二维数组",[93,101158,101160],{"className":38243,"code":101159,"language":38245,"meta":98,"style":98},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[83,101161,101162,101167,101192,101197],{"__ignoreMap":98},[102,101163,101164],{"class":104,"line":105},[102,101165,101166],{"class":126},"#二维数组\n",[102,101168,101169,101172,101174,101176,101178,101180,101182,101184,101186,101188,101190],{"class":104,"line":116},[102,101170,101171],{"class":119},"aa",[102,101173,260],{"class":108},[102,101175,100867],{"class":119},[102,101177,7039],{"class":187},[102,101179,1618],{"class":119},[102,101181,9551],{"class":187},[102,101183,100872],{"class":119},[102,101185,7049],{"class":187},[102,101187,1618],{"class":119},[102,101189,9329],{"class":187},[102,101191,390],{"class":119},[102,101193,101194],{"class":104,"line":123},[102,101195,101196],{"class":126},"#对数组中的所有数求平均\n",[102,101198,101199],{"class":104,"line":130},[102,101200,101201],{"class":119},"np.mean(aa)\n",[43,101203,101205],{"id":101204},"_114-median求中位数函数","11.4 median()求中位数函数",[93,101207,101209],{"className":38243,"code":101208,"language":38245,"meta":98,"style":98},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[83,101210,101211,101216,101232,101237],{"__ignoreMap":98},[102,101212,101213],{"class":104,"line":105},[102,101214,101215],{"class":126},"#求中位数\n",[102,101217,101218,101220,101222,101224,101226,101228,101230],{"class":104,"line":116},[102,101219,9300],{"class":119},[102,101221,260],{"class":108},[102,101223,100867],{"class":119},[102,101225,7039],{"class":187},[102,101227,1618],{"class":119},[102,101229,263],{"class":187},[102,101231,390],{"class":119},[102,101233,101234],{"class":104,"line":123},[102,101235,101236],{"class":119},"np.median(b)\n",[102,101238,101239],{"class":104,"line":130},[102,101240,101241],{"class":126},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[43,101243,101245],{"id":101244},"_115-power求幂运算函数","11.5 power()求幂运算函数",[93,101247,101249],{"className":38243,"code":101248,"language":38245,"meta":98,"style":98},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[83,101250,101251,101267,101272,101277,101286,101291,101300],{"__ignoreMap":98},[102,101252,101253,101255,101257,101259,101261,101263,101265],{"class":104,"line":105},[102,101254,9300],{"class":119},[102,101256,260],{"class":108},[102,101258,100867],{"class":119},[102,101260,7039],{"class":187},[102,101262,1618],{"class":119},[102,101264,263],{"class":187},[102,101266,390],{"class":119},[102,101268,101269],{"class":104,"line":116},[102,101270,101271],{"class":126},"#幂运算\n",[102,101273,101274],{"class":104,"line":123},[102,101275,101276],{"class":126},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[102,101278,101279,101282,101284],{"class":104,"line":130},[102,101280,101281],{"class":119},"np.power(b,",[102,101283,7044],{"class":187},[102,101285,390],{"class":119},[102,101287,101288],{"class":104,"line":136},[102,101289,101290],{"class":126},"#或者以下代码，将数据存储起来\n",[102,101292,101293,101295,101297],{"class":104,"line":142},[102,101294,9867],{"class":119},[102,101296,260],{"class":108},[102,101298,101299],{"class":119},"np.empty_like(b)\n",[102,101301,101302,101304,101306,101308,101310,101312],{"class":104,"line":148},[102,101303,101281],{"class":119},[102,101305,7044],{"class":187},[102,101307,1618],{"class":119},[102,101309,100919],{"class":386},[102,101311,260],{"class":108},[102,101313,101314],{"class":119},"y)\n",[43,101316,101318],{"id":101317},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[93,101320,101322],{"className":38243,"code":101321,"language":38245,"meta":98,"style":98},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[83,101323,101324,101340,101345,101350,101354,101372],{"__ignoreMap":98},[102,101325,101326,101328,101330,101332,101334,101336,101338],{"class":104,"line":105},[102,101327,9300],{"class":119},[102,101329,260],{"class":108},[102,101331,100867],{"class":119},[102,101333,7039],{"class":187},[102,101335,1618],{"class":119},[102,101337,263],{"class":187},[102,101339,390],{"class":119},[102,101341,101342],{"class":104,"line":116},[102,101343,101344],{"class":126},"#开方\n",[102,101346,101347],{"class":104,"line":123},[102,101348,101349],{"class":119},"np.sqrt(b)\n",[102,101351,101352],{"class":104,"line":130},[102,101353,101290],{"class":126},[102,101355,101356,101358,101360,101363,101366,101368,101370],{"class":104,"line":136},[102,101357,9867],{"class":119},[102,101359,260],{"class":108},[102,101361,101362],{"class":119},"np.empty_like(b,",[102,101364,101365],{"class":386},"dtype",[102,101367,260],{"class":108},[102,101369,9086],{"class":187},[102,101371,390],{"class":119},[102,101373,101374,101377,101379,101381],{"class":104,"line":142},[102,101375,101376],{"class":119},"np.sqrt(b,",[102,101378,100919],{"class":386},[102,101380,260],{"class":108},[102,101382,101314],{"class":119},[43,101384,101386],{"id":101385},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,101388,101389],{},"对数组中的元素累计求和，可指定轴",[14,101391,101392],{},"#累计求和的意思是：",[14,101394,101395],{},"a = np.array([1, 2, 3, 4])",[14,101397,101398],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[93,101400,101402],{"className":38243,"code":101401,"language":38245,"meta":98,"style":98},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[83,101403,101404,101420,101425,101430],{"__ignoreMap":98},[102,101405,101406,101408,101410,101412,101414,101416,101418],{"class":104,"line":105},[102,101407,9300],{"class":119},[102,101409,260],{"class":108},[102,101411,100867],{"class":119},[102,101413,7039],{"class":187},[102,101415,1618],{"class":119},[102,101417,263],{"class":187},[102,101419,390],{"class":119},[102,101421,101422],{"class":104,"line":116},[102,101423,101424],{"class":119},"np.cumsum(b)\n",[102,101426,101427],{"class":104,"line":123},[102,101428,101429],{"class":126},"#结果：\n",[102,101431,101432],{"class":104,"line":130},[102,101433,101434],{"class":126},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[43,101436,101438],{"id":101437},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[93,101440,101442],{"className":38243,"code":101441,"language":38245,"meta":98,"style":98},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[83,101443,101444,101460,101465,101470,101474],{"__ignoreMap":98},[102,101445,101446,101448,101450,101452,101454,101456,101458],{"class":104,"line":105},[102,101447,9300],{"class":119},[102,101449,260],{"class":108},[102,101451,100867],{"class":119},[102,101453,7039],{"class":187},[102,101455,1618],{"class":119},[102,101457,263],{"class":187},[102,101459,390],{"class":119},[102,101461,101462],{"class":104,"line":116},[102,101463,101464],{"class":126},"#对数组中的元素累计求积，可指定轴\n",[102,101466,101467],{"class":104,"line":123},[102,101468,101469],{"class":119},"np.cumprod(b)\n",[102,101471,101472],{"class":104,"line":130},[102,101473,101429],{"class":126},[102,101475,101476],{"class":104,"line":136},[102,101477,101478],{"class":126},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[43,101480,101482],{"id":101481},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[93,101484,101486],{"className":38243,"code":101485,"language":38245,"meta":98,"style":98},"#删除数组中的重复数据，并对数据进行排序\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",[83,101487,101488,101493,101541,101546,101550],{"__ignoreMap":98},[102,101489,101490],{"class":104,"line":105},[102,101491,101492],{"class":126},"#删除数组中的重复数据，并对数据进行排序\n",[102,101494,101495,101497,101499,101501,101503,101505,101507,101509,101511,101513,101515,101517,101519,101521,101523,101525,101527,101529,101531,101533,101535,101537,101539],{"class":104,"line":116},[102,101496,9275],{"class":119},[102,101498,260],{"class":108},[102,101500,100889],{"class":119},[102,101502,7039],{"class":187},[102,101504,1618],{"class":119},[102,101506,7044],{"class":187},[102,101508,1618],{"class":119},[102,101510,7049],{"class":187},[102,101512,1618],{"class":119},[102,101514,9527],{"class":187},[102,101516,1618],{"class":119},[102,101518,7049],{"class":187},[102,101520,1618],{"class":119},[102,101522,263],{"class":187},[102,101524,1618],{"class":119},[102,101526,9235],{"class":187},[102,101528,1618],{"class":119},[102,101530,8423],{"class":187},[102,101532,1618],{"class":119},[102,101534,9799],{"class":187},[102,101536,1618],{"class":119},[102,101538,9329],{"class":187},[102,101540,13466],{"class":119},[102,101542,101543],{"class":104,"line":123},[102,101544,101545],{"class":119},"np.unique(a)\n",[102,101547,101548],{"class":104,"line":130},[102,101549,101429],{"class":126},[102,101551,101552],{"class":104,"line":136},[102,101553,101554],{"class":126},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,101556,101557],{},"升序形式排序",[43,101559,101561],{"id":101560},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[93,101563,101565],{"className":38243,"code":101564,"language":38245,"meta":98,"style":98},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[83,101566,101567,101615,101620],{"__ignoreMap":98},[102,101568,101569,101571,101573,101575,101577,101579,101581,101583,101585,101587,101589,101591,101593,101595,101597,101599,101601,101603,101605,101607,101609,101611,101613],{"class":104,"line":105},[102,101570,9275],{"class":119},[102,101572,260],{"class":108},[102,101574,100889],{"class":119},[102,101576,7039],{"class":187},[102,101578,1618],{"class":119},[102,101580,7044],{"class":187},[102,101582,1618],{"class":119},[102,101584,7049],{"class":187},[102,101586,1618],{"class":119},[102,101588,9527],{"class":187},[102,101590,1618],{"class":119},[102,101592,7049],{"class":187},[102,101594,1618],{"class":119},[102,101596,263],{"class":187},[102,101598,1618],{"class":119},[102,101600,9235],{"class":187},[102,101602,1618],{"class":119},[102,101604,8423],{"class":187},[102,101606,1618],{"class":119},[102,101608,9799],{"class":187},[102,101610,1618],{"class":119},[102,101612,9329],{"class":187},[102,101614,13466],{"class":119},[102,101616,101617],{"class":104,"line":116},[102,101618,101619],{"class":126},"#返回数组中非零元素的索引\n",[102,101621,101622],{"class":104,"line":123},[102,101623,101624],{"class":119},"np.nonzero(a)\n",[43,101626,101628],{"id":101627},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[93,101630,101632],{"className":38243,"code":101631,"language":38245,"meta":98,"style":98},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[83,101633,101634,101682,101687],{"__ignoreMap":98},[102,101635,101636,101638,101640,101642,101644,101646,101648,101650,101652,101654,101656,101658,101660,101662,101664,101666,101668,101670,101672,101674,101676,101678,101680],{"class":104,"line":105},[102,101637,9275],{"class":119},[102,101639,260],{"class":108},[102,101641,100889],{"class":119},[102,101643,7039],{"class":187},[102,101645,1618],{"class":119},[102,101647,7044],{"class":187},[102,101649,1618],{"class":119},[102,101651,7049],{"class":187},[102,101653,1618],{"class":119},[102,101655,9527],{"class":187},[102,101657,1618],{"class":119},[102,101659,7049],{"class":187},[102,101661,1618],{"class":119},[102,101663,263],{"class":187},[102,101665,1618],{"class":119},[102,101667,9235],{"class":187},[102,101669,1618],{"class":119},[102,101671,8423],{"class":187},[102,101673,1618],{"class":119},[102,101675,9799],{"class":187},[102,101677,1618],{"class":119},[102,101679,9329],{"class":187},[102,101681,13466],{"class":119},[102,101683,101684],{"class":104,"line":116},[102,101685,101686],{"class":126},"#计算一组数中最大值与最小值的差，可指定轴\n",[102,101688,101689],{"class":104,"line":123},[102,101690,101691],{"class":119},"np.ptp(a)\n",[8955,101693,101694],{},"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":98,"searchDepth":116,"depth":116,"links":101696},[101697,101698,101699,101700,101701,101702,101703,101704,101705,101706,101707],{"id":100959,"depth":116,"text":100960},{"id":101002,"depth":116,"text":101003},{"id":101110,"depth":116,"text":101111},{"id":101204,"depth":116,"text":101205},{"id":101244,"depth":116,"text":101245},{"id":101317,"depth":116,"text":101318},{"id":101385,"depth":116,"text":101386},{"id":101437,"depth":116,"text":101438},{"id":101481,"depth":116,"text":101482},{"id":101560,"depth":116,"text":101561},{"id":101627,"depth":116,"text":101628},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":100945,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":101714,"title":101715,"body":101716,"description":31240,"extension":8978,"meta":102371,"navigation":651,"path":102372,"seo":102373,"stem":102374,"__hash__":102375},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":101717,"toc":102359},[101718,101721,101725,101728,101944,101948,101951,102160,102164,102230,102235,102239,102242,102245,102283,102287,102290,102295,102299,102302,102305,102310,102314,102317,102321,102324,102327,102332,102336,102339,102342,102347,102351,102356],[10,101719,101715],{"id":101720},"_12其他常用函数",[43,101722,101724],{"id":101723},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,101726,101727],{},"将数组的数据按照行列复制扩展",[93,101729,101731],{"className":38243,"code":101730,"language":38245,"meta":98,"style":98},"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",[83,101732,101733,101749,101758,101762,101767,101772,101785,101789,101794,101799,101804,101808,101813,101837,101849,101853,101857,101862,101867,101872,101877,101881,101894,101898,101902,101907,101912,101917,101922,101927,101931,101935,101940],{"__ignoreMap":98},[102,101734,101735,101737,101739,101741,101743,101745,101747],{"class":104,"line":105},[102,101736,9275],{"class":119},[102,101738,260],{"class":108},[102,101740,100867],{"class":119},[102,101742,7039],{"class":187},[102,101744,1618],{"class":119},[102,101746,9354],{"class":187},[102,101748,390],{"class":119},[102,101750,101751,101754,101756],{"class":104,"line":116},[102,101752,101753],{"class":119},"np.tile(a,",[102,101755,7044],{"class":187},[102,101757,390],{"class":119},[102,101759,101760],{"class":104,"line":123},[102,101761,101429],{"class":126},[102,101763,101764],{"class":104,"line":130},[102,101765,101766],{"class":126},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[102,101768,101769],{"class":104,"line":136},[102,101770,101771],{"class":126},"#行复制两次，列复制三次\n",[102,101773,101774,101777,101779,101781,101783],{"class":104,"line":142},[102,101775,101776],{"class":119},"np.tile(a,(",[102,101778,7044],{"class":187},[102,101780,1618],{"class":119},[102,101782,7049],{"class":187},[102,101784,38362],{"class":119},[102,101786,101787],{"class":104,"line":148},[102,101788,101429],{"class":126},[102,101790,101791],{"class":104,"line":157},[102,101792,101793],{"class":278},"'''\n",[102,101795,101796],{"class":104,"line":163},[102,101797,101798],{"class":278},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[102,101800,101801],{"class":104,"line":175},[102,101802,101803],{"class":278},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[102,101805,101806],{"class":104,"line":181},[102,101807,101793],{"class":278},[102,101809,101810],{"class":104,"line":202},[102,101811,101812],{"class":126},"#创建二维数组\n",[102,101814,101815,101817,101819,101821,101823,101825,101827,101829,101831,101833,101835],{"class":104,"line":208},[102,101816,101171],{"class":119},[102,101818,260],{"class":108},[102,101820,100867],{"class":119},[102,101822,7039],{"class":187},[102,101824,1618],{"class":119},[102,101826,9551],{"class":187},[102,101828,100872],{"class":119},[102,101830,9329],{"class":187},[102,101832,1618],{"class":119},[102,101834,7049],{"class":187},[102,101836,390],{"class":119},[102,101838,101839,101842,101844,101846],{"class":104,"line":214},[102,101840,101841],{"class":119},"np.tile(aa,",[102,101843,7044],{"class":187},[102,101845,4033],{"class":119},[102,101847,101848],{"class":126},"#一个数的时候就是行\n",[102,101850,101851],{"class":104,"line":225},[102,101852,101429],{"class":126},[102,101854,101855],{"class":104,"line":230},[102,101856,101793],{"class":278},[102,101858,101859],{"class":104,"line":236},[102,101860,101861],{"class":278},"array([[ 1,  2,  3,  1,  2,  3],\n",[102,101863,101864],{"class":104,"line":242},[102,101865,101866],{"class":278},"       [ 4,  5,  6,  4,  5,  6],\n",[102,101868,101869],{"class":104,"line":248},[102,101870,101871],{"class":278},"       [ 7,  8,  9,  7,  8,  9],\n",[102,101873,101874],{"class":104,"line":254},[102,101875,101876],{"class":278},"       [10, 11, 12, 10, 11, 12]])\n",[102,101878,101879],{"class":104,"line":269},[102,101880,101793],{"class":278},[102,101882,101883,101886,101888,101890,101892],{"class":104,"line":298},[102,101884,101885],{"class":119},"np.tile(aa,(",[102,101887,7044],{"class":187},[102,101889,1618],{"class":119},[102,101891,7049],{"class":187},[102,101893,38362],{"class":119},[102,101895,101896],{"class":104,"line":502},[102,101897,101429],{"class":126},[102,101899,101900],{"class":104,"line":507},[102,101901,101793],{"class":278},[102,101903,101904],{"class":104,"line":512},[102,101905,101906],{"class":278},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[102,101908,101909],{"class":104,"line":521},[102,101910,101911],{"class":278},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[102,101913,101914],{"class":104,"line":526},[102,101915,101916],{"class":278},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[102,101918,101919],{"class":104,"line":532},[102,101920,101921],{"class":278},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[102,101923,101924],{"class":104,"line":538},[102,101925,101926],{"class":278},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[102,101928,101929],{"class":104,"line":555},[102,101930,101911],{"class":278},[102,101932,101933],{"class":104,"line":570},[102,101934,101916],{"class":278},[102,101936,101937],{"class":104,"line":581},[102,101938,101939],{"class":278},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[102,101941,101942],{"class":104,"line":819},[102,101943,101793],{"class":278},[43,101945,101947],{"id":101946},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,101949,101950],{},"repeat()将数组中的每个元素重复若干次",[93,101952,101954],{"className":38243,"code":101953,"language":38245,"meta":98,"style":98},"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",[83,101955,101956,101972,101981,101985,101990,102014,102019,102028,102032,102037,102041,102046,102062,102066,102070,102075,102080,102085,102089,102094,102098,102103,102108,102112,102128,102132,102136,102141,102146,102151,102156],{"__ignoreMap":98},[102,101957,101958,101960,101962,101964,101966,101968,101970],{"class":104,"line":105},[102,101959,9275],{"class":119},[102,101961,260],{"class":108},[102,101963,100867],{"class":119},[102,101965,7039],{"class":187},[102,101967,1618],{"class":119},[102,101969,9354],{"class":187},[102,101971,390],{"class":119},[102,101973,101974,101977,101979],{"class":104,"line":116},[102,101975,101976],{"class":119},"np.repeat(a,",[102,101978,7049],{"class":187},[102,101980,390],{"class":119},[102,101982,101983],{"class":104,"line":123},[102,101984,101429],{"class":126},[102,101986,101987],{"class":104,"line":130},[102,101988,101989],{"class":126},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[102,101991,101992,101994,101996,101998,102000,102002,102004,102006,102008,102010,102012],{"class":104,"line":136},[102,101993,101171],{"class":119},[102,101995,260],{"class":108},[102,101997,100867],{"class":119},[102,101999,7039],{"class":187},[102,102001,1618],{"class":119},[102,102003,9551],{"class":187},[102,102005,100872],{"class":119},[102,102007,9329],{"class":187},[102,102009,1618],{"class":119},[102,102011,7049],{"class":187},[102,102013,390],{"class":119},[102,102015,102016],{"class":104,"line":142},[102,102017,102018],{"class":126},"#这个重复之后二维变成一维\n",[102,102020,102021,102024,102026],{"class":104,"line":148},[102,102022,102023],{"class":119},"np.repeat(aa,",[102,102025,7044],{"class":187},[102,102027,390],{"class":119},[102,102029,102030],{"class":104,"line":157},[102,102031,101793],{"class":278},[102,102033,102034],{"class":104,"line":163},[102,102035,102036],{"class":278},"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",[102,102038,102039],{"class":104,"line":175},[102,102040,101793],{"class":278},[102,102042,102043],{"class":104,"line":181},[102,102044,102045],{"class":126},"#指定axis\n",[102,102047,102048,102050,102052,102054,102056,102058,102060],{"class":104,"line":202},[102,102049,102023],{"class":119},[102,102051,7044],{"class":187},[102,102053,1618],{"class":119},[102,102055,55379],{"class":386},[102,102057,260],{"class":108},[102,102059,8423],{"class":187},[102,102061,390],{"class":119},[102,102063,102064],{"class":104,"line":208},[102,102065,101429],{"class":126},[102,102067,102068],{"class":104,"line":214},[102,102069,101793],{"class":278},[102,102071,102072],{"class":104,"line":225},[102,102073,102074],{"class":278},"array([[ 1,  2,  3],\n",[102,102076,102077],{"class":104,"line":230},[102,102078,102079],{"class":278},"       [ 1,  2,  3],\n",[102,102081,102082],{"class":104,"line":236},[102,102083,102084],{"class":278},"       [ 4,  5,  6],\n",[102,102086,102087],{"class":104,"line":242},[102,102088,102084],{"class":278},[102,102090,102091],{"class":104,"line":248},[102,102092,102093],{"class":278},"       [ 7,  8,  9],\n",[102,102095,102096],{"class":104,"line":254},[102,102097,102093],{"class":278},[102,102099,102100],{"class":104,"line":269},[102,102101,102102],{"class":278},"       [10, 11, 12],\n",[102,102104,102105],{"class":104,"line":298},[102,102106,102107],{"class":278},"       [10, 11, 12]])\n",[102,102109,102110],{"class":104,"line":502},[102,102111,101793],{"class":278},[102,102113,102114,102116,102118,102120,102122,102124,102126],{"class":104,"line":507},[102,102115,102023],{"class":119},[102,102117,7044],{"class":187},[102,102119,1618],{"class":119},[102,102121,55379],{"class":386},[102,102123,260],{"class":108},[102,102125,7039],{"class":187},[102,102127,390],{"class":119},[102,102129,102130],{"class":104,"line":512},[102,102131,101429],{"class":126},[102,102133,102134],{"class":104,"line":521},[102,102135,101793],{"class":278},[102,102137,102138],{"class":104,"line":526},[102,102139,102140],{"class":278},"array([[ 1,  1,  2,  2,  3,  3],\n",[102,102142,102143],{"class":104,"line":532},[102,102144,102145],{"class":278},"       [ 4,  4,  5,  5,  6,  6],\n",[102,102147,102148],{"class":104,"line":538},[102,102149,102150],{"class":278},"       [ 7,  7,  8,  8,  9,  9],\n",[102,102152,102153],{"class":104,"line":555},[102,102154,102155],{"class":278},"       [10, 10, 11, 11, 12, 12]])\n",[102,102157,102158],{"class":104,"line":570},[102,102159,101793],{"class":278},[43,102161,102163],{"id":102162},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[93,102165,102167],{"className":38243,"code":102166,"language":38245,"meta":98,"style":98},"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",[83,102168,102169,102185,102190,102202,102206,102211,102221,102225],{"__ignoreMap":98},[102,102170,102171,102173,102175,102177,102179,102181,102183],{"class":104,"line":105},[102,102172,9275],{"class":119},[102,102174,260],{"class":108},[102,102176,100867],{"class":119},[102,102178,7039],{"class":187},[102,102180,1618],{"class":119},[102,102182,9354],{"class":187},[102,102184,390],{"class":119},[102,102186,102187],{"class":104,"line":116},[102,102188,102189],{"class":126},"#array([，2，3，4])\n",[102,102191,102192,102195,102197,102199],{"class":104,"line":123},[102,102193,102194],{"class":119},"np.roll(a,",[102,102196,7044],{"class":187},[102,102198,4033],{"class":119},[102,102200,102201],{"class":126},"#传正数向后调多少位，传负数向前调多少位\n",[102,102203,102204],{"class":104,"line":130},[102,102205,101429],{"class":126},[102,102207,102208],{"class":104,"line":136},[102,102209,102210],{"class":126},"#array([3, 4, 1, 2])\n",[102,102212,102213,102215,102217,102219],{"class":104,"line":142},[102,102214,102194],{"class":119},[102,102216,2833],{"class":108},[102,102218,7039],{"class":187},[102,102220,390],{"class":119},[102,102222,102223],{"class":104,"line":148},[102,102224,101429],{"class":126},[102,102226,102227],{"class":104,"line":157},[102,102228,102229],{"class":126},"#array([2, 3, 4, 1])\n",[14,102231,102232],{},[6750,102233],{"alt":98,"src":102234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[43,102236,102238],{"id":102237},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,102240,102241],{},"resize()重新调整数组的大小",[14,102243,102244],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[93,102246,102248],{"className":38243,"code":102247,"language":38245,"meta":98,"style":98},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[83,102249,102250,102255,102268],{"__ignoreMap":98},[102,102251,102252],{"class":104,"line":105},[102,102253,102254],{"class":126},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[102,102256,102257,102260,102262,102264,102266],{"class":104,"line":116},[102,102258,102259],{"class":119},"np.resize(aa,(",[102,102261,7044],{"class":187},[102,102263,1618],{"class":119},[102,102265,9379],{"class":187},[102,102267,38362],{"class":119},[102,102269,102270,102272,102274,102276,102278,102280],{"class":104,"line":123},[102,102271,102259],{"class":119},[102,102273,7044],{"class":187},[102,102275,1618],{"class":119},[102,102277,9453],{"class":187},[102,102279,90636],{"class":119},[102,102281,102282],{"class":126},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[43,102284,102286],{"id":102285},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,102288,102289],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,102291,102292],{},[6750,102293],{"alt":98,"src":102294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[43,102296,102298],{"id":102297},"_126-保存加载文件","12.6 保存加载文件",[14,102300,102301],{},"savetxt():将数据保存到txt文件中",[14,102303,102304],{},"loadtxt():从文件加载数据",[14,102306,102307],{},[6750,102308],{"alt":98,"src":102309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[43,102311,102313],{"id":102312},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,102315,102316],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[43,102318,102320],{"id":102319},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,102322,102323],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,102325,102326],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,102328,102329],{},[6750,102330],{"alt":98,"src":102331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[43,102333,102335],{"id":102334},"_129-where语句","12.9 where语句",[14,102337,102338],{},"np.where(条件,x,y)",[14,102340,102341],{},"如果条件为True,对应值为x,否则对应值为y",[14,102343,102344],{},[6750,102345],{"alt":98,"src":102346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[43,102348,102350],{"id":102349},"_1210-dot矩阵","12.10 dot()矩阵",[14,102352,102353],{},[6750,102354],{"alt":98,"src":102355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[8955,102357,102358],{},"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":98,"searchDepth":116,"depth":116,"links":102360},[102361,102362,102363,102364,102365,102366,102367,102368,102369,102370],{"id":101723,"depth":116,"text":101724},{"id":101946,"depth":116,"text":101947},{"id":102162,"depth":116,"text":102163},{"id":102237,"depth":116,"text":102238},{"id":102285,"depth":116,"text":102286},{"id":102297,"depth":116,"text":102298},{"id":102312,"depth":116,"text":102313},{"id":102319,"depth":116,"text":102320},{"id":102334,"depth":116,"text":102335},{"id":102349,"depth":116,"text":102350},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":101715,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":102377,"title":102378,"body":102379,"description":31240,"extension":8978,"meta":102732,"navigation":651,"path":102733,"seo":102734,"stem":102735,"__hash__":102736},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":102380,"toc":102730},[102381,102384,102387,102390,102393,102396,102461,102463,102727],[10,102382,102378],{"id":102383},"_13数组排序",[14,102385,102386],{},"排序主要用到的方法是np.sort和np.argsort",[14,102388,102389],{},"其中np.sort()对数组直接排序",[14,102391,102392],{},"而np.argsort()是返回排序后的原始索引",[14,102394,102395],{},"①一维数组",[93,102397,102399],{"className":38243,"code":102398,"language":38245,"meta":98,"style":98},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[83,102400,102401,102405,102445,102453],{"__ignoreMap":98},[102,102402,102403],{"class":104,"line":105},[102,102404,100970],{"class":126},[102,102406,102407,102409,102411,102413,102415,102417,102419,102421,102423,102425,102427,102429,102431,102433,102435,102437,102439,102441,102443],{"class":104,"line":116},[102,102408,9275],{"class":119},[102,102410,260],{"class":108},[102,102412,100889],{"class":119},[102,102414,7049],{"class":187},[102,102416,1618],{"class":119},[102,102418,9527],{"class":187},[102,102420,1618],{"class":119},[102,102422,9428],{"class":187},[102,102424,1618],{"class":119},[102,102426,9799],{"class":187},[102,102428,1618],{"class":119},[102,102430,9316],{"class":187},[102,102432,1618],{"class":119},[102,102434,9915],{"class":187},[102,102436,1618],{"class":119},[102,102438,9379],{"class":187},[102,102440,1618],{"class":119},[102,102442,263],{"class":187},[102,102444,13466],{"class":119},[102,102446,102447,102450],{"class":104,"line":123},[102,102448,102449],{"class":119},"np.sort(a)",[102,102451,102452],{"class":126},"#升序排序\n",[102,102454,102455,102458],{"class":104,"line":130},[102,102456,102457],{"class":119},"np.argsort(a)",[102,102459,102460],{"class":126},"#按照元素大小来索引排序\n",[14,102462,101156],{},[93,102464,102466],{"className":38243,"code":102465,"language":38245,"meta":98,"style":98},"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",[83,102467,102468,102480,102506,102511,102515,102520,102525,102530,102535,102539,102547,102551,102556,102561,102566,102571,102575,102580,102593,102597,102602,102607,102612,102617,102621,102626,102638,102642,102646,102650,102654,102658,102662,102667,102682,102687,102696,102701,102705,102709,102714,102718,102723],{"__ignoreMap":98},[102,102469,102470,102473,102475,102477],{"class":104,"line":105},[102,102471,102472],{"class":119},"np.random.seed(",[102,102474,8423],{"class":187},[102,102476,4033],{"class":119},[102,102478,102479],{"class":126},"#保证每次值一样\n",[102,102481,102482,102484,102486,102488,102490,102492,102494,102496,102498,102500,102502,102504],{"class":104,"line":116},[102,102483,101171],{"class":119},[102,102485,260],{"class":108},[102,102487,100979],{"class":119},[102,102489,5569],{"class":187},[102,102491,1618],{"class":119},[102,102493,39361],{"class":386},[102,102495,260],{"class":108},[102,102497,380],{"class":119},[102,102499,9329],{"class":187},[102,102501,1618],{"class":119},[102,102503,9379],{"class":187},[102,102505,38362],{"class":119},[102,102507,102508],{"class":104,"line":123},[102,102509,102510],{"class":126},"#原数组：\n",[102,102512,102513],{"class":104,"line":130},[102,102514,101793],{"class":278},[102,102516,102517],{"class":104,"line":136},[102,102518,102519],{"class":278},"array([[44, 47, 64, 67, 67,  9],\n",[102,102521,102522],{"class":104,"line":142},[102,102523,102524],{"class":278},"       [83, 21, 36, 87, 70, 88],\n",[102,102526,102527],{"class":104,"line":148},[102,102528,102529],{"class":278},"       [88, 12, 58, 65, 39, 87],\n",[102,102531,102532],{"class":104,"line":157},[102,102533,102534],{"class":278},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[102,102536,102537],{"class":104,"line":163},[102,102538,101793],{"class":278},[102,102540,102541,102544],{"class":104,"line":175},[102,102542,102543],{"class":119},"np.sort(aa)",[102,102545,102546],{"class":126},"#每行进行了排序\n",[102,102548,102549],{"class":104,"line":181},[102,102550,101793],{"class":278},[102,102552,102553],{"class":104,"line":202},[102,102554,102555],{"class":278},"array([[ 9, 44, 47, 64, 67, 67],\n",[102,102557,102558],{"class":104,"line":208},[102,102559,102560],{"class":278},"       [21, 36, 70, 83, 87, 88],\n",[102,102562,102563],{"class":104,"line":214},[102,102564,102565],{"class":278},"       [12, 39, 58, 65, 87, 88],\n",[102,102567,102568],{"class":104,"line":225},[102,102569,102570],{"class":278},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[102,102572,102573],{"class":104,"line":230},[102,102574,101793],{"class":278},[102,102576,102577],{"class":104,"line":236},[102,102578,102579],{"class":126},"#axis=0时\n",[102,102581,102582,102585,102587,102589,102591],{"class":104,"line":242},[102,102583,102584],{"class":119},"np.sort(aa,",[102,102586,55379],{"class":386},[102,102588,260],{"class":108},[102,102590,8423],{"class":187},[102,102592,390],{"class":119},[102,102594,102595],{"class":104,"line":248},[102,102596,101793],{"class":278},[102,102598,102599],{"class":104,"line":254},[102,102600,102601],{"class":278},"array([[44, 12, 36, 37, 25,  9],\n",[102,102603,102604],{"class":104,"line":269},[102,102605,102606],{"class":278},"       [46, 21, 58, 65, 39, 77],\n",[102,102608,102609],{"class":104,"line":298},[102,102610,102611],{"class":278},"       [83, 47, 64, 67, 67, 87],\n",[102,102613,102614],{"class":104,"line":502},[102,102615,102616],{"class":278},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[102,102618,102619],{"class":104,"line":507},[102,102620,101793],{"class":278},[102,102622,102623],{"class":104,"line":512},[102,102624,102625],{"class":126},"#axis=1时,为默认值\n",[102,102627,102628,102630,102632,102634,102636],{"class":104,"line":521},[102,102629,102584],{"class":119},[102,102631,55379],{"class":386},[102,102633,260],{"class":108},[102,102635,7039],{"class":187},[102,102637,390],{"class":119},[102,102639,102640],{"class":104,"line":526},[102,102641,101793],{"class":278},[102,102643,102644],{"class":104,"line":532},[102,102645,102555],{"class":278},[102,102647,102648],{"class":104,"line":538},[102,102649,102560],{"class":278},[102,102651,102652],{"class":104,"line":555},[102,102653,102565],{"class":278},[102,102655,102656],{"class":104,"line":570},[102,102657,102570],{"class":278},[102,102659,102660],{"class":104,"line":581},[102,102661,101793],{"class":278},[102,102663,102664],{"class":104,"line":819},[102,102665,102666],{"class":126},"#按最后一列排序\n",[102,102668,102669,102671,102673,102676,102678,102680],{"class":104,"line":828},[102,102670,9300],{"class":119},[102,102672,260],{"class":108},[102,102674,102675],{"class":119},"aa[:,",[102,102677,2833],{"class":108},[102,102679,7039],{"class":187},[102,102681,41111],{"class":119},[102,102683,102684],{"class":104,"line":837},[102,102685,102686],{"class":126},"#获取最后一列排好序的索引\n",[102,102688,102689,102691,102693],{"class":104,"line":842},[102,102690,81923],{"class":119},[102,102692,260],{"class":108},[102,102694,102695],{"class":119},"np.argsort(b)\n",[102,102697,102698],{"class":104,"line":855},[102,102699,102700],{"class":119},"aa[index]\n",[102,102702,102703],{"class":104,"line":860},[102,102704,101793],{"class":278},[102,102706,102707],{"class":104,"line":871},[102,102708,102519],{"class":278},[102,102710,102711],{"class":104,"line":1359},[102,102712,102713],{"class":278},"       [46, 88, 81, 37, 25, 77],\n",[102,102715,102716],{"class":104,"line":1368},[102,102717,102529],{"class":278},[102,102719,102720],{"class":104,"line":1373},[102,102721,102722],{"class":278},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[102,102724,102725],{"class":104,"line":1378},[102,102726,101793],{"class":278},[8955,102728,102729],{},"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":98,"searchDepth":116,"depth":116,"links":102731},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":102378,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":102738,"title":102739,"body":102740,"description":31240,"extension":8978,"meta":102770,"navigation":651,"path":102771,"seo":102772,"stem":102773,"__hash__":102774},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":102741,"toc":102768},[102742,102745,102748,102751,102754,102757,102760,102763],[10,102743,102739],{"id":102744},"_14广播机制",[14,102746,102747],{},"广播的规则：",[14,102749,102750],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,102752,102753],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,102755,102756],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,102758,102759],{},"3.如果没有维度形状为1，则会引发异常",[14,102761,102762],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,102764,102765],{},[6750,102766],{"alt":98,"src":102767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":98,"searchDepth":116,"depth":116,"links":102769},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":102739,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":102776,"title":102777,"body":102778,"description":31240,"extension":8978,"meta":102876,"navigation":651,"path":102877,"seo":102878,"stem":102879,"__hash__":102880},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":102779,"toc":102874},[102780,102783,102786,102871],[10,102781,102777],{"id":102782},"_15比较掩码",[14,102784,102785],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[93,102787,102789],{"className":38243,"code":102788,"language":38245,"meta":98,"style":98},"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",[83,102790,102791,102837,102848,102862,102866],{"__ignoreMap":98},[102,102792,102793,102795,102797,102800,102802,102804,102806,102808,102810,102812,102814,102816,102818,102820,102822,102824,102826,102828,102830,102832,102834],{"class":104,"line":105},[102,102794,9275],{"class":119},[102,102796,260],{"class":108},[102,102798,102799],{"class":119},"np.array([[",[102,102801,7039],{"class":187},[102,102803,1618],{"class":119},[102,102805,7044],{"class":187},[102,102807,1618],{"class":119},[102,102809,7049],{"class":187},[102,102811,55895],{"class":119},[102,102813,9502],{"class":187},[102,102815,1618],{"class":119},[102,102817,9527],{"class":187},[102,102819,1618],{"class":119},[102,102821,9551],{"class":187},[102,102823,55895],{"class":119},[102,102825,9749],{"class":187},[102,102827,1618],{"class":119},[102,102829,9774],{"class":187},[102,102831,1618],{"class":119},[102,102833,9799],{"class":187},[102,102835,102836],{"class":119},"]])\n",[102,102838,102839,102841,102843,102845],{"class":104,"line":116},[102,102840,9275],{"class":119},[102,102842,1208],{"class":108},[102,102844,5016],{"class":187},[102,102846,102847],{"class":126},"#结果是一个由True,False组成的数组\n",[102,102849,102850,102853,102855,102857,102859],{"class":104,"line":123},[102,102851,102852],{"class":119},"a[a",[102,102854,1208],{"class":108},[102,102856,5016],{"class":187},[102,102858,9961],{"class":119},[102,102860,102861],{"class":126},"#小于20的元素会存到这个数组中\n",[102,102863,102864],{"class":104,"line":130},[102,102865,101429],{"class":126},[102,102867,102868],{"class":104,"line":136},[102,102869,102870],{"class":126},"#array([ 1,  2,  3, 11, 12, 13])\n",[8955,102872,102873],{},"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":98,"searchDepth":116,"depth":116,"links":102875},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":102777,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":102882,"title":102883,"body":102884,"description":31240,"extension":8978,"meta":102976,"navigation":651,"path":102977,"seo":102978,"stem":102979,"__hash__":102980},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":102885,"toc":102974},[102886,102889,102892,102895,102898,102901,102966,102971],[10,102887,102883],{"id":102888},"_16魔法命令time",[14,102890,102891],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,102893,102894],{},"%:行模式",[14,102896,102897],{},"%%:单元格模式",[14,102899,102900],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[93,102902,102904],{"className":38243,"code":102903,"language":38245,"meta":98,"style":98},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[83,102905,102906,102911,102918,102923,102932,102945,102949,102957],{"__ignoreMap":98},[102,102907,102908],{"class":104,"line":105},[102,102909,102910],{"class":126},"#程序执行时间\n",[102,102912,102913,102915],{"class":104,"line":116},[102,102914,38257],{"class":108},[102,102916,102917],{"class":119}," time \n",[102,102919,102920],{"class":104,"line":123},[102,102921,102922],{"class":126},"#获取时间\n",[102,102924,102925,102928,102930],{"class":104,"line":130},[102,102926,102927],{"class":119},"start",[102,102929,260],{"class":108},[102,102931,40283],{"class":119},[102,102933,102934,102937,102940,102942],{"class":104,"line":136},[102,102935,102936],{"class":119},"time.sleep(",[102,102938,102939],{"class":187},"0.4",[102,102941,4033],{"class":119},[102,102943,102944],{"class":126},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[102,102946,102947],{"class":104,"line":142},[102,102948,102922],{"class":126},[102,102950,102951,102953,102955],{"class":104,"line":148},[102,102952,53666],{"class":119},[102,102954,260],{"class":108},[102,102956,40283],{"class":119},[102,102958,102959,102961,102963],{"class":104,"line":157},[102,102960,53666],{"class":119},[102,102962,2833],{"class":108},[102,102964,102965],{"class":119},"start\n",[14,102967,102968],{},[6750,102969],{"alt":98,"src":102970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[8955,102972,102973],{},"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":98,"searchDepth":116,"depth":116,"links":102975},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":102883,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":102982,"title":102983,"body":102984,"description":31240,"extension":8978,"meta":103019,"navigation":651,"path":103020,"seo":103021,"stem":103022,"__hash__":103023},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":102985,"toc":103017},[102986,102989,102992,102995,102998,103001,103004,103007,103012],[10,102987,102983],{"id":102988},"_17魔法命令timeit",[14,102990,102991],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,102993,102994],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,102996,102997],{},"单元格模式：",[14,102999,103000],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,103002,103003],{},"初始化语句执行次数由轮数来决定",[14,103005,103006],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,103008,103009],{},[6750,103010],{"alt":98,"src":103011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,103013,103014],{},[6750,103015],{"alt":98,"src":103016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":98,"searchDepth":116,"depth":116,"links":103018},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":102983,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":103025,"title":103026,"body":103027,"description":31240,"extension":8978,"meta":103045,"navigation":651,"path":103046,"seo":103047,"stem":103048,"__hash__":103049},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":103028,"toc":103043},[103029,103032,103035,103038],[10,103030,103026],{"id":103031},"_18魔法命令writefile和run",[14,103033,103034],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,103036,103037],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,103039,103040],{},[6750,103041],{"alt":98,"src":103042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":98,"searchDepth":116,"depth":116,"links":103044},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":103026,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":103051,"title":103052,"body":103053,"description":31240,"extension":8978,"meta":103106,"navigation":651,"path":103107,"seo":103108,"stem":103109,"__hash__":103110},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":103054,"toc":103104},[103055,103058,103061,103063,103066,103069,103074,103077,103080,103083,103086,103089,103092,103095,103098,103101],[10,103056,103052],{"id":103057},"_19魔法命令memit",[14,103059,103060],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,103062,32464],{},[14,103064,103065],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,103067,103068],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,103070,103071],{},[6750,103072],{"alt":98,"src":103073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,103075,103076],{},"补充：",[14,103078,103079],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,103081,103082],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,103084,103085],{},"解决方法：",[14,103087,103088],{},"1.cmd",[14,103090,103091],{},"2.依次输入以下代码：",[14,103093,103094],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,103096,103097],{},"pip install --upgrade ipython",[14,103099,103100],{},"#升级 memory_profiler 和 setuptools",[14,103102,103103],{},"pip install --upgrade memory_profiler setuptools",{"title":98,"searchDepth":116,"depth":116,"links":103105},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":103052,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":103112,"title":103113,"body":103114,"description":31240,"extension":8978,"meta":104760,"navigation":651,"path":104761,"seo":104762,"stem":104763,"__hash__":104764},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":103115,"toc":104730},[103116,103119,103123,103127,103188,103191,103196,103200,103205,103210,103215,103220,103223,103228,103232,103236,103269,103272,103275,103278,103330,103333,103369,103372,103414,103418,103439,103441,103478,103480,103485,103487,103492,103496,103499,103527,103531,103535,103588,103592,103684,103688,103692,103695,103700,103704,103729,103734,103738,103741,103744,103747,103750,103753,103756,103759,103771,103775,103779,103782,103814,103817,103840,103843,103869,103872,103898,103901,103935,103938,104000,104004,104007,104011,104014,104040,104043,104046,104051,104054,104123,104125,104130,104191,104194,104205,104211,104216,104220,104223,104236,104240,104255,104257,104280,104282,104308,104311,104314,104317,104365,104367,104372,104376,104380,104407,104411,104438,104441,104446,104451,104541,104545,104603,104608,104611,104614,104656,104660,104716,104721,104724,104727],[10,103117,103113],{"id":103118},"_2创建数组",[43,103120,103122],{"id":103121},"_21-array函数创建数组","2.1 array()函数创建数组",[48,103124,103126],{"id":103125},"_221-函数语句","2.2.1 函数语句",[93,103128,103130],{"className":38243,"code":103129,"language":38245,"meta":98,"style":98},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[83,103131,103132],{"__ignoreMap":98},[102,103133,103134,103137,103140,103142,103144,103146,103148,103150,103153,103155,103158,103160,103163,103165,103167,103169,103172,103174,103177,103179,103182,103184,103186],{"class":104,"line":105},[102,103135,103136],{"class":119},"numpy.array(",[102,103138,103139],{"class":187},"object",[102,103141,2571],{"class":119},[102,103143,101365],{"class":386},[102,103145,22296],{"class":108},[102,103147,46798],{"class":187},[102,103149,2571],{"class":119},[102,103151,103152],{"class":386},"copy",[102,103154,22296],{"class":108},[102,103156,103157],{"class":187}," True",[102,103159,2571],{"class":119},[102,103161,103162],{"class":386},"order",[102,103164,22296],{"class":108},[102,103166,46798],{"class":187},[102,103168,2571],{"class":119},[102,103170,103171],{"class":386},"subok",[102,103173,22296],{"class":108},[102,103175,103176],{"class":187}," False",[102,103178,2571],{"class":119},[102,103180,103181],{"class":386},"ndmin",[102,103183,22296],{"class":108},[102,103185,866],{"class":187},[102,103187,390],{"class":119},[14,103189,103190],{},"参数：",[14,103192,103193],{},[6750,103194],{"alt":98,"src":103195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[48,103197,103199],{"id":103198},"_222-实例","2.2.2 实例",[14,103201,103202],{},[6750,103203],{"alt":98,"src":103204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,103206,103207],{},[6750,103208],{"alt":98,"src":103209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,103211,103212],{},[6750,103213],{"alt":98,"src":103214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,103216,103217],{},[6750,103218],{"alt":98,"src":103219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,103221,103222],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,103224,103225],{},[6750,103226],{"alt":98,"src":103227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[43,103229,103231],{"id":103230},"_22-随机数创建数组","2.2 随机数创建数组",[48,103233,103235],{"id":103234},"_221-random语句","2.2.1 random语句",[93,103237,103239],{"className":38243,"code":103238,"language":38245,"meta":98,"style":98},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[83,103240,103241,103246,103251,103259,103264],{"__ignoreMap":98},[102,103242,103243],{"class":104,"line":105},[102,103244,103245],{"class":126},"#random.random()\n",[102,103247,103248],{"class":104,"line":116},[102,103249,103250],{"class":126},"#确定随机种子,就是每次运行结果是相同的\n",[102,103252,103253,103255,103257],{"class":104,"line":123},[102,103254,102472],{"class":119},[102,103256,8423],{"class":187},[102,103258,390],{"class":119},[102,103260,103261],{"class":104,"line":130},[102,103262,103263],{"class":119},"np.random.random()\n",[102,103265,103266],{"class":104,"line":136},[102,103267,103268],{"class":126},"#生成一个随机的数目\n",[14,103270,103271],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,103273,103274],{},"可以指定数组形状 size",[14,103276,103277],{},"①生成一维数组",[93,103279,103281],{"className":38243,"code":103280,"language":38245,"meta":98,"style":98},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[83,103282,103283,103288,103301,103306,103322],{"__ignoreMap":98},[102,103284,103285],{"class":104,"line":105},[102,103286,103287],{"class":126},"#random.random(size())\n",[102,103289,103290,103293,103295,103297,103299],{"class":104,"line":116},[102,103291,103292],{"class":119},"np.random.random(",[102,103294,39361],{"class":386},[102,103296,260],{"class":108},[102,103298,9354],{"class":187},[102,103300,390],{"class":119},[102,103302,103303],{"class":104,"line":123},[102,103304,103305],{"class":126},"#生成一位的五个元素\n",[102,103307,103308,103310,103312,103314,103316,103318,103320],{"class":104,"line":130},[102,103309,9275],{"class":119},[102,103311,260],{"class":108},[102,103313,103292],{"class":119},[102,103315,39361],{"class":386},[102,103317,260],{"class":108},[102,103319,9329],{"class":187},[102,103321,390],{"class":119},[102,103323,103324,103327],{"class":104,"line":136},[102,103325,103326],{"class":119},"a.shape ",[102,103328,103329],{"class":126},"#输出数组形状\n",[14,103331,103332],{},"②生成二维数组",[93,103334,103336],{"className":38243,"code":103335,"language":38245,"meta":98,"style":98},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[83,103337,103338,103342,103364],{"__ignoreMap":98},[102,103339,103340],{"class":104,"line":105},[102,103341,101166],{"class":126},[102,103343,103344,103346,103348,103350,103352,103354,103356,103358,103360,103362],{"class":104,"line":116},[102,103345,101171],{"class":119},[102,103347,260],{"class":108},[102,103349,103292],{"class":119},[102,103351,39361],{"class":386},[102,103353,260],{"class":108},[102,103355,380],{"class":119},[102,103357,9329],{"class":187},[102,103359,1618],{"class":119},[102,103361,9354],{"class":187},[102,103363,38362],{"class":119},[102,103365,103366],{"class":104,"line":123},[102,103367,103368],{"class":126},"#生成四行五列的数组\n",[14,103370,103371],{},"③生成三维数组",[93,103373,103375],{"className":38243,"code":103374,"language":38245,"meta":98,"style":98},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[83,103376,103377,103382,103409],{"__ignoreMap":98},[102,103378,103379],{"class":104,"line":105},[102,103380,103381],{"class":126},"#三维数组\n",[102,103383,103384,103387,103389,103391,103393,103395,103397,103399,103401,103403,103405,103407],{"class":104,"line":116},[102,103385,103386],{"class":119},"aaa",[102,103388,260],{"class":108},[102,103390,103292],{"class":119},[102,103392,39361],{"class":386},[102,103394,260],{"class":108},[102,103396,380],{"class":119},[102,103398,7044],{"class":187},[102,103400,1618],{"class":119},[102,103402,7049],{"class":187},[102,103404,1618],{"class":119},[102,103406,9329],{"class":187},[102,103408,38362],{"class":119},[102,103410,103411],{"class":104,"line":123},[102,103412,103413],{"class":119},"aaa.shape\n",[48,103415,103417],{"id":103416},"_222-randint语句","2.2.2 randint语句",[93,103419,103421],{"className":38243,"code":103420,"language":38245,"meta":98,"style":98},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[83,103422,103423,103428],{"__ignoreMap":98},[102,103424,103425],{"class":104,"line":105},[102,103426,103427],{"class":126},"#生成随机的整数 random.randint(low,high,size)\n",[102,103429,103430,103432,103434,103436],{"class":104,"line":116},[102,103431,100979],{"class":119},[102,103433,9354],{"class":187},[102,103435,22445],{"class":119},[102,103437,103438],{"class":126},"#0~5中的随机一个数\n",[14,103440,103277],{},[93,103442,103444],{"className":38243,"code":103443,"language":38245,"meta":98,"style":98},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[83,103445,103446,103451,103473],{"__ignoreMap":98},[102,103447,103448],{"class":104,"line":105},[102,103449,103450],{"class":126},"#一维\n",[102,103452,103453,103455,103457,103459,103461,103463,103465,103467,103469,103471],{"class":104,"line":116},[102,103454,100979],{"class":119},[102,103456,7039],{"class":187},[102,103458,1618],{"class":119},[102,103460,9502],{"class":187},[102,103462,1618],{"class":119},[102,103464,39361],{"class":386},[102,103466,260],{"class":108},[102,103468,380],{"class":119},[102,103470,263],{"class":187},[102,103472,38362],{"class":119},[102,103474,103475],{"class":104,"line":123},[102,103476,103477],{"class":126},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,103479,103332],{},[14,103481,103482],{},[6750,103483],{"alt":98,"src":103484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,103486,103371],{},[14,103488,103489],{},[6750,103490],{"alt":98,"src":103491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[48,103493,103495],{"id":103494},"_222-rand语句","2.2.2 rand语句",[14,103497,103498],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[93,103500,103502],{"className":38243,"code":103501,"language":38245,"meta":98,"style":98},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[83,103503,103504,103517,103522],{"__ignoreMap":98},[102,103505,103506,103509,103511,103513,103515],{"class":104,"line":105},[102,103507,103508],{"class":119},"np.random.rand(",[102,103510,5569],{"class":187},[102,103512,1618],{"class":119},[102,103514,263],{"class":187},[102,103516,390],{"class":119},[102,103518,103519],{"class":104,"line":116},[102,103520,103521],{"class":126},"#第一个参数100：行数，表示有100个样本\n",[102,103523,103524],{"class":104,"line":123},[102,103525,103526],{"class":126},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[43,103528,103530],{"id":103529},"_23-arange创建数组","2.3 arange()创建数组",[48,103532,103534],{"id":103533},"_231-函数语句","2.3.1 函数语句",[93,103536,103538],{"className":38243,"code":103537,"language":38245,"meta":98,"style":98},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[83,103539,103540,103554,103559,103564,103569,103574,103579,103584],{"__ignoreMap":98},[102,103541,103542,103545,103547,103549,103552],{"class":104,"line":105},[102,103543,103544],{"class":119},"numpy.arange([start,] stop[, step], ",[102,103546,101365],{"class":386},[102,103548,260],{"class":108},[102,103550,103551],{"class":187},"None",[102,103553,390],{"class":119},[102,103555,103556],{"class":104,"line":116},[102,103557,103558],{"class":126},"#参数\n",[102,103560,103561],{"class":104,"line":123},[102,103562,103563],{"class":278},"\"\"\"\n",[102,103565,103566],{"class":104,"line":130},[102,103567,103568],{"class":278},"start:起始值，可选，默认从 0 开始。\n",[102,103570,103571],{"class":104,"line":136},[102,103572,103573],{"class":278},"stop:结束值（不包含该值）。\n",[102,103575,103576],{"class":104,"line":142},[102,103577,103578],{"class":278},"step:步长，可选，默认是 1。可以为浮点数。\n",[102,103580,103581],{"class":104,"line":148},[102,103582,103583],{"class":278},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[102,103585,103586],{"class":104,"line":157},[102,103587,103563],{"class":278},[48,103589,103591],{"id":103590},"_232-实例","2.3.2 实例",[93,103593,103595],{"className":38243,"code":103594,"language":38245,"meta":98,"style":98},"#创建一维数组\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",[83,103596,103597,103601,103625,103630,103635,103639,103662,103666,103670,103675,103680],{"__ignoreMap":98},[102,103598,103599],{"class":104,"line":105},[102,103600,100970],{"class":126},[102,103602,103603,103605,103607,103609,103611,103613,103615,103617,103619,103621,103623],{"class":104,"line":116},[102,103604,100867],{"class":119},[102,103606,7039],{"class":187},[102,103608,1618],{"class":119},[102,103610,9749],{"class":187},[102,103612,1618],{"class":119},[102,103614,7039],{"class":187},[102,103616,1618],{"class":119},[102,103618,101365],{"class":386},[102,103620,260],{"class":108},[102,103622,217],{"class":187},[102,103624,390],{"class":119},[102,103626,103627],{"class":104,"line":123},[102,103628,103629],{"class":126},"#输出结果：\n",[102,103631,103632],{"class":104,"line":130},[102,103633,103634],{"class":126},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[102,103636,103637],{"class":104,"line":136},[102,103638,101812],{"class":126},[102,103640,103641,103644,103646,103648,103650,103653,103655,103657,103659],{"class":104,"line":142},[102,103642,103643],{"class":119},"np.array([np.arange(",[102,103645,7039],{"class":187},[102,103647,1618],{"class":119},[102,103649,9329],{"class":187},[102,103651,103652],{"class":119},"),np.arange(",[102,103654,9329],{"class":187},[102,103656,1618],{"class":119},[102,103658,9403],{"class":187},[102,103660,103661],{"class":119},")])\n",[102,103663,103664],{"class":104,"line":148},[102,103665,101429],{"class":126},[102,103667,103668],{"class":104,"line":157},[102,103669,103563],{"class":278},[102,103671,103672],{"class":104,"line":163},[102,103673,103674],{"class":278},"array([[1, 2, 3],\n",[102,103676,103677],{"class":104,"line":175},[102,103678,103679],{"class":278},"       [4, 5, 6]])\n",[102,103681,103682],{"class":104,"line":181},[102,103683,103563],{"class":278},[43,103685,103687],{"id":103686},"_24-生态分布","2.4 生态分布",[48,103689,103691],{"id":103690},"_241-标准正态分布","2.4.1 标准正态分布",[14,103693,103694],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,103696,103697],{},[6750,103698],{"alt":98,"src":103699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[48,103701,103703],{"id":103702},"_242-常规正态分布","2.4.2 常规正态分布",[93,103705,103707],{"className":38243,"code":103706,"language":38245,"meta":98,"style":98},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[83,103708,103709,103714,103719,103724],{"__ignoreMap":98},[102,103710,103711],{"class":104,"line":105},[102,103712,103713],{"class":119},"random.normal(loc,scale,size)也可以生成正态分布\n",[102,103715,103716],{"class":104,"line":116},[102,103717,103718],{"class":126},"#loc:期望\n",[102,103720,103721],{"class":104,"line":123},[102,103722,103723],{"class":126},"#scale:方差\n",[102,103725,103726],{"class":104,"line":130},[102,103727,103728],{"class":126},"#size:用于确定是几维的数列\n",[14,103730,103731],{},[6750,103732],{"alt":98,"src":103733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[43,103735,103737],{"id":103736},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,103739,103740],{},"ndim:秩，维度个数",[14,103742,103743],{},"size:数组元素的个数",[14,103745,103746],{},"shape:数组的形状",[14,103748,103749],{},"dtype:数组元素的类型",[14,103751,103752],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,103754,103755],{},"他们都是属性，通过数组.属性的形式来确定",[14,103757,103758],{},"如果需要输出多个可以通过以下方式：",[93,103760,103762],{"className":38243,"code":103761,"language":38245,"meta":98,"style":98},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[83,103763,103764],{"__ignoreMap":98},[102,103765,103766,103768],{"class":104,"line":105},[102,103767,38280],{"class":187},[102,103769,103770],{"class":119},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[43,103772,103774],{"id":103773},"_26-其他方式创建数组","2.6 其他方式创建数组",[48,103776,103778],{"id":103777},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,103780,103781],{},"①创建一维数组",[93,103783,103785],{"className":38243,"code":103784,"language":38245,"meta":98,"style":98},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[83,103786,103787,103796,103800,103805,103810],{"__ignoreMap":98},[102,103788,103789,103792,103794],{"class":104,"line":105},[102,103790,103791],{"class":119},"np.zeros(",[102,103793,263],{"class":187},[102,103795,390],{"class":119},[102,103797,103798],{"class":104,"line":116},[102,103799,103563],{"class":278},[102,103801,103802],{"class":104,"line":123},[102,103803,103804],{"class":278},"输出结果：\n",[102,103806,103807],{"class":104,"line":130},[102,103808,103809],{"class":278},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[102,103811,103812],{"class":104,"line":136},[102,103813,103563],{"class":278},[14,103815,103816],{},"上方代码等价于：",[93,103818,103820],{"className":38243,"code":103819,"language":38245,"meta":98,"style":98},"np.zeros(shape=(10))#创建10个元素的0数组\n",[83,103821,103822],{"__ignoreMap":98},[102,103823,103824,103826,103829,103831,103833,103835,103837],{"class":104,"line":105},[102,103825,103791],{"class":119},[102,103827,103828],{"class":386},"shape",[102,103830,260],{"class":108},[102,103832,380],{"class":119},[102,103834,263],{"class":187},[102,103836,90636],{"class":119},[102,103838,103839],{"class":126},"#创建10个元素的0数组\n",[14,103841,103842],{},"也可以指定类型",[93,103844,103846],{"className":38243,"code":103845,"language":38245,"meta":98,"style":98},"#指定类型\nnp.zeros(5,dtype=int)\n",[83,103847,103848,103853],{"__ignoreMap":98},[102,103849,103850],{"class":104,"line":105},[102,103851,103852],{"class":126},"#指定类型\n",[102,103854,103855,103857,103859,103861,103863,103865,103867],{"class":104,"line":116},[102,103856,103791],{"class":119},[102,103858,9354],{"class":187},[102,103860,1618],{"class":119},[102,103862,101365],{"class":386},[102,103864,260],{"class":108},[102,103866,217],{"class":187},[102,103868,390],{"class":119},[14,103870,103871],{},"②创建二维数组",[93,103873,103875],{"className":38243,"code":103874,"language":38245,"meta":98,"style":98},"np.zeros((3,4),dtype=int)\n",[83,103876,103877],{"__ignoreMap":98},[102,103878,103879,103882,103884,103886,103888,103890,103892,103894,103896],{"class":104,"line":105},[102,103880,103881],{"class":119},"np.zeros((",[102,103883,7049],{"class":187},[102,103885,1618],{"class":119},[102,103887,9329],{"class":187},[102,103889,50121],{"class":119},[102,103891,101365],{"class":386},[102,103893,260],{"class":108},[102,103895,217],{"class":187},[102,103897,390],{"class":119},[14,103899,103900],{},"③创建三维数组",[93,103902,103904],{"className":38243,"code":103903,"language":38245,"meta":98,"style":98},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[83,103905,103906,103911],{"__ignoreMap":98},[102,103907,103908],{"class":104,"line":105},[102,103909,103910],{"class":126},"#创建三维数组\n",[102,103912,103913,103915,103917,103919,103921,103923,103925,103927,103929,103931,103933],{"class":104,"line":116},[102,103914,103881],{"class":119},[102,103916,7049],{"class":187},[102,103918,1618],{"class":119},[102,103920,9329],{"class":187},[102,103922,1618],{"class":119},[102,103924,9354],{"class":187},[102,103926,50121],{"class":119},[102,103928,101365],{"class":386},[102,103930,260],{"class":108},[102,103932,217],{"class":187},[102,103934,390],{"class":119},[14,103936,103937],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[93,103939,103941],{"className":38243,"code":103940,"language":38245,"meta":98,"style":98},"#使用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",[83,103942,103943,103948,103963,103968,103973,103995],{"__ignoreMap":98},[102,103944,103945],{"class":104,"line":105},[102,103946,103947],{"class":126},"#使用zeros_like将创建的一维数组变成全0的数组\n",[102,103949,103950,103952,103954,103956,103958,103960],{"class":104,"line":116},[102,103951,9275],{"class":119},[102,103953,260],{"class":108},[102,103955,100867],{"class":119},[102,103957,9329],{"class":187},[102,103959,4033],{"class":119},[102,103961,103962],{"class":126},"#这个得到的结果：一维数组0，1，2，3\n",[102,103964,103965],{"class":104,"line":123},[102,103966,103967],{"class":119},"np.zeros_like(a)\n",[102,103969,103970],{"class":104,"line":130},[102,103971,103972],{"class":126},"#使用zeros_like将创建的二维数组变成全0的数组\n",[102,103974,103975,103977,103979,103981,103983,103985,103987,103989,103991,103993],{"class":104,"line":136},[102,103976,101171],{"class":119},[102,103978,260],{"class":108},[102,103980,103292],{"class":119},[102,103982,39361],{"class":386},[102,103984,260],{"class":108},[102,103986,380],{"class":119},[102,103988,9329],{"class":187},[102,103990,1618],{"class":119},[102,103992,9354],{"class":187},[102,103994,38362],{"class":119},[102,103996,103997],{"class":104,"line":142},[102,103998,103999],{"class":119},"np.zeros_like(aa)\n",[48,104001,104003],{"id":104002},"_262-ones创建数组","2.6.2 ones()创建数组",[14,104005,104006],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[48,104008,104010],{"id":104009},"_263-empty创建数组","2.6.3 empty()创建数组",[14,104012,104013],{},"①empty()用法",[93,104015,104017],{"className":38243,"code":104016,"language":38245,"meta":98,"style":98},"numpy.empty(shape,dtype=float,order='c')\n",[83,104018,104019],{"__ignoreMap":98},[102,104020,104021,104024,104026,104028,104030,104032,104034,104036,104038],{"class":104,"line":105},[102,104022,104023],{"class":119},"numpy.empty(shape,",[102,104025,101365],{"class":386},[102,104027,260],{"class":108},[102,104029,9086],{"class":187},[102,104031,1618],{"class":119},[102,104033,103162],{"class":386},[102,104035,260],{"class":108},[102,104037,83893],{"class":278},[102,104039,390],{"class":119},[14,104041,104042],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,104044,104045],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,104047,104048],{},[6750,104049],{"alt":98,"src":104050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,104052,104053],{},"②empty()用法",[93,104055,104057],{"className":38243,"code":104056,"language":38245,"meta":98,"style":98},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[83,104058,104059,104080,104092,104113,104118],{"__ignoreMap":98},[102,104060,104061,104063,104065,104068,104070,104072,104074,104076,104078],{"class":104,"line":105},[102,104062,9867],{"class":119},[102,104064,260],{"class":108},[102,104066,104067],{"class":119},"np.empty(",[102,104069,263],{"class":187},[102,104071,1618],{"class":119},[102,104073,101365],{"class":386},[102,104075,260],{"class":108},[102,104077,217],{"class":187},[102,104079,390],{"class":119},[102,104081,104082,104084,104086,104088,104090],{"class":104,"line":116},[102,104083,3056],{"class":119},[102,104085,260],{"class":108},[102,104087,100867],{"class":119},[102,104089,9354],{"class":187},[102,104091,390],{"class":119},[102,104093,104094,104097,104099,104102,104104,104106,104109,104111],{"class":104,"line":123},[102,104095,104096],{"class":119},"np.add(",[102,104098,7044],{"class":187},[102,104100,104101],{"class":119},",x,",[102,104103,100919],{"class":386},[102,104105,260],{"class":108},[102,104107,104108],{"class":119},"y[:",[102,104110,9354],{"class":187},[102,104112,13466],{"class":119},[102,104114,104115],{"class":104,"line":130},[102,104116,104117],{"class":126},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[102,104119,104120],{"class":104,"line":136},[102,104121,104122],{"class":119},"y\n",[14,104124,20252],{},[14,104126,104127],{},[6750,104128],{"alt":98,"src":104129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[93,104131,104133],{"className":38243,"code":104132,"language":38245,"meta":98,"style":98},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[83,104134,104135,104151,104171,104186],{"__ignoreMap":98},[102,104136,104137,104139,104141,104143,104145,104147,104149],{"class":104,"line":105},[102,104138,3056],{"class":119},[102,104140,260],{"class":108},[102,104142,100867],{"class":119},[102,104144,7039],{"class":187},[102,104146,1618],{"class":119},[102,104148,9379],{"class":187},[102,104150,390],{"class":119},[102,104152,104153,104155,104157,104159,104161,104163,104165,104167,104169],{"class":104,"line":116},[102,104154,9867],{"class":119},[102,104156,260],{"class":108},[102,104158,104067],{"class":119},[102,104160,9354],{"class":187},[102,104162,1618],{"class":119},[102,104164,101365],{"class":386},[102,104166,260],{"class":108},[102,104168,217],{"class":187},[102,104170,390],{"class":119},[102,104172,104173,104176,104178,104180,104182,104184],{"class":104,"line":123},[102,104174,104175],{"class":119},"np.add(x,",[102,104177,7044],{"class":187},[102,104179,1618],{"class":119},[102,104181,100919],{"class":386},[102,104183,260],{"class":108},[102,104185,101314],{"class":119},[102,104187,104188],{"class":104,"line":130},[102,104189,104190],{"class":126},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,104192,104193],{},"③empty_like()",[14,104195,104196],{},[18,104197,104198,104199,104204],{},"创建一个",[18,104200,104201],{},[18,104202,104203],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,104206,104207,104210],{},[83,104208,104209],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,104212,104213],{},[6750,104214],{"alt":98,"src":104215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[48,104217,104219],{"id":104218},"_264-用法","2.6.4 ？？用法",[14,104221,104222],{},"当想查看一个函数的参数时，可以通过？？来实现",[93,104224,104226],{"className":38243,"code":104225,"language":38245,"meta":98,"style":98},"np.full??\n",[83,104227,104228],{"__ignoreMap":98},[102,104229,104230,104233],{"class":104,"line":105},[102,104231,104232],{"class":119},"np.full",[102,104234,104235],{"class":85268},"??\n",[48,104237,104239],{"id":104238},"_265-full创建数组","2.6.5 full()创建数组",[93,104241,104243],{"className":38243,"code":104242,"language":38245,"meta":98,"style":98},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[83,104244,104245,104250],{"__ignoreMap":98},[102,104246,104247],{"class":104,"line":105},[102,104248,104249],{"class":119},"full(shape,fill_value)\n",[102,104251,104252],{"class":104,"line":116},[102,104253,104254],{"class":119},"创建全为某个指定值的数组\n",[14,104256,102395],{},[93,104258,104260],{"className":38243,"code":104259,"language":38245,"meta":98,"style":98},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[83,104261,104262,104267],{"__ignoreMap":98},[102,104263,104264],{"class":104,"line":105},[102,104265,104266],{"class":126},"#创建一个一维数组,以20进行填充\n",[102,104268,104269,104272,104274,104276,104278],{"class":104,"line":116},[102,104270,104271],{"class":119},"np.full(",[102,104273,263],{"class":187},[102,104275,1618],{"class":119},[102,104277,5016],{"class":187},[102,104279,390],{"class":119},[14,104281,101156],{},[93,104283,104285],{"className":38243,"code":104284,"language":38245,"meta":98,"style":98},"#创建二维数组\nnp.full((3,5),11)\n",[83,104286,104287,104291],{"__ignoreMap":98},[102,104288,104289],{"class":104,"line":105},[102,104290,101812],{"class":126},[102,104292,104293,104296,104298,104300,104302,104304,104306],{"class":104,"line":116},[102,104294,104295],{"class":119},"np.full((",[102,104297,7049],{"class":187},[102,104299,1618],{"class":119},[102,104301,9354],{"class":187},[102,104303,50121],{"class":119},[102,104305,9502],{"class":187},[102,104307,390],{"class":119},[14,104309,104310],{},"③full_like用法",[14,104312,104313],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,104315,104316],{},"这里是指定填充而已",[93,104318,104320],{"className":38243,"code":104319,"language":38245,"meta":98,"style":98},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[83,104321,104322,104327,104351,104356],{"__ignoreMap":98},[102,104323,104324],{"class":104,"line":105},[102,104325,104326],{"class":126},"#创建一个指定形状数组\n",[102,104328,104329,104331,104333,104335,104337,104339,104341,104343,104345,104347,104349],{"class":104,"line":116},[102,104330,9275],{"class":119},[102,104332,260],{"class":108},[102,104334,100867],{"class":119},[102,104336,7039],{"class":187},[102,104338,1618],{"class":119},[102,104340,9360],{"class":187},[102,104342,100872],{"class":119},[102,104344,9329],{"class":187},[102,104346,1618],{"class":119},[102,104348,9453],{"class":187},[102,104350,390],{"class":119},[102,104352,104353],{"class":104,"line":123},[102,104354,104355],{"class":126},"#进行指定填充\n",[102,104357,104358,104361,104363],{"class":104,"line":130},[102,104359,104360],{"class":119},"np.full_like(a,",[102,104362,263],{"class":187},[102,104364,390],{"class":119},[14,104366,20252],{},[14,104368,104369],{},[6750,104370],{"alt":98,"src":104371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[48,104373,104375],{"id":104374},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[7601,104377,104379],{"id":104378},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[93,104381,104383],{"className":38243,"code":104382,"language":38245,"meta":98,"style":98},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[83,104384,104385,104402],{"__ignoreMap":98},[102,104386,104387,104390,104392,104394,104396,104398,104400],{"class":104,"line":105},[102,104388,104389],{"class":119},"np.eye(",[102,104391,9329],{"class":187},[102,104393,1618],{"class":119},[102,104395,101365],{"class":386},[102,104397,260],{"class":108},[102,104399,217],{"class":187},[102,104401,390],{"class":119},[102,104403,104404],{"class":104,"line":116},[102,104405,104406],{"class":126},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[7601,104408,104410],{"id":104409},"_2662-法2identity","2.6.6.2 法2：identity()",[93,104412,104414],{"className":38243,"code":104413,"language":38245,"meta":98,"style":98},"#identity()\nnp.identity(5,dtype=int)\n",[83,104415,104416,104421],{"__ignoreMap":98},[102,104417,104418],{"class":104,"line":105},[102,104419,104420],{"class":126},"#identity()\n",[102,104422,104423,104426,104428,104430,104432,104434,104436],{"class":104,"line":116},[102,104424,104425],{"class":119},"np.identity(",[102,104427,9354],{"class":187},[102,104429,1618],{"class":119},[102,104431,101365],{"class":386},[102,104433,260],{"class":108},[102,104435,217],{"class":187},[102,104437,390],{"class":119},[14,104439,104440],{},"两个函数是有区别的",[14,104442,104443],{},[6750,104444],{"alt":98,"src":104445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,104447,104448],{},[6750,104449],{"alt":98,"src":104450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[93,104452,104454],{"className":38243,"code":104453,"language":38245,"meta":98,"style":98},"# 创建一个 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",[83,104455,104456,104461,104473,104478,104483,104488,104493,104497,104502,104522,104526,104531,104536],{"__ignoreMap":98},[102,104457,104458],{"class":104,"line":105},[102,104459,104460],{"class":126},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[102,104462,104463,104465,104467,104469,104471],{"class":104,"line":116},[102,104464,104389],{"class":119},[102,104466,7049],{"class":187},[102,104468,2571],{"class":119},[102,104470,9329],{"class":187},[102,104472,390],{"class":119},[102,104474,104475],{"class":104,"line":123},[102,104476,104477],{"class":126},"# 输出:\n",[102,104479,104480],{"class":104,"line":130},[102,104481,104482],{"class":126},"# [[1. 0. 0. 0.]\n",[102,104484,104485],{"class":104,"line":136},[102,104486,104487],{"class":126},"#  [0. 1. 0. 0.]\n",[102,104489,104490],{"class":104,"line":142},[102,104491,104492],{"class":126},"#  [0. 0. 1. 0.]]\n",[102,104494,104495],{"class":104,"line":148},[102,104496,652],{"emptyLinePlaceholder":651},[102,104498,104499],{"class":104,"line":157},[102,104500,104501],{"class":126},"# 对角线向上偏移1\n",[102,104503,104504,104506,104508,104510,104512,104514,104516,104518,104520],{"class":104,"line":163},[102,104505,104389],{"class":119},[102,104507,7049],{"class":187},[102,104509,2571],{"class":119},[102,104511,9329],{"class":187},[102,104513,2571],{"class":119},[102,104515,9522],{"class":386},[102,104517,260],{"class":108},[102,104519,7039],{"class":187},[102,104521,390],{"class":119},[102,104523,104524],{"class":104,"line":175},[102,104525,104477],{"class":126},[102,104527,104528],{"class":104,"line":181},[102,104529,104530],{"class":126},"# [[0. 1. 0. 0.]\n",[102,104532,104533],{"class":104,"line":202},[102,104534,104535],{"class":126},"#  [0. 0. 1. 0.]\n",[102,104537,104538],{"class":104,"line":208},[102,104539,104540],{"class":126},"#  [0. 0. 0. 1.]]\n",[48,104542,104544],{"id":104543},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[93,104546,104548],{"className":38243,"code":104547,"language":38245,"meta":98,"style":98},"#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",[83,104549,104550,104555,104559,104564,104569,104574,104579,104584,104589,104594,104599],{"__ignoreMap":98},[102,104551,104552],{"class":104,"line":105},[102,104553,104554],{"class":126},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[102,104556,104557],{"class":104,"line":116},[102,104558,103563],{"class":278},[102,104560,104561],{"class":104,"line":123},[102,104562,104563],{"class":278},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[102,104565,104566],{"class":104,"line":130},[102,104567,104568],{"class":278},"参数介绍：\n",[102,104570,104571],{"class":104,"line":136},[102,104572,104573],{"class":278},"start：序列的起始值\n",[102,104575,104576],{"class":104,"line":142},[102,104577,104578],{"class":278},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[102,104580,104581],{"class":104,"line":148},[102,104582,104583],{"class":278},"num：要生长的等步长的样本数量，默认为50\n",[102,104585,104586],{"class":104,"line":157},[102,104587,104588],{"class":278},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[102,104590,104591],{"class":104,"line":163},[102,104592,104593],{"class":278},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[102,104595,104596],{"class":104,"line":175},[102,104597,104598],{"class":278},"dtype：ndarry的数据类型\n",[102,104600,104601],{"class":104,"line":181},[102,104602,103563],{"class":278},[14,104604,104605],{},[6750,104606],{"alt":98,"src":104607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,104609,104610],{},"这里num=是可以省略的",[14,104612,104613],{},"也就是下方两行代码结果是一模一样的",[93,104615,104617],{"className":38243,"code":104616,"language":38245,"meta":98,"style":98},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[83,104618,104619,104636],{"__ignoreMap":98},[102,104620,104621,104624,104626,104628,104630,104632,104634],{"class":104,"line":105},[102,104622,104623],{"class":119},"np.linspace(",[102,104625,7039],{"class":187},[102,104627,1618],{"class":119},[102,104629,9354],{"class":187},[102,104631,1618],{"class":119},[102,104633,9354],{"class":187},[102,104635,390],{"class":119},[102,104637,104638,104640,104642,104644,104646,104648,104650,104652,104654],{"class":104,"line":116},[102,104639,104623],{"class":119},[102,104641,7039],{"class":187},[102,104643,1618],{"class":119},[102,104645,9354],{"class":187},[102,104647,1618],{"class":119},[102,104649,10530],{"class":386},[102,104651,260],{"class":108},[102,104653,9354],{"class":187},[102,104655,390],{"class":119},[48,104657,104659],{"id":104658},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[93,104661,104663],{"className":38243,"code":104662,"language":38245,"meta":98,"style":98},"#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",[83,104664,104665,104670,104674,104679,104684,104689,104694,104698,104703,104708,104712],{"__ignoreMap":98},[102,104666,104667],{"class":104,"line":105},[102,104668,104669],{"class":126},"#logspace函数用于创建一个等比数列，格式如下：\n",[102,104671,104672],{"class":104,"line":116},[102,104673,103563],{"class":278},[102,104675,104676],{"class":104,"line":123},[102,104677,104678],{"class":278},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[102,104680,104681],{"class":104,"line":130},[102,104682,104683],{"class":278},"参数为：\n",[102,104685,104686],{"class":104,"line":136},[102,104687,104688],{"class":278},"start:序列的起始位置为：base**start\n",[102,104690,104691],{"class":104,"line":142},[102,104692,104693],{"class":278},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[102,104695,104696],{"class":104,"line":148},[102,104697,104583],{"class":278},[102,104699,104700],{"class":104,"line":157},[102,104701,104702],{"class":278},"endpoint：是否包含 stop 这个值，默认是 True\n",[102,104704,104705],{"class":104,"line":163},[102,104706,104707],{"class":278},"base：对数的底数，默认是 10（常见对数）\n",[102,104709,104710],{"class":104,"line":175},[102,104711,104598],{"class":278},[102,104713,104714],{"class":104,"line":181},[102,104715,103563],{"class":278},[14,104717,104718],{},[6750,104719],{"alt":98,"src":104720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,104722,104723],{},"logspace()函数中的num参数也是可以不写num=的",[14,104725,104726],{},"endpoint是不可以省略的",[8955,104728,104729],{},"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":98,"searchDepth":116,"depth":116,"links":104731},[104732,104736,104741,104745,104749,104750],{"id":103121,"depth":116,"text":103122,"children":104733},[104734,104735],{"id":103125,"depth":123,"text":103126},{"id":103198,"depth":123,"text":103199},{"id":103230,"depth":116,"text":103231,"children":104737},[104738,104739,104740],{"id":103234,"depth":123,"text":103235},{"id":103416,"depth":123,"text":103417},{"id":103494,"depth":123,"text":103495},{"id":103529,"depth":116,"text":103530,"children":104742},[104743,104744],{"id":103533,"depth":123,"text":103534},{"id":103590,"depth":123,"text":103591},{"id":103686,"depth":116,"text":103687,"children":104746},[104747,104748],{"id":103690,"depth":123,"text":103691},{"id":103702,"depth":123,"text":103703},{"id":103736,"depth":116,"text":103737},{"id":103773,"depth":116,"text":103774,"children":104751},[104752,104753,104754,104755,104756,104757,104758,104759],{"id":103777,"depth":123,"text":103778},{"id":104002,"depth":123,"text":104003},{"id":104009,"depth":123,"text":104010},{"id":104218,"depth":123,"text":104219},{"id":104238,"depth":123,"text":104239},{"id":104374,"depth":123,"text":104375},{"id":104543,"depth":123,"text":104544},{"id":104658,"depth":123,"text":104659},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":103113,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":104766,"title":104767,"body":104768,"description":31240,"extension":8978,"meta":104861,"navigation":651,"path":104862,"seo":104863,"stem":104864,"__hash__":104865},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":104769,"toc":104859},[104770,104773,104776,104779,104782,104785,104788,104791,104794,104797,104800,104803,104805,104808,104811,104816,104819,104822,104856],[10,104771,104767],{"id":104772},"_20魔法命令mprun",[14,104774,104775],{},"逐行分析数据内存的使用情况",[14,104777,104778],{},"语法格式：",[14,104780,104781],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,104783,104784],{},"分析结果列如下：",[14,104786,104787],{},"Line行号",[14,104789,104790],{},"Mem usage内存使用大小",[14,104792,104793],{},"increment内存增量",[14,104795,104796],{},"Line content代码内容",[14,104798,104799],{},"补充说明：",[14,104801,104802],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,104804,103068],{},[14,104806,104807],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,104809,104810],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,104812,104813],{},[6750,104814],{"alt":98,"src":104815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,104817,104818],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,104820,104821],{},"这时候需要重新加载模块",[93,104823,104825],{"className":38243,"code":104824,"language":38245,"meta":98,"style":98},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[83,104826,104827,104832,104839,104844],{"__ignoreMap":98},[102,104828,104829],{"class":104,"line":105},[102,104830,104831],{"class":126},"#重新加载模块\n",[102,104833,104834,104836],{"class":104,"line":116},[102,104835,38257],{"class":108},[102,104837,104838],{"class":119}," importlib\n",[102,104840,104841],{"class":104,"line":123},[102,104842,104843],{"class":119},"importlib.reload(mprun_test)\n",[102,104845,104846,104848,104851,104853],{"class":104,"line":130},[102,104847,9363],{"class":108},[102,104849,104850],{"class":119},"mprun ",[102,104852,2833],{"class":108},[102,104854,104855],{"class":119},"f mprun_test.fun_test mprun_test.fun_test()\n",[8955,104857,104858],{},"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":98,"searchDepth":116,"depth":116,"links":104860},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":104767,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":104867,"title":104868,"body":104869,"description":31240,"extension":8978,"meta":104886,"navigation":651,"path":104887,"seo":104888,"stem":104889,"__hash__":104890},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":104870,"toc":104884},[104871,104874,104879],[10,104872,104868],{"id":104873},"_3一维数组的索引和切片",[14,104875,104876],{},[6750,104877],{"alt":98,"src":104878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,104880,104881],{},[6750,104882],{"alt":98,"src":104883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":98,"searchDepth":116,"depth":116,"links":104885},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":104868,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":104892,"title":104893,"body":104894,"description":31240,"extension":8978,"meta":105377,"navigation":651,"path":105378,"seo":105379,"stem":105380,"__hash__":105381},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":104895,"toc":105375},[104896,104899,104902,104907,104940,104943,104981,104984,105018,105021,105126,105129,105166,105169,105270,105273,105324,105327,105369,105372],[10,104897,104893],{"id":104898},"_4二维数组的索引与切片",[14,104900,104901],{},"①获取指定单个元素",[14,104903,104904],{},[6750,104905],{"alt":98,"src":104906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[93,104908,104910],{"className":38243,"code":104909,"language":38245,"meta":98,"style":98},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[83,104911,104912,104917,104922,104927],{"__ignoreMap":98},[102,104913,104914],{"class":104,"line":105},[102,104915,104916],{"class":126},"#获取元素9\n",[102,104918,104919],{"class":104,"line":116},[102,104920,104921],{"class":126},"#先获取所在行，再获取所在列\n",[102,104923,104924],{"class":104,"line":123},[102,104925,104926],{"class":126},"#数组[行索引号，列索引号]\n",[102,104928,104929,104932,104934,104936,104938],{"class":104,"line":130},[102,104930,104931],{"class":119},"a[",[102,104933,7039],{"class":187},[102,104935,1618],{"class":119},[102,104937,7044],{"class":187},[102,104939,41111],{"class":119},[14,104941,104942],{},"②获取整行元素",[93,104944,104946],{"className":38243,"code":104945,"language":38245,"meta":98,"style":98},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[83,104947,104948,104953,104958,104966,104971],{"__ignoreMap":98},[102,104949,104950],{"class":104,"line":105},[102,104951,104952],{"class":126},"#获取整行 数组[行索引号]\n",[102,104954,104955],{"class":104,"line":116},[102,104956,104957],{"class":126},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[102,104959,104960,104962,104964],{"class":104,"line":123},[102,104961,104931],{"class":119},[102,104963,7044],{"class":187},[102,104965,41111],{"class":119},[102,104967,104968],{"class":104,"line":130},[102,104969,104970],{"class":126},"#也可以负索引获取一行\n",[102,104972,104973,104975,104977,104979],{"class":104,"line":136},[102,104974,104931],{"class":119},[102,104976,2833],{"class":108},[102,104978,7039],{"class":187},[102,104980,41111],{"class":119},[14,104982,104983],{},"③获取整列元素",[93,104985,104987],{"className":38243,"code":104986,"language":38245,"meta":98,"style":98},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[83,104988,104989,104994,105003,105008],{"__ignoreMap":98},[102,104990,104991],{"class":104,"line":105},[102,104992,104993],{"class":126},"#获取整列 数组名[:,列索引]\n",[102,104995,104996,104999,105001],{"class":104,"line":116},[102,104997,104998],{"class":119},"a[:,",[102,105000,7044],{"class":187},[102,105002,41111],{"class":119},[102,105004,105005],{"class":104,"line":123},[102,105006,105007],{"class":126},"#也可以负索引获取一列\n",[102,105009,105010,105012,105014,105016],{"class":104,"line":130},[102,105011,104998],{"class":119},[102,105013,2833],{"class":108},[102,105015,7039],{"class":187},[102,105017,41111],{"class":119},[14,105019,105020],{},"④部分行部分列的元素",[93,105022,105024],{"className":38243,"code":105023,"language":38245,"meta":98,"style":98},"#部分行部分列 数组名[行切片，列切片]\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",[83,105025,105026,105031,105041,105045,105049,105054,105059,105063,105075,105079,105083,105088,105093,105098,105103,105107,105112],{"__ignoreMap":98},[102,105027,105028],{"class":104,"line":105},[102,105029,105030],{"class":126},"#部分行部分列 数组名[行切片，列切片]\n",[102,105032,105033,105036,105038],{"class":104,"line":116},[102,105034,105035],{"class":119},"a[:",[102,105037,7044],{"class":187},[102,105039,105040],{"class":119},",:]\n",[102,105042,105043],{"class":104,"line":123},[102,105044,101429],{"class":126},[102,105046,105047],{"class":104,"line":130},[102,105048,101793],{"class":278},[102,105050,105051],{"class":104,"line":136},[102,105052,105053],{"class":278},"array([[ 1,  2,  3,  4,  5,  6],\n",[102,105055,105056],{"class":104,"line":142},[102,105057,105058],{"class":278},"       [ 7,  8,  9, 10, 11, 12]])\n",[102,105060,105061],{"class":104,"line":148},[102,105062,101793],{"class":278},[102,105064,105065,105067,105069,105071,105073],{"class":104,"line":157},[102,105066,104998],{"class":119},[102,105068,7039],{"class":187},[102,105070,9881],{"class":119},[102,105072,9329],{"class":187},[102,105074,41111],{"class":119},[102,105076,105077],{"class":104,"line":163},[102,105078,101429],{"class":126},[102,105080,105081],{"class":104,"line":175},[102,105082,101793],{"class":278},[102,105084,105085],{"class":104,"line":181},[102,105086,105087],{"class":278},"array([[ 2,  3,  4],\n",[102,105089,105090],{"class":104,"line":202},[102,105091,105092],{"class":278},"       [ 8,  9, 10],\n",[102,105094,105095],{"class":104,"line":208},[102,105096,105097],{"class":278},"       [14, 15, 16],\n",[102,105099,105100],{"class":104,"line":214},[102,105101,105102],{"class":278},"       [20, 21, 22]])\n",[102,105104,105105],{"class":104,"line":225},[102,105106,101793],{"class":278},[102,105108,105109],{"class":104,"line":230},[102,105110,105111],{"class":126},"#对列行同时进行切片，使用了step参数\n",[102,105113,105114,105117,105119,105122,105124],{"class":104,"line":236},[102,105115,105116],{"class":119},"a[::",[102,105118,7044],{"class":187},[102,105120,105121],{"class":119},",::",[102,105123,7044],{"class":187},[102,105125,41111],{"class":119},[14,105127,105128],{},"⑤同时获取两个元素",[93,105130,105132],{"className":38243,"code":105131,"language":38245,"meta":98,"style":98},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[83,105133,105134,105139,105144],{"__ignoreMap":98},[102,105135,105136],{"class":104,"line":105},[102,105137,105138],{"class":126},"#同时获取第三行第二列，第四行第一列\n",[102,105140,105141],{"class":104,"line":116},[102,105142,105143],{"class":126},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[102,105145,105146,105149,105151,105153,105155,105157,105159,105161,105163],{"class":104,"line":123},[102,105147,105148],{"class":119},"a[(",[102,105150,7044],{"class":187},[102,105152,1618],{"class":119},[102,105154,7049],{"class":187},[102,105156,50112],{"class":119},[102,105158,7039],{"class":187},[102,105160,1618],{"class":119},[102,105162,8423],{"class":187},[102,105164,105165],{"class":119},")]\n",[14,105167,105168],{},"⑥切片，对行进行反向获取",[93,105170,105172],{"className":38243,"code":105171,"language":38245,"meta":98,"style":98},"#切片 对所有行进行反向获取\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",[83,105173,105174,105179,105189,105193,105197,105202,105207,105212,105217,105221,105226,105242,105246,105251,105256,105261,105266],{"__ignoreMap":98},[102,105175,105176],{"class":104,"line":105},[102,105177,105178],{"class":126},"#切片 对所有行进行反向获取\n",[102,105180,105181,105183,105185,105187],{"class":104,"line":116},[102,105182,105116],{"class":119},[102,105184,2833],{"class":108},[102,105186,7039],{"class":187},[102,105188,41111],{"class":119},[102,105190,105191],{"class":104,"line":123},[102,105192,101429],{"class":126},[102,105194,105195],{"class":104,"line":130},[102,105196,101793],{"class":278},[102,105198,105199],{"class":104,"line":136},[102,105200,105201],{"class":278},"array([[19, 20, 21, 22, 23, 24],\n",[102,105203,105204],{"class":104,"line":142},[102,105205,105206],{"class":278},"       [13, 14, 15, 16, 17, 18],\n",[102,105208,105209],{"class":104,"line":148},[102,105210,105211],{"class":278},"       [ 7,  8,  9, 10, 11, 12],\n",[102,105213,105214],{"class":104,"line":157},[102,105215,105216],{"class":278},"       [ 1,  2,  3,  4,  5,  6]])\n",[102,105218,105219],{"class":104,"line":163},[102,105220,101793],{"class":278},[102,105222,105223],{"class":104,"line":175},[102,105224,105225],{"class":126},"#对行列都进行反向切片获取\n",[102,105227,105228,105230,105232,105234,105236,105238,105240],{"class":104,"line":181},[102,105229,105116],{"class":119},[102,105231,2833],{"class":108},[102,105233,7039],{"class":187},[102,105235,105121],{"class":119},[102,105237,2833],{"class":108},[102,105239,7039],{"class":187},[102,105241,41111],{"class":119},[102,105243,105244],{"class":104,"line":202},[102,105245,101793],{"class":278},[102,105247,105248],{"class":104,"line":208},[102,105249,105250],{"class":278},"array([[24, 23, 22, 21, 20, 19],\n",[102,105252,105253],{"class":104,"line":214},[102,105254,105255],{"class":278},"       [18, 17, 16, 15, 14, 13],\n",[102,105257,105258],{"class":104,"line":225},[102,105259,105260],{"class":278},"       [12, 11, 10,  9,  8,  7],\n",[102,105262,105263],{"class":104,"line":230},[102,105264,105265],{"class":278},"       [ 6,  5,  4,  3,  2,  1]])\n",[102,105267,105268],{"class":104,"line":236},[102,105269,101793],{"class":278},[14,105271,105272],{},"⑦修改元素",[93,105274,105276],{"className":38243,"code":105275,"language":38245,"meta":98,"style":98},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[83,105277,105278,105283,105301,105306],{"__ignoreMap":98},[102,105279,105280],{"class":104,"line":105},[102,105281,105282],{"class":126},"#获取前两行和前两列\n",[102,105284,105285,105288,105290,105292,105294,105297,105299],{"class":104,"line":116},[102,105286,105287],{"class":119},"sub_a",[102,105289,260],{"class":108},[102,105291,105035],{"class":119},[102,105293,7044],{"class":187},[102,105295,105296],{"class":119},",:",[102,105298,7044],{"class":187},[102,105300,41111],{"class":119},[102,105302,105303],{"class":104,"line":123},[102,105304,105305],{"class":126},"#修改sub_a第一个元素的值\n",[102,105307,105308,105311,105313,105315,105317,105319,105321],{"class":104,"line":130},[102,105309,105310],{"class":119},"sub_a[",[102,105312,8423],{"class":187},[102,105314,1618],{"class":119},[102,105316,8423],{"class":187},[102,105318,9961],{"class":119},[102,105320,260],{"class":108},[102,105322,105323],{"class":187},"100\n",[14,105325,105326],{},"⑧数组复制copy()",[93,105328,105330],{"className":38243,"code":105329,"language":38245,"meta":98,"style":98},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[83,105331,105332,105337,105347,105352],{"__ignoreMap":98},[102,105333,105334],{"class":104,"line":105},[102,105335,105336],{"class":126},"#数组复制\n",[102,105338,105339,105342,105344],{"class":104,"line":116},[102,105340,105341],{"class":119},"copy_a",[102,105343,260],{"class":108},[102,105345,105346],{"class":119},"np.copy(sub_a)\n",[102,105348,105349],{"class":104,"line":123},[102,105350,105351],{"class":126},"#修改copy_a后不影响原数组\n",[102,105353,105354,105357,105359,105361,105363,105365,105367],{"class":104,"line":130},[102,105355,105356],{"class":119},"copy_a[",[102,105358,8423],{"class":187},[102,105360,1618],{"class":119},[102,105362,8423],{"class":187},[102,105364,9961],{"class":119},[102,105366,260],{"class":108},[102,105368,105323],{"class":187},[14,105370,105371],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[8955,105373,105374],{},"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":98,"searchDepth":116,"depth":116,"links":105376},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":104893,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":105383,"title":105384,"body":105385,"description":31240,"extension":8978,"meta":105877,"navigation":651,"path":105878,"seo":105879,"stem":105880,"__hash__":105881},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":105386,"toc":105869},[105387,105390,105394,105397,105400,105453,105456,105481,105484,105503,105523,105526,105542,105546,105592,105596,105638,105642,105645,105648,105651,105654,105657,105719,105779,105783,105786,105843,105847,105852,105861,105866],[10,105388,105384],{"id":105389},"_5改变数组的维度",[43,105391,105393],{"id":105392},"_51-使用reshape","5.1 使用reshape()",[14,105395,105396],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,105398,105399],{},"①一维数组转换为二维数组",[93,105401,105403],{"className":38243,"code":105402,"language":38245,"meta":98,"style":98},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[83,105404,105405,105421,105426,105431,105436],{"__ignoreMap":98},[102,105406,105407,105409,105411,105413,105415,105417,105419],{"class":104,"line":105},[102,105408,9275],{"class":119},[102,105410,260],{"class":108},[102,105412,100867],{"class":119},[102,105414,7039],{"class":187},[102,105416,1618],{"class":119},[102,105418,9551],{"class":187},[102,105420,390],{"class":119},[102,105422,105423],{"class":104,"line":116},[102,105424,105425],{"class":126},"#将一维数组进行转换\n",[102,105427,105428],{"class":104,"line":123},[102,105429,105430],{"class":126},"#注意点：元素个数不可以变\n",[102,105432,105433],{"class":104,"line":130},[102,105434,105435],{"class":126},"#转换维度要保持一致，不一致就异常！！！\n",[102,105437,105438,105440,105442,105445,105447,105449,105451],{"class":104,"line":136},[102,105439,101171],{"class":119},[102,105441,260],{"class":108},[102,105443,105444],{"class":119},"a.reshape(",[102,105446,7044],{"class":187},[102,105448,1618],{"class":119},[102,105450,9379],{"class":187},[102,105452,390],{"class":119},[14,105454,105455],{},"②一维数组转换为三维数组",[93,105457,105459],{"className":38243,"code":105458,"language":38245,"meta":98,"style":98},"aaa=a.reshape(2,3,2)\n",[83,105460,105461],{"__ignoreMap":98},[102,105462,105463,105465,105467,105469,105471,105473,105475,105477,105479],{"class":104,"line":105},[102,105464,103386],{"class":119},[102,105466,260],{"class":108},[102,105468,105444],{"class":119},[102,105470,7044],{"class":187},[102,105472,1618],{"class":119},[102,105474,7049],{"class":187},[102,105476,1618],{"class":119},[102,105478,7044],{"class":187},[102,105480,390],{"class":119},[14,105482,105483],{},"③二维数组转化为一维数组",[93,105485,105487],{"className":38243,"code":105486,"language":38245,"meta":98,"style":98},"#知道元素个数：\naa.reshape(12)\n",[83,105488,105489,105494],{"__ignoreMap":98},[102,105490,105491],{"class":104,"line":105},[102,105492,105493],{"class":126},"#知道元素个数：\n",[102,105495,105496,105499,105501],{"class":104,"line":116},[102,105497,105498],{"class":119},"aa.reshape(",[102,105500,9527],{"class":187},[102,105502,390],{"class":119},[93,105504,105506],{"className":38243,"code":105505,"language":38245,"meta":98,"style":98},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[83,105507,105508,105513],{"__ignoreMap":98},[102,105509,105510],{"class":104,"line":105},[102,105511,105512],{"class":126},"#不知道元素个数，参数传递-1\n",[102,105514,105515,105517,105519,105521],{"class":104,"line":116},[102,105516,105498],{"class":119},[102,105518,2833],{"class":108},[102,105520,7039],{"class":187},[102,105522,390],{"class":119},[14,105524,105525],{},"④三维数组转换为一维数组",[93,105527,105529],{"className":38243,"code":105528,"language":38245,"meta":98,"style":98},"aaa.reshape(-1)\n",[83,105530,105531],{"__ignoreMap":98},[102,105532,105533,105536,105538,105540],{"class":104,"line":105},[102,105534,105535],{"class":119},"aaa.reshape(",[102,105537,2833],{"class":108},[102,105539,7039],{"class":187},[102,105541,390],{"class":119},[43,105543,105545],{"id":105544},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[93,105547,105549],{"className":38243,"code":105548,"language":38245,"meta":98,"style":98},"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",[83,105550,105551,105578,105583,105587],{"__ignoreMap":98},[102,105552,105553,105555,105557,105559,105561,105563,105565,105567,105569,105571,105573,105575],{"class":104,"line":105},[102,105554,101171],{"class":119},[102,105556,260],{"class":108},[102,105558,100867],{"class":119},[102,105560,7039],{"class":187},[102,105562,1618],{"class":119},[102,105564,9551],{"class":187},[102,105566,100872],{"class":119},[102,105568,7044],{"class":187},[102,105570,1618],{"class":119},[102,105572,9379],{"class":187},[102,105574,4033],{"class":119},[102,105576,105577],{"class":126},"#转换为2行6列的数组\n",[102,105579,105580],{"class":104,"line":116},[102,105581,105582],{"class":119},"aa.revel()\n",[102,105584,105585],{"class":104,"line":123},[102,105586,101429],{"class":126},[102,105588,105589],{"class":104,"line":130},[102,105590,105591],{"class":126},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[43,105593,105595],{"id":105594},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[93,105597,105599],{"className":38243,"code":105598,"language":38245,"meta":98,"style":98},"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",[83,105600,105601,105625,105630,105634],{"__ignoreMap":98},[102,105602,105603,105605,105607,105609,105611,105613,105615,105617,105619,105621,105623],{"class":104,"line":105},[102,105604,101171],{"class":119},[102,105606,260],{"class":108},[102,105608,100867],{"class":119},[102,105610,7039],{"class":187},[102,105612,1618],{"class":119},[102,105614,9551],{"class":187},[102,105616,100872],{"class":119},[102,105618,7044],{"class":187},[102,105620,1618],{"class":119},[102,105622,9379],{"class":187},[102,105624,390],{"class":119},[102,105626,105627],{"class":104,"line":116},[102,105628,105629],{"class":119},"aa.flatten()\n",[102,105631,105632],{"class":104,"line":123},[102,105633,101429],{"class":126},[102,105635,105636],{"class":104,"line":130},[102,105637,105591],{"class":126},[43,105639,105641],{"id":105640},"_54-使用resize","5.4 使用resize()",[14,105643,105644],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,105646,105647],{},"通过resize方法可以改变数组的维度",[14,105649,105650],{},"#resize修改数组维度",[14,105652,105653],{},"#以元组的形式指定形状",[14,105655,105656],{},"#改变的是原数组",[93,105658,105660],{"className":38243,"code":105659,"language":38245,"meta":98,"style":98},"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",[83,105661,105662,105678,105698,105711,105715],{"__ignoreMap":98},[102,105663,105664,105666,105668,105670,105672,105674,105676],{"class":104,"line":105},[102,105665,9275],{"class":119},[102,105667,260],{"class":108},[102,105669,100867],{"class":119},[102,105671,7039],{"class":187},[102,105673,1618],{"class":119},[102,105675,9551],{"class":187},[102,105677,390],{"class":119},[102,105679,105680,105683,105685,105687,105689,105691,105693,105695],{"class":104,"line":116},[102,105681,105682],{"class":119},"a.shape",[102,105684,260],{"class":108},[102,105686,380],{"class":119},[102,105688,7044],{"class":187},[102,105690,1618],{"class":119},[102,105692,9379],{"class":187},[102,105694,4033],{"class":119},[102,105696,105697],{"class":126},"#改变了原数组\n",[102,105699,105700,105702,105704,105707,105709],{"class":104,"line":123},[102,105701,9275],{"class":119},[102,105703,260],{"class":108},[102,105705,105706],{"class":119},"resize((",[102,105708,9527],{"class":187},[102,105710,38362],{"class":119},[102,105712,105713],{"class":104,"line":130},[102,105714,101429],{"class":126},[102,105716,105717],{"class":104,"line":136},[102,105718,105591],{"class":126},[93,105720,105722],{"className":38243,"code":105721,"language":38245,"meta":98,"style":98},"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",[83,105723,105724,105737,105741,105745,105750,105755,105760,105765,105770,105775],{"__ignoreMap":98},[102,105725,105726,105729,105731,105733,105735],{"class":104,"line":105},[102,105727,105728],{"class":119},"a.resize((",[102,105730,9379],{"class":187},[102,105732,1618],{"class":119},[102,105734,7044],{"class":187},[102,105736,38362],{"class":119},[102,105738,105739],{"class":104,"line":116},[102,105740,101429],{"class":126},[102,105742,105743],{"class":104,"line":123},[102,105744,101793],{"class":278},[102,105746,105747],{"class":104,"line":130},[102,105748,105749],{"class":278},"array([[ 1,  2],\n",[102,105751,105752],{"class":104,"line":136},[102,105753,105754],{"class":278},"       [ 3,  4],\n",[102,105756,105757],{"class":104,"line":142},[102,105758,105759],{"class":278},"       [ 5,  6],\n",[102,105761,105762],{"class":104,"line":148},[102,105763,105764],{"class":278},"       [ 7,  8],\n",[102,105766,105767],{"class":104,"line":157},[102,105768,105769],{"class":278},"       [ 9, 10],\n",[102,105771,105772],{"class":104,"line":163},[102,105773,105774],{"class":278},"       [11, 12]])\n",[102,105776,105777],{"class":104,"line":175},[102,105778,101793],{"class":278},[43,105780,105782],{"id":105781},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,105784,105785],{},"改变了原数组",[93,105787,105789],{"className":38243,"code":105788,"language":38245,"meta":98,"style":98},"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",[83,105790,105791,105807,105823,105827,105831,105835,105839],{"__ignoreMap":98},[102,105792,105793,105795,105797,105799,105801,105803,105805],{"class":104,"line":105},[102,105794,9275],{"class":119},[102,105796,260],{"class":108},[102,105798,100867],{"class":119},[102,105800,7039],{"class":187},[102,105802,1618],{"class":119},[102,105804,9551],{"class":187},[102,105806,390],{"class":119},[102,105808,105809,105811,105813,105815,105817,105819,105821],{"class":104,"line":116},[102,105810,105682],{"class":119},[102,105812,260],{"class":108},[102,105814,380],{"class":119},[102,105816,7044],{"class":187},[102,105818,1618],{"class":119},[102,105820,9379],{"class":187},[102,105822,390],{"class":119},[102,105824,105825],{"class":104,"line":123},[102,105826,101429],{"class":126},[102,105828,105829],{"class":104,"line":130},[102,105830,101793],{"class":278},[102,105832,105833],{"class":104,"line":136},[102,105834,105053],{"class":278},[102,105836,105837],{"class":104,"line":142},[102,105838,105058],{"class":278},[102,105840,105841],{"class":104,"line":148},[102,105842,101793],{"class":278},[43,105844,105846],{"id":105845},"_56-重要比较","5.6 重要比较：",[14,105848,105849],{},[6750,105850],{"alt":98,"src":105851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,105853,105854,105855,105857,105858,105860],{},"口诀：NumPy 函数要么用 ",[83,105856,103828],{},"，要么用 ",[83,105859,39361],{},"，创建结构用 shape，造数据用 size",[14,105862,105863],{},[6750,105864],{"alt":98,"src":105865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[8955,105867,105868],{},"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":98,"searchDepth":116,"depth":116,"links":105870},[105871,105872,105873,105874,105875,105876],{"id":105392,"depth":116,"text":105393},{"id":105544,"depth":116,"text":105545},{"id":105594,"depth":116,"text":105595},{"id":105640,"depth":116,"text":105641},{"id":105781,"depth":116,"text":105782},{"id":105845,"depth":116,"text":105846},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":105384,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":105883,"title":105884,"body":105885,"description":31240,"extension":8978,"meta":106957,"navigation":651,"path":106958,"seo":106959,"stem":106960,"__hash__":106961},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":105886,"toc":106951},[105887,105890,105894,105897,105900,105903,105968,105971,106011,106014,106096,106099,106104,106126,106128,106133,106138,106141,106144,106299,106302,106504,106508,106511,106514,106582,106584,106589,106592,106595,106675,106679,106682,106684,106757,106759,106764,106766,106846,106850,106853,106856,106859,106862,106865,106868,106948],[10,105888,105884],{"id":105889},"_6数组的拼接",[43,105891,105893],{"id":105892},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,105895,105896],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,105898,105899],{},"函数内部传两个数列构成的数列或者元组",[14,105901,105902],{},"①一维数组的拼接",[93,105904,105906],{"className":38243,"code":105905,"language":38245,"meta":98,"style":98},"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",[83,105907,105908,105928,105948,105953,105958,105963],{"__ignoreMap":98},[102,105909,105910,105912,105914,105916,105918,105920,105922,105924,105926],{"class":104,"line":105},[102,105911,9275],{"class":119},[102,105913,260],{"class":108},[102,105915,100889],{"class":119},[102,105917,7039],{"class":187},[102,105919,1618],{"class":119},[102,105921,7044],{"class":187},[102,105923,1618],{"class":119},[102,105925,7049],{"class":187},[102,105927,13466],{"class":119},[102,105929,105930,105932,105934,105936,105938,105940,105942,105944,105946],{"class":104,"line":116},[102,105931,9300],{"class":119},[102,105933,260],{"class":108},[102,105935,100889],{"class":119},[102,105937,9329],{"class":187},[102,105939,1618],{"class":119},[102,105941,9354],{"class":187},[102,105943,1618],{"class":119},[102,105945,9379],{"class":187},[102,105947,13466],{"class":119},[102,105949,105950],{"class":104,"line":123},[102,105951,105952],{"class":126},"#调用concatenate进行数组拼接\n",[102,105954,105955],{"class":104,"line":130},[102,105956,105957],{"class":119},"np.concatenate((a,b))\n",[102,105959,105960],{"class":104,"line":136},[102,105961,105962],{"class":126},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[102,105964,105965],{"class":104,"line":142},[102,105966,105967],{"class":126},"#np.concatenate([a,b])\n",[14,105969,105970],{},"②一维多个数组拼接",[93,105972,105974],{"className":38243,"code":105973,"language":38245,"meta":98,"style":98},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[83,105975,105976,105981,106001,106006],{"__ignoreMap":98},[102,105977,105978],{"class":104,"line":105},[102,105979,105980],{"class":126},"#也可以多个数组进行拼接\n",[102,105982,105983,105985,105987,105989,105991,105993,105995,105997,105999],{"class":104,"line":116},[102,105984,2794],{"class":119},[102,105986,260],{"class":108},[102,105988,100889],{"class":119},[102,105990,263],{"class":187},[102,105992,1618],{"class":119},[102,105994,9502],{"class":187},[102,105996,1618],{"class":119},[102,105998,9551],{"class":187},[102,106000,13466],{"class":119},[102,106002,106003],{"class":104,"line":123},[102,106004,106005],{"class":119},"c\n",[102,106007,106008],{"class":104,"line":130},[102,106009,106010],{"class":119},"np.concatenate((a,b,c))\n",[14,106012,106013],{},"③二维数组拼接",[93,106015,106017],{"className":38243,"code":106016,"language":38245,"meta":98,"style":98},"#二维数组使用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",[83,106018,106019,106024,106048,106073,106078,106083],{"__ignoreMap":98},[102,106020,106021],{"class":104,"line":105},[102,106022,106023],{"class":126},"#二维数组使用concatenate进行拼接\n",[102,106025,106026,106028,106030,106032,106034,106036,106038,106040,106042,106044,106046],{"class":104,"line":116},[102,106027,101171],{"class":119},[102,106029,260],{"class":108},[102,106031,100867],{"class":119},[102,106033,7039],{"class":187},[102,106035,1618],{"class":119},[102,106037,9551],{"class":187},[102,106039,100872],{"class":119},[102,106041,7049],{"class":187},[102,106043,1618],{"class":119},[102,106045,9329],{"class":187},[102,106047,390],{"class":119},[102,106049,106050,106053,106055,106057,106059,106061,106063,106065,106067,106069,106071],{"class":104,"line":123},[102,106051,106052],{"class":119},"bb",[102,106054,260],{"class":108},[102,106056,100867],{"class":119},[102,106058,9372],{"class":187},[102,106060,1618],{"class":119},[102,106062,9669],{"class":187},[102,106064,100872],{"class":119},[102,106066,7049],{"class":187},[102,106068,1618],{"class":119},[102,106070,9329],{"class":187},[102,106072,390],{"class":119},[102,106074,106075],{"class":104,"line":130},[102,106076,106077],{"class":126},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[102,106079,106080],{"class":104,"line":136},[102,106081,106082],{"class":126},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[102,106084,106085,106088,106090,106092,106094],{"class":104,"line":142},[102,106086,106087],{"class":119},"np.concatenate((aa,bb),",[102,106089,55379],{"class":386},[102,106091,260],{"class":108},[102,106093,8423],{"class":187},[102,106095,390],{"class":119},[14,106097,106098],{},"结果：",[14,106100,106101],{},[6750,106102],{"alt":98,"src":106103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[93,106105,106107],{"className":38243,"code":106106,"language":38245,"meta":98,"style":98},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[83,106108,106109,106114],{"__ignoreMap":98},[102,106110,106111],{"class":104,"line":105},[102,106112,106113],{"class":126},"#指定axis为1进行拼接\n",[102,106115,106116,106118,106120,106122,106124],{"class":104,"line":116},[102,106117,106087],{"class":119},[102,106119,55379],{"class":386},[102,106121,260],{"class":108},[102,106123,7039],{"class":187},[102,106125,390],{"class":119},[14,106127,106098],{},[14,106129,106130],{},[6750,106131],{"alt":98,"src":106132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,106134,106135],{},[18,106136,106137],{},"二维数组总结：0竖着方向，1横着方向",[14,106139,106140],{},"④三维数组拼接",[14,106142,106143],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[93,106145,106147],{"className":38243,"code":106146,"language":38245,"meta":98,"style":98},"#两个三行六列\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",[83,106148,106149,106154,106182,106212,106217,106234,106239,106244,106249,106266,106271,106276,106281,106294],{"__ignoreMap":98},[102,106150,106151],{"class":104,"line":105},[102,106152,106153],{"class":126},"#两个三行六列\n",[102,106155,106156,106158,106160,106162,106164,106166,106168,106170,106172,106174,106176,106178,106180],{"class":104,"line":116},[102,106157,103386],{"class":119},[102,106159,260],{"class":108},[102,106161,100867],{"class":119},[102,106163,7039],{"class":187},[102,106165,1618],{"class":119},[102,106167,9360],{"class":187},[102,106169,100872],{"class":119},[102,106171,7044],{"class":187},[102,106173,1618],{"class":119},[102,106175,7049],{"class":187},[102,106177,1618],{"class":119},[102,106179,9379],{"class":187},[102,106181,390],{"class":119},[102,106183,106184,106187,106189,106191,106193,106195,106198,106200,106202,106204,106206,106208,106210],{"class":104,"line":123},[102,106185,106186],{"class":119},"bbb",[102,106188,260],{"class":108},[102,106190,100867],{"class":119},[102,106192,9372],{"class":187},[102,106194,1618],{"class":119},[102,106196,106197],{"class":187},"137",[102,106199,100872],{"class":119},[102,106201,7044],{"class":187},[102,106203,1618],{"class":119},[102,106205,7049],{"class":187},[102,106207,1618],{"class":119},[102,106209,9379],{"class":187},[102,106211,390],{"class":119},[102,106213,106214],{"class":104,"line":130},[102,106215,106216],{"class":126},"#axis=0\n",[102,106218,106219,106221,106223,106226,106228,106230,106232],{"class":104,"line":136},[102,106220,9720],{"class":119},[102,106222,260],{"class":108},[102,106224,106225],{"class":119},"np.concatenate((aaa,bbb),",[102,106227,55379],{"class":386},[102,106229,260],{"class":108},[102,106231,8423],{"class":187},[102,106233,390],{"class":119},[102,106235,106236],{"class":104,"line":142},[102,106237,106238],{"class":119},"s.shape\n",[102,106240,106241],{"class":104,"line":148},[102,106242,106243],{"class":126},"#输出：(4,3,6)\n",[102,106245,106246],{"class":104,"line":157},[102,106247,106248],{"class":126},"#axis=1\n",[102,106250,106251,106254,106256,106258,106260,106262,106264],{"class":104,"line":163},[102,106252,106253],{"class":119},"ss",[102,106255,260],{"class":108},[102,106257,106225],{"class":119},[102,106259,55379],{"class":386},[102,106261,260],{"class":108},[102,106263,7039],{"class":187},[102,106265,390],{"class":119},[102,106267,106268],{"class":104,"line":175},[102,106269,106270],{"class":119},"ss.shape\n",[102,106272,106273],{"class":104,"line":181},[102,106274,106275],{"class":126},"#输出：(2,6,6)\n",[102,106277,106278],{"class":104,"line":202},[102,106279,106280],{"class":126},"#axis=2\n",[102,106282,106283,106285,106287,106289,106291],{"class":104,"line":208},[102,106284,106225],{"class":119},[102,106286,55379],{"class":386},[102,106288,260],{"class":108},[102,106290,7044],{"class":187},[102,106292,106293],{"class":119},").shape\n",[102,106295,106296],{"class":104,"line":214},[102,106297,106298],{"class":126},"#输出：（2，3，12）\n",[14,106300,106301],{},"⑤四维数组拼接",[93,106303,106305],{"className":38243,"code":106304,"language":38245,"meta":98,"style":98},"#两个三行六列\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",[83,106306,106307,106311,106339,106367,106392,106418,106422,106435,106440,106444,106456,106461,106465,106477,106482,106487,106499],{"__ignoreMap":98},[102,106308,106309],{"class":104,"line":105},[102,106310,106153],{"class":126},[102,106312,106313,106315,106317,106319,106321,106323,106325,106327,106329,106331,106333,106335,106337],{"class":104,"line":116},[102,106314,103386],{"class":119},[102,106316,260],{"class":108},[102,106318,100867],{"class":119},[102,106320,7039],{"class":187},[102,106322,1618],{"class":119},[102,106324,9360],{"class":187},[102,106326,100872],{"class":119},[102,106328,7044],{"class":187},[102,106330,1618],{"class":119},[102,106332,7049],{"class":187},[102,106334,1618],{"class":119},[102,106336,9379],{"class":187},[102,106338,390],{"class":119},[102,106340,106341,106343,106345,106347,106349,106351,106353,106355,106357,106359,106361,106363,106365],{"class":104,"line":123},[102,106342,106186],{"class":119},[102,106344,260],{"class":108},[102,106346,100867],{"class":119},[102,106348,9372],{"class":187},[102,106350,1618],{"class":119},[102,106352,106197],{"class":187},[102,106354,100872],{"class":119},[102,106356,7044],{"class":187},[102,106358,1618],{"class":119},[102,106360,7049],{"class":187},[102,106362,1618],{"class":119},[102,106364,9379],{"class":187},[102,106366,390],{"class":119},[102,106368,106369,106372,106374,106376,106378,106380,106382,106384,106386,106388,106390],{"class":104,"line":130},[102,106370,106371],{"class":119},"aaaa",[102,106373,260],{"class":108},[102,106375,105535],{"class":119},[102,106377,7044],{"class":187},[102,106379,1618],{"class":119},[102,106381,7049],{"class":187},[102,106383,1618],{"class":119},[102,106385,7049],{"class":187},[102,106387,1618],{"class":119},[102,106389,7044],{"class":187},[102,106391,390],{"class":119},[102,106393,106394,106397,106399,106402,106404,106406,106408,106410,106412,106414,106416],{"class":104,"line":136},[102,106395,106396],{"class":119},"bbbb",[102,106398,260],{"class":108},[102,106400,106401],{"class":119},"bbb.reshape(",[102,106403,7044],{"class":187},[102,106405,1618],{"class":119},[102,106407,7049],{"class":187},[102,106409,1618],{"class":119},[102,106411,7049],{"class":187},[102,106413,1618],{"class":119},[102,106415,7044],{"class":187},[102,106417,390],{"class":119},[102,106419,106420],{"class":104,"line":142},[102,106421,106216],{"class":126},[102,106423,106424,106427,106429,106431,106433],{"class":104,"line":148},[102,106425,106426],{"class":119},"np.concatenate((aaaa,bbbb),",[102,106428,55379],{"class":386},[102,106430,260],{"class":108},[102,106432,8423],{"class":187},[102,106434,106293],{"class":119},[102,106436,106437],{"class":104,"line":157},[102,106438,106439],{"class":126},"#结果：（4，3，3，2）\n",[102,106441,106442],{"class":104,"line":163},[102,106443,106248],{"class":126},[102,106445,106446,106448,106450,106452,106454],{"class":104,"line":175},[102,106447,106426],{"class":119},[102,106449,55379],{"class":386},[102,106451,260],{"class":108},[102,106453,7039],{"class":187},[102,106455,106293],{"class":119},[102,106457,106458],{"class":104,"line":181},[102,106459,106460],{"class":126},"#结果：（2，6，3，2）\n",[102,106462,106463],{"class":104,"line":202},[102,106464,106280],{"class":126},[102,106466,106467,106469,106471,106473,106475],{"class":104,"line":208},[102,106468,106426],{"class":119},[102,106470,55379],{"class":386},[102,106472,260],{"class":108},[102,106474,7044],{"class":187},[102,106476,106293],{"class":119},[102,106478,106479],{"class":104,"line":214},[102,106480,106481],{"class":126},"#结果：（2，3，6，2）\n",[102,106483,106484],{"class":104,"line":225},[102,106485,106486],{"class":126},"#axis=3\n",[102,106488,106489,106491,106493,106495,106497],{"class":104,"line":230},[102,106490,106426],{"class":119},[102,106492,55379],{"class":386},[102,106494,260],{"class":108},[102,106496,7049],{"class":187},[102,106498,106293],{"class":119},[102,106500,106501],{"class":104,"line":236},[102,106502,106503],{"class":126},"#结果：（2，3，3，4）\n",[43,106505,106507],{"id":106506},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,106509,106510],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,106512,106513],{},"①二维数组",[93,106515,106517],{"className":38243,"code":106516,"language":38245,"meta":98,"style":98},"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",[83,106518,106519,106543,106567,106572,106577],{"__ignoreMap":98},[102,106520,106521,106523,106525,106527,106529,106531,106533,106535,106537,106539,106541],{"class":104,"line":105},[102,106522,101171],{"class":119},[102,106524,260],{"class":108},[102,106526,100867],{"class":119},[102,106528,7039],{"class":187},[102,106530,1618],{"class":119},[102,106532,9551],{"class":187},[102,106534,100872],{"class":119},[102,106536,7049],{"class":187},[102,106538,1618],{"class":119},[102,106540,9329],{"class":187},[102,106542,390],{"class":119},[102,106544,106545,106547,106549,106551,106553,106555,106557,106559,106561,106563,106565],{"class":104,"line":116},[102,106546,106052],{"class":119},[102,106548,260],{"class":108},[102,106550,100867],{"class":119},[102,106552,9372],{"class":187},[102,106554,1618],{"class":119},[102,106556,9669],{"class":187},[102,106558,100872],{"class":119},[102,106560,7049],{"class":187},[102,106562,1618],{"class":119},[102,106564,9329],{"class":187},[102,106566,390],{"class":119},[102,106568,106569],{"class":104,"line":123},[102,106570,106571],{"class":119},"np.hstack((aa,bb))\n",[102,106573,106574],{"class":104,"line":130},[102,106575,106576],{"class":126},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[102,106578,106579],{"class":104,"line":136},[102,106580,106581],{"class":126},"#np.hstack([aa,bb])\n",[14,106583,106098],{},[14,106585,106586],{},[6750,106587],{"alt":98,"src":106588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,106590,106591],{},"等效于concatenate()函数中axis=1时的情况",[14,106593,106594],{},"②三维数组",[93,106596,106598],{"className":38243,"code":106597,"language":38245,"meta":98,"style":98},"#两个三行六列\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",[83,106599,106600,106604,106632,106660,106665,106670],{"__ignoreMap":98},[102,106601,106602],{"class":104,"line":105},[102,106603,106153],{"class":126},[102,106605,106606,106608,106610,106612,106614,106616,106618,106620,106622,106624,106626,106628,106630],{"class":104,"line":116},[102,106607,103386],{"class":119},[102,106609,260],{"class":108},[102,106611,100867],{"class":119},[102,106613,7039],{"class":187},[102,106615,1618],{"class":119},[102,106617,9360],{"class":187},[102,106619,100872],{"class":119},[102,106621,7044],{"class":187},[102,106623,1618],{"class":119},[102,106625,7049],{"class":187},[102,106627,1618],{"class":119},[102,106629,9379],{"class":187},[102,106631,390],{"class":119},[102,106633,106634,106636,106638,106640,106642,106644,106646,106648,106650,106652,106654,106656,106658],{"class":104,"line":123},[102,106635,106186],{"class":119},[102,106637,260],{"class":108},[102,106639,100867],{"class":119},[102,106641,9372],{"class":187},[102,106643,1618],{"class":119},[102,106645,106197],{"class":187},[102,106647,100872],{"class":119},[102,106649,7044],{"class":187},[102,106651,1618],{"class":119},[102,106653,7049],{"class":187},[102,106655,1618],{"class":119},[102,106657,9379],{"class":187},[102,106659,390],{"class":119},[102,106661,106662],{"class":104,"line":130},[102,106663,106664],{"class":126},"#使用hstack\n",[102,106666,106667],{"class":104,"line":136},[102,106668,106669],{"class":119},"np.hstack((aaa,bbb)).shape\n",[102,106671,106672],{"class":104,"line":142},[102,106673,106674],{"class":126},"#输出：（2，6，6）\n",[43,106676,106678],{"id":106677},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,106680,106681],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,106683,106513],{},[93,106685,106687],{"className":38243,"code":106686,"language":38245,"meta":98,"style":98},"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",[83,106688,106689,106713,106737,106742,106747,106752],{"__ignoreMap":98},[102,106690,106691,106693,106695,106697,106699,106701,106703,106705,106707,106709,106711],{"class":104,"line":105},[102,106692,101171],{"class":119},[102,106694,260],{"class":108},[102,106696,100867],{"class":119},[102,106698,7039],{"class":187},[102,106700,1618],{"class":119},[102,106702,9551],{"class":187},[102,106704,100872],{"class":119},[102,106706,7049],{"class":187},[102,106708,1618],{"class":119},[102,106710,9329],{"class":187},[102,106712,390],{"class":119},[102,106714,106715,106717,106719,106721,106723,106725,106727,106729,106731,106733,106735],{"class":104,"line":116},[102,106716,106052],{"class":119},[102,106718,260],{"class":108},[102,106720,100867],{"class":119},[102,106722,9372],{"class":187},[102,106724,1618],{"class":119},[102,106726,9669],{"class":187},[102,106728,100872],{"class":119},[102,106730,7049],{"class":187},[102,106732,1618],{"class":119},[102,106734,9329],{"class":187},[102,106736,390],{"class":119},[102,106738,106739],{"class":104,"line":123},[102,106740,106741],{"class":126},"#vstack 垂直方向进行堆叠\n",[102,106743,106744],{"class":104,"line":130},[102,106745,106746],{"class":119},"np.vstack((aa,bb))\n",[102,106748,106749],{"class":104,"line":136},[102,106750,106751],{"class":126},"#与hstack传的参数类似，等价于：\n",[102,106753,106754],{"class":104,"line":142},[102,106755,106756],{"class":119},"np.vstack([aa,bb])\n",[14,106758,106098],{},[14,106760,106761],{},[6750,106762],{"alt":98,"src":106763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,106765,106594],{},[93,106767,106769],{"className":38243,"code":106768,"language":38245,"meta":98,"style":98},"#两个三行六列\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",[83,106770,106771,106775,106803,106831,106836,106841],{"__ignoreMap":98},[102,106772,106773],{"class":104,"line":105},[102,106774,106153],{"class":126},[102,106776,106777,106779,106781,106783,106785,106787,106789,106791,106793,106795,106797,106799,106801],{"class":104,"line":116},[102,106778,103386],{"class":119},[102,106780,260],{"class":108},[102,106782,100867],{"class":119},[102,106784,7039],{"class":187},[102,106786,1618],{"class":119},[102,106788,9360],{"class":187},[102,106790,100872],{"class":119},[102,106792,7044],{"class":187},[102,106794,1618],{"class":119},[102,106796,7049],{"class":187},[102,106798,1618],{"class":119},[102,106800,9379],{"class":187},[102,106802,390],{"class":119},[102,106804,106805,106807,106809,106811,106813,106815,106817,106819,106821,106823,106825,106827,106829],{"class":104,"line":123},[102,106806,106186],{"class":119},[102,106808,260],{"class":108},[102,106810,100867],{"class":119},[102,106812,9372],{"class":187},[102,106814,1618],{"class":119},[102,106816,106197],{"class":187},[102,106818,100872],{"class":119},[102,106820,7044],{"class":187},[102,106822,1618],{"class":119},[102,106824,7049],{"class":187},[102,106826,1618],{"class":119},[102,106828,9379],{"class":187},[102,106830,390],{"class":119},[102,106832,106833],{"class":104,"line":130},[102,106834,106835],{"class":126},"#使用vstack\n",[102,106837,106838],{"class":104,"line":136},[102,106839,106840],{"class":119},"np.vstack((aaa,bbb)).shape\n",[102,106842,106843],{"class":104,"line":142},[102,106844,106845],{"class":126},"#输出：（4，3，6）\n",[43,106847,106849],{"id":106848},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,106851,106852],{},"该方法是三维数组特有的方法",[14,106854,106855],{},"也就是说",[14,106857,106858],{},"一维数组拼接方法用：concatenate()",[14,106860,106861],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,106863,106864],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,106866,106867],{},"四维数组及多维数组只能用concatenate进行拼接",[93,106869,106871],{"className":38243,"code":106870,"language":38245,"meta":98,"style":98},"#两个三行六列\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",[83,106872,106873,106877,106905,106933,106938,106943],{"__ignoreMap":98},[102,106874,106875],{"class":104,"line":105},[102,106876,106153],{"class":126},[102,106878,106879,106881,106883,106885,106887,106889,106891,106893,106895,106897,106899,106901,106903],{"class":104,"line":116},[102,106880,103386],{"class":119},[102,106882,260],{"class":108},[102,106884,100867],{"class":119},[102,106886,7039],{"class":187},[102,106888,1618],{"class":119},[102,106890,9360],{"class":187},[102,106892,100872],{"class":119},[102,106894,7044],{"class":187},[102,106896,1618],{"class":119},[102,106898,7049],{"class":187},[102,106900,1618],{"class":119},[102,106902,9379],{"class":187},[102,106904,390],{"class":119},[102,106906,106907,106909,106911,106913,106915,106917,106919,106921,106923,106925,106927,106929,106931],{"class":104,"line":123},[102,106908,106186],{"class":119},[102,106910,260],{"class":108},[102,106912,100867],{"class":119},[102,106914,9372],{"class":187},[102,106916,1618],{"class":119},[102,106918,106197],{"class":187},[102,106920,100872],{"class":119},[102,106922,7044],{"class":187},[102,106924,1618],{"class":119},[102,106926,7049],{"class":187},[102,106928,1618],{"class":119},[102,106930,9379],{"class":187},[102,106932,390],{"class":119},[102,106934,106935],{"class":104,"line":130},[102,106936,106937],{"class":126},"#使用dstack\n",[102,106939,106940],{"class":104,"line":136},[102,106941,106942],{"class":119},"np.dstack((aaa,bbb)).shape\n",[102,106944,106945],{"class":104,"line":142},[102,106946,106947],{"class":126},"#结果：（2，3，12）\n",[8955,106949,106950],{},"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":98,"searchDepth":116,"depth":116,"links":106952},[106953,106954,106955,106956],{"id":105892,"depth":116,"text":105893},{"id":106506,"depth":116,"text":106507},{"id":106677,"depth":116,"text":106678},{"id":106848,"depth":116,"text":106849},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":105884,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":106963,"title":106964,"body":106965,"description":31240,"extension":8978,"meta":107240,"navigation":651,"path":107241,"seo":107242,"stem":107243,"__hash__":107244},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":106966,"toc":107238},[106967,106970,106973,107067,107070,107073,107076,107079,107082,107085,107088,107091,107235],[10,106968,106964],{"id":106969},"_7数组转置",[14,106971,106972],{},"使用transpose()函数",[93,106974,106976],{"className":38243,"code":106975,"language":38245,"meta":98,"style":98},"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",[83,106977,106978,106988,107012,107017,107022,107027,107032,107040,107044,107048,107053,107058,107063],{"__ignoreMap":98},[102,106979,106980,106982,106984,106986],{"class":104,"line":105},[102,106981,38257],{"class":108},[102,106983,39245],{"class":119},[102,106985,39248],{"class":108},[102,106987,39251],{"class":119},[102,106989,106990,106992,106994,106996,106998,107000,107002,107004,107006,107008,107010],{"class":104,"line":116},[102,106991,9275],{"class":119},[102,106993,260],{"class":108},[102,106995,39582],{"class":119},[102,106997,7039],{"class":187},[102,106999,1618],{"class":119},[102,107001,9551],{"class":187},[102,107003,100872],{"class":119},[102,107005,9329],{"class":187},[102,107007,1618],{"class":119},[102,107009,7049],{"class":187},[102,107011,390],{"class":119},[102,107013,107014],{"class":104,"line":123},[102,107015,107016],{"class":126},"#二维数组转置\n",[102,107018,107019],{"class":104,"line":130},[102,107020,107021],{"class":126},"#调用transpose()函数\n",[102,107023,107024],{"class":104,"line":136},[102,107025,107026],{"class":119},"a.transpose()\n",[102,107028,107029],{"class":104,"line":142},[102,107030,107031],{"class":126},"#对于二维数组也可以采用.T来实现\n",[102,107033,107034,107037],{"class":104,"line":148},[102,107035,107036],{"class":119},"a.T",[102,107038,107039],{"class":126},"#与上述代码一样\n",[102,107041,107042],{"class":104,"line":157},[102,107043,101429],{"class":126},[102,107045,107046],{"class":104,"line":163},[102,107047,101793],{"class":278},[102,107049,107050],{"class":104,"line":175},[102,107051,107052],{"class":278},"array([[ 1,  4,  7, 10],\n",[102,107054,107055],{"class":104,"line":181},[102,107056,107057],{"class":278},"       [ 2,  5,  8, 11],\n",[102,107059,107060],{"class":104,"line":202},[102,107061,107062],{"class":278},"       [ 3,  6,  9, 12]])\n",[102,107064,107065],{"class":104,"line":208},[102,107066,101793],{"class":278},[14,107068,107069],{},"也可以使用np.transpose()的形式",[14,107071,107072],{},"#多维数组进行转置 np.transpose()",[14,107074,107075],{},"#对二维数组也可以使用np.transpose()进行转置",[14,107077,107078],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,107080,107081],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,107083,107084],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,107086,107087],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,107089,107090],{},"四维及以上的数组也是一样的道理",[93,107092,107094],{"className":38243,"code":107093,"language":38245,"meta":98,"style":98},"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",[83,107095,107096,107124,107129,107134,107139,107157,107162,107194,107199,107204,107209,107230],{"__ignoreMap":98},[102,107097,107098,107100,107102,107104,107106,107108,107110,107112,107114,107116,107118,107120,107122],{"class":104,"line":105},[102,107099,3056],{"class":119},[102,107101,260],{"class":108},[102,107103,100867],{"class":119},[102,107105,7039],{"class":187},[102,107107,1618],{"class":119},[102,107109,9360],{"class":187},[102,107111,100872],{"class":119},[102,107113,7049],{"class":187},[102,107115,1618],{"class":119},[102,107117,9379],{"class":187},[102,107119,1618],{"class":119},[102,107121,7044],{"class":187},[102,107123,390],{"class":119},[102,107125,107126],{"class":104,"line":116},[102,107127,107128],{"class":119},"x.shape\n",[102,107130,107131],{"class":104,"line":123},[102,107132,107133],{"class":126},"#结果：（3,6,2）\n",[102,107135,107136],{"class":104,"line":130},[102,107137,107138],{"class":126},"#使用np.transpose()进行转置 变为(2,6,3)\n",[102,107140,107141,107144,107146,107148,107150,107152,107154],{"class":104,"line":136},[102,107142,107143],{"class":119},"np.transpose(x,(",[102,107145,7044],{"class":187},[102,107147,1618],{"class":119},[102,107149,7039],{"class":187},[102,107151,1618],{"class":119},[102,107153,8423],{"class":187},[102,107155,107156],{"class":119},")).shape\n",[102,107158,107159],{"class":104,"line":142},[102,107160,107161],{"class":126},"#结果：(2,6,3)\n",[102,107163,107164,107166,107168,107170,107172,107174,107176,107178,107180,107182,107184,107186,107188,107190,107192],{"class":104,"line":148},[102,107165,106371],{"class":119},[102,107167,260],{"class":108},[102,107169,100867],{"class":119},[102,107171,7039],{"class":187},[102,107173,1618],{"class":119},[102,107175,9360],{"class":187},[102,107177,100872],{"class":119},[102,107179,7049],{"class":187},[102,107181,1618],{"class":119},[102,107183,7044],{"class":187},[102,107185,1618],{"class":119},[102,107187,7039],{"class":187},[102,107189,1618],{"class":119},[102,107191,9379],{"class":187},[102,107193,390],{"class":119},[102,107195,107196],{"class":104,"line":157},[102,107197,107198],{"class":119},"aaaa.shape\n",[102,107200,107201],{"class":104,"line":163},[102,107202,107203],{"class":126},"#结果：（3，2，1，6）\n",[102,107205,107206],{"class":104,"line":175},[102,107207,107208],{"class":126},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[102,107210,107211,107214,107216,107218,107220,107222,107224,107226,107228],{"class":104,"line":181},[102,107212,107213],{"class":119},"np.transpose(aaaa,(",[102,107215,7039],{"class":187},[102,107217,1618],{"class":119},[102,107219,7044],{"class":187},[102,107221,1618],{"class":119},[102,107223,8423],{"class":187},[102,107225,1618],{"class":119},[102,107227,7049],{"class":187},[102,107229,107156],{"class":119},[102,107231,107232],{"class":104,"line":202},[102,107233,107234],{"class":126},"#结果：(2,1,3,6)\n",[8955,107236,107237],{},"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":98,"searchDepth":116,"depth":116,"links":107239},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":106964,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":107246,"title":107247,"body":107248,"description":31240,"extension":8978,"meta":107982,"navigation":651,"path":107983,"seo":107984,"stem":107985,"__hash__":107986},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":107249,"toc":107980},[107250,107253,107256,107259,107262,107265,107268,107271,107274,107383,107386,107389,107977],[10,107251,107247],{"id":107252},"_8数组分割",[14,107254,107255],{},"split分割",[14,107257,107258],{},"numpy.split(ary,indics_or_sections,axis)",[14,107260,107261],{},"解释：",[14,107263,107264],{},"ary:被分割的数组",[14,107266,107267],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,107269,107270],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,107272,107273],{},"①一维数组的分割",[93,107275,107277],{"className":38243,"code":107276,"language":38245,"meta":98,"style":98},"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",[83,107278,107279,107295,107300,107309,107313,107318,107326,107330,107335,107340,107353,107357,107362,107374,107378],{"__ignoreMap":98},[102,107280,107281,107283,107285,107287,107289,107291,107293],{"class":104,"line":105},[102,107282,9275],{"class":119},[102,107284,260],{"class":108},[102,107286,100867],{"class":119},[102,107288,7039],{"class":187},[102,107290,1618],{"class":119},[102,107292,9453],{"class":187},[102,107294,390],{"class":119},[102,107296,107297],{"class":104,"line":116},[102,107298,107299],{"class":126},"#如果传入整数，必须能够平分，否则会报错\n",[102,107301,107302,107305,107307],{"class":104,"line":123},[102,107303,107304],{"class":119},"np.split(a,",[102,107306,7044],{"class":187},[102,107308,390],{"class":119},[102,107310,107311],{"class":104,"line":130},[102,107312,101429],{"class":126},[102,107314,107315],{"class":104,"line":136},[102,107316,107317],{"class":126},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[102,107319,107320,107322,107324],{"class":104,"line":142},[102,107321,107304],{"class":119},[102,107323,9329],{"class":187},[102,107325,390],{"class":119},[102,107327,107328],{"class":104,"line":148},[102,107329,101429],{"class":126},[102,107331,107332],{"class":104,"line":157},[102,107333,107334],{"class":126},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[102,107336,107337],{"class":104,"line":163},[102,107338,107339],{"class":126},"#传入数组\n",[102,107341,107342,107345,107347,107349,107351],{"class":104,"line":175},[102,107343,107344],{"class":119},"np.split(a,[",[102,107346,7049],{"class":187},[102,107348,1618],{"class":119},[102,107350,9354],{"class":187},[102,107352,13466],{"class":119},[102,107354,107355],{"class":104,"line":181},[102,107356,101429],{"class":126},[102,107358,107359],{"class":104,"line":202},[102,107360,107361],{"class":126},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[102,107363,107364,107366,107368,107370,107372],{"class":104,"line":208},[102,107365,107344],{"class":119},[102,107367,9354],{"class":187},[102,107369,1618],{"class":119},[102,107371,9403],{"class":187},[102,107373,13466],{"class":119},[102,107375,107376],{"class":104,"line":214},[102,107377,101429],{"class":126},[102,107379,107380],{"class":104,"line":225},[102,107381,107382],{"class":126},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,107384,107385],{},"②二维数组的分割",[14,107387,107388],{},"使用split()",[93,107390,107392],{"className":38243,"code":107391,"language":38245,"meta":98,"style":98},"#二维数组分割\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",[83,107393,107394,107399,107423,107428,107437,107441,107445,107450,107455,107460,107465,107470,107475,107480,107484,107497,107501,107505,107509,107513,107517,107522,107527,107532,107536,107541,107557,107561,107565,107570,107575,107580,107585,107590,107595,107600,107605,107610,107615,107620,107625,107630,107635,107640,107645,107650,107655,107659,107663,107683,107687,107691,107696,107701,107706,107711,107716,107721,107726,107731,107736,107741,107746,107751,107756,107761,107766,107771,107776,107781,107785,107790,107799,107803,107807,107811,107815,107819,107823,107827,107831,107835,107844,107848,107852,107856,107860,107864,107868,107872,107876,107880,107884,107888,107892,107896,107900,107904,107908,107912,107916,107920,107924,107928,107941,107945,107949,107953,107957,107961,107965,107969,107973],{"__ignoreMap":98},[102,107395,107396],{"class":104,"line":105},[102,107397,107398],{"class":126},"#二维数组分割\n",[102,107400,107401,107403,107405,107407,107409,107411,107413,107415,107417,107419,107421],{"class":104,"line":116},[102,107402,101171],{"class":119},[102,107404,260],{"class":108},[102,107406,100867],{"class":119},[102,107408,7039],{"class":187},[102,107410,1618],{"class":119},[102,107412,9360],{"class":187},[102,107414,100872],{"class":119},[102,107416,9379],{"class":187},[102,107418,1618],{"class":119},[102,107420,9379],{"class":187},[102,107422,390],{"class":119},[102,107424,107425],{"class":104,"line":123},[102,107426,107427],{"class":126},"#默认axis=0  传入整数平均分,按行来的\n",[102,107429,107430,107433,107435],{"class":104,"line":130},[102,107431,107432],{"class":119},"np.split(aa,",[102,107434,7049],{"class":187},[102,107436,390],{"class":119},[102,107438,107439],{"class":104,"line":136},[102,107440,103629],{"class":126},[102,107442,107443],{"class":104,"line":142},[102,107444,101793],{"class":278},[102,107446,107447],{"class":104,"line":148},[102,107448,107449],{"class":278},"[array([[ 1,  2,  3,  4,  5,  6],\n",[102,107451,107452],{"class":104,"line":157},[102,107453,107454],{"class":278},"        [ 7,  8,  9, 10, 11, 12]]),\n",[102,107456,107457],{"class":104,"line":163},[102,107458,107459],{"class":278}," array([[13, 14, 15, 16, 17, 18],\n",[102,107461,107462],{"class":104,"line":175},[102,107463,107464],{"class":278},"        [19, 20, 21, 22, 23, 24]]),\n",[102,107466,107467],{"class":104,"line":181},[102,107468,107469],{"class":278}," array([[25, 26, 27, 28, 29, 30],\n",[102,107471,107472],{"class":104,"line":202},[102,107473,107474],{"class":278},"        [31, 32, 33, 34, 35, 36]])]\n",[102,107476,107477],{"class":104,"line":208},[102,107478,107479],{"class":278}," '''\n",[102,107481,107482],{"class":104,"line":214},[102,107483,107339],{"class":126},[102,107485,107486,107489,107491,107493,107495],{"class":104,"line":225},[102,107487,107488],{"class":119},"np.split(aa,[",[102,107490,7044],{"class":187},[102,107492,1618],{"class":119},[102,107494,9354],{"class":187},[102,107496,13466],{"class":119},[102,107498,107499],{"class":104,"line":230},[102,107500,103629],{"class":126},[102,107502,107503],{"class":104,"line":236},[102,107504,101793],{"class":278},[102,107506,107507],{"class":104,"line":242},[102,107508,107449],{"class":278},[102,107510,107511],{"class":104,"line":248},[102,107512,107454],{"class":278},[102,107514,107515],{"class":104,"line":254},[102,107516,107459],{"class":278},[102,107518,107519],{"class":104,"line":269},[102,107520,107521],{"class":278},"        [19, 20, 21, 22, 23, 24],\n",[102,107523,107524],{"class":104,"line":298},[102,107525,107526],{"class":278},"        [25, 26, 27, 28, 29, 30]]),\n",[102,107528,107529],{"class":104,"line":502},[102,107530,107531],{"class":278}," array([[31, 32, 33, 34, 35, 36]])]\n",[102,107533,107534],{"class":104,"line":507},[102,107535,101793],{"class":278},[102,107537,107538],{"class":104,"line":512},[102,107539,107540],{"class":126},"#axis=1 按照列来分\n",[102,107542,107543,107545,107547,107549,107551,107553,107555],{"class":104,"line":521},[102,107544,107432],{"class":119},[102,107546,7049],{"class":187},[102,107548,1618],{"class":119},[102,107550,55379],{"class":386},[102,107552,260],{"class":108},[102,107554,7039],{"class":187},[102,107556,390],{"class":119},[102,107558,107559],{"class":104,"line":526},[102,107560,103629],{"class":126},[102,107562,107563],{"class":104,"line":532},[102,107564,101793],{"class":278},[102,107566,107567],{"class":104,"line":538},[102,107568,107569],{"class":278},"[array([[ 1,  2],\n",[102,107571,107572],{"class":104,"line":555},[102,107573,107574],{"class":278},"        [ 7,  8],\n",[102,107576,107577],{"class":104,"line":570},[102,107578,107579],{"class":278},"        [13, 14],\n",[102,107581,107582],{"class":104,"line":581},[102,107583,107584],{"class":278},"        [19, 20],\n",[102,107586,107587],{"class":104,"line":819},[102,107588,107589],{"class":278},"        [25, 26],\n",[102,107591,107592],{"class":104,"line":828},[102,107593,107594],{"class":278},"        [31, 32]]),\n",[102,107596,107597],{"class":104,"line":837},[102,107598,107599],{"class":278}," array([[ 3,  4],\n",[102,107601,107602],{"class":104,"line":842},[102,107603,107604],{"class":278},"        [ 9, 10],\n",[102,107606,107607],{"class":104,"line":855},[102,107608,107609],{"class":278},"        [15, 16],\n",[102,107611,107612],{"class":104,"line":860},[102,107613,107614],{"class":278},"        [21, 22],\n",[102,107616,107617],{"class":104,"line":871},[102,107618,107619],{"class":278},"        [27, 28],\n",[102,107621,107622],{"class":104,"line":1359},[102,107623,107624],{"class":278},"        [33, 34]]),\n",[102,107626,107627],{"class":104,"line":1368},[102,107628,107629],{"class":278}," array([[ 5,  6],\n",[102,107631,107632],{"class":104,"line":1373},[102,107633,107634],{"class":278},"        [11, 12],\n",[102,107636,107637],{"class":104,"line":1378},[102,107638,107639],{"class":278},"        [17, 18],\n",[102,107641,107642],{"class":104,"line":1384},[102,107643,107644],{"class":278},"        [23, 24],\n",[102,107646,107647],{"class":104,"line":1398},[102,107648,107649],{"class":278},"        [29, 30],\n",[102,107651,107652],{"class":104,"line":1424},[102,107653,107654],{"class":278},"        [35, 36]])]\n",[102,107656,107657],{"class":104,"line":1429},[102,107658,107479],{"class":278},[102,107660,107661],{"class":104,"line":1435},[102,107662,107339],{"class":126},[102,107664,107665,107667,107669,107671,107673,107675,107677,107679,107681],{"class":104,"line":1450},[102,107666,107488],{"class":119},[102,107668,7039],{"class":187},[102,107670,1618],{"class":119},[102,107672,7044],{"class":187},[102,107674,49474],{"class":119},[102,107676,55379],{"class":386},[102,107678,260],{"class":108},[102,107680,7039],{"class":187},[102,107682,390],{"class":119},[102,107684,107685],{"class":104,"line":1473},[102,107686,101429],{"class":126},[102,107688,107689],{"class":104,"line":1478},[102,107690,101793],{"class":278},[102,107692,107693],{"class":104,"line":1484},[102,107694,107695],{"class":278},"[array([[ 1],\n",[102,107697,107698],{"class":104,"line":1499},[102,107699,107700],{"class":278},"        [ 7],\n",[102,107702,107703],{"class":104,"line":1508},[102,107704,107705],{"class":278},"        [13],\n",[102,107707,107708],{"class":104,"line":1513},[102,107709,107710],{"class":278},"        [19],\n",[102,107712,107713],{"class":104,"line":1524},[102,107714,107715],{"class":278},"        [25],\n",[102,107717,107718],{"class":104,"line":1529},[102,107719,107720],{"class":278},"        [31]]),\n",[102,107722,107723],{"class":104,"line":1538},[102,107724,107725],{"class":278}," array([[ 2],\n",[102,107727,107728],{"class":104,"line":2089},[102,107729,107730],{"class":278},"        [ 8],\n",[102,107732,107733],{"class":104,"line":2094},[102,107734,107735],{"class":278},"        [14],\n",[102,107737,107738],{"class":104,"line":2100},[102,107739,107740],{"class":278},"        [20],\n",[102,107742,107743],{"class":104,"line":2106},[102,107744,107745],{"class":278},"        [26],\n",[102,107747,107748],{"class":104,"line":2120},[102,107749,107750],{"class":278},"        [32]]),\n",[102,107752,107753],{"class":104,"line":2128},[102,107754,107755],{"class":278}," array([[ 3,  4,  5,  6],\n",[102,107757,107758],{"class":104,"line":2149},[102,107759,107760],{"class":278},"        [ 9, 10, 11, 12],\n",[102,107762,107763],{"class":104,"line":2161},[102,107764,107765],{"class":278},"        [15, 16, 17, 18],\n",[102,107767,107768],{"class":104,"line":2167},[102,107769,107770],{"class":278},"        [21, 22, 23, 24],\n",[102,107772,107773],{"class":104,"line":2190},[102,107774,107775],{"class":278},"        [27, 28, 29, 30],\n",[102,107777,107778],{"class":104,"line":2196},[102,107779,107780],{"class":278},"        [33, 34, 35, 36]])]\n",[102,107782,107783],{"class":104,"line":2219},[102,107784,101793],{"class":278},[102,107786,107787],{"class":104,"line":2233},[102,107788,107789],{"class":126},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[102,107791,107792,107795,107797],{"class":104,"line":2253},[102,107793,107794],{"class":119},"np.vsplit(aa,",[102,107796,7049],{"class":187},[102,107798,390],{"class":119},[102,107800,107801],{"class":104,"line":2259},[102,107802,101429],{"class":126},[102,107804,107805],{"class":104,"line":2270},[102,107806,101793],{"class":278},[102,107808,107809],{"class":104,"line":2293},[102,107810,107449],{"class":278},[102,107812,107813],{"class":104,"line":2315},[102,107814,107454],{"class":278},[102,107816,107817],{"class":104,"line":2320},[102,107818,107459],{"class":278},[102,107820,107821],{"class":104,"line":2326},[102,107822,107464],{"class":278},[102,107824,107825],{"class":104,"line":2340},[102,107826,107469],{"class":278},[102,107828,107829],{"class":104,"line":2354},[102,107830,107474],{"class":278},[102,107832,107833],{"class":104,"line":2359},[102,107834,101793],{"class":278},[102,107836,107837,107840,107842],{"class":104,"line":2373},[102,107838,107839],{"class":119},"np.hsplit(aa,",[102,107841,7049],{"class":187},[102,107843,390],{"class":119},[102,107845,107846],{"class":104,"line":2378},[102,107847,101429],{"class":126},[102,107849,107850],{"class":104,"line":2384},[102,107851,101793],{"class":278},[102,107853,107854],{"class":104,"line":2389},[102,107855,107569],{"class":278},[102,107857,107858],{"class":104,"line":2403},[102,107859,107574],{"class":278},[102,107861,107862],{"class":104,"line":2408},[102,107863,107579],{"class":278},[102,107865,107866],{"class":104,"line":2413},[102,107867,107584],{"class":278},[102,107869,107870],{"class":104,"line":2427},[102,107871,107589],{"class":278},[102,107873,107874],{"class":104,"line":2440},[102,107875,107594],{"class":278},[102,107877,107878],{"class":104,"line":2445},[102,107879,107599],{"class":278},[102,107881,107882],{"class":104,"line":2458},[102,107883,107604],{"class":278},[102,107885,107886],{"class":104,"line":2463},[102,107887,107609],{"class":278},[102,107889,107890],{"class":104,"line":2468},[102,107891,107614],{"class":278},[102,107893,107894],{"class":104,"line":2473},[102,107895,107619],{"class":278},[102,107897,107898],{"class":104,"line":2486},[102,107899,107624],{"class":278},[102,107901,107902],{"class":104,"line":2491},[102,107903,107629],{"class":278},[102,107905,107906],{"class":104,"line":40498},[102,107907,107634],{"class":278},[102,107909,107910],{"class":104,"line":40504},[102,107911,107639],{"class":278},[102,107913,107914],{"class":104,"line":40510},[102,107915,107644],{"class":278},[102,107917,107918],{"class":104,"line":40516},[102,107919,107649],{"class":278},[102,107921,107922],{"class":104,"line":40522},[102,107923,107654],{"class":278},[102,107925,107926],{"class":104,"line":40533},[102,107927,101793],{"class":278},[102,107929,107930,107933,107935,107937,107939],{"class":104,"line":40539},[102,107931,107932],{"class":119},"np.vsplit(aa,[",[102,107934,7044],{"class":187},[102,107936,1618],{"class":119},[102,107938,9354],{"class":187},[102,107940,13466],{"class":119},[102,107942,107943],{"class":104,"line":40559},[102,107944,101429],{"class":126},[102,107946,107947],{"class":104,"line":40565},[102,107948,101793],{"class":278},[102,107950,107951],{"class":104,"line":40576},[102,107952,107449],{"class":278},[102,107954,107955],{"class":104,"line":40582},[102,107956,107454],{"class":278},[102,107958,107959],{"class":104,"line":40588},[102,107960,107459],{"class":278},[102,107962,107963],{"class":104,"line":40594},[102,107964,107521],{"class":278},[102,107966,107967],{"class":104,"line":40600},[102,107968,107526],{"class":278},[102,107970,107971],{"class":104,"line":40606},[102,107972,107531],{"class":278},[102,107974,107975],{"class":104,"line":40612},[102,107976,107479],{"class":278},[8955,107978,107979],{},"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":98,"searchDepth":116,"depth":116,"links":107981},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":107247,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":107988,"title":107989,"body":107990,"description":31240,"extension":8978,"meta":108484,"navigation":651,"path":108485,"seo":108486,"stem":108487,"__hash__":108488},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":107991,"toc":108475},[107992,107995,107998,108023,108027,108086,108138,108142,108144,108180,108234,108236,108274,108345,108349,108354,108358,108361,108394,108397,108401,108404,108407,108410,108413,108418,108422,108425,108428,108431,108434,108439,108443,108448,108451,108472],[10,107993,107989],{"id":107994},"_9数学函数",[14,107996,107997],{},"补充回顾：python的列表推导式",[93,107999,108001],{"className":38243,"code":108000,"language":38245,"meta":98,"style":98},"[1\u002Fi for i in a]\n",[83,108002,108003],{"__ignoreMap":98},[102,108004,108005,108007,108009,108011,108014,108016,108018,108020],{"class":104,"line":105},[102,108006,9912],{"class":119},[102,108008,7039],{"class":187},[102,108010,9611],{"class":108},[102,108012,108013],{"class":119},"i ",[102,108015,11841],{"class":108},[102,108017,18205],{"class":119},[102,108019,33908],{"class":108},[102,108021,108022],{"class":119}," a]\n",[43,108024,108026],{"id":108025},"_91-求倒数","9.1 求倒数",[93,108028,108030],{"className":38243,"code":108029,"language":38245,"meta":98,"style":98},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[83,108031,108032,108037,108065,108077],{"__ignoreMap":98},[102,108033,108034],{"class":104,"line":105},[102,108035,108036],{"class":126},"#数组求倒数\n",[102,108038,108039,108041,108043,108045,108047,108049,108051,108053,108055,108057,108059,108061,108063],{"class":104,"line":116},[102,108040,9275],{"class":119},[102,108042,260],{"class":108},[102,108044,9912],{"class":119},[102,108046,7039],{"class":187},[102,108048,1618],{"class":119},[102,108050,7044],{"class":187},[102,108052,1618],{"class":119},[102,108054,7049],{"class":187},[102,108056,1618],{"class":119},[102,108058,9329],{"class":187},[102,108060,1618],{"class":119},[102,108062,9354],{"class":187},[102,108064,41111],{"class":119},[102,108066,108067,108069,108071,108074],{"class":104,"line":123},[102,108068,9300],{"class":119},[102,108070,260],{"class":108},[102,108072,108073],{"class":119},"np.array(a)",[102,108075,108076],{"class":126},"#将列表转换为数组\n",[102,108078,108079,108081,108083],{"class":104,"line":130},[102,108080,7039],{"class":187},[102,108082,9611],{"class":108},[102,108084,108085],{"class":119},"b\n",[93,108087,108089],{"className":38243,"code":108088,"language":38245,"meta":98,"style":98},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[83,108090,108091,108119,108128,108133],{"__ignoreMap":98},[102,108092,108093,108095,108097,108099,108101,108103,108105,108107,108109,108111,108113,108115,108117],{"class":104,"line":105},[102,108094,9275],{"class":119},[102,108096,260],{"class":108},[102,108098,9912],{"class":119},[102,108100,7039],{"class":187},[102,108102,1618],{"class":119},[102,108104,7044],{"class":187},[102,108106,1618],{"class":119},[102,108108,7049],{"class":187},[102,108110,1618],{"class":119},[102,108112,9329],{"class":187},[102,108114,1618],{"class":119},[102,108116,9354],{"class":187},[102,108118,41111],{"class":119},[102,108120,108121,108123,108125],{"class":104,"line":116},[102,108122,9300],{"class":119},[102,108124,260],{"class":108},[102,108126,108127],{"class":119},"np.array(a)\n",[102,108129,108130],{"class":104,"line":123},[102,108131,108132],{"class":126},"#调用numpy中的函数reciprocal()\n",[102,108134,108135],{"class":104,"line":130},[102,108136,108137],{"class":119},"np.reciprocal(b)\n",[43,108139,108141],{"id":108140},"_92-求平方","9.2 求平方",[14,108143,102395],{},[93,108145,108147],{"className":38243,"code":108146,"language":38245,"meta":98,"style":98},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[83,108148,108149,108154,108159,108175],{"__ignoreMap":98},[102,108150,108151],{"class":104,"line":105},[102,108152,108153],{"class":126},"#square()，求平方\n",[102,108155,108156],{"class":104,"line":116},[102,108157,108158],{"class":126},"#一维数组\n",[102,108160,108161,108163,108165,108167,108169,108171,108173],{"class":104,"line":123},[102,108162,9275],{"class":119},[102,108164,260],{"class":108},[102,108166,100867],{"class":119},[102,108168,7039],{"class":187},[102,108170,1618],{"class":119},[102,108172,263],{"class":187},[102,108174,390],{"class":119},[102,108176,108177],{"class":104,"line":130},[102,108178,108179],{"class":119},"np.square(a)\n",[93,108181,108183],{"className":38243,"code":108182,"language":38245,"meta":98,"style":98},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[83,108184,108185,108190,108195,108216],{"__ignoreMap":98},[102,108186,108187],{"class":104,"line":105},[102,108188,108189],{"class":126},"#或者通过循环遍历的形式来计算\n",[102,108191,108192],{"class":104,"line":116},[102,108193,108194],{"class":126},"#这是一个列表\n",[102,108196,108197,108200,108202,108204,108206,108208,108210,108213],{"class":104,"line":123},[102,108198,108199],{"class":119},"[i",[102,108201,191],{"class":108},[102,108203,108013],{"class":119},[102,108205,11841],{"class":108},[102,108207,18205],{"class":119},[102,108209,33908],{"class":108},[102,108211,108212],{"class":119}," a]",[102,108214,108215],{"class":126},"#这个求完之后在数列当中\n",[102,108217,108218,108221,108223,108225,108227,108229,108231],{"class":104,"line":130},[102,108219,108220],{"class":119},"np.array([i",[102,108222,191],{"class":108},[102,108224,108013],{"class":119},[102,108226,11841],{"class":108},[102,108228,18205],{"class":119},[102,108230,33908],{"class":108},[102,108232,108233],{"class":119}," a])\n",[14,108235,101156],{},[93,108237,108239],{"className":38243,"code":108238,"language":38245,"meta":98,"style":98},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[83,108240,108241,108245,108269],{"__ignoreMap":98},[102,108242,108243],{"class":104,"line":105},[102,108244,101166],{"class":126},[102,108246,108247,108249,108251,108253,108255,108257,108259,108261,108263,108265,108267],{"class":104,"line":116},[102,108248,101171],{"class":119},[102,108250,260],{"class":108},[102,108252,100867],{"class":119},[102,108254,7039],{"class":187},[102,108256,1618],{"class":119},[102,108258,9551],{"class":187},[102,108260,100872],{"class":119},[102,108262,9329],{"class":187},[102,108264,1618],{"class":119},[102,108266,7049],{"class":187},[102,108268,390],{"class":119},[102,108270,108271],{"class":104,"line":123},[102,108272,108273],{"class":119},"np.square(aa)\n",[93,108275,108277],{"className":38243,"code":108276,"language":38245,"meta":98,"style":98},"#传统的方式\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",[83,108278,108279,108284,108293,108309,108325,108340],{"__ignoreMap":98},[102,108280,108281],{"class":104,"line":105},[102,108282,108283],{"class":126},"#传统的方式\n",[102,108285,108286,108288,108290],{"class":104,"line":116},[102,108287,106052],{"class":119},[102,108289,260],{"class":108},[102,108291,108292],{"class":119},"np.empty_like(aa)\n",[102,108294,108295,108297,108299,108301,108303,108305,108307],{"class":104,"line":123},[102,108296,11841],{"class":108},[102,108298,18205],{"class":119},[102,108300,33908],{"class":108},[102,108302,40308],{"class":187},[102,108304,380],{"class":119},[102,108306,9329],{"class":187},[102,108308,38651],{"class":119},[102,108310,108311,108313,108315,108317,108319,108321,108323],{"class":104,"line":130},[102,108312,12016],{"class":108},[102,108314,18267],{"class":119},[102,108316,33908],{"class":108},[102,108318,40308],{"class":187},[102,108320,380],{"class":119},[102,108322,7049],{"class":187},[102,108324,38651],{"class":119},[102,108326,108327,108330,108332,108335,108337],{"class":104,"line":136},[102,108328,108329],{"class":119},"        bb[i,j]",[102,108331,260],{"class":108},[102,108333,108334],{"class":119},"aa[i,j]",[102,108336,191],{"class":108},[102,108338,108339],{"class":119},"aa[i,j]\n",[102,108341,108342],{"class":104,"line":142},[102,108343,108344],{"class":119},"bb\n",[43,108346,108348],{"id":108347},"_93-求各元素的符号","9.3 求各元素的符号",[14,108350,108351],{},[6750,108352],{"alt":98,"src":108353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[43,108355,108357],{"id":108356},"_94-modf函数","9.4 modf函数",[14,108359,108360],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[93,108362,108364],{"className":38243,"code":108363,"language":38245,"meta":98,"style":98},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[83,108365,108366,108389],{"__ignoreMap":98},[102,108367,108368,108370,108372,108374,108376,108378,108380,108382,108384,108387],{"class":104,"line":105},[102,108369,9275],{"class":119},[102,108371,260],{"class":108},[102,108373,100867],{"class":119},[102,108375,2833],{"class":108},[102,108377,263],{"class":187},[102,108379,1618],{"class":119},[102,108381,263],{"class":187},[102,108383,1618],{"class":119},[102,108385,108386],{"class":187},"0.3",[102,108388,390],{"class":119},[102,108390,108391],{"class":104,"line":116},[102,108392,108393],{"class":119},"np.modf(a)\n",[14,108395,108396],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[43,108398,108400],{"id":108399},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,108402,108403],{},"np.cell()",[14,108405,108406],{},"np.floor()",[14,108408,108409],{},"np.rint()",[14,108411,108412],{},"对各元素分别向上取整、向下取整、四舍五入",[14,108414,108415],{},[6750,108416],{"alt":98,"src":108417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[43,108419,108421],{"id":108420},"_96-around函数","9.6 around()函数",[14,108423,108424],{},"around()函数也可以实现对数的小数位数进行操作",[14,108426,108427],{},"其中的参数：",[14,108429,108430],{},"1.要传的数组",[14,108432,108433],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,108435,108436],{},[6750,108437],{"alt":98,"src":108438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[43,108440,108442],{"id":108441},"_97-三角函数","9.7 三角函数",[14,108444,108445],{},[6750,108446],{"alt":98,"src":108447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,108449,108450],{},"引入图像模块非常重要",[93,108452,108454],{"className":38243,"code":108453,"language":38245,"meta":98,"style":98},"from matplotlib import pyplot as plt\n",[83,108455,108456],{"__ignoreMap":98},[102,108457,108458,108460,108463,108465,108468,108470],{"class":104,"line":105},[102,108459,38602],{"class":108},[102,108461,108462],{"class":119}," matplotlib ",[102,108464,38257],{"class":108},[102,108466,108467],{"class":119}," pyplot ",[102,108469,39248],{"class":108},[102,108471,39302],{"class":119},[8955,108473,108474],{},"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":98,"searchDepth":116,"depth":116,"links":108476},[108477,108478,108479,108480,108481,108482,108483],{"id":108025,"depth":116,"text":108026},{"id":108140,"depth":116,"text":108141},{"id":108347,"depth":116,"text":108348},{"id":108356,"depth":116,"text":108357},{"id":108399,"depth":116,"text":108400},{"id":108420,"depth":116,"text":108421},{"id":108441,"depth":116,"text":108442},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":107989,"description":31240},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":108490,"title":108491,"body":108492,"description":31240,"extension":8978,"meta":108496,"navigation":651,"path":108497,"seo":108498,"stem":108499,"__hash__":108500},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":108493,"toc":108494},[],{"title":98,"searchDepth":116,"depth":116,"links":108495},[],{"category":58285},"\u002Fwiki\u002F2025-08-14-numpy",{"title":108491,"description":31240},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":108502,"title":108503,"body":108504,"description":98,"extension":8978,"meta":110512,"navigation":651,"path":110513,"seo":110514,"stem":110515,"__hash__":110516},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":108505,"toc":110488},[108506,108509,108513,108516,108519,108525,108528,108551,108554,108588,108591,108632,108636,108639,108732,108735,108779,108782,108799,108802,108816,108819,108822,108867,108870,108907,108911,108914,108920,108925,108945,108949,108952,109018,109021,109039,109043,109046,109075,109085,109091,109095,109098,109104,109115,109119,109122,109152,109155,109435,109438,109441,109452,109455,109458,109480,109487,109490,109508,109511,109514,109528,109536,109539,109565,109571,109574,109577,109587,109599,109619,109628,109648,109658,109682,109695,109709,109714,109755,109772,109797,109809,109829,109835,109880,109899,109916,109929,109945,109952,109964,109973,110008,110029,110054,110067,110091,110106,110131,110134,110155,110164,110167,110178,110182,110185,110191,110203,110210,110214,110217,110229,110232,110246,110249,110259,110269,110272,110312,110315,110319,110325,110328,110342,110346,110349,110382,110386,110389,110412,110420,110423,110429,110435,110438,110441,110469,110473,110476,110482,110485],[10,108507,108503],{"id":108508},"_1环境安装与第一个-mujoco-程序",[43,108510,108512],{"id":108511},"_1目标说明","1.目标说明",[14,108514,108515],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,108517,108518],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[93,108520,108523],{"className":108521,"code":108522,"language":6778,"meta":98},[6776],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[83,108524,108522],{"__ignoreMap":98},[14,108526,108527],{},"需要掌握:",[87,108529,108530,108533,108536,108541,108546],{},[62,108531,108532],{},"Fedora 44 下 MuJoCo 的系统依赖",[62,108534,108535],{},"Python 虚拟环境创建",[62,108537,108538],{},[83,108539,108540],{},"mujoco.MjModel",[62,108542,108543],{},[83,108544,108545],{},"mujoco.MjData",[62,108547,108548],{},[83,108549,108550],{},"mujoco.mj_step(model, data)",[14,108552,108553],{},"MuJoCo 中最重要的两个对象:",[9177,108555,108556,108566],{},[9180,108557,108558],{},[9183,108559,108560,108563],{},[9186,108561,108562],{"align":31600},"对象",[9186,108564,108565],{"align":31600},"含义",[9223,108567,108568,108578],{},[9183,108569,108570,108575],{},[9228,108571,108572],{"align":31600},[83,108573,108574],{},"MjModel",[9228,108576,108577],{"align":31600},"模型结构，来自 XML，基本不随时间变化",[9183,108579,108580,108585],{},[9228,108581,108582],{"align":31600},[83,108583,108584],{},"MjData",[9228,108586,108587],{"align":31600},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,108589,108590],{},"可以先用一个类比理解：",[9177,108592,108593,108603],{},[9180,108594,108595],{},[9183,108596,108597,108600],{},[9186,108598,108599],{"align":31600},"类比",[9186,108601,108602],{"align":31600},"MuJoCo 对象",[9223,108604,108605,108614,108623],{},[9183,108606,108607,108610],{},[9228,108608,108609],{"align":31600},"游戏地图和角色配置",[9228,108611,108612],{"align":31600},[83,108613,108574],{},[9183,108615,108616,108619],{},[9228,108617,108618],{"align":31600},"游戏运行到当前帧的状态",[9228,108620,108621],{"align":31600},[83,108622,108584],{},[9183,108624,108625,108628],{},[9228,108626,108627],{"align":31600},"前进一帧",[9228,108629,108630],{"align":31600},[83,108631,108550],{},[43,108633,108635],{"id":108634},"_2环境与依赖安装","2.环境与依赖安装",[14,108637,108638],{},"Fedora 44 系统依赖:",[93,108640,108642],{"className":31686,"code":108641,"language":31688,"meta":98,"style":98},"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",[83,108643,108644,108656,108669,108682,108692,108702,108721],{"__ignoreMap":98},[102,108645,108646,108648,108650,108652,108654],{"class":104,"line":105},[102,108647,32441],{"class":112},[102,108649,34180],{"class":278},[102,108651,31698],{"class":278},[102,108653,34265],{"class":187},[102,108655,32543],{"class":187},[102,108657,108658,108661,108664,108667],{"class":104,"line":116},[102,108659,108660],{"class":278},"  python3",[102,108662,108663],{"class":278}," python3-pip",[102,108665,108666],{"class":278}," python3-virtualenv",[102,108668,32543],{"class":187},[102,108670,108671,108674,108677,108680],{"class":104,"line":123},[102,108672,108673],{"class":278},"  mesa-libGL",[102,108675,108676],{"class":278}," mesa-libGLU",[102,108678,108679],{"class":278}," mesa-dri-drivers",[102,108681,32543],{"class":187},[102,108683,108684,108687,108690],{"class":104,"line":130},[102,108685,108686],{"class":278},"  libglvnd-glx",[102,108688,108689],{"class":278}," libglvnd-opengl",[102,108691,32543],{"class":187},[102,108693,108694,108697,108700],{"class":104,"line":136},[102,108695,108696],{"class":278},"  glfw",[102,108698,108699],{"class":278}," glfw-devel",[102,108701,32543],{"class":187},[102,108703,108704,108707,108710,108713,108716,108719],{"class":104,"line":142},[102,108705,108706],{"class":278},"  libX11",[102,108708,108709],{"class":278}," libXcursor",[102,108711,108712],{"class":278}," libXi",[102,108714,108715],{"class":278}," libXinerama",[102,108717,108718],{"class":278}," libXrandr",[102,108720,32543],{"class":187},[102,108722,108723,108726,108729],{"class":104,"line":148},[102,108724,108725],{"class":278},"  gcc",[102,108727,108728],{"class":278}," gcc-c++",[102,108730,108731],{"class":278}," make\n",[14,108733,108734],{},"创建 Python 环境:",[93,108736,108738],{"className":31686,"code":108737,"language":31688,"meta":98,"style":98},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[83,108739,108740,108754,108762],{"__ignoreMap":98},[102,108741,108742,108745,108748,108751],{"class":104,"line":105},[102,108743,108744],{"class":112},"python3",[102,108746,108747],{"class":187}," -m",[102,108749,108750],{"class":278}," venv",[102,108752,108753],{"class":278}," .venv\n",[102,108755,108756,108759],{"class":104,"line":116},[102,108757,108758],{"class":187},"source",[102,108760,108761],{"class":278}," .venv\u002Fbin\u002Factivate\n",[102,108763,108764,108766,108768,108771,108773,108776],{"class":104,"line":123},[102,108765,38245],{"class":112},[102,108767,108747],{"class":187},[102,108769,108770],{"class":278}," pip",[102,108772,31698],{"class":278},[102,108774,108775],{"class":187}," --upgrade",[102,108777,108778],{"class":278}," pip\n",[14,108780,108781],{},"pip 安装:",[93,108783,108785],{"className":31686,"code":108784,"language":31688,"meta":98,"style":98},"pip install \"mujoco>=2.3\" numpy\n",[83,108786,108787],{"__ignoreMap":98},[102,108788,108789,108791,108793,108796],{"class":104,"line":105},[102,108790,31695],{"class":112},[102,108792,31698],{"class":278},[102,108794,108795],{"class":278}," \"mujoco>=2.3\"",[102,108797,108798],{"class":278}," numpy\n",[14,108800,108801],{},"安装完成后，先做最小检查：",[93,108803,108805],{"className":31686,"code":108804,"language":31688,"meta":98,"style":98},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[83,108806,108807],{"__ignoreMap":98},[102,108808,108809,108811,108813],{"class":104,"line":105},[102,108810,38245],{"class":112},[102,108812,38223],{"class":187},[102,108814,108815],{"class":278}," \"import mujoco; print(mujoco.__version__)\"\n",[14,108817,108818],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,108820,108821],{},"conda 安装:",[93,108823,108825],{"className":31686,"code":108824,"language":31688,"meta":98,"style":98},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[83,108826,108827,108847,108857],{"__ignoreMap":98},[102,108828,108829,108831,108833,108835,108838,108841,108844],{"class":104,"line":105},[102,108830,38195],{"class":112},[102,108832,37041],{"class":278},[102,108834,32980],{"class":187},[102,108836,108837],{"class":278}," mujoco-study",[102,108839,108840],{"class":278}," python=",[102,108842,108843],{"class":187},"3.10",[102,108845,108846],{"class":187}," -y\n",[102,108848,108849,108851,108854],{"class":104,"line":116},[102,108850,38195],{"class":112},[102,108852,108853],{"class":278}," activate",[102,108855,108856],{"class":278}," mujoco-study\n",[102,108858,108859,108861,108863,108865],{"class":104,"line":123},[102,108860,31695],{"class":112},[102,108862,31698],{"class":278},[102,108864,108795],{"class":278},[102,108866,108798],{"class":278},[14,108868,108869],{},"版本冲突说明:",[87,108871,108872,108878,108888,108897],{},[62,108873,108874,108875,36250],{},"不要安装 ",[83,108876,108877],{},"mujoco-py",[62,108879,108880,108881,108883,108884,108887],{},"如果旧项目里同时安装了 ",[83,108882,108877],{}," 和 ",[83,108885,108886],{},"mujoco","，建议新建干净虚拟环境。",[62,108889,108890,108893,108894,36250],{},[83,108891,108892],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[83,108895,108896],{},"~\u002F.mujoco\u002Fmujoco210",[62,108898,108899,108900,90404,108903,108906],{},"离屏渲染可能涉及 OpenGL 后端，",[83,108901,108902],{},"MUJOCO_GL=egl",[83,108904,108905],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[43,108908,108910],{"id":108909},"_3核心概念解释","3.核心概念解释",[14,108912,108913],{},"MuJoCo 的基本执行流程:",[93,108915,108918],{"className":108916,"code":108917,"language":6778,"meta":98},[6776],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[83,108919,108917],{"__ignoreMap":98},[14,108921,108922,108924],{},[83,108923,108574],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,108926,108927,108929,108930,9250,108933,9250,108936,9250,108939,9250,108942,36250],{},[83,108928,108584],{}," 存放仿真运行时状态，例如 ",[83,108931,108932],{},"data.time",[83,108934,108935],{},"data.qpos",[83,108937,108938],{},"data.qvel",[83,108940,108941],{},"data.ctrl",[83,108943,108944],{},"data.xpos",[48,108946,108948],{"id":108947},"xml-是什么","XML 是什么",[14,108950,108951],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[93,108953,108955],{"className":60932,"code":108954,"language":60934,"meta":98,"style":98},"\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",[83,108956,108957,108979,109010],{"__ignoreMap":98},[102,108958,108959,108961,108963,108965,108967,108969,108972,108974,108977],{"class":104,"line":105},[102,108960,1208],{"class":119},[102,108962,59665],{"class":59165},[102,108964,387],{"class":112},[102,108966,260],{"class":119},[102,108968,61356],{"class":278},[102,108970,108971],{"class":112}," pos",[102,108973,260],{"class":119},[102,108975,108976],{"class":278},"\"0 0 1\"",[102,108978,59172],{"class":119},[102,108980,108981,108983,108986,108988,108990,108993,108995,108997,108999,109002,109004,109007],{"class":104,"line":116},[102,108982,60009],{"class":119},[102,108984,108985],{"class":59165},"geom",[102,108987,387],{"class":112},[102,108989,260],{"class":119},[102,108991,108992],{"class":278},"\"box_geom\"",[102,108994,61689],{"class":112},[102,108996,260],{"class":119},[102,108998,61356],{"class":278},[102,109000,109001],{"class":112}," size",[102,109003,260],{"class":119},[102,109005,109006],{"class":278},"\"0.1 0.1 0.1\"",[102,109008,109009],{"class":119},"\u002F>\n",[102,109011,109012,109014,109016],{"class":104,"line":123},[102,109013,59650],{"class":119},[102,109015,59665],{"class":59165},[102,109017,59172],{"class":119},[14,109019,109020],{},"这段意思是：",[87,109022,109023,109029,109036],{},[62,109024,109025,109026,109028],{},"创建一个叫 ",[83,109027,61579],{}," 的刚体。",[62,109030,109031,109032,109035],{},"它初始放在 ",[83,109033,109034],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[62,109037,109038],{},"它里面有一个盒子形状的几何体。",[48,109040,109042],{"id":109041},"timestep-是什么","timestep 是什么",[14,109044,109045],{},"XML 里的：",[93,109047,109049],{"className":60932,"code":109048,"language":60934,"meta":98,"style":98},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[83,109050,109051],{"__ignoreMap":98},[102,109052,109053,109055,109057,109060,109062,109065,109068,109070,109073],{"class":104,"line":105},[102,109054,1208],{"class":119},[102,109056,77031],{"class":59165},[102,109058,109059],{"class":112}," timestep",[102,109061,260],{"class":119},[102,109063,109064],{"class":278},"\"0.01\"",[102,109066,109067],{"class":112}," gravity",[102,109069,260],{"class":119},[102,109071,109072],{"class":278},"\"0 0 -9.81\"",[102,109074,109009],{"class":119},[14,109076,109077,109078,109081,109082,109084],{},"表示每调用一次 ",[83,109079,109080],{},"mj_step","，仿真时间前进 ",[83,109083,46851],{}," 秒。循环 100 次，大约就是 1 秒：",[93,109086,109089],{"className":109087,"code":109088,"language":6778,"meta":98},[6776],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[83,109090,109088],{"__ignoreMap":98},[48,109092,109094],{"id":109093},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,109096,109097],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[93,109099,109102],{"className":109100,"code":109101,"language":6778,"meta":98},[6776],"x y z qw qx qy qz\n",[83,109103,109101],{"__ignoreMap":98},[14,109105,109106,109107,109110,109111,109114],{},"表示一个自由刚体的位置和姿态。其中 ",[83,109108,109109],{},"x y z"," 是位置，",[83,109112,109113],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[43,109116,109118],{"id":109117},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,109120,109121],{},"新建文件:",[93,109123,109125],{"className":31686,"code":109124,"language":31688,"meta":98,"style":98},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[83,109126,109127,109137,109144],{"__ignoreMap":98},[102,109128,109129,109132,109134],{"class":104,"line":105},[102,109130,109131],{"class":112},"mkdir",[102,109133,37081],{"class":187},[102,109135,109136],{"class":278}," mujoco_tutorial\n",[102,109138,109139,109142],{"class":104,"line":116},[102,109140,109141],{"class":187},"cd",[102,109143,109136],{"class":278},[102,109145,109146,109149],{"class":104,"line":123},[102,109147,109148],{"class":112},"touch",[102,109150,109151],{"class":278}," ch1_first_sim.py\n",[14,109153,109154],{},"写入:",[93,109156,109158],{"className":38243,"code":109157,"language":38245,"meta":98,"style":98},"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",[83,109159,109160,109167,109171,109175,109185,109190,109195,109199,109204,109209,109213,109218,109223,109228,109233,109238,109243,109247,109251,109255,109268,109282,109292,109296,109308,109320,109332,109344,109356,109360,109377,109382,109386,109397,109408,109412,109416,109430],{"__ignoreMap":98},[102,109161,109162,109164],{"class":104,"line":105},[102,109163,38257],{"class":108},[102,109165,109166],{"class":119}," mujoco\n",[102,109168,109169],{"class":104,"line":116},[102,109170,652],{"emptyLinePlaceholder":651},[102,109172,109173],{"class":104,"line":123},[102,109174,652],{"emptyLinePlaceholder":651},[102,109176,109177,109180,109182],{"class":104,"line":130},[102,109178,109179],{"class":187},"XML",[102,109181,22296],{"class":108},[102,109183,109184],{"class":278}," \"\"\"\n",[102,109186,109187],{"class":104,"line":136},[102,109188,109189],{"class":278},"\u003Cmujoco model=\"first_sim\">\n",[102,109191,109192],{"class":104,"line":142},[102,109193,109194],{"class":278},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[102,109196,109197],{"class":104,"line":148},[102,109198,652],{"emptyLinePlaceholder":651},[102,109200,109201],{"class":104,"line":157},[102,109202,109203],{"class":278},"  \u003Cworldbody>\n",[102,109205,109206],{"class":104,"line":163},[102,109207,109208],{"class":278},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[102,109210,109211],{"class":104,"line":175},[102,109212,652],{"emptyLinePlaceholder":651},[102,109214,109215],{"class":104,"line":181},[102,109216,109217],{"class":278},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[102,109219,109220],{"class":104,"line":202},[102,109221,109222],{"class":278},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[102,109224,109225],{"class":104,"line":208},[102,109226,109227],{"class":278},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[102,109229,109230],{"class":104,"line":214},[102,109231,109232],{"class":278},"    \u003C\u002Fbody>\n",[102,109234,109235],{"class":104,"line":225},[102,109236,109237],{"class":278},"  \u003C\u002Fworldbody>\n",[102,109239,109240],{"class":104,"line":230},[102,109241,109242],{"class":278},"\u003C\u002Fmujoco>\n",[102,109244,109245],{"class":104,"line":236},[102,109246,103563],{"class":278},[102,109248,109249],{"class":104,"line":242},[102,109250,652],{"emptyLinePlaceholder":651},[102,109252,109253],{"class":104,"line":248},[102,109254,652],{"emptyLinePlaceholder":651},[102,109256,109257,109259,109261,109264,109266],{"class":104,"line":254},[102,109258,39812],{"class":108},[102,109260,220],{"class":112},[102,109262,109263],{"class":119},"() -> ",[102,109265,103551],{"class":187},[102,109267,12552],{"class":119},[102,109269,109270,109273,109275,109278,109280],{"class":104,"line":269},[102,109271,109272],{"class":119},"    model ",[102,109274,260],{"class":108},[102,109276,109277],{"class":119}," mujoco.MjModel.from_xml_string(",[102,109279,109179],{"class":187},[102,109281,390],{"class":119},[102,109283,109284,109287,109289],{"class":104,"line":298},[102,109285,109286],{"class":119},"    data ",[102,109288,260],{"class":108},[102,109290,109291],{"class":119}," mujoco.MjData(model)\n",[102,109293,109294],{"class":104,"line":502},[102,109295,652],{"emptyLinePlaceholder":651},[102,109297,109298,109300,109302,109305],{"class":104,"line":507},[102,109299,39164],{"class":187},[102,109301,380],{"class":119},[102,109303,109304],{"class":278},"\"nq:\"",[102,109306,109307],{"class":119},", model.nq)\n",[102,109309,109310,109312,109314,109317],{"class":104,"line":512},[102,109311,39164],{"class":187},[102,109313,380],{"class":119},[102,109315,109316],{"class":278},"\"nv:\"",[102,109318,109319],{"class":119},", model.nv)\n",[102,109321,109322,109324,109326,109329],{"class":104,"line":521},[102,109323,39164],{"class":187},[102,109325,380],{"class":119},[102,109327,109328],{"class":278},"\"nu:\"",[102,109330,109331],{"class":119},", model.nu)\n",[102,109333,109334,109336,109338,109341],{"class":104,"line":526},[102,109335,39164],{"class":187},[102,109337,380],{"class":119},[102,109339,109340],{"class":278},"\"initial time:\"",[102,109342,109343],{"class":119},", data.time)\n",[102,109345,109346,109348,109350,109353],{"class":104,"line":532},[102,109347,39164],{"class":187},[102,109349,380],{"class":119},[102,109351,109352],{"class":278},"\"initial qpos:\"",[102,109354,109355],{"class":119},", data.qpos.copy())\n",[102,109357,109358],{"class":104,"line":538},[102,109359,652],{"emptyLinePlaceholder":651},[102,109361,109362,109364,109367,109369,109371,109373,109375],{"class":104,"line":555},[102,109363,12016],{"class":108},[102,109365,109366],{"class":119}," _ ",[102,109368,33908],{"class":108},[102,109370,40308],{"class":187},[102,109372,380],{"class":119},[102,109374,5569],{"class":187},[102,109376,38651],{"class":119},[102,109378,109379],{"class":104,"line":570},[102,109380,109381],{"class":119},"        mujoco.mj_step(model, data)\n",[102,109383,109384],{"class":104,"line":581},[102,109385,652],{"emptyLinePlaceholder":651},[102,109387,109388,109390,109392,109395],{"class":104,"line":819},[102,109389,39164],{"class":187},[102,109391,380],{"class":119},[102,109393,109394],{"class":278},"\"final time:\"",[102,109396,109343],{"class":119},[102,109398,109399,109401,109403,109406],{"class":104,"line":828},[102,109400,39164],{"class":187},[102,109402,380],{"class":119},[102,109404,109405],{"class":278},"\"final qpos:\"",[102,109407,109355],{"class":119},[102,109409,109410],{"class":104,"line":837},[102,109411,652],{"emptyLinePlaceholder":651},[102,109413,109414],{"class":104,"line":842},[102,109415,652],{"emptyLinePlaceholder":651},[102,109417,109418,109420,109422,109425,109428],{"class":104,"line":855},[102,109419,10407],{"class":108},[102,109421,39085],{"class":187},[102,109423,109424],{"class":108}," ==",[102,109426,109427],{"class":278}," \"__main__\"",[102,109429,12552],{"class":119},[102,109431,109432],{"class":104,"line":860},[102,109433,109434],{"class":119},"    main()\n",[48,109436,109437],{"id":109437},"代码逐段解释",[14,109439,109440],{},"导入库：",[93,109442,109444],{"className":38243,"code":109443,"language":38245,"meta":98,"style":98},"import mujoco\n",[83,109445,109446],{"__ignoreMap":98},[102,109447,109448,109450],{"class":104,"line":105},[102,109449,38257],{"class":108},[102,109451,109166],{"class":119},[14,109453,109454],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,109456,109457],{},"定义 XML：",[93,109459,109461],{"className":38243,"code":109460,"language":38245,"meta":98,"style":98},"XML = \"\"\"\n...\n\"\"\"\n",[83,109462,109463,109471,109476],{"__ignoreMap":98},[102,109464,109465,109467,109469],{"class":104,"line":105},[102,109466,109179],{"class":187},[102,109468,22296],{"class":108},[102,109470,109184],{"class":278},[102,109472,109473],{"class":104,"line":116},[102,109474,109475],{"class":278},"...\n",[102,109477,109478],{"class":104,"line":123},[102,109479,103563],{"class":278},[14,109481,109482,109483,109486],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[83,109484,109485],{},"freejoint"," 的方块。",[14,109488,109489],{},"编译模型：",[93,109491,109493],{"className":38243,"code":109492,"language":38245,"meta":98,"style":98},"model = mujoco.MjModel.from_xml_string(XML)\n",[83,109494,109495],{"__ignoreMap":98},[102,109496,109497,109500,109502,109504,109506],{"class":104,"line":105},[102,109498,109499],{"class":119},"model ",[102,109501,260],{"class":108},[102,109503,109277],{"class":119},[102,109505,109179],{"class":187},[102,109507,390],{"class":119},[14,109509,109510],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,109512,109513],{},"创建数据：",[93,109515,109517],{"className":38243,"code":109516,"language":38245,"meta":98,"style":98},"data = mujoco.MjData(model)\n",[83,109518,109519],{"__ignoreMap":98},[102,109520,109521,109524,109526],{"class":104,"line":105},[102,109522,109523],{"class":119},"data ",[102,109525,260],{"class":108},[102,109527,109291],{"class":119},[14,109529,109530,109532,109533,109535],{},[83,109531,41266],{}," 会保存仿真当前状态。刚创建时，时间是 ",[83,109534,8423],{},"，方块还在初始位置。",[14,109537,109538],{},"推进仿真：",[93,109540,109542],{"className":38243,"code":109541,"language":38245,"meta":98,"style":98},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[83,109543,109544,109560],{"__ignoreMap":98},[102,109545,109546,109548,109550,109552,109554,109556,109558],{"class":104,"line":105},[102,109547,11841],{"class":108},[102,109549,109366],{"class":119},[102,109551,33908],{"class":108},[102,109553,40308],{"class":187},[102,109555,380],{"class":119},[102,109557,5569],{"class":187},[102,109559,38651],{"class":119},[102,109561,109562],{"class":104,"line":116},[102,109563,109564],{"class":119},"    mujoco.mj_step(model, data)\n",[14,109566,109567,109568,109570],{},"每次 ",[83,109569,109080],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[48,109572,109573],{"id":109573},"代码逐行细讲",[14,109575,109576],{},"下面把完整代码按新手视角拆开讲。",[93,109578,109579],{"className":38243,"code":109443,"language":38245,"meta":98,"style":98},[83,109580,109581],{"__ignoreMap":98},[102,109582,109583,109585],{"class":104,"line":105},[102,109584,38257],{"class":108},[102,109586,109166],{"class":119},[14,109588,109589,109591,109592,9250,109594,9250,109596,36250],{},[83,109590,38257],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[83,109593,108540],{},[83,109595,108545],{},[83,109597,109598],{},"mujoco.mj_step",[93,109600,109601],{"className":38243,"code":109460,"language":38245,"meta":98,"style":98},[83,109602,109603,109611,109615],{"__ignoreMap":98},[102,109604,109605,109607,109609],{"class":104,"line":105},[102,109606,109179],{"class":187},[102,109608,22296],{"class":108},[102,109610,109184],{"class":278},[102,109612,109613],{"class":104,"line":116},[102,109614,109475],{"class":278},[102,109616,109617],{"class":104,"line":123},[102,109618,103563],{"class":278},[14,109620,109621,109623,109624,109627],{},[83,109622,109179],{}," 是一个变量名。右边的三引号 ",[83,109625,109626],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[93,109629,109630],{"className":60932,"code":109189,"language":60934,"meta":98,"style":98},[83,109631,109632],{"__ignoreMap":98},[102,109633,109634,109636,109638,109641,109643,109646],{"class":104,"line":105},[102,109635,1208],{"class":119},[102,109637,108886],{"class":59165},[102,109639,109640],{"class":112}," model",[102,109642,260],{"class":119},[102,109644,109645],{"class":278},"\"first_sim\"",[102,109647,59172],{"class":119},[14,109649,109650,109651,109654,109655,36250],{},"这是 XML 的根标签。",[83,109652,109653],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[83,109656,109657],{},"first_sim",[93,109659,109660],{"className":60932,"code":109048,"language":60934,"meta":98,"style":98},[83,109661,109662],{"__ignoreMap":98},[102,109663,109664,109666,109668,109670,109672,109674,109676,109678,109680],{"class":104,"line":105},[102,109665,1208],{"class":119},[102,109667,77031],{"class":59165},[102,109669,109059],{"class":112},[102,109671,260],{"class":119},[102,109673,109064],{"class":278},[102,109675,109067],{"class":112},[102,109677,260],{"class":119},[102,109679,109072],{"class":278},[102,109681,109009],{"class":119},[14,109683,109684,109686,109687,109690,109691,109694],{},[83,109685,77031],{}," 用来设置仿真参数。",[83,109688,109689],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[83,109692,109693],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[93,109696,109698],{"className":60932,"code":109697,"language":60934,"meta":98,"style":98},"\u003Cworldbody>\n",[83,109699,109700],{"__ignoreMap":98},[102,109701,109702,109704,109707],{"class":104,"line":105},[102,109703,1208],{"class":119},[102,109705,109706],{"class":59165},"worldbody",[102,109708,59172],{"class":119},[14,109710,109711,109713],{},[83,109712,109706],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[93,109715,109717],{"className":60932,"code":109716,"language":60934,"meta":98,"style":98},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[83,109718,109719],{"__ignoreMap":98},[102,109720,109721,109723,109725,109727,109729,109732,109734,109736,109739,109741,109743,109746,109748,109750,109753],{"class":104,"line":105},[102,109722,1208],{"class":119},[102,109724,108985],{"class":59165},[102,109726,387],{"class":112},[102,109728,260],{"class":119},[102,109730,109731],{"class":278},"\"floor\"",[102,109733,61689],{"class":112},[102,109735,260],{"class":119},[102,109737,109738],{"class":278},"\"plane\"",[102,109740,109001],{"class":112},[102,109742,260],{"class":119},[102,109744,109745],{"class":278},"\"2 2 0.1\"",[102,109747,86632],{"class":112},[102,109749,260],{"class":119},[102,109751,109752],{"class":278},"\"0.8 0.8 0.8 1\"",[102,109754,109009],{"class":119},[14,109756,109757,109758,109760,109761,109764,109765,109768,109769,109771],{},"这行创建地面。",[83,109759,108985],{}," 是几何体。",[83,109762,109763],{},"name=\"floor\""," 是名字。",[83,109766,109767],{},"type=\"plane\""," 表示平面。",[83,109770,62975],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[93,109773,109775],{"className":60932,"code":109774,"language":60934,"meta":98,"style":98},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[83,109776,109777],{"__ignoreMap":98},[102,109778,109779,109781,109783,109785,109787,109789,109791,109793,109795],{"class":104,"line":105},[102,109780,1208],{"class":119},[102,109782,59665],{"class":59165},[102,109784,387],{"class":112},[102,109786,260],{"class":119},[102,109788,61356],{"class":278},[102,109790,108971],{"class":112},[102,109792,260],{"class":119},[102,109794,108976],{"class":278},[102,109796,59172],{"class":119},[14,109798,109799,109800,36250,109802,109805,109806,109808],{},"这行创建一个刚体，名字叫 ",[83,109801,61579],{},[83,109803,109804],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[83,109807,109034],{},"，也就是离地面 1 米高。",[93,109810,109812],{"className":60932,"code":109811,"language":60934,"meta":98,"style":98},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[83,109813,109814],{"__ignoreMap":98},[102,109815,109816,109818,109820,109822,109824,109827],{"class":104,"line":105},[102,109817,1208],{"class":119},[102,109819,109485],{"class":59165},[102,109821,387],{"class":112},[102,109823,260],{"class":119},[102,109825,109826],{"class":278},"\"box_free\"",[102,109828,109009],{"class":119},[14,109830,109831,109832,109834],{},"这行很重要。",[83,109833,109485],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[93,109836,109838],{"className":60932,"code":109837,"language":60934,"meta":98,"style":98},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[83,109839,109840],{"__ignoreMap":98},[102,109841,109842,109844,109846,109848,109850,109852,109854,109856,109858,109860,109862,109864,109867,109869,109871,109873,109875,109878],{"class":104,"line":105},[102,109843,1208],{"class":119},[102,109845,108985],{"class":59165},[102,109847,387],{"class":112},[102,109849,260],{"class":119},[102,109851,108992],{"class":278},[102,109853,61689],{"class":112},[102,109855,260],{"class":119},[102,109857,61356],{"class":278},[102,109859,109001],{"class":112},[102,109861,260],{"class":119},[102,109863,109006],{"class":278},[102,109865,109866],{"class":112}," mass",[102,109868,260],{"class":119},[102,109870,12491],{"class":278},[102,109872,86632],{"class":112},[102,109874,260],{"class":119},[102,109876,109877],{"class":278},"\"1 0 0 1\"",[102,109879,109009],{"class":119},[14,109881,109882,109883,109886,109887,109890,109891,109894,109895,109898],{},"这行给 box body 添加一个盒子形状。",[83,109884,109885],{},"type=\"box\""," 表示形状是盒子。",[83,109888,109889],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[83,109892,109893],{},"mass=\"1\""," 表示质量是 1。",[83,109896,109897],{},"rgba=\"1 0 0 1\""," 表示红色。",[93,109900,109902],{"className":38243,"code":109901,"language":38245,"meta":98,"style":98},"def main() -> None:\n",[83,109903,109904],{"__ignoreMap":98},[102,109905,109906,109908,109910,109912,109914],{"class":104,"line":105},[102,109907,39812],{"class":108},[102,109909,220],{"class":112},[102,109911,109263],{"class":119},[102,109913,103551],{"class":187},[102,109915,12552],{"class":119},[14,109917,109918,109920,109921,109924,109925,109928],{},[83,109919,39812],{}," 用来定义函数。这里定义了一个叫 ",[83,109922,109923],{},"main"," 的函数。",[83,109926,109927],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[93,109930,109931],{"className":38243,"code":109492,"language":38245,"meta":98,"style":98},[83,109932,109933],{"__ignoreMap":98},[102,109934,109935,109937,109939,109941,109943],{"class":104,"line":105},[102,109936,109499],{"class":119},[102,109938,260],{"class":108},[102,109940,109277],{"class":119},[102,109942,109179],{"class":187},[102,109944,390],{"class":119},[14,109946,109947,109948,109951],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[83,109949,109950],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[93,109953,109954],{"className":38243,"code":109516,"language":38245,"meta":98,"style":98},[83,109955,109956],{"__ignoreMap":98},[102,109957,109958,109960,109962],{"class":104,"line":105},[102,109959,109523],{"class":119},[102,109961,260],{"class":108},[102,109963,109291],{"class":119},[14,109965,109966,109967,109969,109970,109972],{},"这行创建仿真数据。",[83,109968,41266],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[83,109971,41266],{}," 都会变化。",[93,109974,109976],{"className":38243,"code":109975,"language":38245,"meta":98,"style":98},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[83,109977,109978,109988,109998],{"__ignoreMap":98},[102,109979,109980,109982,109984,109986],{"class":104,"line":105},[102,109981,38280],{"class":187},[102,109983,380],{"class":119},[102,109985,109304],{"class":278},[102,109987,109307],{"class":119},[102,109989,109990,109992,109994,109996],{"class":104,"line":116},[102,109991,38280],{"class":187},[102,109993,380],{"class":119},[102,109995,109316],{"class":278},[102,109997,109319],{"class":119},[102,109999,110000,110002,110004,110006],{"class":104,"line":123},[102,110001,38280],{"class":187},[102,110003,380],{"class":119},[102,110005,109328],{"class":278},[102,110007,109331],{"class":119},[14,110009,110010,110012,110013,110016,110017,110020,110021,110024,110025,110028],{},[83,110011,38280],{}," 用来输出信息。",[83,110014,110015],{},"model.nq"," 是位置变量数量，",[83,110018,110019],{},"model.nv"," 是速度变量数量，",[83,110022,110023],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[83,110026,110027],{},"nu"," 是 0。",[93,110030,110032],{"className":38243,"code":110031,"language":38245,"meta":98,"style":98},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[83,110033,110034,110044],{"__ignoreMap":98},[102,110035,110036,110038,110040,110042],{"class":104,"line":105},[102,110037,38280],{"class":187},[102,110039,380],{"class":119},[102,110041,109340],{"class":278},[102,110043,109343],{"class":119},[102,110045,110046,110048,110050,110052],{"class":104,"line":116},[102,110047,38280],{"class":187},[102,110049,380],{"class":119},[102,110051,109352],{"class":278},[102,110053,109355],{"class":119},[14,110055,110056,110057,110059,110060,110062,110063,110066],{},"这里打印初始时间和初始位置。",[83,110058,108932],{}," 一开始是 0。",[83,110061,108935],{}," 是位置数组。",[83,110064,110065],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[93,110068,110069],{"className":38243,"code":109541,"language":38245,"meta":98,"style":98},[83,110070,110071,110087],{"__ignoreMap":98},[102,110072,110073,110075,110077,110079,110081,110083,110085],{"class":104,"line":105},[102,110074,11841],{"class":108},[102,110076,109366],{"class":119},[102,110078,33908],{"class":108},[102,110080,40308],{"class":187},[102,110082,380],{"class":119},[102,110084,5569],{"class":187},[102,110086,38651],{"class":119},[102,110088,110089],{"class":104,"line":116},[102,110090,109564],{"class":119},[14,110092,110093,110095,110096,110099,110100,110102,110103,110105],{},[83,110094,11841],{}," 是循环。",[83,110097,110098],{},"range(100)"," 表示循环 100 次。",[83,110101,10012],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[83,110104,109080],{},"，仿真就前进一步。",[93,110107,110109],{"className":38243,"code":110108,"language":38245,"meta":98,"style":98},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[83,110110,110111,110121],{"__ignoreMap":98},[102,110112,110113,110115,110117,110119],{"class":104,"line":105},[102,110114,38280],{"class":187},[102,110116,380],{"class":119},[102,110118,109394],{"class":278},[102,110120,109343],{"class":119},[102,110122,110123,110125,110127,110129],{"class":104,"line":116},[102,110124,38280],{"class":187},[102,110126,380],{"class":119},[102,110128,109405],{"class":278},[102,110130,109355],{"class":119},[14,110132,110133],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[93,110135,110137],{"className":38243,"code":110136,"language":38245,"meta":98,"style":98},"if __name__ == \"__main__\":\n    main()\n",[83,110138,110139,110151],{"__ignoreMap":98},[102,110140,110141,110143,110145,110147,110149],{"class":104,"line":105},[102,110142,10407],{"class":108},[102,110144,39085],{"class":187},[102,110146,109424],{"class":108},[102,110148,109427],{"class":278},[102,110150,12552],{"class":119},[102,110152,110153],{"class":104,"line":116},[102,110154,109434],{"class":119},[14,110156,110157,110158,110161,110162,36250],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[83,110159,110160],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[83,110163,110160],{},[14,110165,110166],{},"运行:",[93,110168,110170],{"className":31686,"code":110169,"language":31688,"meta":98,"style":98},"python ch1_first_sim.py\n",[83,110171,110172],{"__ignoreMap":98},[102,110173,110174,110176],{"class":104,"line":105},[102,110175,38245],{"class":112},[102,110177,109151],{"class":278},[43,110179,110181],{"id":110180},"_5运行结果说明","5.运行结果说明",[14,110183,110184],{},"你应该看到类似输出:",[93,110186,110189],{"className":110187,"code":110188,"language":6778,"meta":98},[6776],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[83,110190,110188],{"__ignoreMap":98},[14,110192,110193,110195,110196,110199,110200,36250],{},[83,110194,109485],{}," 有 7 个位置变量: ",[83,110197,110198],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[83,110201,110202],{},"vx vy vz wx wy wz",[14,110204,110205,110206,110209],{},"你还会看到 ",[83,110207,110208],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[43,110211,110213],{"id":110212},"_6验证步骤","6.验证步骤",[14,110215,110216],{},"确认版本:",[93,110218,110219],{"className":31686,"code":108804,"language":31688,"meta":98,"style":98},[83,110220,110221],{"__ignoreMap":98},[102,110222,110223,110225,110227],{"class":104,"line":105},[102,110224,38245],{"class":112},[102,110226,38223],{"class":187},[102,110228,108815],{"class":278},[14,110230,110231],{},"确认导入的是官方 bindings:",[93,110233,110235],{"className":31686,"code":110234,"language":31688,"meta":98,"style":98},"python -c \"import mujoco; print(mujoco)\"\n",[83,110236,110237],{"__ignoreMap":98},[102,110238,110239,110241,110243],{"class":104,"line":105},[102,110240,38245],{"class":112},[102,110242,38223],{"class":187},[102,110244,110245],{"class":278}," \"import mujoco; print(mujoco)\"\n",[14,110247,110248],{},"运行程序:",[93,110250,110251],{"className":31686,"code":110169,"language":31688,"meta":98,"style":98},[83,110252,110253],{"__ignoreMap":98},[102,110254,110255,110257],{"class":104,"line":105},[102,110256,38245],{"class":112},[102,110258,109151],{"class":278},[14,110260,110261,110262,110265,110266,36250],{},"检查 ",[83,110263,110264],{},"final time"," 是否约等于 ",[83,110267,110268],{},"1.0",[14,110270,110271],{},"再做几个小实验：",[87,110273,110274,110284,110292,110305],{},[62,110275,110276,110277,110279,110280,110283],{},"把 ",[83,110278,109804],{}," 改成 ",[83,110281,110282],{},"pos=\"0 0 2\"","，观察初始高度变化。",[62,110285,110276,110286,110279,110288,110291],{},[83,110287,109693],{},[83,110289,110290],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[62,110293,110276,110294,110279,110296,110299,110300,110302,110303,36250],{},[83,110295,109689],{},[83,110297,110298],{},"timestep=\"0.005\"","，观察 100 步后的 ",[83,110301,110264],{}," 是否变成约 ",[83,110304,43194],{},[62,110306,110307,110308,110311],{},"删除 ",[83,110309,110310],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,110313,110314],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[43,110316,110318],{"id":110317},"_7常见错误与解决方案","7.常见错误与解决方案",[48,110320,110322],{"id":110321},"modulenotfounderror-no-module-named-mujoco",[83,110323,110324],{},"ModuleNotFoundError: No module named 'mujoco'",[14,110326,110327],{},"解决:",[93,110329,110331],{"className":31686,"code":110330,"language":31688,"meta":98,"style":98},"pip install \"mujoco>=2.3\"\n",[83,110332,110333],{"__ignoreMap":98},[102,110334,110335,110337,110339],{"class":104,"line":105},[102,110336,31695],{"class":112},[102,110338,31698],{"class":278},[102,110340,110341],{"class":278}," \"mujoco>=2.3\"\n",[48,110343,110345],{"id":110344},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,110347,110348],{},"先安装系统依赖:",[93,110350,110352],{"className":31686,"code":110351,"language":31688,"meta":98,"style":98},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[83,110353,110354],{"__ignoreMap":98},[102,110355,110356,110358,110360,110362,110364,110367,110369,110372,110374,110377,110379],{"class":104,"line":105},[102,110357,32441],{"class":112},[102,110359,34180],{"class":278},[102,110361,31698],{"class":278},[102,110363,34265],{"class":187},[102,110365,110366],{"class":278}," mesa-libGL",[102,110368,108679],{"class":278},[102,110370,110371],{"class":278}," glfw",[102,110373,108699],{"class":278},[102,110375,110376],{"class":278}," libX11",[102,110378,108712],{"class":278},[102,110380,110381],{"class":278}," libXrandr\n",[48,110383,110385],{"id":110384},"xml-解析失败","XML 解析失败",[14,110387,110388],{},"检查:",[87,110390,110391,110394,110397,110403],{},[62,110392,110393],{},"标签是否闭合",[62,110395,110396],{},"属性是否带引号",[62,110398,110399,110400],{},"根节点是否是 ",[83,110401,110402],{},"\u003Cmujoco>",[62,110404,110405,110407,110408,110411],{},[83,110406,59665],{}," 是否放在 ",[83,110409,110410],{},"\u003Cworldbody>"," 内部",[48,110413,110415,110417,110418],{"id":110414},"final-time-不是严格等于-10",[83,110416,110264],{}," 不是严格等于 ",[83,110419,110268],{},[14,110421,110422],{},"这通常不是错误。浮点数计算可能得到：",[93,110424,110427],{"className":110425,"code":110426,"language":6778,"meta":98},[6776],"1.0000000000000007\n",[83,110428,110426],{"__ignoreMap":98},[14,110430,110431,110432,110434],{},"只要接近 ",[83,110433,110268],{}," 就正常。",[48,110436,110437],{"id":110437},"方块没有掉下来",[14,110439,110440],{},"检查：",[87,110442,110443,110449,110455,110460],{},[62,110444,110445,110446],{},"方块 body 里是否有 ",[83,110447,110448],{},"\u003Cfreejoint\u002F>",[62,110450,110451,110452],{},"重力是否是 ",[83,110453,110454],{},"0 0 -9.81",[62,110456,110457,110458],{},"是否真的调用了 ",[83,110459,108550],{},[62,110461,110462,110463,110465,110466],{},"你看的是否是 ",[83,110464,110208],{},"，不是 ",[83,110467,110468],{},"initial qpos",[43,110470,110472],{"id":110471},"_8本章小结","8.本章小结",[14,110474,110475],{},"本章你已经完成了 MuJoCo 的最小闭环：",[93,110477,110480],{"className":110478,"code":110479,"language":6778,"meta":98},[6776],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[83,110481,110479],{"__ignoreMap":98},[14,110483,110484],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[8955,110486,110487],{},"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":98,"searchDepth":116,"depth":116,"links":110489},[110490,110491,110492,110497,110501,110502,110503,110511],{"id":108511,"depth":116,"text":108512},{"id":108634,"depth":116,"text":108635},{"id":108909,"depth":116,"text":108910,"children":110493},[110494,110495,110496],{"id":108947,"depth":123,"text":108948},{"id":109041,"depth":123,"text":109042},{"id":109093,"depth":123,"text":109094},{"id":109117,"depth":116,"text":109118,"children":110498},[110499,110500],{"id":109437,"depth":123,"text":109437},{"id":109573,"depth":123,"text":109573},{"id":110180,"depth":116,"text":110181},{"id":110212,"depth":116,"text":110213},{"id":110317,"depth":116,"text":110318,"children":110504},[110505,110506,110507,110508,110510],{"id":110321,"depth":123,"text":110324},{"id":110344,"depth":123,"text":110345},{"id":110384,"depth":123,"text":110385},{"id":110414,"depth":123,"text":110509},"final time 不是严格等于 1.0",{"id":110437,"depth":123,"text":110437},{"id":110471,"depth":116,"text":110472},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":108503,"description":98},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":110518,"title":110519,"body":110520,"description":98,"extension":8978,"meta":112176,"navigation":651,"path":112177,"seo":112178,"stem":112179,"__hash__":112180},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":110521,"toc":112152},[110522,110525,110527,110530,110533,110550,110645,110648,110654,110656,110658,110682,110685,110699,110702,110743,110745,110758,110760,110763,110811,110823,110826,110829,110835,110848,110915,110918,110937,110940,110943,110949,110951,110960,110963,110967,110976,111058,111067,111071,111077,111091,111101,111103,111433,111436,111448,111450,111461,111463,111466,111484,111487,111490,111508,111519,111522,111537,111547,111549,111570,111587,111607,111613,111653,111669,111685,111691,111694,111718,111734,111739,111769,111786,111811,111814,111829,111838,111853,111862,111877,111884,111886,111896,111909,111916,111919,111958,111965,111967,112019,112021,112027,112030,112037,112044,112047,112049,112067,112070,112073,112107,112119,112121,112124,112146,112149],[10,110523,110519],{"id":110524},"_2xml-与-mjcf-物理建模基础",[43,110526,108512],{"id":108511},[14,110528,110529],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,110531,110532],{},"本章结束后，你应该能看懂一个简单模型里：",[87,110534,110535,110538,110541,110544,110547],{},[62,110536,110537],{},"地面在哪里。",[62,110539,110540],{},"物体初始位置在哪里。",[62,110542,110543],{},"几何体是什么形状。",[62,110545,110546],{},"哪些 body 可以自由运动。",[62,110548,110549],{},"如何用名字在 Python 里找到 XML 中的对象。",[9177,110551,110552,110562],{},[9180,110553,110554],{},[9183,110555,110556,110559],{},[9186,110557,110558],{"align":31600},"标签",[9186,110560,110561],{"align":31600},"作用",[9223,110563,110564,110573,110583,110592,110602,110612,110625,110635],{},[9183,110565,110566,110570],{},[9228,110567,110568],{"align":31600},[83,110569,110402],{},[9228,110571,110572],{"align":31600},"根节点",[9183,110574,110575,110580],{},[9228,110576,110577],{"align":31600},[83,110578,110579],{},"\u003Coption>",[9228,110581,110582],{"align":31600},"仿真参数",[9183,110584,110585,110589],{},[9228,110586,110587],{"align":31600},[83,110588,110410],{},[9228,110590,110591],{"align":31600},"世界中的物体",[9183,110593,110594,110599],{},[9228,110595,110596],{"align":31600},[83,110597,110598],{},"\u003Cbody>",[9228,110600,110601],{"align":31600},"刚体",[9183,110603,110604,110609],{},[9228,110605,110606],{"align":31600},[83,110607,110608],{},"\u003Cgeom>",[9228,110610,110611],{"align":31600},"几何体、碰撞体、可视体",[9183,110613,110614,110622],{},[9228,110615,110616,32843,110619],{"align":31600},[83,110617,110618],{},"\u003Cjoint>",[83,110620,110621],{},"\u003Cfreejoint>",[9228,110623,110624],{"align":31600},"关节",[9183,110626,110627,110632],{},[9228,110628,110629],{"align":31600},[83,110630,110631],{},"\u003Csite>",[9228,110633,110634],{"align":31600},"标记点",[9183,110636,110637,110642],{},[9228,110638,110639],{"align":31600},[83,110640,110641],{},"\u003Cactuator>",[9228,110643,110644],{"align":31600},"控制器",[14,110646,110647],{},"初学时可以先记住：",[93,110649,110652],{"className":110650,"code":110651,"language":6778,"meta":98},[6776],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[83,110653,110651],{"__ignoreMap":98},[43,110655,108635],{"id":108634},[14,110657,108638],{},[93,110659,110661],{"className":31686,"code":110660,"language":31688,"meta":98,"style":98},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[83,110662,110663],{"__ignoreMap":98},[102,110664,110665,110667,110669,110671,110673,110675,110677,110679],{"class":104,"line":105},[102,110666,32441],{"class":112},[102,110668,34180],{"class":278},[102,110670,31698],{"class":278},[102,110672,34265],{"class":187},[102,110674,110366],{"class":278},[102,110676,108679],{"class":278},[102,110678,110371],{"class":278},[102,110680,110681],{"class":278}," glfw-devel\n",[14,110683,110684],{},"pip:",[93,110686,110687],{"className":31686,"code":108784,"language":31688,"meta":98,"style":98},[83,110688,110689],{"__ignoreMap":98},[102,110690,110691,110693,110695,110697],{"class":104,"line":105},[102,110692,31695],{"class":112},[102,110694,31698],{"class":278},[102,110696,108795],{"class":278},[102,110698,108798],{"class":278},[14,110700,110701],{},"conda:",[93,110703,110705],{"className":31686,"code":110704,"language":31688,"meta":98,"style":98},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[83,110706,110707,110724,110733],{"__ignoreMap":98},[102,110708,110709,110711,110713,110715,110718,110720,110722],{"class":104,"line":105},[102,110710,38195],{"class":112},[102,110712,37041],{"class":278},[102,110714,32980],{"class":187},[102,110716,110717],{"class":278}," mujoco-xml",[102,110719,108840],{"class":278},[102,110721,108843],{"class":187},[102,110723,108846],{"class":187},[102,110725,110726,110728,110730],{"class":104,"line":116},[102,110727,38195],{"class":112},[102,110729,108853],{"class":278},[102,110731,110732],{"class":278}," mujoco-xml\n",[102,110734,110735,110737,110739,110741],{"class":104,"line":123},[102,110736,31695],{"class":112},[102,110738,31698],{"class":278},[102,110740,108795],{"class":278},[102,110742,108798],{"class":278},[14,110744,108869],{},[87,110746,110747,110750,110755],{},[62,110748,110749],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[62,110751,110752,110753,36250],{},"本章使用基础标签，适用于 ",[83,110754,108892],{},[62,110756,110757],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[43,110759,108910],{"id":108909},[14,110761,110762],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[93,110764,110766],{"className":60932,"code":110765,"language":60934,"meta":98,"style":98},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[83,110767,110768,110782,110790,110795,110803],{"__ignoreMap":98},[102,110769,110770,110772,110774,110776,110778,110780],{"class":104,"line":105},[102,110771,1208],{"class":119},[102,110773,108886],{"class":59165},[102,110775,109640],{"class":112},[102,110777,260],{"class":119},[102,110779,70544],{"class":278},[102,110781,59172],{"class":119},[102,110783,110784,110786,110788],{"class":104,"line":116},[102,110785,60009],{"class":119},[102,110787,109706],{"class":59165},[102,110789,59172],{"class":119},[102,110791,110792],{"class":104,"line":123},[102,110793,110794],{"class":119},"    ...\n",[102,110796,110797,110799,110801],{"class":104,"line":130},[102,110798,60282],{"class":119},[102,110800,109706],{"class":59165},[102,110802,59172],{"class":119},[102,110804,110805,110807,110809],{"class":104,"line":136},[102,110806,59650],{"class":119},[102,110808,108886],{"class":59165},[102,110810,59172],{"class":119},[14,110812,110813,110815,110816,110818,110819,110822],{},[83,110814,59665],{}," 表示刚体。",[83,110817,108985],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[83,110820,110821],{},"joint"," 表示刚体相对父刚体如何运动。",[48,110824,110825],{"id":110825},"层级结构非常重要",[14,110827,110828],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[93,110830,110833],{"className":110831,"code":110832,"language":6778,"meta":98},[6776],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[83,110834,110832],{"__ignoreMap":98},[14,110836,110837,108883,110840,110843,110844,110847],{},[83,110838,110839],{},"red_box_geom",[83,110841,110842],{},"box_center"," 都属于 ",[83,110845,110846],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[93,110849,110851],{"className":60932,"code":110850,"language":60934,"meta":98,"style":98},"\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",[83,110852,110853,110873,110887,110907],{"__ignoreMap":98},[102,110854,110855,110857,110859,110861,110863,110865,110867,110869,110871],{"class":104,"line":105},[102,110856,1208],{"class":119},[102,110858,59665],{"class":59165},[102,110860,387],{"class":112},[102,110862,260],{"class":119},[102,110864,61356],{"class":278},[102,110866,108971],{"class":112},[102,110868,260],{"class":119},[102,110870,108976],{"class":278},[102,110872,59172],{"class":119},[102,110874,110875,110877,110879,110881,110883,110885],{"class":104,"line":116},[102,110876,60009],{"class":119},[102,110878,109485],{"class":59165},[102,110880,387],{"class":112},[102,110882,260],{"class":119},[102,110884,109826],{"class":278},[102,110886,109009],{"class":119},[102,110888,110889,110891,110893,110895,110897,110899,110901,110903,110905],{"class":104,"line":123},[102,110890,60009],{"class":119},[102,110892,108985],{"class":59165},[102,110894,61689],{"class":112},[102,110896,260],{"class":119},[102,110898,61356],{"class":278},[102,110900,109001],{"class":112},[102,110902,260],{"class":119},[102,110904,109006],{"class":278},[102,110906,109009],{"class":119},[102,110908,110909,110911,110913],{"class":104,"line":130},[102,110910,59650],{"class":119},[102,110912,59665],{"class":59165},[102,110914,59172],{"class":119},[14,110916,110917],{},"含义:",[87,110919,110920,110926,110931,110934],{},[62,110921,110922,110923,110925],{},"创建名为 ",[83,110924,61579],{}," 的刚体",[62,110927,110928,110929],{},"初始位置在世界坐标 ",[83,110930,109034],{},[62,110932,110933],{},"它有一个自由关节",[62,110935,110936],{},"它有一个盒子几何体",[48,110938,110939],{"id":110939},"坐标怎么理解",[14,110941,110942],{},"MuJoCo 默认使用三维坐标：",[93,110944,110947],{"className":110945,"code":110946,"language":6778,"meta":98},[6776],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[83,110948,110946],{"__ignoreMap":98},[14,110950,32],{},[93,110952,110954],{"className":60932,"code":110953,"language":60934,"meta":98,"style":98},"pos=\"0 0 1\"\n",[83,110955,110956],{"__ignoreMap":98},[102,110957,110958],{"class":104,"line":105},[102,110959,110953],{"class":119},[14,110961,110962],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[48,110964,110966],{"id":110965},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,110968,110969,110970,90395,110973,110975],{},"不同 ",[83,110971,110972],{},"type",[83,110974,39361],{}," 含义不同：",[9177,110977,110978,110993],{},[9180,110979,110980],{},[9183,110981,110982,110986,110991],{},[9186,110983,110984],{"align":31600},[83,110985,110972],{},[9186,110987,110988,110990],{"align":31600},[83,110989,39361],{}," 示例",[9186,110992,108565],{"align":31600},[9223,110994,110995,111009,111024,111043],{},[9183,110996,110997,111001,111006],{},[9228,110998,110999],{"align":31600},[83,111000,61579],{},[9228,111002,111003],{"align":31600},[83,111004,111005],{},"size=\"0.1 0.2 0.3\"",[9228,111007,111008],{"align":31600},"x\u002Fy\u002Fz 半边长，不是完整长度",[9183,111010,111011,111016,111021],{},[9228,111012,111013],{"align":31600},[83,111014,111015],{},"sphere",[9228,111017,111018],{"align":31600},[83,111019,111020],{},"size=\"0.1\"",[9228,111022,111023],{"align":31600},"球半径",[9183,111025,111026,111031,111036],{},[9228,111027,111028],{"align":31600},[83,111029,111030],{},"capsule",[9228,111032,111033],{"align":31600},[83,111034,111035],{},"size=\"0.03\"",[9228,111037,111038,111039,111042],{"align":31600},"胶囊半径，长度常用 ",[83,111040,111041],{},"fromto"," 指定",[9183,111044,111045,111050,111055],{},[9228,111046,111047],{"align":31600},[83,111048,111049],{},"plane",[9228,111051,111052],{"align":31600},[83,111053,111054],{},"size=\"3 3 0.1\"",[9228,111056,111057],{"align":31600},"可视平面大小，通常当地面",[14,111059,111060,111061,111063,111064,111066],{},"最容易踩坑的是 box：",[83,111062,109889],{}," 表示边长大约是 ",[83,111065,39902],{},"，因为 MuJoCo 用的是半边长。",[48,111068,111070],{"id":111069},"site-是什么","site 是什么",[14,111072,111073,111076],{},[83,111074,111075],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[87,111078,111079,111082,111085,111088],{},[62,111080,111081],{},"标记机械臂末端。",[62,111083,111084],{},"标记目标位置。",[62,111086,111087],{},"放传感器或相机参考点。",[62,111089,111090],{},"在 Python 中读取某个关键点的世界坐标。",[14,111092,111093,111094,108883,111097,111100],{},"在后面的 Reacher 任务中，",[83,111095,111096],{},"tip",[83,111098,111099],{},"target"," 就会用 site 表示。",[43,111102,109118],{"id":109117},[93,111104,111106],{"className":38243,"code":111105,"language":38245,"meta":98,"style":98},"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",[83,111107,111108,111114,111124,111128,111132,111140,111145,111149,111153,111157,111162,111166,111171,111176,111181,111186,111190,111194,111198,111202,111206,111210,111222,111234,111242,111246,111261,111276,111280,111293,111308,111321,111334,111338,111354,111358,111362,111373,111385,111397,111409,111413,111417,111429],{"__ignoreMap":98},[102,111109,111110,111112],{"class":104,"line":105},[102,111111,38257],{"class":108},[102,111113,109166],{"class":119},[102,111115,111116,111118,111120,111122],{"class":104,"line":116},[102,111117,38257],{"class":108},[102,111119,39245],{"class":119},[102,111121,39248],{"class":108},[102,111123,39251],{"class":119},[102,111125,111126],{"class":104,"line":123},[102,111127,652],{"emptyLinePlaceholder":651},[102,111129,111130],{"class":104,"line":130},[102,111131,652],{"emptyLinePlaceholder":651},[102,111133,111134,111136,111138],{"class":104,"line":136},[102,111135,109179],{"class":187},[102,111137,22296],{"class":108},[102,111139,109184],{"class":278},[102,111141,111142],{"class":104,"line":142},[102,111143,111144],{"class":278},"\u003Cmujoco model=\"xml_basic\">\n",[102,111146,111147],{"class":104,"line":148},[102,111148,109194],{"class":278},[102,111150,111151],{"class":104,"line":157},[102,111152,652],{"emptyLinePlaceholder":651},[102,111154,111155],{"class":104,"line":163},[102,111156,109203],{"class":278},[102,111158,111159],{"class":104,"line":175},[102,111160,111161],{"class":278},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[102,111163,111164],{"class":104,"line":181},[102,111165,652],{"emptyLinePlaceholder":651},[102,111167,111168],{"class":104,"line":202},[102,111169,111170],{"class":278},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[102,111172,111173],{"class":104,"line":208},[102,111174,111175],{"class":278},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[102,111177,111178],{"class":104,"line":214},[102,111179,111180],{"class":278},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[102,111182,111183],{"class":104,"line":225},[102,111184,111185],{"class":278},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[102,111187,111188],{"class":104,"line":230},[102,111189,109232],{"class":278},[102,111191,111192],{"class":104,"line":236},[102,111193,109237],{"class":278},[102,111195,111196],{"class":104,"line":242},[102,111197,109242],{"class":278},[102,111199,111200],{"class":104,"line":248},[102,111201,103563],{"class":278},[102,111203,111204],{"class":104,"line":254},[102,111205,652],{"emptyLinePlaceholder":651},[102,111207,111208],{"class":104,"line":269},[102,111209,652],{"emptyLinePlaceholder":651},[102,111211,111212,111214,111216,111218,111220],{"class":104,"line":298},[102,111213,39812],{"class":108},[102,111215,220],{"class":112},[102,111217,109263],{"class":119},[102,111219,103551],{"class":187},[102,111221,12552],{"class":119},[102,111223,111224,111226,111228,111230,111232],{"class":104,"line":502},[102,111225,109272],{"class":119},[102,111227,260],{"class":108},[102,111229,109277],{"class":119},[102,111231,109179],{"class":187},[102,111233,390],{"class":119},[102,111235,111236,111238,111240],{"class":104,"line":507},[102,111237,109286],{"class":119},[102,111239,260],{"class":108},[102,111241,109291],{"class":119},[102,111243,111244],{"class":104,"line":512},[102,111245,652],{"emptyLinePlaceholder":651},[102,111247,111248,111251,111253,111256,111259],{"class":104,"line":521},[102,111249,111250],{"class":119},"    box_body_id ",[102,111252,260],{"class":108},[102,111254,111255],{"class":119}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[102,111257,111258],{"class":278},"\"red_box\"",[102,111260,390],{"class":119},[102,111262,111263,111266,111268,111271,111274],{"class":104,"line":526},[102,111264,111265],{"class":119},"    site_id ",[102,111267,260],{"class":108},[102,111269,111270],{"class":119}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[102,111272,111273],{"class":278},"\"box_center\"",[102,111275,390],{"class":119},[102,111277,111278],{"class":104,"line":532},[102,111279,652],{"emptyLinePlaceholder":651},[102,111281,111282,111284,111287,111289,111291],{"class":104,"line":538},[102,111283,2343],{"class":108},[102,111285,111286],{"class":119}," box_body_id ",[102,111288,1208],{"class":108},[102,111290,866],{"class":187},[102,111292,12552],{"class":119},[102,111294,111295,111298,111301,111303,111306],{"class":104,"line":555},[102,111296,111297],{"class":108},"        raise",[102,111299,111300],{"class":187}," RuntimeError",[102,111302,380],{"class":119},[102,111304,111305],{"class":278},"\"body red_box not found\"",[102,111307,390],{"class":119},[102,111309,111310,111312,111315,111317,111319],{"class":104,"line":570},[102,111311,2343],{"class":108},[102,111313,111314],{"class":119}," site_id ",[102,111316,1208],{"class":108},[102,111318,866],{"class":187},[102,111320,12552],{"class":119},[102,111322,111323,111325,111327,111329,111332],{"class":104,"line":581},[102,111324,111297],{"class":108},[102,111326,111300],{"class":187},[102,111328,380],{"class":119},[102,111330,111331],{"class":278},"\"site box_center not found\"",[102,111333,390],{"class":119},[102,111335,111336],{"class":104,"line":819},[102,111337,652],{"emptyLinePlaceholder":651},[102,111339,111340,111342,111344,111346,111348,111350,111352],{"class":104,"line":828},[102,111341,12016],{"class":108},[102,111343,109366],{"class":119},[102,111345,33908],{"class":108},[102,111347,40308],{"class":187},[102,111349,380],{"class":119},[102,111351,7866],{"class":187},[102,111353,38651],{"class":119},[102,111355,111356],{"class":104,"line":837},[102,111357,109381],{"class":119},[102,111359,111360],{"class":104,"line":842},[102,111361,652],{"emptyLinePlaceholder":651},[102,111363,111364,111366,111368,111371],{"class":104,"line":855},[102,111365,39164],{"class":187},[102,111367,380],{"class":119},[102,111369,111370],{"class":278},"\"simulation time:\"",[102,111372,109343],{"class":119},[102,111374,111375,111377,111379,111382],{"class":104,"line":860},[102,111376,39164],{"class":187},[102,111378,380],{"class":119},[102,111380,111381],{"class":278},"\"box body position:\"",[102,111383,111384],{"class":119},", data.xpos[box_body_id].copy())\n",[102,111386,111387,111389,111391,111394],{"class":104,"line":871},[102,111388,39164],{"class":187},[102,111390,380],{"class":119},[102,111392,111393],{"class":278},"\"site position:\"",[102,111395,111396],{"class":119},", data.site_xpos[site_id].copy())\n",[102,111398,111399,111401,111403,111406],{"class":104,"line":1359},[102,111400,39164],{"class":187},[102,111402,380],{"class":119},[102,111404,111405],{"class":278},"\"box qpos:\"",[102,111407,111408],{"class":119},", np.array(data.qpos))\n",[102,111410,111411],{"class":104,"line":1368},[102,111412,652],{"emptyLinePlaceholder":651},[102,111414,111415],{"class":104,"line":1373},[102,111416,652],{"emptyLinePlaceholder":651},[102,111418,111419,111421,111423,111425,111427],{"class":104,"line":1378},[102,111420,10407],{"class":108},[102,111422,39085],{"class":187},[102,111424,109424],{"class":108},[102,111426,109427],{"class":278},[102,111428,12552],{"class":119},[102,111430,111431],{"class":104,"line":1384},[102,111432,109434],{"class":119},[14,111434,111435],{},"保存为：",[93,111437,111439],{"className":31686,"code":111438,"language":31688,"meta":98,"style":98},"touch ch2_xml_basic.py\n",[83,111440,111441],{"__ignoreMap":98},[102,111442,111443,111445],{"class":104,"line":105},[102,111444,109148],{"class":112},[102,111446,111447],{"class":278}," ch2_xml_basic.py\n",[14,111449,110166],{},[93,111451,111453],{"className":31686,"code":111452,"language":31688,"meta":98,"style":98},"python ch2_xml_basic.py\n",[83,111454,111455],{"__ignoreMap":98},[102,111456,111457,111459],{"class":104,"line":105},[102,111458,38245],{"class":112},[102,111460,111447],{"class":278},[48,111462,109437],{"id":109437},[14,111464,111465],{},"用名字查找 body：",[93,111467,111469],{"className":38243,"code":111468,"language":38245,"meta":98,"style":98},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[83,111470,111471],{"__ignoreMap":98},[102,111472,111473,111476,111478,111480,111482],{"class":104,"line":105},[102,111474,111475],{"class":119},"box_body_id ",[102,111477,260],{"class":108},[102,111479,111255],{"class":119},[102,111481,111258],{"class":278},[102,111483,390],{"class":119},[14,111485,111486],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,111488,111489],{},"用名字查找 site：",[93,111491,111493],{"className":38243,"code":111492,"language":38245,"meta":98,"style":98},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[83,111494,111495],{"__ignoreMap":98},[102,111496,111497,111500,111502,111504,111506],{"class":104,"line":105},[102,111498,111499],{"class":119},"site_id ",[102,111501,260],{"class":108},[102,111503,111270],{"class":119},[102,111505,111273],{"class":278},[102,111507,390],{"class":119},[14,111509,111510,111511,111514,111515,111518],{},"注意第二个参数是对象类型。查 body 就用 ",[83,111512,111513],{},"mjOBJ_BODY","，查 site 就用 ",[83,111516,111517],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,111520,111521],{},"读取世界坐标：",[93,111523,111525],{"className":38243,"code":111524,"language":38245,"meta":98,"style":98},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[83,111526,111527,111532],{"__ignoreMap":98},[102,111528,111529],{"class":104,"line":105},[102,111530,111531],{"class":119},"data.xpos[box_body_id]\n",[102,111533,111534],{"class":104,"line":116},[102,111535,111536],{"class":119},"data.site_xpos[site_id]\n",[14,111538,111539,111542,111543,111546],{},[83,111540,111541],{},"xpos"," 是 body 的世界坐标，",[83,111544,111545],{},"site_xpos"," 是 site 的世界坐标。",[48,111548,109573],{"id":109573},[93,111550,111552],{"className":38243,"code":111551,"language":38245,"meta":98,"style":98},"import mujoco\nimport numpy as np\n",[83,111553,111554,111560],{"__ignoreMap":98},[102,111555,111556,111558],{"class":104,"line":105},[102,111557,38257],{"class":108},[102,111559,109166],{"class":119},[102,111561,111562,111564,111566,111568],{"class":104,"line":116},[102,111563,38257],{"class":108},[102,111565,39245],{"class":119},[102,111567,39248],{"class":108},[102,111569,39251],{"class":119},[14,111571,111572,111573,111576,111577,111580,111581,9250,111584,36250],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[83,111574,111575],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[83,111578,111579],{},"as np"," 是习惯写法，后面就可以写 ",[83,111582,111583],{},"np.array(...)",[83,111585,111586],{},"np.round(...)",[93,111588,111589],{"className":38243,"code":109460,"language":38245,"meta":98,"style":98},[83,111590,111591,111599,111603],{"__ignoreMap":98},[102,111592,111593,111595,111597],{"class":104,"line":105},[102,111594,109179],{"class":187},[102,111596,22296],{"class":108},[102,111598,109184],{"class":278},[102,111600,111601],{"class":104,"line":116},[102,111602,109475],{"class":278},[102,111604,111605],{"class":104,"line":123},[102,111606,103563],{"class":278},[14,111608,111609,111610,36250],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[83,111611,111612],{},"mujoco.MjModel.from_xml_string(XML)",[93,111614,111616],{"className":60932,"code":111615,"language":60934,"meta":98,"style":98},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[83,111617,111618],{"__ignoreMap":98},[102,111619,111620,111622,111624,111626,111628,111630,111632,111634,111637,111639,111641,111644,111646,111648,111651],{"class":104,"line":105},[102,111621,1208],{"class":119},[102,111623,111075],{"class":59165},[102,111625,387],{"class":112},[102,111627,260],{"class":119},[102,111629,111273],{"class":278},[102,111631,108971],{"class":112},[102,111633,260],{"class":119},[102,111635,111636],{"class":278},"\"0 0 0\"",[102,111638,109001],{"class":112},[102,111640,260],{"class":119},[102,111642,111643],{"class":278},"\"0.03\"",[102,111645,86632],{"class":112},[102,111647,260],{"class":119},[102,111649,111650],{"class":278},"\"0 1 0 1\"",[102,111652,109009],{"class":119},[14,111654,111655,111657,111658,111661,111662,111664,111665,111668],{},[83,111656,111075],{}," 是标记点。",[83,111659,111660],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[83,111663,111035],{}," 表示显示出来的小球大小。",[83,111666,111667],{},"rgba=\"0 1 0 1\""," 表示绿色。",[93,111670,111671],{"className":38243,"code":111468,"language":38245,"meta":98,"style":98},[83,111672,111673],{"__ignoreMap":98},[102,111674,111675,111677,111679,111681,111683],{"class":104,"line":105},[102,111676,111475],{"class":119},[102,111678,260],{"class":108},[102,111680,111255],{"class":119},[102,111682,111258],{"class":278},[102,111684,390],{"class":119},[14,111686,111687,111688,111690],{},"这行的作用是：根据名字 ",[83,111689,111258],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,111692,111693],{},"拆开看：",[87,111695,111696,111702,111707,111713],{},[62,111697,111698,111701],{},[83,111699,111700],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[62,111703,111704,111706],{},[83,111705,109950],{}," 是被查询的模型。",[62,111708,111709,111712],{},[83,111710,111711],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[62,111714,111715,111717],{},[83,111716,111258],{}," 是 XML 里写的名字。",[93,111719,111720],{"className":38243,"code":111492,"language":38245,"meta":98,"style":98},[83,111721,111722],{"__ignoreMap":98},[102,111723,111724,111726,111728,111730,111732],{"class":104,"line":105},[102,111725,111499],{"class":119},[102,111727,260],{"class":108},[102,111729,111270],{"class":119},[102,111731,111273],{"class":278},[102,111733,390],{"class":119},[14,111735,111736,111737,36250],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[83,111738,111273],{},[93,111740,111742],{"className":38243,"code":111741,"language":38245,"meta":98,"style":98},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[83,111743,111744,111756],{"__ignoreMap":98},[102,111745,111746,111748,111750,111752,111754],{"class":104,"line":105},[102,111747,10407],{"class":108},[102,111749,111286],{"class":119},[102,111751,1208],{"class":108},[102,111753,866],{"class":187},[102,111755,12552],{"class":119},[102,111757,111758,111761,111763,111765,111767],{"class":104,"line":116},[102,111759,111760],{"class":108},"    raise",[102,111762,111300],{"class":187},[102,111764,380],{"class":119},[102,111766,111305],{"class":278},[102,111768,390],{"class":119},[14,111770,111771,111773,111774,111777,111778,111781,111782,111785],{},[83,111772,10407],{}," 是条件判断。",[83,111775,111776],{},"mj_name2id"," 找不到对象时会返回 ",[83,111779,111780],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[83,111783,111784],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[93,111787,111789],{"className":38243,"code":111788,"language":38245,"meta":98,"style":98},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[83,111790,111791,111807],{"__ignoreMap":98},[102,111792,111793,111795,111797,111799,111801,111803,111805],{"class":104,"line":105},[102,111794,11841],{"class":108},[102,111796,109366],{"class":119},[102,111798,33908],{"class":108},[102,111800,40308],{"class":187},[102,111802,380],{"class":119},[102,111804,7866],{"class":187},[102,111806,38651],{"class":119},[102,111808,111809],{"class":104,"line":116},[102,111810,109564],{"class":119},[14,111812,111813],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[93,111815,111817],{"className":38243,"code":111816,"language":38245,"meta":98,"style":98},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[83,111818,111819],{"__ignoreMap":98},[102,111820,111821,111823,111825,111827],{"class":104,"line":105},[102,111822,38280],{"class":187},[102,111824,380],{"class":119},[102,111826,111381],{"class":278},[102,111828,111384],{"class":119},[14,111830,111831,111833,111834,111837],{},[83,111832,108944],{}," 保存所有 body 的世界坐标。",[83,111835,111836],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[93,111839,111841],{"className":38243,"code":111840,"language":38245,"meta":98,"style":98},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[83,111842,111843],{"__ignoreMap":98},[102,111844,111845,111847,111849,111851],{"class":104,"line":105},[102,111846,38280],{"class":187},[102,111848,380],{"class":119},[102,111850,111393],{"class":278},[102,111852,111396],{"class":119},[14,111854,111855,111858,111859,111861],{},[83,111856,111857],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[83,111860,110842],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[93,111863,111865],{"className":38243,"code":111864,"language":38245,"meta":98,"style":98},"print(\"box qpos:\", np.array(data.qpos))\n",[83,111866,111867],{"__ignoreMap":98},[102,111868,111869,111871,111873,111875],{"class":104,"line":105},[102,111870,38280],{"class":187},[102,111872,380],{"class":119},[102,111874,111405],{"class":278},[102,111876,111408],{"class":119},[14,111878,111879,111880,111883],{},"这里打印广义位置数组。",[83,111881,111882],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[43,111885,110181],{"id":110180},[14,111887,111888,111889,111892,111893,36250],{},"程序会输出 ",[83,111890,111891],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[83,111894,111895],{},"qpos",[14,111897,111898,111900,111901,111904,111905,111908],{},[83,111899,111836],{}," 是 body 的世界坐标位置。",[83,111902,111903],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[83,111906,111907],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,111910,90087,111911,90395,111913,111915],{},[83,111912,110842],{},[83,111914,111660],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,111917,111918],{},"如果你把 site 改成：",[93,111920,111922],{"className":60932,"code":111921,"language":60934,"meta":98,"style":98},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[83,111923,111924],{"__ignoreMap":98},[102,111925,111926,111928,111930,111932,111934,111937,111939,111941,111944,111946,111948,111950,111952,111954,111956],{"class":104,"line":105},[102,111927,1208],{"class":119},[102,111929,111075],{"class":59165},[102,111931,387],{"class":112},[102,111933,260],{"class":119},[102,111935,111936],{"class":278},"\"box_top\"",[102,111938,108971],{"class":112},[102,111940,260],{"class":119},[102,111942,111943],{"class":278},"\"0 0 0.15\"",[102,111945,109001],{"class":112},[102,111947,260],{"class":119},[102,111949,111643],{"class":278},[102,111951,86632],{"class":112},[102,111953,260],{"class":119},[102,111955,111650],{"class":278},[102,111957,109009],{"class":119},[14,111959,111960,111961,111964],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[83,111962,111963],{},"site position"," 就会比 body position 的 z 坐标更高。",[43,111966,110213],{"id":110212},[87,111968,111969,111978,111981,111988,111994,112005],{},[62,111970,110276,111971,111973,111974,110279,111976,36250],{},[83,111972,110846],{}," 的初始高度从 ",[83,111975,7039],{},[83,111977,7044],{},[62,111979,111980],{},"重新运行程序。",[62,111982,111983,111984,111987],{},"观察 ",[83,111985,111986],{},"box qpos"," 和最终位置是否变化。",[62,111989,111990,111991,111993],{},"故意把 ",[83,111992,111075],{}," 名称改错，确认程序能报错。",[62,111995,110276,111996,111998,111999,110279,112001,112004],{},[83,111997,108985],{}," 的颜色 ",[83,112000,109897],{},[83,112002,112003],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[62,112006,110276,112007,90395,112009,110279,112012,112015,112016,112018],{},[83,112008,110842],{},[83,112010,112011],{},"pos",[83,112013,112014],{},"0 0 0.2","，观察 ",[83,112017,111963],{}," 如何变化。",[43,112020,110318],{"id":110317},[48,112022,112024],{"id":112023},"xml-error-schema-violation",[83,112025,112026],{},"XML Error: Schema violation",[14,112028,112029],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[48,112031,112033,89155,112035],{"id":112032},"mj_name2id-返回-1",[83,112034,111776],{},[83,112036,111780],{},[14,112038,112039,112040,112043],{},"说明名字没有找到。检查 XML 中 ",[83,112041,112042],{},"name=\"...\"","，并确认对象类型正确。",[48,112045,112046],{"id":112046},"物体不下落",[14,112048,110388],{},[87,112050,112051,112056,112061],{},[62,112052,112053,112054],{},"body 是否有 ",[83,112055,109485],{},[62,112057,112058,112059],{},"gravity 是否为 ",[83,112060,110454],{},[62,112062,112063,112064,112066],{},"body 是否被固定在 ",[83,112065,109706],{}," 中",[48,112068,112069],{"id":112069},"坐标看起来不符合预期",[14,112071,112072],{},"先区分两种坐标：",[9177,112074,112075,112084],{},[9180,112076,112077],{},[9183,112078,112079,112082],{},[9186,112080,112081],{"align":31600},"坐标",[9186,112083,108565],{"align":31600},[9223,112085,112086,112096],{},[9183,112087,112088,112093],{},[9228,112089,112090,112091],{"align":31600},"XML 里的 ",[83,112092,112011],{},[9228,112094,112095],{"align":31600},"相对父 body 的局部坐标",[9183,112097,112098,112104],{},[9228,112099,112100,32843,112102],{"align":31600},[83,112101,108944],{},[83,112103,111857],{},[9228,112105,112106],{"align":31600},"仿真更新后的世界坐标",[14,112108,112109,112110,112112,112113,90404,112116,112118],{},"如果你修改了 ",[83,112111,108935],{},"，但还没调用 ",[83,112114,112115],{},"mj_forward",[83,112117,109080],{},"，世界坐标可能还没有更新。",[43,112120,110472],{"id":110471},[14,112122,112123],{},"MJCF 建模先掌握四件事：",[87,112125,112126,112131,112136,112141],{},[62,112127,112128,112130],{},[83,112129,59665],{}," 表示刚体层级。",[62,112132,112133,112135],{},[83,112134,108985],{}," 表示形状、碰撞和质量。",[62,112137,112138,112140],{},[83,112139,110821],{}," 决定 body 能不能动、怎么动。",[62,112142,112143,112145],{},[83,112144,111075],{}," 用来标记关键点，方便 Python 读取位置。",[14,112147,112148],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[8955,112150,112151],{},"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":98,"searchDepth":116,"depth":116,"links":112153},[112154,112155,112156,112162,112166,112167,112168,112175],{"id":108511,"depth":116,"text":108512},{"id":108634,"depth":116,"text":108635},{"id":108909,"depth":116,"text":108910,"children":112157},[112158,112159,112160,112161],{"id":110825,"depth":123,"text":110825},{"id":110939,"depth":123,"text":110939},{"id":110965,"depth":123,"text":110966},{"id":111069,"depth":123,"text":111070},{"id":109117,"depth":116,"text":109118,"children":112163},[112164,112165],{"id":109437,"depth":123,"text":109437},{"id":109573,"depth":123,"text":109573},{"id":110180,"depth":116,"text":110181},{"id":110212,"depth":116,"text":110213},{"id":110317,"depth":116,"text":110318,"children":112169},[112170,112171,112173,112174],{"id":112023,"depth":123,"text":112026},{"id":112032,"depth":123,"text":112172},"mj_name2id 返回 -1",{"id":112046,"depth":123,"text":112046},{"id":112069,"depth":123,"text":112069},{"id":110471,"depth":116,"text":110472},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":110519,"description":98},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":112182,"title":112183,"body":112184,"description":98,"extension":8978,"meta":113679,"navigation":651,"path":113680,"seo":113681,"stem":113682,"__hash__":113683},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":112185,"toc":113651},[112186,112189,112191,112194,112197,112235,112238,112244,112247,112249,112251,112278,112280,112294,112296,112337,112339,112363,112365,112368,112377,112386,112389,112398,112406,112415,112418,112428,112431,112483,112490,112496,112504,112552,112555,112574,112577,112585,112589,112598,112631,112633,112981,112983,112995,112997,113008,113010,113013,113034,113040,113043,113068,113078,113081,113089,113092,113095,113116,113127,113129,113149,113152,113173,113182,113201,113207,113232,113235,113249,113256,113280,113283,113291,113300,113316,113328,113336,113345,113347,113350,113374,113379,113382,113404,113406,113445,113447,113454,113456,113464,113467,113470,113482,113523,113530,113541,113548,113551,113600,113603,113606,113612,113614,113619,113645,113648],[10,112187,112183],{"id":112188},"_3python-控制接口读取状态与推进仿真",[43,112190,108512],{"id":108511},[14,112192,112193],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,112195,112196],{},"你将学习:",[87,112198,112199,112204,112209,112213,112218,112229],{},[62,112200,112201],{},[83,112202,112203],{},"MjModel.from_xml_string",[62,112205,112206],{},[83,112207,112208],{},"MjData(model)",[62,112210,112211],{},[83,112212,109080],{},[62,112214,112215],{},[83,112216,112217],{},"mj_resetData",[62,112219,112220,112221,9250,112223,9250,112226],{},"读取 ",[83,112222,111895],{},[83,112224,112225],{},"qvel",[83,112227,112228],{},"ctrl",[62,112230,112231,112232],{},"使用 ",[83,112233,112234],{},"model.opt.timestep",[14,112236,112237],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[93,112239,112242],{"className":112240,"code":112241,"language":6778,"meta":98},[6776],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[83,112243,112241],{"__ignoreMap":98},[14,112245,112246],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[43,112248,108635],{"id":108634},[14,112250,108638],{},[93,112252,112254],{"className":31686,"code":112253,"language":31688,"meta":98,"style":98},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[83,112255,112256],{"__ignoreMap":98},[102,112257,112258,112260,112262,112264,112266,112269,112271,112273,112275],{"class":104,"line":105},[102,112259,32441],{"class":112},[102,112261,34180],{"class":278},[102,112263,31698],{"class":278},[102,112265,34265],{"class":187},[102,112267,112268],{"class":278}," python3",[102,112270,108663],{"class":278},[102,112272,110366],{"class":278},[102,112274,108679],{"class":278},[102,112276,112277],{"class":278}," glfw\n",[14,112279,110684],{},[93,112281,112282],{"className":31686,"code":108784,"language":31688,"meta":98,"style":98},[83,112283,112284],{"__ignoreMap":98},[102,112285,112286,112288,112290,112292],{"class":104,"line":105},[102,112287,31695],{"class":112},[102,112289,31698],{"class":278},[102,112291,108795],{"class":278},[102,112293,108798],{"class":278},[14,112295,110701],{},[93,112297,112299],{"className":31686,"code":112298,"language":31688,"meta":98,"style":98},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[83,112300,112301,112318,112327],{"__ignoreMap":98},[102,112302,112303,112305,112307,112309,112312,112314,112316],{"class":104,"line":105},[102,112304,38195],{"class":112},[102,112306,37041],{"class":278},[102,112308,32980],{"class":187},[102,112310,112311],{"class":278}," mujoco-python-api",[102,112313,108840],{"class":278},[102,112315,108843],{"class":187},[102,112317,108846],{"class":187},[102,112319,112320,112322,112324],{"class":104,"line":116},[102,112321,38195],{"class":112},[102,112323,108853],{"class":278},[102,112325,112326],{"class":278}," mujoco-python-api\n",[102,112328,112329,112331,112333,112335],{"class":104,"line":123},[102,112330,31695],{"class":112},[102,112332,31698],{"class":278},[102,112334,108795],{"class":278},[102,112336,108798],{"class":278},[14,112338,108869],{},[87,112340,112341,112348,112357],{},[62,112342,112343,108883,112345,112347],{},[83,112344,108540],{},[83,112346,108545],{}," 是官方 Python bindings 的类名。",[62,112349,112350,112351,112354,112355,36250],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[83,112352,112353],{},"mjModel"," 在 Python 中是 ",[83,112356,108574],{},[62,112358,112359,112360,36250],{},"不要使用 ",[83,112361,112362],{},"sim = mujoco_py.MjSim(...)",[43,112364,108910],{"id":108909},[14,112366,112367],{},"仿真推进核心代码:",[93,112369,112371],{"className":38243,"code":112370,"language":38245,"meta":98,"style":98},"mujoco.mj_step(model, data)\n",[83,112372,112373],{"__ignoreMap":98},[102,112374,112375],{"class":104,"line":105},[102,112376,112370],{"class":119},[14,112378,112379,112380,9250,112382,9250,112384,36250],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[83,112381,108935],{},[83,112383,108938],{},[83,112385,108932],{},[14,112387,112388],{},"重置仿真:",[93,112390,112392],{"className":38243,"code":112391,"language":38245,"meta":98,"style":98},"mujoco.mj_resetData(model, data)\n",[83,112393,112394],{"__ignoreMap":98},[102,112395,112396],{"class":104,"line":105},[102,112397,112391],{"class":119},[14,112399,112400,112401,90404,112403,112405],{},"如果手动修改了 ",[83,112402,108935],{},[83,112404,108938],{},"，通常应调用:",[93,112407,112409],{"className":38243,"code":112408,"language":38245,"meta":98,"style":98},"mujoco.mj_forward(model, data)\n",[83,112410,112411],{"__ignoreMap":98},[102,112412,112413],{"class":104,"line":105},[102,112414,112408],{"class":119},[14,112416,112417],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[48,112419,112421,9250,112423,9250,112425,112427],{"id":112420},"qposqvelctrl-是什么",[83,112422,111895],{},[83,112424,112225],{},[83,112426,112228],{}," 是什么",[14,112429,112430],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[9177,112432,112433,112445],{},[9180,112434,112435],{},[9183,112436,112437,112440,112442],{},[9186,112438,112439],{"align":31600},"字段",[9186,112441,108565],{"align":31600},[9186,112443,112444],{"align":31600},"谁来修改",[9223,112446,112447,112459,112471],{},[9183,112448,112449,112453,112456],{},[9228,112450,112451],{"align":31600},[83,112452,108935],{},[9228,112454,112455],{"align":31600},"广义位置，例如小车位置、关节角、自由物体位置姿态",[9228,112457,112458],{"align":31600},"MuJoCo 更新，也可以手动设置初始状态",[9183,112460,112461,112465,112468],{},[9228,112462,112463],{"align":31600},[83,112464,108938],{},[9228,112466,112467],{"align":31600},"广义速度，例如小车速度、关节角速度",[9228,112469,112470],{"align":31600},"MuJoCo 更新，也可以手动清零",[9183,112472,112473,112477,112480],{},[9228,112474,112475],{"align":31600},[83,112476,108941],{},[9228,112478,112479],{"align":31600},"actuator 的控制输入",[9228,112481,112482],{"align":31600},"主要由你的控制代码写入",[14,112484,7501,112485,108883,112487,112489],{},[83,112486,111895],{},[83,112488,112225],{}," 不一定同维。自由刚体就是典型例子：",[93,112491,112494],{"className":112492,"code":112493,"language":6778,"meta":98},[6776],"freejoint: qpos 7 维，qvel 6 维\n",[83,112495,112493],{"__ignoreMap":98},[48,112497,112499,108883,112501,112503],{"id":112498},"mj_step-和-mj_forward-的区别",[83,112500,109080],{},[83,112502,112115],{}," 的区别",[9177,112505,112506,112519],{},[9180,112507,112508],{},[9183,112509,112510,112513,112516],{},[9186,112511,112512],{"align":31600},"函数",[9186,112514,112515],{"align":31600},"是否推进时间",[9186,112517,112518],{"align":31600},"什么时候用",[9223,112520,112521,112534],{},[9183,112522,112523,112528,112531],{},[9228,112524,112525],{"align":31600},[83,112526,112527],{},"mj_step(model, data)",[9228,112529,112530],{"align":31600},"是",[9228,112532,112533],{"align":31600},"正常仿真循环，每调用一次前进一步",[9183,112535,112536,112541,112544],{},[9228,112537,112538],{"align":31600},[83,112539,112540],{},"mj_forward(model, data)",[9228,112542,112543],{"align":31600},"否",[9228,112545,112546,112547,9250,112549,112551],{"align":31600},"手动改了 ",[83,112548,111895],{},[83,112550,112225],{}," 后，刷新派生量",[14,112553,112554],{},"例如你写：",[93,112556,112558],{"className":38243,"code":112557,"language":38245,"meta":98,"style":98},"data.qpos[2] = 2.0\n",[83,112559,112560],{"__ignoreMap":98},[102,112561,112562,112565,112567,112569,112571],{"class":104,"line":105},[102,112563,112564],{"class":119},"data.qpos[",[102,112566,7044],{"class":187},[102,112568,13252],{"class":119},[102,112570,260],{"class":108},[102,112572,112573],{"class":187}," 2.0\n",[14,112575,112576],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[93,112578,112579],{"className":38243,"code":112408,"language":38245,"meta":98,"style":98},[83,112580,112581],{"__ignoreMap":98},[102,112582,112583],{"class":104,"line":105},[102,112584,112408],{"class":119},[48,112586,112588],{"id":112587},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,112590,112591,112594,112595,112597],{},[83,112592,112593],{},"mujoco.mj_resetData(model, data)"," 会把 ",[83,112596,41266],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[93,112599,112601],{"className":38243,"code":112600,"language":38245,"meta":98,"style":98},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[83,112602,112603,112607,112617,112627],{"__ignoreMap":98},[102,112604,112605],{"class":104,"line":105},[102,112606,112391],{"class":119},[102,112608,112609,112612,112614],{"class":104,"line":116},[102,112610,112611],{"class":119},"data.qpos[:] ",[102,112613,260],{"class":108},[102,112615,112616],{"class":119}," random_qpos\n",[102,112618,112619,112622,112624],{"class":104,"line":123},[102,112620,112621],{"class":119},"data.qvel[:] ",[102,112623,260],{"class":108},[102,112625,112626],{"class":187}," 0.0\n",[102,112628,112629],{"class":104,"line":130},[102,112630,112408],{"class":119},[43,112632,109118],{"id":109117},[93,112634,112636],{"className":38243,"code":112635,"language":38245,"meta":98,"style":98},"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",[83,112637,112638,112644,112654,112658,112662,112670,112675,112679,112683,112687,112692,112696,112701,112706,112711,112715,112719,112723,112727,112731,112735,112754,112761,112773,112784,112800,112816,112820,112824,112836,112848,112856,112860,112871,112875,112891,112895,112899,112908,112912,112917,112926,112930,112943,112948,112957,112961,112965,112977],{"__ignoreMap":98},[102,112639,112640,112642],{"class":104,"line":105},[102,112641,38257],{"class":108},[102,112643,109166],{"class":119},[102,112645,112646,112648,112650,112652],{"class":104,"line":116},[102,112647,38257],{"class":108},[102,112649,39245],{"class":119},[102,112651,39248],{"class":108},[102,112653,39251],{"class":119},[102,112655,112656],{"class":104,"line":123},[102,112657,652],{"emptyLinePlaceholder":651},[102,112659,112660],{"class":104,"line":130},[102,112661,652],{"emptyLinePlaceholder":651},[102,112663,112664,112666,112668],{"class":104,"line":136},[102,112665,109179],{"class":187},[102,112667,22296],{"class":108},[102,112669,109184],{"class":278},[102,112671,112672],{"class":104,"line":142},[102,112673,112674],{"class":278},"\u003Cmujoco model=\"state_api\">\n",[102,112676,112677],{"class":104,"line":148},[102,112678,109194],{"class":278},[102,112680,112681],{"class":104,"line":157},[102,112682,652],{"emptyLinePlaceholder":651},[102,112684,112685],{"class":104,"line":163},[102,112686,109203],{"class":278},[102,112688,112689],{"class":104,"line":175},[102,112690,112691],{"class":278},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[102,112693,112694],{"class":104,"line":181},[102,112695,652],{"emptyLinePlaceholder":651},[102,112697,112698],{"class":104,"line":202},[102,112699,112700],{"class":278},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[102,112702,112703],{"class":104,"line":208},[102,112704,112705],{"class":278},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[102,112707,112708],{"class":104,"line":214},[102,112709,112710],{"class":278},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[102,112712,112713],{"class":104,"line":225},[102,112714,109232],{"class":278},[102,112716,112717],{"class":104,"line":230},[102,112718,109237],{"class":278},[102,112720,112721],{"class":104,"line":236},[102,112722,109242],{"class":278},[102,112724,112725],{"class":104,"line":242},[102,112726,103563],{"class":278},[102,112728,112729],{"class":104,"line":248},[102,112730,652],{"emptyLinePlaceholder":651},[102,112732,112733],{"class":104,"line":254},[102,112734,652],{"emptyLinePlaceholder":651},[102,112736,112737,112739,112742,112745,112747,112750,112752],{"class":104,"line":269},[102,112738,39812],{"class":108},[102,112740,112741],{"class":112}," print_state",[102,112743,112744],{"class":119},"(prefix: ",[102,112746,10185],{"class":187},[102,112748,112749],{"class":119},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[102,112751,103551],{"class":187},[102,112753,12552],{"class":119},[102,112755,112756,112758],{"class":104,"line":298},[102,112757,39164],{"class":187},[102,112759,112760],{"class":119},"(prefix)\n",[102,112762,112763,112765,112767,112770],{"class":104,"line":502},[102,112764,39164],{"class":187},[102,112766,380],{"class":119},[102,112768,112769],{"class":278},"\"  timestep:\"",[102,112771,112772],{"class":119},", model.opt.timestep)\n",[102,112774,112775,112777,112779,112782],{"class":104,"line":507},[102,112776,39164],{"class":187},[102,112778,380],{"class":119},[102,112780,112781],{"class":278},"\"  time:\"",[102,112783,109343],{"class":119},[102,112785,112786,112788,112790,112793,112796,112798],{"class":104,"line":512},[102,112787,39164],{"class":187},[102,112789,380],{"class":119},[102,112791,112792],{"class":278},"\"  qpos:\"",[102,112794,112795],{"class":119},", np.round(data.qpos.copy(), ",[102,112797,9329],{"class":187},[102,112799,38362],{"class":119},[102,112801,112802,112804,112806,112809,112812,112814],{"class":104,"line":521},[102,112803,39164],{"class":187},[102,112805,380],{"class":119},[102,112807,112808],{"class":278},"\"  qvel:\"",[102,112810,112811],{"class":119},", np.round(data.qvel.copy(), ",[102,112813,9329],{"class":187},[102,112815,38362],{"class":119},[102,112817,112818],{"class":104,"line":526},[102,112819,652],{"emptyLinePlaceholder":651},[102,112821,112822],{"class":104,"line":532},[102,112823,652],{"emptyLinePlaceholder":651},[102,112825,112826,112828,112830,112832,112834],{"class":104,"line":538},[102,112827,39812],{"class":108},[102,112829,220],{"class":112},[102,112831,109263],{"class":119},[102,112833,103551],{"class":187},[102,112835,12552],{"class":119},[102,112837,112838,112840,112842,112844,112846],{"class":104,"line":555},[102,112839,109272],{"class":119},[102,112841,260],{"class":108},[102,112843,109277],{"class":119},[102,112845,109179],{"class":187},[102,112847,390],{"class":119},[102,112849,112850,112852,112854],{"class":104,"line":570},[102,112851,109286],{"class":119},[102,112853,260],{"class":108},[102,112855,109291],{"class":119},[102,112857,112858],{"class":104,"line":581},[102,112859,652],{"emptyLinePlaceholder":651},[102,112861,112862,112865,112868],{"class":104,"line":819},[102,112863,112864],{"class":119},"    print_state(",[102,112866,112867],{"class":278},"\"initial\"",[102,112869,112870],{"class":119},", model, data)\n",[102,112872,112873],{"class":104,"line":828},[102,112874,652],{"emptyLinePlaceholder":651},[102,112876,112877,112879,112881,112883,112885,112887,112889],{"class":104,"line":837},[102,112878,12016],{"class":108},[102,112880,109366],{"class":119},[102,112882,33908],{"class":108},[102,112884,40308],{"class":187},[102,112886,380],{"class":119},[102,112888,1445],{"class":187},[102,112890,38651],{"class":119},[102,112892,112893],{"class":104,"line":842},[102,112894,109381],{"class":119},[102,112896,112897],{"class":104,"line":855},[102,112898,652],{"emptyLinePlaceholder":651},[102,112900,112901,112903,112906],{"class":104,"line":860},[102,112902,112864],{"class":119},[102,112904,112905],{"class":278},"\"after 50 steps\"",[102,112907,112870],{"class":119},[102,112909,112910],{"class":104,"line":871},[102,112911,652],{"emptyLinePlaceholder":651},[102,112913,112914],{"class":104,"line":1359},[102,112915,112916],{"class":119},"    mujoco.mj_resetData(model, data)\n",[102,112918,112919,112921,112924],{"class":104,"line":1368},[102,112920,112864],{"class":119},[102,112922,112923],{"class":278},"\"after reset\"",[102,112925,112870],{"class":119},[102,112927,112928],{"class":104,"line":1373},[102,112929,652],{"emptyLinePlaceholder":651},[102,112931,112932,112935,112937,112939,112941],{"class":104,"line":1378},[102,112933,112934],{"class":119},"    data.qpos[",[102,112936,7044],{"class":187},[102,112938,13252],{"class":119},[102,112940,260],{"class":108},[102,112942,112573],{"class":187},[102,112944,112945],{"class":104,"line":1384},[102,112946,112947],{"class":119},"    mujoco.mj_forward(model, data)\n",[102,112949,112950,112952,112955],{"class":104,"line":1398},[102,112951,112864],{"class":119},[102,112953,112954],{"class":278},"\"after manual qpos edit\"",[102,112956,112870],{"class":119},[102,112958,112959],{"class":104,"line":1424},[102,112960,652],{"emptyLinePlaceholder":651},[102,112962,112963],{"class":104,"line":1429},[102,112964,652],{"emptyLinePlaceholder":651},[102,112966,112967,112969,112971,112973,112975],{"class":104,"line":1435},[102,112968,10407],{"class":108},[102,112970,39085],{"class":187},[102,112972,109424],{"class":108},[102,112974,109427],{"class":278},[102,112976,12552],{"class":119},[102,112978,112979],{"class":104,"line":1450},[102,112980,109434],{"class":119},[14,112982,111435],{},[93,112984,112986],{"className":31686,"code":112985,"language":31688,"meta":98,"style":98},"touch ch3_python_state.py\n",[83,112987,112988],{"__ignoreMap":98},[102,112989,112990,112992],{"class":104,"line":105},[102,112991,109148],{"class":112},[102,112993,112994],{"class":278}," ch3_python_state.py\n",[14,112996,110166],{},[93,112998,113000],{"className":31686,"code":112999,"language":31688,"meta":98,"style":98},"python ch3_python_state.py\n",[83,113001,113002],{"__ignoreMap":98},[102,113003,113004,113006],{"class":104,"line":105},[102,113005,38245],{"class":112},[102,113007,112994],{"class":278},[48,113009,109437],{"id":109437},[14,113011,113012],{},"打印状态的函数：",[93,113014,113016],{"className":38243,"code":113015,"language":38245,"meta":98,"style":98},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[83,113017,113018],{"__ignoreMap":98},[102,113019,113020,113022,113024,113026,113028,113030,113032],{"class":104,"line":105},[102,113021,39812],{"class":108},[102,113023,112741],{"class":112},[102,113025,112744],{"class":119},[102,113027,10185],{"class":187},[102,113029,112749],{"class":119},[102,113031,103551],{"class":187},[102,113033,12552],{"class":119},[14,113035,113036,113037,113039],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[83,113038,41266],{}," 里发生了什么。",[14,113041,113042],{},"推进 50 步：",[93,113044,113046],{"className":38243,"code":113045,"language":38245,"meta":98,"style":98},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[83,113047,113048,113064],{"__ignoreMap":98},[102,113049,113050,113052,113054,113056,113058,113060,113062],{"class":104,"line":105},[102,113051,11841],{"class":108},[102,113053,109366],{"class":119},[102,113055,33908],{"class":108},[102,113057,40308],{"class":187},[102,113059,380],{"class":119},[102,113061,1445],{"class":187},[102,113063,38651],{"class":119},[102,113065,113066],{"class":104,"line":116},[102,113067,109564],{"class":119},[14,113069,113070,113071,113074,113075,113077],{},"由于 ",[83,113072,113073],{},"timestep=0.01","，所以 50 步后时间约为 ",[83,113076,43194],{}," 秒。",[14,113079,113080],{},"重置：",[93,113082,113083],{"className":38243,"code":112391,"language":38245,"meta":98,"style":98},[83,113084,113085],{"__ignoreMap":98},[102,113086,113087],{"class":104,"line":105},[102,113088,112391],{"class":119},[14,113090,113091],{},"这会把时间、位置、速度恢复到初始状态。",[14,113093,113094],{},"手动改高度：",[93,113096,113098],{"className":38243,"code":113097,"language":38245,"meta":98,"style":98},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[83,113099,113100,113112],{"__ignoreMap":98},[102,113101,113102,113104,113106,113108,113110],{"class":104,"line":105},[102,113103,112564],{"class":119},[102,113105,7044],{"class":187},[102,113107,13252],{"class":119},[102,113109,260],{"class":108},[102,113111,112573],{"class":187},[102,113113,113114],{"class":104,"line":116},[102,113115,112408],{"class":119},[14,113117,113118,113119,113122,113123,113126],{},"这个例子里 ",[83,113120,113121],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[83,113124,113125],{},"2.0"," 表示把小球放到更高的位置。",[48,113128,109573],{"id":109573},[93,113130,113131],{"className":38243,"code":113015,"language":38245,"meta":98,"style":98},[83,113132,113133],{"__ignoreMap":98},[102,113134,113135,113137,113139,113141,113143,113145,113147],{"class":104,"line":105},[102,113136,39812],{"class":108},[102,113138,112741],{"class":112},[102,113140,112744],{"class":119},[102,113142,10185],{"class":187},[102,113144,112749],{"class":119},[102,113146,103551],{"class":187},[102,113148,12552],{"class":119},[14,113150,113151],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[87,113153,113154,113163,113168],{},[62,113155,113156,113159,113160,113162],{},[83,113157,113158],{},"prefix","：一段文字，比如 ",[83,113161,112867],{},"，用来说明现在打印的是哪个阶段。",[62,113164,113165,113167],{},[83,113166,109950],{},"：MuJoCo 模型。",[62,113169,113170,113172],{},[83,113171,41266],{},"：MuJoCo 当前状态。",[14,113174,113175,9250,113178,113181],{},[83,113176,113177],{},"prefix: str",[83,113179,113180],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[93,113183,113185],{"className":38243,"code":113184,"language":38245,"meta":98,"style":98},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[83,113186,113187],{"__ignoreMap":98},[102,113188,113189,113191,113193,113195,113197,113199],{"class":104,"line":105},[102,113190,38280],{"class":187},[102,113192,380],{"class":119},[102,113194,112792],{"class":278},[102,113196,112795],{"class":119},[102,113198,9329],{"class":187},[102,113200,38362],{"class":119},[14,113202,113203,113206],{},[83,113204,113205],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[93,113208,113210],{"className":38243,"code":113209,"language":38245,"meta":98,"style":98},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[83,113211,113212,113224],{"__ignoreMap":98},[102,113213,113214,113216,113218,113220,113222],{"class":104,"line":105},[102,113215,109499],{"class":119},[102,113217,260],{"class":108},[102,113219,109277],{"class":119},[102,113221,109179],{"class":187},[102,113223,390],{"class":119},[102,113225,113226,113228,113230],{"class":104,"line":116},[102,113227,109523],{"class":119},[102,113229,260],{"class":108},[102,113231,109291],{"class":119},[14,113233,113234],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[93,113236,113238],{"className":38243,"code":113237,"language":38245,"meta":98,"style":98},"print_state(\"initial\", model, data)\n",[83,113239,113240],{"__ignoreMap":98},[102,113241,113242,113245,113247],{"class":104,"line":105},[102,113243,113244],{"class":119},"print_state(",[102,113246,112867],{"class":278},[102,113248,112870],{"class":119},[14,113250,113251,113252,113255],{},"调用刚才定义的 ",[83,113253,113254],{},"print_state"," 函数，打印初始状态。",[93,113257,113258],{"className":38243,"code":113045,"language":38245,"meta":98,"style":98},[83,113259,113260,113276],{"__ignoreMap":98},[102,113261,113262,113264,113266,113268,113270,113272,113274],{"class":104,"line":105},[102,113263,11841],{"class":108},[102,113265,109366],{"class":119},[102,113267,33908],{"class":108},[102,113269,40308],{"class":187},[102,113271,380],{"class":119},[102,113273,1445],{"class":187},[102,113275,38651],{"class":119},[102,113277,113278],{"class":104,"line":116},[102,113279,109564],{"class":119},[14,113281,113282],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[93,113284,113285],{"className":38243,"code":112391,"language":38245,"meta":98,"style":98},[83,113286,113287],{"__ignoreMap":98},[102,113288,113289],{"class":104,"line":105},[102,113290,112391],{"class":119},[14,113292,113293,113294,113296,113297,113299],{},"重置 ",[83,113295,41266],{},"。注意它不会重新创建 ",[83,113298,109950],{},"，因为模型结构没有变，只是状态回到初始值。",[93,113301,113302],{"className":38243,"code":112557,"language":38245,"meta":98,"style":98},[83,113303,113304],{"__ignoreMap":98},[102,113305,113306,113308,113310,113312,113314],{"class":104,"line":105},[102,113307,112564],{"class":119},[102,113309,7044],{"class":187},[102,113311,13252],{"class":119},[102,113313,260],{"class":108},[102,113315,112573],{"class":187},[14,113317,113318,113319,9250,113322,9250,113325,113327],{},"这行是“手动改状态”。在 freejoint 中，",[83,113320,113321],{},"qpos[0]",[83,113323,113324],{},"qpos[1]",[83,113326,113121],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[93,113329,113330],{"className":38243,"code":112408,"language":38245,"meta":98,"style":98},[83,113331,113332],{"__ignoreMap":98},[102,113333,113334],{"class":104,"line":105},[102,113335,112408],{"class":119},[14,113337,113338,113339,113341,113342,113344],{},"手动改完 ",[83,113340,111895],{}," 后，调用 ",[83,113343,112115],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[43,113346,110181],{"id":110180},[14,113348,113349],{},"你会看到:",[87,113351,113352,113357,113362,113365],{},[62,113353,113354,113355],{},"初始时间为 ",[83,113356,8423],{},[62,113358,113359,113360],{},"50 步后时间约为 ",[83,113361,43194],{},[62,113363,113364],{},"reset 后状态恢复",[62,113366,113367,113368,113371,113372],{},"手动修改 ",[83,113369,113370],{},"data.qpos[2]"," 后，小球高度变为 ",[83,113373,113125],{},[14,113375,113376,113378],{},[83,113377,113121],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,113380,113381],{},"输出里可以重点看三件事：",[87,113383,113384,113392,113397],{},[62,113385,113386,113388,113389,113391],{},[83,113387,11222],{}," 是否随着 ",[83,113390,109080],{}," 增加。",[62,113393,113394,113396],{},[83,113395,111895],{}," 的 z 坐标是否因为下落而变化。",[62,113398,113399,113401,113402,36250],{},[83,113400,112217],{}," 后时间是否回到 ",[83,113403,8423],{},[43,113405,110213],{"id":110212},[87,113407,113408,113414,113420,113426,113429,113438],{},[62,113409,113410,113411,36250],{},"修改 timestep 为 ",[83,113412,113413],{},"0.005",[62,113415,113416,113417,36250],{},"重新运行，检查 50 步后时间是否约为 ",[83,113418,113419],{},"0.25",[62,113421,113422,113423,36250],{},"修改重力为 ",[83,113424,113425],{},"0 0 -1.0",[62,113427,113428],{},"观察小球下降速度是否变慢。",[62,113430,110276,113431,110279,113434,113437],{},[83,113432,113433],{},"data.qpos[2] = 2.0",[83,113435,113436],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[62,113439,113440,113441,113444],{},"注释掉 ",[83,113442,113443],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[43,113446,110318],{"id":110317},[48,113448,113450,113451,113453],{"id":113449},"修改-dataqpos-后位置没有更新","修改 ",[83,113452,108935],{}," 后位置没有更新",[14,113455,110327],{},[93,113457,113458],{"className":38243,"code":112408,"language":38245,"meta":98,"style":98},[83,113459,113460],{"__ignoreMap":98},[102,113461,113462],{"class":104,"line":105},[102,113463,112408],{"class":119},[48,113465,113466],{"id":113466},"数组维度看不懂",[14,113468,113469],{},"打印模型维度:",[93,113471,113473],{"className":38243,"code":113472,"language":38245,"meta":98,"style":98},"print(model.nq, model.nv, model.nu)\n",[83,113474,113475],{"__ignoreMap":98},[102,113476,113477,113479],{"class":104,"line":105},[102,113478,38280],{"class":187},[102,113480,113481],{"class":119},"(model.nq, model.nv, model.nu)\n",[9177,113483,113484,113492],{},[9180,113485,113486],{},[9183,113487,113488,113490],{},[9186,113489,112439],{"align":31600},[9186,113491,108565],{"align":31600},[9223,113493,113494,113504,113514],{},[9183,113495,113496,113501],{},[9228,113497,113498],{"align":31600},[83,113499,113500],{},"nq",[9228,113502,113503],{"align":31600},"位置变量数量",[9183,113505,113506,113511],{},[9228,113507,113508],{"align":31600},[83,113509,113510],{},"nv",[9228,113512,113513],{"align":31600},"速度变量数量",[9183,113515,113516,113520],{},[9228,113517,113518],{"align":31600},[83,113519,110027],{},[9228,113521,113522],{"align":31600},"控制输入数量",[48,113524,113526,113527,113529],{"id":113525},"误以为-qpos-一定等于关节数","误以为 ",[83,113528,111895],{}," 一定等于关节数",[14,113531,113532,113533,90395,113535,113537,113538,113540],{},"不是。例如 ",[83,113534,109485],{},[83,113536,111895],{}," 是 7 维，但 ",[83,113539,112225],{}," 是 6 维。",[48,113542,113544,113545,113547],{"id":113543},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[83,113546,111895],{}," 的第几位",[14,113549,113550],{},"初学时可以先打印：",[93,113552,113554],{"className":38243,"code":113553,"language":38245,"meta":98,"style":98},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[83,113555,113556,113566,113576,113588],{"__ignoreMap":98},[102,113557,113558,113560,113562,113564],{"class":104,"line":105},[102,113559,38280],{"class":187},[102,113561,380],{"class":119},[102,113563,109304],{"class":278},[102,113565,109307],{"class":119},[102,113567,113568,113570,113572,113574],{"class":104,"line":116},[102,113569,38280],{"class":187},[102,113571,380],{"class":119},[102,113573,109316],{"class":278},[102,113575,109319],{"class":119},[102,113577,113578,113580,113582,113585],{"class":104,"line":123},[102,113579,38280],{"class":187},[102,113581,380],{"class":119},[102,113583,113584],{"class":278},"\"qpos:\"",[102,113586,113587],{"class":119},", data.qpos)\n",[102,113589,113590,113592,113594,113597],{"class":104,"line":130},[102,113591,38280],{"class":187},[102,113593,380],{"class":119},[102,113595,113596],{"class":278},"\"qvel:\"",[102,113598,113599],{"class":119},", data.qvel)\n",[14,113601,113602],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[48,113604,113605],{"id":113605},"仿真结果每次都一样",[14,113607,113608,113609,113611],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[83,113610,111895],{},"、目标点或控制输入。",[43,113613,110472],{"id":110471},[14,113615,113616,113617,32483],{},"Python 控制 MuJoCo 的核心就是读写 ",[83,113618,41266],{},[87,113620,113621,113629,113634,113639],{},[62,113622,113623,113624,108883,113626,113628],{},"用 ",[83,113625,108935],{},[83,113627,108938],{}," 读取状态。",[62,113630,113623,113631,113633],{},[83,113632,108941],{}," 写入控制。",[62,113635,113623,113636,113638],{},[83,113637,109080],{}," 推进时间。",[62,113640,113641,113642,113644],{},"手动改状态后用 ",[83,113643,112115],{}," 刷新派生量。",[14,113646,113647],{},"理解这一章后，就可以进入关节和 actuator 控制。",[8955,113649,113650],{},"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":98,"searchDepth":116,"depth":116,"links":113652},[113653,113654,113655,113662,113666,113667,113668,113678],{"id":108511,"depth":116,"text":108512},{"id":108634,"depth":116,"text":108635},{"id":108909,"depth":116,"text":108910,"children":113656},[113657,113659,113661],{"id":112420,"depth":123,"text":113658},"qpos、qvel、ctrl 是什么",{"id":112498,"depth":123,"text":113660},"mj_step 和 mj_forward 的区别",{"id":112587,"depth":123,"text":112588},{"id":109117,"depth":116,"text":109118,"children":113663},[113664,113665],{"id":109437,"depth":123,"text":109437},{"id":109573,"depth":123,"text":109573},{"id":110180,"depth":116,"text":110181},{"id":110212,"depth":116,"text":110213},{"id":110317,"depth":116,"text":110318,"children":113669},[113670,113672,113673,113675,113677],{"id":113449,"depth":123,"text":113671},"修改 data.qpos 后位置没有更新",{"id":113466,"depth":123,"text":113466},{"id":113525,"depth":123,"text":113674},"误以为 qpos 一定等于关节数",{"id":113543,"depth":123,"text":113676},"不知道某个元素在 qpos 的第几位",{"id":113605,"depth":123,"text":113605},{"id":110471,"depth":116,"text":110472},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":112183,"description":98},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":113685,"title":113686,"body":113687,"description":98,"extension":8978,"meta":115377,"navigation":651,"path":115378,"seo":115379,"stem":115380,"__hash__":115381},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":113688,"toc":115353},[113689,113692,113694,113697,113699,113724,113727,113746,113749,113751,113753,113777,113779,113793,113795,113836,113838,113862,113864,113867,113901,113903,113916,113919,113987,113996,114000,114003,114037,114043,114046,114050,114089,114092,114112,114116,114159,114161,114190,114193,114199,114202,114204,114598,114600,114612,114614,114625,114627,114630,114659,114667,114670,114705,114708,114710,114718,114721,114723,114734,114744,114764,114767,114803,114815,114863,114882,114924,114937,114965,114970,114991,115001,115019,115022,115056,115059,115079,115082,115101,115107,115109,115112,115118,115124,115134,115137,115143,115152,115154,115200,115202,115208,115214,115217,115220,115240,115243,115249,115255,115257,115280,115283,115286,115295,115298,115336,115338,115341,115347,115350],[10,113690,113686],{"id":113691},"_4关节actuator-与力控制",[43,113693,108512],{"id":108511},[14,113695,113696],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,113698,112196],{},[87,113700,113701,113707,113712,113716,113721],{},[62,113702,113703,113706],{},[83,113704,113705],{},"hinge"," 关节",[62,113708,113709],{},[83,113710,113711],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[62,113713,113714],{},[83,113715,108941],{},[62,113717,113718],{},[83,113719,113720],{},"ctrlrange",[62,113722,113723],{},"读取关节角和角速度",[14,113725,113726],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[93,113728,113730],{"className":38243,"code":113729,"language":38245,"meta":98,"style":98},"data.ctrl[0] = ...\n",[83,113731,113732],{"__ignoreMap":98},[102,113733,113734,113737,113739,113741,113743],{"class":104,"line":105},[102,113735,113736],{"class":119},"data.ctrl[",[102,113738,8423],{"class":187},[102,113740,13252],{"class":119},[102,113742,260],{"class":108},[102,113744,113745],{"class":187}," ...\n",[14,113747,113748],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[43,113750,108635],{"id":108634},[14,113752,108638],{},[93,113754,113755],{"className":31686,"code":112253,"language":31688,"meta":98,"style":98},[83,113756,113757],{"__ignoreMap":98},[102,113758,113759,113761,113763,113765,113767,113769,113771,113773,113775],{"class":104,"line":105},[102,113760,32441],{"class":112},[102,113762,34180],{"class":278},[102,113764,31698],{"class":278},[102,113766,34265],{"class":187},[102,113768,112268],{"class":278},[102,113770,108663],{"class":278},[102,113772,110366],{"class":278},[102,113774,108679],{"class":278},[102,113776,112277],{"class":278},[14,113778,110684],{},[93,113780,113781],{"className":31686,"code":108784,"language":31688,"meta":98,"style":98},[83,113782,113783],{"__ignoreMap":98},[102,113784,113785,113787,113789,113791],{"class":104,"line":105},[102,113786,31695],{"class":112},[102,113788,31698],{"class":278},[102,113790,108795],{"class":278},[102,113792,108798],{"class":278},[14,113794,110701],{},[93,113796,113798],{"className":31686,"code":113797,"language":31688,"meta":98,"style":98},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[83,113799,113800,113817,113826],{"__ignoreMap":98},[102,113801,113802,113804,113806,113808,113811,113813,113815],{"class":104,"line":105},[102,113803,38195],{"class":112},[102,113805,37041],{"class":278},[102,113807,32980],{"class":187},[102,113809,113810],{"class":278}," mujoco-control",[102,113812,108840],{"class":278},[102,113814,108843],{"class":187},[102,113816,108846],{"class":187},[102,113818,113819,113821,113823],{"class":104,"line":116},[102,113820,38195],{"class":112},[102,113822,108853],{"class":278},[102,113824,113825],{"class":278}," mujoco-control\n",[102,113827,113828,113830,113832,113834],{"class":104,"line":123},[102,113829,31695],{"class":112},[102,113831,31698],{"class":278},[102,113833,108795],{"class":278},[102,113835,108798],{"class":278},[14,113837,108869],{},[87,113839,113840,113846,113853,113859],{},[62,113841,113842,113845],{},[83,113843,113844],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[62,113847,113848,113850,113851,36250],{},[83,113849,108941],{}," 长度等于 ",[83,113852,110023],{},[62,113854,90087,113855,113858],{},[83,113856,113857],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[62,113860,113861],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[43,113863,108910],{"id":108909},[14,113865,113866],{},"关节决定 body 如何运动:",[93,113868,113870],{"className":60932,"code":113869,"language":60934,"meta":98,"style":98},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[83,113871,113872],{"__ignoreMap":98},[102,113873,113874,113876,113878,113880,113882,113885,113887,113889,113891,113894,113896,113899],{"class":104,"line":105},[102,113875,1208],{"class":119},[102,113877,110821],{"class":59165},[102,113879,387],{"class":112},[102,113881,260],{"class":119},[102,113883,113884],{"class":278},"\"hinge\"",[102,113886,61689],{"class":112},[102,113888,260],{"class":119},[102,113890,113884],{"class":278},[102,113892,113893],{"class":112}," axis",[102,113895,260],{"class":119},[102,113897,113898],{"class":278},"\"0 1 0\"",[102,113900,109009],{"class":119},[14,113902,110917],{},[87,113904,113905,113910,113913],{},[62,113906,113907,113908],{},"名字是 ",[83,113909,113705],{},[62,113911,113912],{},"类型是旋转关节",[62,113914,113915],{},"绕 y 轴旋转",[14,113917,113918],{},"actuator 决定如何施加控制:",[93,113920,113922],{"className":60932,"code":113921,"language":60934,"meta":98,"style":98},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[83,113923,113924,113933,113979],{"__ignoreMap":98},[102,113925,113926,113928,113931],{"class":104,"line":105},[102,113927,1208],{"class":119},[102,113929,113930],{"class":59165},"actuator",[102,113932,59172],{"class":119},[102,113934,113935,113937,113940,113942,113944,113947,113950,113952,113954,113957,113959,113961,113964,113966,113969,113972,113974,113977],{"class":104,"line":116},[102,113936,60009],{"class":119},[102,113938,113939],{"class":59165},"motor",[102,113941,387],{"class":112},[102,113943,260],{"class":119},[102,113945,113946],{"class":278},"\"hinge_motor\"",[102,113948,113949],{"class":112}," joint",[102,113951,260],{"class":119},[102,113953,113884],{"class":278},[102,113955,113956],{"class":112}," gear",[102,113958,260],{"class":119},[102,113960,12491],{"class":278},[102,113962,113963],{"class":112}," ctrlrange",[102,113965,260],{"class":119},[102,113967,113968],{"class":278},"\"-2 2\"",[102,113970,113971],{"class":112}," ctrllimited",[102,113973,260],{"class":119},[102,113975,113976],{"class":278},"\"true\"",[102,113978,109009],{"class":119},[102,113980,113981,113983,113985],{"class":104,"line":123},[102,113982,59650],{"class":119},[102,113984,113930],{"class":59165},[102,113986,59172],{"class":119},[14,113988,113989,113992,113993,36250],{},[83,113990,113991],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[83,113994,113995],{},"[-2, 2]",[48,113997,113999],{"id":113998},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,114001,114002],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[9177,114004,114005,114015],{},[9180,114006,114007],{},[9183,114008,114009,114011,114013],{},[9186,114010,33618],{"align":31600},[9186,114012,110561],{"align":31600},[9186,114014,108599],{"align":31600},[9223,114016,114017,114027],{},[9183,114018,114019,114021,114024],{},[9228,114020,110821],{"align":31600},[9228,114022,114023],{"align":31600},"定义能怎么动",[9228,114025,114026],{"align":31600},"门轴允许门旋转",[9183,114028,114029,114031,114034],{},[9228,114030,113930],{"align":31600},[9228,114032,114033],{"align":31600},"定义怎么施力或控制",[9228,114035,114036],{"align":31600},"人推门、马达带动门",[14,114038,114039,114040,114042],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[83,114041,108941],{}," 主动控制它。",[14,114044,114045],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[48,114047,114049],{"id":114048},"hinge-joint","hinge joint",[93,114051,114053],{"className":60932,"code":114052,"language":60934,"meta":98,"style":98},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[83,114054,114055],{"__ignoreMap":98},[102,114056,114057,114059,114061,114063,114065,114067,114069,114071,114073,114075,114077,114079,114082,114084,114087],{"class":104,"line":105},[102,114058,1208],{"class":119},[102,114060,110821],{"class":59165},[102,114062,387],{"class":112},[102,114064,260],{"class":119},[102,114066,113884],{"class":278},[102,114068,61689],{"class":112},[102,114070,260],{"class":119},[102,114072,113884],{"class":278},[102,114074,113893],{"class":112},[102,114076,260],{"class":119},[102,114078,113898],{"class":278},[102,114080,114081],{"class":112}," damping",[102,114083,260],{"class":119},[102,114085,114086],{"class":278},"\"0.1\"",[102,114088,109009],{"class":119},[14,114090,114091],{},"含义：",[87,114093,114094,114100,114106],{},[62,114095,114096,114099],{},[83,114097,114098],{},"type=\"hinge\"","：只能绕一个轴旋转。",[62,114101,114102,114105],{},[83,114103,114104],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[62,114107,114108,114111],{},[83,114109,114110],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[48,114113,114115],{"id":114114},"motor-actuator","motor actuator",[93,114117,114119],{"className":60932,"code":114118,"language":60934,"meta":98,"style":98},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[83,114120,114121],{"__ignoreMap":98},[102,114122,114123,114125,114127,114129,114131,114133,114135,114137,114139,114141,114143,114145,114147,114149,114151,114153,114155,114157],{"class":104,"line":105},[102,114124,1208],{"class":119},[102,114126,113939],{"class":59165},[102,114128,387],{"class":112},[102,114130,260],{"class":119},[102,114132,113946],{"class":278},[102,114134,113949],{"class":112},[102,114136,260],{"class":119},[102,114138,113884],{"class":278},[102,114140,113956],{"class":112},[102,114142,260],{"class":119},[102,114144,12491],{"class":278},[102,114146,113963],{"class":112},[102,114148,260],{"class":119},[102,114150,113968],{"class":278},[102,114152,113971],{"class":112},[102,114154,260],{"class":119},[102,114156,113976],{"class":278},[102,114158,109009],{"class":119},[14,114160,114091],{},[87,114162,114163,114172,114178,114184],{},[62,114164,114165,114168,114169,114171],{},[83,114166,114167],{},"joint=\"hinge\"","：这个电机作用在名为 ",[83,114170,113705],{}," 的关节上。",[62,114173,114174,114177],{},[83,114175,114176],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[62,114179,114180,114183],{},[83,114181,114182],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[62,114185,114186,114189],{},[83,114187,114188],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,114191,114192],{},"简单理解：",[93,114194,114197],{"className":114195,"code":114196,"language":6778,"meta":98},[6776],"实际施加效果 ≈ data.ctrl[0] * gear\n",[83,114198,114196],{"__ignoreMap":98},[14,114200,114201],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[43,114203,109118],{"id":109117},[93,114205,114207],{"className":38243,"code":114206,"language":38245,"meta":98,"style":98},"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",[83,114208,114209,114216,114220,114226,114236,114240,114244,114252,114257,114262,114266,114270,114275,114280,114284,114289,114294,114299,114304,114308,114312,114316,114321,114326,114331,114335,114339,114343,114347,114359,114371,114379,114383,114393,114403,114413,114417,114430,114443,114447,114464,114478,114513,114517,114521,114532,114547,114562,114574,114578,114582,114594],{"__ignoreMap":98},[102,114210,114211,114213],{"class":104,"line":105},[102,114212,38257],{"class":108},[102,114214,114215],{"class":119}," math\n",[102,114217,114218],{"class":104,"line":116},[102,114219,652],{"emptyLinePlaceholder":651},[102,114221,114222,114224],{"class":104,"line":123},[102,114223,38257],{"class":108},[102,114225,109166],{"class":119},[102,114227,114228,114230,114232,114234],{"class":104,"line":130},[102,114229,38257],{"class":108},[102,114231,39245],{"class":119},[102,114233,39248],{"class":108},[102,114235,39251],{"class":119},[102,114237,114238],{"class":104,"line":136},[102,114239,652],{"emptyLinePlaceholder":651},[102,114241,114242],{"class":104,"line":142},[102,114243,652],{"emptyLinePlaceholder":651},[102,114245,114246,114248,114250],{"class":104,"line":148},[102,114247,109179],{"class":187},[102,114249,22296],{"class":108},[102,114251,109184],{"class":278},[102,114253,114254],{"class":104,"line":157},[102,114255,114256],{"class":278},"\u003Cmujoco model=\"one_link_motor\">\n",[102,114258,114259],{"class":104,"line":163},[102,114260,114261],{"class":278},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[102,114263,114264],{"class":104,"line":175},[102,114265,652],{"emptyLinePlaceholder":651},[102,114267,114268],{"class":104,"line":181},[102,114269,109203],{"class":278},[102,114271,114272],{"class":104,"line":202},[102,114273,114274],{"class":278},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[102,114276,114277],{"class":104,"line":208},[102,114278,114279],{"class":278},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[102,114281,114282],{"class":104,"line":214},[102,114283,652],{"emptyLinePlaceholder":651},[102,114285,114286],{"class":104,"line":225},[102,114287,114288],{"class":278},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[102,114290,114291],{"class":104,"line":230},[102,114292,114293],{"class":278},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[102,114295,114296],{"class":104,"line":236},[102,114297,114298],{"class":278},"        \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",[102,114300,114301],{"class":104,"line":242},[102,114302,114303],{"class":278},"      \u003C\u002Fbody>\n",[102,114305,114306],{"class":104,"line":248},[102,114307,109232],{"class":278},[102,114309,114310],{"class":104,"line":254},[102,114311,109237],{"class":278},[102,114313,114314],{"class":104,"line":269},[102,114315,652],{"emptyLinePlaceholder":651},[102,114317,114318],{"class":104,"line":298},[102,114319,114320],{"class":278},"  \u003Cactuator>\n",[102,114322,114323],{"class":104,"line":502},[102,114324,114325],{"class":278},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[102,114327,114328],{"class":104,"line":507},[102,114329,114330],{"class":278},"  \u003C\u002Factuator>\n",[102,114332,114333],{"class":104,"line":512},[102,114334,109242],{"class":278},[102,114336,114337],{"class":104,"line":521},[102,114338,103563],{"class":278},[102,114340,114341],{"class":104,"line":526},[102,114342,652],{"emptyLinePlaceholder":651},[102,114344,114345],{"class":104,"line":532},[102,114346,652],{"emptyLinePlaceholder":651},[102,114348,114349,114351,114353,114355,114357],{"class":104,"line":538},[102,114350,39812],{"class":108},[102,114352,220],{"class":112},[102,114354,109263],{"class":119},[102,114356,103551],{"class":187},[102,114358,12552],{"class":119},[102,114360,114361,114363,114365,114367,114369],{"class":104,"line":555},[102,114362,109272],{"class":119},[102,114364,260],{"class":108},[102,114366,109277],{"class":119},[102,114368,109179],{"class":187},[102,114370,390],{"class":119},[102,114372,114373,114375,114377],{"class":104,"line":570},[102,114374,109286],{"class":119},[102,114376,260],{"class":108},[102,114378,109291],{"class":119},[102,114380,114381],{"class":104,"line":581},[102,114382,652],{"emptyLinePlaceholder":651},[102,114384,114385,114387,114389,114391],{"class":104,"line":819},[102,114386,39164],{"class":187},[102,114388,380],{"class":119},[102,114390,109304],{"class":278},[102,114392,109307],{"class":119},[102,114394,114395,114397,114399,114401],{"class":104,"line":828},[102,114396,39164],{"class":187},[102,114398,380],{"class":119},[102,114400,109316],{"class":278},[102,114402,109319],{"class":119},[102,114404,114405,114407,114409,114411],{"class":104,"line":837},[102,114406,39164],{"class":187},[102,114408,380],{"class":119},[102,114410,109328],{"class":278},[102,114412,109331],{"class":119},[102,114414,114415],{"class":104,"line":842},[102,114416,652],{"emptyLinePlaceholder":651},[102,114418,114419,114421,114424,114426,114428],{"class":104,"line":855},[102,114420,2343],{"class":108},[102,114422,114423],{"class":119}," model.nu ",[102,114425,6539],{"class":108},[102,114427,32983],{"class":187},[102,114429,12552],{"class":119},[102,114431,114432,114434,114436,114438,114441],{"class":104,"line":860},[102,114433,111297],{"class":108},[102,114435,111300],{"class":187},[102,114437,380],{"class":119},[102,114439,114440],{"class":278},"\"expected exactly one actuator\"",[102,114442,390],{"class":119},[102,114444,114445],{"class":104,"line":871},[102,114446,652],{"emptyLinePlaceholder":651},[102,114448,114449,114451,114453,114455,114457,114459,114462],{"class":104,"line":1359},[102,114450,12016],{"class":108},[102,114452,39481],{"class":119},[102,114454,33908],{"class":108},[102,114456,40308],{"class":187},[102,114458,380],{"class":119},[102,114460,114461],{"class":187},"2000",[102,114463,38651],{"class":119},[102,114465,114466,114469,114471,114473,114475],{"class":104,"line":1368},[102,114467,114468],{"class":119},"        t ",[102,114470,260],{"class":108},[102,114472,39481],{"class":119},[102,114474,191],{"class":108},[102,114476,114477],{"class":119}," model.opt.timestep\n",[102,114479,114480,114483,114485,114487,114489,114492,114494,114497,114499,114501,114504,114506,114508,114510],{"class":104,"line":1373},[102,114481,114482],{"class":119},"        data.ctrl[",[102,114484,8423],{"class":187},[102,114486,13252],{"class":119},[102,114488,260],{"class":108},[102,114490,114491],{"class":187}," 1.5",[102,114493,5159],{"class":108},[102,114495,114496],{"class":119}," math.sin(",[102,114498,113125],{"class":187},[102,114500,5159],{"class":108},[102,114502,114503],{"class":119}," math.pi ",[102,114505,191],{"class":108},[102,114507,69732],{"class":187},[102,114509,5159],{"class":108},[102,114511,114512],{"class":119}," t)\n",[102,114514,114515],{"class":104,"line":1378},[102,114516,109381],{"class":119},[102,114518,114519],{"class":104,"line":1384},[102,114520,652],{"emptyLinePlaceholder":651},[102,114522,114523,114525,114527,114530],{"class":104,"line":1398},[102,114524,39164],{"class":187},[102,114526,380],{"class":119},[102,114528,114529],{"class":278},"\"time:\"",[102,114531,109343],{"class":119},[102,114533,114534,114536,114538,114541,114543,114545],{"class":104,"line":1424},[102,114535,39164],{"class":187},[102,114537,380],{"class":119},[102,114539,114540],{"class":278},"\"joint qpos:\"",[102,114542,112795],{"class":119},[102,114544,9329],{"class":187},[102,114546,38362],{"class":119},[102,114548,114549,114551,114553,114556,114558,114560],{"class":104,"line":1429},[102,114550,39164],{"class":187},[102,114552,380],{"class":119},[102,114554,114555],{"class":278},"\"joint qvel:\"",[102,114557,112811],{"class":119},[102,114559,9329],{"class":187},[102,114561,38362],{"class":119},[102,114563,114564,114566,114568,114571],{"class":104,"line":1435},[102,114565,39164],{"class":187},[102,114567,380],{"class":119},[102,114569,114570],{"class":278},"\"last ctrl:\"",[102,114572,114573],{"class":119},", data.ctrl.copy())\n",[102,114575,114576],{"class":104,"line":1450},[102,114577,652],{"emptyLinePlaceholder":651},[102,114579,114580],{"class":104,"line":1473},[102,114581,652],{"emptyLinePlaceholder":651},[102,114583,114584,114586,114588,114590,114592],{"class":104,"line":1478},[102,114585,10407],{"class":108},[102,114587,39085],{"class":187},[102,114589,109424],{"class":108},[102,114591,109427],{"class":278},[102,114593,12552],{"class":119},[102,114595,114596],{"class":104,"line":1484},[102,114597,109434],{"class":119},[14,114599,111435],{},[93,114601,114603],{"className":31686,"code":114602,"language":31688,"meta":98,"style":98},"touch ch4_joint_motor.py\n",[83,114604,114605],{"__ignoreMap":98},[102,114606,114607,114609],{"class":104,"line":105},[102,114608,109148],{"class":112},[102,114610,114611],{"class":278}," ch4_joint_motor.py\n",[14,114613,110166],{},[93,114615,114617],{"className":31686,"code":114616,"language":31688,"meta":98,"style":98},"python ch4_joint_motor.py\n",[83,114618,114619],{"__ignoreMap":98},[102,114620,114621,114623],{"class":104,"line":105},[102,114622,38245],{"class":112},[102,114624,114611],{"class":278},[48,114626,109437],{"id":109437},[14,114628,114629],{},"检查 actuator 数量：",[93,114631,114633],{"className":38243,"code":114632,"language":38245,"meta":98,"style":98},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[83,114634,114635,114647],{"__ignoreMap":98},[102,114636,114637,114639,114641,114643,114645],{"class":104,"line":105},[102,114638,10407],{"class":108},[102,114640,114423],{"class":119},[102,114642,6539],{"class":108},[102,114644,32983],{"class":187},[102,114646,12552],{"class":119},[102,114648,114649,114651,114653,114655,114657],{"class":104,"line":116},[102,114650,111760],{"class":108},[102,114652,111300],{"class":187},[102,114654,380],{"class":119},[102,114656,114440],{"class":278},[102,114658,390],{"class":119},[14,114660,114661,114663,114664,114666],{},[83,114662,110023],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[83,114665,108941],{}," 长度应该是 1。",[14,114668,114669],{},"产生正弦控制信号：",[93,114671,114673],{"className":38243,"code":114672,"language":38245,"meta":98,"style":98},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[83,114674,114675],{"__ignoreMap":98},[102,114676,114677,114679,114681,114683,114685,114687,114689,114691,114693,114695,114697,114699,114701,114703],{"class":104,"line":105},[102,114678,113736],{"class":119},[102,114680,8423],{"class":187},[102,114682,13252],{"class":119},[102,114684,260],{"class":108},[102,114686,114491],{"class":187},[102,114688,5159],{"class":108},[102,114690,114496],{"class":119},[102,114692,113125],{"class":187},[102,114694,5159],{"class":108},[102,114696,114503],{"class":119},[102,114698,191],{"class":108},[102,114700,69732],{"class":187},[102,114702,5159],{"class":108},[102,114704,114512],{"class":119},[14,114706,114707],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,114709,109538],{},[93,114711,114712],{"className":38243,"code":112370,"language":38245,"meta":98,"style":98},[83,114713,114714],{"__ignoreMap":98},[102,114715,114716],{"class":104,"line":105},[102,114717,112370],{"class":119},[14,114719,114720],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[48,114722,109573],{"id":109573},[93,114724,114726],{"className":38243,"code":114725,"language":38245,"meta":98,"style":98},"import math\n",[83,114727,114728],{"__ignoreMap":98},[102,114729,114730,114732],{"class":104,"line":105},[102,114731,38257],{"class":108},[102,114733,114215],{"class":119},[14,114735,114736,114737,108883,114740,114743],{},"导入 Python 标准库里的数学模块。后面要用 ",[83,114738,114739],{},"math.sin",[83,114741,114742],{},"math.pi"," 生成周期变化的控制信号。",[93,114745,114746],{"className":38243,"code":111551,"language":38245,"meta":98,"style":98},[83,114747,114748,114754],{"__ignoreMap":98},[102,114749,114750,114752],{"class":104,"line":105},[102,114751,38257],{"class":108},[102,114753,109166],{"class":119},[102,114755,114756,114758,114760,114762],{"class":104,"line":116},[102,114757,38257],{"class":108},[102,114759,39245],{"class":119},[102,114761,39248],{"class":108},[102,114763,39251],{"class":119},[14,114765,114766],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[93,114768,114769],{"className":60932,"code":114052,"language":60934,"meta":98,"style":98},[83,114770,114771],{"__ignoreMap":98},[102,114772,114773,114775,114777,114779,114781,114783,114785,114787,114789,114791,114793,114795,114797,114799,114801],{"class":104,"line":105},[102,114774,1208],{"class":119},[102,114776,110821],{"class":59165},[102,114778,387],{"class":112},[102,114780,260],{"class":119},[102,114782,113884],{"class":278},[102,114784,61689],{"class":112},[102,114786,260],{"class":119},[102,114788,113884],{"class":278},[102,114790,113893],{"class":112},[102,114792,260],{"class":119},[102,114794,113898],{"class":278},[102,114796,114081],{"class":112},[102,114798,260],{"class":119},[102,114800,114086],{"class":278},[102,114802,109009],{"class":119},[14,114804,114805,114806,114808,114809,114811,114812,114814],{},"这行定义关节。",[83,114807,113705],{}," 表示旋转关节。",[83,114810,114104],{}," 表示绕 y 轴旋转。",[83,114813,114110],{}," 表示有一点阻尼，运动不会完全无损耗。",[93,114816,114818],{"className":60932,"code":114817,"language":60934,"meta":98,"style":98},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[83,114819,114820],{"__ignoreMap":98},[102,114821,114822,114824,114826,114828,114830,114833,114835,114837,114840,114843,114845,114848,114850,114852,114854,114856,114858,114861],{"class":104,"line":105},[102,114823,1208],{"class":119},[102,114825,108985],{"class":59165},[102,114827,387],{"class":112},[102,114829,260],{"class":119},[102,114831,114832],{"class":278},"\"link_geom\"",[102,114834,61689],{"class":112},[102,114836,260],{"class":119},[102,114838,114839],{"class":278},"\"capsule\"",[102,114841,114842],{"class":112}," fromto",[102,114844,260],{"class":119},[102,114846,114847],{"class":278},"\"0 0 0 0 0 0.5\"",[102,114849,109001],{"class":112},[102,114851,260],{"class":119},[102,114853,111643],{"class":278},[102,114855,109866],{"class":112},[102,114857,260],{"class":119},[102,114859,114860],{"class":278},"\"0.5\"",[102,114862,109009],{"class":119},[14,114864,114865,114866,114868,114869,114871,114872,114875,114876,36250,114879,114881],{},"这行定义摆杆的形状。",[83,114867,111030],{}," 是胶囊体，适合表示杆子。",[83,114870,111041],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[83,114873,114874],{},"(0,0,0)"," 延伸到 ",[83,114877,114878],{},"(0,0,0.5)",[83,114880,111035],{}," 是半径。",[93,114883,114884],{"className":60932,"code":114118,"language":60934,"meta":98,"style":98},[83,114885,114886],{"__ignoreMap":98},[102,114887,114888,114890,114892,114894,114896,114898,114900,114902,114904,114906,114908,114910,114912,114914,114916,114918,114920,114922],{"class":104,"line":105},[102,114889,1208],{"class":119},[102,114891,113939],{"class":59165},[102,114893,387],{"class":112},[102,114895,260],{"class":119},[102,114897,113946],{"class":278},[102,114899,113949],{"class":112},[102,114901,260],{"class":119},[102,114903,113884],{"class":278},[102,114905,113956],{"class":112},[102,114907,260],{"class":119},[102,114909,12491],{"class":278},[102,114911,113963],{"class":112},[102,114913,260],{"class":119},[102,114915,113968],{"class":278},[102,114917,113971],{"class":112},[102,114919,260],{"class":119},[102,114921,113976],{"class":278},[102,114923,109009],{"class":119},[14,114925,114926,114927,114929,114930,114933,114934,114936],{},"这行定义电机。它作用在 ",[83,114928,113705],{}," 关节上。",[83,114931,114932],{},"gear"," 可以理解成放大倍数。",[83,114935,113720],{}," 限制控制输入范围。",[93,114938,114939],{"className":38243,"code":114632,"language":38245,"meta":98,"style":98},[83,114940,114941,114953],{"__ignoreMap":98},[102,114942,114943,114945,114947,114949,114951],{"class":104,"line":105},[102,114944,10407],{"class":108},[102,114946,114423],{"class":119},[102,114948,6539],{"class":108},[102,114950,32983],{"class":187},[102,114952,12552],{"class":119},[102,114954,114955,114957,114959,114961,114963],{"class":104,"line":116},[102,114956,111760],{"class":108},[102,114958,111300],{"class":187},[102,114960,380],{"class":119},[102,114962,114440],{"class":278},[102,114964,390],{"class":119},[14,114966,114967,114969],{},[83,114968,110023],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[93,114971,114973],{"className":38243,"code":114972,"language":38245,"meta":98,"style":98},"for step in range(2000):\n",[83,114974,114975],{"__ignoreMap":98},[102,114976,114977,114979,114981,114983,114985,114987,114989],{"class":104,"line":105},[102,114978,11841],{"class":108},[102,114980,39481],{"class":119},[102,114982,33908],{"class":108},[102,114984,40308],{"class":187},[102,114986,380],{"class":119},[102,114988,114461],{"class":187},[102,114990,38651],{"class":119},[14,114992,114993,114994,114996,114997,115000],{},"循环 2000 步。这里没有用 ",[83,114995,10012],{},"，而是用 ",[83,114998,114999],{},"step","，因为后面要用当前步数计算时间。",[93,115002,115004],{"className":38243,"code":115003,"language":38245,"meta":98,"style":98},"t = step * model.opt.timestep\n",[83,115005,115006],{"__ignoreMap":98},[102,115007,115008,115011,115013,115015,115017],{"class":104,"line":105},[102,115009,115010],{"class":119},"t ",[102,115012,260],{"class":108},[102,115014,39481],{"class":119},[102,115016,191],{"class":108},[102,115018,114477],{"class":119},[14,115020,115021],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[93,115023,115024],{"className":38243,"code":114672,"language":38245,"meta":98,"style":98},[83,115025,115026],{"__ignoreMap":98},[102,115027,115028,115030,115032,115034,115036,115038,115040,115042,115044,115046,115048,115050,115052,115054],{"class":104,"line":105},[102,115029,113736],{"class":119},[102,115031,8423],{"class":187},[102,115033,13252],{"class":119},[102,115035,260],{"class":108},[102,115037,114491],{"class":187},[102,115039,5159],{"class":108},[102,115041,114496],{"class":119},[102,115043,113125],{"class":187},[102,115045,5159],{"class":108},[102,115047,114503],{"class":119},[102,115049,191],{"class":108},[102,115051,69732],{"class":187},[102,115053,5159],{"class":108},[102,115055,114512],{"class":119},[14,115057,115058],{},"这行给电机输入一个正弦波。拆开看：",[87,115060,115061,115067,115073],{},[62,115062,115063,115066],{},[83,115064,115065],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[62,115068,115069,115072],{},[83,115070,115071],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[62,115074,115075,115078],{},[83,115076,115077],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,115080,115081],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[93,115083,115085],{"className":38243,"code":115084,"language":38245,"meta":98,"style":98},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[83,115086,115087],{"__ignoreMap":98},[102,115088,115089,115091,115093,115095,115097,115099],{"class":104,"line":105},[102,115090,38280],{"class":187},[102,115092,380],{"class":119},[102,115094,114540],{"class":278},[102,115096,112795],{"class":119},[102,115098,9329],{"class":187},[102,115100,38362],{"class":119},[14,115102,115103,115104,115106],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[83,115105,108935],{}," 只有一个数。",[43,115108,110181],{"id":110180},[14,115110,115111],{},"输出类似:",[93,115113,115116],{"className":115114,"code":115115,"language":6778,"meta":98},[6776],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[83,115117,115115],{"__ignoreMap":98},[14,115119,115120,115121,115123],{},"这里 ",[83,115122,113991],{}," 是电机输入。",[14,115125,115126,115129,115130,115133],{},[83,115127,115128],{},"joint qpos"," 是关节角度，单位通常是弧度。",[83,115131,115132],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,115135,115136],{},"角度单位提示：",[93,115138,115141],{"className":115139,"code":115140,"language":6778,"meta":98},[6776],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[83,115142,115140],{"__ignoreMap":98},[14,115144,115145,115146,115148,115149,115151],{},"如果你看到 ",[83,115147,111895],{}," 是 ",[83,115150,43194],{},"，大约就是 28.6 度。",[43,115153,110213],{"id":110212},[87,115155,115156,115163,115166,115173,115176,115184,115192],{},[62,115157,110276,115158,110279,115160,36250],{},[83,115159,114176],{},[83,115161,115162],{},"gear=\"5\"",[62,115164,115165],{},"重新运行，观察关节运动是否更剧烈。",[62,115167,110276,115168,110279,115170,36250],{},[83,115169,113720],{},[83,115171,115172],{},"-0.2 0.2",[62,115174,115175],{},"重新运行，观察控制能力是否变弱。",[62,115177,115178,115179,115181,115182,36250],{},"去掉 actuator，确认 ",[83,115180,110023],{}," 变成 ",[83,115183,8423],{},[62,115185,110276,115186,110279,115188,115191],{},[83,115187,114110],{},[83,115189,115190],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[62,115193,110276,115194,110279,115196,115199],{},[83,115195,114104],{},[83,115197,115198],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[43,115201,110318],{"id":110317},[48,115203,115205],{"id":115204},"indexerror-index-0-is-out-of-bounds",[83,115206,115207],{},"IndexError: index 0 is out of bounds",[14,115209,115210,115211,115213],{},"原因是 ",[83,115212,113857],{},"，没有 actuator。",[48,115215,115216],{"id":115216},"关节几乎不动",[14,115218,115219],{},"可能原因:",[87,115221,115222,115227,115231,115237],{},[62,115223,115224,115226],{},[83,115225,114932],{}," 太小",[62,115228,115229,115226],{},[83,115230,113720],{},[62,115232,115233,115236],{},[83,115234,115235],{},"damping"," 太大",[62,115238,115239],{},"重力方向导致运动不明显",[48,115241,115242],{"id":115242},"模型编译失败",[14,115244,115245,115246,115248],{},"检查 actuator 引用的 ",[83,115247,114167],{}," 是否存在，joint 名称是否拼写一致。",[48,115250,115252,115254],{"id":115251},"datactrl0-写了但没有效果",[83,115253,113991],{}," 写了但没有效果",[14,115256,110440],{},[87,115258,115259,115264,115267,115272,115277],{},[62,115260,115261,115263],{},[83,115262,110023],{}," 是否大于 0。",[62,115265,115266],{},"motor 是否引用了正确 joint。",[62,115268,115269,115271],{},[83,115270,114932],{}," 是否太小。",[62,115273,115274,115276],{},[83,115275,113720],{}," 是否把输入限制得太小。",[62,115278,115279],{},"body 是否真的有可动 joint。",[48,115281,115282],{"id":115282},"控制输入超过范围会怎样",[14,115284,115285],{},"如果设置了：",[93,115287,115289],{"className":60932,"code":115288,"language":60934,"meta":98,"style":98},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[83,115290,115291],{"__ignoreMap":98},[102,115292,115293],{"class":104,"line":105},[102,115294,115288],{"class":119},[14,115296,115297],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[93,115299,115301],{"className":38243,"code":115300,"language":38245,"meta":98,"style":98},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[83,115302,115303,115323],{"__ignoreMap":98},[102,115304,115305,115308,115310,115313,115315,115317,115319,115321],{"class":104,"line":105},[102,115306,115307],{"class":119},"action ",[102,115309,260],{"class":108},[102,115311,115312],{"class":119}," np.clip(action, ",[102,115314,2833],{"class":108},[102,115316,113125],{"class":187},[102,115318,2571],{"class":119},[102,115320,113125],{"class":187},[102,115322,390],{"class":119},[102,115324,115325,115327,115329,115331,115333],{"class":104,"line":116},[102,115326,113736],{"class":119},[102,115328,8423],{"class":187},[102,115330,13252],{"class":119},[102,115332,260],{"class":108},[102,115334,115335],{"class":119}," action\n",[43,115337,110472],{"id":110471},[14,115339,115340],{},"这一章建立了控制任务的基本形式：",[93,115342,115345],{"className":115343,"code":115344,"language":6778,"meta":98},[6776],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[83,115346,115344],{"__ignoreMap":98},[14,115348,115349],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[8955,115351,115352],{},"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":98,"searchDepth":116,"depth":116,"links":115354},[115355,115356,115357,115362,115366,115367,115368,115376],{"id":108511,"depth":116,"text":108512},{"id":108634,"depth":116,"text":108635},{"id":108909,"depth":116,"text":108910,"children":115358},[115359,115360,115361],{"id":113998,"depth":123,"text":113999},{"id":114048,"depth":123,"text":114049},{"id":114114,"depth":123,"text":114115},{"id":109117,"depth":116,"text":109118,"children":115363},[115364,115365],{"id":109437,"depth":123,"text":109437},{"id":109573,"depth":123,"text":109573},{"id":110180,"depth":116,"text":110181},{"id":110212,"depth":116,"text":110213},{"id":110317,"depth":116,"text":110318,"children":115369},[115370,115371,115372,115373,115375],{"id":115204,"depth":123,"text":115207},{"id":115216,"depth":123,"text":115216},{"id":115242,"depth":123,"text":115242},{"id":115251,"depth":123,"text":115374},"data.ctrl[0] 写了但没有效果",{"id":115282,"depth":123,"text":115282},{"id":110471,"depth":116,"text":110472},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":113686,"description":98},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":115383,"title":115384,"body":115385,"description":98,"extension":8978,"meta":117294,"navigation":651,"path":117295,"seo":117296,"stem":117297,"__hash__":117298},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":115386,"toc":117270},[115387,115390,115392,115395,115403,115406,115423,115426,115451,115454,115500,115502,115504,115559,115561,115580,115582,115625,115628,115645,115648,115664,115674,115681,115683,115686,115689,115723,115726,115774,115778,115781,115795,115804,115808,115811,115836,115839,115843,115856,115859,115865,115868,115883,115885,115888,116148,116150,116162,116165,116477,116479,116491,116493,116496,116511,116516,116519,116541,116544,116547,116581,116584,116588,116599,116602,116619,116622,116636,116643,116663,116670,116684,116687,116699,116714,116734,116737,116759,116762,116766,116781,116792,116807,116810,116840,116856,116885,116893,116917,116920,116938,116948,116960,116967,116976,116982,116991,116994,116996,117005,117008,117023,117025,117028,117039,117042,117053,117056,117074,117076,117093,117096,117124,117126,117130,117133,117163,117169,117172,117176,117184,117187,117189,117210,117213,117216,117232,117235,117251,117253,117256,117267],[10,115388,115384],{"id":115389},"_5viewer-可视化与-renderer-离屏渲染",[43,115391,108512],{"id":108511},[14,115393,115394],{},"本章掌握两类可视化方式:",[87,115396,115397,115400],{},[62,115398,115399],{},"交互式 viewer: 适合人工观察仿真",[62,115401,115402],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,115404,115405],{},"使用官方接口:",[93,115407,115409],{"className":38243,"code":115408,"language":38245,"meta":98,"style":98},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[83,115410,115411,115418],{"__ignoreMap":98},[102,115412,115413,115415],{"class":104,"line":105},[102,115414,38257],{"class":108},[102,115416,115417],{"class":119}," mujoco.viewer\n",[102,115419,115420],{"class":104,"line":116},[102,115421,115422],{"class":119},"mujoco.viewer.launch_passive(model, data)\n",[14,115424,115425],{},"以及:",[93,115427,115429],{"className":38243,"code":115428,"language":38245,"meta":98,"style":98},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[83,115430,115431,115441],{"__ignoreMap":98},[102,115432,115433,115436,115438],{"class":104,"line":105},[102,115434,115435],{"class":119},"renderer ",[102,115437,260],{"class":108},[102,115439,115440],{"class":119}," mujoco.Renderer(model)\n",[102,115442,115443,115446,115448],{"class":104,"line":116},[102,115444,115445],{"class":119},"image ",[102,115447,260],{"class":108},[102,115449,115450],{"class":119}," renderer.render()\n",[14,115452,115453],{},"新手建议先理解二者区别：",[9177,115455,115456,115472],{},[9180,115457,115458],{},[9183,115459,115460,115463,115466,115469],{},[9186,115461,115462],{"align":31600},"工具",[9186,115464,115465],{"align":31600},"用途",[9186,115467,115468],{"align":31600},"是否打开窗口",[9186,115470,115471],{"align":31600},"常见场景",[9223,115473,115474,115487],{},[9183,115475,115476,115479,115482,115484],{},[9228,115477,115478],{"align":31600},"Viewer",[9228,115480,115481],{"align":31600},"人眼实时观察仿真",[9228,115483,112530],{"align":31600},[9228,115485,115486],{"align":31600},"调试模型、看控制效果",[9183,115488,115489,115492,115495,115497],{},[9228,115490,115491],{"align":31600},"Renderer",[9228,115493,115494],{"align":31600},"生成图像数组",[9228,115496,112543],{"align":31600},[9228,115498,115499],{"align":31600},"保存图片、训练视觉策略、服务器批量采集",[43,115501,108635],{"id":108634},[14,115503,108638],{},[93,115505,115507],{"className":31686,"code":115506,"language":31688,"meta":98,"style":98},"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",[83,115508,115509,115521,115531,115539,115547],{"__ignoreMap":98},[102,115510,115511,115513,115515,115517,115519],{"class":104,"line":105},[102,115512,32441],{"class":112},[102,115514,34180],{"class":278},[102,115516,31698],{"class":278},[102,115518,34265],{"class":187},[102,115520,32543],{"class":187},[102,115522,115523,115525,115527,115529],{"class":104,"line":116},[102,115524,108673],{"class":278},[102,115526,108676],{"class":278},[102,115528,108679],{"class":278},[102,115530,32543],{"class":187},[102,115532,115533,115535,115537],{"class":104,"line":123},[102,115534,108686],{"class":278},[102,115536,108689],{"class":278},[102,115538,32543],{"class":187},[102,115540,115541,115543,115545],{"class":104,"line":130},[102,115542,108696],{"class":278},[102,115544,108699],{"class":278},[102,115546,32543],{"class":187},[102,115548,115549,115551,115553,115555,115557],{"class":104,"line":136},[102,115550,108706],{"class":278},[102,115552,108709],{"class":278},[102,115554,108712],{"class":278},[102,115556,108715],{"class":278},[102,115558,110381],{"class":278},[14,115560,110684],{},[93,115562,115564],{"className":31686,"code":115563,"language":31688,"meta":98,"style":98},"pip install \"mujoco>=2.3\" numpy pillow\n",[83,115565,115566],{"__ignoreMap":98},[102,115567,115568,115570,115572,115574,115577],{"class":104,"line":105},[102,115569,31695],{"class":112},[102,115571,31698],{"class":278},[102,115573,108795],{"class":278},[102,115575,115576],{"class":278}," numpy",[102,115578,115579],{"class":278}," pillow\n",[14,115581,110701],{},[93,115583,115585],{"className":31686,"code":115584,"language":31688,"meta":98,"style":98},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[83,115586,115587,115604,115613],{"__ignoreMap":98},[102,115588,115589,115591,115593,115595,115598,115600,115602],{"class":104,"line":105},[102,115590,38195],{"class":112},[102,115592,37041],{"class":278},[102,115594,32980],{"class":187},[102,115596,115597],{"class":278}," mujoco-render",[102,115599,108840],{"class":278},[102,115601,108843],{"class":187},[102,115603,108846],{"class":187},[102,115605,115606,115608,115610],{"class":104,"line":116},[102,115607,38195],{"class":112},[102,115609,108853],{"class":278},[102,115611,115612],{"class":278}," mujoco-render\n",[102,115614,115615,115617,115619,115621,115623],{"class":104,"line":123},[102,115616,31695],{"class":112},[102,115618,31698],{"class":278},[102,115620,108795],{"class":278},[102,115622,115576],{"class":278},[102,115624,115579],{"class":278},[14,115626,115627],{},"离屏渲染后端:",[93,115629,115631],{"className":31686,"code":115630,"language":31688,"meta":98,"style":98},"export MUJOCO_GL=egl\n",[83,115632,115633],{"__ignoreMap":98},[102,115634,115635,115637,115640,115642],{"class":104,"line":105},[102,115636,32907],{"class":108},[102,115638,115639],{"class":119}," MUJOCO_GL",[102,115641,260],{"class":108},[102,115643,115644],{"class":119},"egl\n",[14,115646,115647],{},"或:",[93,115649,115651],{"className":31686,"code":115650,"language":31688,"meta":98,"style":98},"export MUJOCO_GL=osmesa\n",[83,115652,115653],{"__ignoreMap":98},[102,115654,115655,115657,115659,115661],{"class":104,"line":105},[102,115656,32907],{"class":108},[102,115658,115639],{"class":119},[102,115660,260],{"class":108},[102,115662,115663],{"class":119},"osmesa\n",[14,115665,115666,115667,115670,115671,36250],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[83,115668,115669],{},"egl"," 失败，再尝试 ",[83,115672,115673],{},"osmesa",[14,115675,115676,115677,115680],{},"如果你在本机桌面环境运行，通常先不要设置 ",[83,115678,115679],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[43,115682,108910],{"id":108909},[14,115684,115685],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,115687,115688],{},"典型 viewer 流程:",[93,115690,115692],{"className":38243,"code":115691,"language":38245,"meta":98,"style":98},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[83,115693,115694,115707,115714,115718],{"__ignoreMap":98},[102,115695,115696,115699,115702,115704],{"class":104,"line":105},[102,115697,115698],{"class":108},"with",[102,115700,115701],{"class":119}," mujoco.viewer.launch_passive(model, data) ",[102,115703,39248],{"class":108},[102,115705,115706],{"class":119}," viewer:\n",[102,115708,115709,115711],{"class":104,"line":116},[102,115710,11089],{"class":108},[102,115712,115713],{"class":119}," viewer.is_running():\n",[102,115715,115716],{"class":104,"line":123},[102,115717,109381],{"class":119},[102,115719,115720],{"class":104,"line":130},[102,115721,115722],{"class":119},"        viewer.sync()\n",[14,115724,115725],{},"典型 renderer 流程:",[93,115727,115729],{"className":38243,"code":115728,"language":38245,"meta":98,"style":98},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[83,115730,115731,115757,115761,115766],{"__ignoreMap":98},[102,115732,115733,115735,115737,115740,115742,115744,115746,115748,115750,115752,115755],{"class":104,"line":105},[102,115734,115435],{"class":119},[102,115736,260],{"class":108},[102,115738,115739],{"class":119}," mujoco.Renderer(model, ",[102,115741,32846],{"class":386},[102,115743,260],{"class":108},[102,115745,50207],{"class":187},[102,115747,2571],{"class":119},[102,115749,32842],{"class":386},[102,115751,260],{"class":108},[102,115753,115754],{"class":187},"640",[102,115756,390],{"class":119},[102,115758,115759],{"class":104,"line":116},[102,115760,112370],{"class":119},[102,115762,115763],{"class":104,"line":123},[102,115764,115765],{"class":119},"renderer.update_scene(data)\n",[102,115767,115768,115770,115772],{"class":104,"line":130},[102,115769,115445],{"class":119},[102,115771,260],{"class":108},[102,115773,115450],{"class":119},[48,115775,115777],{"id":115776},"viewer-的同步逻辑","viewer 的同步逻辑",[14,115779,115780],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[93,115782,115784],{"className":38243,"code":115783,"language":38245,"meta":98,"style":98},"mujoco.mj_step(model, data)\nviewer.sync()\n",[83,115785,115786,115790],{"__ignoreMap":98},[102,115787,115788],{"class":104,"line":105},[102,115789,112370],{"class":119},[102,115791,115792],{"class":104,"line":116},[102,115793,115794],{"class":119},"viewer.sync()\n",[14,115796,115797,115799,115800,115803],{},[83,115798,109080],{}," 负责算物理，",[83,115801,115802],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[48,115805,115807],{"id":115806},"为什么要-sleep","为什么要 sleep",[14,115809,115810],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[93,115812,115814],{"className":38243,"code":115813,"language":38245,"meta":98,"style":98},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[83,115815,115816],{"__ignoreMap":98},[102,115817,115818,115821,115823,115826,115828,115831,115833],{"class":104,"line":105},[102,115819,115820],{"class":119},"sleep_time ",[102,115822,260],{"class":108},[102,115824,115825],{"class":119}," model.opt.timestep ",[102,115827,2833],{"class":108},[102,115829,115830],{"class":119}," (time.time() ",[102,115832,2833],{"class":108},[102,115834,115835],{"class":119}," step_start)\n",[14,115837,115838],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[48,115840,115842],{"id":115841},"renderer-输出是什么","renderer 输出是什么",[93,115844,115846],{"className":38243,"code":115845,"language":38245,"meta":98,"style":98},"image = renderer.render()\n",[83,115847,115848],{"__ignoreMap":98},[102,115849,115850,115852,115854],{"class":104,"line":105},[102,115851,115445],{"class":119},[102,115853,260],{"class":108},[102,115855,115450],{"class":119},[14,115857,115858],{},"得到的是 NumPy 数组，形状通常是：",[93,115860,115863],{"className":115861,"code":115862,"language":6778,"meta":98},[6776],"(height, width, 3)\n",[83,115864,115862],{"__ignoreMap":98},[14,115866,115867],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[93,115869,115871],{"className":38243,"code":115870,"language":38245,"meta":98,"style":98},"Image.fromarray(image).save(\"render_output.png\")\n",[83,115872,115873],{"__ignoreMap":98},[102,115874,115875,115878,115881],{"class":104,"line":105},[102,115876,115877],{"class":119},"Image.fromarray(image).save(",[102,115879,115880],{"class":278},"\"render_output.png\"",[102,115882,390],{"class":119},[43,115884,109118],{"id":109117},[14,115886,115887],{},"交互式 Viewer:",[93,115889,115891],{"className":38243,"code":115890,"language":38245,"meta":98,"style":98},"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",[83,115892,115893,115899,115903,115909,115915,115919,115923,115931,115936,115940,115944,115948,115953,115958,115962,115966,115970,115975,115979,115983,115987,115991,115995,115999,116011,116023,116031,116035,116045,116065,116075,116080,116085,116089,116106,116119,116124,116128,116132,116144],{"__ignoreMap":98},[102,115894,115895,115897],{"class":104,"line":105},[102,115896,38257],{"class":108},[102,115898,39694],{"class":119},[102,115900,115901],{"class":104,"line":116},[102,115902,652],{"emptyLinePlaceholder":651},[102,115904,115905,115907],{"class":104,"line":123},[102,115906,38257],{"class":108},[102,115908,109166],{"class":119},[102,115910,115911,115913],{"class":104,"line":130},[102,115912,38257],{"class":108},[102,115914,115417],{"class":119},[102,115916,115917],{"class":104,"line":136},[102,115918,652],{"emptyLinePlaceholder":651},[102,115920,115921],{"class":104,"line":142},[102,115922,652],{"emptyLinePlaceholder":651},[102,115924,115925,115927,115929],{"class":104,"line":148},[102,115926,109179],{"class":187},[102,115928,22296],{"class":108},[102,115930,109184],{"class":278},[102,115932,115933],{"class":104,"line":157},[102,115934,115935],{"class":278},"\u003Cmujoco model=\"viewer_demo\">\n",[102,115937,115938],{"class":104,"line":163},[102,115939,109194],{"class":278},[102,115941,115942],{"class":104,"line":175},[102,115943,652],{"emptyLinePlaceholder":651},[102,115945,115946],{"class":104,"line":181},[102,115947,109203],{"class":278},[102,115949,115950],{"class":104,"line":202},[102,115951,115952],{"class":278},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[102,115954,115955],{"class":104,"line":208},[102,115956,115957],{"class":278},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[102,115959,115960],{"class":104,"line":214},[102,115961,652],{"emptyLinePlaceholder":651},[102,115963,115964],{"class":104,"line":225},[102,115965,109217],{"class":278},[102,115967,115968],{"class":104,"line":230},[102,115969,109222],{"class":278},[102,115971,115972],{"class":104,"line":236},[102,115973,115974],{"class":278},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[102,115976,115977],{"class":104,"line":242},[102,115978,109232],{"class":278},[102,115980,115981],{"class":104,"line":248},[102,115982,109237],{"class":278},[102,115984,115985],{"class":104,"line":254},[102,115986,109242],{"class":278},[102,115988,115989],{"class":104,"line":269},[102,115990,103563],{"class":278},[102,115992,115993],{"class":104,"line":298},[102,115994,652],{"emptyLinePlaceholder":651},[102,115996,115997],{"class":104,"line":502},[102,115998,652],{"emptyLinePlaceholder":651},[102,116000,116001,116003,116005,116007,116009],{"class":104,"line":507},[102,116002,39812],{"class":108},[102,116004,220],{"class":112},[102,116006,109263],{"class":119},[102,116008,103551],{"class":187},[102,116010,12552],{"class":119},[102,116012,116013,116015,116017,116019,116021],{"class":104,"line":512},[102,116014,109272],{"class":119},[102,116016,260],{"class":108},[102,116018,109277],{"class":119},[102,116020,109179],{"class":187},[102,116022,390],{"class":119},[102,116024,116025,116027,116029],{"class":104,"line":521},[102,116026,109286],{"class":119},[102,116028,260],{"class":108},[102,116030,109291],{"class":119},[102,116032,116033],{"class":104,"line":526},[102,116034,652],{"emptyLinePlaceholder":651},[102,116036,116037,116039,116041,116043],{"class":104,"line":532},[102,116038,42043],{"class":108},[102,116040,115701],{"class":119},[102,116042,39248],{"class":108},[102,116044,115706],{"class":119},[102,116046,116047,116050,116053,116055,116058,116060,116063],{"class":104,"line":538},[102,116048,116049],{"class":108},"        while",[102,116051,116052],{"class":119}," viewer.is_running() ",[102,116054,38327],{"class":108},[102,116056,116057],{"class":119}," data.time ",[102,116059,1208],{"class":108},[102,116061,116062],{"class":187}," 5.0",[102,116064,12552],{"class":119},[102,116066,116067,116070,116072],{"class":104,"line":555},[102,116068,116069],{"class":119},"            step_start ",[102,116071,260],{"class":108},[102,116073,116074],{"class":119}," time.time()\n",[102,116076,116077],{"class":104,"line":570},[102,116078,116079],{"class":119},"            mujoco.mj_step(model, data)\n",[102,116081,116082],{"class":104,"line":581},[102,116083,116084],{"class":119},"            viewer.sync()\n",[102,116086,116087],{"class":104,"line":819},[102,116088,652],{"emptyLinePlaceholder":651},[102,116090,116091,116094,116096,116098,116100,116102,116104],{"class":104,"line":828},[102,116092,116093],{"class":119},"            sleep_time ",[102,116095,260],{"class":108},[102,116097,115825],{"class":119},[102,116099,2833],{"class":108},[102,116101,115830],{"class":119},[102,116103,2833],{"class":108},[102,116105,115835],{"class":119},[102,116107,116108,116110,116113,116115,116117],{"class":104,"line":837},[102,116109,13451],{"class":108},[102,116111,116112],{"class":119}," sleep_time ",[102,116114,1219],{"class":108},[102,116116,866],{"class":187},[102,116118,12552],{"class":119},[102,116120,116121],{"class":104,"line":842},[102,116122,116123],{"class":119},"                time.sleep(sleep_time)\n",[102,116125,116126],{"class":104,"line":855},[102,116127,652],{"emptyLinePlaceholder":651},[102,116129,116130],{"class":104,"line":860},[102,116131,652],{"emptyLinePlaceholder":651},[102,116133,116134,116136,116138,116140,116142],{"class":104,"line":871},[102,116135,10407],{"class":108},[102,116137,39085],{"class":187},[102,116139,109424],{"class":108},[102,116141,109427],{"class":278},[102,116143,12552],{"class":119},[102,116145,116146],{"class":104,"line":1359},[102,116147,109434],{"class":119},[14,116149,111435],{},[93,116151,116153],{"className":31686,"code":116152,"language":31688,"meta":98,"style":98},"touch ch5_viewer.py\n",[83,116154,116155],{"__ignoreMap":98},[102,116156,116157,116159],{"class":104,"line":105},[102,116158,109148],{"class":112},[102,116160,116161],{"class":278}," ch5_viewer.py\n",[14,116163,116164],{},"离屏 Renderer 保存图片:",[93,116166,116168],{"className":38243,"code":116167,"language":38245,"meta":98,"style":98},"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",[83,116169,116170,116182,116186,116192,116202,116206,116210,116218,116223,116227,116231,116235,116239,116244,116248,116252,116256,116260,116264,116268,116272,116276,116280,116284,116288,116300,116312,116320,116345,116349,116365,116369,116373,116388,116397,116401,116415,116420,116425,116429,116441,116453,116457,116461,116473],{"__ignoreMap":98},[102,116171,116172,116174,116177,116179],{"class":104,"line":105},[102,116173,38602],{"class":108},[102,116175,116176],{"class":119}," pathlib ",[102,116178,38257],{"class":108},[102,116180,116181],{"class":119}," Path\n",[102,116183,116184],{"class":104,"line":116},[102,116185,652],{"emptyLinePlaceholder":651},[102,116187,116188,116190],{"class":104,"line":123},[102,116189,38257],{"class":108},[102,116191,109166],{"class":119},[102,116193,116194,116196,116198,116200],{"class":104,"line":130},[102,116195,38602],{"class":108},[102,116197,55128],{"class":187},[102,116199,55131],{"class":108},[102,116201,55134],{"class":119},[102,116203,116204],{"class":104,"line":136},[102,116205,652],{"emptyLinePlaceholder":651},[102,116207,116208],{"class":104,"line":142},[102,116209,652],{"emptyLinePlaceholder":651},[102,116211,116212,116214,116216],{"class":104,"line":148},[102,116213,109179],{"class":187},[102,116215,22296],{"class":108},[102,116217,109184],{"class":278},[102,116219,116220],{"class":104,"line":157},[102,116221,116222],{"class":278},"\u003Cmujoco model=\"renderer_demo\">\n",[102,116224,116225],{"class":104,"line":163},[102,116226,109194],{"class":278},[102,116228,116229],{"class":104,"line":175},[102,116230,652],{"emptyLinePlaceholder":651},[102,116232,116233],{"class":104,"line":181},[102,116234,109203],{"class":278},[102,116236,116237],{"class":104,"line":202},[102,116238,115952],{"class":278},[102,116240,116241],{"class":104,"line":208},[102,116242,116243],{"class":278},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[102,116245,116246],{"class":104,"line":214},[102,116247,115957],{"class":278},[102,116249,116250],{"class":104,"line":225},[102,116251,652],{"emptyLinePlaceholder":651},[102,116253,116254],{"class":104,"line":230},[102,116255,109217],{"class":278},[102,116257,116258],{"class":104,"line":236},[102,116259,109222],{"class":278},[102,116261,116262],{"class":104,"line":242},[102,116263,115974],{"class":278},[102,116265,116266],{"class":104,"line":248},[102,116267,109232],{"class":278},[102,116269,116270],{"class":104,"line":254},[102,116271,109237],{"class":278},[102,116273,116274],{"class":104,"line":269},[102,116275,109242],{"class":278},[102,116277,116278],{"class":104,"line":298},[102,116279,103563],{"class":278},[102,116281,116282],{"class":104,"line":502},[102,116283,652],{"emptyLinePlaceholder":651},[102,116285,116286],{"class":104,"line":507},[102,116287,652],{"emptyLinePlaceholder":651},[102,116289,116290,116292,116294,116296,116298],{"class":104,"line":512},[102,116291,39812],{"class":108},[102,116293,220],{"class":112},[102,116295,109263],{"class":119},[102,116297,103551],{"class":187},[102,116299,12552],{"class":119},[102,116301,116302,116304,116306,116308,116310],{"class":104,"line":521},[102,116303,109272],{"class":119},[102,116305,260],{"class":108},[102,116307,109277],{"class":119},[102,116309,109179],{"class":187},[102,116311,390],{"class":119},[102,116313,116314,116316,116318],{"class":104,"line":526},[102,116315,109286],{"class":119},[102,116317,260],{"class":108},[102,116319,109291],{"class":119},[102,116321,116322,116325,116327,116329,116331,116333,116335,116337,116339,116341,116343],{"class":104,"line":532},[102,116323,116324],{"class":119},"    renderer ",[102,116326,260],{"class":108},[102,116328,115739],{"class":119},[102,116330,32846],{"class":386},[102,116332,260],{"class":108},[102,116334,50207],{"class":187},[102,116336,2571],{"class":119},[102,116338,32842],{"class":386},[102,116340,260],{"class":108},[102,116342,115754],{"class":187},[102,116344,390],{"class":119},[102,116346,116347],{"class":104,"line":538},[102,116348,652],{"emptyLinePlaceholder":651},[102,116350,116351,116353,116355,116357,116359,116361,116363],{"class":104,"line":555},[102,116352,12016],{"class":108},[102,116354,109366],{"class":119},[102,116356,33908],{"class":108},[102,116358,40308],{"class":187},[102,116360,380],{"class":119},[102,116362,5569],{"class":187},[102,116364,38651],{"class":119},[102,116366,116367],{"class":104,"line":570},[102,116368,109381],{"class":119},[102,116370,116371],{"class":104,"line":581},[102,116372,652],{"emptyLinePlaceholder":651},[102,116374,116375,116378,116381,116383,116386],{"class":104,"line":819},[102,116376,116377],{"class":119},"    renderer.update_scene(data, ",[102,116379,116380],{"class":386},"camera",[102,116382,260],{"class":108},[102,116384,116385],{"class":278},"\"fixed_camera\"",[102,116387,390],{"class":119},[102,116389,116390,116393,116395],{"class":104,"line":828},[102,116391,116392],{"class":119},"    image ",[102,116394,260],{"class":108},[102,116396,115450],{"class":119},[102,116398,116399],{"class":104,"line":837},[102,116400,652],{"emptyLinePlaceholder":651},[102,116402,116403,116406,116408,116411,116413],{"class":104,"line":842},[102,116404,116405],{"class":119},"    output_path ",[102,116407,260],{"class":108},[102,116409,116410],{"class":119}," Path(",[102,116412,115880],{"class":278},[102,116414,390],{"class":119},[102,116416,116417],{"class":104,"line":855},[102,116418,116419],{"class":119},"    Image.fromarray(image).save(output_path)\n",[102,116421,116422],{"class":104,"line":860},[102,116423,116424],{"class":119},"    renderer.close()\n",[102,116426,116427],{"class":104,"line":871},[102,116428,652],{"emptyLinePlaceholder":651},[102,116430,116431,116433,116435,116438],{"class":104,"line":1359},[102,116432,39164],{"class":187},[102,116434,380],{"class":119},[102,116436,116437],{"class":278},"\"saved:\"",[102,116439,116440],{"class":119},", output_path.resolve())\n",[102,116442,116443,116445,116447,116450],{"class":104,"line":1368},[102,116444,39164],{"class":187},[102,116446,380],{"class":119},[102,116448,116449],{"class":278},"\"image shape:\"",[102,116451,116452],{"class":119},", image.shape)\n",[102,116454,116455],{"class":104,"line":1373},[102,116456,652],{"emptyLinePlaceholder":651},[102,116458,116459],{"class":104,"line":1378},[102,116460,652],{"emptyLinePlaceholder":651},[102,116462,116463,116465,116467,116469,116471],{"class":104,"line":1384},[102,116464,10407],{"class":108},[102,116466,39085],{"class":187},[102,116468,109424],{"class":108},[102,116470,109427],{"class":278},[102,116472,12552],{"class":119},[102,116474,116475],{"class":104,"line":1398},[102,116476,109434],{"class":119},[14,116478,111435],{},[93,116480,116482],{"className":31686,"code":116481,"language":31688,"meta":98,"style":98},"touch ch5_renderer.py\n",[83,116483,116484],{"__ignoreMap":98},[102,116485,116486,116488],{"class":104,"line":105},[102,116487,109148],{"class":112},[102,116489,116490],{"class":278}," ch5_renderer.py\n",[48,116492,109437],{"id":109437},[14,116494,116495],{},"viewer 上下文：",[93,116497,116499],{"className":38243,"code":116498,"language":38245,"meta":98,"style":98},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[83,116500,116501],{"__ignoreMap":98},[102,116502,116503,116505,116507,116509],{"class":104,"line":105},[102,116504,115698],{"class":108},[102,116506,115701],{"class":119},[102,116508,39248],{"class":108},[102,116510,115706],{"class":119},[14,116512,116513,116515],{},[83,116514,115698],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,116517,116518],{},"窗口循环：",[93,116520,116522],{"className":38243,"code":116521,"language":38245,"meta":98,"style":98},"while viewer.is_running() and data.time \u003C 5.0:\n",[83,116523,116524],{"__ignoreMap":98},[102,116525,116526,116529,116531,116533,116535,116537,116539],{"class":104,"line":105},[102,116527,116528],{"class":108},"while",[102,116530,116052],{"class":119},[102,116532,38327],{"class":108},[102,116534,116057],{"class":119},[102,116536,1208],{"class":108},[102,116538,116062],{"class":187},[102,116540,12552],{"class":119},[14,116542,116543],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,116545,116546],{},"固定相机：",[93,116548,116550],{"className":60932,"code":116549,"language":60934,"meta":98,"style":98},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[83,116551,116552],{"__ignoreMap":98},[102,116553,116554,116556,116558,116560,116562,116564,116566,116568,116571,116574,116576,116579],{"class":104,"line":105},[102,116555,1208],{"class":119},[102,116557,116380],{"class":59165},[102,116559,387],{"class":112},[102,116561,260],{"class":119},[102,116563,116385],{"class":278},[102,116565,108971],{"class":112},[102,116567,260],{"class":119},[102,116569,116570],{"class":278},"\"1.5 -2.0 1.2\"",[102,116572,116573],{"class":112}," xyaxes",[102,116575,260],{"class":119},[102,116577,116578],{"class":278},"\"1 0.75 0 0 0 1\"",[102,116580,109009],{"class":119},[14,116582,116583],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[48,116585,116587],{"id":116586},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[93,116589,116591],{"className":38243,"code":116590,"language":38245,"meta":98,"style":98},"import time\n",[83,116592,116593],{"__ignoreMap":98},[102,116594,116595,116597],{"class":104,"line":105},[102,116596,38257],{"class":108},[102,116598,39694],{"class":119},[14,116600,116601],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[93,116603,116605],{"className":38243,"code":116604,"language":38245,"meta":98,"style":98},"import mujoco\nimport mujoco.viewer\n",[83,116606,116607,116613],{"__ignoreMap":98},[102,116608,116609,116611],{"class":104,"line":105},[102,116610,38257],{"class":108},[102,116612,109166],{"class":119},[102,116614,116615,116617],{"class":104,"line":116},[102,116616,38257],{"class":108},[102,116618,115417],{"class":119},[14,116620,116621],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[93,116623,116624],{"className":38243,"code":116498,"language":38245,"meta":98,"style":98},[83,116625,116626],{"__ignoreMap":98},[102,116627,116628,116630,116632,116634],{"class":104,"line":105},[102,116629,115698],{"class":108},[102,116631,115701],{"class":119},[102,116633,39248],{"class":108},[102,116635,115706],{"class":119},[14,116637,116638,116639,116642],{},"打开一个 viewer 窗口。",[83,116640,116641],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[93,116644,116645],{"className":38243,"code":116521,"language":38245,"meta":98,"style":98},[83,116646,116647],{"__ignoreMap":98},[102,116648,116649,116651,116653,116655,116657,116659,116661],{"class":104,"line":105},[102,116650,116528],{"class":108},[102,116652,116052],{"class":119},[102,116654,38327],{"class":108},[102,116656,116057],{"class":119},[102,116658,1208],{"class":108},[102,116660,116062],{"class":187},[102,116662,12552],{"class":119},[14,116664,116665,116666,116669],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[83,116667,116668],{},"viewer.is_running()"," 会变成 false，循环结束。",[93,116671,116673],{"className":38243,"code":116672,"language":38245,"meta":98,"style":98},"step_start = time.time()\n",[83,116674,116675],{"__ignoreMap":98},[102,116676,116677,116680,116682],{"class":104,"line":105},[102,116678,116679],{"class":119},"step_start ",[102,116681,260],{"class":108},[102,116683,116074],{"class":119},[14,116685,116686],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[93,116688,116689],{"className":38243,"code":115783,"language":38245,"meta":98,"style":98},[83,116690,116691,116695],{"__ignoreMap":98},[102,116692,116693],{"class":104,"line":105},[102,116694,112370],{"class":119},[102,116696,116697],{"class":104,"line":116},[102,116698,115794],{"class":119},[14,116700,116701,116703,116704,116706,116707,116709,116710,116713],{},[83,116702,109080],{}," 推进物理仿真。",[83,116705,115802],{}," 把最新的 ",[83,116708,41266],{}," 同步到窗口里显示。没有 ",[83,116711,116712],{},"sync()","，窗口可能看不到最新状态。",[93,116715,116716],{"className":38243,"code":115813,"language":38245,"meta":98,"style":98},[83,116717,116718],{"__ignoreMap":98},[102,116719,116720,116722,116724,116726,116728,116730,116732],{"class":104,"line":105},[102,116721,115820],{"class":119},[102,116723,260],{"class":108},[102,116725,115825],{"class":119},[102,116727,2833],{"class":108},[102,116729,115830],{"class":119},[102,116731,2833],{"class":108},[102,116733,115835],{"class":119},[14,116735,116736],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[93,116738,116740],{"className":38243,"code":116739,"language":38245,"meta":98,"style":98},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[83,116741,116742,116754],{"__ignoreMap":98},[102,116743,116744,116746,116748,116750,116752],{"class":104,"line":105},[102,116745,10407],{"class":108},[102,116747,116112],{"class":119},[102,116749,1219],{"class":108},[102,116751,866],{"class":187},[102,116753,12552],{"class":119},[102,116755,116756],{"class":104,"line":116},[102,116757,116758],{"class":119},"    time.sleep(sleep_time)\n",[14,116760,116761],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[48,116763,116765],{"id":116764},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[93,116767,116769],{"className":38243,"code":116768,"language":38245,"meta":98,"style":98},"from pathlib import Path\n",[83,116770,116771],{"__ignoreMap":98},[102,116772,116773,116775,116777,116779],{"class":104,"line":105},[102,116774,38602],{"class":108},[102,116776,116176],{"class":119},[102,116778,38257],{"class":108},[102,116780,116181],{"class":119},[14,116782,116783,116784,116787,116788,116791],{},"导入 ",[83,116785,116786],{},"Path","，用来处理文件路径。相比直接写字符串，",[83,116789,116790],{},"Path(\"render_output.png\")"," 更清晰。",[93,116793,116795],{"className":38243,"code":116794,"language":38245,"meta":98,"style":98},"from PIL import Image\n",[83,116796,116797],{"__ignoreMap":98},[102,116798,116799,116801,116803,116805],{"class":104,"line":105},[102,116800,38602],{"class":108},[102,116802,55128],{"class":187},[102,116804,55131],{"class":108},[102,116806,55134],{"class":119},[14,116808,116809],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[93,116811,116812],{"className":60932,"code":116549,"language":60934,"meta":98,"style":98},[83,116813,116814],{"__ignoreMap":98},[102,116815,116816,116818,116820,116822,116824,116826,116828,116830,116832,116834,116836,116838],{"class":104,"line":105},[102,116817,1208],{"class":119},[102,116819,116380],{"class":59165},[102,116821,387],{"class":112},[102,116823,260],{"class":119},[102,116825,116385],{"class":278},[102,116827,108971],{"class":112},[102,116829,260],{"class":119},[102,116831,116570],{"class":278},[102,116833,116573],{"class":112},[102,116835,260],{"class":119},[102,116837,116578],{"class":278},[102,116839,109009],{"class":119},[14,116841,116842,116843,116845,116846,116848,116849,116852,116853,116855],{},"定义一个相机。",[83,116844,87675],{}," 是相机名字。",[83,116847,112011],{}," 是相机在世界里的位置。",[83,116850,116851],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[83,116854,112011],{}," 来调视角。",[93,116857,116859],{"className":38243,"code":116858,"language":38245,"meta":98,"style":98},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[83,116860,116861],{"__ignoreMap":98},[102,116862,116863,116865,116867,116869,116871,116873,116875,116877,116879,116881,116883],{"class":104,"line":105},[102,116864,115435],{"class":119},[102,116866,260],{"class":108},[102,116868,115739],{"class":119},[102,116870,32846],{"class":386},[102,116872,260],{"class":108},[102,116874,50207],{"class":187},[102,116876,2571],{"class":119},[102,116878,32842],{"class":386},[102,116880,260],{"class":108},[102,116882,115754],{"class":187},[102,116884,390],{"class":119},[14,116886,116887,116888,108883,116890,116892],{},"创建离屏渲染器。",[83,116889,32846],{},[83,116891,32842],{}," 决定输出图片大小。",[93,116894,116895],{"className":38243,"code":109541,"language":38245,"meta":98,"style":98},[83,116896,116897,116913],{"__ignoreMap":98},[102,116898,116899,116901,116903,116905,116907,116909,116911],{"class":104,"line":105},[102,116900,11841],{"class":108},[102,116902,109366],{"class":119},[102,116904,33908],{"class":108},[102,116906,40308],{"class":187},[102,116908,380],{"class":119},[102,116910,5569],{"class":187},[102,116912,38651],{"class":119},[102,116914,116915],{"class":104,"line":116},[102,116916,109564],{"class":119},[14,116918,116919],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[93,116921,116923],{"className":38243,"code":116922,"language":38245,"meta":98,"style":98},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[83,116924,116925],{"__ignoreMap":98},[102,116926,116927,116930,116932,116934,116936],{"class":104,"line":105},[102,116928,116929],{"class":119},"renderer.update_scene(data, ",[102,116931,116380],{"class":386},[102,116933,260],{"class":108},[102,116935,116385],{"class":278},[102,116937,390],{"class":119},[14,116939,116940,116941,116943,116944,116947],{},"告诉 renderer：用当前 ",[83,116942,41266],{}," 的状态更新画面，并使用名为 ",[83,116945,116946],{},"fixed_camera"," 的相机视角。",[93,116949,116950],{"className":38243,"code":115845,"language":38245,"meta":98,"style":98},[83,116951,116952],{"__ignoreMap":98},[102,116953,116954,116956,116958],{"class":104,"line":105},[102,116955,115445],{"class":119},[102,116957,260],{"class":108},[102,116959,115450],{"class":119},[14,116961,116962,116963,116966],{},"真正渲染出图像。",[83,116964,116965],{},"image"," 是一个 NumPy 数组，不是文件。",[93,116968,116970],{"className":38243,"code":116969,"language":38245,"meta":98,"style":98},"Image.fromarray(image).save(output_path)\n",[83,116971,116972],{"__ignoreMap":98},[102,116973,116974],{"class":104,"line":105},[102,116975,116969],{"class":119},[14,116977,116978,116979,36250],{},"把数组转换成图片，并保存到 ",[83,116980,116981],{},"render_output.png",[93,116983,116985],{"className":38243,"code":116984,"language":38245,"meta":98,"style":98},"renderer.close()\n",[83,116986,116987],{"__ignoreMap":98},[102,116988,116989],{"class":104,"line":105},[102,116990,116984],{"class":119},[14,116992,116993],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[43,116995,110181],{"id":110180},[14,116997,116998,116999,117001,117002,36250],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[83,117000,116981],{},"，并输出图像数组形状，例如 ",[83,117003,117004],{},"(480, 640, 3)",[14,117006,117007],{},"如果图片里看不到方块，先检查：",[87,117009,117010,117013,117016],{},[62,117011,117012],{},"方块是否掉到相机视野外。",[62,117014,117015],{},"camera 位置是否合理。",[62,117017,117018,117019,117022],{},"是否在 ",[83,117020,117021],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[43,117024,110213],{"id":110212},[14,117026,117027],{},"运行 viewer:",[93,117029,117031],{"className":31686,"code":117030,"language":31688,"meta":98,"style":98},"python ch5_viewer.py\n",[83,117032,117033],{"__ignoreMap":98},[102,117034,117035,117037],{"class":104,"line":105},[102,117036,38245],{"class":112},[102,117038,116161],{"class":278},[14,117040,117041],{},"运行 renderer:",[93,117043,117045],{"className":31686,"code":117044,"language":31688,"meta":98,"style":98},"python ch5_renderer.py\n",[83,117046,117047],{"__ignoreMap":98},[102,117048,117049,117051],{"class":104,"line":105},[102,117050,38245],{"class":112},[102,117052,116490],{"class":278},[14,117054,117055],{},"如果在服务器上运行:",[93,117057,117059],{"className":31686,"code":117058,"language":31688,"meta":98,"style":98},"MUJOCO_GL=egl python ch5_renderer.py\n",[83,117060,117061],{"__ignoreMap":98},[102,117062,117063,117065,117067,117069,117072],{"class":104,"line":105},[102,117064,115679],{"class":119},[102,117066,260],{"class":108},[102,117068,115669],{"class":278},[102,117070,117071],{"class":112}," python",[102,117073,116490],{"class":278},[14,117075,115647],{},[93,117077,117079],{"className":31686,"code":117078,"language":31688,"meta":98,"style":98},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[83,117080,117081],{"__ignoreMap":98},[102,117082,117083,117085,117087,117089,117091],{"class":104,"line":105},[102,117084,115679],{"class":119},[102,117086,260],{"class":108},[102,117088,115673],{"class":278},[102,117090,117071],{"class":112},[102,117092,116490],{"class":278},[14,117094,117095],{},"再做几个练习：",[87,117097,117098,117105,117108,117114],{},[62,117099,117100,117101,117104],{},"把 renderer 分辨率改成 ",[83,117102,117103],{},"height=240, width=320","，观察输出 shape。",[62,117106,117107],{},"把方块颜色改成蓝色，重新保存图片。",[62,117109,117110,117111,117113],{},"把相机 ",[83,117112,112011],{}," 改远一点，观察画面中物体是否变小。",[62,117115,117116,117117,110279,117120,117123],{},"把 viewer 示例中的 ",[83,117118,117119],{},"data.time \u003C 5.0",[83,117121,117122],{},"data.time \u003C 20.0","，观察更长时间。",[43,117125,110318],{"id":110317},[48,117127,117129],{"id":117128},"viewer-窗口打不开","viewer 窗口打不开",[14,117131,117132],{},"安装:",[93,117134,117136],{"className":31686,"code":117135,"language":31688,"meta":98,"style":98},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[83,117137,117138],{"__ignoreMap":98},[102,117139,117140,117142,117144,117146,117148,117150,117152,117154,117156,117158,117160],{"class":104,"line":105},[102,117141,32441],{"class":112},[102,117143,34180],{"class":278},[102,117145,31698],{"class":278},[102,117147,34265],{"class":187},[102,117149,110371],{"class":278},[102,117151,108699],{"class":278},[102,117153,110376],{"class":278},[102,117155,108712],{"class":278},[102,117157,108718],{"class":278},[102,117159,108709],{"class":278},[102,117161,117162],{"class":278}," libXinerama\n",[48,117164,117166],{"id":117165},"glfwerror",[83,117167,117168],{},"GLFWError",[14,117170,117171],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[48,117173,117175],{"id":117174},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,117177,117178,117179,90404,117181,117183],{},"尝试 ",[83,117180,108902],{},[83,117182,108905],{},"。可能存在版本差异。",[48,117185,117186],{"id":117186},"保存图片是黑的",[14,117188,110440],{},[87,117190,117191,117194,117197,117207],{},[62,117192,117193],{},"XML 里是否有 light。",[62,117195,117196],{},"相机是否对着模型。",[62,117198,117199,117200,117203,117204,36250],{},"是否先 ",[83,117201,117202],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[83,117205,117206],{},"renderer.render()",[62,117208,117209],{},"物体是否已经掉出视野。",[48,117211,117212],{"id":117212},"远程服务器没有显示器",[14,117214,117215],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[93,117217,117218],{"className":31686,"code":117058,"language":31688,"meta":98,"style":98},[83,117219,117220],{"__ignoreMap":98},[102,117221,117222,117224,117226,117228,117230],{"class":104,"line":105},[102,117223,115679],{"class":119},[102,117225,260],{"class":108},[102,117227,115669],{"class":278},[102,117229,117071],{"class":112},[102,117231,116490],{"class":278},[14,117233,117234],{},"如果 EGL 不可用，再尝试：",[93,117236,117237],{"className":31686,"code":117078,"language":31688,"meta":98,"style":98},[83,117238,117239],{"__ignoreMap":98},[102,117240,117241,117243,117245,117247,117249],{"class":104,"line":105},[102,117242,115679],{"class":119},[102,117244,260],{"class":108},[102,117246,115673],{"class":278},[102,117248,117071],{"class":112},[102,117250,116490],{"class":278},[43,117252,110472],{"id":110471},[14,117254,117255],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[87,117257,117258,117261,117264],{},[62,117259,117260],{},"先用 viewer 看模型和控制是否正常。",[62,117262,117263],{},"再用 renderer 保存图片或构造视觉观测。",[62,117265,117266],{},"最后把状态、动作、图像、奖励组织成训练数据。",[8955,117268,117269],{},"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":98,"searchDepth":116,"depth":116,"links":117271},[117272,117273,117274,117279,117284,117285,117286,117293],{"id":108511,"depth":116,"text":108512},{"id":108634,"depth":116,"text":108635},{"id":108909,"depth":116,"text":108910,"children":117275},[117276,117277,117278],{"id":115776,"depth":123,"text":115777},{"id":115806,"depth":123,"text":115807},{"id":115841,"depth":123,"text":115842},{"id":109117,"depth":116,"text":109118,"children":117280},[117281,117282,117283],{"id":109437,"depth":123,"text":109437},{"id":116586,"depth":123,"text":116587},{"id":116764,"depth":123,"text":116765},{"id":110180,"depth":116,"text":110181},{"id":110212,"depth":116,"text":110213},{"id":110317,"depth":116,"text":110318,"children":117287},[117288,117289,117290,117291,117292],{"id":117128,"depth":123,"text":117129},{"id":117165,"depth":123,"text":117168},{"id":117174,"depth":123,"text":117175},{"id":117186,"depth":123,"text":117186},{"id":117212,"depth":123,"text":117212},{"id":110471,"depth":116,"text":110472},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":115384,"description":98},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":117300,"title":117301,"body":117302,"description":98,"extension":8978,"meta":119213,"navigation":651,"path":119214,"seo":119215,"stem":119216,"__hash__":119217},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":117303,"toc":119189},[117304,117307,117309,117312,117314,117333,117336,117342,117345,117347,117349,117373,117375,117389,117391,117432,117434,117445,117447,117450,117456,117459,117493,117496,117528,117531,117563,117567,117570,117610,117613,117619,117622,117628,117632,117635,117641,117644,117648,117651,117691,117693,117706,117709,117711,118293,118295,118307,118310,118321,118323,118326,118345,118357,118360,118381,118384,118387,118430,118433,118436,118456,118463,118465,118483,118498,118501,118507,118510,118516,118533,118540,118571,118582,118616,118627,118644,118653,118661,118666,118680,118683,118704,118710,118724,118729,118759,118769,118794,118802,118825,118828,118844,118847,118855,118861,118883,118896,118917,118926,118965,118976,118978,118981,118987,118990,118993,118999,119002,119022,119025,119027,119066,119068,119071,119079,119082,119085,119112,119115,119125,119131,119134,119140,119142,119148,119152,119155,119157,119160,119184,119187],[10,117305,117301],{"id":117306},"_6控制任务cartpole",[43,117308,108512],{"id":108511},[14,117310,117311],{},"本章搭建一个最小 Cartpole 控制任务。",[14,117313,112196],{},[87,117315,117316,117319,117321,117324,117327,117330],{},[62,117317,117318],{},"slide joint",[62,117320,114049],{},[62,117322,117323],{},"cart force actuator",[62,117325,117326],{},"状态观测",[62,117328,117329],{},"简单控制循环",[62,117331,117332],{},"reward 设计雏形",[14,117334,117335],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[93,117337,117340],{"className":117338,"code":117339,"language":6778,"meta":98},[6776],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[83,117341,117339],{"__ignoreMap":98},[14,117343,117344],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[43,117346,108635],{"id":108634},[14,117348,108638],{},[93,117350,117351],{"className":31686,"code":112253,"language":31688,"meta":98,"style":98},[83,117352,117353],{"__ignoreMap":98},[102,117354,117355,117357,117359,117361,117363,117365,117367,117369,117371],{"class":104,"line":105},[102,117356,32441],{"class":112},[102,117358,34180],{"class":278},[102,117360,31698],{"class":278},[102,117362,34265],{"class":187},[102,117364,112268],{"class":278},[102,117366,108663],{"class":278},[102,117368,110366],{"class":278},[102,117370,108679],{"class":278},[102,117372,112277],{"class":278},[14,117374,110684],{},[93,117376,117377],{"className":31686,"code":108784,"language":31688,"meta":98,"style":98},[83,117378,117379],{"__ignoreMap":98},[102,117380,117381,117383,117385,117387],{"class":104,"line":105},[102,117382,31695],{"class":112},[102,117384,31698],{"class":278},[102,117386,108795],{"class":278},[102,117388,108798],{"class":278},[14,117390,110701],{},[93,117392,117394],{"className":31686,"code":117393,"language":31688,"meta":98,"style":98},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[83,117395,117396,117413,117422],{"__ignoreMap":98},[102,117397,117398,117400,117402,117404,117407,117409,117411],{"class":104,"line":105},[102,117399,38195],{"class":112},[102,117401,37041],{"class":278},[102,117403,32980],{"class":187},[102,117405,117406],{"class":278}," mujoco-cartpole",[102,117408,108840],{"class":278},[102,117410,108843],{"class":187},[102,117412,108846],{"class":187},[102,117414,117415,117417,117419],{"class":104,"line":116},[102,117416,38195],{"class":112},[102,117418,108853],{"class":278},[102,117420,117421],{"class":278}," mujoco-cartpole\n",[102,117423,117424,117426,117428,117430],{"class":104,"line":123},[102,117425,31695],{"class":112},[102,117427,31698],{"class":278},[102,117429,108795],{"class":278},[102,117431,108798],{"class":278},[14,117433,108869],{},[87,117435,117436,117439,117442],{},[62,117437,117438],{},"本章不依赖 Gymnasium。",[62,117440,117441],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[62,117443,117444],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[43,117446,108910],{"id":108909},[14,117448,117449],{},"Cartpole 的模型结构:",[93,117451,117454],{"className":117452,"code":117453,"language":6778,"meta":98},[6776],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[83,117455,117453],{"__ignoreMap":98},[14,117457,117458],{},"小车通过 slide joint 左右移动:",[93,117460,117462],{"className":60932,"code":117461,"language":60934,"meta":98,"style":98},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[83,117463,117464],{"__ignoreMap":98},[102,117465,117466,117468,117470,117472,117474,117477,117479,117481,117484,117486,117488,117491],{"class":104,"line":105},[102,117467,1208],{"class":119},[102,117469,110821],{"class":59165},[102,117471,387],{"class":112},[102,117473,260],{"class":119},[102,117475,117476],{"class":278},"\"cart_x\"",[102,117478,61689],{"class":112},[102,117480,260],{"class":119},[102,117482,117483],{"class":278},"\"slide\"",[102,117485,113893],{"class":112},[102,117487,260],{"class":119},[102,117489,117490],{"class":278},"\"1 0 0\"",[102,117492,109009],{"class":119},[14,117494,117495],{},"杆子通过 hinge joint 旋转:",[93,117497,117499],{"className":60932,"code":117498,"language":60934,"meta":98,"style":98},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[83,117500,117501],{"__ignoreMap":98},[102,117502,117503,117505,117507,117509,117511,117514,117516,117518,117520,117522,117524,117526],{"class":104,"line":105},[102,117504,1208],{"class":119},[102,117506,110821],{"class":59165},[102,117508,387],{"class":112},[102,117510,260],{"class":119},[102,117512,117513],{"class":278},"\"pole_hinge\"",[102,117515,61689],{"class":112},[102,117517,260],{"class":119},[102,117519,113884],{"class":278},[102,117521,113893],{"class":112},[102,117523,260],{"class":119},[102,117525,113898],{"class":278},[102,117527,109009],{"class":119},[14,117529,117530],{},"控制力作用在小车 slide joint 上:",[93,117532,117534],{"className":60932,"code":117533,"language":60934,"meta":98,"style":98},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[83,117535,117536],{"__ignoreMap":98},[102,117537,117538,117540,117542,117544,117546,117549,117551,117553,117555,117557,117559,117561],{"class":104,"line":105},[102,117539,1208],{"class":119},[102,117541,113939],{"class":59165},[102,117543,387],{"class":112},[102,117545,260],{"class":119},[102,117547,117548],{"class":278},"\"cart_motor\"",[102,117550,113949],{"class":112},[102,117552,260],{"class":119},[102,117554,117476],{"class":278},[102,117556,113956],{"class":112},[102,117558,260],{"class":119},[102,117560,62181],{"class":278},[102,117562,109009],{"class":119},[48,117564,117566],{"id":117565},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,117568,117569],{},"这个简化模型有两个关节：",[9177,117571,117572,117583],{},[9180,117573,117574],{},[9183,117575,117576,117578,117580],{},[9186,117577,110624],{"align":31600},[9186,117579,31601],{"align":31600},[9186,117581,117582],{"align":31600},"对应状态",[9223,117584,117585,117598],{},[9183,117586,117587,117592,117595],{},[9228,117588,117589],{"align":31600},[83,117590,117591],{},"cart_x",[9228,117593,117594],{"align":31600},"slide",[9228,117596,117597],{"align":31600},"小车 x 位置",[9183,117599,117600,117605,117607],{},[9228,117601,117602],{"align":31600},[83,117603,117604],{},"pole_hinge",[9228,117606,113705],{"align":31600},[9228,117608,117609],{"align":31600},"杆子角度",[14,117611,117612],{},"所以：",[93,117614,117617],{"className":117615,"code":117616,"language":6778,"meta":98},[6776],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[83,117618,117616],{"__ignoreMap":98},[14,117620,117621],{},"把它们拼起来就是观测：",[93,117623,117626],{"className":117624,"code":117625,"language":6778,"meta":98},[6776],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[83,117627,117625],{"__ignoreMap":98},[48,117629,117631],{"id":117630},"action-是什么","action 是什么",[14,117633,117634],{},"本章只有一个 actuator：",[93,117636,117639],{"className":117637,"code":117638,"language":6778,"meta":98},[6776],"data.ctrl[0] = action\n",[83,117640,117638],{"__ignoreMap":98},[14,117642,117643],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[48,117645,117647],{"id":117646},"reward-是什么","reward 是什么",[14,117649,117650],{},"奖励函数：",[93,117652,117654],{"className":38243,"code":117653,"language":38245,"meta":98,"style":98},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[83,117655,117656],{"__ignoreMap":98},[102,117657,117658,117660,117663,117665,117667,117669,117672,117674,117677,117679,117681,117683,117686,117688],{"class":104,"line":105},[102,117659,2607],{"class":108},[102,117661,117662],{"class":187}," float",[102,117664,380],{"class":119},[102,117666,110268],{"class":187},[102,117668,60136],{"class":108},[102,117670,117671],{"class":187}," 0.1",[102,117673,5159],{"class":108},[102,117675,117676],{"class":119}," cart_x ",[102,117678,191],{"class":108},[102,117680,117676],{"class":119},[102,117682,2833],{"class":108},[102,117684,117685],{"class":119}," pole_angle ",[102,117687,191],{"class":108},[102,117689,117690],{"class":119}," pole_angle)\n",[14,117692,114091],{},[87,117694,117695,117700,117703],{},[62,117696,117697,117698,36250],{},"基础奖励是 ",[83,117699,110268],{},[62,117701,117702],{},"小车离中心越远，扣分越多。",[62,117704,117705],{},"杆子角度越大，扣分越多。",[14,117707,117708],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[43,117710,109118],{"id":109117},[93,117712,117714],{"className":38243,"code":117713,"language":38245,"meta":98,"style":98},"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",[83,117715,117716,117722,117732,117736,117740,117748,117753,117757,117761,117765,117770,117774,117779,117784,117789,117793,117798,117803,117808,117812,117816,117820,117824,117828,117833,117837,117841,117845,117849,117853,117863,117870,117874,117878,117892,117906,117919,117949,117953,117957,117969,117981,117989,117993,118006,118010,118014,118023,118027,118043,118053,118066,118079,118083,118106,118124,118128,118140,118144,118148,118158,118168,118172,118188,118229,118233,118253,118269,118273,118277,118289],{"__ignoreMap":98},[102,117717,117718,117720],{"class":104,"line":105},[102,117719,38257],{"class":108},[102,117721,109166],{"class":119},[102,117723,117724,117726,117728,117730],{"class":104,"line":116},[102,117725,38257],{"class":108},[102,117727,39245],{"class":119},[102,117729,39248],{"class":108},[102,117731,39251],{"class":119},[102,117733,117734],{"class":104,"line":123},[102,117735,652],{"emptyLinePlaceholder":651},[102,117737,117738],{"class":104,"line":130},[102,117739,652],{"emptyLinePlaceholder":651},[102,117741,117742,117744,117746],{"class":104,"line":136},[102,117743,109179],{"class":187},[102,117745,22296],{"class":108},[102,117747,109184],{"class":278},[102,117749,117750],{"class":104,"line":142},[102,117751,117752],{"class":278},"\u003Cmujoco model=\"cartpole\">\n",[102,117754,117755],{"class":104,"line":148},[102,117756,109194],{"class":278},[102,117758,117759],{"class":104,"line":157},[102,117760,652],{"emptyLinePlaceholder":651},[102,117762,117763],{"class":104,"line":163},[102,117764,109203],{"class":278},[102,117766,117767],{"class":104,"line":175},[102,117768,117769],{"class":278},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[102,117771,117772],{"class":104,"line":181},[102,117773,652],{"emptyLinePlaceholder":651},[102,117775,117776],{"class":104,"line":202},[102,117777,117778],{"class":278},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[102,117780,117781],{"class":104,"line":208},[102,117782,117783],{"class":278},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[102,117785,117786],{"class":104,"line":214},[102,117787,117788],{"class":278},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[102,117790,117791],{"class":104,"line":225},[102,117792,652],{"emptyLinePlaceholder":651},[102,117794,117795],{"class":104,"line":230},[102,117796,117797],{"class":278},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[102,117799,117800],{"class":104,"line":236},[102,117801,117802],{"class":278},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[102,117804,117805],{"class":104,"line":242},[102,117806,117807],{"class":278},"        \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",[102,117809,117810],{"class":104,"line":248},[102,117811,114303],{"class":278},[102,117813,117814],{"class":104,"line":254},[102,117815,109232],{"class":278},[102,117817,117818],{"class":104,"line":269},[102,117819,109237],{"class":278},[102,117821,117822],{"class":104,"line":298},[102,117823,652],{"emptyLinePlaceholder":651},[102,117825,117826],{"class":104,"line":502},[102,117827,114320],{"class":278},[102,117829,117830],{"class":104,"line":507},[102,117831,117832],{"class":278},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[102,117834,117835],{"class":104,"line":512},[102,117836,114330],{"class":278},[102,117838,117839],{"class":104,"line":521},[102,117840,109242],{"class":278},[102,117842,117843],{"class":104,"line":526},[102,117844,103563],{"class":278},[102,117846,117847],{"class":104,"line":532},[102,117848,652],{"emptyLinePlaceholder":651},[102,117850,117851],{"class":104,"line":538},[102,117852,652],{"emptyLinePlaceholder":651},[102,117854,117855,117857,117860],{"class":104,"line":555},[102,117856,39812],{"class":108},[102,117858,117859],{"class":112}," get_observation",[102,117861,117862],{"class":119},"(data: mujoco.MjData) -> np.ndarray:\n",[102,117864,117865,117867],{"class":104,"line":570},[102,117866,863],{"class":108},[102,117868,117869],{"class":119}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[102,117871,117872],{"class":104,"line":581},[102,117873,652],{"emptyLinePlaceholder":651},[102,117875,117876],{"class":104,"line":819},[102,117877,652],{"emptyLinePlaceholder":651},[102,117879,117880,117882,117885,117888,117890],{"class":104,"line":828},[102,117881,39812],{"class":108},[102,117883,117884],{"class":112}," compute_reward",[102,117886,117887],{"class":119},"(obs: np.ndarray) -> ",[102,117889,9086],{"class":187},[102,117891,12552],{"class":119},[102,117893,117894,117897,117899,117902,117904],{"class":104,"line":837},[102,117895,117896],{"class":119},"    cart_x ",[102,117898,260],{"class":108},[102,117900,117901],{"class":119}," obs[",[102,117903,8423],{"class":187},[102,117905,41111],{"class":119},[102,117907,117908,117911,117913,117915,117917],{"class":104,"line":842},[102,117909,117910],{"class":119},"    pole_angle ",[102,117912,260],{"class":108},[102,117914,117901],{"class":119},[102,117916,7039],{"class":187},[102,117918,41111],{"class":119},[102,117920,117921,117923,117925,117927,117929,117931,117933,117935,117937,117939,117941,117943,117945,117947],{"class":104,"line":855},[102,117922,863],{"class":108},[102,117924,117662],{"class":187},[102,117926,380],{"class":119},[102,117928,110268],{"class":187},[102,117930,60136],{"class":108},[102,117932,117671],{"class":187},[102,117934,5159],{"class":108},[102,117936,117676],{"class":119},[102,117938,191],{"class":108},[102,117940,117676],{"class":119},[102,117942,2833],{"class":108},[102,117944,117685],{"class":119},[102,117946,191],{"class":108},[102,117948,117690],{"class":119},[102,117950,117951],{"class":104,"line":860},[102,117952,652],{"emptyLinePlaceholder":651},[102,117954,117955],{"class":104,"line":871},[102,117956,652],{"emptyLinePlaceholder":651},[102,117958,117959,117961,117963,117965,117967],{"class":104,"line":1359},[102,117960,39812],{"class":108},[102,117962,220],{"class":112},[102,117964,109263],{"class":119},[102,117966,103551],{"class":187},[102,117968,12552],{"class":119},[102,117970,117971,117973,117975,117977,117979],{"class":104,"line":1368},[102,117972,109272],{"class":119},[102,117974,260],{"class":108},[102,117976,109277],{"class":119},[102,117978,109179],{"class":187},[102,117980,390],{"class":119},[102,117982,117983,117985,117987],{"class":104,"line":1373},[102,117984,109286],{"class":119},[102,117986,260],{"class":108},[102,117988,109291],{"class":119},[102,117990,117991],{"class":104,"line":1378},[102,117992,652],{"emptyLinePlaceholder":651},[102,117994,117995,117997,117999,118001,118003],{"class":104,"line":1384},[102,117996,112934],{"class":119},[102,117998,7039],{"class":187},[102,118000,13252],{"class":119},[102,118002,260],{"class":108},[102,118004,118005],{"class":187}," 0.1\n",[102,118007,118008],{"class":104,"line":1398},[102,118009,112947],{"class":119},[102,118011,118012],{"class":104,"line":1424},[102,118013,652],{"emptyLinePlaceholder":651},[102,118015,118016,118019,118021],{"class":104,"line":1429},[102,118017,118018],{"class":119},"    total_reward ",[102,118020,260],{"class":108},[102,118022,112626],{"class":187},[102,118024,118025],{"class":104,"line":1435},[102,118026,652],{"emptyLinePlaceholder":651},[102,118028,118029,118031,118033,118035,118037,118039,118041],{"class":104,"line":1450},[102,118030,12016],{"class":108},[102,118032,39481],{"class":119},[102,118034,33908],{"class":108},[102,118036,40308],{"class":187},[102,118038,380],{"class":119},[102,118040,15205],{"class":187},[102,118042,38651],{"class":119},[102,118044,118045,118048,118050],{"class":104,"line":1473},[102,118046,118047],{"class":119},"        obs ",[102,118049,260],{"class":108},[102,118051,118052],{"class":119}," get_observation(data)\n",[102,118054,118055,118058,118060,118062,118064],{"class":104,"line":1478},[102,118056,118057],{"class":119},"        pole_angle ",[102,118059,260],{"class":108},[102,118061,117901],{"class":119},[102,118063,7039],{"class":187},[102,118065,41111],{"class":119},[102,118067,118068,118071,118073,118075,118077],{"class":104,"line":1484},[102,118069,118070],{"class":119},"        pole_angular_velocity ",[102,118072,260],{"class":108},[102,118074,117901],{"class":119},[102,118076,7049],{"class":187},[102,118078,41111],{"class":119},[102,118080,118081],{"class":104,"line":1499},[102,118082,652],{"emptyLinePlaceholder":651},[102,118084,118085,118088,118090,118093,118095,118097,118099,118101,118103],{"class":104,"line":1508},[102,118086,118087],{"class":119},"        action ",[102,118089,260],{"class":108},[102,118091,118092],{"class":187}," 2.0",[102,118094,5159],{"class":108},[102,118096,117685],{"class":119},[102,118098,1702],{"class":108},[102,118100,69732],{"class":187},[102,118102,5159],{"class":108},[102,118104,118105],{"class":119}," pole_angular_velocity\n",[102,118107,118108,118110,118112,118114,118116,118118,118120,118122],{"class":104,"line":1513},[102,118109,118087],{"class":119},[102,118111,260],{"class":108},[102,118113,115312],{"class":119},[102,118115,2833],{"class":108},[102,118117,110268],{"class":187},[102,118119,2571],{"class":119},[102,118121,110268],{"class":187},[102,118123,390],{"class":119},[102,118125,118126],{"class":104,"line":1524},[102,118127,652],{"emptyLinePlaceholder":651},[102,118129,118130,118132,118134,118136,118138],{"class":104,"line":1529},[102,118131,114482],{"class":119},[102,118133,8423],{"class":187},[102,118135,13252],{"class":119},[102,118137,260],{"class":108},[102,118139,115335],{"class":119},[102,118141,118142],{"class":104,"line":1538},[102,118143,109381],{"class":119},[102,118145,118146],{"class":104,"line":2089},[102,118147,652],{"emptyLinePlaceholder":651},[102,118149,118150,118153,118155],{"class":104,"line":2094},[102,118151,118152],{"class":119},"        reward ",[102,118154,260],{"class":108},[102,118156,118157],{"class":119}," compute_reward(get_observation(data))\n",[102,118159,118160,118163,118165],{"class":104,"line":2100},[102,118161,118162],{"class":119},"        total_reward ",[102,118164,18244],{"class":108},[102,118166,118167],{"class":119}," reward\n",[102,118169,118170],{"class":104,"line":2106},[102,118171,652],{"emptyLinePlaceholder":651},[102,118173,118174,118176,118178,118180,118182,118184,118186],{"class":104,"line":2120},[102,118175,1202],{"class":108},[102,118177,39481],{"class":119},[102,118179,9363],{"class":108},[102,118181,14552],{"class":187},[102,118183,109424],{"class":108},[102,118185,866],{"class":187},[102,118187,12552],{"class":119},[102,118189,118190,118192,118194,118197,118200,118203,118206,118208,118211,118214,118216,118218,118220,118222,118225,118227],{"class":104,"line":2128},[102,118191,42515],{"class":187},[102,118193,380],{"class":119},[102,118195,118196],{"class":278},"\"step:\"",[102,118198,118199],{"class":119},", step, ",[102,118201,118202],{"class":278},"\"obs:\"",[102,118204,118205],{"class":119},", np.round(obs, ",[102,118207,7049],{"class":187},[102,118209,118210],{"class":119},"), ",[102,118212,118213],{"class":278},"\"action:\"",[102,118215,2571],{"class":119},[102,118217,39883],{"class":187},[102,118219,380],{"class":119},[102,118221,9086],{"class":187},[102,118223,118224],{"class":119},"(action), ",[102,118226,7049],{"class":187},[102,118228,38362],{"class":119},[102,118230,118231],{"class":104,"line":2149},[102,118232,652],{"emptyLinePlaceholder":651},[102,118234,118235,118237,118239,118242,118244,118246,118249,118251],{"class":104,"line":2161},[102,118236,39164],{"class":187},[102,118238,380],{"class":119},[102,118240,118241],{"class":278},"\"total_reward:\"",[102,118243,2571],{"class":119},[102,118245,39883],{"class":187},[102,118247,118248],{"class":119},"(total_reward, ",[102,118250,7049],{"class":187},[102,118252,38362],{"class":119},[102,118254,118255,118257,118259,118262,118265,118267],{"class":104,"line":2167},[102,118256,39164],{"class":187},[102,118258,380],{"class":119},[102,118260,118261],{"class":278},"\"final obs:\"",[102,118263,118264],{"class":119},", np.round(get_observation(data), ",[102,118266,7049],{"class":187},[102,118268,38362],{"class":119},[102,118270,118271],{"class":104,"line":2190},[102,118272,652],{"emptyLinePlaceholder":651},[102,118274,118275],{"class":104,"line":2196},[102,118276,652],{"emptyLinePlaceholder":651},[102,118278,118279,118281,118283,118285,118287],{"class":104,"line":2219},[102,118280,10407],{"class":108},[102,118282,39085],{"class":187},[102,118284,109424],{"class":108},[102,118286,109427],{"class":278},[102,118288,12552],{"class":119},[102,118290,118291],{"class":104,"line":2233},[102,118292,109434],{"class":119},[14,118294,111435],{},[93,118296,118298],{"className":31686,"code":118297,"language":31688,"meta":98,"style":98},"touch ch6_cartpole.py\n",[83,118299,118300],{"__ignoreMap":98},[102,118301,118302,118304],{"class":104,"line":105},[102,118303,109148],{"class":112},[102,118305,118306],{"class":278}," ch6_cartpole.py\n",[14,118308,118309],{},"运行：",[93,118311,118313],{"className":31686,"code":118312,"language":31688,"meta":98,"style":98},"python ch6_cartpole.py\n",[83,118314,118315],{"__ignoreMap":98},[102,118316,118317,118319],{"class":104,"line":105},[102,118318,38245],{"class":112},[102,118320,118306],{"class":278},[48,118322,109437],{"id":109437},[14,118324,118325],{},"构造观测：",[93,118327,118329],{"className":38243,"code":118328,"language":38245,"meta":98,"style":98},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[83,118330,118331,118339],{"__ignoreMap":98},[102,118332,118333,118335,118337],{"class":104,"line":105},[102,118334,39812],{"class":108},[102,118336,117859],{"class":112},[102,118338,117862],{"class":119},[102,118340,118341,118343],{"class":104,"line":116},[102,118342,863],{"class":108},[102,118344,117869],{"class":119},[14,118346,118347,118350,118351,118353,118354,118356],{},[83,118348,118349],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[83,118352,111895],{}," 2 维，",[83,118355,112225],{}," 2 维，所以 obs 是 4 维。",[14,118358,118359],{},"设置初始角度：",[93,118361,118363],{"className":38243,"code":118362,"language":38245,"meta":98,"style":98},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[83,118364,118365,118377],{"__ignoreMap":98},[102,118366,118367,118369,118371,118373,118375],{"class":104,"line":105},[102,118368,112564],{"class":119},[102,118370,7039],{"class":187},[102,118372,13252],{"class":119},[102,118374,260],{"class":108},[102,118376,118005],{"class":187},[102,118378,118379],{"class":104,"line":116},[102,118380,112408],{"class":119},[14,118382,118383],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,118385,118386],{},"简单反馈控制：",[93,118388,118390],{"className":38243,"code":118389,"language":38245,"meta":98,"style":98},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[83,118391,118392,118412],{"__ignoreMap":98},[102,118393,118394,118396,118398,118400,118402,118404,118406,118408,118410],{"class":104,"line":105},[102,118395,115307],{"class":119},[102,118397,260],{"class":108},[102,118399,118092],{"class":187},[102,118401,5159],{"class":108},[102,118403,117685],{"class":119},[102,118405,1702],{"class":108},[102,118407,69732],{"class":187},[102,118409,5159],{"class":108},[102,118411,118105],{"class":119},[102,118413,118414,118416,118418,118420,118422,118424,118426,118428],{"class":104,"line":116},[102,118415,115307],{"class":119},[102,118417,260],{"class":108},[102,118419,115312],{"class":119},[102,118421,2833],{"class":108},[102,118423,110268],{"class":187},[102,118425,2571],{"class":119},[102,118427,110268],{"class":187},[102,118429,390],{"class":119},[14,118431,118432],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,118434,118435],{},"限制动作：",[93,118437,118439],{"className":38243,"code":118438,"language":38245,"meta":98,"style":98},"np.clip(action, -1.0, 1.0)\n",[83,118440,118441],{"__ignoreMap":98},[102,118442,118443,118446,118448,118450,118452,118454],{"class":104,"line":105},[102,118444,118445],{"class":119},"np.clip(action, ",[102,118447,2833],{"class":108},[102,118449,110268],{"class":187},[102,118451,2571],{"class":119},[102,118453,110268],{"class":187},[102,118455,390],{"class":119},[14,118457,118458,118459,118462],{},"因为 XML 里 ",[83,118460,118461],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[48,118464,109573],{"id":109573},[93,118466,118467],{"className":38243,"code":118328,"language":38245,"meta":98,"style":98},[83,118468,118469,118477],{"__ignoreMap":98},[102,118470,118471,118473,118475],{"class":104,"line":105},[102,118472,39812],{"class":108},[102,118474,117859],{"class":112},[102,118476,117862],{"class":119},[102,118478,118479,118481],{"class":104,"line":116},[102,118480,863],{"class":108},[102,118482,117869],{"class":119},[14,118484,118485,118486,118489,118490,118493,118494,118497],{},"这段定义了一个函数，用来获取当前观测。",[83,118487,118488],{},"data.qpos.copy()"," 是位置数组副本，",[83,118491,118492],{},"data.qvel.copy()"," 是速度数组副本。",[83,118495,118496],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,118499,118500],{},"在本章模型里：",[93,118502,118505],{"className":118503,"code":118504,"language":6778,"meta":98},[6776],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[83,118506,118504],{"__ignoreMap":98},[14,118508,118509],{},"所以返回的 obs 是：",[93,118511,118514],{"className":118512,"code":118513,"language":6778,"meta":98},[6776],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[83,118515,118513],{"__ignoreMap":98},[93,118517,118519],{"className":38243,"code":118518,"language":38245,"meta":98,"style":98},"def compute_reward(obs: np.ndarray) -> float:\n",[83,118520,118521],{"__ignoreMap":98},[102,118522,118523,118525,118527,118529,118531],{"class":104,"line":105},[102,118524,39812],{"class":108},[102,118526,117884],{"class":112},[102,118528,117887],{"class":119},[102,118530,9086],{"class":187},[102,118532,12552],{"class":119},[14,118534,118535,118536,118539],{},"这行定义奖励函数。输入是观测 ",[83,118537,118538],{},"obs","，输出是一个浮点数奖励。",[93,118541,118543],{"className":38243,"code":118542,"language":38245,"meta":98,"style":98},"cart_x = obs[0]\npole_angle = obs[1]\n",[83,118544,118545,118558],{"__ignoreMap":98},[102,118546,118547,118550,118552,118554,118556],{"class":104,"line":105},[102,118548,118549],{"class":119},"cart_x ",[102,118551,260],{"class":108},[102,118553,117901],{"class":119},[102,118555,8423],{"class":187},[102,118557,41111],{"class":119},[102,118559,118560,118563,118565,118567,118569],{"class":104,"line":116},[102,118561,118562],{"class":119},"pole_angle ",[102,118564,260],{"class":108},[102,118566,117901],{"class":119},[102,118568,7039],{"class":187},[102,118570,41111],{"class":119},[14,118572,118573,118574,118577,118578,118581],{},"数组索引从 0 开始。",[83,118575,118576],{},"obs[0]"," 是第一个元素，也就是小车位置。",[83,118579,118580],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[93,118583,118584],{"className":38243,"code":117653,"language":38245,"meta":98,"style":98},[83,118585,118586],{"__ignoreMap":98},[102,118587,118588,118590,118592,118594,118596,118598,118600,118602,118604,118606,118608,118610,118612,118614],{"class":104,"line":105},[102,118589,2607],{"class":108},[102,118591,117662],{"class":187},[102,118593,380],{"class":119},[102,118595,110268],{"class":187},[102,118597,60136],{"class":108},[102,118599,117671],{"class":187},[102,118601,5159],{"class":108},[102,118603,117676],{"class":119},[102,118605,191],{"class":108},[102,118607,117676],{"class":119},[102,118609,2833],{"class":108},[102,118611,117685],{"class":119},[102,118613,191],{"class":108},[102,118615,117690],{"class":119},[14,118617,118618,118619,118622,118623,118626],{},"这行计算奖励。",[83,118620,118621],{},"cart_x * cart_x"," 是小车位置的平方，",[83,118624,118625],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[93,118628,118630],{"className":38243,"code":118629,"language":38245,"meta":98,"style":98},"data.qpos[1] = 0.1\n",[83,118631,118632],{"__ignoreMap":98},[102,118633,118634,118636,118638,118640,118642],{"class":104,"line":105},[102,118635,112564],{"class":119},[102,118637,7039],{"class":187},[102,118639,13252],{"class":119},[102,118641,260],{"class":108},[102,118643,118005],{"class":187},[14,118645,118646,118647,118649,118650,118652],{},"手动设置杆子的初始角度。因为 ",[83,118648,113321],{}," 是小车位置，",[83,118651,113324],{}," 是杆子角度，所以这里改的是杆子。",[93,118654,118655],{"className":38243,"code":112408,"language":38245,"meta":98,"style":98},[83,118656,118657],{"__ignoreMap":98},[102,118658,118659],{"class":104,"line":105},[102,118660,112408],{"class":119},[14,118662,113367,118663,118665],{},[83,118664,111895],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[93,118667,118669],{"className":38243,"code":118668,"language":38245,"meta":98,"style":98},"total_reward = 0.0\n",[83,118670,118671],{"__ignoreMap":98},[102,118672,118673,118676,118678],{"class":104,"line":105},[102,118674,118675],{"class":119},"total_reward ",[102,118677,260],{"class":108},[102,118679,112626],{"class":187},[14,118681,118682],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[93,118684,118686],{"className":38243,"code":118685,"language":38245,"meta":98,"style":98},"for step in range(1000):\n",[83,118687,118688],{"__ignoreMap":98},[102,118689,118690,118692,118694,118696,118698,118700,118702],{"class":104,"line":105},[102,118691,11841],{"class":108},[102,118693,39481],{"class":119},[102,118695,33908],{"class":108},[102,118697,40308],{"class":187},[102,118699,380],{"class":119},[102,118701,15205],{"class":187},[102,118703,38651],{"class":119},[14,118705,118706,118707,118709],{},"循环 1000 步。",[83,118708,114999],{}," 是当前步数，从 0 到 999。",[93,118711,118713],{"className":38243,"code":118712,"language":38245,"meta":98,"style":98},"obs = get_observation(data)\n",[83,118714,118715],{"__ignoreMap":98},[102,118716,118717,118720,118722],{"class":104,"line":105},[102,118718,118719],{"class":119},"obs ",[102,118721,260],{"class":108},[102,118723,118052],{"class":119},[14,118725,118726,118727,36250],{},"读取当前状态，保存到 ",[83,118728,118538],{},[93,118730,118732],{"className":38243,"code":118731,"language":38245,"meta":98,"style":98},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[83,118733,118734,118746],{"__ignoreMap":98},[102,118735,118736,118738,118740,118742,118744],{"class":104,"line":105},[102,118737,118562],{"class":119},[102,118739,260],{"class":108},[102,118741,117901],{"class":119},[102,118743,7039],{"class":187},[102,118745,41111],{"class":119},[102,118747,118748,118751,118753,118755,118757],{"class":104,"line":116},[102,118749,118750],{"class":119},"pole_angular_velocity ",[102,118752,260],{"class":108},[102,118754,117901],{"class":119},[102,118756,7049],{"class":187},[102,118758,41111],{"class":119},[14,118760,118761,118762,118765,118766,36250],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[83,118763,118764],{},"obs[3]","？因为 obs 的顺序是 ",[83,118767,118768],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[93,118770,118772],{"className":38243,"code":118771,"language":38245,"meta":98,"style":98},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[83,118773,118774],{"__ignoreMap":98},[102,118775,118776,118778,118780,118782,118784,118786,118788,118790,118792],{"class":104,"line":105},[102,118777,115307],{"class":119},[102,118779,260],{"class":108},[102,118781,118092],{"class":187},[102,118783,5159],{"class":108},[102,118785,117685],{"class":119},[102,118787,1702],{"class":108},[102,118789,69732],{"class":187},[102,118791,5159],{"class":108},[102,118793,118105],{"class":119},[14,118795,118796,118797,108883,118799,118801],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[83,118798,113125],{},[83,118800,43194],{}," 是人为设置的系数，不是固定公式。",[93,118803,118805],{"className":38243,"code":118804,"language":38245,"meta":98,"style":98},"action = np.clip(action, -1.0, 1.0)\n",[83,118806,118807],{"__ignoreMap":98},[102,118808,118809,118811,118813,118815,118817,118819,118821,118823],{"class":104,"line":105},[102,118810,115307],{"class":119},[102,118812,260],{"class":108},[102,118814,115312],{"class":119},[102,118816,2833],{"class":108},[102,118818,110268],{"class":187},[102,118820,2571],{"class":119},[102,118822,110268],{"class":187},[102,118824,390],{"class":119},[14,118826,118827],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[93,118829,118830],{"className":38243,"code":117638,"language":38245,"meta":98,"style":98},[83,118831,118832],{"__ignoreMap":98},[102,118833,118834,118836,118838,118840,118842],{"class":104,"line":105},[102,118835,113736],{"class":119},[102,118837,8423],{"class":187},[102,118839,13252],{"class":119},[102,118841,260],{"class":108},[102,118843,115335],{"class":119},[14,118845,118846],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[93,118848,118849],{"className":38243,"code":112370,"language":38245,"meta":98,"style":98},[83,118850,118851],{"__ignoreMap":98},[102,118852,118853],{"class":104,"line":105},[102,118854,112370],{"class":119},[14,118856,118857,118858,118860],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[83,118859,113991],{}," 计算小车和杆子的下一刻状态。",[93,118862,118864],{"className":38243,"code":118863,"language":38245,"meta":98,"style":98},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[83,118865,118866,118875],{"__ignoreMap":98},[102,118867,118868,118871,118873],{"class":104,"line":105},[102,118869,118870],{"class":119},"reward ",[102,118872,260],{"class":108},[102,118874,118157],{"class":119},[102,118876,118877,118879,118881],{"class":104,"line":116},[102,118878,118675],{"class":119},[102,118880,18244],{"class":108},[102,118882,118167],{"class":119},[14,118884,118885,118886,118888,118889,118892,118893,36250],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[83,118887,18244],{}," 是简写，",[83,118890,118891],{},"total_reward += reward"," 等价于 ",[83,118894,118895],{},"total_reward = total_reward + reward",[93,118897,118899],{"className":38243,"code":118898,"language":38245,"meta":98,"style":98},"if step % 100 == 0:\n",[83,118900,118901],{"__ignoreMap":98},[102,118902,118903,118905,118907,118909,118911,118913,118915],{"class":104,"line":105},[102,118904,10407],{"class":108},[102,118906,39481],{"class":119},[102,118908,9363],{"class":108},[102,118910,14552],{"class":187},[102,118912,109424],{"class":108},[102,118914,866],{"class":187},[102,118916,12552],{"class":119},[14,118918,118919,118921,118922,118925],{},[83,118920,9363],{}," 是取余数。",[83,118923,118924],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[93,118927,118929],{"className":38243,"code":118928,"language":38245,"meta":98,"style":98},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[83,118930,118931],{"__ignoreMap":98},[102,118932,118933,118935,118937,118939,118941,118943,118945,118947,118949,118951,118953,118955,118957,118959,118961,118963],{"class":104,"line":105},[102,118934,38280],{"class":187},[102,118936,380],{"class":119},[102,118938,118196],{"class":278},[102,118940,118199],{"class":119},[102,118942,118202],{"class":278},[102,118944,118205],{"class":119},[102,118946,7049],{"class":187},[102,118948,118210],{"class":119},[102,118950,118213],{"class":278},[102,118952,2571],{"class":119},[102,118954,39883],{"class":187},[102,118956,380],{"class":119},[102,118958,9086],{"class":187},[102,118960,118224],{"class":119},[102,118962,7049],{"class":187},[102,118964,38362],{"class":119},[14,118966,118967,118968,118971,118972,118975],{},"打印当前步数、观测和动作。",[83,118969,118970],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[83,118973,118974],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[43,118977,110181],{"id":110180},[14,118979,118980],{},"观测向量:",[93,118982,118985],{"className":118983,"code":118984,"language":6778,"meta":98},[6776],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[83,118986,118984],{"__ignoreMap":98},[14,118988,118989],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,118991,118992],{},"每隔 100 步会打印一次：",[93,118994,118997],{"className":118995,"code":118996,"language":6778,"meta":98},[6776],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[83,118998,118996],{"__ignoreMap":98},[14,119000,119001],{},"重点观察：",[87,119003,119004,119010,119015],{},[62,119005,119006,119009],{},[83,119007,119008],{},"pole_angle"," 是否越来越大。",[62,119011,119012,119014],{},[83,119013,117591],{}," 是否跑得太远。",[62,119016,119017,119018,90404,119020,36250],{},"action 是否经常被 clip 到 ",[83,119019,111780],{},[83,119021,7039],{},[14,119023,119024],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[43,119026,110213],{"id":110212},[87,119028,119029,119035,119038,119044,119054,119060,119063],{},[62,119030,119031,119032,36250],{},"把初始角度改为 ",[83,119033,119034],{},"data.qpos[1] = 0.3",[62,119036,119037],{},"重新运行，观察控制是否变差。",[62,119039,119040,119041,119043],{},"把 actuator ",[83,119042,114932],{}," 改小。",[62,119045,119046,119047,119050,119051,36250],{},"打印 ",[83,119048,119049],{},"model.nq, model.nv, model.nu","，应为 ",[83,119052,119053],{},"2 2 1",[62,119055,119056,119057,119059],{},"把 reward 里的 ",[83,119058,118625],{}," 系数改大，观察总奖励变化。",[62,119061,119062],{},"把控制器改成反号，观察杆子是否更容易倒。",[62,119064,119065],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[43,119067,110318],{"id":110317},[48,119069,119070],{"id":119070},"杆子方向和预期不一致",[14,119072,110261,119073,119075,119076,119078],{},[83,119074,114104],{}," 和 capsule 的 ",[83,119077,111041],{},"，必要时用 viewer 可视化确认。",[48,119080,119081],{"id":119081},"控制器越控越倒",[14,119083,119084],{},"说明反馈符号可能反了，尝试:",[93,119086,119088],{"className":38243,"code":119087,"language":38245,"meta":98,"style":98},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[83,119089,119090],{"__ignoreMap":98},[102,119091,119092,119094,119096,119098,119100,119102,119104,119106,119108,119110],{"class":104,"line":105},[102,119093,115307],{"class":119},[102,119095,260],{"class":108},[102,119097,60136],{"class":108},[102,119099,113125],{"class":187},[102,119101,5159],{"class":108},[102,119103,117685],{"class":119},[102,119105,2833],{"class":108},[102,119107,69732],{"class":187},[102,119109,5159],{"class":108},[102,119111,118105],{"class":119},[48,119113,119114],{"id":119114},"小车飞走",[14,119116,119117,119118,119120,119121,119124],{},"降低 ",[83,119119,114932],{}," 或缩小 ",[83,119122,119123],{},"action"," 的 clip 范围。",[48,119126,119128,119130],{"id":119127},"obs3-为什么是杆子角速度",[83,119129,118764],{}," 为什么是杆子角速度",[14,119132,119133],{},"因为这个模型里：",[93,119135,119138],{"className":119136,"code":119137,"language":6778,"meta":98},[6776],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[83,119139,119137],{"__ignoreMap":98},[14,119141,117612],{},[93,119143,119146],{"className":119144,"code":119145,"language":6778,"meta":98},[6776],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[83,119147,119145],{"__ignoreMap":98},[48,119149,119151],{"id":119150},"reward-变成负数是否错误","reward 变成负数是否错误",[14,119153,119154],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[43,119156,110472],{"id":110471},[14,119158,119159],{},"一个控制任务通常包含：",[87,119161,119162,119165,119173,119178,119181],{},[62,119163,119164],{},"模型：Cartpole 的 body、joint、actuator。",[62,119166,119167,119168,9250,119170,119172],{},"观测：从 ",[83,119169,111895],{},[83,119171,112225],{}," 里取状态。",[62,119174,119175,119176,36250],{},"动作：写入 ",[83,119177,108941],{},[62,119179,119180],{},"奖励：根据任务目标打分。",[62,119182,119183],{},"循环：obs -> action -> step -> reward。",[14,119185,119186],{},"这就是后面 Gymnasium 环境的基本骨架。",[8955,119188,112151],{},{"title":98,"searchDepth":116,"depth":116,"links":119190},[119191,119192,119193,119198,119202,119203,119204,119212],{"id":108511,"depth":116,"text":108512},{"id":108634,"depth":116,"text":108635},{"id":108909,"depth":116,"text":108910,"children":119194},[119195,119196,119197],{"id":117565,"depth":123,"text":117566},{"id":117630,"depth":123,"text":117631},{"id":117646,"depth":123,"text":117647},{"id":109117,"depth":116,"text":109118,"children":119199},[119200,119201],{"id":109437,"depth":123,"text":109437},{"id":109573,"depth":123,"text":109573},{"id":110180,"depth":116,"text":110181},{"id":110212,"depth":116,"text":110213},{"id":110317,"depth":116,"text":110318,"children":119205},[119206,119207,119208,119209,119211],{"id":119070,"depth":123,"text":119070},{"id":119081,"depth":123,"text":119081},{"id":119114,"depth":123,"text":119114},{"id":119127,"depth":123,"text":119210},"obs[3] 为什么是杆子角速度",{"id":119150,"depth":123,"text":119151},{"id":110471,"depth":116,"text":110472},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":117301,"description":98},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":119219,"title":119220,"body":119221,"description":98,"extension":8978,"meta":121235,"navigation":651,"path":121236,"seo":121237,"stem":121238,"__hash__":121239},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":119222,"toc":121211},[119223,119226,119228,119231,119233,119250,119253,119256,119262,119265,119267,119269,119293,119295,119309,119311,119352,119354,119372,119374,119377,119383,119386,119414,119418,119424,119449,119452,119483,119490,119493,119496,119502,119505,119511,119514,119520,119524,119527,119552,119555,119557,120317,120319,120331,120333,120344,120346,120349,120366,120369,120371,120382,120385,120387,120433,120436,120449,120452,120534,120537,120539,120555,120565,120578,120581,120620,120630,120641,120651,120664,120667,120696,120699,120709,120712,120718,120735,120746,120748,120754,120771,120782,120803,120806,120818,120821,120842,120845,120853,120861,120878,120881,120950,120957,120965,120968,120981,120988,120990,120993,120999,121002,121005,121011,121017,121019,121059,121061,121067,121076,121079,121081,121101,121104,121107,121113,121117,121119,121146,121149,121152,121179,121185,121188,121191,121193,121196,121199,121205,121208],[10,119224,119220],{"id":119225},"_7控制任务reacher-机械臂到达目标",[43,119227,108512],{"id":108511},[14,119229,119230],{},"本章搭建一个二维两关节 reacher 任务。",[14,119232,112196],{},[87,119234,119235,119238,119241,119244,119247],{},[62,119236,119237],{},"两个 hinge joint",[62,119239,119240],{},"两个 motor actuator",[62,119242,119243],{},"site 作为末端点和目标点",[62,119245,119246],{},"根据末端和目标距离设计 reward",[62,119248,119249],{},"构造机械臂任务的基本形式",[14,119251,119252],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,119254,119255],{},"Reacher 任务可以理解为：",[93,119257,119260],{"className":119258,"code":119259,"language":6778,"meta":98},[6776],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[83,119261,119259],{"__ignoreMap":98},[14,119263,119264],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[43,119266,108635],{"id":108634},[14,119268,108638],{},[93,119270,119271],{"className":31686,"code":112253,"language":31688,"meta":98,"style":98},[83,119272,119273],{"__ignoreMap":98},[102,119274,119275,119277,119279,119281,119283,119285,119287,119289,119291],{"class":104,"line":105},[102,119276,32441],{"class":112},[102,119278,34180],{"class":278},[102,119280,31698],{"class":278},[102,119282,34265],{"class":187},[102,119284,112268],{"class":278},[102,119286,108663],{"class":278},[102,119288,110366],{"class":278},[102,119290,108679],{"class":278},[102,119292,112277],{"class":278},[14,119294,110684],{},[93,119296,119297],{"className":31686,"code":108784,"language":31688,"meta":98,"style":98},[83,119298,119299],{"__ignoreMap":98},[102,119300,119301,119303,119305,119307],{"class":104,"line":105},[102,119302,31695],{"class":112},[102,119304,31698],{"class":278},[102,119306,108795],{"class":278},[102,119308,108798],{"class":278},[14,119310,110701],{},[93,119312,119314],{"className":31686,"code":119313,"language":31688,"meta":98,"style":98},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[83,119315,119316,119333,119342],{"__ignoreMap":98},[102,119317,119318,119320,119322,119324,119327,119329,119331],{"class":104,"line":105},[102,119319,38195],{"class":112},[102,119321,37041],{"class":278},[102,119323,32980],{"class":187},[102,119325,119326],{"class":278}," mujoco-reacher",[102,119328,108840],{"class":278},[102,119330,108843],{"class":187},[102,119332,108846],{"class":187},[102,119334,119335,119337,119339],{"class":104,"line":116},[102,119336,38195],{"class":112},[102,119338,108853],{"class":278},[102,119340,119341],{"class":278}," mujoco-reacher\n",[102,119343,119344,119346,119348,119350],{"class":104,"line":123},[102,119345,31695],{"class":112},[102,119347,31698],{"class":278},[102,119349,108795],{"class":278},[102,119351,108798],{"class":278},[14,119353,108869],{},[87,119355,119356,119359,119362],{},[62,119357,119358],{},"本章使用低维状态，不使用图像输入。",[62,119360,119361],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[62,119363,119364,119365,9250,119367,9250,119369,119371],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[83,119366,111895],{},[83,119368,112225],{},[83,119370,111545],{}," 的方法一致。",[43,119373,108910],{"id":108909},[14,119375,119376],{},"Reacher 任务核心:",[93,119378,119381],{"className":119379,"code":119380,"language":6778,"meta":98},[6776],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[83,119382,119380],{"__ignoreMap":98},[14,119384,119385],{},"读取 site 世界坐标:",[93,119387,119389],{"className":38243,"code":119388,"language":38245,"meta":98,"style":98},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[83,119390,119391,119404],{"__ignoreMap":98},[102,119392,119393,119395,119397,119399,119402],{"class":104,"line":105},[102,119394,111499],{"class":119},[102,119396,260],{"class":108},[102,119398,111270],{"class":119},[102,119400,119401],{"class":278},"\"tip\"",[102,119403,390],{"class":119},[102,119405,119406,119409,119411],{"class":104,"line":116},[102,119407,119408],{"class":119},"tip_pos ",[102,119410,260],{"class":108},[102,119412,119413],{"class":119}," data.site_xpos[site_id]\n",[48,119415,119417],{"id":119416},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,119419,119420,119421,119423],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[83,119422,111895],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[93,119425,119427],{"className":38243,"code":119426,"language":38245,"meta":98,"style":98},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[83,119428,119429,119439],{"__ignoreMap":98},[102,119430,119431,119434,119436],{"class":104,"line":105},[102,119432,119433],{"class":119},"tip ",[102,119435,260],{"class":108},[102,119437,119438],{"class":119}," data.site_xpos[tip_site_id]\n",[102,119440,119441,119444,119446],{"class":104,"line":116},[102,119442,119443],{"class":119},"target ",[102,119445,260],{"class":108},[102,119447,119448],{"class":119}," data.site_xpos[target_site_id]\n",[14,119450,119451],{},"这样 reward 就很容易写：",[93,119453,119455],{"className":38243,"code":119454,"language":38245,"meta":98,"style":98},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[83,119456,119457,119472],{"__ignoreMap":98},[102,119458,119459,119462,119464,119467,119469],{"class":104,"line":105},[102,119460,119461],{"class":119},"dist ",[102,119463,260],{"class":108},[102,119465,119466],{"class":119}," np.linalg.norm(tip ",[102,119468,2833],{"class":108},[102,119470,119471],{"class":119}," target)\n",[102,119473,119474,119476,119478,119480],{"class":104,"line":116},[102,119475,118870],{"class":119},[102,119477,260],{"class":108},[102,119479,60136],{"class":108},[102,119481,119482],{"class":119},"dist\n",[14,119484,119485,119486,119489],{},"距离越小，",[83,119487,119488],{},"-dist"," 越接近 0，奖励越高。",[48,119491,119492],{"id":119492},"两关节机械臂的状态",[14,119494,119495],{},"这个模型有两个 hinge joint：",[93,119497,119500],{"className":119498,"code":119499,"language":6778,"meta":98},[6776],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[83,119501,119499],{"__ignoreMap":98},[14,119503,119504],{},"再加上末端和目标位置：",[93,119506,119509],{"className":119507,"code":119508,"language":6778,"meta":98},[6776],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[83,119510,119508],{"__ignoreMap":98},[14,119512,119513],{},"总维度：",[93,119515,119518],{"className":119516,"code":119517,"language":6778,"meta":98},[6776],"2 + 2 + 3 + 3 = 10\n",[83,119519,119517],{"__ignoreMap":98},[48,119521,119523],{"id":119522},"为什么-gravity-是-0","为什么 gravity 是 0",[14,119525,119526],{},"本章把重力设为：",[93,119528,119530],{"className":60932,"code":119529,"language":60934,"meta":98,"style":98},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[83,119531,119532],{"__ignoreMap":98},[102,119533,119534,119536,119538,119540,119542,119544,119546,119548,119550],{"class":104,"line":105},[102,119535,1208],{"class":119},[102,119537,77031],{"class":59165},[102,119539,109059],{"class":112},[102,119541,260],{"class":119},[102,119543,109064],{"class":278},[102,119545,109067],{"class":112},[102,119547,260],{"class":119},[102,119549,111636],{"class":278},[102,119551,109009],{"class":119},[14,119553,119554],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[43,119556,109118],{"id":109117},[93,119558,119560],{"className":38243,"code":119559,"language":38245,"meta":98,"style":98},"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",[83,119561,119562,119568,119578,119582,119586,119594,119599,119604,119608,119612,119617,119622,119626,119631,119636,119641,119645,119650,119655,119660,119665,119669,119673,119677,119681,119685,119690,119695,119699,119703,119707,119711,119715,119730,119739,119751,119774,119781,119785,119789,119799,119813,119827,119834,119838,119842,119856,119868,119880,119893,119908,119925,119929,119933,119945,119957,119965,119973,119977,119993,119998,120011,120024,120039,120043,120078,120110,120114,120118,120127,120131,120147,120157,120168,120184,120200,120216,120232,120236,120254,120274,120293,120297,120301,120313],{"__ignoreMap":98},[102,119563,119564,119566],{"class":104,"line":105},[102,119565,38257],{"class":108},[102,119567,109166],{"class":119},[102,119569,119570,119572,119574,119576],{"class":104,"line":116},[102,119571,38257],{"class":108},[102,119573,39245],{"class":119},[102,119575,39248],{"class":108},[102,119577,39251],{"class":119},[102,119579,119580],{"class":104,"line":123},[102,119581,652],{"emptyLinePlaceholder":651},[102,119583,119584],{"class":104,"line":130},[102,119585,652],{"emptyLinePlaceholder":651},[102,119587,119588,119590,119592],{"class":104,"line":136},[102,119589,109179],{"class":187},[102,119591,22296],{"class":108},[102,119593,109184],{"class":278},[102,119595,119596],{"class":104,"line":142},[102,119597,119598],{"class":278},"\u003Cmujoco model=\"two_link_reacher\">\n",[102,119600,119601],{"class":104,"line":148},[102,119602,119603],{"class":278},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[102,119605,119606],{"class":104,"line":157},[102,119607,652],{"emptyLinePlaceholder":651},[102,119609,119610],{"class":104,"line":163},[102,119611,109203],{"class":278},[102,119613,119614],{"class":104,"line":175},[102,119615,119616],{"class":278},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[102,119618,119619],{"class":104,"line":181},[102,119620,119621],{"class":278},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[102,119623,119624],{"class":104,"line":202},[102,119625,652],{"emptyLinePlaceholder":651},[102,119627,119628],{"class":104,"line":208},[102,119629,119630],{"class":278},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[102,119632,119633],{"class":104,"line":214},[102,119634,119635],{"class":278},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[102,119637,119638],{"class":104,"line":225},[102,119639,119640],{"class":278},"      \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",[102,119642,119643],{"class":104,"line":230},[102,119644,652],{"emptyLinePlaceholder":651},[102,119646,119647],{"class":104,"line":236},[102,119648,119649],{"class":278},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[102,119651,119652],{"class":104,"line":242},[102,119653,119654],{"class":278},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[102,119656,119657],{"class":104,"line":248},[102,119658,119659],{"class":278},"        \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",[102,119661,119662],{"class":104,"line":254},[102,119663,119664],{"class":278},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[102,119666,119667],{"class":104,"line":269},[102,119668,114303],{"class":278},[102,119670,119671],{"class":104,"line":298},[102,119672,109232],{"class":278},[102,119674,119675],{"class":104,"line":502},[102,119676,109237],{"class":278},[102,119678,119679],{"class":104,"line":507},[102,119680,652],{"emptyLinePlaceholder":651},[102,119682,119683],{"class":104,"line":512},[102,119684,114320],{"class":278},[102,119686,119687],{"class":104,"line":521},[102,119688,119689],{"class":278},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[102,119691,119692],{"class":104,"line":526},[102,119693,119694],{"class":278},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[102,119696,119697],{"class":104,"line":532},[102,119698,114330],{"class":278},[102,119700,119701],{"class":104,"line":538},[102,119702,109242],{"class":278},[102,119704,119705],{"class":104,"line":555},[102,119706,103563],{"class":278},[102,119708,119709],{"class":104,"line":570},[102,119710,652],{"emptyLinePlaceholder":651},[102,119712,119713],{"class":104,"line":581},[102,119714,652],{"emptyLinePlaceholder":651},[102,119716,119717,119719,119722,119725,119727],{"class":104,"line":819},[102,119718,39812],{"class":108},[102,119720,119721],{"class":112}," site_position",[102,119723,119724],{"class":119},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[102,119726,10185],{"class":187},[102,119728,119729],{"class":119},") -> np.ndarray:\n",[102,119731,119732,119734,119736],{"class":104,"line":828},[102,119733,111265],{"class":119},[102,119735,260],{"class":108},[102,119737,119738],{"class":119}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[102,119740,119741,119743,119745,119747,119749],{"class":104,"line":837},[102,119742,2343],{"class":108},[102,119744,111314],{"class":119},[102,119746,1208],{"class":108},[102,119748,866],{"class":187},[102,119750,12552],{"class":119},[102,119752,119753,119755,119757,119759,119761,119764,119766,119768,119770,119772],{"class":104,"line":842},[102,119754,111297],{"class":108},[102,119756,111300],{"class":187},[102,119758,380],{"class":119},[102,119760,9097],{"class":108},[102,119762,119763],{"class":278},"\"site not found: ",[102,119765,9918],{"class":187},[102,119767,87675],{"class":119},[102,119769,9967],{"class":187},[102,119771,9288],{"class":278},[102,119773,390],{"class":119},[102,119775,119776,119778],{"class":104,"line":855},[102,119777,863],{"class":108},[102,119779,119780],{"class":119}," data.site_xpos[site_id].copy()\n",[102,119782,119783],{"class":104,"line":860},[102,119784,652],{"emptyLinePlaceholder":651},[102,119786,119787],{"class":104,"line":871},[102,119788,652],{"emptyLinePlaceholder":651},[102,119790,119791,119793,119796],{"class":104,"line":1359},[102,119792,39812],{"class":108},[102,119794,119795],{"class":112}," get_obs",[102,119797,119798],{"class":119},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[102,119800,119801,119804,119806,119809,119811],{"class":104,"line":1368},[102,119802,119803],{"class":119},"    tip ",[102,119805,260],{"class":108},[102,119807,119808],{"class":119}," site_position(model, data, ",[102,119810,119401],{"class":278},[102,119812,390],{"class":119},[102,119814,119815,119818,119820,119822,119825],{"class":104,"line":1373},[102,119816,119817],{"class":119},"    target ",[102,119819,260],{"class":108},[102,119821,119808],{"class":119},[102,119823,119824],{"class":278},"\"target\"",[102,119826,390],{"class":119},[102,119828,119829,119831],{"class":104,"line":1378},[102,119830,863],{"class":108},[102,119832,119833],{"class":119}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[102,119835,119836],{"class":104,"line":1384},[102,119837,652],{"emptyLinePlaceholder":651},[102,119839,119840],{"class":104,"line":1398},[102,119841,652],{"emptyLinePlaceholder":651},[102,119843,119844,119846,119849,119852,119854],{"class":104,"line":1424},[102,119845,39812],{"class":108},[102,119847,119848],{"class":112}," reward",[102,119850,119851],{"class":119},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[102,119853,9086],{"class":187},[102,119855,12552],{"class":119},[102,119857,119858,119860,119862,119864,119866],{"class":104,"line":1429},[102,119859,119803],{"class":119},[102,119861,260],{"class":108},[102,119863,119808],{"class":119},[102,119865,119401],{"class":278},[102,119867,390],{"class":119},[102,119869,119870,119872,119874,119876,119878],{"class":104,"line":1435},[102,119871,119817],{"class":119},[102,119873,260],{"class":108},[102,119875,119808],{"class":119},[102,119877,119824],{"class":278},[102,119879,390],{"class":119},[102,119881,119882,119885,119887,119889,119891],{"class":104,"line":1450},[102,119883,119884],{"class":119},"    dist ",[102,119886,260],{"class":108},[102,119888,119466],{"class":119},[102,119890,2833],{"class":108},[102,119892,119471],{"class":119},[102,119894,119895,119898,119900,119903,119905],{"class":104,"line":1473},[102,119896,119897],{"class":119},"    control_cost ",[102,119899,260],{"class":108},[102,119901,119902],{"class":187}," 0.01",[102,119904,5159],{"class":108},[102,119906,119907],{"class":119}," np.sum(np.square(data.ctrl))\n",[102,119909,119910,119912,119914,119916,119918,119920,119922],{"class":104,"line":1478},[102,119911,863],{"class":108},[102,119913,117662],{"class":187},[102,119915,380],{"class":119},[102,119917,2833],{"class":108},[102,119919,119461],{"class":119},[102,119921,2833],{"class":108},[102,119923,119924],{"class":119}," control_cost)\n",[102,119926,119927],{"class":104,"line":1484},[102,119928,652],{"emptyLinePlaceholder":651},[102,119930,119931],{"class":104,"line":1499},[102,119932,652],{"emptyLinePlaceholder":651},[102,119934,119935,119937,119939,119941,119943],{"class":104,"line":1508},[102,119936,39812],{"class":108},[102,119938,220],{"class":112},[102,119940,109263],{"class":119},[102,119942,103551],{"class":187},[102,119944,12552],{"class":119},[102,119946,119947,119949,119951,119953,119955],{"class":104,"line":1513},[102,119948,109272],{"class":119},[102,119950,260],{"class":108},[102,119952,109277],{"class":119},[102,119954,109179],{"class":187},[102,119956,390],{"class":119},[102,119958,119959,119961,119963],{"class":104,"line":1524},[102,119960,109286],{"class":119},[102,119962,260],{"class":108},[102,119964,109291],{"class":119},[102,119966,119967,119969,119971],{"class":104,"line":1529},[102,119968,118018],{"class":119},[102,119970,260],{"class":108},[102,119972,112626],{"class":187},[102,119974,119975],{"class":104,"line":1538},[102,119976,652],{"emptyLinePlaceholder":651},[102,119978,119979,119981,119983,119985,119987,119989,119991],{"class":104,"line":2089},[102,119980,12016],{"class":108},[102,119982,39481],{"class":119},[102,119984,33908],{"class":108},[102,119986,40308],{"class":187},[102,119988,380],{"class":119},[102,119990,72939],{"class":187},[102,119992,38651],{"class":119},[102,119994,119995],{"class":104,"line":2094},[102,119996,119997],{"class":119},"        mujoco.mj_forward(model, data)\n",[102,119999,120000,120003,120005,120007,120009],{"class":104,"line":2100},[102,120001,120002],{"class":119},"        tip ",[102,120004,260],{"class":108},[102,120006,119808],{"class":119},[102,120008,119401],{"class":278},[102,120010,390],{"class":119},[102,120012,120013,120016,120018,120020,120022],{"class":104,"line":2106},[102,120014,120015],{"class":119},"        target ",[102,120017,260],{"class":108},[102,120019,119808],{"class":119},[102,120021,119824],{"class":278},[102,120023,390],{"class":119},[102,120025,120026,120029,120031,120034,120036],{"class":104,"line":2120},[102,120027,120028],{"class":119},"        error ",[102,120030,260],{"class":108},[102,120032,120033],{"class":119}," target ",[102,120035,2833],{"class":108},[102,120037,120038],{"class":119}," tip\n",[102,120040,120041],{"class":104,"line":2128},[102,120042,652],{"emptyLinePlaceholder":651},[102,120044,120045,120047,120049,120051,120053,120056,120058,120060,120063,120065,120068,120070,120072,120074,120076],{"class":104,"line":2149},[102,120046,114482],{"class":119},[102,120048,8423],{"class":187},[102,120050,13252],{"class":119},[102,120052,260],{"class":108},[102,120054,120055],{"class":119}," np.clip(",[102,120057,113125],{"class":187},[102,120059,5159],{"class":108},[102,120061,120062],{"class":119}," error[",[102,120064,7044],{"class":187},[102,120066,120067],{"class":119},"], ",[102,120069,2833],{"class":108},[102,120071,110268],{"class":187},[102,120073,2571],{"class":119},[102,120075,110268],{"class":187},[102,120077,390],{"class":119},[102,120079,120080,120082,120084,120086,120088,120090,120092,120094,120096,120098,120100,120102,120104,120106,120108],{"class":104,"line":2161},[102,120081,114482],{"class":119},[102,120083,7039],{"class":187},[102,120085,13252],{"class":119},[102,120087,260],{"class":108},[102,120089,120055],{"class":119},[102,120091,113125],{"class":187},[102,120093,5159],{"class":108},[102,120095,120062],{"class":119},[102,120097,8423],{"class":187},[102,120099,120067],{"class":119},[102,120101,2833],{"class":108},[102,120103,110268],{"class":187},[102,120105,2571],{"class":119},[102,120107,110268],{"class":187},[102,120109,390],{"class":119},[102,120111,120112],{"class":104,"line":2167},[102,120113,652],{"emptyLinePlaceholder":651},[102,120115,120116],{"class":104,"line":2190},[102,120117,109381],{"class":119},[102,120119,120120,120122,120124],{"class":104,"line":2196},[102,120121,118162],{"class":119},[102,120123,18244],{"class":108},[102,120125,120126],{"class":119}," reward(model, data)\n",[102,120128,120129],{"class":104,"line":2219},[102,120130,652],{"emptyLinePlaceholder":651},[102,120132,120133,120135,120137,120139,120141,120143,120145],{"class":104,"line":2233},[102,120134,1202],{"class":108},[102,120136,39481],{"class":119},[102,120138,9363],{"class":108},[102,120140,14552],{"class":187},[102,120142,109424],{"class":108},[102,120144,866],{"class":187},[102,120146,12552],{"class":119},[102,120148,120149,120152,120154],{"class":104,"line":2253},[102,120150,120151],{"class":119},"            obs ",[102,120153,260],{"class":108},[102,120155,120156],{"class":119}," get_obs(model, data)\n",[102,120158,120159,120161,120163,120165],{"class":104,"line":2259},[102,120160,42515],{"class":187},[102,120162,380],{"class":119},[102,120164,118196],{"class":278},[102,120166,120167],{"class":119},", step)\n",[102,120169,120170,120172,120174,120177,120180,120182],{"class":104,"line":2270},[102,120171,42515],{"class":187},[102,120173,380],{"class":119},[102,120175,120176],{"class":278},"\"  tip:\"",[102,120178,120179],{"class":119},", np.round(tip, ",[102,120181,7049],{"class":187},[102,120183,38362],{"class":119},[102,120185,120186,120188,120190,120193,120196,120198],{"class":104,"line":2293},[102,120187,42515],{"class":187},[102,120189,380],{"class":119},[102,120191,120192],{"class":278},"\"  target:\"",[102,120194,120195],{"class":119},", np.round(target, ",[102,120197,7049],{"class":187},[102,120199,38362],{"class":119},[102,120201,120202,120204,120206,120209,120212,120214],{"class":104,"line":2315},[102,120203,42515],{"class":187},[102,120205,380],{"class":119},[102,120207,120208],{"class":278},"\"  ctrl:\"",[102,120210,120211],{"class":119},", np.round(data.ctrl.copy(), ",[102,120213,7049],{"class":187},[102,120215,38362],{"class":119},[102,120217,120218,120220,120222,120225,120228,120230],{"class":104,"line":2320},[102,120219,42515],{"class":187},[102,120221,380],{"class":119},[102,120223,120224],{"class":278},"\"  obs_dim:\"",[102,120226,120227],{"class":119},", obs.shape[",[102,120229,8423],{"class":187},[102,120231,13466],{"class":119},[102,120233,120234],{"class":104,"line":2326},[102,120235,652],{"emptyLinePlaceholder":651},[102,120237,120238,120240,120242,120244,120246,120248,120250,120252],{"class":104,"line":2340},[102,120239,39164],{"class":187},[102,120241,380],{"class":119},[102,120243,118241],{"class":278},[102,120245,2571],{"class":119},[102,120247,39883],{"class":187},[102,120249,118248],{"class":119},[102,120251,7049],{"class":187},[102,120253,38362],{"class":119},[102,120255,120256,120258,120260,120263,120266,120268,120270,120272],{"class":104,"line":2354},[102,120257,39164],{"class":187},[102,120259,380],{"class":119},[102,120261,120262],{"class":278},"\"final tip:\"",[102,120264,120265],{"class":119},", np.round(site_position(model, data, ",[102,120267,119401],{"class":278},[102,120269,118210],{"class":119},[102,120271,7049],{"class":187},[102,120273,38362],{"class":119},[102,120275,120276,120278,120280,120283,120285,120287,120289,120291],{"class":104,"line":2359},[102,120277,39164],{"class":187},[102,120279,380],{"class":119},[102,120281,120282],{"class":278},"\"target:\"",[102,120284,120265],{"class":119},[102,120286,119824],{"class":278},[102,120288,118210],{"class":119},[102,120290,7049],{"class":187},[102,120292,38362],{"class":119},[102,120294,120295],{"class":104,"line":2373},[102,120296,652],{"emptyLinePlaceholder":651},[102,120298,120299],{"class":104,"line":2378},[102,120300,652],{"emptyLinePlaceholder":651},[102,120302,120303,120305,120307,120309,120311],{"class":104,"line":2384},[102,120304,10407],{"class":108},[102,120306,39085],{"class":187},[102,120308,109424],{"class":108},[102,120310,109427],{"class":278},[102,120312,12552],{"class":119},[102,120314,120315],{"class":104,"line":2389},[102,120316,109434],{"class":119},[14,120318,111435],{},[93,120320,120322],{"className":31686,"code":120321,"language":31688,"meta":98,"style":98},"touch ch7_reacher.py\n",[83,120323,120324],{"__ignoreMap":98},[102,120325,120326,120328],{"class":104,"line":105},[102,120327,109148],{"class":112},[102,120329,120330],{"class":278}," ch7_reacher.py\n",[14,120332,118309],{},[93,120334,120336],{"className":31686,"code":120335,"language":31688,"meta":98,"style":98},"python ch7_reacher.py\n",[83,120337,120338],{"__ignoreMap":98},[102,120339,120340,120342],{"class":104,"line":105},[102,120341,38245],{"class":112},[102,120343,120330],{"class":278},[48,120345,109437],{"id":109437},[14,120347,120348],{},"读取 site 坐标：",[93,120350,120352],{"className":38243,"code":120351,"language":38245,"meta":98,"style":98},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[83,120353,120354],{"__ignoreMap":98},[102,120355,120356,120358,120360,120362,120364],{"class":104,"line":105},[102,120357,39812],{"class":108},[102,120359,119721],{"class":112},[102,120361,119724],{"class":119},[102,120363,10185],{"class":187},[102,120365,119729],{"class":119},[14,120367,120368],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,120370,118325],{},[93,120372,120374],{"className":38243,"code":120373,"language":38245,"meta":98,"style":98},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[83,120375,120376],{"__ignoreMap":98},[102,120377,120378,120380],{"class":104,"line":105},[102,120379,2607],{"class":108},[102,120381,119833],{"class":119},[14,120383,120384],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,120386,117650],{},[93,120388,120390],{"className":38243,"code":120389,"language":38245,"meta":98,"style":98},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[83,120391,120392,120404,120417],{"__ignoreMap":98},[102,120393,120394,120396,120398,120400,120402],{"class":104,"line":105},[102,120395,119461],{"class":119},[102,120397,260],{"class":108},[102,120399,119466],{"class":119},[102,120401,2833],{"class":108},[102,120403,119471],{"class":119},[102,120405,120406,120409,120411,120413,120415],{"class":104,"line":116},[102,120407,120408],{"class":119},"control_cost ",[102,120410,260],{"class":108},[102,120412,119902],{"class":187},[102,120414,5159],{"class":108},[102,120416,119907],{"class":119},[102,120418,120419,120421,120423,120425,120427,120429,120431],{"class":104,"line":123},[102,120420,2607],{"class":108},[102,120422,117662],{"class":187},[102,120424,380],{"class":119},[102,120426,2833],{"class":108},[102,120428,119461],{"class":119},[102,120430,2833],{"class":108},[102,120432,119924],{"class":119},[14,120434,120435],{},"奖励由两部分组成：",[87,120437,120438,120443],{},[62,120439,120440,120442],{},[83,120441,119488],{},"：末端离目标越远，奖励越低。",[62,120444,120445,120448],{},[83,120446,120447],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,120450,120451],{},"简单控制器：",[93,120453,120455],{"className":38243,"code":120454,"language":38245,"meta":98,"style":98},"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",[83,120456,120457,120470,120502],{"__ignoreMap":98},[102,120458,120459,120462,120464,120466,120468],{"class":104,"line":105},[102,120460,120461],{"class":119},"error ",[102,120463,260],{"class":108},[102,120465,120033],{"class":119},[102,120467,2833],{"class":108},[102,120469,120038],{"class":119},[102,120471,120472,120474,120476,120478,120480,120482,120484,120486,120488,120490,120492,120494,120496,120498,120500],{"class":104,"line":116},[102,120473,113736],{"class":119},[102,120475,8423],{"class":187},[102,120477,13252],{"class":119},[102,120479,260],{"class":108},[102,120481,120055],{"class":119},[102,120483,113125],{"class":187},[102,120485,5159],{"class":108},[102,120487,120062],{"class":119},[102,120489,7044],{"class":187},[102,120491,120067],{"class":119},[102,120493,2833],{"class":108},[102,120495,110268],{"class":187},[102,120497,2571],{"class":119},[102,120499,110268],{"class":187},[102,120501,390],{"class":119},[102,120503,120504,120506,120508,120510,120512,120514,120516,120518,120520,120522,120524,120526,120528,120530,120532],{"class":104,"line":123},[102,120505,113736],{"class":119},[102,120507,7039],{"class":187},[102,120509,13252],{"class":119},[102,120511,260],{"class":108},[102,120513,120055],{"class":119},[102,120515,113125],{"class":187},[102,120517,5159],{"class":108},[102,120519,120062],{"class":119},[102,120521,8423],{"class":187},[102,120523,120067],{"class":119},[102,120525,2833],{"class":108},[102,120527,110268],{"class":187},[102,120529,2571],{"class":119},[102,120531,110268],{"class":187},[102,120533,390],{"class":119},[14,120535,120536],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[48,120538,109573],{"id":109573},[93,120540,120541],{"className":38243,"code":120351,"language":38245,"meta":98,"style":98},[83,120542,120543],{"__ignoreMap":98},[102,120544,120545,120547,120549,120551,120553],{"class":104,"line":105},[102,120546,39812],{"class":108},[102,120548,119721],{"class":112},[102,120550,119724],{"class":119},[102,120552,10185],{"class":187},[102,120554,119729],{"class":119},[14,120556,120557,120558,120560,120561,90404,120563,36250],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[83,120559,87675],{}," 是 site 的名字，比如 ",[83,120562,119401],{},[83,120564,119824],{},[93,120566,120568],{"className":38243,"code":120567,"language":38245,"meta":98,"style":98},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[83,120569,120570],{"__ignoreMap":98},[102,120571,120572,120574,120576],{"class":104,"line":105},[102,120573,111499],{"class":119},[102,120575,260],{"class":108},[102,120577,119738],{"class":119},[14,120579,120580],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[93,120582,120584],{"className":38243,"code":120583,"language":38245,"meta":98,"style":98},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[83,120585,120586,120598],{"__ignoreMap":98},[102,120587,120588,120590,120592,120594,120596],{"class":104,"line":105},[102,120589,10407],{"class":108},[102,120591,111314],{"class":119},[102,120593,1208],{"class":108},[102,120595,866],{"class":187},[102,120597,12552],{"class":119},[102,120599,120600,120602,120604,120606,120608,120610,120612,120614,120616,120618],{"class":104,"line":116},[102,120601,111760],{"class":108},[102,120603,111300],{"class":187},[102,120605,380],{"class":119},[102,120607,9097],{"class":108},[102,120609,119763],{"class":278},[102,120611,9918],{"class":187},[102,120613,87675],{"class":119},[102,120615,9967],{"class":187},[102,120617,9288],{"class":278},[102,120619,390],{"class":119},[14,120621,120622,120623,120626,120627,120629],{},"如果 site 没找到，就主动报错。",[83,120624,120625],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[83,120628,87675],{}," 的值放进字符串里。",[93,120631,120633],{"className":38243,"code":120632,"language":38245,"meta":98,"style":98},"return data.site_xpos[site_id].copy()\n",[83,120634,120635],{"__ignoreMap":98},[102,120636,120637,120639],{"class":104,"line":105},[102,120638,2607],{"class":108},[102,120640,119780],{"class":119},[14,120642,120643,120644,120646,120647,120650],{},"返回这个 site 的世界坐标。",[83,120645,111545],{}," 里的每一行都是一个 site 的 ",[83,120648,120649],{},"(x, y, z)"," 坐标。",[93,120652,120654],{"className":38243,"code":120653,"language":38245,"meta":98,"style":98},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[83,120655,120656],{"__ignoreMap":98},[102,120657,120658,120660,120662],{"class":104,"line":105},[102,120659,39812],{"class":108},[102,120661,119795],{"class":112},[102,120663,119798],{"class":119},[14,120665,120666],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[93,120668,120670],{"className":38243,"code":120669,"language":38245,"meta":98,"style":98},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[83,120671,120672,120684],{"__ignoreMap":98},[102,120673,120674,120676,120678,120680,120682],{"class":104,"line":105},[102,120675,119433],{"class":119},[102,120677,260],{"class":108},[102,120679,119808],{"class":119},[102,120681,119401],{"class":278},[102,120683,390],{"class":119},[102,120685,120686,120688,120690,120692,120694],{"class":104,"line":116},[102,120687,119443],{"class":119},[102,120689,260],{"class":108},[102,120691,119808],{"class":119},[102,120693,119824],{"class":278},[102,120695,390],{"class":119},[14,120697,120698],{},"分别读取末端点和目标点的世界坐标。",[93,120700,120701],{"className":38243,"code":120373,"language":38245,"meta":98,"style":98},[83,120702,120703],{"__ignoreMap":98},[102,120704,120705,120707],{"class":104,"line":105},[102,120706,2607],{"class":108},[102,120708,119833],{"class":119},[14,120710,120711],{},"把四部分拼成一个观测数组：",[93,120713,120716],{"className":120714,"code":120715,"language":6778,"meta":98},[6776],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[83,120717,120715],{"__ignoreMap":98},[93,120719,120721],{"className":38243,"code":120720,"language":38245,"meta":98,"style":98},"dist = np.linalg.norm(tip - target)\n",[83,120722,120723],{"__ignoreMap":98},[102,120724,120725,120727,120729,120731,120733],{"class":104,"line":105},[102,120726,119461],{"class":119},[102,120728,260],{"class":108},[102,120730,119466],{"class":119},[102,120732,2833],{"class":108},[102,120734,119471],{"class":119},[14,120736,120737,120738,120741,120742,120745],{},"计算 tip 到 target 的距离。",[83,120739,120740],{},"tip - target"," 得到一个三维向量，",[83,120743,120744],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,120747,32],{},[93,120749,120752],{"className":120750,"code":120751,"language":6778,"meta":98},[6776],"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",[83,120753,120751],{"__ignoreMap":98},[93,120755,120757],{"className":38243,"code":120756,"language":38245,"meta":98,"style":98},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[83,120758,120759],{"__ignoreMap":98},[102,120760,120761,120763,120765,120767,120769],{"class":104,"line":105},[102,120762,120408],{"class":119},[102,120764,260],{"class":108},[102,120766,119902],{"class":187},[102,120768,5159],{"class":108},[102,120770,119907],{"class":119},[14,120772,120773,120774,120777,120778,120781],{},"计算动作惩罚。",[83,120775,120776],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[83,120779,120780],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[93,120783,120785],{"className":38243,"code":120784,"language":38245,"meta":98,"style":98},"return float(-dist - control_cost)\n",[83,120786,120787],{"__ignoreMap":98},[102,120788,120789,120791,120793,120795,120797,120799,120801],{"class":104,"line":105},[102,120790,2607],{"class":108},[102,120792,117662],{"class":187},[102,120794,380],{"class":119},[102,120796,2833],{"class":108},[102,120798,119461],{"class":119},[102,120800,2833],{"class":108},[102,120802,119924],{"class":119},[14,120804,120805],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[93,120807,120808],{"className":38243,"code":118668,"language":38245,"meta":98,"style":98},[83,120809,120810],{"__ignoreMap":98},[102,120811,120812,120814,120816],{"class":104,"line":105},[102,120813,118675],{"class":119},[102,120815,260],{"class":108},[102,120817,112626],{"class":187},[14,120819,120820],{},"累计奖励变量，记录整个运行过程的总分。",[93,120822,120824],{"className":38243,"code":120823,"language":38245,"meta":98,"style":98},"for step in range(500):\n",[83,120825,120826],{"__ignoreMap":98},[102,120827,120828,120830,120832,120834,120836,120838,120840],{"class":104,"line":105},[102,120829,11841],{"class":108},[102,120831,39481],{"class":119},[102,120833,33908],{"class":108},[102,120835,40308],{"class":187},[102,120837,380],{"class":119},[102,120839,72939],{"class":187},[102,120841,38651],{"class":119},[14,120843,120844],{},"运行 500 个控制步。",[93,120846,120847],{"className":38243,"code":112408,"language":38245,"meta":98,"style":98},[83,120848,120849],{"__ignoreMap":98},[102,120850,120851],{"class":104,"line":105},[102,120852,112408],{"class":119},[14,120854,120855,120856,108883,120858,120860],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[83,120857,111096],{},[83,120859,111099],{}," 是当前状态下的坐标。",[93,120862,120864],{"className":38243,"code":120863,"language":38245,"meta":98,"style":98},"error = target - tip\n",[83,120865,120866],{"__ignoreMap":98},[102,120867,120868,120870,120872,120874,120876],{"class":104,"line":105},[102,120869,120461],{"class":119},[102,120871,260],{"class":108},[102,120873,120033],{"class":119},[102,120875,2833],{"class":108},[102,120877,120038],{"class":119},[14,120879,120880],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[93,120882,120884],{"className":38243,"code":120883,"language":38245,"meta":98,"style":98},"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",[83,120885,120886,120918],{"__ignoreMap":98},[102,120887,120888,120890,120892,120894,120896,120898,120900,120902,120904,120906,120908,120910,120912,120914,120916],{"class":104,"line":105},[102,120889,113736],{"class":119},[102,120891,8423],{"class":187},[102,120893,13252],{"class":119},[102,120895,260],{"class":108},[102,120897,120055],{"class":119},[102,120899,113125],{"class":187},[102,120901,5159],{"class":108},[102,120903,120062],{"class":119},[102,120905,7044],{"class":187},[102,120907,120067],{"class":119},[102,120909,2833],{"class":108},[102,120911,110268],{"class":187},[102,120913,2571],{"class":119},[102,120915,110268],{"class":187},[102,120917,390],{"class":119},[102,120919,120920,120922,120924,120926,120928,120930,120932,120934,120936,120938,120940,120942,120944,120946,120948],{"class":104,"line":116},[102,120921,113736],{"class":119},[102,120923,7039],{"class":187},[102,120925,13252],{"class":119},[102,120927,260],{"class":108},[102,120929,120055],{"class":119},[102,120931,113125],{"class":187},[102,120933,5159],{"class":108},[102,120935,120062],{"class":119},[102,120937,8423],{"class":187},[102,120939,120067],{"class":119},[102,120941,2833],{"class":108},[102,120943,110268],{"class":187},[102,120945,2571],{"class":119},[102,120947,110268],{"class":187},[102,120949,390],{"class":119},[14,120951,120952,120953,120956],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[83,120954,120955],{},"error -> ctrl -> step"," 的流程。",[93,120958,120959],{"className":38243,"code":112370,"language":38245,"meta":98,"style":98},[83,120960,120961],{"__ignoreMap":98},[102,120962,120963],{"class":104,"line":105},[102,120964,112370],{"class":119},[14,120966,120967],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[93,120969,120971],{"className":38243,"code":120970,"language":38245,"meta":98,"style":98},"obs = get_obs(model, data)\n",[83,120972,120973],{"__ignoreMap":98},[102,120974,120975,120977,120979],{"class":104,"line":105},[102,120976,118719],{"class":119},[102,120978,260],{"class":108},[102,120980,120156],{"class":119},[14,120982,120983,120984,120987],{},"读取最新观测。后面打印 ",[83,120985,120986],{},"obs.shape[0]","，用来确认观测维度是 10。",[43,120989,110181],{"id":110180},[14,120991,120992],{},"观测维度为:",[93,120994,120997],{"className":120995,"code":120996,"language":6778,"meta":98},[6776],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[83,120998,120996],{"__ignoreMap":98},[14,121000,121001],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,121003,121004],{},"程序每 100 步打印：",[93,121006,121009],{"className":121007,"code":121008,"language":6778,"meta":98},[6776],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[83,121010,121008],{"__ignoreMap":98},[14,121012,121013,121014,121016],{},"如果控制有效，你应该看到最终 ",[83,121015,111096],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[43,121018,110213],{"id":110212},[87,121020,121021,121024,121027,121033,121039,121046,121056],{},[62,121022,121023],{},"修改目标点位置。",[62,121025,121026],{},"重新运行，观察最终 tip 是否变化。",[62,121028,121029,121030,121032],{},"把 gravity 改成 ",[83,121031,110454],{},"，观察控制是否变差。",[62,121034,119046,121035,119050,121037,36250],{},[83,121036,110023],{},[83,121038,7044],{},[62,121040,110276,121041,110279,121043,121045],{},[83,121042,118461],{},[83,121044,115172],{},"，观察机械臂是否更难移动。",[62,121047,110276,121048,90395,121050,110279,121052,121055],{},[83,121049,111099],{},[83,121051,112011],{},[83,121053,121054],{},"0.2 0 0.6","，观察 reward 和 final tip。",[62,121057,121058],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[43,121060,110318],{"id":110317},[48,121062,121064],{"id":121063},"site-not-found",[83,121065,121066],{},"site not found",[14,121068,121069,121070,108883,121073,36250],{},"检查 XML 中是否有 ",[83,121071,121072],{},"site name=\"tip\"",[83,121074,121075],{},"site name=\"target\"",[48,121077,121078],{"id":121078},"机械臂完全不动",[14,121080,110388],{},[87,121082,121083,121088,121091,121096],{},[62,121084,121085,121087],{},[83,121086,110023],{}," 是否为 2",[62,121089,121090],{},"actuator 是否引用正确 joint",[62,121092,121093,121095],{},[83,121094,108941],{}," 是否被赋值",[62,121097,121098,121099],{},"是否执行了 ",[83,121100,108550],{},[48,121102,121103],{"id":121103},"控制效果不好",[14,121105,121106],{},"正常。本章重点不是控制器最优，而是任务结构:",[93,121108,121111],{"className":121109,"code":121110,"language":6778,"meta":98},[6776],"obs → action → mj_step → reward → next_obs\n",[83,121112,121110],{"__ignoreMap":98},[48,121114,121116],{"id":121115},"tip-坐标不变化","tip 坐标不变化",[14,121118,110440],{},[87,121120,121121,121126,121134,121143],{},[62,121122,121123,121124,36250],{},"是否每步调用了 ",[83,121125,108550],{},[62,121127,121128,121129,108883,121131,36250],{},"是否写入了 ",[83,121130,113991],{},[83,121132,121133],{},"data.ctrl[1]",[62,121135,121136,121137,9250,121140,36250],{},"actuator 是否正确引用 ",[83,121138,121139],{},"joint1",[83,121141,121142],{},"joint2",[62,121144,121145],{},"控制输入是否太小。",[48,121147,121148],{"id":121148},"目标点不会动",[14,121150,121151],{},"本章的 target 是固定 site：",[93,121153,121155],{"className":60932,"code":121154,"language":60934,"meta":98,"style":98},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[83,121156,121157],{"__ignoreMap":98},[102,121158,121159,121161,121163,121165,121167,121169,121171,121173,121176],{"class":104,"line":105},[102,121160,1208],{"class":119},[102,121162,111075],{"class":59165},[102,121164,387],{"class":112},[102,121166,260],{"class":119},[102,121168,119824],{"class":278},[102,121170,108971],{"class":112},[102,121172,260],{"class":119},[102,121174,121175],{"class":278},"\"0.5 0 0.4\"",[102,121177,121178],{"class":119}," ...\u002F>\n",[14,121180,121181,121182,121184],{},"它直接挂在 ",[83,121183,109706],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[48,121186,121187],{"id":121187},"机械臂不像真实机械臂",[14,121189,121190],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[43,121192,110472],{"id":110471},[14,121194,121195],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,121197,121198],{},"核心公式：",[93,121200,121203],{"className":121201,"code":121202,"language":6778,"meta":98},[6776],"distance = ||tip - target||\nreward = -distance - action_cost\n",[83,121204,121202],{"__ignoreMap":98},[14,121206,121207],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[8955,121209,121210],{},"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":98,"searchDepth":116,"depth":116,"links":121212},[121213,121214,121215,121220,121224,121225,121226,121234],{"id":108511,"depth":116,"text":108512},{"id":108634,"depth":116,"text":108635},{"id":108909,"depth":116,"text":108910,"children":121216},[121217,121218,121219],{"id":119416,"depth":123,"text":119417},{"id":119492,"depth":123,"text":119492},{"id":119522,"depth":123,"text":119523},{"id":109117,"depth":116,"text":109118,"children":121221},[121222,121223],{"id":109437,"depth":123,"text":109437},{"id":109573,"depth":123,"text":109573},{"id":110180,"depth":116,"text":110181},{"id":110212,"depth":116,"text":110213},{"id":110317,"depth":116,"text":110318,"children":121227},[121228,121229,121230,121231,121232,121233],{"id":121063,"depth":123,"text":121066},{"id":121078,"depth":123,"text":121078},{"id":121103,"depth":123,"text":121103},{"id":121115,"depth":123,"text":121116},{"id":121148,"depth":123,"text":121148},{"id":121187,"depth":123,"text":121187},{"id":110471,"depth":116,"text":110472},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":119220,"description":98},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":121241,"title":121242,"body":121243,"description":98,"extension":8978,"meta":124705,"navigation":651,"path":124706,"seo":124707,"stem":124708,"__hash__":124709},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":121244,"toc":124676},[121245,121248,121250,121253,121256,121281,121284,121290,121293,121299,121301,121303,121327,121329,121347,121349,121392,121394,121421,121423,121426,121478,121481,121487,121496,121499,121537,121540,121579,121582,121590,121597,121600,121606,121608,121662,121669,121714,121717,121721,121737,121747,121749,123010,123012,123024,123026,123037,123039,123042,123063,123066,123069,123102,123108,123111,123144,123147,123150,123191,123196,123210,123213,123226,123231,123254,123256,123271,123281,123296,123303,123323,123338,123356,123359,123376,123384,123400,123406,123438,123451,123483,123493,123528,123542,123588,123602,123644,123655,123668,123674,123707,123710,123737,123747,123787,123797,123814,123821,123839,123842,123883,123896,123911,123914,123937,123940,123952,123955,123974,123979,124000,124003,124018,124021,124055,124067,124082,124085,124110,124113,124132,124135,124167,124170,124194,124200,124230,124237,124250,124253,124255,124257,124263,124266,124269,124281,124284,124286,124340,124342,124346,124352,124361,124364,124371,124373,124396,124399,124403,124405,124423,124429,124431,124464,124467,124473,124477,124480,124500,124505,124509,124516,124536,124541,124545,124548,124568,124571,124657,124661,124664,124670,124673],[10,121246,121242],{"id":121247},"_8gymnasium-风格强化学习接口基础",[43,121249,108512],{"id":108511},[14,121251,121252],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,121254,121255],{},"你将实现:",[93,121257,121259],{"className":38243,"code":121258,"language":38245,"meta":98,"style":98},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[83,121260,121261,121271],{"__ignoreMap":98},[102,121262,121263,121266,121268],{"class":104,"line":105},[102,121264,121265],{"class":119},"obs, info ",[102,121267,260],{"class":108},[102,121269,121270],{"class":119}," env.reset()\n",[102,121272,121273,121276,121278],{"class":104,"line":116},[102,121274,121275],{"class":119},"obs, reward, terminated, truncated, info ",[102,121277,260],{"class":108},[102,121279,121280],{"class":119}," env.step(action)\n",[14,121282,121283],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,121285,121286,121287,121289],{},"前面章节的代码都是“脚本式”的：在 ",[83,121288,110160],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,121291,121292],{},"可以先记住 Gymnasium 环境的核心交互：",[93,121294,121297],{"className":121295,"code":121296,"language":6778,"meta":98},[6776],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[83,121298,121296],{"__ignoreMap":98},[43,121300,108635],{"id":108634},[14,121302,108638],{},[93,121304,121305],{"className":31686,"code":112253,"language":31688,"meta":98,"style":98},[83,121306,121307],{"__ignoreMap":98},[102,121308,121309,121311,121313,121315,121317,121319,121321,121323,121325],{"class":104,"line":105},[102,121310,32441],{"class":112},[102,121312,34180],{"class":278},[102,121314,31698],{"class":278},[102,121316,34265],{"class":187},[102,121318,112268],{"class":278},[102,121320,108663],{"class":278},[102,121322,110366],{"class":278},[102,121324,108679],{"class":278},[102,121326,112277],{"class":278},[14,121328,110684],{},[93,121330,121332],{"className":31686,"code":121331,"language":31688,"meta":98,"style":98},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[83,121333,121334],{"__ignoreMap":98},[102,121335,121336,121338,121340,121342,121344],{"class":104,"line":105},[102,121337,31695],{"class":112},[102,121339,31698],{"class":278},[102,121341,108795],{"class":278},[102,121343,115576],{"class":278},[102,121345,121346],{"class":278}," gymnasium\n",[14,121348,110701],{},[93,121350,121352],{"className":31686,"code":121351,"language":31688,"meta":98,"style":98},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[83,121353,121354,121371,121380],{"__ignoreMap":98},[102,121355,121356,121358,121360,121362,121365,121367,121369],{"class":104,"line":105},[102,121357,38195],{"class":112},[102,121359,37041],{"class":278},[102,121361,32980],{"class":187},[102,121363,121364],{"class":278}," mujoco-gym-api",[102,121366,108840],{"class":278},[102,121368,108843],{"class":187},[102,121370,108846],{"class":187},[102,121372,121373,121375,121377],{"class":104,"line":116},[102,121374,38195],{"class":112},[102,121376,108853],{"class":278},[102,121378,121379],{"class":278}," mujoco-gym-api\n",[102,121381,121382,121384,121386,121388,121390],{"class":104,"line":123},[102,121383,31695],{"class":112},[102,121385,31698],{"class":278},[102,121387,108795],{"class":278},[102,121389,115576],{"class":278},[102,121391,121346],{"class":278},[14,121393,108869],{},[87,121395,121396,121406,121409,121415],{},[62,121397,121398,121399,121402,121403,36250],{},"本章使用 ",[83,121400,121401],{},"gymnasium","，不是旧版 ",[83,121404,121405],{},"gym",[62,121407,121408],{},"Gymnasium API 与旧 Gym API 有差异。",[62,121410,121411,121412,36250],{},"旧 Gym 常见返回值是 4 个: ",[83,121413,121414],{},"obs, reward, done, info",[62,121416,121417,121418,36250],{},"Gymnasium 返回值是 5 个: ",[83,121419,121420],{},"obs, reward, terminated, truncated, info",[43,121422,108910],{"id":108909},[14,121424,121425],{},"强化学习环境接口包含:",[9177,121427,121428,121437],{},[9180,121429,121430],{},[9183,121431,121432,121435],{},[9186,121433,121434],{"align":31600},"方法",[9186,121436,110561],{"align":31600},[9223,121438,121439,121449,121459,121469],{},[9183,121440,121441,121446],{},[9228,121442,121443],{"align":31600},[83,121444,121445],{},"reset()",[9228,121447,121448],{"align":31600},"重置环境",[9183,121450,121451,121456],{},[9228,121452,121453],{"align":31600},[83,121454,121455],{},"step(action)",[9228,121457,121458],{"align":31600},"执行动作",[9183,121460,121461,121466],{},[9228,121462,121463],{"align":31600},[83,121464,121465],{},"observation_space",[9228,121467,121468],{"align":31600},"观测空间",[9183,121470,121471,121476],{},[9228,121472,121473],{"align":31600},[83,121474,121475],{},"action_space",[9228,121477,31518],{"align":31600},[14,121479,121480],{},"一个最小环境需要完成:",[93,121482,121485],{"className":121483,"code":121484,"language":6778,"meta":98},[6776],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[83,121486,121484],{"__ignoreMap":98},[48,121488,121490,108883,121493,112503],{"id":121489},"terminated-和-truncated-的区别",[83,121491,121492],{},"terminated",[83,121494,121495],{},"truncated",[14,121497,121498],{},"Gymnasium 把“结束”拆成两个概念：",[9177,121500,121501,121511],{},[9180,121502,121503],{},[9183,121504,121505,121507,121509],{},[9186,121506,112439],{"align":31600},[9186,121508,108565],{"align":31600},[9186,121510,6783],{"align":31600},[9223,121512,121513,121525],{},[9183,121514,121515,121519,121522],{},[9228,121516,121517],{"align":31600},[83,121518,121492],{},[9228,121520,121521],{"align":31600},"任务自然结束",[9228,121523,121524],{"align":31600},"机械臂到达目标、机器人摔倒",[9183,121526,121527,121531,121534],{},[9228,121528,121529],{"align":31600},[83,121530,121495],{},[9228,121532,121533],{"align":31600},"因外部限制截断",[9228,121535,121536],{"align":31600},"达到最大步数、时间限制",[14,121538,121539],{},"本章中：",[93,121541,121543],{"className":38243,"code":121542,"language":38245,"meta":98,"style":98},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[83,121544,121545,121560],{"__ignoreMap":98},[102,121546,121547,121550,121552,121555,121557],{"class":104,"line":105},[102,121548,121549],{"class":119},"terminated ",[102,121551,260],{"class":108},[102,121553,121554],{"class":119}," dist ",[102,121556,1208],{"class":108},[102,121558,121559],{"class":187}," 0.05\n",[102,121561,121562,121565,121567,121569,121572,121574,121576],{"class":104,"line":116},[102,121563,121564],{"class":119},"truncated ",[102,121566,260],{"class":108},[102,121568,46738],{"class":187},[102,121570,121571],{"class":119},".steps ",[102,121573,10571],{"class":108},[102,121575,46738],{"class":187},[102,121577,121578],{"class":119},".max_steps\n",[14,121580,121581],{},"也就是：",[87,121583,121584,121587],{},[62,121585,121586],{},"末端距离目标小于 0.05，任务成功结束。",[62,121588,121589],{},"步数超过上限，episode 被截断。",[48,121591,121593,108883,121595],{"id":121592},"observation_space-和-action_space",[83,121594,121465],{},[83,121596,121475],{},[14,121598,121599],{},"这两个对象告诉算法：",[93,121601,121604],{"className":121602,"code":121603,"language":6778,"meta":98},[6776],"观测长什么样\n动作允许多大\n",[83,121605,121603],{"__ignoreMap":98},[14,121607,32],{},[93,121609,121611],{"className":38243,"code":121610,"language":38245,"meta":98,"style":98},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[83,121612,121613],{"__ignoreMap":98},[102,121614,121615,121617,121620,121622,121625,121628,121631,121633,121635,121638,121640,121642,121644,121646,121648,121650,121652,121655,121657,121659],{"class":104,"line":105},[102,121616,38688],{"class":187},[102,121618,121619],{"class":119},".action_space ",[102,121621,260],{"class":108},[102,121623,121624],{"class":119}," spaces.Box(",[102,121626,121627],{"class":386},"low",[102,121629,121630],{"class":108},"=-",[102,121632,110268],{"class":187},[102,121634,2571],{"class":119},[102,121636,121637],{"class":386},"high",[102,121639,260],{"class":108},[102,121641,110268],{"class":187},[102,121643,2571],{"class":119},[102,121645,103828],{"class":386},[102,121647,260],{"class":108},[102,121649,380],{"class":119},[102,121651,7044],{"class":187},[102,121653,121654],{"class":119},",), ",[102,121656,101365],{"class":386},[102,121658,260],{"class":108},[102,121660,121661],{"class":119},"np.float32)\n",[14,121663,121664,121665,121668],{},"表示动作是 2 维数组，每个值都在 ",[83,121666,121667],{},"[-1, 1]"," 范围内。",[93,121670,121672],{"className":38243,"code":121671,"language":38245,"meta":98,"style":98},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[83,121673,121674],{"__ignoreMap":98},[102,121675,121676,121678,121681,121683,121685,121687,121689,121692,121694,121696,121698,121700,121702,121704,121706,121708,121710,121712],{"class":104,"line":105},[102,121677,38688],{"class":187},[102,121679,121680],{"class":119},".observation_space ",[102,121682,260],{"class":108},[102,121684,121624],{"class":119},[102,121686,121627],{"class":386},[102,121688,121630],{"class":108},[102,121690,121691],{"class":119},"np.inf, ",[102,121693,121637],{"class":386},[102,121695,260],{"class":108},[102,121697,121691],{"class":119},[102,121699,103828],{"class":386},[102,121701,260],{"class":108},[102,121703,380],{"class":119},[102,121705,263],{"class":187},[102,121707,121654],{"class":119},[102,121709,101365],{"class":386},[102,121711,260],{"class":108},[102,121713,121661],{"class":119},[14,121715,121716],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[48,121718,121720],{"id":121719},"frame_skip-是什么","frame_skip 是什么",[93,121722,121724],{"className":38243,"code":121723,"language":38245,"meta":98,"style":98},"self.frame_skip = 5\n",[83,121725,121726],{"__ignoreMap":98},[102,121727,121728,121730,121733,121735],{"class":104,"line":105},[102,121729,38688],{"class":187},[102,121731,121732],{"class":119},".frame_skip ",[102,121734,260],{"class":108},[102,121736,62292],{"class":187},[14,121738,121739,121740,121743,121744,121746],{},"表示外部调用一次 ",[83,121741,121742],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[83,121745,109080],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[43,121748,109118],{"id":109117},[93,121750,121752],{"className":38243,"code":121751,"language":38245,"meta":98,"style":98},"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",[83,121753,121754,121766,121772,121782,121793,121797,121801,121809,121814,121818,121822,121826,121830,121834,121838,121842,121847,121851,121855,121859,121864,121868,121872,121876,121880,121884,121888,121892,121896,121900,121904,121908,121912,121916,121934,121949,121953,121966,121976,121991,122008,122012,122033,122052,122077,122091,122095,122105,122117,122127,122131,122173,122211,122215,122225,122241,122256,122275,122282,122286,122299,122314,122329,122342,122361,122377,122381,122422,122437,122452,122456,122495,122506,122519,122523,122533,122542,122546,122556,122571,122589,122593,122604,122621,122634,122638,122648,122652,122663,122674,122678,122692,122706,122722,122726,122739,122756,122771,122778,122782,122786,122798,122808,122826,122838,122850,122854,122862,122878,122887,122896,122904,122946,122959,122964,122968,122986,122990,122994,123006],{"__ignoreMap":98},[102,121755,121756,121758,121761,121763],{"class":104,"line":105},[102,121757,38257],{"class":108},[102,121759,121760],{"class":119}," gymnasium ",[102,121762,39248],{"class":108},[102,121764,121765],{"class":119}," gym\n",[102,121767,121768,121770],{"class":104,"line":116},[102,121769,38257],{"class":108},[102,121771,109166],{"class":119},[102,121773,121774,121776,121778,121780],{"class":104,"line":123},[102,121775,38257],{"class":108},[102,121777,39245],{"class":119},[102,121779,39248],{"class":108},[102,121781,39251],{"class":119},[102,121783,121784,121786,121788,121790],{"class":104,"line":130},[102,121785,38602],{"class":108},[102,121787,121760],{"class":119},[102,121789,38257],{"class":108},[102,121791,121792],{"class":119}," spaces\n",[102,121794,121795],{"class":104,"line":136},[102,121796,652],{"emptyLinePlaceholder":651},[102,121798,121799],{"class":104,"line":142},[102,121800,652],{"emptyLinePlaceholder":651},[102,121802,121803,121805,121807],{"class":104,"line":148},[102,121804,109179],{"class":187},[102,121806,22296],{"class":108},[102,121808,109184],{"class":278},[102,121810,121811],{"class":104,"line":157},[102,121812,121813],{"class":278},"\u003Cmujoco model=\"gym_reacher\">\n",[102,121815,121816],{"class":104,"line":163},[102,121817,119603],{"class":278},[102,121819,121820],{"class":104,"line":175},[102,121821,652],{"emptyLinePlaceholder":651},[102,121823,121824],{"class":104,"line":181},[102,121825,109203],{"class":278},[102,121827,121828],{"class":104,"line":202},[102,121829,119621],{"class":278},[102,121831,121832],{"class":104,"line":208},[102,121833,652],{"emptyLinePlaceholder":651},[102,121835,121836],{"class":104,"line":214},[102,121837,119630],{"class":278},[102,121839,121840],{"class":104,"line":225},[102,121841,119635],{"class":278},[102,121843,121844],{"class":104,"line":230},[102,121845,121846],{"class":278},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[102,121848,121849],{"class":104,"line":236},[102,121850,652],{"emptyLinePlaceholder":651},[102,121852,121853],{"class":104,"line":242},[102,121854,119649],{"class":278},[102,121856,121857],{"class":104,"line":248},[102,121858,119654],{"class":278},[102,121860,121861],{"class":104,"line":254},[102,121862,121863],{"class":278},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[102,121865,121866],{"class":104,"line":269},[102,121867,119664],{"class":278},[102,121869,121870],{"class":104,"line":298},[102,121871,114303],{"class":278},[102,121873,121874],{"class":104,"line":502},[102,121875,109232],{"class":278},[102,121877,121878],{"class":104,"line":507},[102,121879,109237],{"class":278},[102,121881,121882],{"class":104,"line":512},[102,121883,652],{"emptyLinePlaceholder":651},[102,121885,121886],{"class":104,"line":521},[102,121887,114320],{"class":278},[102,121889,121890],{"class":104,"line":526},[102,121891,119689],{"class":278},[102,121893,121894],{"class":104,"line":532},[102,121895,119694],{"class":278},[102,121897,121898],{"class":104,"line":538},[102,121899,114330],{"class":278},[102,121901,121902],{"class":104,"line":555},[102,121903,109242],{"class":278},[102,121905,121906],{"class":104,"line":570},[102,121907,103563],{"class":278},[102,121909,121910],{"class":104,"line":581},[102,121911,652],{"emptyLinePlaceholder":651},[102,121913,121914],{"class":104,"line":819},[102,121915,652],{"emptyLinePlaceholder":651},[102,121917,121918,121920,121923,121925,121927,121929,121932],{"class":104,"line":828},[102,121919,109],{"class":108},[102,121921,121922],{"class":112}," ReacherEnv",[102,121924,380],{"class":119},[102,121926,121405],{"class":112},[102,121928,9585],{"class":119},[102,121930,121931],{"class":112},"Env",[102,121933,38651],{"class":119},[102,121935,121936,121939,121941,121943,121946],{"class":104,"line":837},[102,121937,121938],{"class":119},"    metadata ",[102,121940,260],{"class":108},[102,121942,13257],{"class":119},[102,121944,121945],{"class":278},"\"render_modes\"",[102,121947,121948],{"class":119},": []}\n",[102,121950,121951],{"class":104,"line":842},[102,121952,652],{"emptyLinePlaceholder":651},[102,121954,121955,121957,121959,121962,121964],{"class":104,"line":855},[102,121956,38666],{"class":108},[102,121958,38669],{"class":187},[102,121960,121961],{"class":119},"(self) -> ",[102,121963,103551],{"class":187},[102,121965,12552],{"class":119},[102,121967,121968,121970,121972,121974],{"class":104,"line":860},[102,121969,38682],{"class":187},[102,121971,2825],{"class":119},[102,121973,38694],{"class":187},[102,121975,172],{"class":119},[102,121977,121978,121980,121983,121985,121987,121989],{"class":104,"line":871},[102,121979,38710],{"class":187},[102,121981,121982],{"class":119},".model ",[102,121984,260],{"class":108},[102,121986,109277],{"class":119},[102,121988,109179],{"class":187},[102,121990,390],{"class":119},[102,121992,121993,121995,121998,122000,122003,122005],{"class":104,"line":1359},[102,121994,38710],{"class":187},[102,121996,121997],{"class":119},".data ",[102,121999,260],{"class":108},[102,122001,122002],{"class":119}," mujoco.MjData(",[102,122004,38688],{"class":187},[102,122006,122007],{"class":119},".model)\n",[102,122009,122010],{"class":104,"line":1368},[102,122011,652],{"emptyLinePlaceholder":651},[102,122013,122014,122016,122019,122021,122024,122026,122029,122031],{"class":104,"line":1373},[102,122015,38710],{"class":187},[102,122017,122018],{"class":119},".tip_site_id ",[102,122020,260],{"class":108},[102,122022,122023],{"class":119}," mujoco.mj_name2id(",[102,122025,38688],{"class":187},[102,122027,122028],{"class":119},".model, mujoco.mjtObj.mjOBJ_SITE, ",[102,122030,119401],{"class":278},[102,122032,390],{"class":119},[102,122034,122035,122037,122040,122042,122044,122046,122048,122050],{"class":104,"line":1378},[102,122036,38710],{"class":187},[102,122038,122039],{"class":119},".target_site_id ",[102,122041,260],{"class":108},[102,122043,122023],{"class":119},[102,122045,38688],{"class":187},[102,122047,122028],{"class":119},[102,122049,119824],{"class":278},[102,122051,390],{"class":119},[102,122053,122054,122056,122058,122060,122062,122064,122067,122069,122071,122073,122075],{"class":104,"line":1384},[102,122055,1202],{"class":108},[102,122057,46738],{"class":187},[102,122059,122018],{"class":119},[102,122061,1208],{"class":108},[102,122063,866],{"class":187},[102,122065,122066],{"class":108}," or",[102,122068,46738],{"class":187},[102,122070,122039],{"class":119},[102,122072,1208],{"class":108},[102,122074,866],{"class":187},[102,122076,12552],{"class":119},[102,122078,122079,122082,122084,122086,122089],{"class":104,"line":1398},[102,122080,122081],{"class":108},"            raise",[102,122083,111300],{"class":187},[102,122085,380],{"class":119},[102,122087,122088],{"class":278},"\"required sites not found\"",[102,122090,390],{"class":119},[102,122092,122093],{"class":104,"line":1424},[102,122094,652],{"emptyLinePlaceholder":651},[102,122096,122097,122099,122101,122103],{"class":104,"line":1429},[102,122098,38710],{"class":187},[102,122100,121732],{"class":119},[102,122102,260],{"class":108},[102,122104,62292],{"class":187},[102,122106,122107,122109,122112,122114],{"class":104,"line":1435},[102,122108,38710],{"class":187},[102,122110,122111],{"class":119},".max_steps ",[102,122113,260],{"class":108},[102,122115,122116],{"class":187}," 200\n",[102,122118,122119,122121,122123,122125],{"class":104,"line":1450},[102,122120,38710],{"class":187},[102,122122,121571],{"class":119},[102,122124,260],{"class":108},[102,122126,55198],{"class":187},[102,122128,122129],{"class":104,"line":1473},[102,122130,652],{"emptyLinePlaceholder":651},[102,122132,122133,122135,122137,122139,122141,122143,122145,122147,122149,122151,122153,122155,122157,122159,122161,122163,122165,122167,122169,122171],{"class":104,"line":1478},[102,122134,38710],{"class":187},[102,122136,121619],{"class":119},[102,122138,260],{"class":108},[102,122140,121624],{"class":119},[102,122142,121627],{"class":386},[102,122144,121630],{"class":108},[102,122146,110268],{"class":187},[102,122148,2571],{"class":119},[102,122150,121637],{"class":386},[102,122152,260],{"class":108},[102,122154,110268],{"class":187},[102,122156,2571],{"class":119},[102,122158,103828],{"class":386},[102,122160,260],{"class":108},[102,122162,380],{"class":119},[102,122164,7044],{"class":187},[102,122166,121654],{"class":119},[102,122168,101365],{"class":386},[102,122170,260],{"class":108},[102,122172,121661],{"class":119},[102,122174,122175,122177,122179,122181,122183,122185,122187,122189,122191,122193,122195,122197,122199,122201,122203,122205,122207,122209],{"class":104,"line":1484},[102,122176,38710],{"class":187},[102,122178,121680],{"class":119},[102,122180,260],{"class":108},[102,122182,121624],{"class":119},[102,122184,121627],{"class":386},[102,122186,121630],{"class":108},[102,122188,121691],{"class":119},[102,122190,121637],{"class":386},[102,122192,260],{"class":108},[102,122194,121691],{"class":119},[102,122196,103828],{"class":386},[102,122198,260],{"class":108},[102,122200,380],{"class":119},[102,122202,263],{"class":187},[102,122204,121654],{"class":119},[102,122206,101365],{"class":386},[102,122208,260],{"class":108},[102,122210,121661],{"class":119},[102,122212,122213],{"class":104,"line":1499},[102,122214,652],{"emptyLinePlaceholder":651},[102,122216,122217,122219,122222],{"class":104,"line":1508},[102,122218,38666],{"class":108},[102,122220,122221],{"class":112}," _get_obs",[102,122223,122224],{"class":119},"(self) -> np.ndarray:\n",[102,122226,122227,122229,122231,122233,122236,122238],{"class":104,"line":1513},[102,122228,120002],{"class":119},[102,122230,260],{"class":108},[102,122232,46738],{"class":187},[102,122234,122235],{"class":119},".data.site_xpos[",[102,122237,38688],{"class":187},[102,122239,122240],{"class":119},".tip_site_id].copy()\n",[102,122242,122243,122245,122247,122249,122251,122253],{"class":104,"line":1524},[102,122244,120015],{"class":119},[102,122246,260],{"class":108},[102,122248,46738],{"class":187},[102,122250,122235],{"class":119},[102,122252,38688],{"class":187},[102,122254,122255],{"class":119},".target_site_id].copy()\n",[102,122257,122258,122260,122262,122265,122267,122270,122272],{"class":104,"line":1529},[102,122259,118047],{"class":119},[102,122261,260],{"class":108},[102,122263,122264],{"class":119}," np.concatenate([",[102,122266,38688],{"class":187},[102,122268,122269],{"class":119},".data.qpos.copy(), ",[102,122271,38688],{"class":187},[102,122273,122274],{"class":119},".data.qvel.copy(), tip, target])\n",[102,122276,122277,122279],{"class":104,"line":1538},[102,122278,184],{"class":108},[102,122280,122281],{"class":119}," obs.astype(np.float32)\n",[102,122283,122284],{"class":104,"line":2089},[102,122285,652],{"emptyLinePlaceholder":651},[102,122287,122288,122290,122293,122295,122297],{"class":104,"line":2094},[102,122289,38666],{"class":108},[102,122291,122292],{"class":112}," _get_reward",[102,122294,121961],{"class":119},[102,122296,9086],{"class":187},[102,122298,12552],{"class":119},[102,122300,122301,122303,122305,122307,122309,122311],{"class":104,"line":2100},[102,122302,120002],{"class":119},[102,122304,260],{"class":108},[102,122306,46738],{"class":187},[102,122308,122235],{"class":119},[102,122310,38688],{"class":187},[102,122312,122313],{"class":119},".tip_site_id]\n",[102,122315,122316,122318,122320,122322,122324,122326],{"class":104,"line":2106},[102,122317,120015],{"class":119},[102,122319,260],{"class":108},[102,122321,46738],{"class":187},[102,122323,122235],{"class":119},[102,122325,38688],{"class":187},[102,122327,122328],{"class":119},".target_site_id]\n",[102,122330,122331,122334,122336,122338,122340],{"class":104,"line":2120},[102,122332,122333],{"class":119},"        dist ",[102,122335,260],{"class":108},[102,122337,119466],{"class":119},[102,122339,2833],{"class":108},[102,122341,119471],{"class":119},[102,122343,122344,122347,122349,122351,122353,122356,122358],{"class":104,"line":2128},[102,122345,122346],{"class":119},"        control_cost ",[102,122348,260],{"class":108},[102,122350,119902],{"class":187},[102,122352,5159],{"class":108},[102,122354,122355],{"class":119}," np.sum(np.square(",[102,122357,38688],{"class":187},[102,122359,122360],{"class":119},".data.ctrl))\n",[102,122362,122363,122365,122367,122369,122371,122373,122375],{"class":104,"line":2149},[102,122364,184],{"class":108},[102,122366,117662],{"class":187},[102,122368,380],{"class":119},[102,122370,2833],{"class":108},[102,122372,119461],{"class":119},[102,122374,2833],{"class":108},[102,122376,119924],{"class":119},[102,122378,122379],{"class":104,"line":2161},[102,122380,652],{"emptyLinePlaceholder":651},[102,122382,122383,122385,122388,122391,122393,122396,122398,122400,122402,122404,122406,122409,122412,122414,122416,122418,122420],{"class":104,"line":2167},[102,122384,38666],{"class":108},[102,122386,122387],{"class":112}," reset",[102,122389,122390],{"class":119},"(self, ",[102,122392,191],{"class":108},[102,122394,122395],{"class":119},", seed: ",[102,122397,217],{"class":187},[102,122399,32974],{"class":108},[102,122401,46798],{"class":187},[102,122403,22296],{"class":108},[102,122405,46798],{"class":187},[102,122407,122408],{"class":119},", options: ",[102,122410,122411],{"class":187},"dict",[102,122413,32974],{"class":108},[102,122415,46798],{"class":187},[102,122417,22296],{"class":108},[102,122419,46798],{"class":187},[102,122421,38651],{"class":119},[102,122423,122424,122426,122429,122432,122434],{"class":104,"line":2190},[102,122425,38682],{"class":187},[102,122427,122428],{"class":119},"().reset(",[102,122430,122431],{"class":386},"seed",[102,122433,260],{"class":108},[102,122435,122436],{"class":119},"seed)\n",[102,122438,122439,122442,122444,122447,122449],{"class":104,"line":2196},[102,122440,122441],{"class":119},"        mujoco.mj_resetData(",[102,122443,38688],{"class":187},[102,122445,122446],{"class":119},".model, ",[102,122448,38688],{"class":187},[102,122450,122451],{"class":119},".data)\n",[102,122453,122454],{"class":104,"line":2219},[102,122455,652],{"emptyLinePlaceholder":651},[102,122457,122458,122460,122463,122465,122467,122470,122472,122474,122476,122478,122480,122482,122484,122486,122488,122490,122492],{"class":104,"line":2233},[102,122459,38710],{"class":187},[102,122461,122462],{"class":119},".data.qpos[:] ",[102,122464,260],{"class":108},[102,122466,46738],{"class":187},[102,122468,122469],{"class":119},".np_random.uniform(",[102,122471,121627],{"class":386},[102,122473,121630],{"class":108},[102,122475,94075],{"class":187},[102,122477,2571],{"class":119},[102,122479,121637],{"class":386},[102,122481,260],{"class":108},[102,122483,94075],{"class":187},[102,122485,2571],{"class":119},[102,122487,39361],{"class":386},[102,122489,260],{"class":108},[102,122491,38688],{"class":187},[102,122493,122494],{"class":119},".model.nq)\n",[102,122496,122497,122499,122502,122504],{"class":104,"line":2253},[102,122498,38710],{"class":187},[102,122500,122501],{"class":119},".data.qvel[:] ",[102,122503,260],{"class":108},[102,122505,112626],{"class":187},[102,122507,122508,122511,122513,122515,122517],{"class":104,"line":2259},[102,122509,122510],{"class":119},"        mujoco.mj_forward(",[102,122512,38688],{"class":187},[102,122514,122446],{"class":119},[102,122516,38688],{"class":187},[102,122518,122451],{"class":119},[102,122520,122521],{"class":104,"line":2270},[102,122522,652],{"emptyLinePlaceholder":651},[102,122524,122525,122527,122529,122531],{"class":104,"line":2293},[102,122526,38710],{"class":187},[102,122528,121571],{"class":119},[102,122530,260],{"class":108},[102,122532,55198],{"class":187},[102,122534,122535,122537,122539],{"class":104,"line":2315},[102,122536,184],{"class":108},[102,122538,46738],{"class":187},[102,122540,122541],{"class":119},"._get_obs(), {}\n",[102,122543,122544],{"class":104,"line":2320},[102,122545,652],{"emptyLinePlaceholder":651},[102,122547,122548,122550,122553],{"class":104,"line":2326},[102,122549,38666],{"class":108},[102,122551,122552],{"class":112}," step",[102,122554,122555],{"class":119},"(self, action):\n",[102,122557,122558,122560,122562,122565,122567,122569],{"class":104,"line":2340},[102,122559,118087],{"class":119},[102,122561,260],{"class":108},[102,122563,122564],{"class":119}," np.asarray(action, ",[102,122566,101365],{"class":386},[102,122568,260],{"class":108},[102,122570,121661],{"class":119},[102,122572,122573,122575,122577,122579,122581,122584,122586],{"class":104,"line":2354},[102,122574,118087],{"class":119},[102,122576,260],{"class":108},[102,122578,115312],{"class":119},[102,122580,38688],{"class":187},[102,122582,122583],{"class":119},".action_space.low, ",[102,122585,38688],{"class":187},[102,122587,122588],{"class":119},".action_space.high)\n",[102,122590,122591],{"class":104,"line":2359},[102,122592,652],{"emptyLinePlaceholder":651},[102,122594,122595,122597,122600,122602],{"class":104,"line":2373},[102,122596,38710],{"class":187},[102,122598,122599],{"class":119},".data.ctrl[:] ",[102,122601,260],{"class":108},[102,122603,115335],{"class":119},[102,122605,122606,122608,122610,122612,122614,122616,122618],{"class":104,"line":2378},[102,122607,12217],{"class":108},[102,122609,109366],{"class":119},[102,122611,33908],{"class":108},[102,122613,40308],{"class":187},[102,122615,380],{"class":119},[102,122617,38688],{"class":187},[102,122619,122620],{"class":119},".frame_skip):\n",[102,122622,122623,122626,122628,122630,122632],{"class":104,"line":2384},[102,122624,122625],{"class":119},"            mujoco.mj_step(",[102,122627,38688],{"class":187},[102,122629,122446],{"class":119},[102,122631,38688],{"class":187},[102,122633,122451],{"class":119},[102,122635,122636],{"class":104,"line":2389},[102,122637,652],{"emptyLinePlaceholder":651},[102,122639,122640,122642,122644,122646],{"class":104,"line":2403},[102,122641,38710],{"class":187},[102,122643,121571],{"class":119},[102,122645,18244],{"class":108},[102,122647,63564],{"class":187},[102,122649,122650],{"class":104,"line":2408},[102,122651,652],{"emptyLinePlaceholder":651},[102,122653,122654,122656,122658,122660],{"class":104,"line":2413},[102,122655,118047],{"class":119},[102,122657,260],{"class":108},[102,122659,46738],{"class":187},[102,122661,122662],{"class":119},"._get_obs()\n",[102,122664,122665,122667,122669,122671],{"class":104,"line":2427},[102,122666,118152],{"class":119},[102,122668,260],{"class":108},[102,122670,46738],{"class":187},[102,122672,122673],{"class":119},"._get_reward()\n",[102,122675,122676],{"class":104,"line":2440},[102,122677,652],{"emptyLinePlaceholder":651},[102,122679,122680,122682,122684,122686,122688,122690],{"class":104,"line":2445},[102,122681,120002],{"class":119},[102,122683,260],{"class":108},[102,122685,46738],{"class":187},[102,122687,122235],{"class":119},[102,122689,38688],{"class":187},[102,122691,122313],{"class":119},[102,122693,122694,122696,122698,122700,122702,122704],{"class":104,"line":2458},[102,122695,120015],{"class":119},[102,122697,260],{"class":108},[102,122699,46738],{"class":187},[102,122701,122235],{"class":119},[102,122703,38688],{"class":187},[102,122705,122328],{"class":119},[102,122707,122708,122710,122712,122714,122717,122719],{"class":104,"line":2463},[102,122709,122333],{"class":119},[102,122711,260],{"class":108},[102,122713,117662],{"class":187},[102,122715,122716],{"class":119},"(np.linalg.norm(tip ",[102,122718,2833],{"class":108},[102,122720,122721],{"class":119}," target))\n",[102,122723,122724],{"class":104,"line":2468},[102,122725,652],{"emptyLinePlaceholder":651},[102,122727,122728,122731,122733,122735,122737],{"class":104,"line":2473},[102,122729,122730],{"class":119},"        terminated ",[102,122732,260],{"class":108},[102,122734,121554],{"class":119},[102,122736,1208],{"class":108},[102,122738,121559],{"class":187},[102,122740,122741,122744,122746,122748,122750,122752,122754],{"class":104,"line":2486},[102,122742,122743],{"class":119},"        truncated ",[102,122745,260],{"class":108},[102,122747,46738],{"class":187},[102,122749,121571],{"class":119},[102,122751,10571],{"class":108},[102,122753,46738],{"class":187},[102,122755,121578],{"class":119},[102,122757,122758,122761,122763,122765,122768],{"class":104,"line":2491},[102,122759,122760],{"class":119},"        info ",[102,122762,260],{"class":108},[102,122764,13257],{"class":119},[102,122766,122767],{"class":278},"\"distance\"",[102,122769,122770],{"class":119},": dist}\n",[102,122772,122773,122775],{"class":104,"line":40498},[102,122774,184],{"class":108},[102,122776,122777],{"class":119}," obs, reward, terminated, truncated, info\n",[102,122779,122780],{"class":104,"line":40504},[102,122781,652],{"emptyLinePlaceholder":651},[102,122783,122784],{"class":104,"line":40510},[102,122785,652],{"emptyLinePlaceholder":651},[102,122787,122788,122790,122792,122794,122796],{"class":104,"line":40516},[102,122789,39812],{"class":108},[102,122791,220],{"class":112},[102,122793,109263],{"class":119},[102,122795,103551],{"class":187},[102,122797,12552],{"class":119},[102,122799,122800,122803,122805],{"class":104,"line":40522},[102,122801,122802],{"class":119},"    env ",[102,122804,260],{"class":108},[102,122806,122807],{"class":119}," ReacherEnv()\n",[102,122809,122810,122813,122815,122818,122820,122822,122824],{"class":104,"line":40533},[102,122811,122812],{"class":119},"    obs, info ",[102,122814,260],{"class":108},[102,122816,122817],{"class":119}," env.reset(",[102,122819,122431],{"class":386},[102,122821,260],{"class":108},[102,122823,8423],{"class":187},[102,122825,390],{"class":119},[102,122827,122828,122830,122832,122835],{"class":104,"line":40539},[102,122829,39164],{"class":187},[102,122831,380],{"class":119},[102,122833,122834],{"class":278},"\"initial obs shape:\"",[102,122836,122837],{"class":119},", obs.shape)\n",[102,122839,122840,122842,122844,122847],{"class":104,"line":40559},[102,122841,39164],{"class":187},[102,122843,380],{"class":119},[102,122845,122846],{"class":278},"\"initial info:\"",[102,122848,122849],{"class":119},", info)\n",[102,122851,122852],{"class":104,"line":40565},[102,122853,652],{"emptyLinePlaceholder":651},[102,122855,122856,122858,122860],{"class":104,"line":40576},[102,122857,118018],{"class":119},[102,122859,260],{"class":108},[102,122861,112626],{"class":187},[102,122863,122864,122866,122868,122870,122872,122874,122876],{"class":104,"line":40582},[102,122865,12016],{"class":108},[102,122867,39481],{"class":119},[102,122869,33908],{"class":108},[102,122871,40308],{"class":187},[102,122873,380],{"class":119},[102,122875,5016],{"class":187},[102,122877,38651],{"class":119},[102,122879,122880,122882,122884],{"class":104,"line":40588},[102,122881,118087],{"class":119},[102,122883,260],{"class":108},[102,122885,122886],{"class":119}," env.action_space.sample()\n",[102,122888,122889,122892,122894],{"class":104,"line":40594},[102,122890,122891],{"class":119},"        obs, reward, terminated, truncated, info ",[102,122893,260],{"class":108},[102,122895,121280],{"class":119},[102,122897,122898,122900,122902],{"class":104,"line":40600},[102,122899,118162],{"class":119},[102,122901,18244],{"class":108},[102,122903,118167],{"class":119},[102,122905,122906,122908,122910,122912,122914,122917,122919,122921,122924,122926,122928,122931,122933,122935,122938,122940,122942,122944],{"class":104,"line":40606},[102,122907,40316],{"class":187},[102,122909,380],{"class":119},[102,122911,118196],{"class":278},[102,122913,118199],{"class":119},[102,122915,122916],{"class":278},"\"reward:\"",[102,122918,2571],{"class":119},[102,122920,39883],{"class":187},[102,122922,122923],{"class":119},"(reward, ",[102,122925,7049],{"class":187},[102,122927,118210],{"class":119},[102,122929,122930],{"class":278},"\"distance:\"",[102,122932,2571],{"class":119},[102,122934,39883],{"class":187},[102,122936,122937],{"class":119},"(info[",[102,122939,122767],{"class":278},[102,122941,120067],{"class":119},[102,122943,7049],{"class":187},[102,122945,38362],{"class":119},[102,122947,122948,122950,122953,122956],{"class":104,"line":40612},[102,122949,1202],{"class":108},[102,122951,122952],{"class":119}," terminated ",[102,122954,122955],{"class":108},"or",[102,122957,122958],{"class":119}," truncated:\n",[102,122960,122961],{"class":104,"line":40618},[102,122962,122963],{"class":108},"            break\n",[102,122965,122966],{"class":104,"line":40638},[102,122967,652],{"emptyLinePlaceholder":651},[102,122969,122970,122972,122974,122976,122978,122980,122982,122984],{"class":104,"line":40644},[102,122971,39164],{"class":187},[102,122973,380],{"class":119},[102,122975,118241],{"class":278},[102,122977,2571],{"class":119},[102,122979,39883],{"class":187},[102,122981,118248],{"class":119},[102,122983,7049],{"class":187},[102,122985,38362],{"class":119},[102,122987,122988],{"class":104,"line":40660},[102,122989,652],{"emptyLinePlaceholder":651},[102,122991,122992],{"class":104,"line":40666},[102,122993,652],{"emptyLinePlaceholder":651},[102,122995,122996,122998,123000,123002,123004],{"class":104,"line":40680},[102,122997,10407],{"class":108},[102,122999,39085],{"class":187},[102,123001,109424],{"class":108},[102,123003,109427],{"class":278},[102,123005,12552],{"class":119},[102,123007,123008],{"class":104,"line":40686},[102,123009,109434],{"class":119},[14,123011,111435],{},[93,123013,123015],{"className":31686,"code":123014,"language":31688,"meta":98,"style":98},"touch ch8_gym_env.py\n",[83,123016,123017],{"__ignoreMap":98},[102,123018,123019,123021],{"class":104,"line":105},[102,123020,109148],{"class":112},[102,123022,123023],{"class":278}," ch8_gym_env.py\n",[14,123025,118309],{},[93,123027,123029],{"className":31686,"code":123028,"language":31688,"meta":98,"style":98},"python ch8_gym_env.py\n",[83,123030,123031],{"__ignoreMap":98},[102,123032,123033,123035],{"class":104,"line":105},[102,123034,38245],{"class":112},[102,123036,123023],{"class":278},[48,123038,109437],{"id":109437},[14,123040,123041],{},"继承 Gymnasium 环境：",[93,123043,123045],{"className":38243,"code":123044,"language":38245,"meta":98,"style":98},"class ReacherEnv(gym.Env):\n",[83,123046,123047],{"__ignoreMap":98},[102,123048,123049,123051,123053,123055,123057,123059,123061],{"class":104,"line":105},[102,123050,109],{"class":108},[102,123052,121922],{"class":112},[102,123054,380],{"class":119},[102,123056,121405],{"class":112},[102,123058,9585],{"class":119},[102,123060,121931],{"class":112},[102,123062,38651],{"class":119},[14,123064,123065],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,123067,123068],{},"初始化模型：",[93,123070,123072],{"className":38243,"code":123071,"language":38245,"meta":98,"style":98},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[83,123073,123074,123088],{"__ignoreMap":98},[102,123075,123076,123078,123080,123082,123084,123086],{"class":104,"line":105},[102,123077,38688],{"class":187},[102,123079,121982],{"class":119},[102,123081,260],{"class":108},[102,123083,109277],{"class":119},[102,123085,109179],{"class":187},[102,123087,390],{"class":119},[102,123089,123090,123092,123094,123096,123098,123100],{"class":104,"line":116},[102,123091,38688],{"class":187},[102,123093,121997],{"class":119},[102,123095,260],{"class":108},[102,123097,122002],{"class":119},[102,123099,38688],{"class":187},[102,123101,122007],{"class":119},[14,123103,123104,123105,123107],{},"这和前面章节一样，只是现在放到了类的 ",[83,123106,38694],{}," 里。",[14,123109,123110],{},"缓存 site ID：",[93,123112,123114],{"className":38243,"code":123113,"language":38245,"meta":98,"style":98},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[83,123115,123116,123130],{"__ignoreMap":98},[102,123117,123118,123120,123122,123124,123126,123128],{"class":104,"line":105},[102,123119,38688],{"class":187},[102,123121,122018],{"class":119},[102,123123,260],{"class":108},[102,123125,122023],{"class":119},[102,123127,97419],{"class":187},[102,123129,390],{"class":119},[102,123131,123132,123134,123136,123138,123140,123142],{"class":104,"line":116},[102,123133,38688],{"class":187},[102,123135,122039],{"class":119},[102,123137,260],{"class":108},[102,123139,122023],{"class":119},[102,123141,97419],{"class":187},[102,123143,390],{"class":119},[14,123145,123146],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,123148,123149],{},"reset：",[93,123151,123153],{"className":38243,"code":123152,"language":38245,"meta":98,"style":98},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[83,123154,123155],{"__ignoreMap":98},[102,123156,123157,123159,123161,123163,123165,123167,123169,123171,123173,123175,123177,123179,123181,123183,123185,123187,123189],{"class":104,"line":105},[102,123158,39812],{"class":108},[102,123160,122387],{"class":112},[102,123162,122390],{"class":119},[102,123164,191],{"class":108},[102,123166,122395],{"class":119},[102,123168,217],{"class":187},[102,123170,32974],{"class":108},[102,123172,46798],{"class":187},[102,123174,22296],{"class":108},[102,123176,46798],{"class":187},[102,123178,122408],{"class":119},[102,123180,122411],{"class":187},[102,123182,32974],{"class":108},[102,123184,46798],{"class":187},[102,123186,22296],{"class":108},[102,123188,46798],{"class":187},[102,123190,38651],{"class":119},[14,123192,123193,123195],{},[83,123194,77921],{}," 做四件事：",[87,123197,123198,123201,123204,123207],{},[62,123199,123200],{},"设置随机种子。",[62,123202,123203],{},"重置 MuJoCo data。",[62,123205,123206],{},"随机初始化关节角。",[62,123208,123209],{},"返回初始观测和 info。",[14,123211,123212],{},"step：",[93,123214,123216],{"className":38243,"code":123215,"language":38245,"meta":98,"style":98},"def step(self, action):\n",[83,123217,123218],{"__ignoreMap":98},[102,123219,123220,123222,123224],{"class":104,"line":105},[102,123221,39812],{"class":108},[102,123223,122552],{"class":112},[102,123225,122555],{"class":119},[14,123227,123228,123230],{},[83,123229,114999],{}," 做六件事：",[87,123232,123233,123236,123242,123245,123248,123251],{},[62,123234,123235],{},"检查并裁剪 action。",[62,123237,123238,123239,36250],{},"写入 ",[83,123240,123241],{},"self.data.ctrl",[62,123243,123244],{},"连续推进若干个 MuJoCo 物理步。",[62,123246,123247],{},"计算新观测。",[62,123249,123250],{},"计算奖励和结束条件。",[62,123252,123253],{},"返回 Gymnasium 标准五元组。",[48,123255,109573],{"id":109573},[93,123257,123259],{"className":38243,"code":123258,"language":38245,"meta":98,"style":98},"import gymnasium as gym\n",[83,123260,123261],{"__ignoreMap":98},[102,123262,123263,123265,123267,123269],{"class":104,"line":105},[102,123264,38257],{"class":108},[102,123266,121760],{"class":119},[102,123268,39248],{"class":108},[102,123270,121765],{"class":119},[14,123272,123273,123274,123276,123277,123280],{},"导入 Gymnasium，并起别名 ",[83,123275,121405],{},"。后面写 ",[83,123278,123279],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[93,123282,123284],{"className":38243,"code":123283,"language":38245,"meta":98,"style":98},"from gymnasium import spaces\n",[83,123285,123286],{"__ignoreMap":98},[102,123287,123288,123290,123292,123294],{"class":104,"line":105},[102,123289,38602],{"class":108},[102,123291,121760],{"class":119},[102,123293,38257],{"class":108},[102,123295,121792],{"class":119},[14,123297,123298,123299,123302],{},"导入空间定义工具。",[83,123300,123301],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[93,123304,123305],{"className":38243,"code":123044,"language":38245,"meta":98,"style":98},[83,123306,123307],{"__ignoreMap":98},[102,123308,123309,123311,123313,123315,123317,123319,123321],{"class":104,"line":105},[102,123310,109],{"class":108},[102,123312,121922],{"class":112},[102,123314,380],{"class":119},[102,123316,121405],{"class":112},[102,123318,9585],{"class":119},[102,123320,121931],{"class":112},[102,123322,38651],{"class":119},[14,123324,123325,123326,123329,123330,123332,123333,108883,123335,123337],{},"定义一个类，名字叫 ",[83,123327,123328],{},"ReacherEnv","。括号里的 ",[83,123331,123279],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[83,123334,77921],{},[83,123336,114999],{}," 这两个核心方法。",[93,123339,123341],{"className":38243,"code":123340,"language":38245,"meta":98,"style":98},"metadata = {\"render_modes\": []}\n",[83,123342,123343],{"__ignoreMap":98},[102,123344,123345,123348,123350,123352,123354],{"class":104,"line":105},[102,123346,123347],{"class":119},"metadata ",[102,123349,260],{"class":108},[102,123351,13257],{"class":119},[102,123353,121945],{"class":278},[102,123355,121948],{"class":119},[14,123357,123358],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[93,123360,123362],{"className":38243,"code":123361,"language":38245,"meta":98,"style":98},"def __init__(self) -> None:\n",[83,123363,123364],{"__ignoreMap":98},[102,123365,123366,123368,123370,123372,123374],{"class":104,"line":105},[102,123367,39812],{"class":108},[102,123369,38669],{"class":187},[102,123371,121961],{"class":119},[102,123373,103551],{"class":187},[102,123375,12552],{"class":119},[14,123377,123378,123380,123381,36250],{},[83,123379,38694],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[83,123382,123383],{},"env = ReacherEnv()",[93,123385,123387],{"className":38243,"code":123386,"language":38245,"meta":98,"style":98},"super().__init__()\n",[83,123388,123389],{"__ignoreMap":98},[102,123390,123391,123394,123396,123398],{"class":104,"line":105},[102,123392,123393],{"class":187},"super",[102,123395,2825],{"class":119},[102,123397,38694],{"class":187},[102,123399,172],{"class":119},[14,123401,123402,123403,123405],{},"调用父类 ",[83,123404,123279],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[93,123407,123408],{"className":38243,"code":123071,"language":38245,"meta":98,"style":98},[83,123409,123410,123424],{"__ignoreMap":98},[102,123411,123412,123414,123416,123418,123420,123422],{"class":104,"line":105},[102,123413,38688],{"class":187},[102,123415,121982],{"class":119},[102,123417,260],{"class":108},[102,123419,109277],{"class":119},[102,123421,109179],{"class":187},[102,123423,390],{"class":119},[102,123425,123426,123428,123430,123432,123434,123436],{"class":104,"line":116},[102,123427,38688],{"class":187},[102,123429,121997],{"class":119},[102,123431,260],{"class":108},[102,123433,122002],{"class":119},[102,123435,38688],{"class":187},[102,123437,122007],{"class":119},[14,123439,123440,123441,123443,123444,108883,123447,123450],{},"把 MuJoCo 模型和状态保存到 ",[83,123442,38688],{}," 上。",[83,123445,123446],{},"self.model",[83,123448,123449],{},"self.data"," 表示这个环境对象自己的模型和状态。",[93,123452,123453],{"className":38243,"code":123113,"language":38245,"meta":98,"style":98},[83,123454,123455,123469],{"__ignoreMap":98},[102,123456,123457,123459,123461,123463,123465,123467],{"class":104,"line":105},[102,123458,38688],{"class":187},[102,123460,122018],{"class":119},[102,123462,260],{"class":108},[102,123464,122023],{"class":119},[102,123466,97419],{"class":187},[102,123468,390],{"class":119},[102,123470,123471,123473,123475,123477,123479,123481],{"class":104,"line":116},[102,123472,38688],{"class":187},[102,123474,122039],{"class":119},[102,123476,260],{"class":108},[102,123478,122023],{"class":119},[102,123480,97419],{"class":187},[102,123482,390],{"class":119},[14,123484,123485,123486,108883,123489,123492],{},"提前查好 tip 和 target 的 site ID。这样 ",[83,123487,123488],{},"_get_obs",[83,123490,123491],{},"_get_reward"," 里就不用每次按名字查找。",[93,123494,123496],{"className":38243,"code":123495,"language":38245,"meta":98,"style":98},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[83,123497,123498,123508,123518],{"__ignoreMap":98},[102,123499,123500,123502,123504,123506],{"class":104,"line":105},[102,123501,38688],{"class":187},[102,123503,121732],{"class":119},[102,123505,260],{"class":108},[102,123507,62292],{"class":187},[102,123509,123510,123512,123514,123516],{"class":104,"line":116},[102,123511,38688],{"class":187},[102,123513,122111],{"class":119},[102,123515,260],{"class":108},[102,123517,122116],{"class":187},[102,123519,123520,123522,123524,123526],{"class":104,"line":123},[102,123521,38688],{"class":187},[102,123523,121571],{"class":119},[102,123525,260],{"class":108},[102,123527,55198],{"class":187},[14,123529,123530,123533,123534,123537,123538,123541],{},[83,123531,123532],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[83,123535,123536],{},"max_steps"," 是一个 episode 最多运行多少步。",[83,123539,123540],{},"steps"," 记录当前 episode 已经走了多少步。",[93,123543,123544],{"className":38243,"code":121610,"language":38245,"meta":98,"style":98},[83,123545,123546],{"__ignoreMap":98},[102,123547,123548,123550,123552,123554,123556,123558,123560,123562,123564,123566,123568,123570,123572,123574,123576,123578,123580,123582,123584,123586],{"class":104,"line":105},[102,123549,38688],{"class":187},[102,123551,121619],{"class":119},[102,123553,260],{"class":108},[102,123555,121624],{"class":119},[102,123557,121627],{"class":386},[102,123559,121630],{"class":108},[102,123561,110268],{"class":187},[102,123563,2571],{"class":119},[102,123565,121637],{"class":386},[102,123567,260],{"class":108},[102,123569,110268],{"class":187},[102,123571,2571],{"class":119},[102,123573,103828],{"class":386},[102,123575,260],{"class":108},[102,123577,380],{"class":119},[102,123579,7044],{"class":187},[102,123581,121654],{"class":119},[102,123583,101365],{"class":386},[102,123585,260],{"class":108},[102,123587,121661],{"class":119},[14,123589,123590,123591,123594,123595,108883,123598,123601],{},"定义动作空间。",[83,123592,123593],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[83,123596,123597],{},"low=-1.0",[83,123599,123600],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[93,123603,123604],{"className":38243,"code":121671,"language":38245,"meta":98,"style":98},[83,123605,123606],{"__ignoreMap":98},[102,123607,123608,123610,123612,123614,123616,123618,123620,123622,123624,123626,123628,123630,123632,123634,123636,123638,123640,123642],{"class":104,"line":105},[102,123609,38688],{"class":187},[102,123611,121680],{"class":119},[102,123613,260],{"class":108},[102,123615,121624],{"class":119},[102,123617,121627],{"class":386},[102,123619,121630],{"class":108},[102,123621,121691],{"class":119},[102,123623,121637],{"class":386},[102,123625,260],{"class":108},[102,123627,121691],{"class":119},[102,123629,103828],{"class":386},[102,123631,260],{"class":108},[102,123633,380],{"class":119},[102,123635,263],{"class":187},[102,123637,121654],{"class":119},[102,123639,101365],{"class":386},[102,123641,260],{"class":108},[102,123643,121661],{"class":119},[14,123645,123646,123647,123650,123651,123654],{},"定义观测空间。",[83,123648,123649],{},"shape=(10,)"," 表示观测是 10 个数。",[83,123652,123653],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[93,123656,123658],{"className":38243,"code":123657,"language":38245,"meta":98,"style":98},"def _get_obs(self) -> np.ndarray:\n",[83,123659,123660],{"__ignoreMap":98},[102,123661,123662,123664,123666],{"class":104,"line":105},[102,123663,39812],{"class":108},[102,123665,122221],{"class":112},[102,123667,122224],{"class":119},[14,123669,123670,123671,123673],{},"定义内部函数，用来生成观测。函数名前面的 ",[83,123672,10012],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[93,123675,123677],{"className":38243,"code":123676,"language":38245,"meta":98,"style":98},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[83,123678,123679,123693],{"__ignoreMap":98},[102,123680,123681,123683,123685,123687,123689,123691],{"class":104,"line":105},[102,123682,119433],{"class":119},[102,123684,260],{"class":108},[102,123686,46738],{"class":187},[102,123688,122235],{"class":119},[102,123690,38688],{"class":187},[102,123692,122240],{"class":119},[102,123694,123695,123697,123699,123701,123703,123705],{"class":104,"line":116},[102,123696,119443],{"class":119},[102,123698,260],{"class":108},[102,123700,46738],{"class":187},[102,123702,122235],{"class":119},[102,123704,38688],{"class":187},[102,123706,122255],{"class":119},[14,123708,123709],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[93,123711,123713],{"className":38243,"code":123712,"language":38245,"meta":98,"style":98},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[83,123714,123715,123731],{"__ignoreMap":98},[102,123716,123717,123719,123721,123723,123725,123727,123729],{"class":104,"line":105},[102,123718,118719],{"class":119},[102,123720,260],{"class":108},[102,123722,122264],{"class":119},[102,123724,38688],{"class":187},[102,123726,122269],{"class":119},[102,123728,38688],{"class":187},[102,123730,122274],{"class":119},[102,123732,123733,123735],{"class":104,"line":116},[102,123734,2607],{"class":108},[102,123736,122281],{"class":119},[14,123738,123739,123740,123743,123744,123746],{},"拼接观测，并转换成 ",[83,123741,123742],{},"float32","。很多强化学习库默认使用 ",[83,123745,123742],{},"，所以这里主动转换。",[93,123748,123749],{"className":38243,"code":123152,"language":38245,"meta":98,"style":98},[83,123750,123751],{"__ignoreMap":98},[102,123752,123753,123755,123757,123759,123761,123763,123765,123767,123769,123771,123773,123775,123777,123779,123781,123783,123785],{"class":104,"line":105},[102,123754,39812],{"class":108},[102,123756,122387],{"class":112},[102,123758,122390],{"class":119},[102,123760,191],{"class":108},[102,123762,122395],{"class":119},[102,123764,217],{"class":187},[102,123766,32974],{"class":108},[102,123768,46798],{"class":187},[102,123770,22296],{"class":108},[102,123772,46798],{"class":187},[102,123774,122408],{"class":119},[102,123776,122411],{"class":187},[102,123778,32974],{"class":108},[102,123780,46798],{"class":187},[102,123782,22296],{"class":108},[102,123784,46798],{"class":187},[102,123786,38651],{"class":119},[14,123788,123789,123790,123792,123793,123796],{},"定义 reset。",[83,123791,122431],{}," 用来控制随机数，保证实验可以复现。",[83,123794,123795],{},"options"," 用来接收额外配置，本章暂时不用。",[93,123798,123800],{"className":38243,"code":123799,"language":38245,"meta":98,"style":98},"super().reset(seed=seed)\n",[83,123801,123802],{"__ignoreMap":98},[102,123803,123804,123806,123808,123810,123812],{"class":104,"line":105},[102,123805,123393],{"class":187},[102,123807,122428],{"class":119},[102,123809,122431],{"class":386},[102,123811,260],{"class":108},[102,123813,122436],{"class":119},[14,123815,123816,123817,123820],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[83,123818,123819],{},"self.np_random"," 生成可复现的随机数。",[93,123822,123824],{"className":38243,"code":123823,"language":38245,"meta":98,"style":98},"mujoco.mj_resetData(self.model, self.data)\n",[83,123825,123826],{"__ignoreMap":98},[102,123827,123828,123831,123833,123835,123837],{"class":104,"line":105},[102,123829,123830],{"class":119},"mujoco.mj_resetData(",[102,123832,38688],{"class":187},[102,123834,122446],{"class":119},[102,123836,38688],{"class":187},[102,123838,122451],{"class":119},[14,123840,123841],{},"把 MuJoCo 状态重置到默认状态。",[93,123843,123845],{"className":38243,"code":123844,"language":38245,"meta":98,"style":98},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[83,123846,123847],{"__ignoreMap":98},[102,123848,123849,123851,123853,123855,123857,123859,123861,123863,123865,123867,123869,123871,123873,123875,123877,123879,123881],{"class":104,"line":105},[102,123850,38688],{"class":187},[102,123852,122462],{"class":119},[102,123854,260],{"class":108},[102,123856,46738],{"class":187},[102,123858,122469],{"class":119},[102,123860,121627],{"class":386},[102,123862,121630],{"class":108},[102,123864,94075],{"class":187},[102,123866,2571],{"class":119},[102,123868,121637],{"class":386},[102,123870,260],{"class":108},[102,123872,94075],{"class":187},[102,123874,2571],{"class":119},[102,123876,39361],{"class":386},[102,123878,260],{"class":108},[102,123880,38688],{"class":187},[102,123882,122494],{"class":119},[14,123884,123206,123885,123888,123889,123892,123893,123895],{},[83,123886,123887],{},"[:]"," 表示修改整个数组。",[83,123890,123891],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[83,123894,110015],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[93,123897,123899],{"className":38243,"code":123898,"language":38245,"meta":98,"style":98},"self.data.qvel[:] = 0.0\n",[83,123900,123901],{"__ignoreMap":98},[102,123902,123903,123905,123907,123909],{"class":104,"line":105},[102,123904,38688],{"class":187},[102,123906,122501],{"class":119},[102,123908,260],{"class":108},[102,123910,112626],{"class":187},[14,123912,123913],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[93,123915,123917],{"className":38243,"code":123916,"language":38245,"meta":98,"style":98},"self.steps = 0\nreturn self._get_obs(), {}\n",[83,123918,123919,123929],{"__ignoreMap":98},[102,123920,123921,123923,123925,123927],{"class":104,"line":105},[102,123922,38688],{"class":187},[102,123924,121571],{"class":119},[102,123926,260],{"class":108},[102,123928,55198],{"class":187},[102,123930,123931,123933,123935],{"class":104,"line":116},[102,123932,2607],{"class":108},[102,123934,46738],{"class":187},[102,123936,122541],{"class":119},[14,123938,123939],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[93,123941,123942],{"className":38243,"code":123215,"language":38245,"meta":98,"style":98},[83,123943,123944],{"__ignoreMap":98},[102,123945,123946,123948,123950],{"class":104,"line":105},[102,123947,39812],{"class":108},[102,123949,122552],{"class":112},[102,123951,122555],{"class":119},[14,123953,123954],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[93,123956,123958],{"className":38243,"code":123957,"language":38245,"meta":98,"style":98},"action = np.asarray(action, dtype=np.float32)\n",[83,123959,123960],{"__ignoreMap":98},[102,123961,123962,123964,123966,123968,123970,123972],{"class":104,"line":105},[102,123963,115307],{"class":119},[102,123965,260],{"class":108},[102,123967,122564],{"class":119},[102,123969,101365],{"class":386},[102,123971,260],{"class":108},[102,123973,121661],{"class":119},[14,123975,123976,123977,36250],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[83,123978,123742],{},[93,123980,123982],{"className":38243,"code":123981,"language":38245,"meta":98,"style":98},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[83,123983,123984],{"__ignoreMap":98},[102,123985,123986,123988,123990,123992,123994,123996,123998],{"class":104,"line":105},[102,123987,115307],{"class":119},[102,123989,260],{"class":108},[102,123991,115312],{"class":119},[102,123993,38688],{"class":187},[102,123995,122583],{"class":119},[102,123997,38688],{"class":187},[102,123999,122588],{"class":119},[14,124001,124002],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[93,124004,124006],{"className":38243,"code":124005,"language":38245,"meta":98,"style":98},"self.data.ctrl[:] = action\n",[83,124007,124008],{"__ignoreMap":98},[102,124009,124010,124012,124014,124016],{"class":104,"line":105},[102,124011,38688],{"class":187},[102,124013,122599],{"class":119},[102,124015,260],{"class":108},[102,124017,115335],{"class":119},[14,124019,124020],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[93,124022,124024],{"className":38243,"code":124023,"language":38245,"meta":98,"style":98},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[83,124025,124026,124042],{"__ignoreMap":98},[102,124027,124028,124030,124032,124034,124036,124038,124040],{"class":104,"line":105},[102,124029,11841],{"class":108},[102,124031,109366],{"class":119},[102,124033,33908],{"class":108},[102,124035,40308],{"class":187},[102,124037,380],{"class":119},[102,124039,38688],{"class":187},[102,124041,122620],{"class":119},[102,124043,124044,124047,124049,124051,124053],{"class":104,"line":116},[102,124045,124046],{"class":119},"    mujoco.mj_step(",[102,124048,38688],{"class":187},[102,124050,122446],{"class":119},[102,124052,38688],{"class":187},[102,124054,122451],{"class":119},[14,124056,124057,124058,124061,124062,124064,124065,36250],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[83,124059,124060],{},"frame_skip=5","，所以外部调用一次 ",[83,124063,121742],{},"，内部实际执行 5 次 ",[83,124066,109080],{},[93,124068,124070],{"className":38243,"code":124069,"language":38245,"meta":98,"style":98},"self.steps += 1\n",[83,124071,124072],{"__ignoreMap":98},[102,124073,124074,124076,124078,124080],{"class":104,"line":105},[102,124075,38688],{"class":187},[102,124077,121571],{"class":119},[102,124079,18244],{"class":108},[102,124081,63564],{"class":187},[14,124083,124084],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[93,124086,124088],{"className":38243,"code":124087,"language":38245,"meta":98,"style":98},"obs = self._get_obs()\nreward = self._get_reward()\n",[83,124089,124090,124100],{"__ignoreMap":98},[102,124091,124092,124094,124096,124098],{"class":104,"line":105},[102,124093,118719],{"class":119},[102,124095,260],{"class":108},[102,124097,46738],{"class":187},[102,124099,122662],{"class":119},[102,124101,124102,124104,124106,124108],{"class":104,"line":116},[102,124103,118870],{"class":119},[102,124105,260],{"class":108},[102,124107,46738],{"class":187},[102,124109,122673],{"class":119},[14,124111,124112],{},"计算新的观测和奖励。",[93,124114,124116],{"className":38243,"code":124115,"language":38245,"meta":98,"style":98},"dist = float(np.linalg.norm(tip - target))\n",[83,124117,124118],{"__ignoreMap":98},[102,124119,124120,124122,124124,124126,124128,124130],{"class":104,"line":105},[102,124121,119461],{"class":119},[102,124123,260],{"class":108},[102,124125,117662],{"class":187},[102,124127,122716],{"class":119},[102,124129,2833],{"class":108},[102,124131,122721],{"class":119},[14,124133,124134],{},"计算末端到目标的距离，并转换成 Python float。",[93,124136,124137],{"className":38243,"code":121542,"language":38245,"meta":98,"style":98},[83,124138,124139,124151],{"__ignoreMap":98},[102,124140,124141,124143,124145,124147,124149],{"class":104,"line":105},[102,124142,121549],{"class":119},[102,124144,260],{"class":108},[102,124146,121554],{"class":119},[102,124148,1208],{"class":108},[102,124150,121559],{"class":187},[102,124152,124153,124155,124157,124159,124161,124163,124165],{"class":104,"line":116},[102,124154,121564],{"class":119},[102,124156,260],{"class":108},[102,124158,46738],{"class":187},[102,124160,121571],{"class":119},[102,124162,10571],{"class":108},[102,124164,46738],{"class":187},[102,124166,121578],{"class":119},[14,124168,124169],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[93,124171,124173],{"className":38243,"code":124172,"language":38245,"meta":98,"style":98},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[83,124174,124175,124188],{"__ignoreMap":98},[102,124176,124177,124180,124182,124184,124186],{"class":104,"line":105},[102,124178,124179],{"class":119},"info ",[102,124181,260],{"class":108},[102,124183,13257],{"class":119},[102,124185,122767],{"class":278},[102,124187,122770],{"class":119},[102,124189,124190,124192],{"class":104,"line":116},[102,124191,2607],{"class":108},[102,124193,122777],{"class":119},[14,124195,124196,124199],{},[83,124197,124198],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[93,124201,124203],{"className":38243,"code":124202,"language":38245,"meta":98,"style":98},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[83,124204,124205,124214],{"__ignoreMap":98},[102,124206,124207,124210,124212],{"class":104,"line":105},[102,124208,124209],{"class":119},"env ",[102,124211,260],{"class":108},[102,124213,122807],{"class":119},[102,124215,124216,124218,124220,124222,124224,124226,124228],{"class":104,"line":116},[102,124217,121265],{"class":119},[102,124219,260],{"class":108},[102,124221,122817],{"class":119},[102,124223,122431],{"class":386},[102,124225,260],{"class":108},[102,124227,8423],{"class":187},[102,124229,390],{"class":119},[14,124231,124232,124233,124236],{},"创建环境并重置。",[83,124234,124235],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[93,124238,124240],{"className":38243,"code":124239,"language":38245,"meta":98,"style":98},"action = env.action_space.sample()\n",[83,124241,124242],{"__ignoreMap":98},[102,124243,124244,124246,124248],{"class":104,"line":105},[102,124245,115307],{"class":119},[102,124247,260],{"class":108},[102,124249,122886],{"class":119},[14,124251,124252],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[43,124254,110181],{"id":110180},[14,124256,113349],{},[93,124258,124261],{"className":124259,"code":124260,"language":6778,"meta":98},[6776],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[83,124262,124260],{"__ignoreMap":98},[14,124264,124265],{},"这个环境已经具备强化学习环境的基本结构。",[14,124267,124268],{},"主函数里使用随机动作：",[93,124270,124271],{"className":38243,"code":124239,"language":38245,"meta":98,"style":98},[83,124272,124273],{"__ignoreMap":98},[102,124274,124275,124277,124279],{"class":104,"line":105},[102,124276,115307],{"class":119},[102,124278,260],{"class":108},[102,124280,122886],{"class":119},[14,124282,124283],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[43,124285,110213],{"id":110212},[87,124287,124288,124291,124297,124306,124315,124324,124330],{},[62,124289,124290],{},"运行程序。",[62,124292,124293,124294,36250],{},"确认 ",[83,124295,124296],{},"obs.shape == (10,)",[62,124298,119046,124299,124302,124303,36250],{},[83,124300,124301],{},"env.action_space","，应类似 ",[83,124304,124305],{},"Box(-1.0, 1.0, (2,), float32)",[62,124307,113450,124308,124311,124312,36250],{},[83,124309,124310],{},"self.max_steps = 10","，确认环境会更快 ",[83,124313,124314],{},"truncated=True",[62,124316,110276,124317,110279,124320,124323],{},[83,124318,124319],{},"terminated = dist \u003C 0.05",[83,124321,124322],{},"dist \u003C 0.2","，观察是否更容易结束。",[62,124325,110276,124326,124329],{},[83,124327,124328],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[62,124331,124332,124333,124335,124336,124339],{},"在 ",[83,124334,124198],{}," 里加入 ",[83,124337,124338],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[43,124341,110318],{"id":110317},[48,124343,124345],{"id":124344},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,124347,124348,124349,124351],{},"Gymnasium 的 ",[83,124350,114999],{}," 返回 5 个值:",[93,124353,124355],{"className":38243,"code":124354,"language":38245,"meta":98,"style":98},"obs, reward, terminated, truncated, info\n",[83,124356,124357],{"__ignoreMap":98},[102,124358,124359],{"class":104,"line":105},[102,124360,124354],{"class":119},[14,124362,124363],{},"不是旧 Gym 的 4 个值。",[48,124365,124367,124370],{"id":124366},"datactrl-action-维度错误",[83,124368,124369],{},"data.ctrl[:] = action"," 维度错误",[14,124372,110388],{},[93,124374,124376],{"className":38243,"code":124375,"language":38245,"meta":98,"style":98},"print(self.model.nu)\nprint(action.shape)\n",[83,124377,124378,124389],{"__ignoreMap":98},[102,124379,124380,124382,124384,124386],{"class":104,"line":105},[102,124381,38280],{"class":187},[102,124383,380],{"class":119},[102,124385,38688],{"class":187},[102,124387,124388],{"class":119},".model.nu)\n",[102,124390,124391,124393],{"class":104,"line":116},[102,124392,38280],{"class":187},[102,124394,124395],{"class":119},"(action.shape)\n",[14,124397,124398],{},"两者必须匹配。",[48,124400,124402],{"id":124401},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,124404,110327],{},[93,124406,124408],{"className":38243,"code":124407,"language":38245,"meta":98,"style":98},"mujoco.mj_forward(self.model, self.data)\n",[83,124409,124410],{"__ignoreMap":98},[102,124411,124412,124415,124417,124419,124421],{"class":104,"line":105},[102,124413,124414],{"class":119},"mujoco.mj_forward(",[102,124416,38688],{"class":187},[102,124418,122446],{"class":119},[102,124420,38688],{"class":187},[102,124422,122451],{"class":119},[48,124424,124426,124428],{"id":124425},"observation_space-维度和-obs-不一致",[83,124427,121465],{}," 维度和 obs 不一致",[14,124430,110440],{},[93,124432,124434],{"className":38243,"code":124433,"language":38245,"meta":98,"style":98},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[83,124435,124436,124446,124453],{"__ignoreMap":98},[102,124437,124438,124440,124442,124444],{"class":104,"line":105},[102,124439,118719],{"class":119},[102,124441,260],{"class":108},[102,124443,46738],{"class":187},[102,124445,122662],{"class":119},[102,124447,124448,124450],{"class":104,"line":116},[102,124449,38280],{"class":187},[102,124451,124452],{"class":119},"(obs.shape)\n",[102,124454,124455,124457,124459,124461],{"class":104,"line":123},[102,124456,38280],{"class":187},[102,124458,380],{"class":119},[102,124460,38688],{"class":187},[102,124462,124463],{"class":119},".observation_space.shape)\n",[14,124465,124466],{},"两者必须一致。本章观测是：",[93,124468,124471],{"className":124469,"code":124470,"language":6778,"meta":98},[6776],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[83,124472,124470],{"__ignoreMap":98},[48,124474,124476],{"id":124475},"action-超过范围","action 超过范围",[14,124478,124479],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[93,124481,124482],{"className":38243,"code":123981,"language":38245,"meta":98,"style":98},[83,124483,124484],{"__ignoreMap":98},[102,124485,124486,124488,124490,124492,124494,124496,124498],{"class":104,"line":105},[102,124487,115307],{"class":119},[102,124489,260],{"class":108},[102,124491,115312],{"class":119},[102,124493,38688],{"class":187},[102,124495,122583],{"class":119},[102,124497,38688],{"class":187},[102,124499,122588],{"class":119},[14,124501,124502,124503,36250],{},"这能避免无效动作直接写入 ",[83,124504,108941],{},[48,124506,124508],{"id":124507},"忘记返回-info","忘记返回 info",[14,124510,124348,124511,108883,124513,124515],{},[83,124512,77921],{},[83,124514,114999],{}," 都会返回 info：",[93,124517,124518],{"className":38243,"code":121258,"language":38245,"meta":98,"style":98},[83,124519,124520,124528],{"__ignoreMap":98},[102,124521,124522,124524,124526],{"class":104,"line":105},[102,124523,121265],{"class":119},[102,124525,260],{"class":108},[102,124527,121270],{"class":119},[102,124529,124530,124532,124534],{"class":104,"line":116},[102,124531,121275],{"class":119},[102,124533,260],{"class":108},[102,124535,121280],{"class":119},[14,124537,124538,124539,36250],{},"即使暂时没有额外信息，也返回 ",[83,124540,40324],{},[43,124542,124544],{"id":124543},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,124546,124547],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[87,124549,124550,124553,124556,124559,124562,124565],{},[62,124551,124552],{},"更稳定的 reward。",[62,124554,124555],{},"合理的 episode 长度。",[62,124557,124558],{},"可重复的随机目标采样。",[62,124560,124561],{},"render 接口。",[62,124563,124564],{},"环境注册代码。",[62,124566,124567],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,124569,124570],{},"如果只是自己写训练循环，最小形式是：",[93,124572,124574],{"className":38243,"code":124573,"language":38245,"meta":98,"style":98},"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",[83,124575,124576,124584,124600,124604,124620,124629,124638,124648],{"__ignoreMap":98},[102,124577,124578,124580,124582],{"class":104,"line":105},[102,124579,124209],{"class":119},[102,124581,260],{"class":108},[102,124583,122807],{"class":119},[102,124585,124586,124588,124590,124592,124594,124596,124598],{"class":104,"line":116},[102,124587,121265],{"class":119},[102,124589,260],{"class":108},[102,124591,122817],{"class":119},[102,124593,122431],{"class":386},[102,124595,260],{"class":108},[102,124597,8423],{"class":187},[102,124599,390],{"class":119},[102,124601,124602],{"class":104,"line":123},[102,124603,652],{"emptyLinePlaceholder":651},[102,124605,124606,124608,124610,124612,124614,124616,124618],{"class":104,"line":130},[102,124607,11841],{"class":108},[102,124609,109366],{"class":119},[102,124611,33908],{"class":108},[102,124613,40308],{"class":187},[102,124615,380],{"class":119},[102,124617,15205],{"class":187},[102,124619,38651],{"class":119},[102,124621,124622,124625,124627],{"class":104,"line":136},[102,124623,124624],{"class":119},"    action ",[102,124626,260],{"class":108},[102,124628,122886],{"class":119},[102,124630,124631,124634,124636],{"class":104,"line":142},[102,124632,124633],{"class":119},"    obs, reward, terminated, truncated, info ",[102,124635,260],{"class":108},[102,124637,121280],{"class":119},[102,124639,124640,124642,124644,124646],{"class":104,"line":148},[102,124641,2343],{"class":108},[102,124643,122952],{"class":119},[102,124645,122955],{"class":108},[102,124647,122958],{"class":119},[102,124649,124650,124653,124655],{"class":104,"line":157},[102,124651,124652],{"class":119},"        obs, info ",[102,124654,260],{"class":108},[102,124656,121270],{"class":119},[43,124658,124660],{"id":124659},"_9本章小结","9.本章小结",[14,124662,124663],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[93,124665,124668],{"className":124666,"code":124667,"language":6778,"meta":98},[6776],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[83,124669,124667],{"__ignoreMap":98},[14,124671,124672],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[8955,124674,124675],{},"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":98,"searchDepth":116,"depth":116,"links":124677},[124678,124679,124680,124687,124691,124692,124693,124703,124704],{"id":108511,"depth":116,"text":108512},{"id":108634,"depth":116,"text":108635},{"id":108909,"depth":116,"text":108910,"children":124681},[124682,124684,124686],{"id":121489,"depth":123,"text":124683},"terminated 和 truncated 的区别",{"id":121592,"depth":123,"text":124685},"observation_space 和 action_space",{"id":121719,"depth":123,"text":121720},{"id":109117,"depth":116,"text":109118,"children":124688},[124689,124690],{"id":109437,"depth":123,"text":109437},{"id":109573,"depth":123,"text":109573},{"id":110180,"depth":116,"text":110181},{"id":110212,"depth":116,"text":110213},{"id":110317,"depth":116,"text":110318,"children":124694},[124695,124696,124698,124699,124701,124702],{"id":124344,"depth":123,"text":124345},{"id":124366,"depth":123,"text":124697},"data.ctrl[:] = action 维度错误",{"id":124401,"depth":123,"text":124402},{"id":124425,"depth":123,"text":124700},"observation_space 维度和 obs 不一致",{"id":124475,"depth":123,"text":124476},{"id":124507,"depth":123,"text":124508},{"id":124543,"depth":116,"text":124544},{"id":124659,"depth":116,"text":124660},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":121242,"description":98},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":124711,"title":124712,"body":124713,"description":125136,"extension":8978,"meta":125137,"navigation":651,"path":125138,"seo":125139,"stem":125140,"__hash__":125141},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":124714,"toc":125126},[124715,124719,124722,124725,124745,124751,124757,124767,124770,124773,124793,124796,124800,124803,124809,124812,124826,124829,124832,124906,124909,124915,124918,124941,124944,124994,124997,125003,125006,125009,125012,125031,125034,125040,125043,125046,125049,125069,125072,125075,125078,125123],[10,124716,124718],{"id":124717},"mujoco-学习","MuJoCo 学习",[14,124720,124721],{},"初版",[14,124723,124724],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[87,124726,124727,124730,124733,124742],{},[62,124728,124729],{},"MuJoCo 模型文件在描述什么。",[62,124731,124732],{},"Python 代码怎样读取和推进仿真。",[62,124734,124735,9250,124737,9250,124739,124741],{},[83,124736,111895],{},[83,124738,112225],{},[83,124740,112228],{}," 这些数组为什么重要。",[62,124743,124744],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,124746,124747,124748,124750],{},"默认环境为 Fedora 44、Python >= 3.10、",[83,124749,108892],{}," 官方 Python bindings。",[14,124752,124753,124754,124756],{},"注意：本文禁止使用 ",[83,124755,108877],{},"。所有示例均使用：",[93,124758,124759],{"className":38243,"code":109443,"language":38245,"meta":98,"style":98},[83,124760,124761],{"__ignoreMap":98},[102,124762,124763,124765],{"class":104,"line":105},[102,124764,38257],{"class":108},[102,124766,109166],{"class":119},[43,124768,124769],{"id":124769},"适合谁阅读",[14,124771,124772],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[87,124774,124775,124778,124781,124784],{},[62,124776,124777],{},"没学过 MuJoCo，只会一点 Python。",[62,124779,124780],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[62,124782,124783],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[62,124785,124786,124787,124789,124790,124792],{},"以前接触过 ",[83,124788,108877],{},"，现在想迁移到官方 ",[83,124791,108886],{}," Python bindings。",[14,124794,124795],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[43,124797,124799],{"id":124798},"mujoco-到底是什么","MuJoCo 到底是什么",[14,124801,124802],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[93,124804,124807],{"className":124805,"code":124806,"language":6778,"meta":98},[6776],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[83,124808,124806],{"__ignoreMap":98},[14,124810,124811],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[87,124813,124814,124817,124820,124823],{},[62,124815,124816],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[62,124818,124819],{},"快速测试控制算法，不必一开始就上真实机器人。",[62,124821,124822],{},"生成强化学习环境。",[62,124824,124825],{},"采集状态、动作、图像、奖励等训练数据。",[43,124827,124828],{"id":124828},"学习前的心智模型",[14,124830,124831],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[9177,124833,124834,124846],{},[9180,124835,124836],{},[9183,124837,124838,124841,124844],{},[9186,124839,124840],{"align":31600},"部分",[9186,124842,124843],{"align":31600},"负责什么",[9186,124845,6783],{"align":31600},[9223,124847,124848,124859,124871,124883,124895],{},[9183,124849,124850,124853,124856],{},[9228,124851,124852],{"align":31600},"MJCF XML",[9228,124854,124855],{"align":31600},"定义世界和机器人结构",[9228,124857,124858],{"align":31600},"地面、盒子、关节、电机、摄像头",[9183,124860,124861,124865,124868],{},[9228,124862,124863],{"align":31600},[83,124864,108574],{},[9228,124866,124867],{"align":31600},"编译后的静态模型",[9228,124869,124870],{"align":31600},"有几个关节、有几个电机、时间步长是多少",[9183,124872,124873,124877,124880],{},[9228,124874,124875],{"align":31600},[83,124876,108584],{},[9228,124878,124879],{"align":31600},"运行中的动态状态",[9228,124881,124882],{"align":31600},"当前时间、位置、速度、电机输入",[9183,124884,124885,124889,124892],{},[9228,124886,124887],{"align":31600},[83,124888,109080],{},[9228,124890,124891],{"align":31600},"推进一步物理仿真",[9228,124893,124894],{"align":31600},"根据重力、力、碰撞更新状态",[9183,124896,124897,124900,124903],{},[9228,124898,124899],{"align":31600},"Viewer \u002F Renderer",[9228,124901,124902],{"align":31600},"把仿真显示出来",[9228,124904,124905],{"align":31600},"打开窗口或保存图片",[14,124907,124908],{},"一句话总结：",[93,124910,124913],{"className":124911,"code":124912,"language":6778,"meta":98},[6776],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[83,124914,124912],{"__ignoreMap":98},[14,124916,124917],{},"参考来源：",[59,124919,124920,124927,124934],{},[62,124921,124922,124923],{},"MuJoCo Python 官方文档：",[9275,124924,124925],{"href":124925,"rel":124926},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[31729],[62,124928,124929,124930],{},"MuJoCo XML Reference：",[9275,124931,124932],{"href":124932,"rel":124933},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[31729],[62,124935,124936,124937],{},"MuJoCo Overview：",[9275,124938,124939],{"href":124939,"rel":124940},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[31729],[43,124942,124943],{"id":124943},"章节目录",[87,124945,124946,124952,124958,124964,124970,124976,124982,124988],{},[62,124947,124948],{},[9275,124949,124951],{"href":124950},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[62,124953,124954],{},[9275,124955,124957],{"href":124956},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[62,124959,124960],{},[9275,124961,124963],{"href":124962},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[62,124965,124966],{},[9275,124967,124969],{"href":124968},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[62,124971,124972],{},[9275,124973,124975],{"href":124974},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[62,124977,124978],{},[9275,124979,124981],{"href":124980},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[62,124983,124984],{},[9275,124985,124987],{"href":124986},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[62,124989,124990],{},[9275,124991,124993],{"href":124992},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[43,124995,124996],{"id":124996},"推荐学习路线",[93,124998,125001],{"className":124999,"code":125000,"language":6778,"meta":98},[6776],"环境安装\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",[83,125002,125000],{"__ignoreMap":98},[14,125004,125005],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[43,125007,125008],{"id":125008},"建议的目录结构",[14,125010,125011],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[93,125013,125015],{"className":31686,"code":125014,"language":31688,"meta":98,"style":98},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[83,125016,125017,125025],{"__ignoreMap":98},[102,125018,125019,125021,125023],{"class":104,"line":105},[102,125020,109131],{"class":112},[102,125022,37081],{"class":187},[102,125024,109136],{"class":278},[102,125026,125027,125029],{"class":104,"line":116},[102,125028,109141],{"class":187},[102,125030,109136],{"class":278},[14,125032,125033],{},"每一章的代码都单独保存：",[93,125035,125038],{"className":125036,"code":125037,"language":6778,"meta":98},[6776],"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",[83,125039,125037],{"__ignoreMap":98},[14,125041,125042],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[43,125044,125045],{"id":125045},"学习方法",[14,125047,125048],{},"每章建议按这个顺序操作：",[87,125050,125051,125054,125057,125060,125063,125066],{},[62,125052,125053],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[62,125055,125056],{},"复制最小可运行代码，保存成指定文件。",[62,125058,125059],{},"运行代码，确认没有报错。",[62,125061,125062],{},"对照“运行结果说明”理解输出。",[62,125064,125065],{},"做“验证步骤”，主动改一两个参数。",[62,125067,125068],{},"遇到报错先看“常见错误与解决方案”。",[14,125070,125071],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[43,125073,125074],{"id":125074},"全局排错顺序",[14,125076,125077],{},"遇到问题时，按下面顺序查：",[87,125079,125080,125086,125092,125097,125100,125103,125110,125120],{},[62,125081,125082,125083],{},"Python 环境是否激活：",[83,125084,125085],{},"which python",[62,125087,125088,125089],{},"MuJoCo 是否能导入：",[83,125090,125091],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[62,125093,125094,125095],{},"是否误装了 ",[83,125096,108877],{},[62,125098,125099],{},"XML 标签是否闭合、属性是否拼写正确",[62,125101,125102],{},"actuator 引用的 joint 名字是否存在",[62,125104,125105,125107,125108],{},[83,125106,108941],{}," 的长度是否等于 ",[83,125109,110023],{},[62,125111,113450,125112,90404,125114,125116,125117],{},[83,125113,111895],{},[83,125115,112225],{}," 后是否调用了 ",[83,125118,125119],{},"mujoco.mj_forward",[62,125121,125122],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[8955,125124,125125],{},"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":98,"searchDepth":116,"depth":116,"links":125127},[125128,125129,125130,125131,125132,125133,125134,125135],{"id":124769,"depth":116,"text":124769},{"id":124798,"depth":116,"text":124799},{"id":124828,"depth":116,"text":124828},{"id":124943,"depth":116,"text":124943},{"id":124996,"depth":116,"text":124996},{"id":125008,"depth":116,"text":125008},{"id":125045,"depth":116,"text":125045},{"id":125074,"depth":116,"text":125074},"仿真搭建。",{"category":31242},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":124712,"description":125136},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":125143,"title":125144,"body":125145,"description":31240,"extension":8978,"meta":125600,"navigation":651,"path":125601,"seo":125602,"stem":125603,"__hash__":125604},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":125146,"toc":125598},[125147,125150,125153,125159,125595],[10,125148,125144],{"id":125149},"_1-最常用的基本操作更新",[14,125151,125152],{},"装linux系统教程：",[14,125154,125155],{},[9275,125156,125157],{"href":125157,"rel":125158},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[31729],[93,125160,125164],{"className":125161,"code":125162,"language":125163,"meta":98,"style":98},"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",[83,125165,125166,125171,125176,125185,125190,125199,125204,125224,125229,125240,125245,125254,125259,125287,125292,125311,125316,125335,125339,125344,125360,125364,125369,125399,125403,125408,125424,125428,125433,125448,125452,125457,125473,125477,125482,125494,125506,125510,125515,125532,125536,125541,125559,125563,125568,125577,125581,125586],{"__ignoreMap":98},[102,125167,125168],{"class":104,"line":105},[102,125169,125170],{"class":126},"#更新相关的知识\n",[102,125172,125173],{"class":104,"line":116},[102,125174,125175],{"class":126},"# 更新软件包列表（从服务器获取最新软件信息）\n",[102,125177,125178,125180,125183],{"class":104,"line":123},[102,125179,32441],{"class":112},[102,125181,125182],{"class":278}," apt",[102,125184,34107],{"class":278},[102,125186,125187],{"class":104,"line":130},[102,125188,125189],{"class":126},"# 升级所有可更新的软件包（不删除旧包）\n",[102,125191,125192,125194,125196],{"class":104,"line":136},[102,125193,32441],{"class":112},[102,125195,125182],{"class":278},[102,125197,125198],{"class":278}," upgrade\n",[102,125200,125201],{"class":104,"line":142},[102,125202,125203],{"class":126},"#更新和升级软件包\n",[102,125205,125206,125208,125210,125213,125215,125217,125219,125222],{"class":104,"line":148},[102,125207,32441],{"class":112},[102,125209,125182],{"class":278},[102,125211,125212],{"class":278}," update",[102,125214,34055],{"class":119},[102,125216,32441],{"class":112},[102,125218,125182],{"class":278},[102,125220,125221],{"class":278}," upgrade",[102,125223,108846],{"class":187},[102,125225,125226],{"class":104,"line":157},[102,125227,125228],{"class":126},"#列出可更新的软件包及版本信息\n",[102,125230,125231,125234,125237],{"class":104,"line":163},[102,125232,125233],{"class":112},"apt",[102,125235,125236],{"class":278}," list",[102,125238,125239],{"class":187}," --upgradable\n",[102,125241,125242],{"class":104,"line":175},[102,125243,125244],{"class":126},"#彻底升级（处理依赖关系，可能删除旧包）\n",[102,125246,125247,125249,125251],{"class":104,"line":181},[102,125248,32441],{"class":112},[102,125250,125182],{"class":278},[102,125252,125253],{"class":278}," full-upgrade\n",[102,125255,125256],{"class":104,"line":202},[102,125257,125258],{"class":126},"#设置指定版本\n",[102,125260,125261,125263,125265,125267,125269,125272,125274,125276,125278,125280,125283,125285],{"class":104,"line":208},[102,125262,32441],{"class":112},[102,125264,125182],{"class":278},[102,125266,31698],{"class":278},[102,125268,36767],{"class":108},[102,125270,125271],{"class":278},"package_nam",[102,125273,9116],{"class":119},[102,125275,1219],{"class":108},[102,125277,260],{"class":278},[102,125279,1208],{"class":108},[102,125281,125282],{"class":278},"version_numbe",[102,125284,9695],{"class":119},[102,125286,59172],{"class":108},[102,125288,125289],{"class":104,"line":214},[102,125290,125291],{"class":126},"#只安装软件包不升级\n",[102,125293,125294,125296,125298,125300,125302,125304,125306,125308],{"class":104,"line":225},[102,125295,32441],{"class":112},[102,125297,125182],{"class":278},[102,125299,31698],{"class":278},[102,125301,36767],{"class":108},[102,125303,125271],{"class":278},[102,125305,9116],{"class":119},[102,125307,1219],{"class":108},[102,125309,125310],{"class":187}," --no-upgrade\n",[102,125312,125313],{"class":104,"line":230},[102,125314,125315],{"class":126},"#只升级，不存在就不安装\n",[102,125317,125318,125320,125322,125324,125326,125328,125330,125332],{"class":104,"line":236},[102,125319,32441],{"class":112},[102,125321,125182],{"class":278},[102,125323,31698],{"class":278},[102,125325,36767],{"class":108},[102,125327,125271],{"class":278},[102,125329,9116],{"class":119},[102,125331,1219],{"class":108},[102,125333,125334],{"class":187}," --only-upgrade\n",[102,125336,125337],{"class":104,"line":242},[102,125338,652],{"emptyLinePlaceholder":651},[102,125340,125341],{"class":104,"line":248},[102,125342,125343],{"class":126},"#安装指定的软件命令\n",[102,125345,125346,125348,125350,125352,125354,125356,125358],{"class":104,"line":254},[102,125347,32441],{"class":112},[102,125349,125182],{"class":278},[102,125351,31698],{"class":278},[102,125353,36767],{"class":108},[102,125355,125271],{"class":278},[102,125357,9116],{"class":119},[102,125359,59172],{"class":108},[102,125361,125362],{"class":104,"line":269},[102,125363,652],{"emptyLinePlaceholder":651},[102,125365,125366],{"class":104,"line":298},[102,125367,125368],{"class":126},"#安装多个软件包\n",[102,125370,125371,125373,125375,125377,125379,125382,125385,125387,125389,125392,125394,125396],{"class":104,"line":502},[102,125372,32441],{"class":112},[102,125374,125182],{"class":278},[102,125376,31698],{"class":278},[102,125378,36767],{"class":108},[102,125380,125381],{"class":278},"package_",[102,125383,125384],{"class":108},"1>",[102,125386,36767],{"class":108},[102,125388,125381],{"class":278},[102,125390,125391],{"class":108},"2>",[102,125393,36767],{"class":108},[102,125395,125381],{"class":278},[102,125397,125398],{"class":108},"3>\n",[102,125400,125401],{"class":104,"line":507},[102,125402,652],{"emptyLinePlaceholder":651},[102,125404,125405],{"class":104,"line":512},[102,125406,125407],{"class":126},"#更新指定的软件命令\n",[102,125409,125410,125412,125414,125416,125418,125420,125422],{"class":104,"line":521},[102,125411,32441],{"class":112},[102,125413,125182],{"class":278},[102,125415,125212],{"class":278},[102,125417,36767],{"class":108},[102,125419,125271],{"class":278},[102,125421,9116],{"class":119},[102,125423,59172],{"class":108},[102,125425,125426],{"class":104,"line":526},[102,125427,652],{"emptyLinePlaceholder":651},[102,125429,125430],{"class":104,"line":532},[102,125431,125432],{"class":126},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[102,125434,125435,125437,125440,125442,125444,125446],{"class":104,"line":538},[102,125436,125233],{"class":112},[102,125438,125439],{"class":278}," show",[102,125441,36767],{"class":108},[102,125443,125271],{"class":278},[102,125445,9116],{"class":119},[102,125447,59172],{"class":108},[102,125449,125450],{"class":104,"line":555},[102,125451,652],{"emptyLinePlaceholder":651},[102,125453,125454],{"class":104,"line":570},[102,125455,125456],{"class":126},"#删除软件包命令\n",[102,125458,125459,125461,125463,125465,125467,125469,125471],{"class":104,"line":581},[102,125460,32441],{"class":112},[102,125462,125182],{"class":278},[102,125464,33944],{"class":278},[102,125466,36767],{"class":108},[102,125468,125271],{"class":278},[102,125470,9116],{"class":119},[102,125472,59172],{"class":108},[102,125474,125475],{"class":104,"line":819},[102,125476,652],{"emptyLinePlaceholder":651},[102,125478,125479],{"class":104,"line":828},[102,125480,125481],{"class":126},"# 清理旧版本和缓存（释放磁盘空间）\n",[102,125483,125484,125486,125488,125491],{"class":104,"line":837},[102,125485,32441],{"class":112},[102,125487,125182],{"class":278},[102,125489,125490],{"class":278}," autoremove",[102,125492,125493],{"class":126},"  # 删除不再需要的依赖和库文件\n",[102,125495,125496,125498,125500,125503],{"class":104,"line":842},[102,125497,32441],{"class":112},[102,125499,125182],{"class":278},[102,125501,125502],{"class":278}," clean",[102,125504,125505],{"class":126},"       # 清理下载的缓存包\n",[102,125507,125508],{"class":104,"line":855},[102,125509,652],{"emptyLinePlaceholder":651},[102,125511,125512],{"class":104,"line":860},[102,125513,125514],{"class":126},"#移除软件包及配置文件\n",[102,125516,125517,125519,125521,125524,125526,125528,125530],{"class":104,"line":871},[102,125518,32441],{"class":112},[102,125520,125182],{"class":278},[102,125522,125523],{"class":278}," purge",[102,125525,36767],{"class":108},[102,125527,125271],{"class":278},[102,125529,9116],{"class":119},[102,125531,59172],{"class":108},[102,125533,125534],{"class":104,"line":1359},[102,125535,652],{"emptyLinePlaceholder":651},[102,125537,125538],{"class":104,"line":1368},[102,125539,125540],{"class":126},"#查找软件包命令\n",[102,125542,125543,125545,125547,125550,125552,125555,125557],{"class":104,"line":1373},[102,125544,32441],{"class":112},[102,125546,125182],{"class":278},[102,125548,125549],{"class":278}," search",[102,125551,36767],{"class":108},[102,125553,125554],{"class":278},"keywor",[102,125556,9349],{"class":119},[102,125558,59172],{"class":108},[102,125560,125561],{"class":104,"line":1378},[102,125562,652],{"emptyLinePlaceholder":651},[102,125564,125565],{"class":104,"line":1384},[102,125566,125567],{"class":126},"#列出所有已安装的包\n",[102,125569,125570,125572,125574],{"class":104,"line":1398},[102,125571,125233],{"class":112},[102,125573,125236],{"class":278},[102,125575,125576],{"class":187}," --installed\n",[102,125578,125579],{"class":104,"line":1424},[102,125580,652],{"emptyLinePlaceholder":651},[102,125582,125583],{"class":104,"line":1429},[102,125584,125585],{"class":126},"#列出所有已安装的包的版本信息\n",[102,125587,125588,125590,125592],{"class":104,"line":1435},[102,125589,125233],{"class":112},[102,125591,125236],{"class":278},[102,125593,125594],{"class":187}," --all-versions\n",[8955,125596,125597],{},"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":98,"searchDepth":116,"depth":116,"links":125599},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":125144,"description":31240},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":125606,"title":125607,"body":125608,"description":31240,"extension":8978,"meta":126349,"navigation":651,"path":126350,"seo":126351,"stem":126352,"__hash__":126353},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":125609,"toc":126336},[125610,125613,125617,125620,125626,125630,125634,125640,125645,125650,125655,125660,125665,125668,125671,125674,125677,125681,125684,125689,125692,125697,125700,125705,125712,125715,125718,125721,125724,125727,125738,125742,125746,125751,125756,125760,125765,125769,125774,125778,125782,125787,125790,125835,125840,125844,125848,125853,125859,125864,125874,125879,125889,125894,125899,125926,125930,125933,125938,125941,125966,125970,125975,125978,125983,125988,126008,126013,126016,126031,126035,126088,126091,126096,126100,126103,126118,126121,126124,126129,126133,126137,126140,126144,126148,126151,126156,126161,126165,126172,126180,126183,126190,126195,126200,126203,126208,126215,126220,126227,126231,126233,126238,126242,126245,126248,126253,126256,126261,126264,126269,126274,126279,126283,126288,126292,126333],[10,125611,125607],{"id":125612},"_2-linux装机教程",[43,125614,125616],{"id":125615},"_21-实体机","2.1 实体机",[14,125618,125619],{},"使用清华源：（Ubuntu24.04）",[14,125621,125622],{},[9275,125623,125624],{"href":125624,"rel":125625},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[31729],[43,125627,125629],{"id":125628},"_22-普通虚拟机","2.2 普通虚拟机",[48,125631,125633],{"id":125632},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,125635,125636],{},[9275,125637,125638],{"href":125638,"rel":125639},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[31729],[14,125641,125642],{},[6750,125643],{"alt":98,"src":125644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,125646,125647],{},[6750,125648],{"alt":98,"src":125649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,125651,125652],{},[6750,125653],{"alt":98,"src":125654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,125656,125657],{},[6750,125658],{"alt":98,"src":125659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,125661,125662],{},[6750,125663],{"alt":98,"src":125664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,125666,125667],{},"内存4G（4096MB）；",[14,125669,125670],{},"CPU给4个核；",[14,125672,125673],{},"硬盘动态分配60G；",[14,125675,125676],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[48,125678,125680],{"id":125679},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,125682,125683],{},"按照1.1的步骤下载Ubuntu",[14,125685,125686],{},[6750,125687],{"alt":98,"src":125688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,125690,125691],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,125693,125694],{},[6750,125695],{"alt":98,"src":125696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,125698,125699],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,125701,125702],{},[6750,125703],{"alt":98,"src":125704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,125706,125707,125708,125711],{},"选择“正常安装”(找不到都用Alt+F7)， ",[18,125709,125710],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,125713,125714],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,125716,125717],{},"将改动写入磁盘吗 继续",[14,125719,125720],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,125722,125723],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,125725,125726],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,125728,125729,125730,125733,125734,125737],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[18,125731,125732],{},"除了"," 选不发送系统信息与不升级之外， ",[18,125735,125736],{},"其它"," 都跳过或前进）",[48,125739,125741],{"id":125740},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[7601,125743,125745],{"id":125744},"_2231-全屏","2.2.3.1 全屏",[14,125747,125748],{},[6750,125749],{"alt":98,"src":125750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,125752,125753],{},[6750,125754],{"alt":98,"src":125755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[7601,125757,125759],{"id":125758},"_2232-文件交换","2.2.3.2 文件交换",[14,125761,125762],{},[6750,125763],{"alt":98,"src":125764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[7601,125766,125768],{"id":125767},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,125770,125771],{},[6750,125772],{"alt":98,"src":125773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[43,125775,125777],{"id":125776},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[48,125779,125781],{"id":125780},"_231-简介与优缺点","2.3.1 简介与优缺点",[87,125783,125784],{},[62,125785,125786],{},"什么情况下推荐？",[14,125788,125789],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[87,125791,125792],{"start":116},[62,125793,125794,125795],{},"优缺点：",[87,125796,125797,125827],{},[62,125798,125799,125800],{},"优点：",[87,125801,125802,125805,125812,125815,125818,125821,125824],{},[62,125803,125804],{},"WSL2是最好的Linux发行版;(bushi)",[62,125806,125807,125808,125811],{},"性能损耗极低。且比在Windows上跑深度性能 ",[18,125809,125810],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[62,125813,125814],{},"非常方便调用USB设备，可以USB直通;",[62,125816,125817],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[62,125819,125820],{},"非常方便Win与WSL2互相传文件等协同操作;",[62,125822,125823],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[62,125825,125826],{},"非常方便使用Windows的VScode远程开发;",[62,125828,125829,125830],{},"缺点：",[87,125831,125832],{},[62,125833,125834],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,125836,125837],{},[6750,125838],{"alt":98,"src":125839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[48,125841,125843],{"id":125842},"_232-安装教程","2.3.2 安装教程",[7601,125845,125847],{"id":125846},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[87,125849,125850],{},[62,125851,125852],{},"方法一(图形界面)",[14,125854,125855,125856,32483],{},"用Win+R输入",[83,125857,125858],{},"appwiz.cpl",[14,125860,125861],{},[6750,125862],{"alt":98,"src":125863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,125865,125866,125867,125870,125871,34338],{},"点击OK进入 ",[18,125868,125869],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[18,125872,125873],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,125875,125876],{},[6750,125877],{"alt":98,"src":125878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,125880,125881,125882,108883,125885,125888],{},"选择 ",[18,125883,125884],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[18,125886,125887],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,125890,125891],{},[6750,125892],{"alt":98,"src":125893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[87,125895,125896],{"start":116},[62,125897,125898],{},"方法二(命令行)",[93,125900,125904],{"className":125901,"code":125902,"language":125903,"meta":98,"style":98},"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",[83,125905,125906,125911,125916,125921],{"__ignoreMap":98},[102,125907,125908],{"class":104,"line":105},[102,125909,125910],{},"# 开启 Linux 子系统\n",[102,125912,125913],{"class":104,"line":116},[102,125914,125915],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[102,125917,125918],{"class":104,"line":123},[102,125919,125920],{},"# 开启虚拟机平台\n",[102,125922,125923],{"class":104,"line":130},[102,125924,125925],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[7601,125927,125929],{"id":125928},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,125931,125932],{},"用管理员权限打开powershell",[14,125934,125935],{},[6750,125936],{"alt":98,"src":125937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,125939,125940],{},"升级WSL并设置默认版本为WSL2",[93,125942,125944],{"className":125901,"code":125943,"language":125903,"meta":98,"style":98},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[83,125945,125946,125951,125956,125961],{"__ignoreMap":98},[102,125947,125948],{"class":104,"line":105},[102,125949,125950],{},"# 更新 wsl\n",[102,125952,125953],{"class":104,"line":116},[102,125954,125955],{},"wsl --update\n",[102,125957,125958],{"class":104,"line":123},[102,125959,125960],{},"# 将 wsl 版本设置为 wsl2\n",[102,125962,125963],{"class":104,"line":130},[102,125964,125965],{},"wsl --set-default-version 2\n",[7601,125967,125969],{"id":125968},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[87,125971,125972],{},[62,125973,125974],{},"方式一(商店下载)",[14,125976,125977],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,125979,125980],{},[6750,125981],{"alt":98,"src":125982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[87,125984,125985],{"start":116},[62,125986,125987],{},"方式二(命令行安装)",[93,125989,125991],{"className":125901,"code":125990,"language":125903,"meta":98,"style":98},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[83,125992,125993,125998,126003],{"__ignoreMap":98},[102,125994,125995],{"class":104,"line":105},[102,125996,125997],{},"# 列出可安装的 Linux 版本\n",[102,125999,126000],{"class":104,"line":116},[102,126001,126002],{},"#（需要科学手段）\n",[102,126004,126005],{"class":104,"line":123},[102,126006,126007],{},"wsl --list --online\n",[14,126009,126010],{},[6750,126011],{"alt":98,"src":126012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,126014,126015],{},"选择对应发行版并安装",[93,126017,126019],{"className":125901,"code":126018,"language":125903,"meta":98,"style":98},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[83,126020,126021,126026],{"__ignoreMap":98},[102,126022,126023],{"class":104,"line":105},[102,126024,126025],{},"# Ubuntu安装完毕后需要重启系统\n",[102,126027,126028],{"class":104,"line":116},[102,126029,126030],{},"wsl --install -d Ubuntu-24.04\n",[7601,126032,126034],{"id":126033},"_2324-查看系统状态","2.3.2.4 查看系统状态",[93,126036,126038],{"className":125901,"code":126037,"language":125903,"meta":98,"style":98},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[83,126039,126040,126045,126050,126055,126060,126064,126068,126073,126078,126083],{"__ignoreMap":98},[102,126041,126042],{"class":104,"line":105},[102,126043,126044],{},"# 查看 wsl\n",[102,126046,126047],{"class":104,"line":116},[102,126048,126049],{},"wsl -l\n",[102,126051,126052],{"class":104,"line":123},[102,126053,126054],{},"# 查看 wsl 运行版本或模式\n",[102,126056,126057],{"class":104,"line":130},[102,126058,126059],{},"wsl -l -v\n",[102,126061,126062],{"class":104,"line":136},[102,126063,652],{"emptyLinePlaceholder":651},[102,126065,126066],{"class":104,"line":142},[102,126067,652],{"emptyLinePlaceholder":651},[102,126069,126070],{"class":104,"line":148},[102,126071,126072],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[102,126074,126075],{"class":104,"line":157},[102,126076,126077],{},"wsl --set-version \u003Cdistro> 2\n",[102,126079,126080],{"class":104,"line":163},[102,126081,126082],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[102,126084,126085],{"class":104,"line":175},[102,126086,126087],{},"wsl --unregister \u003Cdistro>\n",[14,126089,126090],{},"输出Version为2即正常",[14,126092,126093],{},[6750,126094],{"alt":98,"src":126095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[7601,126097,126099],{"id":126098},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,126101,126102],{},"直接在Powershell里输入wsl命令进入子系统",[93,126104,126106],{"className":125901,"code":126105,"language":125903,"meta":98,"style":98},"# 进入子系统\nwsl\n",[83,126107,126108,126113],{"__ignoreMap":98},[102,126109,126110],{"class":104,"line":105},[102,126111,126112],{},"# 进入子系统\n",[102,126114,126115],{"class":104,"line":116},[102,126116,126117],{},"wsl\n",[14,126119,126120],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,126122,126123],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,126125,126126],{},[6750,126127],{"alt":98,"src":126128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[48,126130,126132],{"id":126131},"_233-配置各种环境","2.3.3 配置各种环境",[7601,126134,126136],{"id":126135},"_2331-换源","2.3.3.1 换源",[14,126138,126139],{},"(同实体机LINUX，往下找教程)",[7601,126141,126143],{"id":126142},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[8518,126145,126147],{"id":126146},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,126149,126150],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,126152,126153],{},[6750,126154],{"alt":98,"src":126155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,126157,126158],{},[6750,126159],{"alt":98,"src":126160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[8518,126162,126164],{"id":126163},"_23322-cuda","2.3.3.2.2 CUDA",[14,126166,126167,126168],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[9275,126169,126170],{"href":126170,"rel":126171},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[31729],[14,126173,126174,126177],{},[6750,126175],{"alt":98,"src":126176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[6750,126178],{"alt":98,"src":126179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,126181,126182],{},"在下方的网站，选择合适的版本。",[14,126184,126185,126186],{},"WSL2 专属 CUDA 指南：",[9275,126187,126188],{"href":126188,"rel":126189},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[31729],[14,126191,126192],{},[18,126193,126194],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,126196,126197],{},[6750,126198],{"alt":98,"src":126199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,126201,126202],{},"挨行敲一遍",[14,126204,126205],{},[6750,126206],{"alt":98,"src":126207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,126209,126210,126211,126214],{},"敲完后，输入",[83,126212,126213],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,126216,126217],{},[6750,126218],{"alt":98,"src":126219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,126221,126222,126223,126226],{},"（请详看下方教程的",[18,126224,126225],{},"安装CUDA的配置环境来看","如何配置环境）",[8518,126228,126230],{"id":126229},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,126232,126139],{},[14,126234,126235],{},[6750,126236],{"alt":98,"src":126237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[7601,126239,126241],{"id":126240},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,126243,126244],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,126246,126247],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,126249,126250],{},[6750,126251],{"alt":98,"src":126252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,126254,126255],{},"连接WSL2",[14,126257,126258],{},[6750,126259],{"alt":98,"src":126260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,126262,126263],{},"远程开发成功。",[14,126265,126266],{},[6750,126267],{"alt":98,"src":126268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,126270,126271],{},[6750,126272],{"alt":98,"src":126273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,126275,126276],{},[6750,126277],{"alt":98,"src":126278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[7601,126280,126282],{"id":126281},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,126284,126285],{},[6750,126286],{"alt":98,"src":126287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[7601,126289,126291],{"id":126290},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[93,126293,126295],{"className":125161,"code":126294,"language":125163,"meta":98,"style":98},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[83,126296,126297,126305,126313,126324,126328],{"__ignoreMap":98},[102,126298,126299,126301,126303],{"class":104,"line":105},[102,126300,32441],{"class":112},[102,126302,125182],{"class":278},[102,126304,34107],{"class":278},[102,126306,126307,126309,126311],{"class":104,"line":116},[102,126308,32441],{"class":112},[102,126310,125182],{"class":278},[102,126312,125198],{"class":278},[102,126314,126315,126317,126319,126321],{"class":104,"line":123},[102,126316,32441],{"class":112},[102,126318,125182],{"class":278},[102,126320,31698],{"class":278},[102,126322,126323],{"class":278}," mesa-utils\n",[102,126325,126326],{"class":104,"line":130},[102,126327,652],{"emptyLinePlaceholder":651},[102,126329,126330],{"class":104,"line":136},[102,126331,126332],{"class":126},"#然后重启wsl2即可\n",[8955,126334,126335],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":98,"searchDepth":116,"depth":116,"links":126337},[126338,126339,126344],{"id":125615,"depth":116,"text":125616},{"id":125628,"depth":116,"text":125629,"children":126340},[126341,126342,126343],{"id":125632,"depth":123,"text":125633},{"id":125679,"depth":123,"text":125680},{"id":125740,"depth":123,"text":125741},{"id":125776,"depth":116,"text":125777,"children":126345},[126346,126347,126348],{"id":125780,"depth":123,"text":125781},{"id":125842,"depth":123,"text":125843},{"id":126131,"depth":123,"text":126132},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":125607,"description":31240},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":126355,"title":126356,"body":126357,"description":31240,"extension":8978,"meta":129293,"navigation":651,"path":129294,"seo":129295,"stem":129296,"__hash__":129297},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":126358,"toc":129265},[126359,126362,126366,126372,126376,126382,126386,126574,126577,126582,126586,126590,126593,126596,126602,126607,126610,126613,126618,126651,126656,126660,126737,126740,126745,126749,126752,126791,126794,126803,126821,126826,126833,126950,126955,126958,126985,126990,126994,127003,127053,127060,127064,127067,127081,127088,127122,127127,127131,127154,127157,127162,127166,127169,127172,127175,127217,127221,127224,127227,127268,127272,127276,127279,127284,127289,127292,127315,127318,127326,127331,127334,127339,127344,127347,127352,127356,127361,127384,127389,127451,127459,127464,127469,127472,127477,127480,127485,127490,127508,127513,127519,127524,127538,127542,127545,127548,127551,127594,127597,127602,127703,127706,127711,127715,127719,127756,127760,127764,127768,127814,127818,127863,127867,127874,127882,127937,127940,128017,128020,128043,128047,128050,128055,128060,128068,128071,128076,128081,128086,128089,128094,128103,128106,128111,128114,128185,128190,128193,128198,128201,128206,128209,128214,128217,128222,128227,128230,128305,128308,128321,128326,128329,128343,128346,128375,128380,128409,128412,128417,128421,128426,128435,128438,128443,128446,128451,128454,128457,128462,128465,128470,128475,128478,128483,128486,128611,128616,128646,128649,128654,128659,128676,128679,128722,128725,128752,128757,128770,128913,128917,128922,128936,128939,128990,128993,129023,129026,129042,129047,129061,129064,129131,129136,129145,129150,129153,129165,129170,129177,129201,129204,129209,129212,129231,129236,129243,129255,129262],[10,126360,126356],{"id":126361},"_3-安装必备配置",[43,126363,126365],{"id":126364},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[93,126367,126370],{"className":126368,"code":126369,"language":6778},[6776],"  打开下方网站（注意，该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",[83,126371,126369],{"__ignoreMap":98},[48,126373,126375],{"id":126374},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[93,126377,126380],{"className":126378,"code":126379,"language":6778},[6776],"  输入以下命令\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",[83,126381,126379],{"__ignoreMap":98},[48,126383,126385],{"id":126384},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[93,126387,126391],{"className":126388,"code":126389,"language":126390,"meta":98,"style":98},"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",[83,126392,126393,126401,126412,126424,126438,126442,126452,126457,126461,126465,126470,126474,126486,126490,126495,126499,126510,126514,126530,126534,126545,126549,126554,126558,126566],{"__ignoreMap":98},[102,126394,126395,126397,126399],{"class":104,"line":105},[102,126396,32441],{"class":112},[102,126398,125182],{"class":278},[102,126400,34107],{"class":278},[102,126402,126403,126405,126407,126409],{"class":104,"line":116},[102,126404,32441],{"class":112},[102,126406,125182],{"class":278},[102,126408,31698],{"class":278},[102,126410,126411],{"class":278}," vim\n",[102,126413,126414,126416,126419,126421],{"class":104,"line":123},[102,126415,32441],{"class":112},[102,126417,126418],{"class":278}," rm",[102,126420,33190],{"class":187},[102,126422,126423],{"class":278}," \u002Fetc\u002Fapt\u002Fsources.list\n",[102,126425,126426,126428,126430,126432,126435],{"class":104,"line":130},[102,126427,32441],{"class":112},[102,126429,126418],{"class":278},[102,126431,33190],{"class":187},[102,126433,126434],{"class":278}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[102,126436,126437],{"class":187},"**\n",[102,126439,126440],{"class":104,"line":136},[102,126441,652],{"emptyLinePlaceholder":651},[102,126443,126444,126446,126449],{"class":104,"line":142},[102,126445,32441],{"class":112},[102,126447,126448],{"class":278}," vim",[102,126450,126451],{"class":278}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[102,126453,126454],{"class":104,"line":148},[102,126455,126456],{"class":278},"```\n",[102,126458,126459],{"class":104,"line":157},[102,126460,652],{"emptyLinePlaceholder":651},[102,126462,126463],{"class":104,"line":163},[102,126464,652],{"emptyLinePlaceholder":651},[102,126466,126467],{"class":104,"line":175},[102,126468,126469],{"class":112},"选择好Ubuntu版本后，复制下方的内容。\n",[102,126471,126472],{"class":104,"line":181},[102,126473,652],{"emptyLinePlaceholder":651},[102,126475,126476,126478,126481,126484],{"class":104,"line":202},[102,126477,9263],{"class":108},[102,126479,126480],{"class":278},"[](",[102,126482,126483],{"class":112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[102,126485,390],{"class":278},[102,126487,126488],{"class":104,"line":208},[102,126489,652],{"emptyLinePlaceholder":651},[102,126491,126492],{"class":104,"line":214},[102,126493,126494],{"class":112},"粘贴进去\n",[102,126496,126497],{"class":104,"line":225},[102,126498,652],{"emptyLinePlaceholder":651},[102,126500,126501,126503,126505,126508],{"class":104,"line":230},[102,126502,9263],{"class":108},[102,126504,126480],{"class":278},[102,126506,126507],{"class":112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[102,126509,390],{"class":278},[102,126511,126512],{"class":104,"line":236},[102,126513,652],{"emptyLinePlaceholder":651},[102,126515,126516,126519,126522,126525,126527],{"class":104,"line":242},[102,126517,126518],{"class":112},"按一下ESC，然后英文冒号，输入",[102,126520,126521],{"class":278}," `",[102,126523,126524],{"class":112},":wq!",[102,126526,9992],{"class":278},[102,126528,126529],{"class":112},"然后回车\n",[102,126531,126532],{"class":104,"line":248},[102,126533,652],{"emptyLinePlaceholder":651},[102,126535,126536,126538,126540,126543],{"class":104,"line":254},[102,126537,9263],{"class":108},[102,126539,126480],{"class":278},[102,126541,126542],{"class":112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[102,126544,390],{"class":278},[102,126546,126547],{"class":104,"line":269},[102,126548,652],{"emptyLinePlaceholder":651},[102,126550,126551],{"class":104,"line":298},[102,126552,126553],{"class":112},"输入以下命令\n",[102,126555,126556],{"class":104,"line":502},[102,126557,652],{"emptyLinePlaceholder":651},[102,126559,126560,126563],{"class":104,"line":507},[102,126561,126562],{"class":278},"```",[102,126564,126565],{"class":112},"Bash\n",[102,126567,126568,126570,126572],{"class":104,"line":512},[102,126569,32441],{"class":112},[102,126571,125182],{"class":278},[102,126573,34107],{"class":278},[14,126575,126576],{},"这里被替换成对应学校则成功",[14,126578,126579],{},[6750,126580],{"alt":98,"src":126581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[43,126583,126585],{"id":126584},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[48,126587,126589],{"id":126588},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,126591,126592],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,126594,126595],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,126597,126598],{},[9275,126599,126600],{"href":126600,"rel":126601},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[31729],[14,126603,126604],{},[6750,126605],{"alt":98,"src":126606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,126608,126609],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,126611,126612],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,126614,126615],{},[6750,126616],{"alt":98,"src":126617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[93,126619,126621],{"className":125161,"code":126620,"language":125163,"meta":98,"style":98},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[83,126622,126623,126628,126635,126640],{"__ignoreMap":98},[102,126624,126625],{"class":104,"line":105},[102,126626,126627],{"class":126},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[102,126629,126630,126632],{"class":104,"line":116},[102,126631,109141],{"class":187},[102,126633,126634],{"class":278}," ~\u002FDownloads\n",[102,126636,126637],{"class":104,"line":123},[102,126638,126639],{"class":126},"#下方chrome安装包名不一定是这个，根据名字来看\n",[102,126641,126642,126644,126646,126648],{"class":104,"line":130},[102,126643,32441],{"class":112},[102,126645,125182],{"class":278},[102,126647,31698],{"class":278},[102,126649,126650],{"class":278}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,126652,126653],{},[6750,126654],{"alt":98,"src":126655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[48,126657,126659],{"id":126658},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[93,126661,126663],{"className":125161,"code":126662,"language":125163,"meta":98,"style":98},"# 老版\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",[83,126664,126665,126670,126678,126689,126694,126698,126703,126713,126721,126732],{"__ignoreMap":98},[102,126666,126667],{"class":104,"line":105},[102,126668,126669],{"class":126},"# 老版\n",[102,126671,126672,126674,126676],{"class":104,"line":116},[102,126673,32441],{"class":112},[102,126675,125182],{"class":278},[102,126677,34107],{"class":278},[102,126679,126680,126682,126684,126686],{"class":104,"line":123},[102,126681,32441],{"class":112},[102,126683,125182],{"class":278},[102,126685,31698],{"class":278},[102,126687,126688],{"class":278}," neofetch\n",[102,126690,126691],{"class":104,"line":130},[102,126692,126693],{"class":112},"neofetch\n",[102,126695,126696],{"class":104,"line":136},[102,126697,652],{"emptyLinePlaceholder":651},[102,126699,126700],{"class":104,"line":142},[102,126701,126702],{"class":126},"# 新版\n",[102,126704,126705,126707,126710],{"class":104,"line":148},[102,126706,32441],{"class":112},[102,126708,126709],{"class":278}," add-apt-repository",[102,126711,126712],{"class":278}," ppa:zhangsongcui3371\u002Ffastfetch\n",[102,126714,126715,126717,126719],{"class":104,"line":157},[102,126716,32441],{"class":112},[102,126718,125182],{"class":278},[102,126720,34107],{"class":278},[102,126722,126723,126725,126727,126729],{"class":104,"line":163},[102,126724,32441],{"class":112},[102,126726,125182],{"class":278},[102,126728,31698],{"class":278},[102,126730,126731],{"class":278}," fastfetch\n",[102,126733,126734],{"class":104,"line":175},[102,126735,126736],{"class":112},"fastfetch\n",[14,126738,126739],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,126741,126742],{},[6750,126743],{"alt":98,"src":126744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[48,126746,126748],{"id":126747},"_323-移除snap应用","3.2.3 移除snap应用",[14,126750,126751],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[93,126753,126755],{"className":125161,"code":126754,"language":125163,"meta":98,"style":98},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[83,126756,126757,126769,126780],{"__ignoreMap":98},[102,126758,126759,126761,126763,126766],{"class":104,"line":105},[102,126760,32441],{"class":112},[102,126762,34378],{"class":278},[102,126764,126765],{"class":278}," disable",[102,126767,126768],{"class":278}," snapd.service\n",[102,126770,126771,126773,126775,126777],{"class":104,"line":116},[102,126772,32441],{"class":112},[102,126774,34378],{"class":278},[102,126776,126765],{"class":278},[102,126778,126779],{"class":278}," snapd.socket\n",[102,126781,126782,126784,126786,126788],{"class":104,"line":123},[102,126783,32441],{"class":112},[102,126785,34378],{"class":278},[102,126787,126765],{"class":278},[102,126789,126790],{"class":278}," snapd.seeded.service\n",[14,126792,126793],{},"然后查看snap应用列表",[14,126795,126796,126797,126802],{},"根据你安装的选择不同（最小安装或普通安装），有",[9275,126798,126801],{"href":126799,"rel":126800},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[31729],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[93,126804,126806],{"className":125161,"code":126805,"language":125163,"meta":98,"style":98},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[83,126807,126808,126813],{"__ignoreMap":98},[102,126809,126810],{"class":104,"line":105},[102,126811,126812],{"class":126},"# 查询当前系统上snap安装了哪些app\n",[102,126814,126815,126818],{"class":104,"line":116},[102,126816,126817],{"class":112},"snap",[102,126819,126820],{"class":278}," list\n",[14,126822,126823],{},[6750,126824],{"alt":98,"src":126825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,126827,126828,126829,126832],{},"卸载掉图中所有应用，按照 ",[18,126830,126831],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[93,126834,126836],{"className":125161,"code":126835,"language":125163,"meta":98,"style":98},"#移除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",[83,126837,126838,126843,126855,126860,126871,126876,126887,126892,126903,126908,126912,126917,126928,126939],{"__ignoreMap":98},[102,126839,126840],{"class":104,"line":105},[102,126841,126842],{"class":126},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[102,126844,126845,126847,126850,126852],{"class":104,"line":116},[102,126846,32441],{"class":112},[102,126848,126849],{"class":278}," snap",[102,126851,33944],{"class":278},[102,126853,126854],{"class":278}," snap-store\n",[102,126856,126857],{"class":104,"line":123},[102,126858,126859],{"class":126},"#移除firefox浏览器\n",[102,126861,126862,126864,126866,126868],{"class":104,"line":130},[102,126863,32441],{"class":112},[102,126865,126849],{"class":278},[102,126867,33944],{"class":278},[102,126869,126870],{"class":278}," firefox\n",[102,126872,126873],{"class":104,"line":136},[102,126874,126875],{"class":126},"#移除gnome-42-2204\n",[102,126877,126878,126880,126882,126884],{"class":104,"line":142},[102,126879,32441],{"class":112},[102,126881,126849],{"class":278},[102,126883,33944],{"class":278},[102,126885,126886],{"class":278}," gnome-42-2204\n",[102,126888,126889],{"class":104,"line":148},[102,126890,126891],{"class":126},"#移除gtk-common-themes\n",[102,126893,126894,126896,126898,126900],{"class":104,"line":157},[102,126895,32441],{"class":112},[102,126897,126849],{"class":278},[102,126899,33944],{"class":278},[102,126901,126902],{"class":278}," gtk-common-themes\n",[102,126904,126905],{"class":104,"line":163},[102,126906,126907],{"class":126},"#移除其它...\n",[102,126909,126910],{"class":104,"line":175},[102,126911,4328],{"class":119},[102,126913,126914],{"class":104,"line":181},[102,126915,126916],{"class":126},"#移除core22,bare以及snapd\n",[102,126918,126919,126921,126923,126925],{"class":104,"line":202},[102,126920,32441],{"class":112},[102,126922,126849],{"class":278},[102,126924,33944],{"class":278},[102,126926,126927],{"class":278}," core22\n",[102,126929,126930,126932,126934,126936],{"class":104,"line":208},[102,126931,32441],{"class":112},[102,126933,126849],{"class":278},[102,126935,33944],{"class":278},[102,126937,126938],{"class":278}," bare\n",[102,126940,126941,126943,126945,126947],{"class":104,"line":214},[102,126942,32441],{"class":112},[102,126944,126849],{"class":278},[102,126946,33944],{"class":278},[102,126948,126949],{"class":278}," snapd\n",[14,126951,126952],{},[6750,126953],{"alt":98,"src":126954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,126956,126957],{},"输入以下命令查看是否还有snap包",[93,126959,126961],{"className":125161,"code":126960,"language":125163,"meta":98,"style":98},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[83,126962,126963,126969,126973,126977,126981],{"__ignoreMap":98},[102,126964,126965,126967],{"class":104,"line":105},[102,126966,126817],{"class":112},[102,126968,126820],{"class":278},[102,126970,126971],{"class":104,"line":116},[102,126972,126669],{"class":126},[102,126974,126975],{"class":104,"line":123},[102,126976,126693],{"class":112},[102,126978,126979],{"class":104,"line":130},[102,126980,126702],{"class":126},[102,126982,126983],{"class":104,"line":136},[102,126984,126736],{"class":112},[14,126986,126987],{},[6750,126988],{"alt":98,"src":126989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[48,126991,126993],{"id":126992},"_324-移除snap","3.2.4 移除snap",[14,126995,126996,126997,127002],{},"在删除掉",[9275,126998,127001],{"href":126999,"rel":127000},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[31729],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[93,127004,127006],{"className":125161,"code":127005,"language":125163,"meta":98,"style":98}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[83,127007,127008,127013,127026,127031,127042],{"__ignoreMap":98},[102,127009,127010],{"class":104,"line":105},[102,127011,127012],{"class":126}," #使用apt移除掉snap\n",[102,127014,127015,127017,127019,127021,127024],{"class":104,"line":116},[102,127016,32441],{"class":112},[102,127018,125182],{"class":278},[102,127020,125490],{"class":278},[102,127022,127023],{"class":187}," --purge",[102,127025,126949],{"class":278},[102,127027,127028],{"class":104,"line":123},[102,127029,127030],{"class":126},"#移除snapd的一些目录\n",[102,127032,127033,127035,127037,127039],{"class":104,"line":130},[102,127034,32441],{"class":112},[102,127036,126418],{"class":278},[102,127038,33190],{"class":187},[102,127040,127041],{"class":278}," \u002Fvar\u002Fcache\u002Fsnapd\n",[102,127043,127044,127046,127048,127050],{"class":104,"line":136},[102,127045,32441],{"class":112},[102,127047,126418],{"class":278},[102,127049,33190],{"class":187},[102,127051,127052],{"class":278}," ~\u002Fsnap\n",[14,127054,127055,127056,127059],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[83,127057,127058],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[48,127061,127063],{"id":127062},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,127065,127066],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[93,127068,127070],{"className":125161,"code":127069,"language":125163,"meta":98,"style":98},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[83,127071,127072],{"__ignoreMap":98},[102,127073,127074,127076,127078],{"class":104,"line":105},[102,127075,32441],{"class":112},[102,127077,126448],{"class":278},[102,127079,127080],{"class":278}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,127082,127083,127084,127087],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[83,127085,127086],{},":wq"," 回车",[93,127089,127091],{"className":125161,"code":127090,"language":125163,"meta":98,"style":98},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[83,127092,127093,127100,127114],{"__ignoreMap":98},[102,127094,127095,127098],{"class":104,"line":105},[102,127096,127097],{"class":112},"Package:",[102,127099,126949],{"class":278},[102,127101,127102,127105,127108,127111],{"class":104,"line":116},[102,127103,127104],{"class":112},"Pin:",[102,127106,127107],{"class":278}," release",[102,127109,127110],{"class":278}," a=",[102,127112,127113],{"class":187},"*\n",[102,127115,127116,127119],{"class":104,"line":123},[102,127117,127118],{"class":112},"Pin-Priority:",[102,127120,127121],{"class":187}," -10\n",[14,127123,127124],{},[6750,127125],{"alt":98,"src":127126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[48,127128,127130],{"id":127129},"_326-测试是否成功","3.2.6 测试是否成功",[93,127132,127134],{"className":125161,"code":127133,"language":125163,"meta":98,"style":98},"sudo apt update\nsudo apt install firefox\n",[83,127135,127136,127144],{"__ignoreMap":98},[102,127137,127138,127140,127142],{"class":104,"line":105},[102,127139,32441],{"class":112},[102,127141,125182],{"class":278},[102,127143,34107],{"class":278},[102,127145,127146,127148,127150,127152],{"class":104,"line":116},[102,127147,32441],{"class":112},[102,127149,125182],{"class":278},[102,127151,31698],{"class":278},[102,127153,126870],{"class":278},[14,127155,127156],{},"这里提示snapd无法被安装，就证明成功了",[14,127158,127159],{},[6750,127160],{"alt":98,"src":127161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[48,127163,127165],{"id":127164},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,127167,127168],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,127170,127171],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,127173,127174],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[93,127176,127178],{"className":125161,"code":127177,"language":125163,"meta":98,"style":98},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[83,127179,127180,127185,127194,127199,127207],{"__ignoreMap":98},[102,127181,127182],{"class":104,"line":105},[102,127183,127184],{"class":126},"# 添加Mozilla提供的源\n",[102,127186,127187,127189,127191],{"class":104,"line":116},[102,127188,32441],{"class":112},[102,127190,126709],{"class":278},[102,127192,127193],{"class":278}," ppa:mozillateam\u002Fppa\n",[102,127195,127196],{"class":104,"line":123},[102,127197,127198],{"class":126},"# 安装Firefox\n",[102,127200,127201,127203,127205],{"class":104,"line":130},[102,127202,32441],{"class":112},[102,127204,125182],{"class":278},[102,127206,34107],{"class":278},[102,127208,127209,127211,127213,127215],{"class":104,"line":136},[102,127210,32441],{"class":112},[102,127212,125182],{"class":278},[102,127214,31698],{"class":278},[102,127216,126870],{"class":278},[48,127218,127220],{"id":127219},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,127222,127223],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,127225,127226],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[93,127228,127230],{"className":125161,"code":127229,"language":125163,"meta":98,"style":98},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[83,127231,127232,127237,127247,127255,127259],{"__ignoreMap":98},[102,127233,127234],{"class":104,"line":105},[102,127235,127236],{"class":126},"#删掉禁止安装snap的配置文件\n",[102,127238,127239,127241,127243,127245],{"class":104,"line":116},[102,127240,32441],{"class":112},[102,127242,126418],{"class":278},[102,127244,33190],{"class":187},[102,127246,127080],{"class":278},[102,127248,127249,127251,127253],{"class":104,"line":123},[102,127250,32441],{"class":112},[102,127252,125182],{"class":278},[102,127254,34107],{"class":278},[102,127256,127257],{"class":104,"line":130},[102,127258,652],{"emptyLinePlaceholder":651},[102,127260,127261,127263,127265],{"class":104,"line":136},[102,127262,32441],{"class":112},[102,127264,125182],{"class":278},[102,127266,127267],{"class":278}," dist-update\n",[43,127269,127271],{"id":127270},"_33-中文输入法","3.3 中文输入法",[48,127273,127275],{"id":127274},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,127277,127278],{},"官网下载搜狗输入法",[14,127280,127281],{},[6750,127282],{"alt":98,"src":127283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,127285,127286],{},[6750,127287],{"alt":98,"src":127288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,127290,127291],{},"打开终端输入如下",[93,127293,127295],{"className":125161,"code":127294,"language":125163,"meta":98,"style":98},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[83,127296,127297,127304],{"__ignoreMap":98},[102,127298,127299,127301],{"class":104,"line":105},[102,127300,109141],{"class":187},[102,127302,127303],{"class":278}," ~\u002FDownloads\u002F\n",[102,127305,127306,127308,127310,127312],{"class":104,"line":116},[102,127307,32441],{"class":112},[102,127309,125182],{"class":278},[102,127311,31698],{"class":278},[102,127313,127314],{"class":278}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,127316,127317],{},"打开Fcitx",[14,127319,127320,127323],{},[6750,127321],{"alt":98,"src":127322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[6750,127324],{"alt":98,"src":127325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,127327,127328],{},[6750,127329],{"alt":98,"src":127330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,127332,127333],{},"添加搜狗输入法",[14,127335,127336],{},[6750,127337],{"alt":98,"src":127338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,127340,127341],{},[6750,127342],{"alt":98,"src":127343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,127345,127346],{},"将搜狗输入法设置为唯一输入法",[14,127348,127349],{},[6750,127350],{"alt":98,"src":127351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[48,127353,127355],{"id":127354},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[87,127357,127358],{},[62,127359,127360],{},"卸载旧输入法",[93,127362,127364],{"className":126388,"code":127363,"language":126390,"meta":98,"style":98},"sudo apt purge fcitx* ibus*\n",[83,127365,127366],{"__ignoreMap":98},[102,127367,127368,127370,127372,127374,127377,127379,127382],{"class":104,"line":105},[102,127369,32441],{"class":112},[102,127371,125182],{"class":278},[102,127373,125523],{"class":278},[102,127375,127376],{"class":278}," fcitx",[102,127378,191],{"class":187},[102,127380,127381],{"class":278}," ibus",[102,127383,127113],{"class":187},[87,127385,127386],{"start":116},[62,127387,127388],{},"安装Fcitx5",[93,127390,127392],{"className":125161,"code":127391,"language":125163,"meta":98,"style":98},"# 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",[83,127393,127394,127399,127413,127417,127422,127431,127439],{"__ignoreMap":98},[102,127395,127396],{"class":104,"line":105},[102,127397,127398],{"class":126},"# Ubuntu22.04及以上、Debian12及以上\n",[102,127400,127401,127403,127405,127407,127410],{"class":104,"line":116},[102,127402,32441],{"class":112},[102,127404,125182],{"class":278},[102,127406,31698],{"class":278},[102,127408,127409],{"class":278}," fcitx5",[102,127411,127412],{"class":278}," fcitx5-chinese-addons\n",[102,127414,127415],{"class":104,"line":123},[102,127416,652],{"emptyLinePlaceholder":651},[102,127418,127419],{"class":104,"line":130},[102,127420,127421],{"class":126},"# Ubuntu20.04\n",[102,127423,127424,127426,127428],{"class":104,"line":136},[102,127425,32441],{"class":112},[102,127427,126709],{"class":278},[102,127429,127430],{"class":278}," ppa:zhsj\u002Ffcitx5\n",[102,127432,127433,127435,127437],{"class":104,"line":142},[102,127434,32441],{"class":112},[102,127436,125182],{"class":278},[102,127438,34107],{"class":278},[102,127440,127441,127443,127445,127447,127449],{"class":104,"line":148},[102,127442,32441],{"class":112},[102,127444,125182],{"class":278},[102,127446,31698],{"class":278},[102,127448,127409],{"class":278},[102,127450,127412],{"class":278},[87,127452,127453,127456],{"start":123},[62,127454,127455],{},"Reboot System",[62,127457,127458],{},"启动Fcitx5",[14,127460,127461],{},[6750,127462],{"alt":98,"src":127463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[87,127465,127466],{"start":136},[62,127467,127468],{},"修改一些设置",[14,127470,127471],{},"将Pinyin和Keyboard - English US加入到左边。",[14,127473,127474],{},[6750,127475],{"alt":98,"src":127476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,127478,127479],{},"添加快捷键以便于更好切换中英文",[14,127481,127482],{},[6750,127483],{"alt":98,"src":127484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[87,127486,127487],{"start":142},[62,127488,127489],{},"重启",[93,127491,127493],{"className":126388,"code":127492,"language":126390,"meta":98,"style":98},"sudo shutdown -r now\n",[83,127494,127495],{"__ignoreMap":98},[102,127496,127497,127499,127502,127505],{"class":104,"line":105},[102,127498,32441],{"class":112},[102,127500,127501],{"class":278}," shutdown",[102,127503,127504],{"class":187}," -r",[102,127506,127507],{"class":278}," now\n",[87,127509,127510],{"start":148},[62,127511,127512],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,127514,127515],{},[9275,127516,127517],{"href":127517,"rel":127518},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[31729],[87,127520,127521],{"start":157},[62,127522,127523],{},"再重启",[93,127525,127526],{"className":126388,"code":127492,"language":126390,"meta":98,"style":98},[83,127527,127528],{"__ignoreMap":98},[102,127529,127530,127532,127534,127536],{"class":104,"line":105},[102,127531,32441],{"class":112},[102,127533,127501],{"class":278},[102,127535,127504],{"class":187},[102,127537,127507],{"class":278},[43,127539,127541],{"id":127540},"_34-pip3源替换","3.4 pip3源替换",[14,127543,127544],{},"非Debian系发行版需要做。",[14,127546,127547],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,127549,127550],{},"使用dnf的系统也可能不用做。",[93,127552,127554],{"className":125161,"code":127553,"language":125163,"meta":98,"style":98},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[83,127555,127556,127561,127568,127573,127578],{"__ignoreMap":98},[102,127557,127558],{"class":104,"line":105},[102,127559,127560],{"class":126},"# 检查是否已安装 pip\n",[102,127562,127563,127566],{"class":104,"line":116},[102,127564,127565],{"class":112},"pip3",[102,127567,34158],{"class":187},[102,127569,127570],{"class":104,"line":123},[102,127571,127572],{"class":126},"# 如果未安装，先安装 pip3（见下方）\n",[102,127574,127575],{"class":104,"line":130},[102,127576,127577],{"class":126},"# 配置 pip 使用清华源\n",[102,127579,127580,127582,127585,127588,127591],{"class":104,"line":136},[102,127581,127565],{"class":112},[102,127583,127584],{"class":278}," config",[102,127586,127587],{"class":278}," set",[102,127589,127590],{"class":278}," global.index-url",[102,127592,127593],{"class":278}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,127595,127596],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,127598,127599],{},[6750,127600],{"alt":98,"src":127601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[93,127603,127605],{"className":125161,"code":127604,"language":125163,"meta":98,"style":98},"#安装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",[83,127606,127607,127612,127620,127631,127635,127640,127659,127663,127668,127680,127684,127689],{"__ignoreMap":98},[102,127608,127609],{"class":104,"line":105},[102,127610,127611],{"class":126},"#安装pip3\n",[102,127613,127614,127616,127618],{"class":104,"line":116},[102,127615,32441],{"class":112},[102,127617,125182],{"class":278},[102,127619,34107],{"class":278},[102,127621,127622,127624,127626,127628],{"class":104,"line":123},[102,127623,32441],{"class":112},[102,127625,33941],{"class":278},[102,127627,31698],{"class":278},[102,127629,127630],{"class":278}," python3-pip\n",[102,127632,127633],{"class":104,"line":130},[102,127634,652],{"emptyLinePlaceholder":651},[102,127636,127637],{"class":104,"line":136},[102,127638,127639],{"class":126},"#更新pip3\n",[102,127641,127642,127644,127646,127648,127650,127652,127655,127657],{"class":104,"line":142},[102,127643,108744],{"class":112},[102,127645,108747],{"class":187},[102,127647,108770],{"class":278},[102,127649,31698],{"class":278},[102,127651,34295],{"class":187},[102,127653,127654],{"class":278}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[102,127656,108775],{"class":187},[102,127658,108778],{"class":278},[102,127660,127661],{"class":104,"line":148},[102,127662,652],{"emptyLinePlaceholder":651},[102,127664,127665],{"class":104,"line":157},[102,127666,127667],{"class":126},"#设置pip源为清华源\n",[102,127669,127670,127672,127674,127676,127678],{"class":104,"line":163},[102,127671,127565],{"class":112},[102,127673,127584],{"class":278},[102,127675,127587],{"class":278},[102,127677,127590],{"class":278},[102,127679,127593],{"class":278},[102,127681,127682],{"class":104,"line":175},[102,127683,652],{"emptyLinePlaceholder":651},[102,127685,127686],{"class":104,"line":181},[102,127687,127688],{"class":126},"#测试\n",[102,127690,127691,127693,127695,127697,127699,127701],{"class":104,"line":202},[102,127692,108744],{"class":112},[102,127694,108747],{"class":187},[102,127696,108770],{"class":278},[102,127698,31698],{"class":278},[102,127700,108775],{"class":187},[102,127702,108778],{"class":278},[14,127704,127705],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,127707,127708],{},[6750,127709],{"alt":98,"src":127710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[43,127712,127714],{"id":127713},"_35-显卡驱动安装","3.5 显卡驱动安装",[48,127716,127718],{"id":127717},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[93,127720,127722],{"className":126388,"code":127721,"language":126390,"meta":98,"style":98},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[83,127723,127724,127729,127744,127749],{"__ignoreMap":98},[102,127725,127726],{"class":104,"line":105},[102,127727,127728],{"class":126},"# 如果是使用apt安装的驱动\n",[102,127730,127731,127733,127735,127737,127739,127742],{"class":104,"line":116},[102,127732,32441],{"class":112},[102,127734,33941],{"class":278},[102,127736,33944],{"class":278},[102,127738,127023],{"class":187},[102,127740,127741],{"class":278}," nvidia",[102,127743,127113],{"class":187},[102,127745,127746],{"class":104,"line":123},[102,127747,127748],{"class":126},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[102,127750,127751,127753],{"class":104,"line":130},[102,127752,32441],{"class":112},[102,127754,127755],{"class":278}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[48,127757,127759],{"id":127758},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[7601,127761,127763],{"id":127762},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[8518,127765,127767],{"id":127766},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[93,127769,127771],{"className":126388,"code":127770,"language":126390,"meta":98,"style":98},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[83,127772,127773,127778,127789,127794,127804,127809],{"__ignoreMap":98},[102,127774,127775],{"class":104,"line":105},[102,127776,127777],{"class":126},"# 安装英伟达驱动\n",[102,127779,127780,127782,127784,127786],{"class":104,"line":116},[102,127781,32441],{"class":112},[102,127783,125182],{"class":278},[102,127785,31698],{"class":278},[102,127787,127788],{"class":278}," nvidia-driver-版本号\n",[102,127790,127791],{"class":104,"line":123},[102,127792,127793],{"class":126},"# 重启 \n",[102,127795,127796,127798,127800,127802],{"class":104,"line":130},[102,127797,32441],{"class":112},[102,127799,127501],{"class":278},[102,127801,127504],{"class":187},[102,127803,127507],{"class":278},[102,127805,127806],{"class":104,"line":136},[102,127807,127808],{"class":126},"# 检查驱动是否安装成功\n",[102,127810,127811],{"class":104,"line":142},[102,127812,127813],{"class":112},"nvidia-smi\n",[8518,127815,127817],{"id":127816},"_35212-debian","3.5.2.1.2 Debian",[93,127819,127821],{"className":126388,"code":127820,"language":126390,"meta":98,"style":98},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[83,127822,127823,127827,127841,127845,127855,127859],{"__ignoreMap":98},[102,127824,127825],{"class":104,"line":105},[102,127826,127777],{"class":126},[102,127828,127829,127831,127833,127835,127838],{"class":104,"line":116},[102,127830,32441],{"class":112},[102,127832,125182],{"class":278},[102,127834,31698],{"class":278},[102,127836,127837],{"class":278}," nvidia-driver",[102,127839,127840],{"class":278}," nvidia-settings\n",[102,127842,127843],{"class":104,"line":123},[102,127844,127793],{"class":126},[102,127846,127847,127849,127851,127853],{"class":104,"line":130},[102,127848,32441],{"class":112},[102,127850,127501],{"class":278},[102,127852,127504],{"class":187},[102,127854,127507],{"class":278},[102,127856,127857],{"class":104,"line":136},[102,127858,127808],{"class":126},[102,127860,127861],{"class":104,"line":142},[102,127862,127813],{"class":112},[7601,127864,127866],{"id":127865},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,127868,127869,127870,127873],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[18,127871,127872],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,127875,127876,127877],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[31417,127878,127879],{},[18,127880,127881],{},"（也可以不禁用桌面环境，直接进行下一步。）",[93,127883,127885],{"className":126388,"code":127884,"language":126390,"meta":98,"style":98},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[83,127886,127887,127892,127902,127907,127920,127925],{"__ignoreMap":98},[102,127888,127889],{"class":104,"line":105},[102,127890,127891],{"class":126},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[102,127893,127894,127896,127899],{"class":104,"line":116},[102,127895,32441],{"class":112},[102,127897,127898],{"class":278}," telinit",[102,127900,127901],{"class":187}," 3\n",[102,127903,127904],{"class":104,"line":123},[102,127905,127906],{"class":126},"# ubuntu 使用下方命令\n",[102,127908,127909,127911,127914,127917],{"class":104,"line":130},[102,127910,32441],{"class":112},[102,127912,127913],{"class":278}," service",[102,127915,127916],{"class":278}," lightdm",[102,127918,127919],{"class":278}," stop\n",[102,127921,127922],{"class":104,"line":136},[102,127923,127924],{"class":126},"# Fedora 使用下方命令\n",[102,127926,127927,127929,127931,127934],{"class":104,"line":142},[102,127928,32441],{"class":112},[102,127930,34378],{"class":278},[102,127932,127933],{"class":278}," isolate",[102,127935,127936],{"class":278}," multi-user.target\n",[14,127938,127939],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[93,127941,127943],{"className":126388,"code":127942,"language":126390,"meta":98,"style":98},"# 编译环境+准备工作\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",[83,127944,127945,127950,127961,127966,127973,127978,127990,127995,128002,128007],{"__ignoreMap":98},[102,127946,127947],{"class":104,"line":105},[102,127948,127949],{"class":126},"# 编译环境+准备工作\n",[102,127951,127952,127954,127956,127958],{"class":104,"line":116},[102,127953,32441],{"class":112},[102,127955,125182],{"class":278},[102,127957,31698],{"class":278},[102,127959,127960],{"class":278}," build-essential\n",[102,127962,127963],{"class":104,"line":123},[102,127964,127965],{"class":126},"# 进入到.run目录中\n",[102,127967,127968,127970],{"class":104,"line":130},[102,127969,109141],{"class":187},[102,127971,127972],{"class":278}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[102,127974,127975],{"class":104,"line":136},[102,127976,127977],{"class":126},"# 给驱动文件增加可执行权限：\n",[102,127979,127980,127982,127984,127987],{"class":104,"line":142},[102,127981,32441],{"class":112},[102,127983,32444],{"class":278},[102,127985,127986],{"class":278}," a+x",[102,127988,127989],{"class":278}," NVIDIA-Linux-x86_64-550.107.02.run\n",[102,127991,127992],{"class":104,"line":148},[102,127993,127994],{"class":126},"# 然后执行安装：\n",[102,127996,127997,127999],{"class":104,"line":157},[102,127998,32441],{"class":112},[102,128000,128001],{"class":278}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[102,128003,128004],{"class":104,"line":163},[102,128005,128006],{"class":126},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[102,128008,128009,128011,128014],{"class":104,"line":175},[102,128010,32441],{"class":112},[102,128012,128013],{"class":278}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[102,128015,128016],{"class":187},"  --no-opengl-files\n",[14,128018,128019],{},"安装完毕重启即可",[93,128021,128023],{"className":126388,"code":128022,"language":126390,"meta":98,"style":98},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[83,128024,128025,128029,128035,128039],{"__ignoreMap":98},[102,128026,128027],{"class":104,"line":105},[102,128028,127793],{"class":126},[102,128030,128031,128033],{"class":104,"line":116},[102,128032,32441],{"class":112},[102,128034,34512],{"class":278},[102,128036,128037],{"class":104,"line":123},[102,128038,127808],{"class":126},[102,128040,128041],{"class":104,"line":130},[102,128042,127813],{"class":112},[48,128044,128046],{"id":128045},"_353-安装cuda","3.5.3 安装CUDA",[14,128048,128049],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,128051,128052],{},[6750,128053],{"alt":98,"src":128054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[87,128056,128057],{},[62,128058,128059],{},"先查看显卡驱动所支持的最高CUDA版本",[93,128061,128062],{"className":126388,"code":127813,"language":126390,"meta":98,"style":98},[83,128063,128064],{"__ignoreMap":98},[102,128065,128066],{"class":104,"line":105},[102,128067,127813],{"class":112},[14,128069,128070],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,128072,128073],{},[6750,128074],{"alt":98,"src":128075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[87,128077,128078],{"start":116},[62,128079,128080],{},"下载CUDA并安装CUDA",[14,128082,126167,128083],{},[9275,128084,126170],{"href":126170,"rel":128085},[31729],[14,128087,128088],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,128090,128091],{},[6750,128092],{"alt":98,"src":128093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,128095,128096,128097,128102],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[9275,128098,128101],{"href":128099,"rel":128100},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[31729],"Vinci机器人队单片机教程","）",[14,128104,128105],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,128107,128108],{},[6750,128109],{"alt":98,"src":128110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,128112,128113],{},"将最下方框框里的命令敲入终端",[93,128115,128117],{"className":126388,"code":128116,"language":126390,"meta":98,"style":98},"# 在当前文件夹下创建一个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",[83,128118,128119,128124,128133,128138,128145,128150,128158,128163,128174,128179],{"__ignoreMap":98},[102,128120,128121],{"class":104,"line":105},[102,128122,128123],{"class":126},"# 在当前文件夹下创建一个ttt的子文件夹\n",[102,128125,128126,128128,128130],{"class":104,"line":116},[102,128127,109131],{"class":112},[102,128129,37081],{"class":187},[102,128131,128132],{"class":278}," .\u002Fttt\n",[102,128134,128135],{"class":104,"line":123},[102,128136,128137],{"class":126},"# 进入ttt文件夹\n",[102,128139,128140,128142],{"class":104,"line":130},[102,128141,109141],{"class":187},[102,128143,128144],{"class":278}," ttt\n",[102,128146,128147],{"class":104,"line":136},[102,128148,128149],{"class":126},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[102,128151,128152,128155],{"class":104,"line":142},[102,128153,128154],{"class":112},"wget",[102,128156,128157],{"class":278}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[102,128159,128160],{"class":104,"line":148},[102,128161,128162],{"class":126},"# 给予权限\n",[102,128164,128165,128167,128169,128171],{"class":104,"line":157},[102,128166,32441],{"class":112},[102,128168,32444],{"class":278},[102,128170,127986],{"class":278},[102,128172,128173],{"class":278}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[102,128175,128176],{"class":104,"line":163},[102,128177,128178],{"class":126},"# 运行脚本\n",[102,128180,128181,128183],{"class":104,"line":175},[102,128182,32441],{"class":112},[102,128184,128173],{"class":278},[14,128186,128187],{},[6750,128188],{"alt":98,"src":128189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,128191,128192],{},"正在安装中：",[14,128194,128195],{},[6750,128196],{"alt":98,"src":128197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,128199,128200],{},"输入accept接受即可",[14,128202,128203],{},[6750,128204],{"alt":98,"src":128205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,128207,128208],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,128210,128211],{},[6750,128212],{"alt":98,"src":128213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,128215,128216],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,128218,128219],{},[6750,128220],{"alt":98,"src":128221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[87,128223,128224],{"start":123},[62,128225,128226],{},"配置环境",[14,128228,128229],{},"根据上方确认一下路径，比如我上面红色框起来的为",[93,128231,128233],{"className":126388,"code":128232,"language":126390,"meta":98,"style":98},"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",[83,128234,128235,128251,128266],{"__ignoreMap":98},[102,128236,128237,128240,128243,128246,128249],{"class":104,"line":105},[102,128238,128239],{"class":112},"Please",[102,128241,128242],{"class":278}," make",[102,128244,128245],{"class":278}," sure",[102,128247,128248],{"class":278}," that",[102,128250,4328],{"class":119},[102,128252,128253,128255,128258,128261,128264],{"class":104,"line":116},[102,128254,60136],{"class":112},[102,128256,128257],{"class":278},"   PATH",[102,128259,128260],{"class":278}," includes",[102,128262,128263],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[102,128265,4328],{"class":119},[102,128267,128268,128270,128273,128275,128278,128281,128283,128286,128289,128292,128295,128297,128300,128302],{"class":104,"line":123},[102,128269,60136],{"class":112},[102,128271,128272],{"class":278},"   LD_LIBRARY_PATH",[102,128274,128260],{"class":278},[102,128276,128277],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[102,128279,128280],{"class":278}," or,",[102,128282,14015],{"class":278},[102,128284,128285],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[102,128287,128288],{"class":278}," to",[102,128290,128291],{"class":278}," \u002Fetc\u002Fld.so.conf",[102,128293,128294],{"class":278}," and",[102,128296,35095],{"class":278},[102,128298,128299],{"class":278}," ldconfig",[102,128301,72469],{"class":278},[102,128303,128304],{"class":278}," root\n",[14,128306,128307],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[93,128309,128311],{"className":126388,"code":128310,"language":126390,"meta":98,"style":98},"which nvcc\n",[83,128312,128313],{"__ignoreMap":98},[102,128314,128315,128318],{"class":104,"line":105},[102,128316,128317],{"class":187},"which",[102,128319,128320],{"class":278}," nvcc\n",[14,128322,128323],{},[6750,128324],{"alt":98,"src":128325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,128327,128328],{},"所以我进行以下操作：",[93,128330,128332],{"className":126388,"code":128331,"language":126390,"meta":98,"style":98},"sudo vim ~\u002F.bashrc\n",[83,128333,128334],{"__ignoreMap":98},[102,128335,128336,128338,128340],{"class":104,"line":105},[102,128337,32441],{"class":112},[102,128339,126448],{"class":278},[102,128341,128342],{"class":278}," ~\u002F.bashrc\n",[14,128344,128345],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[93,128347,128349],{"className":126388,"code":128348,"language":126390,"meta":98,"style":98},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[83,128350,128351,128363],{"__ignoreMap":98},[102,128352,128353,128355,128358,128360],{"class":104,"line":105},[102,128354,32907],{"class":108},[102,128356,128357],{"class":119}," PATH",[102,128359,260],{"class":108},[102,128361,128362],{"class":119},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[102,128364,128365,128367,128370,128372],{"class":104,"line":116},[102,128366,32907],{"class":108},[102,128368,128369],{"class":119}," LD_LIBRARY_PATH",[102,128371,260],{"class":108},[102,128373,128374],{"class":119},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,128376,128377],{},[6750,128378],{"alt":98,"src":128379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[93,128381,128383],{"className":126388,"code":128382,"language":126390,"meta":98,"style":98},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[83,128384,128385,128390,128396,128401],{"__ignoreMap":98},[102,128386,128387],{"class":104,"line":105},[102,128388,128389],{"class":126},"# 刷新当前终端的环境变量\n",[102,128391,128392,128394],{"class":104,"line":116},[102,128393,108758],{"class":187},[102,128395,128342],{"class":278},[102,128397,128398],{"class":104,"line":123},[102,128399,128400],{"class":126},"# 验证CUDA是否安装成功\n",[102,128402,128403,128406],{"class":104,"line":130},[102,128404,128405],{"class":112},"nvcc",[102,128407,128408],{"class":187}," -V\n",[14,128410,128411],{},"出现下图这种则安装成功。",[14,128413,128414],{},[6750,128415],{"alt":98,"src":128416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[48,128418,128420],{"id":128419},"_354-安装cudnn","3.5.4 安装cuDNN",[87,128422,128423],{},[62,128424,128425],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,128427,128428,128429,128434],{},"前往 NVIDIA cuDNN 下载页面：",[9275,128430,128433],{"href":128431,"rel":128432},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[31729],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,128436,128437],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,128439,128440],{},[6750,128441],{"alt":98,"src":128442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,128444,128445],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,128447,128448],{},[6750,128449],{"alt":98,"src":128450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,128452,128453],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,128455,128456],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,128458,128459],{},[18,128460,128461],{},"我这里选择所有Linux X86_64最通用的办法：",[14,128463,128464],{},"下载好的：",[14,128466,128467],{},[6750,128468],{"alt":98,"src":128469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[87,128471,128472],{"start":116},[62,128473,128474],{},"安装cuDNN",[14,128476,128477],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,128479,128480],{},[6750,128481],{"alt":98,"src":128482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,128484,128485],{},"解压文件，并复制到对应位置完成安装",[93,128487,128489],{"className":126388,"code":128488,"language":126390,"meta":98,"style":98},"# 解压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",[83,128490,128491,128496,128507,128512,128519,128524,128540,128554,128559,128570,128579,128583,128599],{"__ignoreMap":98},[102,128492,128493],{"class":104,"line":105},[102,128494,128495],{"class":126},"# 解压cuDNN文件\n",[102,128497,128498,128501,128504],{"class":104,"line":116},[102,128499,128500],{"class":112},"tar",[102,128502,128503],{"class":187}," -xvf",[102,128505,128506],{"class":278}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[102,128508,128509],{"class":104,"line":123},[102,128510,128511],{"class":126},"# cd进文件夹\n",[102,128513,128514,128516],{"class":104,"line":130},[102,128515,109141],{"class":187},[102,128517,128518],{"class":278}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[102,128520,128521],{"class":104,"line":136},[102,128522,128523],{"class":126},"# 复制cuDNN文件到CUDA目录\n",[102,128525,128526,128528,128530,128533,128535,128538],{"class":104,"line":142},[102,128527,32441],{"class":112},[102,128529,35726],{"class":278},[102,128531,128532],{"class":278}," include\u002Fcudnn",[102,128534,191],{"class":187},[102,128536,128537],{"class":278},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[102,128539,4328],{"class":119},[102,128541,128542,128544,128546,128549,128551],{"class":104,"line":148},[102,128543,32441],{"class":112},[102,128545,35726],{"class":278},[102,128547,128548],{"class":278}," lib\u002Flibcudnn",[102,128550,191],{"class":187},[102,128552,128553],{"class":278},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[102,128555,128556],{"class":104,"line":157},[102,128557,128558],{"class":126},"# 对比一下有没有缺文件\n",[102,128560,128561,128563,128566,128568],{"class":104,"line":163},[102,128562,34626],{"class":112},[102,128564,128565],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[102,128567,191],{"class":187},[102,128569,4328],{"class":119},[102,128571,128572,128574,128577],{"class":104,"line":175},[102,128573,34626],{"class":112},[102,128575,128576],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[102,128578,127113],{"class":187},[102,128580,128581],{"class":104,"line":181},[102,128582,128162],{"class":126},[102,128584,128585,128587,128589,128592,128594,128596],{"class":104,"line":202},[102,128586,32441],{"class":112},[102,128588,32444],{"class":278},[102,128590,128591],{"class":278}," a+r",[102,128593,128565],{"class":278},[102,128595,191],{"class":187},[102,128597,128598],{"class":119},"   \n",[102,128600,128601,128603,128605,128607,128609],{"class":104,"line":208},[102,128602,32441],{"class":112},[102,128604,32444],{"class":278},[102,128606,128591],{"class":278},[102,128608,128576],{"class":278},[102,128610,127113],{"class":187},[87,128612,128613],{"start":123},[62,128614,128615],{},"检查是否安装成功",[93,128617,128619],{"className":126388,"code":128618,"language":126390,"meta":98,"style":98},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[83,128620,128621,128626],{"__ignoreMap":98},[102,128622,128623],{"class":104,"line":105},[102,128624,128625],{"class":126},"# 检查cuDNN版本命令\n",[102,128627,128628,128631,128634,128636,128638,128641,128644],{"class":104,"line":116},[102,128629,128630],{"class":112},"cat",[102,128632,128633],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[102,128635,32974],{"class":108},[102,128637,38101],{"class":112},[102,128639,128640],{"class":278}," CUDNN_MAJOR",[102,128642,128643],{"class":187}," -A",[102,128645,55588],{"class":187},[14,128647,128648],{},"出现下图这样的就是安装成功了",[14,128650,128651],{},[6750,128652],{"alt":98,"src":128653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[87,128655,128656],{"start":130},[62,128657,128658],{},"软链接(一般不需要)",[93,128660,128662],{"className":126388,"code":128661,"language":126390,"meta":98,"style":98},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[83,128663,128664,128669],{"__ignoreMap":98},[102,128665,128666],{"class":104,"line":105},[102,128667,128668],{"class":126},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[102,128670,128671,128673],{"class":104,"line":116},[102,128672,32441],{"class":112},[102,128674,128675],{"class":278}," ldconfig\n",[14,128677,128678],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[93,128680,128685],{"className":128681,"code":128682,"language":128683,"meta":128684,"style":98},"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",[83,128686,128687,128692,128697,128702,128707,128712,128717],{"__ignoreMap":98},[102,128688,128689],{"class":104,"line":105},[102,128690,128691],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[102,128693,128694],{"class":104,"line":116},[102,128695,128696],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[102,128698,128699],{"class":104,"line":123},[102,128700,128701],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[102,128703,128704],{"class":104,"line":130},[102,128705,128706],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[102,128708,128709],{"class":104,"line":136},[102,128710,128711],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[102,128713,128714],{"class":104,"line":142},[102,128715,128716],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[102,128718,128719],{"class":104,"line":148},[102,128720,128721],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,128723,128724],{},"运行下方的命令",[93,128726,128728],{"className":126388,"code":128727,"language":126390,"meta":98,"style":98},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[83,128729,128730,128735,128742,128747],{"__ignoreMap":98},[102,128731,128732],{"class":104,"line":105},[102,128733,128734],{"class":126},"# cd进入CUDA路径\n",[102,128736,128737,128739],{"class":104,"line":116},[102,128738,109141],{"class":187},[102,128740,128741],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[102,128743,128744],{"class":104,"line":123},[102,128745,128746],{"class":126}," # 查看本路径下的需要软链接的文件名\n",[102,128748,128749],{"class":104,"line":130},[102,128750,128751],{"class":112}," ls\n",[14,128753,128754],{},[6750,128755],{"alt":98,"src":128756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,128758,128759,128760,3977,128763,3977,128766,128769],{},"如上图，我需要将",[83,128761,128762],{},"libcudnn_xxx_xxxxx.so.8.9.7",[83,128764,128765],{},"libcudnn_xxx_xxxxx.so.8",[83,128767,128768],{},"libcudnn_xxx_xxxxx.so","软链接",[93,128771,128773],{"className":126388,"code":128772,"language":126390,"meta":98,"style":98},"# 创建符号链接。对于每个 .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",[83,128774,128775,128780,128796,128810,128824,128838,128852,128866,128880,128885,128891,128896],{"__ignoreMap":98},[102,128776,128777],{"class":104,"line":105},[102,128778,128779],{"class":126},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[102,128781,128782,128784,128787,128790,128793],{"class":104,"line":116},[102,128783,32441],{"class":112},[102,128785,128786],{"class":278}," ln",[102,128788,128789],{"class":187}," -sf",[102,128791,128792],{"class":278}," libcudnn_cnn_train.so.8.9.7",[102,128794,128795],{"class":278}," libcudnn_cnn_train.so.8\n",[102,128797,128798,128800,128802,128804,128807],{"class":104,"line":123},[102,128799,32441],{"class":112},[102,128801,128786],{"class":278},[102,128803,128789],{"class":187},[102,128805,128806],{"class":278}," libcudnn_adv_infer.so.8.9.7",[102,128808,128809],{"class":278}," libcudnn_adv_infer.so.8\n",[102,128811,128812,128814,128816,128818,128821],{"class":104,"line":130},[102,128813,32441],{"class":112},[102,128815,128786],{"class":278},[102,128817,128789],{"class":187},[102,128819,128820],{"class":278}," libcudnn_adv_train.so.8.9.7",[102,128822,128823],{"class":278}," libcudnn_adv_train.so.8\n",[102,128825,128826,128828,128830,128832,128835],{"class":104,"line":136},[102,128827,32441],{"class":112},[102,128829,128786],{"class":278},[102,128831,128789],{"class":187},[102,128833,128834],{"class":278}," libcudnn_cnn_infer.so.8.9.7",[102,128836,128837],{"class":278}," libcudnn_cnn_infer.so.8\n",[102,128839,128840,128842,128844,128846,128849],{"class":104,"line":142},[102,128841,32441],{"class":112},[102,128843,128786],{"class":278},[102,128845,128789],{"class":187},[102,128847,128848],{"class":278}," libcudnn.so.8.9.7",[102,128850,128851],{"class":278}," libcudnn.so.8\n",[102,128853,128854,128856,128858,128860,128863],{"class":104,"line":148},[102,128855,32441],{"class":112},[102,128857,128786],{"class":278},[102,128859,128789],{"class":187},[102,128861,128862],{"class":278}," libcudnn_ops_infer.so.8.9.7",[102,128864,128865],{"class":278}," libcudnn_ops_infer.so.8\n",[102,128867,128868,128870,128872,128874,128877],{"class":104,"line":157},[102,128869,32441],{"class":112},[102,128871,128786],{"class":278},[102,128873,128789],{"class":187},[102,128875,128876],{"class":278}," libcudnn_ops_train.so.8.9.7",[102,128878,128879],{"class":278}," libcudnn_ops_train.so.8\n",[102,128881,128882],{"class":104,"line":163},[102,128883,128884],{"class":126},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[102,128886,128887,128889],{"class":104,"line":175},[102,128888,32441],{"class":112},[102,128890,128675],{"class":278},[102,128892,128893],{"class":104,"line":181},[102,128894,128895],{"class":126},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[102,128897,128898,128900,128903,128906,128908,128911],{"class":104,"line":202},[102,128899,34626],{"class":112},[102,128901,128902],{"class":187}," -l",[102,128904,128905],{"class":278}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[102,128907,191],{"class":187},[102,128909,128910],{"class":278},".so",[102,128912,127113],{"class":187},[48,128914,128916],{"id":128915},"_355-常见问题","3.5.5 常见问题",[87,128918,128919],{},[62,128920,128921],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[93,128923,128925],{"className":126388,"code":128924,"language":126390,"meta":98,"style":98},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[83,128926,128927],{"__ignoreMap":98},[102,128928,128929,128931,128933],{"class":104,"line":105},[102,128930,32441],{"class":112},[102,128932,126448],{"class":278},[102,128934,128935],{"class":278}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,128937,128938],{},"blacklist-nouveau.conf文件内容如下：",[93,128940,128942],{"className":126388,"code":128941,"language":126390,"meta":98,"style":98},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[83,128943,128944,128952,128959,128971,128981],{"__ignoreMap":98},[102,128945,128946,128949],{"class":104,"line":105},[102,128947,128948],{"class":112},"blacklist",[102,128950,128951],{"class":278}," nouveau\n",[102,128953,128954,128956],{"class":104,"line":116},[102,128955,128948],{"class":112},[102,128957,128958],{"class":278}," lbm-nouveau\n",[102,128960,128961,128963,128966,128969],{"class":104,"line":123},[102,128962,123795],{"class":112},[102,128964,128965],{"class":278}," nouveau",[102,128967,128968],{"class":278}," modeset=",[102,128970,11901],{"class":187},[102,128972,128973,128976,128978],{"class":104,"line":130},[102,128974,128975],{"class":187},"alias",[102,128977,128965],{"class":278},[102,128979,128980],{"class":278}," off\n",[102,128982,128983,128985,128988],{"class":104,"line":136},[102,128984,128975],{"class":187},[102,128986,128987],{"class":278}," lbm-nouveau",[102,128989,128980],{"class":278},[14,128991,128992],{},"接着运行下方命令",[93,128994,128996],{"className":126388,"code":128995,"language":126390,"meta":98,"style":98},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[83,128997,128998,129008,129013],{"__ignoreMap":98},[102,128999,129000,129002,129005],{"class":104,"line":105},[102,129001,32441],{"class":112},[102,129003,129004],{"class":278}," update-initramfs",[102,129006,129007],{"class":187}," -u\n",[102,129009,129010],{"class":104,"line":116},[102,129011,129012],{"class":112},"或者\n",[102,129014,129015,129017,129020],{"class":104,"line":123},[102,129016,32441],{"class":112},[102,129018,129019],{"class":278}," dracut",[102,129021,129022],{"class":187}," --force\n",[14,129024,129025],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[93,129027,129029],{"className":126388,"code":129028,"language":126390,"meta":98,"style":98},"lsmod | grep nouveau\n",[83,129030,129031],{"__ignoreMap":98},[102,129032,129033,129036,129038,129040],{"class":104,"line":105},[102,129034,129035],{"class":112},"lsmod",[102,129037,32974],{"class":108},[102,129039,38101],{"class":112},[102,129041,128951],{"class":278},[87,129043,129044],{"start":116},[62,129045,129046],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[93,129048,129050],{"className":126388,"code":129049,"language":126390,"meta":98,"style":98},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[83,129051,129052],{"__ignoreMap":98},[102,129053,129054,129056,129058],{"class":104,"line":105},[102,129055,32441],{"class":112},[102,129057,126448],{"class":278},[102,129059,129060],{"class":278}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,129062,129063],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[93,129065,129067],{"className":126388,"code":129066,"language":126390,"meta":98,"style":98},"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",[83,129068,129069,129077,129085,129093,129100,129108,129118,129126],{"__ignoreMap":98},[102,129070,129071,129074],{"class":104,"line":105},[102,129072,129073],{"class":112},"Section",[102,129075,129076],{"class":278}," \"OutputClass\"\n",[102,129078,129079,129082],{"class":104,"line":116},[102,129080,129081],{"class":112},"   Identifier",[102,129083,129084],{"class":278}," \"nvidia\"\n",[102,129086,129087,129090],{"class":104,"line":123},[102,129088,129089],{"class":112},"   MatchDriver",[102,129091,129092],{"class":278}," \"nvidia-drm\"\n",[102,129094,129095,129098],{"class":104,"line":130},[102,129096,129097],{"class":112},"   Driver",[102,129099,129084],{"class":278},[102,129101,129102,129105],{"class":104,"line":136},[102,129103,129104],{"class":112},"   Option",[102,129106,129107],{"class":278}," \"AllowEmptyInitialConfiguration\"\n",[102,129109,129110,129112,129115],{"class":104,"line":142},[102,129111,129104],{"class":112},[102,129113,129114],{"class":278}," \"PrimaryGPU\"",[102,129116,129117],{"class":278}," \"yes\"\n",[102,129119,129120,129123],{"class":104,"line":148},[102,129121,129122],{"class":112},"   ModulePath",[102,129124,129125],{"class":278}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[102,129127,129128],{"class":104,"line":157},[102,129129,129130],{"class":112},"EndSection\n",[87,129132,129133],{"start":123},[62,129134,129135],{},"安装N卡驱动提示错误",[93,129137,129139],{"className":128681,"code":129138,"language":128683,"meta":128684,"style":98},"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",[83,129140,129141],{"__ignoreMap":98},[102,129142,129143],{"class":104,"line":105},[102,129144,129138],{},[87,129146,129147],{},[62,129148,129149],{},"检查当前运行的内核版本：",[14,129151,129152],{},"运行以下命令以查看你当前正在使用的内核版本：",[93,129154,129156],{"className":125161,"code":129155,"language":125163,"meta":98,"style":98},"uname -r\n",[83,129157,129158],{"__ignoreMap":98},[102,129159,129160,129162],{"class":104,"line":105},[102,129161,78069],{"class":112},[102,129163,129164],{"class":187}," -r\n",[87,129166,129167],{"start":116},[62,129168,129169],{},"安装内核开发文件：",[14,129171,129172,129173,129176],{},"确保你已经安装了与当前内核版本相匹配的 ",[83,129174,129175],{},"kernel-devel"," 包。运行以下命令来安装：",[93,129178,129180],{"className":125161,"code":129179,"language":125163,"meta":98,"style":98},"sudo dnf install kernel-devel-$(uname -r)\n",[83,129181,129182],{"__ignoreMap":98},[102,129183,129184,129186,129188,129190,129193,129195,129197,129199],{"class":104,"line":105},[102,129185,32441],{"class":112},[102,129187,34180],{"class":278},[102,129189,31698],{"class":278},[102,129191,129192],{"class":278}," kernel-devel-",[102,129194,32964],{"class":119},[102,129196,78069],{"class":112},[102,129198,127504],{"class":187},[102,129200,390],{"class":119},[14,129202,129203],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[87,129205,129206],{"start":123},[62,129207,129208],{},"安装内核源代码（如果需要）：",[14,129210,129211],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[93,129213,129215],{"className":125161,"code":129214,"language":125163,"meta":98,"style":98},"sudo dnf install kernel-headers kernel-source\n",[83,129216,129217],{"__ignoreMap":98},[102,129218,129219,129221,129223,129225,129228],{"class":104,"line":105},[102,129220,32441],{"class":112},[102,129222,34180],{"class":278},[102,129224,31698],{"class":278},[102,129226,129227],{"class":278}," kernel-headers",[102,129229,129230],{"class":278}," kernel-source\n",[87,129232,129233],{"start":130},[62,129234,129235],{},"检查安装：",[14,129237,129238,129239,129242],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[83,129240,129241],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[93,129244,129246],{"className":125161,"code":129245,"language":125163,"meta":98,"style":98},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[83,129247,129248],{"__ignoreMap":98},[102,129249,129250,129252],{"class":104,"line":105},[102,129251,34626],{"class":112},[102,129253,129254],{"class":278}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,129256,129257,129258,129261],{},"如果仍然遇到问题，可以通过 ",[83,129259,129260],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[8955,129263,129264],{},"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":98,"searchDepth":116,"depth":116,"links":129266},[129267,129271,129281,129285,129286],{"id":126364,"depth":116,"text":126365,"children":129268},[129269,129270],{"id":126374,"depth":123,"text":126375},{"id":126384,"depth":123,"text":126385},{"id":126584,"depth":116,"text":126585,"children":129272},[129273,129274,129275,129276,129277,129278,129279,129280],{"id":126588,"depth":123,"text":126589},{"id":126658,"depth":123,"text":126659},{"id":126747,"depth":123,"text":126748},{"id":126992,"depth":123,"text":126993},{"id":127062,"depth":123,"text":127063},{"id":127129,"depth":123,"text":127130},{"id":127164,"depth":123,"text":127165},{"id":127219,"depth":123,"text":127220},{"id":127270,"depth":116,"text":127271,"children":129282},[129283,129284],{"id":127274,"depth":123,"text":127275},{"id":127354,"depth":123,"text":127355},{"id":127540,"depth":116,"text":127541},{"id":127713,"depth":116,"text":127714,"children":129287},[129288,129289,129290,129291,129292],{"id":127717,"depth":123,"text":127718},{"id":127758,"depth":123,"text":127759},{"id":128045,"depth":123,"text":128046},{"id":128419,"depth":123,"text":128420},{"id":128915,"depth":123,"text":128916},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":126356,"description":31240},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":129299,"title":129300,"body":129301,"description":31240,"extension":8978,"meta":129641,"navigation":651,"path":129642,"seo":129643,"stem":129644,"__hash__":129645},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":129302,"toc":129639},[129303,129306,129311,129314,129560,129565,129568,129604,129607,129636],[10,129304,129300],{"id":129305},"_4-命令教程长期积累",[87,129307,129308],{},[62,129309,129310],{},"大多数命令",[14,129312,129313],{},"常用 Linux 命令速查：",[93,129315,129317],{"className":125161,"code":129316,"language":125163,"meta":98,"style":98},"# 文件与目录\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",[83,129318,129319,129324,129331,129338,129346,129353,129360,129368,129376,129383,129390,129398,129402,129407,129414,129422,129429,129433,129438,129445,129453,129461,129469,129477,129481,129486,129494,129501,129508,129516,129524,129528,129533,129542,129551],{"__ignoreMap":98},[102,129320,129321],{"class":104,"line":105},[102,129322,129323],{"class":126},"# 文件与目录\n",[102,129325,129326,129328],{"class":104,"line":116},[102,129327,34626],{"class":112},[102,129329,129330],{"class":126},"        # 列出目录内容\n",[102,129332,129333,129335],{"class":104,"line":123},[102,129334,109141],{"class":187},[102,129336,129337],{"class":126},"        # 切换目录\n",[102,129339,129340,129343],{"class":104,"line":130},[102,129341,129342],{"class":187},"pwd",[102,129344,129345],{"class":126},"       # 显示当前路径\n",[102,129347,129348,129350],{"class":104,"line":136},[102,129349,109131],{"class":112},[102,129351,129352],{"class":126},"     # 创建目录\n",[102,129354,129355,129357],{"class":104,"line":142},[102,129356,33187],{"class":112},[102,129358,129359],{"class":126},"        # 删除文件或目录\n",[102,129361,129362,129365],{"class":104,"line":148},[102,129363,129364],{"class":112},"cp",[102,129366,129367],{"class":126},"        # 复制文件或目录\n",[102,129369,129370,129373],{"class":104,"line":157},[102,129371,129372],{"class":112},"mv",[102,129374,129375],{"class":126},"        # 移动\u002F重命名文件或目录\n",[102,129377,129378,129380],{"class":104,"line":163},[102,129379,109148],{"class":112},[102,129381,129382],{"class":126},"     # 创建空文件\n",[102,129384,129385,129387],{"class":104,"line":175},[102,129386,128630],{"class":112},[102,129388,129389],{"class":126},"       # 查看文件内容\n",[102,129391,129392,129395],{"class":104,"line":181},[102,129393,129394],{"class":112},"head\u002Ftail",[102,129396,129397],{"class":126}," # 查看文件头部\u002F尾部\n",[102,129399,129400],{"class":104,"line":202},[102,129401,652],{"emptyLinePlaceholder":651},[102,129403,129404],{"class":104,"line":208},[102,129405,129406],{"class":126},"# 权限管理\n",[102,129408,129409,129411],{"class":104,"line":214},[102,129410,32476],{"class":112},[102,129412,129413],{"class":126},"     # 修改文件权限\n",[102,129415,129416,129419],{"class":104,"line":225},[102,129417,129418],{"class":112},"chown",[102,129420,129421],{"class":126},"     # 修改文件所有者\n",[102,129423,129424,129426],{"class":104,"line":230},[102,129425,32441],{"class":112},[102,129427,129428],{"class":126},"      # 以管理员身份执行\n",[102,129430,129431],{"class":104,"line":236},[102,129432,652],{"emptyLinePlaceholder":651},[102,129434,129435],{"class":104,"line":242},[102,129436,129437],{"class":126},"# 系统信息\n",[102,129439,129440,129442],{"class":104,"line":248},[102,129441,78069],{"class":112},[102,129443,129444],{"class":126},"     # 系统信息\n",[102,129446,129447,129450],{"class":104,"line":254},[102,129448,129449],{"class":112},"df",[102,129451,129452],{"class":126},"        # 磁盘使用情况\n",[102,129454,129455,129458],{"class":104,"line":269},[102,129456,129457],{"class":112},"free",[102,129459,129460],{"class":126},"      # 内存使用情况\n",[102,129462,129463,129466],{"class":104,"line":298},[102,129464,129465],{"class":112},"top\u002Fhtop",[102,129467,129468],{"class":126},"  # 进程监控\n",[102,129470,129471,129474],{"class":104,"line":502},[102,129472,129473],{"class":112},"ps",[102,129475,129476],{"class":126},"        # 查看进程\n",[102,129478,129479],{"class":104,"line":507},[102,129480,652],{"emptyLinePlaceholder":651},[102,129482,129483],{"class":104,"line":512},[102,129484,129485],{"class":126},"# 网络\n",[102,129487,129488,129491],{"class":104,"line":521},[102,129489,129490],{"class":112},"ping",[102,129492,129493],{"class":126},"      # 测试网络连通性\n",[102,129495,129496,129498],{"class":104,"line":526},[102,129497,34714],{"class":112},[102,129499,129500],{"class":126},"      # 发送 HTTP 请求\n",[102,129502,129503,129505],{"class":104,"line":532},[102,129504,128154],{"class":112},[102,129506,129507],{"class":126},"      # 下载文件\n",[102,129509,129510,129513],{"class":104,"line":538},[102,129511,129512],{"class":112},"ssh",[102,129514,129515],{"class":126},"       # 远程登录\n",[102,129517,129518,129521],{"class":104,"line":555},[102,129519,129520],{"class":112},"scp",[102,129522,129523],{"class":126},"       # 远程文件传输\n",[102,129525,129526],{"class":104,"line":570},[102,129527,652],{"emptyLinePlaceholder":651},[102,129529,129530],{"class":104,"line":581},[102,129531,129532],{"class":126},"# 包管理（Debian\u002FUbuntu）\n",[102,129534,129535,129537,129539],{"class":104,"line":819},[102,129536,125233],{"class":112},[102,129538,125212],{"class":278},[102,129540,129541],{"class":126},"   # 更新软件源\n",[102,129543,129544,129546,129548],{"class":104,"line":828},[102,129545,125233],{"class":112},[102,129547,31698],{"class":278},[102,129549,129550],{"class":126},"  # 安装软件包\n",[102,129552,129553,129555,129557],{"class":104,"line":837},[102,129554,125233],{"class":112},[102,129556,33944],{"class":278},[102,129558,129559],{"class":126},"   # 卸载软件包\n",[87,129561,129562],{"start":116},[62,129563,129564],{},"KDE Dolphin 以root打开",[14,129566,129567],{},"kde5",[93,129569,129571],{"className":125161,"code":129570,"language":125163,"meta":98,"style":98},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[83,129572,129573],{"__ignoreMap":98},[102,129574,129575,129578,129581,129584,129586,129588,129591,129594,129596,129599,129601],{"class":104,"line":105},[102,129576,129577],{"class":112},"pkexec",[102,129579,129580],{"class":278}," env",[102,129582,129583],{"class":278}," DISPLAY=",[102,129585,36008],{"class":119},[102,129587,36066],{"class":278},[102,129589,129590],{"class":119},"$XAUTHORITY ",[102,129592,129593],{"class":278},"KDE_SESSION_VERSION=",[102,129595,9354],{"class":187},[102,129597,129598],{"class":278}," KDE_FULL_SESSION=",[102,129600,10244],{"class":187},[102,129602,129603],{"class":278}," dolphin\n",[14,129605,129606],{},"kde6",[93,129608,129610],{"className":125161,"code":129609,"language":125163,"meta":98,"style":98},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[83,129611,129612],{"__ignoreMap":98},[102,129613,129614,129616,129618,129620,129622,129624,129626,129628,129630,129632,129634],{"class":104,"line":105},[102,129615,129577],{"class":112},[102,129617,129580],{"class":278},[102,129619,129583],{"class":278},[102,129621,36008],{"class":119},[102,129623,36066],{"class":278},[102,129625,129590],{"class":119},[102,129627,129593],{"class":278},[102,129629,9379],{"class":187},[102,129631,129598],{"class":278},[102,129633,10244],{"class":187},[102,129635,129603],{"class":278},[8955,129637,129638],{},"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":98,"searchDepth":116,"depth":116,"links":129640},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":129300,"description":31240},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":129647,"title":129648,"body":129649,"description":31240,"extension":8978,"meta":129663,"navigation":651,"path":129664,"seo":129665,"stem":129666,"__hash__":129667},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":129650,"toc":129661},[129651,129654],[10,129652,129648],{"id":129653},"_5-各种环境配置",[14,129655,129656],{},[9275,129657,129660],{"href":129658,"rel":129659},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[31729],"电控组环境搭建大全",{"title":98,"searchDepth":116,"depth":116,"links":129662},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":129648,"description":31240},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":129669,"title":129670,"body":129671,"description":31240,"extension":8978,"meta":130019,"navigation":651,"path":130020,"seo":130021,"stem":130022,"__hash__":130023},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":129672,"toc":130011},[129673,129676,129680,129684,129688,129693,129700,129704,129997,130001,130008],[10,129674,129670],{"id":129675},"_6-拓展功能",[43,129677,129679],{"id":129678},"_61-wine","6.1 Wine",[43,129681,129683],{"id":129682},"_62-android","6.2 Android",[48,129685,129687],{"id":129686},"_621-i卡a卡","6.2.1 I卡、A卡",[87,129689,129690],{},[62,129691,129692],{},"Wayland-Waydroid(体验超级好)",[14,129694,129695,129696],{},"Waydroid 官网与安装指南：",[9275,129697,129698],{"href":129698,"rel":129699},"https:\u002F\u002Fwaydro.id\u002F",[31729],[48,129701,129703],{"id":129702},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[87,129705,129706],{},[62,129707,129708,129709,129711,129712,129716,129718,129721,129726,129923],{},"QEMU-KVM虚拟机 + BlissOS-X86",[61581,129710],{},"BlissOS 官网下载：",[9275,129713,129714],{"href":129714,"rel":129715},"https:\u002F\u002Fblissos.org\u002F",[31729],[61581,129717],{},[6750,129719],{"alt":98,"src":129720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[87,129722,129723],{"start":123},[62,129724,129725],{},"比较推荐的配置",[93,129727,129729],{"className":125161,"code":129728,"language":125163,"meta":98,"style":98},"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",[83,129730,129731,129738,129748,129758,129768,129780,129790,129797,129807,129816,129825,129835,129845,129854,129864,129874,129886,129896,129905,129915],{"__ignoreMap":98},[102,129732,129733,129736],{"class":104,"line":105},[102,129734,129735],{"class":112},"qemu-system-x86_64",[102,129737,32543],{"class":187},[102,129739,129740,129743,129746],{"class":104,"line":116},[102,129741,129742],{"class":187},"        -M",[102,129744,129745],{"class":278}," q35,vmport=off",[102,129747,32543],{"class":187},[102,129749,129750,129753,129756],{"class":104,"line":123},[102,129751,129752],{"class":187},"        -accel",[102,129754,129755],{"class":278}," kvm",[102,129757,32543],{"class":187},[102,129759,129760,129763,129766],{"class":104,"line":130},[102,129761,129762],{"class":187},"        -cpu",[102,129764,129765],{"class":278}," qemu64,+sse3,+sse4.2",[102,129767,32543],{"class":187},[102,129769,129770,129773,129776,129778],{"class":104,"line":136},[102,129771,129772],{"class":187},"        -smp",[102,129774,129775],{"class":278}," 8,cores=",[102,129777,9329],{"class":187},[102,129779,32543],{"class":187},[102,129781,129782,129785,129788],{"class":104,"line":142},[102,129783,129784],{"class":187},"        -m",[102,129786,129787],{"class":278}," 6G",[102,129789,32543],{"class":187},[102,129791,129792,129795],{"class":104,"line":148},[102,129793,129794],{"class":187},"        -usb",[102,129796,32543],{"class":187},[102,129798,129799,129802,129805],{"class":104,"line":157},[102,129800,129801],{"class":187},"        -device",[102,129803,129804],{"class":278}," virtio-tablet",[102,129806,32543],{"class":187},[102,129808,129809,129811,129814],{"class":104,"line":163},[102,129810,129801],{"class":187},[102,129812,129813],{"class":278}," virtio-keyboard",[102,129815,32543],{"class":187},[102,129817,129818,129820,129823],{"class":104,"line":175},[102,129819,129801],{"class":187},[102,129821,129822],{"class":278}," usb-tablet",[102,129824,32543],{"class":187},[102,129826,129827,129830,129833],{"class":104,"line":181},[102,129828,129829],{"class":187},"        -bios",[102,129831,129832],{"class":278}," OVMF-pure-efi64.fd",[102,129834,32543],{"class":187},[102,129836,129837,129840,129843],{"class":104,"line":202},[102,129838,129839],{"class":187},"        -net",[102,129841,129842],{"class":278}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[102,129844,32543],{"class":187},[102,129846,129847,129849,129852],{"class":104,"line":208},[102,129848,129839],{"class":187},[102,129850,129851],{"class":278}," nic,model=virtio",[102,129853,32543],{"class":187},[102,129855,129856,129859,129862],{"class":104,"line":214},[102,129857,129858],{"class":187},"        -audio",[102,129860,129861],{"class":278}," sdl,model=hda",[102,129863,32543],{"class":187},[102,129865,129866,129869,129872],{"class":104,"line":225},[102,129867,129868],{"class":187},"        -display",[102,129870,129871],{"class":278}," sdl,gl=on,show-cursor=on",[102,129873,32543],{"class":187},[102,129875,129876,129878,129881,129884],{"class":104,"line":230},[102,129877,129801],{"class":187},[102,129879,129880],{"class":278}," virtio-vga-gl,xres=1920,yres=",[102,129882,129883],{"class":187},"1080",[102,129885,32543],{"class":187},[102,129887,129888,129891,129894],{"class":104,"line":236},[102,129889,129890],{"class":187},"        -drive",[102,129892,129893],{"class":278}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[102,129895,32543],{"class":187},[102,129897,129898,129900,129903],{"class":104,"line":242},[102,129899,129890],{"class":187},[102,129901,129902],{"class":278}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[102,129904,32543],{"class":187},[102,129906,129907,129910,129913],{"class":104,"line":248},[102,129908,129909],{"class":187},"        -monitor",[102,129911,129912],{"class":278}," stdio",[102,129914,32543],{"class":187},[102,129916,129917,129920],{"class":104,"line":254},[102,129918,129919],{"class":187},"        -serial",[102,129921,129922],{"class":278}," none\n",[87,129924,129925],{"start":136},[62,129926,129927,129928],{},"常用操作：",[87,129929,129930,129933,129989],{},[62,129931,129932],{},"全屏：Ctrl+Alt+F",[62,129934,129935,129936,129941],{},"adb调试",[87,129937,129938],{},[62,129939,129940],{},"使Linux与Android用ADB连接。",[93,129942,129944],{"className":125161,"code":129943,"language":125163,"meta":98,"style":98},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[83,129945,129946,129951,129962,129967,129979,129984],{"__ignoreMap":98},[102,129947,129948],{"class":104,"line":105},[102,129949,129950],{"class":126},"# 连接安卓\n",[102,129952,129953,129956,129959],{"class":104,"line":116},[102,129954,129955],{"class":112},"adb",[102,129957,129958],{"class":278}," connect",[102,129960,129961],{"class":187}," 127.0.0.1\n",[102,129963,129964],{"class":104,"line":123},[102,129965,129966],{"class":126},"# 打开shell\n",[102,129968,129969,129971,129973,129976],{"class":104,"line":130},[102,129970,129955],{"class":112},[102,129972,34748],{"class":187},[102,129974,129975],{"class":278}," 127.0.0.1:5555",[102,129977,129978],{"class":278}," shell\n",[102,129980,129981],{"class":104,"line":136},[102,129982,129983],{"class":126},"# 使用root权限\n",[102,129985,129986],{"class":104,"line":142},[102,129987,129988],{"class":112},"su\n",[62,129990,129991,129992],{},"中文输入法",[87,129993,129994],{},[62,129995,129996],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[43,129998,130000],{"id":129999},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,130002,130003,130004],{},"rEFInd 官网与文档：",[9275,130005,130006],{"href":130006,"rel":130007},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[31729],[8955,130009,130010],{},"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":98,"searchDepth":116,"depth":116,"links":130012},[130013,130014,130018],{"id":129678,"depth":116,"text":129679},{"id":129682,"depth":116,"text":129683,"children":130015},[130016,130017],{"id":129686,"depth":123,"text":129687},{"id":129702,"depth":123,"text":129703},{"id":129999,"depth":116,"text":130000},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":129670,"description":31240},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":130025,"title":130026,"body":130027,"description":31240,"extension":8978,"meta":133326,"navigation":651,"path":133327,"seo":133328,"stem":133329,"__hash__":133330},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":130028,"toc":133300},[130029,130032,130036,130039,130046,130296,130299,130371,130374,130378,130382,130387,130390,130393,130396,130401,130404,130407,130410,130415,130418,130423,130426,130429,130434,130437,130442,130445,130449,130453,130456,130461,130464,130478,130481,130484,130493,130496,130505,130508,130511,130520,130523,130532,130535,130538,130547,130550,130553,130568,130571,130574,130583,130588,130591,130594,130603,130606,130615,130618,130627,130630,130639,130644,130647,130655,130660,130663,130672,130675,130683,130688,130691,130700,130703,130706,130710,130713,130718,130721,130726,130740,130745,130750,130761,130766,130772,130777,130792,130797,130800,130805,130810,130815,130823,130828,130835,130840,130851,130856,130859,130863,130866,130869,130874,130877,130896,130901,130904,130913,130918,130921,130943,130946,130976,130979,130984,130987,131001,131006,131025,131028,131031,131036,131048,131053,131058,131061,131066,131069,131084,131087,131092,131097,131101,131106,131146,131149,131153,131159,131165,131170,131173,131180,131185,131192,131195,131198,131205,131219,131222,131282,131285,131299,131311,131314,131317,131320,131384,131387,131390,131393,131413,131416,131421,131428,131432,131435,131439,131444,131449,131453,131456,131459,131501,131506,131509,131531,131546,131548,131553,131565,131625,131627,131629,131683,131685,131687,131693,131698,131701,131706,131710,131713,131775,131780,131783,131785,131789,131801,131883,131885,131887,131941,131947,131949,131953,131958,131960,131965,131969,131989,132024,132028,132031,132034,132037,132044,132047,132059,132062,132077,132080,132099,132147,132150,132167,132170,132184,132189,132192,132201,132216,132228,132266,132271,132280,132285,132290,132316,132325,132329,132333,132338,132341,132345,132349,132354,132357,132362,132365,132370,132373,132378,132381,132385,132390,132393,132398,132401,132405,132410,132413,132418,132421,132426,132429,132433,132438,132441,132446,132449,132454,132457,132461,132466,132469,132474,132477,132482,132485,132490,132493,132498,132501,132506,132509,132513,132518,132521,132526,132533,132537,132542,132545,132550,132553,132557,132562,132565,132568,132571,132574,132577,132581,132584,132594,132599,132604,132626,132631,132636,132643,132647,132652,132655,132658,132663,132666,132669,132672,132675,132678,132681,132684,132687,132690,132693,132696,132699,132704,132709,132714,132719,132724,132729,132734,132737,132741,132744,132748,132753,132758,132763,132768,132772,132778,132786,132791,132794,132799,132814,132817,132822,132856,132871,132874,132929,132955,132967,132970,132979,132982,132997,133002,133005,133011,133016,133019,133024,133027,133032,133037,133044,133047,133062,133065,133100,133105,133113,133151,133154,133157,133162,133165,133170,133181,133215,133220,133223,133232,133237,133243,133246,133251,133260,133265,133268,133271,133276,133284,133287,133292,133297],[10,130030,130026],{"id":130031},"_7-其他操作",[43,130033,130035],{"id":130034},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,130037,130038],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,130040,130041,130042,130045],{},"进入工控机的硬盘目录，进入",[83,130043,130044],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[93,130047,130051],{"className":130048,"code":130049,"language":130050,"meta":98,"style":98},"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",[83,130052,130053,130061,130072,130079,130086,130098,130105,130117,130128,130139,130146,130153,130160,130172,130184,130191,130203,130215,130222,130234,130246,130258,130269,130276,130287],{"__ignoreMap":98},[102,130054,130055,130058],{"class":104,"line":105},[102,130056,130057],{"class":59165},"network",[102,130059,130060],{"class":119},": \n",[102,130062,130063,130066,130068,130070],{"class":104,"line":116},[102,130064,130065],{"class":59165},"  version",[102,130067,59302],{"class":119},[102,130069,7044],{"class":187},[102,130071,4328],{"class":119},[102,130073,130074,130077],{"class":104,"line":123},[102,130075,130076],{"class":59165},"  wifis",[102,130078,130060],{"class":119},[102,130080,130081,130084],{"class":104,"line":130},[102,130082,130083],{"class":59165},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[102,130085,130060],{"class":119},[102,130087,130088,130091,130093,130096],{"class":104,"line":136},[102,130089,130090],{"class":59165},"      renderer",[102,130092,59302],{"class":119},[102,130094,130095],{"class":278},"NetworkManager",[102,130097,4328],{"class":119},[102,130099,130100,130103],{"class":104,"line":142},[102,130101,130102],{"class":59165},"      match",[102,130104,130060],{"class":119},[102,130106,130107,130110,130112,130115],{"class":104,"line":148},[102,130108,130109],{"class":59165},"        name",[102,130111,59302],{"class":119},[102,130113,130114],{"class":278},"\"wlan0\"",[102,130116,4328],{"class":119},[102,130118,130119,130122,130124,130126],{"class":104,"line":157},[102,130120,130121],{"class":59165},"      dhcp4",[102,130123,59302],{"class":119},[102,130125,10244],{"class":187},[102,130127,4328],{"class":119},[102,130129,130130,130133,130135,130137],{"class":104,"line":163},[102,130131,130132],{"class":59165},"      dhcp6",[102,130134,59302],{"class":119},[102,130136,10244],{"class":187},[102,130138,4328],{"class":119},[102,130140,130141,130144],{"class":104,"line":175},[102,130142,130143],{"class":59165},"      access-points",[102,130145,130060],{"class":119},[102,130147,130148,130151],{"class":104,"line":181},[102,130149,130150],{"class":278},"        \"EMIS_Vinci_Robocon_5G\"",[102,130152,130060],{"class":119},[102,130154,130155,130158],{"class":104,"line":202},[102,130156,130157],{"class":59165},"          auth",[102,130159,130060],{"class":119},[102,130161,130162,130165,130167,130170],{"class":104,"line":208},[102,130163,130164],{"class":59165},"            key-management",[102,130166,59302],{"class":119},[102,130168,130169],{"class":278},"\"psk\"",[102,130171,4328],{"class":119},[102,130173,130174,130177,130179,130182],{"class":104,"line":214},[102,130175,130176],{"class":59165},"            password",[102,130178,59302],{"class":119},[102,130180,130181],{"class":278},"\"vinci666\"",[102,130183,4328],{"class":119},[102,130185,130186,130189],{"class":104,"line":225},[102,130187,130188],{"class":59165},"          networkmanager",[102,130190,130060],{"class":119},[102,130192,130193,130196,130198,130201],{"class":104,"line":230},[102,130194,130195],{"class":59165},"            uuid",[102,130197,59302],{"class":119},[102,130199,130200],{"class":278},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[102,130202,4328],{"class":119},[102,130204,130205,130208,130210,130213],{"class":104,"line":236},[102,130206,130207],{"class":59165},"            name",[102,130209,59302],{"class":119},[102,130211,130212],{"class":278},"\"EMIS_Vinci_Robocon_5G\"",[102,130214,4328],{"class":119},[102,130216,130217,130220],{"class":104,"line":242},[102,130218,130219],{"class":59165},"            passthrough",[102,130221,130060],{"class":119},[102,130223,130224,130227,130229,130232],{"class":104,"line":248},[102,130225,130226],{"class":59165},"              wifi-security.auth-alg",[102,130228,59302],{"class":119},[102,130230,130231],{"class":278},"\"open\"",[102,130233,4328],{"class":119},[102,130235,130236,130239,130241,130244],{"class":104,"line":254},[102,130237,130238],{"class":59165},"              ipv6.addr-gen-mode",[102,130240,59302],{"class":119},[102,130242,130243],{"class":278},"\"default\"",[102,130245,4328],{"class":119},[102,130247,130248,130251,130253,130256],{"class":104,"line":269},[102,130249,130250],{"class":59165},"              ipv6.ip6-privacy",[102,130252,59302],{"class":119},[102,130254,130255],{"class":278},"\"-1\"",[102,130257,4328],{"class":119},[102,130259,130260,130263,130265,130267],{"class":104,"line":298},[102,130261,130262],{"class":59165},"              proxy._",[102,130264,59302],{"class":119},[102,130266,16439],{"class":278},[102,130268,4328],{"class":119},[102,130270,130271,130274],{"class":104,"line":502},[102,130272,130273],{"class":59165},"      networkmanager",[102,130275,130060],{"class":119},[102,130277,130278,130281,130283,130285],{"class":104,"line":507},[102,130279,130280],{"class":59165},"        uuid",[102,130282,59302],{"class":119},[102,130284,130200],{"class":278},[102,130286,4328],{"class":119},[102,130288,130289,130291,130293],{"class":104,"line":512},[102,130290,130109],{"class":59165},[102,130292,59302],{"class":119},[102,130294,130295],{"class":278},"\"EMIS_Vinci_Robocon_5G\"\n",[14,130297,130298],{},"将其改为新wifi的名和密码：",[93,130300,130302],{"className":130048,"code":130301,"language":130050,"meta":98,"style":98},"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",[83,130303,130304,130310,130319,130325,130332,130341,130349,130355,130361],{"__ignoreMap":98},[102,130305,130306,130308],{"class":104,"line":105},[102,130307,130057],{"class":59165},[102,130309,12552],{"class":119},[102,130311,130312,130314,130316],{"class":104,"line":116},[102,130313,130065],{"class":59165},[102,130315,59302],{"class":119},[102,130317,130318],{"class":187},"2\n",[102,130320,130321,130323],{"class":104,"line":123},[102,130322,130076],{"class":59165},[102,130324,12552],{"class":119},[102,130326,130327,130330],{"class":104,"line":130},[102,130328,130329],{"class":59165},"    wlan0",[102,130331,12552],{"class":119},[102,130333,130334,130336,130338],{"class":104,"line":136},[102,130335,130121],{"class":59165},[102,130337,59302],{"class":119},[102,130339,130340],{"class":187},"true\n",[102,130342,130343,130345,130347],{"class":104,"line":142},[102,130344,130132],{"class":59165},[102,130346,59302],{"class":119},[102,130348,130340],{"class":187},[102,130350,130351,130353],{"class":104,"line":148},[102,130352,130143],{"class":59165},[102,130354,12552],{"class":119},[102,130356,130357,130359],{"class":104,"line":157},[102,130358,130150],{"class":278},[102,130360,12552],{"class":119},[102,130362,130363,130366,130368],{"class":104,"line":163},[102,130364,130365],{"class":59165},"          password",[102,130367,59302],{"class":119},[102,130369,130370],{"class":278},"\"vinci666\"\n",[14,130372,130373],{},"工控机开机即可连上网。",[43,130375,130377],{"id":130376},"_72-ssh远程开发","7.2 SSH远程开发",[48,130379,130381],{"id":130380},"_721-环境准备","7.2.1 环境准备",[14,130383,130384],{},[18,130385,130386],{},"1.硬件准备",[14,130388,130389],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,130391,130392],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,130394,130395],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,130397,130398],{},[18,130399,130400],{},"2.设置固定IP",[14,130402,130403],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,130405,130406],{},"1.进入设置界面",[14,130408,130409],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,130411,130412],{},[6750,130413],{"alt":98,"src":130414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,130416,130417],{},"2.配置所连接的网络",[14,130419,130420],{},[6750,130421],{"alt":98,"src":130422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,130424,130425],{},"3.设置固定IP",[14,130427,130428],{},"查看当前IP地址。",[14,130430,130431],{},[6750,130432],{"alt":98,"src":130433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,130435,130436],{},"设置固定IP。",[14,130438,130439],{},[6750,130440],{"alt":98,"src":130441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,130443,130444],{},"至此，IP配置完毕。",[48,130446,130448],{"id":130447},"_722-环境搭建","7.2.2 环境搭建",[14,130450,130451],{},[18,130452,33618],{},[14,130454,130455],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,130457,130458],{},[18,130459,130460],{},"实现",[14,130462,130463],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[87,130465,130466,130469,130472,130475],{},[62,130467,130468],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[62,130470,130471],{},"远程主机启动SSH服务；",[62,130473,130474],{},"本地主机登陆远程主机；",[62,130476,130477],{},"实现数据传输。",[14,130479,130480],{},"1.安装SSH客户端与服务端",[14,130482,130483],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[93,130485,130487],{"className":128681,"code":130486,"language":128683,"meta":128684,"style":98}," sudo apt install openssh-server\n",[83,130488,130489],{"__ignoreMap":98},[102,130490,130491],{"class":104,"line":105},[102,130492,130486],{},[14,130494,130495],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[93,130497,130499],{"className":128681,"code":130498,"language":128683,"meta":128684,"style":98},"sudo apt install openssh-client\n",[83,130500,130501],{"__ignoreMap":98},[102,130502,130503],{"class":104,"line":105},[102,130504,130498],{},[14,130506,130507],{},"2.远程主机启动SSH服务",[14,130509,130510],{},"远程主机启动 ssh 服务命令如下：",[93,130512,130514],{"className":128681,"code":130513,"language":128683,"meta":128684,"style":98},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[83,130515,130516],{"__ignoreMap":98},[102,130517,130518],{"class":104,"line":105},[102,130519,130513],{},[14,130521,130522],{},"启动后可使用如下命令查看服务是否正常运行：",[93,130524,130526],{"className":128681,"code":130525,"language":128683,"meta":128684,"style":98},"ps -e | grep ssh\n",[83,130527,130528],{"__ignoreMap":98},[102,130529,130530],{"class":104,"line":105},[102,130531,130525],{},[14,130533,130534],{},"如果启动成功，会包含 sshd 程序。",[14,130536,130537],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[93,130539,130541],{"className":128681,"code":130540,"language":128683,"meta":128684,"style":98},"sudo systemctl enable ssh\n",[83,130542,130543],{"__ignoreMap":98},[102,130544,130545],{"class":104,"line":105},[102,130546,130540],{},[14,130548,130549],{},"3.本地远程登录",[14,130551,130552],{},"登录远程主机可以调用如下命令:",[93,130554,130556],{"className":125161,"code":130555,"language":125163,"meta":98,"style":98},"ssh -X 用户名@ip地址\n",[83,130557,130558],{"__ignoreMap":98},[102,130559,130560,130562,130565],{"class":104,"line":105},[102,130561,129512],{"class":112},[102,130563,130564],{"class":187}," -X",[102,130566,130567],{"class":278}," 用户名@ip地址\n",[14,130569,130570],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,130572,130573],{},"如果退出，可以调用exit命令：",[93,130575,130577],{"className":128681,"code":130576,"language":128683,"meta":128684,"style":98},"exit\n",[83,130578,130579],{"__ignoreMap":98},[102,130580,130581],{"class":104,"line":105},[102,130582,130576],{},[14,130584,130585],{},[18,130586,130587],{},"4.实现数据传输",[14,130589,130590],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,130592,130593],{},"上传文件指令格式如下：",[93,130595,130597],{"className":128681,"code":130596,"language":128683,"meta":128684,"style":98},"scp 本地文件路径 账号@ip:路径\n",[83,130598,130599],{"__ignoreMap":98},[102,130600,130601],{"class":104,"line":105},[102,130602,130596],{},[14,130604,130605],{},"上传文件夹指令格式如下：",[93,130607,130609],{"className":128681,"code":130608,"language":128683,"meta":128684,"style":98},"scp -r 本地文件夹路径 账号@ip:路径\n",[83,130610,130611],{"__ignoreMap":98},[102,130612,130613],{"class":104,"line":105},[102,130614,130608],{},[14,130616,130617],{},"下载文件指令格式如下：",[93,130619,130621],{"className":128681,"code":130620,"language":128683,"meta":128684,"style":98},"scp 账号@ip:路径 本地文件夹路径\n",[83,130622,130623],{"__ignoreMap":98},[102,130624,130625],{"class":104,"line":105},[102,130626,130620],{},[14,130628,130629],{},"下载文件夹指令格式如下：",[93,130631,130633],{"className":128681,"code":130632,"language":128683,"meta":128684,"style":98},"scp -r 账号@ip:路径 本地文件夹路径\n",[83,130634,130635],{"__ignoreMap":98},[102,130636,130637],{"class":104,"line":105},[102,130638,130632],{},[14,130640,130641],{},[18,130642,130643],{},"优化",[14,130645,130646],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[87,130648,130649,130652],{},[62,130650,130651],{},"本地生成密钥对；",[62,130653,130654],{},"将公钥上传至远程主机。",[14,130656,130657],{},[18,130658,130659],{},"1.生成密钥对",[14,130661,130662],{},"本地客户端生成公私钥：（一路回车默认即可）",[93,130664,130666],{"className":128681,"code":130665,"language":128683,"meta":128684,"style":98},"ssh-keygen\n",[83,130667,130668],{"__ignoreMap":98},[102,130669,130670],{"class":104,"line":105},[102,130671,130665],{},[14,130673,130674],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[87,130676,130677,130680],{},[62,130678,130679],{},"id_rsa （私钥）；",[62,130681,130682],{},"id_rsa.pub (公钥)。",[14,130684,130685],{},[18,130686,130687],{},"2.公钥上传",[14,130689,130690],{},"上传指令如下：",[93,130692,130694],{"className":128681,"code":130693,"language":128683,"meta":128684,"style":98},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[83,130695,130696],{"__ignoreMap":98},[102,130697,130698],{"class":104,"line":105},[102,130699,130693],{},[14,130701,130702],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,130704,130705],{},"以后再远程登录就无需录入密码了。",[48,130707,130709],{"id":130708},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,130711,130712],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,130714,130715],{},[18,130716,130717],{},"1.准备工作",[14,130719,130720],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,130722,130723],{},[18,130724,130725],{},"2.为VScode安装远程开发插件",[14,130727,130728,130729,130732,130733,130736,130737,36250],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[83,130730,130731],{},"扩展：商店","的搜索栏输入",[83,130734,130735],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[83,130738,130739],{},"安装",[14,130741,130742],{},[6750,130743],{"alt":98,"src":130744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,130746,130747],{},[18,130748,130749],{},"3.配置远程连接",[14,130751,130752,130753,130756,130757,130760],{},"步骤1：使用快捷键",[83,130754,130755],{},"ctrl + shift + p","打开命令输入窗口，并输入",[83,130758,130759],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,130762,130763],{},[6750,130764],{"alt":98,"src":130765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,130767,130768,130769,36250],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[83,130770,130771],{},"Add New SSH Host",[14,130773,130774],{},[6750,130775],{"alt":98,"src":130776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,130778,130779,130780,130783,130784,130787,130788,130791],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[83,130781,130782],{},"ssh +X ubuntu@192.168.43.164","，其中，",[83,130785,130786],{},"ubuntu","需要替换为你的登录用户名，",[83,130789,130790],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,130793,130794],{},[6750,130795],{"alt":98,"src":130796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,130798,130799],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,130801,130802],{},[6750,130803],{"alt":98,"src":130804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,130806,130807],{},[6750,130808],{"alt":98,"src":130809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,130811,130812],{},[18,130813,130814],{},"4.使用",[14,130816,130817,130818,130756,130820,130822],{},"步骤1：继续使用快捷键",[83,130819,130755],{},[83,130821,130759],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,130824,130825],{},[6750,130826],{"alt":98,"src":130827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,130829,130830,130831,130834],{},"或者，也可以点击侧边栏的",[83,130832,130833],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,130836,130837],{},[6750,130838],{"alt":98,"src":130839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,130841,130842,130843,130846,130847,130850],{},"步骤2：选择菜单栏的",[83,130844,130845],{},"文件","下的",[83,130848,130849],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,130852,130853],{},[6750,130854],{"alt":98,"src":130855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,130857,130858],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[43,130860,130862],{"id":130861},"_73-远程桌面","7.3 远程桌面",[14,130864,130865],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,130867,130868],{},"我们选择使用VNC来看。",[87,130870,130871],{},[62,130872,130873],{},"安装VNC服务器：",[14,130875,130876],{},"这里以TigerVNC为例进行安装：",[93,130878,130880],{"className":125161,"code":130879,"language":125163,"meta":98,"style":98},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[83,130881,130882],{"__ignoreMap":98},[102,130883,130884,130886,130888,130890,130893],{"class":104,"line":105},[102,130885,32441],{"class":112},[102,130887,125182],{"class":278},[102,130889,31698],{"class":278},[102,130891,130892],{"class":278}," tigervnc-standalone-server",[102,130894,130895],{"class":278}," tigervnc-common\n",[87,130897,130898],{"start":116},[62,130899,130900],{},"设置VNC密码：",[14,130902,130903],{},"为VNC用户设置密码，运行以下命令：",[93,130905,130907],{"className":125161,"code":130906,"language":125163,"meta":98,"style":98},"vncpasswd\n",[83,130908,130909],{"__ignoreMap":98},[102,130910,130911],{"class":104,"line":105},[102,130912,130906],{"class":112},[87,130914,130915],{"start":123},[62,130916,130917],{},"配置VNC启动脚本:",[14,130919,130920],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[93,130922,130924],{"className":125161,"code":130923,"language":125163,"meta":98,"style":98},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[83,130925,130926,130935],{"__ignoreMap":98},[102,130927,130928,130930,130932],{"class":104,"line":105},[102,130929,109131],{"class":112},[102,130931,37081],{"class":187},[102,130933,130934],{"class":278}," ~\u002F.vnc\n",[102,130936,130937,130940],{"class":104,"line":116},[102,130938,130939],{"class":112},"nano",[102,130941,130942],{"class":278}," ~\u002F.vnc\u002Fxstartup\n",[14,130944,130945],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[93,130947,130949],{"className":125161,"code":130948,"language":125163,"meta":98,"style":98},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[83,130950,130951,130956,130964,130971],{"__ignoreMap":98},[102,130952,130953],{"class":104,"line":105},[102,130954,130955],{"class":126},"#!\u002Fbin\u002Fsh\n",[102,130957,130958,130961],{"class":104,"line":116},[102,130959,130960],{"class":187},"unset",[102,130962,130963],{"class":278}," SESSION_MANAGER\n",[102,130965,130966,130968],{"class":104,"line":123},[102,130967,130960],{"class":187},[102,130969,130970],{"class":278}," DBUS_SESSION_BUS_ADDRESS\n",[102,130972,130973],{"class":104,"line":130},[102,130974,130975],{"class":112},"gnome-session\n",[14,130977,130978],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[87,130980,130981],{"start":130},[62,130982,130983],{},"给予执行权限：",[14,130985,130986],{},"为xstartup文件设置执行权限：",[93,130988,130990],{"className":125161,"code":130989,"language":125163,"meta":98,"style":98},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[83,130991,130992],{"__ignoreMap":98},[102,130993,130994,130996,130999],{"class":104,"line":105},[102,130995,32476],{"class":112},[102,130997,130998],{"class":278}," +x",[102,131000,130942],{"class":278},[87,131002,131003],{"start":136},[62,131004,131005],{},"启动VNC服务器：",[93,131007,131009],{"className":125161,"code":131008,"language":125163,"meta":98,"style":98},"vncserver -geometry 1920x1080 -localhost=0\n",[83,131010,131011],{"__ignoreMap":98},[102,131012,131013,131016,131019,131022],{"class":104,"line":105},[102,131014,131015],{"class":112},"vncserver",[102,131017,131018],{"class":187}," -geometry",[102,131020,131021],{"class":278}," 1920x1080",[102,131023,131024],{"class":187}," -localhost=0\n",[14,131026,131027],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,131029,131030],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[87,131032,131033],{"start":142},[62,131034,131035],{},"查看已开启的VNC服务器：",[93,131037,131039],{"className":125161,"code":131038,"language":125163,"meta":98,"style":98},"vncserver -list\n",[83,131040,131041],{"__ignoreMap":98},[102,131042,131043,131045],{"class":104,"line":105},[102,131044,131015],{"class":112},[102,131046,131047],{"class":187}," -list\n",[14,131049,131050],{},[6750,131051],{"alt":98,"src":131052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[87,131054,131055],{"start":148},[62,131056,131057],{},"连接到VNC服务器：",[14,131059,131060],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[87,131062,131063],{"start":157},[62,131064,131065],{},"停止VNC服务器：",[14,131067,131068],{},"如果需要停止VNC服务器，可以使用以下命令：",[93,131070,131072],{"className":125161,"code":131071,"language":125163,"meta":98,"style":98},"vncserver -kill :1\n",[83,131073,131074],{"__ignoreMap":98},[102,131075,131076,131078,131081],{"class":104,"line":105},[102,131077,131015],{"class":112},[102,131079,131080],{"class":187}," -kill",[102,131082,131083],{"class":278}," :1\n",[14,131085,131086],{},"将:1替换为你实际使用的显示编号。",[14,131088,131089],{},[6750,131090],{"alt":98,"src":131091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,131093,131094],{},[6750,131095],{"alt":98,"src":131096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[43,131098,131100],{"id":131099},"_74-usb端口设置","7.4 USB端口设置",[14,131102,131103],{},[18,131104,131105],{},"首先先配置好权限",[93,131107,131109],{"className":125161,"code":131108,"language":125163,"meta":98,"style":98},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[83,131110,131111,131116,131129,131136,131141],{"__ignoreMap":98},[102,131112,131113],{"class":104,"line":105},[102,131114,131115],{"class":126},"# 将用户权限提高\n",[102,131117,131118,131120,131122,131124,131127],{"class":104,"line":116},[102,131119,32441],{"class":112},[102,131121,34439],{"class":278},[102,131123,34442],{"class":187},[102,131125,131126],{"class":278}," dialout",[102,131128,34447],{"class":119},[102,131130,131131,131133],{"class":104,"line":123},[102,131132,34466],{"class":112},[102,131134,131135],{"class":278}," dialout\n",[102,131137,131138],{"class":104,"line":130},[102,131139,131140],{"class":126},"# 查看下面命令是否输出dialout（若输出才正常）\n",[102,131142,131143],{"class":104,"line":136},[102,131144,131145],{"class":112},"groups\n",[14,131147,131148],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[48,131150,131152],{"id":131151},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,131154,131155,131158],{},[18,131156,131157],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,131160,131161,131164],{},[18,131162,131163],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,131166,131167],{},[18,131168,131169],{},"流程如下：",[14,131171,131172],{},"（1）.查找设备idVendor和idProduct",[14,131174,131175,131176,131179],{},"接入两个USB设备，在终端调用指令",[83,131177,131178],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,131181,131182],{},[6750,131183],{"alt":98,"src":131184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,131186,131187,131188,131191],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[83,131189,131190],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,131193,131194],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,131196,131197],{},"（2）.编写映射规则",[14,131199,131200,131201,131204],{},"在",[83,131202,131203],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[93,131206,131208],{"className":125161,"code":131207,"language":125163,"meta":98,"style":98},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[83,131209,131210],{"__ignoreMap":98},[102,131211,131212,131214,131216],{"class":104,"line":105},[102,131213,32441],{"class":112},[102,131215,126448],{"class":278},[102,131217,131218],{"class":278}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,131220,131221],{},"输入如下内容：",[93,131223,131225],{"className":125161,"code":131224,"language":125163,"meta":98,"style":98},"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",[83,131226,131227,131257],{"__ignoreMap":98},[102,131228,131229,131232,131234,131237,131240,131243,131246,131248,131251,131254],{"class":104,"line":105},[102,131230,131231],{"class":119},"KERNEL",[102,131233,260],{"class":108},[102,131235,131236],{"class":278},"=\"ttyUSB*\",",[102,131238,131239],{"class":112}," ATTRS",[102,131241,131242],{"class":278},"{idVendor}==",[102,131244,131245],{"class":112},"\"10c4\"",[102,131247,1618],{"class":112},[102,131249,131250],{"class":278}," ATTRS{idProduct}==\"ea60\",",[102,131252,131253],{"class":278}," MODE:=\"0777\",",[102,131255,131256],{"class":278}," SYMLINK+=\"mylidar\"\n",[102,131258,131259,131261,131263,131265,131267,131269,131272,131274,131277,131279],{"class":104,"line":116},[102,131260,131231],{"class":119},[102,131262,260],{"class":108},[102,131264,131236],{"class":278},[102,131266,131239],{"class":112},[102,131268,131242],{"class":278},[102,131270,131271],{"class":112},"\"1a86\"",[102,131273,1618],{"class":112},[102,131275,131276],{"class":278}," ATTRS{idProduct}==\"7523\",",[102,131278,131253],{"class":278},[102,131280,131281],{"class":278}," SYMLINK+=\"mycar\"\n",[14,131283,131284],{},"代码解释：",[59,131286,131287,131290,131293,131296],{},[62,131288,131289],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[62,131291,131292],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[62,131294,131295],{},"SYMLINK是符号连接，即绑定的别名；",[62,131297,131298],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,131300,131301,131302,131305,131308],{},"***小提示：***",[31417,131303,131304],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[83,131306,131307],{},"\u002Fetc\u002Fudev\u002Frule.d",[31417,131309,131310],{},"目录即可。",[14,131312,131313],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,131315,131316],{},"（3）.使规则生效",[14,131318,131319],{},"在终端下输入如下指令：",[93,131321,131323],{"className":125161,"code":131322,"language":125163,"meta":98,"style":98},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[83,131324,131325,131330,131342,131353,131357,131362,131375],{"__ignoreMap":98},[102,131326,131327],{"class":104,"line":105},[102,131328,131329],{"class":126},"# Ubuntu用下方命令\n",[102,131331,131332,131334,131336,131339],{"class":104,"line":116},[102,131333,32441],{"class":112},[102,131335,127913],{"class":278},[102,131337,131338],{"class":278}," udev",[102,131340,131341],{"class":278}," reload\n",[102,131343,131344,131346,131348,131350],{"class":104,"line":123},[102,131345,32441],{"class":112},[102,131347,127913],{"class":278},[102,131349,131338],{"class":278},[102,131351,131352],{"class":278}," restart\n",[102,131354,131355],{"class":104,"line":130},[102,131356,652],{"emptyLinePlaceholder":651},[102,131358,131359],{"class":104,"line":136},[102,131360,131361],{"class":126},"#Fedora用下方命令\n",[102,131363,131364,131366,131369,131372],{"class":104,"line":142},[102,131365,32441],{"class":112},[102,131367,131368],{"class":278}," udevadm",[102,131370,131371],{"class":278}," control",[102,131373,131374],{"class":187}," --reload\n",[102,131376,131377,131379,131381],{"class":104,"line":148},[102,131378,32441],{"class":112},[102,131380,131368],{"class":278},[102,131382,131383],{"class":278}," trigger\n",[14,131385,131386],{},"再重新插拔设备即可。",[14,131388,131389],{},"（4）.测试",[14,131391,131392],{},"终端下输入如下指令",[93,131394,131396],{"className":125161,"code":131395,"language":125163,"meta":98,"style":98},"ll \u002Fdev | grep ttyUSB\n",[83,131397,131398],{"__ignoreMap":98},[102,131399,131400,131403,131406,131408,131410],{"class":104,"line":105},[102,131401,131402],{"class":112},"ll",[102,131404,131405],{"class":278}," \u002Fdev",[102,131407,32974],{"class":108},[102,131409,38101],{"class":112},[102,131411,131412],{"class":278}," ttyUSB\n",[14,131414,131415],{},"运行结果如下：",[14,131417,131418],{},[6750,131419],{"alt":98,"src":131420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,131422,131423,131424,131427],{},"也可以多次插拔USB设备，会发现设备端口",[83,131425,131426],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,131429,131430],{},[18,131431,125829],{},[14,131433,131434],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[48,131436,131438],{"id":131437},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,131440,131441,131443],{},[18,131442,131157],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,131445,131446,131448],{},[18,131447,131163],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,131450,131451],{},[18,131452,131169],{},[14,131454,131455],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,131457,131458],{},"调用如下指令查看第一台雷达的USB信息：",[93,131460,131462],{"className":125161,"code":131461,"language":125163,"meta":98,"style":98},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[83,131463,131464,131484],{"__ignoreMap":98},[102,131465,131466,131469,131471,131474,131477,131479,131481],{"class":104,"line":105},[102,131467,131468],{"class":112},"udevadm",[102,131470,77686],{"class":278},[102,131472,131473],{"class":187}," --attribute-walk",[102,131475,131476],{"class":187}," --name=\u002Fdev\u002FttyUSB0",[102,131478,32974],{"class":108},[102,131480,38101],{"class":112},[102,131482,131483],{"class":278}," KERNELS\n",[102,131485,131486,131488,131490,131492,131495,131497,131499],{"class":104,"line":116},[102,131487,131468],{"class":112},[102,131489,77686],{"class":278},[102,131491,131473],{"class":187},[102,131493,131494],{"class":187}," --name=\u002Fdev\u002FttyACM0",[102,131496,32974],{"class":108},[102,131498,38101],{"class":112},[102,131500,131483],{"class":278},[14,131502,131503],{},[6750,131504],{"alt":98,"src":131505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,131507,131508],{},"调用如下指令查看第二台雷达的USB信息：",[93,131510,131512],{"className":125161,"code":131511,"language":125163,"meta":98,"style":98},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[83,131513,131514],{"__ignoreMap":98},[102,131515,131516,131518,131520,131522,131525,131527,131529],{"class":104,"line":105},[102,131517,131468],{"class":112},[102,131519,77686],{"class":278},[102,131521,131473],{"class":187},[102,131523,131524],{"class":187}," --name=\u002Fdev\u002FttyUSB1",[102,131526,32974],{"class":108},[102,131528,38101],{"class":112},[102,131530,131483],{"class":278},[14,131532,131533,131534,131537,131538,131541,131542,131545],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[83,131535,131536],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[83,131539,131540],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[18,131543,131544],{},"唯一性标识","”。",[14,131547,131197],{},[14,131549,131200,131550,131552],{},[83,131551,131203],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[93,131554,131555],{"className":125161,"code":131207,"language":125163,"meta":98,"style":98},[83,131556,131557],{"__ignoreMap":98},[102,131558,131559,131561,131563],{"class":104,"line":105},[102,131560,32441],{"class":112},[102,131562,126448],{"class":278},[102,131564,131218],{"class":278},[93,131566,131568],{"className":125161,"code":131567,"language":125163,"meta":98,"style":98},"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",[83,131569,131570,131599],{"__ignoreMap":98},[102,131571,131572,131574,131576,131578,131581,131583,131586,131589,131591,131594,131596],{"class":104,"line":105},[102,131573,131231],{"class":119},[102,131575,260],{"class":108},[102,131577,131236],{"class":278},[102,131579,131580],{"class":119}," KERNELS",[102,131582,260],{"class":108},[102,131584,131585],{"class":278},"=\"1-1.3:1.0\",",[102,131587,131588],{"class":112}," MODE:",[102,131590,260],{"class":278},[102,131592,131593],{"class":112},"\"0777\"",[102,131595,1618],{"class":112},[102,131597,131598],{"class":278}," SYMLINK+=\"rplidar_front\"\n",[102,131600,131601,131603,131605,131607,131609,131611,131614,131616,131618,131620,131622],{"class":104,"line":116},[102,131602,131231],{"class":119},[102,131604,260],{"class":108},[102,131606,131236],{"class":278},[102,131608,131580],{"class":119},[102,131610,260],{"class":108},[102,131612,131613],{"class":278},"=\"1-1.4:1.0\",",[102,131615,131588],{"class":112},[102,131617,260],{"class":278},[102,131619,131593],{"class":112},[102,131621,1618],{"class":112},[102,131623,131624],{"class":278}," SYMLINK+=\"rplidar_back\"\n",[14,131626,131316],{},[14,131628,131319],{},[93,131630,131631],{"className":125161,"code":131322,"language":125163,"meta":98,"style":98},[83,131632,131633,131637,131647,131657,131661,131665,131675],{"__ignoreMap":98},[102,131634,131635],{"class":104,"line":105},[102,131636,131329],{"class":126},[102,131638,131639,131641,131643,131645],{"class":104,"line":116},[102,131640,32441],{"class":112},[102,131642,127913],{"class":278},[102,131644,131338],{"class":278},[102,131646,131341],{"class":278},[102,131648,131649,131651,131653,131655],{"class":104,"line":123},[102,131650,32441],{"class":112},[102,131652,127913],{"class":278},[102,131654,131338],{"class":278},[102,131656,131352],{"class":278},[102,131658,131659],{"class":104,"line":130},[102,131660,652],{"emptyLinePlaceholder":651},[102,131662,131663],{"class":104,"line":136},[102,131664,131361],{"class":126},[102,131666,131667,131669,131671,131673],{"class":104,"line":142},[102,131668,32441],{"class":112},[102,131670,131368],{"class":278},[102,131672,131371],{"class":278},[102,131674,131374],{"class":187},[102,131676,131677,131679,131681],{"class":104,"line":148},[102,131678,32441],{"class":112},[102,131680,131368],{"class":278},[102,131682,131383],{"class":278},[14,131684,131386],{},[14,131686,131389],{},[14,131688,131392,131689,131692],{},[83,131690,131691],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,131694,131695],{},[6750,131696],{"alt":98,"src":131697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,131699,131700],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,131702,131703,131705],{},[18,131704,125829],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[48,131707,131709],{"id":131708},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,131711,131712],{},"（1）.查看所连接的主机USB接口的信息",[93,131714,131716],{"className":125161,"code":131715,"language":125163,"meta":98,"style":98},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[83,131717,131718,131748],{"__ignoreMap":98},[102,131719,131720,131722,131724,131727,131729,131731,131733,131735,131738,131741,131743,131746],{"class":104,"line":105},[102,131721,131468],{"class":112},[102,131723,77686],{"class":278},[102,131725,131726],{"class":187}," -a",[102,131728,37081],{"class":187},[102,131730,36287],{"class":119},[102,131732,131468],{"class":112},[102,131734,77686],{"class":278},[102,131736,131737],{"class":187}," -q",[102,131739,131740],{"class":278}," path",[102,131742,32980],{"class":187},[102,131744,131745],{"class":278}," \u002Fdev\u002FttyACM0",[102,131747,390],{"class":119},[102,131749,131750,131752,131754,131756,131758,131760,131762,131764,131766,131768,131770,131773],{"class":104,"line":116},[102,131751,131468],{"class":112},[102,131753,77686],{"class":278},[102,131755,131726],{"class":187},[102,131757,37081],{"class":187},[102,131759,36287],{"class":119},[102,131761,131468],{"class":112},[102,131763,77686],{"class":278},[102,131765,131737],{"class":187},[102,131767,131740],{"class":278},[102,131769,32980],{"class":187},[102,131771,131772],{"class":278}," \u002Fdev\u002FttyUSB0",[102,131774,390],{"class":119},[14,131776,131777],{},[6750,131778],{"alt":98,"src":131779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,131781,131782],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,131784,131197],{},[14,131786,131200,131787,131552],{},[83,131788,131203],{},[93,131790,131791],{"className":125161,"code":131207,"language":125163,"meta":98,"style":98},[83,131792,131793],{"__ignoreMap":98},[102,131794,131795,131797,131799],{"class":104,"line":105},[102,131796,32441],{"class":112},[102,131798,126448],{"class":278},[102,131800,131218],{"class":278},[93,131802,131804],{"className":125161,"code":131803,"language":125163,"meta":98,"style":98},"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",[83,131805,131806,131834,131860],{"__ignoreMap":98},[102,131807,131808,131810,131812,131815,131817,131819,131821,131823,131826,131829,131831],{"class":104,"line":105},[102,131809,131231],{"class":119},[102,131811,260],{"class":108},[102,131813,131814],{"class":278},"=\"ttyACM*\",",[102,131816,131239],{"class":112},[102,131818,131242],{"class":278},[102,131820,131271],{"class":112},[102,131822,1618],{"class":112},[102,131824,131825],{"class":278}," ATTRS{idProduct}==\"55d4\",",[102,131827,131828],{"class":278}," ATTRS{serial}==\"0001\",",[102,131830,131253],{"class":278},[102,131832,131833],{"class":278}," SYMLINK+=\"ttyACM_MCU\"\n",[102,131835,131836,131838,131840,131842,131844,131846,131848,131850,131852,131855,131857],{"class":104,"line":116},[102,131837,131231],{"class":119},[102,131839,260],{"class":108},[102,131841,131814],{"class":278},[102,131843,131239],{"class":112},[102,131845,131242],{"class":278},[102,131847,131271],{"class":112},[102,131849,1618],{"class":112},[102,131851,131825],{"class":278},[102,131853,131854],{"class":278}," ATTRS{serial}==\"0002\",",[102,131856,131253],{"class":278},[102,131858,131859],{"class":278}," SYMLINK+=\"ttyACM_Lidar\"\n",[102,131861,131862,131864,131866,131868,131870,131872,131874,131876,131878,131880],{"class":104,"line":123},[102,131863,131231],{"class":119},[102,131865,260],{"class":108},[102,131867,131236],{"class":278},[102,131869,131239],{"class":112},[102,131871,131242],{"class":278},[102,131873,131271],{"class":112},[102,131875,1618],{"class":112},[102,131877,131276],{"class":278},[102,131879,131253],{"class":278},[102,131881,131882],{"class":278}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,131884,131316],{},[14,131886,131319],{},[93,131888,131889],{"className":125161,"code":131322,"language":125163,"meta":98,"style":98},[83,131890,131891,131895,131905,131915,131919,131923,131933],{"__ignoreMap":98},[102,131892,131893],{"class":104,"line":105},[102,131894,131329],{"class":126},[102,131896,131897,131899,131901,131903],{"class":104,"line":116},[102,131898,32441],{"class":112},[102,131900,127913],{"class":278},[102,131902,131338],{"class":278},[102,131904,131341],{"class":278},[102,131906,131907,131909,131911,131913],{"class":104,"line":123},[102,131908,32441],{"class":112},[102,131910,127913],{"class":278},[102,131912,131338],{"class":278},[102,131914,131352],{"class":278},[102,131916,131917],{"class":104,"line":130},[102,131918,652],{"emptyLinePlaceholder":651},[102,131920,131921],{"class":104,"line":136},[102,131922,131361],{"class":126},[102,131924,131925,131927,131929,131931],{"class":104,"line":142},[102,131926,32441],{"class":112},[102,131928,131368],{"class":278},[102,131930,131371],{"class":278},[102,131932,131374],{"class":187},[102,131934,131935,131937,131939],{"class":104,"line":148},[102,131936,32441],{"class":112},[102,131938,131368],{"class":278},[102,131940,131383],{"class":278},[14,131942,131943,131944],{},"再重新插拔设备即可，或者 ",[18,131945,131946],{},"直接重启系统。",[14,131948,131389],{},[14,131950,131392,131951,131692],{},[83,131952,131691],{},[14,131954,131955],{},[6750,131956],{"alt":98,"src":131957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,131959,131700],{},[14,131961,131962,131964],{},[18,131963,125829],{}," 一些设备可能没有串口号等。",[48,131966,131968],{"id":131967},"_744-其他注意事项","7.4.4 其他注意事项",[14,131970,131971,131972,131974,131975,131978,131979,3977,131982,131985,131986,131988],{},"并非所有的USB设备端口号都是",[83,131973,131426],{},"的格式，比如Arduino的端口号可能是",[83,131976,131977],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[83,131980,131981],{},"videon",[83,131983,131984],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[83,131987,131981],{},"端口，绑定时需要关联的也是该接口。",[14,131990,131991,131992,131995,131996,131999,132000,132002,132003,132006,132007,132010,132011,132014,132015,132014,132018,132014,132021,36250],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[83,131993,131994],{},"KERNEL==\"ttyUSB*\"","修改为",[83,131997,131998],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[83,132001,131994],{},"修改为类似于",[83,132004,132005],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[83,132008,132009],{},"video[0,2,4,6]","表示可以绑定的端口为",[83,132012,132013],{},"video0","或",[83,132016,132017],{},"video2",[83,132019,132020],{},"video4",[83,132022,132023],{},"video6",[43,132025,132027],{"id":132026},"_75-挂载内网网页","7.5 挂载内网网页",[14,132029,132030],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,132032,132033],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,132035,132036],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,132038,132039,132040],{},"Termux 下载地址（F-Droid）：",[9275,132041,132042],{"href":132042,"rel":132043},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[31729],[14,132045,132046],{},"首先打开app后，先更新软件缓存：",[93,132048,132050],{"className":125161,"code":132049,"language":125163,"meta":98,"style":98},"pkg update\n",[83,132051,132052],{"__ignoreMap":98},[102,132053,132054,132057],{"class":104,"line":105},[102,132055,132056],{"class":112},"pkg",[102,132058,34107],{"class":278},[14,132060,132061],{},"然后换源",[93,132063,132065],{"className":125161,"code":132064,"language":125163,"meta":98,"style":98},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[83,132066,132067],{"__ignoreMap":98},[102,132068,132069,132071,132074],{"class":104,"line":105},[102,132070,130939],{"class":112},[102,132072,132073],{"class":119}," $PREFIX",[102,132075,132076],{"class":278},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,132078,132079],{},"将该文件内容替换为下面：",[93,132081,132083],{"className":125161,"code":132082,"language":125163,"meta":98,"style":98},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[83,132084,132085],{"__ignoreMap":98},[102,132086,132087,132090,132093,132096],{"class":104,"line":105},[102,132088,132089],{"class":112},"deb",[102,132091,132092],{"class":278}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[102,132094,132095],{"class":278}," stable",[102,132097,132098],{"class":278}," main\n",[59,132100,132101,132128],{},[62,132102,132103,132104,132106,132107],{},"如果你使用的是",[83,132105,130939],{},"编辑器：",[59,132108,132109,132116,132122],{},[62,132110,132111,132112,132115],{},"按 ",[83,132113,132114],{},"Ctrl+O"," 保存文件。",[62,132117,132111,132118,132121],{},[83,132119,132120],{},"Enter"," 确认文件名。",[62,132123,132111,132124,132127],{},[83,132125,132126],{},"Ctrl+X"," 退出编辑器。",[62,132129,132103,132130,132106,132133],{},[83,132131,132132],{},"vim",[59,132134,132135,132141],{},[62,132136,132111,132137,132140],{},[83,132138,132139],{},"Esc"," 退出编辑模式。",[62,132142,132143,132144,132146],{},"输入 ",[83,132145,127086],{}," 保存并退出。",[14,132148,132149],{},"接下来重新更新软件源：",[93,132151,132153],{"className":125161,"code":132152,"language":125163,"meta":98,"style":98},"pkg update && pkg upgrade\n",[83,132154,132155],{"__ignoreMap":98},[102,132156,132157,132159,132161,132163,132165],{"class":104,"line":105},[102,132158,132056],{"class":112},[102,132160,125212],{"class":278},[102,132162,34055],{"class":119},[102,132164,132056],{"class":112},[102,132166,125198],{"class":278},[14,132168,132169],{},"安装python：",[93,132171,132173],{"className":125161,"code":132172,"language":125163,"meta":98,"style":98},"pkg install python\n",[83,132174,132175],{"__ignoreMap":98},[102,132176,132177,132179,132181],{"class":104,"line":105},[102,132178,132056],{"class":112},[102,132180,31698],{"class":278},[102,132182,132183],{"class":278}," python\n",[14,132185,132186,34338],{},[18,132187,132188],{},"通过Termux访问设备存储",[14,132190,132191],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[93,132193,132195],{"className":125161,"code":132194,"language":125163,"meta":98,"style":98},"termux-setup-storage\n",[83,132196,132197],{"__ignoreMap":98},[102,132198,132199],{"class":104,"line":105},[102,132200,132194],{"class":112},[87,132202,132203],{},[62,132204,132205,34338,132208],{},[18,132206,132207],{},"进入HTML文件所在的目录",[87,132209,132210],{},[62,132211,132212,132213,132215],{},"使用",[83,132214,109141],{},"命令进入HTML文件所在的目录：",[93,132217,132219],{"className":125161,"code":132218,"language":125163,"meta":98,"style":98},"cd ~\u002Fyour_html_folder\n",[83,132220,132221],{"__ignoreMap":98},[102,132222,132223,132225],{"class":104,"line":105},[102,132224,109141],{"class":187},[102,132226,132227],{"class":278}," ~\u002Fyour_html_folder\n",[87,132229,132230],{"start":116},[62,132231,132232,34338,132235,132240,132257],{},[18,132233,132234],{},"启动Python HTTP服务器",[87,132236,132237],{},[62,132238,132239],{},"运行以下命令启动一个简单的HTTP服务器：",[93,132241,132243],{"className":125161,"code":132242,"language":125163,"meta":98,"style":98},"python -m http.server 8000\n",[83,132244,132245],{"__ignoreMap":98},[102,132246,132247,132249,132251,132254],{"class":104,"line":105},[102,132248,38245],{"class":112},[102,132250,108747],{"class":187},[102,132252,132253],{"class":278}," http.server",[102,132255,132256],{"class":187}," 8000\n",[87,132258,132259],{"start":123},[62,132260,132261,132262,132265],{},"这会在端口",[83,132263,132264],{},"8000","上启动一个Web服务器。",[59,132267,132268],{},[62,132269,132270],{},"启动服务器后，Termux会显示日志信息，例如：",[93,132272,132274],{"className":128681,"code":132273,"language":128683,"meta":128684,"style":98},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[83,132275,132276],{"__ignoreMap":98},[102,132277,132278],{"class":104,"line":105},[102,132279,132273],{},[59,132281,132282],{},[62,132283,132284],{},"这表示服务器已成功启动。",[14,132286,132287],{},[18,132288,132289],{},"在浏览器中访问HTML文件",[87,132291,132292],{},[62,132293,132294,34338,132297,132302],{},[18,132295,132296],{},"在同一设备上访问",[87,132298,132299],{},[62,132300,132301],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[93,132303,132306],{"className":132304,"code":132305,"language":79529,"meta":98,"style":98},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[83,132307,132308],{"__ignoreMap":98},[102,132309,132310,132313],{"class":104,"line":105},[102,132311,132312],{"class":119},"http:",[102,132314,132315],{"class":126},"\u002F\u002Flocalhost:8000\n",[59,132317,132318],{},[62,132319,132320,132321,132324],{},"如果HTML文件中有",[83,132322,132323],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[43,132326,132328],{"id":132327},"_76-linux重点知识","7.6 Linux重点知识",[48,132330,132332],{"id":132331},"_761-关于点的说明","7.6.1 关于点的说明",[14,132334,132335],{},[6750,132336],{"alt":98,"src":132337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,132339,132340],{},"一点本目录，两点上目录",[48,132342,132344],{"id":132343},"_762-目录","7.6.2 目录",[7601,132346,132348],{"id":132347},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,132350,132351],{},[18,132352,132353],{},"\u002Fboot:",[14,132355,132356],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,132358,132359],{},[18,132360,132361],{},"\u002Fetc:",[14,132363,132364],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,132366,132367],{},[18,132368,132369],{},"\u002Flib：",[14,132371,132372],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,132374,132375],{},[18,132376,132377],{},"\u002Fsys:",[14,132379,132380],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[7601,132382,132384],{"id":132383},"_7622-指令集合","7.6.2.2 指令集合",[14,132386,132387],{},[18,132388,132389],{},"\u002Fbin:",[14,132391,132392],{},"为二进制文件的缩写，存放最经常使用的命令",[14,132394,132395],{},[18,132396,132397],{},"\u002Fsbin:",[14,132399,132400],{},"只有系统管理员才能使用的程序和指令",[7601,132402,132404],{"id":132403},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,132406,132407],{},[18,132408,132409],{},"\u002Fdev:",[14,132411,132412],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,132414,132415],{},[18,132416,132417],{},"\u002Fmedia:",[14,132419,132420],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,132422,132423],{},[18,132424,132425],{},"\u002Fmnt:",[14,132427,132428],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[7601,132430,132432],{"id":132431},"_7624-临时文件","7.6.2.4 临时文件",[14,132434,132435],{},[18,132436,132437],{},"\u002Frun:",[14,132439,132440],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,132442,132443],{},[18,132444,132445],{},"\u002Flost+found:",[14,132447,132448],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,132450,132451],{},[18,132452,132453],{},"\u002Ftmp:",[14,132455,132456],{},"这个目录是用来存放一些临时文件的",[7601,132458,132460],{"id":132459},"_7625-账户","7.6.2.5 账户",[14,132462,132463],{},[18,132464,132465],{},"\u002Froot：",[14,132467,132468],{},"系统管理员的用户主目录",[14,132470,132471,34338],{},[18,132472,132473],{},"\u002Fhome",[14,132475,132476],{},"用户的主目录，以用户的账号命名的",[14,132478,132479,34338],{},[18,132480,132481],{},"\u002Fusr",[14,132483,132484],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,132486,132487],{},[18,132488,132489],{},"\u002Fusr\u002Fbin：",[14,132491,132492],{},"系统用户使用的应用程序与指令",[14,132494,132495],{},[18,132496,132497],{},"\u002Fusr\u002Fsbin：",[14,132499,132500],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,132502,132503],{},[18,132504,132505],{},"\u002Fusr\u002Fsrc：",[14,132507,132508],{},"内核源代码默认的放置目录",[7601,132510,132512],{"id":132511},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,132514,132515],{},[18,132516,132517],{},"\u002Fvar：",[14,132519,132520],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,132522,132523],{},[18,132524,132525],{},"\u002Fproc:",[14,132527,132528,132529,132532],{},"管理 ",[18,132530,132531],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[7601,132534,132536],{"id":132535},"_7627-扩展用的","7.6.2.7 扩展用的",[14,132538,132539],{},[18,132540,132541],{},"\u002Fopt:",[14,132543,132544],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,132546,132547],{},[18,132548,132549],{},"\u002Fsrv:",[14,132551,132552],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[48,132554,132556],{"id":132555},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,132558,132559],{},[6750,132560],{"alt":98,"src":132561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,132563,132564],{},"windows-->linux:",[14,132566,132567],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,132569,132570],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,132572,132573],{},"linux传输文件到windows",[14,132575,132576],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[48,132578,132580],{"id":132579},"_764-易忘知识","7.6.4 易忘知识",[14,132582,132583],{},"操作系统内核查看",[93,132585,132586],{"className":125161,"code":129155,"language":125163,"meta":98,"style":98},[83,132587,132588],{"__ignoreMap":98},[102,132589,132590,132592],{"class":104,"line":105},[102,132591,78069],{"class":112},[102,132593,129164],{"class":187},[14,132595,132596],{},[6750,132597],{"alt":98,"src":132598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,132600,132601],{},[6750,132602],{"alt":98,"src":132603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[93,132605,132607],{"className":125161,"code":132606,"language":125163,"meta":98,"style":98},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[83,132608,132609,132621],{"__ignoreMap":98},[102,132610,132611,132613,132616,132619],{"class":104,"line":105},[102,132612,129372],{"class":112},[102,132614,132615],{"class":278}," mvtest",[102,132617,132618],{"class":278}," mvtest2",[102,132620,4328],{"class":119},[102,132622,132623],{"class":104,"line":116},[102,132624,132625],{"class":112},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,132627,132628],{},[6750,132629],{"alt":98,"src":132630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,132632,132633],{},[6750,132634],{"alt":98,"src":132635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,132637,132638,132639,132642],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[83,132640,132641],{},"du -a"," 可以快速查看磁盘使用细节。",[48,132644,132646],{"id":132645},"_765-vim","7.6.5 Vim",[14,132648,132649],{},[6750,132650],{"alt":98,"src":132651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,132653,132654],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,132656,132657],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,132659,132660],{},[18,132661,132662],{},"1.命令模式：",[14,132664,132665],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,132667,132668],{},"x 删除当前光标所在处的字符",[14,132670,132671],{},"：切换到底线命令模式，以在最底一行输入命令",[14,132673,132674],{},"a 进行插入模式，在光标下一个位置输入文本",[14,132676,132677],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,132679,132680],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,132682,132683],{},"dd 剪切当前行",[14,132685,132686],{},"yy 复制当前行",[14,132688,132689],{},"p 粘贴剪贴板内容到光标下方",[14,132691,132692],{},"P 粘贴剪贴板内容到光标上方",[14,132694,132695],{},"u 撤销上一次操作",[14,132697,132698],{},"ctrl+r 重做上一次操作",[14,132700,132701,132703],{},[2142,132702],{}," 保存文件",[14,132705,132706,132708],{},[9672,132707],{}," 退出Vim编辑器",[14,132710,132711,132713],{},[9672,132712],{},"! 强制退出Vim编辑器，不保存修改",[14,132715,132716],{},[18,132717,132718],{},"2.输入模式：",[14,132720,132721],{},[6750,132722],{"alt":98,"src":132723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,132725,132726],{},[18,132727,132728],{},"3.底线命令模式：",[14,132730,132731],{},[6750,132732],{"alt":98,"src":132733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,132735,132736],{},"按下esc可以退出底线命令模式",[48,132738,132740],{"id":132739},"_766-apt","7.6.6 apt",[14,132742,132743],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[48,132745,132747],{"id":132746},"_767-home与root的区别","7.6.7 home与root的区别",[14,132749,132750],{},[6750,132751],{"alt":98,"src":132752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,132754,132755],{},[6750,132756],{"alt":98,"src":132757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,132759,132760],{},[6750,132761],{"alt":98,"src":132762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,132764,132765],{},[6750,132766],{"alt":98,"src":132767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[48,132769,132771],{"id":132770},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,132773,132774],{},[9275,132775,132776],{"href":132776,"rel":132777},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[31729],[87,132779,132780,132783],{},[62,132781,132782],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[62,132784,132785],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,132787,132788],{},[6750,132789],{"alt":98,"src":132790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,132792,132793],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,132795,132796],{},[6750,132797],{"alt":98,"src":132798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[93,132800,132802],{"className":128681,"code":132801,"language":128683,"meta":128684,"style":98},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[83,132803,132804,132809],{"__ignoreMap":98},[102,132805,132806],{"class":104,"line":105},[102,132807,132808],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[102,132810,132811],{"class":104,"line":116},[102,132812,132813],{},".\u002Fpycharm.sh\n",[14,132815,132816],{},"3️⃣创建.desktop文件",[14,132818,132819],{},[18,132820,132821],{},"原理：",[59,132823,132824,132834],{},[62,132825,132826,132827,132833],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[18,132828,132829,132832],{},[83,132830,132831],{},".desktop"," 文件"," 来识别应用。",[62,132835,132836,132838,132839],{},[83,132837,132831],{}," 文件相当于一个“应用注册表”，告诉系统：",[59,132840,132841,132844,132847,132850,132853],{},[62,132842,132843],{},"应用名字（Name）",[62,132845,132846],{},"图标（Icon）",[62,132848,132849],{},"执行命令（Exec）",[62,132851,132852],{},"分类（Categories）",[62,132854,132855],{},"是否需要终端（Terminal）",[93,132857,132859],{"className":128681,"code":132858,"language":128683,"meta":128684,"style":98},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[83,132860,132861,132866],{"__ignoreMap":98},[102,132862,132863],{"class":104,"line":105},[102,132864,132865],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[102,132867,132868],{"class":104,"line":116},[102,132869,132870],{},"nano pycharm.desktop\n",[14,132872,132873],{},"nano是一个命令行下的编辑器，也可以使用vim",[93,132875,132877],{"className":128681,"code":132876,"language":128683,"meta":128684,"style":98},"[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",[83,132878,132879,132884,132889,132894,132899,132904,132909,132914,132919,132924],{"__ignoreMap":98},[102,132880,132881],{"class":104,"line":105},[102,132882,132883],{},"[Desktop Entry]\n",[102,132885,132886],{"class":104,"line":116},[102,132887,132888],{},"Version=1.0\n",[102,132890,132891],{"class":104,"line":123},[102,132892,132893],{},"Type=Application\n",[102,132895,132896],{"class":104,"line":130},[102,132897,132898],{},"Name=PyCharm\n",[102,132900,132901],{"class":104,"line":136},[102,132902,132903],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[102,132905,132906],{"class":104,"line":142},[102,132907,132908],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[102,132910,132911],{"class":104,"line":148},[102,132912,132913],{},"Comment=JetBrains PyCharm IDE\n",[102,132915,132916],{"class":104,"line":157},[102,132917,132918],{},"Categories=Development;IDE;\n",[102,132920,132921],{"class":104,"line":163},[102,132922,132923],{},"Terminal=false\n",[102,132925,132926],{"class":104,"line":175},[102,132927,132928],{},"StartupWMClass=jetbrains-pycharm\n",[59,132930,132931,132937,132943,132949],{},[62,132932,132933,132936],{},[83,132934,132935],{},"Exec"," → 点击图标时执行的命令",[62,132938,132939,132942],{},[83,132940,132941],{},"Icon"," → 显示在菜单和桌面上的图标",[62,132944,132945,132948],{},[83,132946,132947],{},"Terminal=false"," → 不打开终端",[62,132950,132951,132954],{},[83,132952,132953],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[132956,132957,132958],"blockquote",{},[14,132959,132960,132961,132963,132964],{},"可以理解成 ",[83,132962,132831],{}," 文件是 Linux 的 ",[18,132965,132966],{},"快捷方式配置文件",[14,132968,132969],{},"4️⃣设置可执行权限",[93,132971,132973],{"className":128681,"code":132972,"language":128683,"meta":128684,"style":98},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[83,132974,132975],{"__ignoreMap":98},[102,132976,132977],{"class":104,"line":105},[102,132978,132972],{},[14,132980,132981],{},"5️⃣桌面图标启动的话如下：",[93,132983,132985],{"className":128681,"code":132984,"language":128683,"meta":128684,"style":98},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[83,132986,132987,132992],{"__ignoreMap":98},[102,132988,132989],{"class":104,"line":105},[102,132990,132991],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[102,132993,132994],{"class":104,"line":116},[102,132995,132996],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[87,132998,132999],{"start":123},[62,133000,133001],{},"下载Appimage文件实现软件的安装",[14,133003,133004],{},"1️⃣先下载appimage",[14,133006,133007],{},[9275,133008,133009],{"href":133009,"rel":133010},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[31729],[14,133012,133013],{},[6750,133014],{"alt":98,"src":133015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,133017,133018],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,133020,133021],{},[6750,133022],{"alt":98,"src":133023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,133025,133026],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,133028,133029],{},[6750,133030],{"alt":98,"src":133031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,133033,133034],{},[6750,133035],{"alt":98,"src":133036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,133038,133039,133040,133043],{},"3️⃣给他们放在",[83,133041,133042],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,133045,133046],{},"4️⃣给软件执行权限",[93,133048,133050],{"className":128681,"code":133049,"language":128683,"meta":128684,"style":98},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[83,133051,133052,133057],{"__ignoreMap":98},[102,133053,133054],{"class":104,"line":105},[102,133055,133056],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[102,133058,133059],{"class":104,"line":116},[102,133060,133061],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,133063,133064],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[93,133066,133068],{"className":125161,"code":133067,"language":125163,"meta":98,"style":98},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[83,133069,133070,133077,133084,133090],{"__ignoreMap":98},[102,133071,133072,133074],{"class":104,"line":105},[102,133073,109141],{"class":187},[102,133075,133076],{"class":278}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[102,133078,133079,133081],{"class":104,"line":116},[102,133080,109148],{"class":112},[102,133082,133083],{"class":278}," .\u002Fqqmusic.desktop\n",[102,133085,133086,133088],{"class":104,"line":123},[102,133087,132132],{"class":112},[102,133089,133083],{"class":278},[102,133091,133092,133094,133096,133098],{"class":104,"line":130},[102,133093,32441],{"class":112},[102,133095,32444],{"class":278},[102,133097,130998],{"class":278},[102,133099,133083],{"class":278},[14,133101,133102,133104],{},[83,133103,109148],{},"：一个 Linux 命令，主要功能是：",[59,133106,133107,133110],{},[62,133108,133109],{},"如果文件不存在，就创建一个新的空文件",[62,133111,133112],{},"如果文件已存在，就更新该文件的最后修改时间",[93,133114,133116],{"className":128681,"code":133115,"language":128683,"meta":128684,"style":98},"[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",[83,133117,133118,133122,133127,133132,133137,133141,133146],{"__ignoreMap":98},[102,133119,133120],{"class":104,"line":105},[102,133121,132883],{},[102,133123,133124],{"class":104,"line":116},[102,133125,133126],{},"Name=QQ音乐\n",[102,133128,133129],{"class":104,"line":123},[102,133130,133131],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[102,133133,133134],{"class":104,"line":130},[102,133135,133136],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[102,133138,133139],{"class":104,"line":136},[102,133140,132893],{},[102,133142,133143],{"class":104,"line":142},[102,133144,133145],{},"Categories=Audio;Music;Player;\n",[102,133147,133148],{"class":104,"line":148},[102,133149,133150],{},"Comment=QQ Music Client for Linux\n",[14,133152,133153],{},"将文件复制进去",[14,133155,133156],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,133158,133159],{},[6750,133160],{"alt":98,"src":133161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,133163,133164],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,133166,133167],{},[6750,133168],{"alt":98,"src":133169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,133171,133172,133173,133176,133177,133180],{},"如果你用的不是KDE，那么也可以直接修改",[83,133174,133175],{},"qqmuic.desktop","：在exec的末尾加上",[83,133178,133179],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[93,133182,133184],{"className":128681,"code":133183,"language":128683,"meta":128684,"style":98},"[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",[83,133185,133186,133190,133194,133199,133203,133207,133211],{"__ignoreMap":98},[102,133187,133188],{"class":104,"line":105},[102,133189,132883],{},[102,133191,133192],{"class":104,"line":116},[102,133193,133126],{},[102,133195,133196],{"class":104,"line":123},[102,133197,133198],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[102,133200,133201],{"class":104,"line":130},[102,133202,133136],{},[102,133204,133205],{"class":104,"line":136},[102,133206,132893],{},[102,133208,133209],{"class":104,"line":142},[102,133210,133145],{},[102,133212,133213],{"class":104,"line":148},[102,133214,133150],{},[14,133216,133217],{},[6750,133218],{"alt":98,"src":133219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,133221,133222],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[93,133224,133226],{"className":128681,"code":133225,"language":128683,"meta":128684,"style":98},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[83,133227,133228],{"__ignoreMap":98},[102,133229,133230],{"class":104,"line":105},[102,133231,133225],{},[87,133233,133234],{"start":130},[62,133235,133236],{},"去Flathub上安装软件",[14,133238,133239],{},[9275,133240,133241],{"href":133241,"rel":133242},"https:\u002F\u002Fflathub.org\u002F",[31729],[14,133244,133245],{},"1️⃣去上面的官网搜索软件+下载软件",[14,133247,133248],{},[6750,133249],{"alt":98,"src":133250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[93,133252,133254],{"className":128681,"code":133253,"language":128683,"meta":128684,"style":98},"flatpak install flathub com.obsproject.Studio\n",[83,133255,133256],{"__ignoreMap":98},[102,133257,133258],{"class":104,"line":105},[102,133259,133253],{},[14,133261,133262],{},[6750,133263],{"alt":98,"src":133264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,133266,133267],{},"2️⃣运行软件",[14,133269,133270],{},"a.官方方式：",[14,133272,133273],{},[6750,133274],{"alt":98,"src":133275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[93,133277,133278],{"className":128681,"code":133253,"language":128683,"meta":128684,"style":98},[83,133279,133280],{"__ignoreMap":98},[102,133281,133282],{"class":104,"line":105},[102,133283,133253],{},[14,133285,133286],{},"b.当普通软件运行：",[14,133288,133289],{},[6750,133290],{"alt":98,"src":133291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,133293,133294],{},[6750,133295],{"alt":98,"src":133296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[8955,133298,133299],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":98,"searchDepth":116,"depth":116,"links":133301},[133302,133303,133308,133309,133315,133316],{"id":130034,"depth":116,"text":130035},{"id":130376,"depth":116,"text":130377,"children":133304},[133305,133306,133307],{"id":130380,"depth":123,"text":130381},{"id":130447,"depth":123,"text":130448},{"id":130708,"depth":123,"text":130709},{"id":130861,"depth":116,"text":130862},{"id":131099,"depth":116,"text":131100,"children":133310},[133311,133312,133313,133314],{"id":131151,"depth":123,"text":131152},{"id":131437,"depth":123,"text":131438},{"id":131708,"depth":123,"text":131709},{"id":131967,"depth":123,"text":131968},{"id":132026,"depth":116,"text":132027},{"id":132327,"depth":116,"text":132328,"children":133317},[133318,133319,133320,133321,133322,133323,133324,133325],{"id":132331,"depth":123,"text":132332},{"id":132343,"depth":123,"text":132344},{"id":132555,"depth":123,"text":132556},{"id":132579,"depth":123,"text":132580},{"id":132645,"depth":123,"text":132646},{"id":132739,"depth":123,"text":132740},{"id":132746,"depth":123,"text":132747},{"id":132770,"depth":123,"text":132771},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":130026,"description":31240},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":133332,"title":133333,"body":133334,"description":31240,"extension":8978,"meta":133338,"navigation":651,"path":133339,"seo":133340,"stem":133341,"__hash__":133342},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":133335,"toc":133336},[],{"title":98,"searchDepth":116,"depth":116,"links":133337},[],{"category":38128},"\u002Fwiki\u002F2025-01-27-linux",{"title":133333,"description":31240},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":133344,"title":133345,"body":133346,"description":133350,"extension":8978,"meta":133741,"navigation":651,"path":133742,"seo":133743,"stem":133744,"__hash__":133745},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":133347,"toc":133739},[133348,133351,133355,133372,133375,133428,133432,133434,133474,133483,133487,133490,133731,133736],[14,133349,133350],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,133352,133354],{"id":133353},"_1ubuntu环境配置","1.Ubuntu环境配置",[87,133356,133357,133360,133363,133366,133369],{},[62,133358,133359],{},"ubuntu环境换源",[62,133361,133362],{},"安装cuda",[62,133364,133365],{},"安装miniconda",[62,133367,133368],{},"安装pytorch",[62,133370,133371],{},"安装genesis",[14,133373,133374],{},"参考链接：",[93,133376,133378],{"className":31686,"code":133377,"language":31688,"meta":98,"style":98},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[83,133379,133380],{"__ignoreMap":98},[102,133381,133382,133385,133388,133391,133393,133396,133399,133401,133404,133407,133409,133412,133415,133417,133420,133423,133425],{"class":104,"line":105},[102,133383,133384],{"class":112},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[102,133386,133387],{"class":278},"=blogdetail",[102,133389,133390],{"class":119},"&sharetype",[102,133392,260],{"class":108},[102,133394,133395],{"class":278},"blogdetail",[102,133397,133398],{"class":119},"&sharerId",[102,133400,260],{"class":108},[102,133402,133403],{"class":278},"144728092",[102,133405,133406],{"class":119},"&sharerefer",[102,133408,260],{"class":108},[102,133410,133411],{"class":278},"PC",[102,133413,133414],{"class":119},"&sharesource",[102,133416,260],{"class":108},[102,133418,133419],{"class":278},"qq_69379513",[102,133421,133422],{"class":119},"&sharefrom",[102,133424,260],{"class":108},[102,133426,133427],{"class":278},"from_link\n",[10,133429,133431],{"id":133430},"_2genesis-报错issue","2.Genesis 报错issue",[14,133433,133374],{},[93,133435,133436],{"className":31686,"code":133377,"language":31688,"meta":98,"style":98},[83,133437,133438],{"__ignoreMap":98},[102,133439,133440,133442,133444,133446,133448,133450,133452,133454,133456,133458,133460,133462,133464,133466,133468,133470,133472],{"class":104,"line":105},[102,133441,133384],{"class":112},[102,133443,133387],{"class":278},[102,133445,133390],{"class":119},[102,133447,260],{"class":108},[102,133449,133395],{"class":278},[102,133451,133398],{"class":119},[102,133453,260],{"class":108},[102,133455,133403],{"class":278},[102,133457,133406],{"class":119},[102,133459,260],{"class":108},[102,133461,133411],{"class":278},[102,133463,133414],{"class":119},[102,133465,260],{"class":108},[102,133467,133419],{"class":278},[102,133469,133422],{"class":119},[102,133471,260],{"class":108},[102,133473,133427],{"class":278},[93,133475,133477],{"className":31686,"code":133476,"language":31688,"meta":98,"style":98},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[83,133478,133479],{"__ignoreMap":98},[102,133480,133481],{"class":104,"line":105},[102,133482,133476],{"class":112},[10,133484,133486],{"id":133485},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,133488,133489],{},"hello_robot.py",[93,133491,133493],{"className":38243,"code":133492,"language":38245,"meta":98,"style":98},"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",[83,133494,133495,133501,133516,133520,133532,133544,133548,133561,133565,133584,133594,133604,133618,133622,133626,133631,133635,133645,133652,133666,133673,133683,133688,133692,133710,133715,133719,133726],{"__ignoreMap":98},[102,133496,133497,133499],{"class":104,"line":105},[102,133498,38257],{"class":108},[102,133500,53170],{"class":119},[102,133502,133503,133506,133509,133511,133513],{"class":104,"line":116},[102,133504,133505],{"class":119},"os.environ[",[102,133507,133508],{"class":278},"'PYOPENGL_PLATFORM'",[102,133510,13252],{"class":119},[102,133512,260],{"class":108},[102,133514,133515],{"class":278}," 'glx'\n",[102,133517,133518],{"class":104,"line":123},[102,133519,652],{"emptyLinePlaceholder":651},[102,133521,133522,133524,133527,133529],{"class":104,"line":130},[102,133523,38257],{"class":108},[102,133525,133526],{"class":119}," genesis ",[102,133528,39248],{"class":108},[102,133530,133531],{"class":119}," gs\n",[102,133533,133534,133536,133539,133541],{"class":104,"line":136},[102,133535,38602],{"class":108},[102,133537,133538],{"class":119}," pynput ",[102,133540,38257],{"class":108},[102,133542,133543],{"class":119}," keyboard\n",[102,133545,133546],{"class":104,"line":142},[102,133547,652],{"emptyLinePlaceholder":651},[102,133549,133550,133553,133556,133558],{"class":104,"line":148},[102,133551,133552],{"class":119},"gs.init(",[102,133554,133555],{"class":386},"backend",[102,133557,260],{"class":108},[102,133559,133560],{"class":119},"gs.gpu)\n",[102,133562,133563],{"class":104,"line":157},[102,133564,652],{"emptyLinePlaceholder":651},[102,133566,133567,133570,133572,133575,133578,133580,133582],{"class":104,"line":163},[102,133568,133569],{"class":119},"scene ",[102,133571,260],{"class":108},[102,133573,133574],{"class":119}," gs.Scene(",[102,133576,133577],{"class":386},"show_viewer",[102,133579,260],{"class":108},[102,133581,39341],{"class":187},[102,133583,390],{"class":119},[102,133585,133586,133589,133591],{"class":104,"line":175},[102,133587,133588],{"class":119},"plane ",[102,133590,260],{"class":108},[102,133592,133593],{"class":119}," scene.add_entity(gs.morphs.Plane())\n",[102,133595,133596,133599,133601],{"class":104,"line":181},[102,133597,133598],{"class":119},"franka ",[102,133600,260],{"class":108},[102,133602,133603],{"class":119}," scene.add_entity(\n",[102,133605,133606,133609,133611,133613,133616],{"class":104,"line":202},[102,133607,133608],{"class":119},"    gs.morphs.MJCF(",[102,133610,53219],{"class":386},[102,133612,260],{"class":108},[102,133614,133615],{"class":278},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[102,133617,45912],{"class":119},[102,133619,133620],{"class":104,"line":208},[102,133621,390],{"class":119},[102,133623,133624],{"class":104,"line":214},[102,133625,652],{"emptyLinePlaceholder":651},[102,133627,133628],{"class":104,"line":225},[102,133629,133630],{"class":119},"scene.build()\n",[102,133632,133633],{"class":104,"line":230},[102,133634,652],{"emptyLinePlaceholder":651},[102,133636,133637,133639,133642],{"class":104,"line":236},[102,133638,39812],{"class":108},[102,133640,133641],{"class":112}," on_press",[102,133643,133644],{"class":119},"(key):\n",[102,133646,133647,133650],{"class":104,"line":242},[102,133648,133649],{"class":108},"    try",[102,133651,12552],{"class":119},[102,133653,133654,133656,133659,133661,133664],{"class":104,"line":248},[102,133655,1202],{"class":108},[102,133657,133658],{"class":119}," key.char ",[102,133660,1876],{"class":108},[102,133662,133663],{"class":278}," 'q'",[102,133665,12552],{"class":119},[102,133667,133668,133670],{"class":104,"line":254},[102,133669,1245],{"class":108},[102,133671,133672],{"class":187}," False\n",[102,133674,133675,133678,133681],{"class":104,"line":269},[102,133676,133677],{"class":108},"    except",[102,133679,133680],{"class":187}," AttributeError",[102,133682,12552],{"class":119},[102,133684,133685],{"class":104,"line":298},[102,133686,133687],{"class":108},"        pass\n",[102,133689,133690],{"class":104,"line":502},[102,133691,652],{"emptyLinePlaceholder":651},[102,133693,133694,133697,133699,133702,133705,133707],{"class":104,"line":507},[102,133695,133696],{"class":119},"listener ",[102,133698,260],{"class":108},[102,133700,133701],{"class":119}," keyboard.Listener(",[102,133703,133704],{"class":386},"on_press",[102,133706,260],{"class":108},[102,133708,133709],{"class":119},"on_press)\n",[102,133711,133712],{"class":104,"line":512},[102,133713,133714],{"class":119},"listener.start()\n",[102,133716,133717],{"class":104,"line":521},[102,133718,652],{"emptyLinePlaceholder":651},[102,133720,133721,133723],{"class":104,"line":526},[102,133722,116528],{"class":108},[102,133724,133725],{"class":119}," listener.running:\n",[102,133727,133728],{"class":104,"line":532},[102,133729,133730],{"class":119},"    scene.step()\n",[14,133732,133733],{},[6750,133734],{"alt":98,"src":133735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[8955,133737,133738],{},"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":98,"searchDepth":116,"depth":116,"links":133740},[],{"category":31242},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":133345,"description":133350},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":133747,"title":133748,"body":133749,"description":31240,"extension":8978,"meta":133764,"navigation":651,"path":133765,"seo":133766,"stem":133767,"__hash__":133768},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":133750,"toc":133761},[133751,133754,133758],[10,133752,133748],{"id":133753},"_1-基础知识",[43,133755,133757],{"id":133756},"_11-js的组成","1.1 js的组成",[14,133759,133760],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":98,"searchDepth":116,"depth":116,"links":133762},[133763],{"id":133756,"depth":116,"text":133757},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":133748,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":133770,"title":133771,"body":133772,"description":31240,"extension":8978,"meta":133911,"navigation":651,"path":133912,"seo":133913,"stem":133914,"__hash__":133915},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":133773,"toc":133899},[133774,133777,133781,133784,133788,133798,133802,133805,133808,133811,133815,133822,133828,133832,133838,133849,133853,133856,133860,133863,133867,133870,133874,133877,133881,133884,133887,133890,133893,133896],[10,133775,133771],{"id":133776},"_2-vscode必备内容",[43,133778,133780],{"id":133779},"_21-标签分类","2.1 标签分类",[14,133782,133783],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[43,133785,133787],{"id":133786},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,133789,133790,133791,133793,133794,133797],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[83,133792,9263],{}," 然后按 ",[83,133795,133796],{},"Tab","，快速自动生成基本结构。",[43,133799,133801],{"id":133800},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,133803,133804],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,133806,133807],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,133809,133810],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[43,133812,133814],{"id":133813},"_24-视图缩放","2.4 视图缩放",[14,133816,133817,133818,133821],{},"缩放视图 ",[83,133819,133820],{},"ctrl+"," 可实现代码增大。",[14,133823,133824,133827],{},[83,133825,133826],{},"ctrl-"," 可实现代码减小。",[43,133829,133831],{"id":133830},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,133833,133834,133835,36250],{},"VSCode 新建文件快捷键为 ",[83,133836,133837],{},"ctrl+N",[14,133839,133840,133841,133844,133845,133848],{},"保存快捷键为 ",[83,133842,133843],{},"ctrl+S","，将文本保存为 ",[83,133846,133847],{},".html"," 文件。",[43,133850,133852],{"id":133851},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,133854,133855],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[43,133857,133859],{"id":133858},"_27-vscode-icons","2.7 vscode-icons",[14,133861,133862],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[43,133864,133866],{"id":133865},"_28-easy-less","2.8 Easy LESS",[14,133868,133869],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[43,133871,133873],{"id":133872},"_29-会了吧插件","2.9 会了吧插件",[14,133875,133876],{},"会了吧插件可以展示代码中英语单词的意思。",[43,133878,133880],{"id":133879},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,133882,133883],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,133885,133886],{},"②选定多个相同的单词:ctrl+D",[14,133888,133889],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,133891,133892],{},"④全局替换某些单词:ctrl+h",[14,133894,133895],{},"⑤快速定位到某一行:ctrl+g",[14,133897,133898],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":98,"searchDepth":116,"depth":116,"links":133900},[133901,133902,133903,133904,133905,133906,133907,133908,133909,133910],{"id":133779,"depth":116,"text":133780},{"id":133786,"depth":116,"text":133787},{"id":133800,"depth":116,"text":133801},{"id":133813,"depth":116,"text":133814},{"id":133830,"depth":116,"text":133831},{"id":133851,"depth":116,"text":133852},{"id":133858,"depth":116,"text":133859},{"id":133865,"depth":116,"text":133866},{"id":133872,"depth":116,"text":133873},{"id":133879,"depth":116,"text":133880},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":133771,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":133917,"title":133918,"body":133919,"description":31240,"extension":8978,"meta":134078,"navigation":651,"path":134079,"seo":134080,"stem":134081,"__hash__":134082},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":133920,"toc":134070},[133921,133924,133928,133938,133944,133950,133954,133963,133967,133972,133975,133978,133982,133985,133995,134004,134013,134022,134032,134039,134044,134049,134062],[10,133922,133918],{"id":133923},"_3-html文本与容器标签",[43,133925,133927],{"id":133926},"_31-标题标签","3.1 标题标签",[14,133929,133930,133933,133934,133937],{},[83,133931,133932],{},"\u003Ch1>","我是一级标签",[83,133935,133936],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,133939,133940,133933,133942],{},[83,133941,133932],{},[83,133943,133936],{},[14,133945,131200,133946,133949],{},[83,133947,133948],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[43,133951,133953],{"id":133952},"_32-段落标签","3.2 段落标签",[14,133955,133956,133959,133960],{},[83,133957,133958],{},"\u003Cp>","....",[83,133961,133962],{},"\u003C\u002Fp>",[43,133964,133966],{"id":133965},"_33-换行标签","3.3 换行标签",[14,133968,133969],{},[83,133970,133971],{},"\u003Cbr \u002F>",[14,133973,133974],{},"具有强制换行的作用",[14,133976,133977],{},"单标签",[43,133979,133981],{"id":133980},"_34-文本格式化标签","3.4 文本格式化标签",[14,133983,133984],{},"提供粗体、斜体和下划线等效果",[14,133986,133987,133988,90404,133991,133994],{},"加粗：",[83,133989,133990],{},"\u003Cstrong>...\u003C\u002Fstrong>",[83,133992,133993],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,133996,133997,133998,90404,134001,133994],{},"斜体：",[83,133999,134000],{},"\u003Cem>...\u003C\u002Fem>",[83,134002,134003],{},"\u003Ci>...\u003C\u002Fi>",[14,134005,134006,134007,90404,134010,133994],{},"删除线：",[83,134008,134009],{},"\u003Cdel>...\u003C\u002Fdel>",[83,134011,134012],{},"\u003Cs>...\u003C\u002Fs>",[14,134014,134015,134016,90404,134019,133994],{},"下划线：",[83,134017,134018],{},"\u003Cins>...\u003C\u002Fins>",[83,134020,134021],{},"\u003Cu>...\u003C\u002Fu>",[43,134023,134025,134026,3977,134029,110558],{"id":134024},"_35-div和span标签","3.5 ",[83,134027,134028],{},"\u003Cdiv>",[83,134030,134031],{},"\u003Cspan>",[14,134033,134034,108883,134036,134038],{},[83,134035,134028],{},[83,134037,134031],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,134040,134041],{},[83,134042,134043],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,134045,134046],{},[83,134047,134048],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,134050,134051,134052,134054,134055,134057,134058,134061],{},"两者特点：①",[83,134053,134028],{}," 标签用来布局，但一行通常只放一个 ",[83,134056,134028],{},"。可以理解为一个大盒子，独占一行，在 ",[83,134059,134060],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,134063,85114,134064,134066,134067,134069],{},[83,134065,134031],{}," 标签也可用于布局，一行可以放多个 ",[83,134068,134031],{},"，可理解为小盒子。",{"title":98,"searchDepth":116,"depth":116,"links":134071},[134072,134073,134074,134075,134076],{"id":133926,"depth":116,"text":133927},{"id":133952,"depth":116,"text":133953},{"id":133965,"depth":116,"text":133966},{"id":133980,"depth":116,"text":133981},{"id":134024,"depth":116,"text":134077},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":133918,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":134084,"title":134085,"body":134086,"description":31240,"extension":8978,"meta":134283,"navigation":651,"path":134284,"seo":134285,"stem":134286,"__hash__":134287},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":134087,"toc":134275},[134088,134091,134095,134098,134104,134111,134117,134123,134126,134129,134132,134135,134138,134141,134144,134148,134151,134154,134157,134163,134169,134175,134182,134186,134192,134198,134201,134204,134210,134216,134222,134225,134228,134232,134235,134245,134251,134255,134264,134268,134271],[10,134089,134085],{"id":134090},"_4-html图像与链接",[43,134092,134094],{"id":134093},"_41-图像标签","4.1 图像标签",[14,134096,134097],{},"（1）标签",[14,134099,134100,134103],{},[83,134101,134102],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,134105,134106,134107,134110],{},"src是",[83,134108,134109],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,134112,134113,134114],{},"alt:文本，替换文本。图像不能显示的文字 ",[83,134115,134116],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,134118,134119,134120],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[83,134121,134122],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,134124,134125],{},"width:像素，设置图像的宽度",[14,134127,134128],{},"height:像素，设置图像的高度",[14,134130,134131],{},"border：像素，设置图像的边框粗细",[14,134133,134134],{},"（2）图像标签属性的注意点：",[14,134136,134137],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,134139,134140],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,134142,134143],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[43,134145,134147],{"id":134146},"_42-路径注意要点","4.2 路径注意要点：",[14,134149,134150],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,134152,134153],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,134155,134156],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,134158,134159,134160],{},"①同一级路径：图像文件位于HTML文件同一级，如",[83,134161,134162],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,134164,134165,134166],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[83,134167,134168],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,134170,134171,134172],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[83,134173,134174],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,134176,134177,134178,9288],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[9275,134179,134180],{"href":134180,"rel":134181},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[31729],[43,134183,134185],{"id":134184},"_43-超链接标签","4.3 超链接标签",[14,134187,134188,134191],{},[83,134189,134190],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,134193,134194,134195],{},"①语法格式：",[83,134196,134197],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,134199,134200],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,134202,134203],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,134205,134206,134207],{},"③链接分类：外部链接：",[83,134208,134209],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,134211,134212,134213],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[83,134214,134215],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,134217,134218,134219],{},"空链接：如果当时没有确定链接目标时，",[83,134220,134221],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,134223,134224],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,134226,134227],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[43,134229,134231],{"id":134230},"_44-锚点链接","4.4 锚点链接",[14,134233,134234],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,134236,134237,134238,134241,134242],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[83,134239,134240],{},"\u003Ca href=\"#two\">","第二级",[83,134243,134244],{},"\u003C\u002Fa>",[14,134246,134247,134248],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[83,134249,134250],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[43,134252,134254],{"id":134253},"_45-注释标签","4.5 注释标签",[14,134256,134257,134260,134261],{},[83,134258,134259],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[83,134262,134263],{},"ctrl+\u002F",[43,134265,134267],{"id":134266},"_46-特殊字符","4.6 特殊字符",[14,134269,134270],{},"可以实现添加多个空格",[6750,134272],{"style":134273,"src":134274},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":98,"searchDepth":116,"depth":116,"links":134276},[134277,134278,134279,134280,134281,134282],{"id":134093,"depth":116,"text":134094},{"id":134146,"depth":116,"text":134147},{"id":134184,"depth":116,"text":134185},{"id":134230,"depth":116,"text":134231},{"id":134253,"depth":116,"text":134254},{"id":134266,"depth":116,"text":134267},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":134085,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":134289,"title":134290,"body":134291,"description":31240,"extension":8978,"meta":134584,"navigation":651,"path":134585,"seo":134586,"stem":134587,"__hash__":134588},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":134292,"toc":134575},[134293,134296,134300,134303,134306,134309,134312,134315,134318,134321,134324,134327,134347,134353,134357,134360,134363,134366,134369,134372,134375,134379,134382,134385,134388,134391,134404,134409,134412,134415,134430,134433,134436,134439,134442,134445,134449,134452,134459,134462,134465,134468,134471,134474,134480,134483,134486,134492,134495,134498,134501,134507,134510,134513,134527,134534,134537,134540,134547,134556,134559,134562,134565,134569,134572],[10,134294,134290],{"id":134295},"_5-html表格列表与表单",[43,134297,134299],{"id":134298},"_51-表格标签","5.1 表格标签",[14,134301,134302],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,134304,134305],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,134307,134308],{},"②表格基本语法：",[6750,134310],{"style":134273,"src":134311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,134313,134314],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[6750,134316],{"style":134273,"src":134317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,134319,134320],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[6750,134322],{"style":134273,"src":134323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,134325,134326],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,134328,134329,134332,134333,134335,134336,134339,134340,134342,134343,134346],{},[83,134330,134331],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[83,134334,134331],{},"内部必须拥有",[83,134337,134338],{},"\u003Ctr>","标签，一般位于第一行，",[83,134341,134331],{},"比",[83,134344,134345],{},"\u003Cth>","范围广",[14,134348,134349,134352],{},[83,134350,134351],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[43,134354,134356],{"id":134355},"_52-合并单元格","5.2 合并单元格",[14,134358,134359],{},"（1）合并单元格方式：",[14,134361,134362],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,134364,134365],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,134367,134368],{},"（2）目标单元格：",[14,134370,134371],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,134373,134374],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[43,134376,134378],{"id":134377},"_53-列表标签","5.3 列表标签",[14,134380,134381],{},"（1）分类：无序列表、有序列表、自定义列表",[14,134383,134384],{},"①无序列表：",[6750,134386],{"style":134273,"src":134387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,134389,134390],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,134392,134393,134396,134397,134400,134401,134403],{},[83,134394,134395],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[83,134398,134399],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[83,134402,134395],{},"中输入其他标签或文字是不对的",[14,134405,134406,134408],{},[83,134407,134399],{},"之间相当于一个容器，可以容纳所有元素",[14,134410,134411],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,134413,134414],{},"在css中去除前边的小圆点采用如下代码:",[93,134416,134420],{"className":134417,"code":134418,"language":134419,"meta":98,"style":98},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[83,134421,134422],{"__ignoreMap":98},[102,134423,134424,134427],{"class":104,"line":105},[102,134425,134426],{"class":59165},"list-style",[102,134428,134429],{"class":119},": none;\n",[14,134431,134432],{},"②有序列表：",[6750,134434],{"style":134273,"src":134435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,134437,134438],{},"③自定义列表：",[6750,134440],{"style":134273,"src":134441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[6750,134443],{"style":134273,"src":134444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[43,134446,134448],{"id":134447},"_54-表单标签","5.4 表单标签",[14,134450,134451],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,134453,134454,134455,134458],{},"（1）表单域：包含单元素的区域，",[83,134456,134457],{},"\u003Cform>","标签可以实现信息的收集和传递。",[6750,134460],{"style":134273,"src":134461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,134463,134464],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,134466,134467],{},"表单元素提交必须有name属性",[14,134469,134470],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,134472,134473],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,134475,85091,134476,134479],{},[83,134477,134478],{},"\u003Cinput>","输入表单元素",[6750,134481],{"style":134273,"src":134482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[6750,134484],{"style":134273,"src":134485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,134487,134488,134489],{},"单选按钮：",[83,134490,134491],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[6750,134493],{"style":134273,"src":134494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,134496,134497],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[6750,134499],{"style":134273,"src":134500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,134502,134503,134506],{},[18,134504,134505],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,134508,134509],{},"②select下拉表单元素：可以节约页面控件",[6750,134511],{"style":134273,"src":134512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,134514,134515,81,134517,134520,134521,134523,134524,134526],{},[18,134516,9076],{},[83,134518,134519],{},"\u003Cselect>","中至少包含一对",[83,134522,110579],{},"；在",[83,134525,110579],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,134528,134529,134530,134533],{},"③",[83,134531,134532],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[6750,134535],{"style":134273,"src":134536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,134538,134539],{},"3行20列",[43,134541,134543,134544,110558],{"id":134542},"_55-lable标签","5.5 ",[83,134545,134546],{},"\u003Clable>",[14,134548,134549,134550,134552,134553,134555],{},"它不是表单标签，但常常与表单标签搭配使用，",[83,134551,134546],{},"标签用于绑定一个表单标签，当点击",[83,134554,134546],{},"标签内的文本",[14,134557,134558],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[6750,134560],{"style":134273,"src":134561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[6750,134563],{"style":134273,"src":134564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[43,134566,134568],{"id":134567},"_56-实例","5.6 实例",[6750,134570],{"style":134273,"src":134571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[8955,134573,134574],{},"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":98,"searchDepth":116,"depth":116,"links":134576},[134577,134578,134579,134580,134581,134583],{"id":134298,"depth":116,"text":134299},{"id":134355,"depth":116,"text":134356},{"id":134377,"depth":116,"text":134378},{"id":134447,"depth":116,"text":134448},{"id":134542,"depth":116,"text":134582},"5.5 \u003Clable>标签",{"id":134567,"depth":116,"text":134568},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":134290,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":134590,"title":134591,"body":134592,"description":31240,"extension":8978,"meta":135141,"navigation":651,"path":135142,"seo":135143,"stem":135144,"__hash__":135145},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":134593,"toc":135116},[134594,134597,134601,134604,134607,134611,134614,134617,134620,134623,134626,134629,134632,134636,134639,134643,134646,134649,134652,134656,134659,134662,134665,134671,134674,134677,134680,134683,134686,134689,134692,134725,134729,134732,134735,134738,134742,134745,134748,134751,134754,134757,134761,134764,134767,134770,134774,134777,134781,134784,134788,134791,134796,134800,134803,134807,134810,134813,134816,134819,134846,134849,134853,134856,134859,134864,134867,134870,134874,134877,134882,134885,134888,134891,134895,134898,134901,134904,134908,134911,134914,134917,134921,134925,134928,134968,134971,134975,134982,134985,134989,134992,135038,135042,135045,135048,135051,135079,135083,135086,135113],[10,134595,134591],{"id":134596},"_6-css语法与文本样式",[43,134598,134600],{"id":134599},"_61-css语法规范","6.1 css语法规范",[14,134602,134603],{},"由两部分组成，选择器及一条或多条声明",[6750,134605],{"style":134273,"src":134606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,134608,134609],{},[18,134610,9076],{},[14,134612,134613],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,134615,134616],{},"②属性与属性值以“键值对”的形式出现",[14,134618,134619],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,134621,134622],{},"④属性和属性值之间用英文“;”分开",[6750,134624],{"style":134273,"src":134625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[6750,134627],{"style":134273,"src":134628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[6750,134630],{"style":134273,"src":134631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[43,134633,134635],{"id":134634},"_62-css选择器","6.2 css选择器",[14,134637,134638],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[48,134640,134642],{"id":134641},"_621-标签选择器","6.2.1 标签选择器",[14,134644,134645],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,134647,134648],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[6750,134650],{"style":134273,"src":134651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[48,134653,134655],{"id":134654},"_622-类选择器","6.2.2 类选择器",[14,134657,134658],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,134660,134661],{},"②样例",[6750,134663],{"style":134273,"src":134664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,134666,134667,134668,134670],{},"③ ",[18,134669,134505],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,134672,134673],{},"可以理解为给这个标签起了个名字，来表示；",[14,134675,134676],{},"长名称或词组可以使用横线来为选择器命名；",[14,134678,134679],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,134681,134682],{},"命名要有意义；",[6750,134684],{"style":134273,"src":134685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,134687,134688],{},"类选择器也可以指定特殊的元素p.center{}",[14,134690,134691],{},"p.center和.center都对",[93,134693,134695],{"className":134417,"code":134694,"language":134419,"meta":98,"style":98},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[83,134696,134697,134702,134711,134721],{"__ignoreMap":98},[102,134698,134699],{"class":104,"line":105},[102,134700,134701],{"class":126},"\u002F* 类选择器指定特殊元素 *\u002F\n",[102,134703,134704,134706,134709],{"class":104,"line":116},[102,134705,14],{"class":59165},[102,134707,134708],{"class":112},".center",[102,134710,1077],{"class":119},[102,134712,134713,134715,134717,134719],{"class":104,"line":123},[102,134714,78391],{"class":187},[102,134716,59302],{"class":119},[102,134718,59457],{"class":187},[102,134720,266],{"class":119},[102,134722,134723],{"class":104,"line":130},[102,134724,301],{"class":119},[48,134726,134728],{"id":134727},"_623-多类名使用","6.2.3 多类名使用",[14,134730,134731],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[6750,134733],{"style":134273,"src":134734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,134736,134737],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[48,134739,134741],{"id":134740},"_624-id选择器","6.2.4 id选择器",[14,134743,134744],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,134746,134747],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[6750,134749],{"style":134273,"src":134750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,134752,134753],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,134755,134756],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[48,134758,134760],{"id":134759},"_625-通配符选择器","6.2.5 通配符选择器",[14,134762,134763],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,134765,134766],{},"* {",[14,134768,134769],{},"color=\"red\"}",[48,134771,134773],{"id":134772},"_626-总结","6.2.6 总结",[6750,134775],{"style":134273,"src":134776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[43,134778,134780],{"id":134779},"_63-css字体属性","6.3 css字体属性",[14,134782,134783],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[48,134785,134787],{"id":134786},"_631-字体系列","6.3.1 字体系列",[14,134789,134790],{},"font-family: '宋体';",[14,134792,134793,134795],{},[18,134794,9076],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[48,134797,134799],{"id":134798},"_632-字体大小","6.3.2 字体大小",[14,134801,134802],{},"font-size: 20px",[14,134804,134805,34338],{},[18,134806,134505],{},[14,134808,134809],{},"①px（像素）大小是网页的最常用单位",[14,134811,134812],{},"②谷歌浏览器默认为16px",[14,134814,134815],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,134817,134818],{},"④可以给body指定整个页面的大小：会自动引用",[93,134820,134822],{"className":134417,"code":134821,"language":134419,"meta":98,"style":98},"body {\n  font-size: 16px;\n}\n",[83,134823,134824,134830,134842],{"__ignoreMap":98},[102,134825,134826,134828],{"class":104,"line":105},[102,134827,59665],{"class":59165},[102,134829,1077],{"class":119},[102,134831,134832,134834,134836,134838,134840],{"class":104,"line":116},[102,134833,78491],{"class":187},[102,134835,59302],{"class":119},[102,134837,9628],{"class":187},[102,134839,59357],{"class":108},[102,134841,266],{"class":119},[102,134843,134844],{"class":104,"line":123},[102,134845,301],{"class":119},[14,134847,134848],{},"⑤标题标签比较特殊，需要单独指定大小",[48,134850,134852],{"id":134851},"_633-字体粗细","6.3.3 字体粗细",[14,134854,134855],{},"font-weight: bold;",[14,134857,134858],{},"font-weight: 100；",[14,134860,134861,134863],{},[18,134862,9076],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,134865,134866],{},"font-weight= 400;",[14,134868,134869],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[48,134871,134873],{"id":134872},"_634-文字样式","6.3.4 文字样式",[14,134875,134876],{},"font-style: normal；",[14,134878,134879,34338],{},[18,134880,134881],{},"属性值",[14,134883,134884],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,134886,134887],{},"②italic：浏览器会显示斜体的字体样式",[6750,134889],{"style":134273,"src":134890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[48,134892,134894],{"id":134893},"_635-字体符合属性","6.3.5 字体符合属性",[6750,134896],{"style":134273,"src":134897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[6750,134899],{"style":134273,"src":134900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,134902,134903],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,134905,134906,34338],{},[18,134907,134505],{},[14,134909,134910],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,134912,134913],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,134915,134916],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[43,134918,134920],{"id":134919},"_64-css-test文本属性","6.4 css test文本属性",[48,134922,134924],{"id":134923},"_641-文本颜色","6.4.1 文本颜色",[14,134926,134927],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[93,134929,134931],{"className":134417,"code":134930,"language":134419,"meta":98,"style":98},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[83,134932,134933,134938,134944,134954,134959,134964],{"__ignoreMap":98},[102,134934,134935],{"class":104,"line":105},[102,134936,134937],{"class":126},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[102,134939,134940,134942],{"class":104,"line":116},[102,134941,14],{"class":59165},[102,134943,1077],{"class":119},[102,134945,134946,134948,134950,134952],{"class":104,"line":123},[102,134947,78770],{"class":187},[102,134949,59302],{"class":119},[102,134951,65286],{"class":187},[102,134953,266],{"class":119},[102,134955,134956],{"class":104,"line":130},[102,134957,134958],{"class":126},"  \u002F* color: #ff0000; *\u002F\n",[102,134960,134961],{"class":104,"line":136},[102,134962,134963],{"class":126},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[102,134965,134966],{"class":104,"line":142},[102,134967,301],{"class":119},[6750,134969],{"style":134273,"src":134970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[48,134972,134974],{"id":134973},"_642-对齐文本","6.4.2 对齐文本",[14,134976,134977,134978,134981],{},"text-align属于用于设置元素内文本内容的 ",[18,134979,134980],{},"水平对齐"," 方式",[14,134983,134984],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[48,134986,134988],{"id":134987},"_643-装饰文本","6.4.3 装饰文本",[14,134990,134991],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[93,134993,134995],{"className":134417,"code":134994,"language":134419,"meta":98,"style":98},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[83,134996,134997,135003,135013,135017,135023,135034],{"__ignoreMap":98},[102,134998,134999,135001],{"class":104,"line":105},[102,135000,9275],{"class":59165},[102,135002,1077],{"class":119},[102,135004,135005,135007,135009,135011],{"class":104,"line":116},[102,135006,78367],{"class":187},[102,135008,59302],{"class":119},[102,135010,62602],{"class":187},[102,135012,266],{"class":119},[102,135014,135015],{"class":104,"line":123},[102,135016,301],{"class":119},[102,135018,135019,135021],{"class":104,"line":130},[102,135020,14],{"class":59165},[102,135022,1077],{"class":119},[102,135024,135025,135027,135029,135032],{"class":104,"line":136},[102,135026,78367],{"class":187},[102,135028,59302],{"class":119},[102,135030,135031],{"class":187},"underline",[102,135033,266],{"class":119},[102,135035,135036],{"class":104,"line":142},[102,135037,301],{"class":119},[48,135039,135041],{"id":135040},"_644-文本缩进","6.4.4 文本缩进",[14,135043,135044],{},"实现文本的第一行首行缩进自己指定的距离",[14,135046,135047],{},"20px往右边走；-20px往左边走",[14,135049,135050],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[93,135052,135054],{"className":134417,"code":135053,"language":134419,"meta":98,"style":98},"p {\n  text-indent: 2em;\n}\n",[83,135055,135056,135062,135075],{"__ignoreMap":98},[102,135057,135058,135060],{"class":104,"line":105},[102,135059,14],{"class":59165},[102,135061,1077],{"class":119},[102,135063,135064,135067,135069,135071,135073],{"class":104,"line":116},[102,135065,135066],{"class":187},"  text-indent",[102,135068,59302],{"class":119},[102,135070,7044],{"class":187},[102,135072,31417],{"class":108},[102,135074,266],{"class":119},[102,135076,135077],{"class":104,"line":123},[102,135078,301],{"class":119},[48,135080,135082],{"id":135081},"_645-行间距","6.4.5 行间距",[14,135084,135085],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[93,135087,135089],{"className":134417,"code":135088,"language":134419,"meta":98,"style":98},"p {\n  line-height: 1.6;\n}\n",[83,135090,135091,135097,135109],{"__ignoreMap":98},[102,135092,135093,135095],{"class":104,"line":105},[102,135094,14],{"class":59165},[102,135096,1077],{"class":119},[102,135098,135099,135102,135104,135107],{"class":104,"line":116},[102,135100,135101],{"class":187},"  line-height",[102,135103,59302],{"class":119},[102,135105,135106],{"class":187},"1.6",[102,135108,266],{"class":119},[102,135110,135111],{"class":104,"line":123},[102,135112,301],{"class":119},[8955,135114,135115],{},"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":98,"searchDepth":116,"depth":116,"links":135117},[135118,135119,135127,135134],{"id":134599,"depth":116,"text":134600},{"id":134634,"depth":116,"text":134635,"children":135120},[135121,135122,135123,135124,135125,135126],{"id":134641,"depth":123,"text":134642},{"id":134654,"depth":123,"text":134655},{"id":134727,"depth":123,"text":134728},{"id":134740,"depth":123,"text":134741},{"id":134759,"depth":123,"text":134760},{"id":134772,"depth":123,"text":134773},{"id":134779,"depth":116,"text":134780,"children":135128},[135129,135130,135131,135132,135133],{"id":134786,"depth":123,"text":134787},{"id":134798,"depth":123,"text":134799},{"id":134851,"depth":123,"text":134852},{"id":134872,"depth":123,"text":134873},{"id":134893,"depth":123,"text":134894},{"id":134919,"depth":116,"text":134920,"children":135135},[135136,135137,135138,135139,135140],{"id":134923,"depth":123,"text":134924},{"id":134973,"depth":123,"text":134974},{"id":134987,"depth":123,"text":134988},{"id":135040,"depth":123,"text":135041},{"id":135081,"depth":123,"text":135082},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":134591,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":135147,"title":135148,"body":135149,"description":31240,"extension":8978,"meta":135798,"navigation":651,"path":135799,"seo":135800,"stem":135801,"__hash__":135802},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":135150,"toc":135779},[135151,135154,135158,135162,135222,135226,135236,135239,135242,135246,135271,135275,135278,135281,135284,135287,135290,135294,135297,135300,135342,135345,135371,135377,135380,135384,135388,135394,135397,135400,135403,135406,135409,135412,135457,135461,135464,135467,135471,135475,135504,135507,135512,135515,135518,135521,135524,135528,135532,135535,135537,135540,135544,135547,135551,135554,135557,135560,135564,135568,135574,135584,135587,135590,135593,135596,135599,135722,135730,135738,135776],[10,135152,135148],{"id":135153},"_7-css引入方式与选择器进阶",[43,135155,135157],{"id":135156},"_71-css引入方式","7.1 css引入方式",[48,135159,135161],{"id":135160},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[93,135163,135167],{"className":135164,"code":135165,"language":135166,"meta":98,"style":98},"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",[83,135168,135169,135177,135184,135196,135209,135214],{"__ignoreMap":98},[102,135170,135171,135173,135175],{"class":104,"line":105},[102,135172,1208],{"class":119},[102,135174,8955],{"class":59165},[102,135176,59172],{"class":119},[102,135178,135179,135182],{"class":104,"line":116},[102,135180,135181],{"class":59165},"  h1",[102,135183,1077],{"class":119},[102,135185,135186,135189,135191,135194],{"class":104,"line":123},[102,135187,135188],{"class":187},"    color",[102,135190,59302],{"class":119},[102,135192,135193],{"class":187},"blue",[102,135195,266],{"class":119},[102,135197,135198,135201,135203,135205,135207],{"class":104,"line":130},[102,135199,135200],{"class":187},"    font-size",[102,135202,59302],{"class":119},[102,135204,9823],{"class":187},[102,135206,59357],{"class":108},[102,135208,266],{"class":119},[102,135210,135211],{"class":104,"line":136},[102,135212,135213],{"class":119},"  }\n",[102,135215,135216,135218,135220],{"class":104,"line":142},[102,135217,59650],{"class":119},[102,135219,8955],{"class":59165},[102,135221,59172],{"class":119},[14,135223,135224,34338],{},[18,135225,134505],{},[14,135227,85091,135228,135231,135232,135235],{},[83,135229,135230],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[83,135233,135234],{},"\u003Chead>","标签中",[14,135237,135238],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,135240,135241],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[48,135243,135245],{"id":135244},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[93,135247,135249],{"className":135164,"code":135248,"language":135166,"meta":98,"style":98},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[83,135250,135251],{"__ignoreMap":98},[102,135252,135253,135255,135257,135259,135261,135264,135267,135269],{"class":104,"line":105},[102,135254,1208],{"class":119},[102,135256,14],{"class":59165},[102,135258,70491],{"class":112},[102,135260,260],{"class":119},[102,135262,135263],{"class":278},"\"color: red; font-size: 16px;\"",[102,135265,135266],{"class":119},">这是一个段落\u003C\u002F",[102,135268,14],{"class":59165},[102,135270,59172],{"class":119},[14,135272,135273,34338],{},[18,135274,134505],{},[14,135276,135277],{},"①style其实就是标签的属性",[14,135279,135280],{},"②在双引号中间，写法要符合css规范",[14,135282,135283],{},"③可以控制当前的标签设置样式",[14,135285,135286],{},"④书写繁琐，简单时才用",[14,135288,135289],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[48,135291,135293],{"id":135292},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,135295,135296],{},"使用最多，单独建一个css文件，然后html引用",[14,135298,135299],{},"①css文件部分： style.css",[93,135301,135303],{"className":134417,"code":135302,"language":134419,"meta":98,"style":98},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[83,135304,135305,135310,135316,135326,135338],{"__ignoreMap":98},[102,135306,135307],{"class":104,"line":105},[102,135308,135309],{"class":126},"\u002F* style.css *\u002F\n",[102,135311,135312,135314],{"class":104,"line":116},[102,135313,10],{"class":59165},[102,135315,1077],{"class":119},[102,135317,135318,135320,135322,135324],{"class":104,"line":123},[102,135319,78770],{"class":187},[102,135321,59302],{"class":119},[102,135323,135193],{"class":187},[102,135325,266],{"class":119},[102,135327,135328,135330,135332,135334,135336],{"class":104,"line":130},[102,135329,78491],{"class":187},[102,135331,59302],{"class":119},[102,135333,9823],{"class":187},[102,135335,59357],{"class":108},[102,135337,266],{"class":119},[102,135339,135340],{"class":104,"line":136},[102,135341,301],{"class":119},[14,135343,135344],{},"②html部分",[93,135346,135348],{"className":135164,"code":135347,"language":135166,"meta":98,"style":98},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[83,135349,135350],{"__ignoreMap":98},[102,135351,135352,135354,135356,135358,135360,135362,135364,135366,135369],{"class":104,"line":105},[102,135353,1208],{"class":119},[102,135355,76870],{"class":59165},[102,135357,76873],{"class":112},[102,135359,260],{"class":119},[102,135361,76878],{"class":278},[102,135363,68922],{"class":112},[102,135365,260],{"class":119},[102,135367,135368],{"class":278},"\"style.css\"",[102,135370,59172],{"class":119},[14,135372,135373,135376],{},[83,135374,135375],{},"\u003Chr>","水平线标签（但是不常用！）",[14,135378,135379],{},"ctrl+0回到页面原来大小",[43,135381,135383],{"id":135382},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[48,135385,135387],{"id":135386},"_721-快速生成html","7.2.1 快速生成html",[14,135389,135390,135391],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[83,135392,135393],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,135395,135396],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,135398,135399],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,135401,135402],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,135404,135405],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,135407,135408],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,135410,135411],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[93,135413,135415],{"className":135164,"code":135414,"language":135166,"meta":98,"style":98},"\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",[83,135416,135417,135422,135427,135432,135437,135442,135447,135452],{"__ignoreMap":98},[102,135418,135419],{"class":104,"line":105},[102,135420,135421],{"class":126},"\u003C!-- Emmet 语法示例 -->\n",[102,135423,135424],{"class":104,"line":116},[102,135425,135426],{"class":126},"\u003C!-- div*3        → 生成3个div -->\n",[102,135428,135429],{"class":104,"line":123},[102,135430,135431],{"class":126},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[102,135433,135434],{"class":104,"line":130},[102,135435,135436],{"class":126},"\u003C!-- div+p        → 兄弟div和p -->\n",[102,135438,135439],{"class":104,"line":136},[102,135440,135441],{"class":126},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[102,135443,135444],{"class":104,"line":142},[102,135445,135446],{"class":126},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[102,135448,135449],{"class":104,"line":148},[102,135450,135451],{"class":126},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[102,135453,135454],{"class":104,"line":157},[102,135455,135456],{"class":126},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[48,135458,135460],{"id":135459},"_722-快速生成css","7.2.2 快速生成css",[14,135462,135463],{},"简写开头",[14,135465,135466],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[43,135468,135470],{"id":135469},"_73-css复合选择器","7.3 css复合选择器",[48,135472,135474],{"id":135473},"_731-后代选择器","7.3.1 后代选择器",[93,135476,135478],{"className":134417,"code":135477,"language":134419,"meta":98,"style":98},".parent .child {\n  color: blue;\n}\n",[83,135479,135480,135490,135500],{"__ignoreMap":98},[102,135481,135482,135485,135488],{"class":104,"line":105},[102,135483,135484],{"class":112},".parent",[102,135486,135487],{"class":112}," .child",[102,135489,1077],{"class":119},[102,135491,135492,135494,135496,135498],{"class":104,"line":116},[102,135493,78770],{"class":187},[102,135495,59302],{"class":119},[102,135497,135193],{"class":187},[102,135499,266],{"class":119},[102,135501,135502],{"class":104,"line":123},[102,135503,301],{"class":119},[14,135505,135506],{},"元素1 元素2 {样式声明}",[14,135508,135509],{},[18,135510,135511],{},"注意点:",[14,135513,135514],{},"①元素1和元素2中间用空格隔开",[14,135516,135517],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,135519,135520],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,135522,135523],{},"④元素1和元素2可以是任意基础选择器",[48,135525,135527],{"id":135526},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,135529,135530],{},[18,135531,135511],{},[14,135533,135534],{},"①元素1和元素2中间用大于号隔开",[14,135536,135517],{},[14,135538,135539],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[48,135541,135543],{"id":135542},"_733-并集选择器","7.3.3 并集选择器",[14,135545,135546],{},"元素1，元素2 {样式声明}",[14,135548,135549],{},[18,135550,135511],{},[14,135552,135553],{},"①元素1和元素2中间用逗号隔开",[14,135555,135556],{},"②逗号可以理解为和的意思",[14,135558,135559],{},"③并集选择器通常用于集体声明",[48,135561,135563],{"id":135562},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,135565,135566],{},[18,135567,135511],{},[14,135569,135570,135571,135573],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[76870,135572],{},"－:visited－:hover－:active。",[14,135575,135576,135577,135580,135581,33605],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[135578,135579],"hover",{}," 、 ",[135582,135583],"first-child",{},[14,135585,135586],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,135588,135589],{},"link对没访问的进行设置",[14,135591,135592],{},"vistied对已访问的进行改变",[14,135594,135595],{},"hover鼠标经过就会变",[14,135597,135598],{},"active常按(点)就会变",[93,135600,135602],{"className":134417,"code":135601,"language":134419,"meta":98,"style":98},"\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",[83,135603,135604,135609,135618,135628,135638,135642,135651,135662,135666,135674,135684,135694,135698,135707,135718],{"__ignoreMap":98},[102,135605,135606],{"class":104,"line":105},[102,135607,135608],{"class":126},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[102,135610,135611,135613,135616],{"class":104,"line":116},[102,135612,9275],{"class":59165},[102,135614,135615],{"class":112},":link",[102,135617,1077],{"class":119},[102,135619,135620,135622,135624,135626],{"class":104,"line":123},[102,135621,78770],{"class":187},[102,135623,59302],{"class":119},[102,135625,70234],{"class":187},[102,135627,266],{"class":119},[102,135629,135630,135632,135634,135636],{"class":104,"line":130},[102,135631,78367],{"class":187},[102,135633,59302],{"class":119},[102,135635,62602],{"class":187},[102,135637,266],{"class":119},[102,135639,135640],{"class":104,"line":136},[102,135641,301],{"class":119},[102,135643,135644,135646,135649],{"class":104,"line":142},[102,135645,9275],{"class":59165},[102,135647,135648],{"class":112},":visited",[102,135650,1077],{"class":119},[102,135652,135653,135655,135657,135660],{"class":104,"line":148},[102,135654,78770],{"class":187},[102,135656,59302],{"class":119},[102,135658,135659],{"class":187},"purple",[102,135661,266],{"class":119},[102,135663,135664],{"class":104,"line":157},[102,135665,301],{"class":119},[102,135667,135668,135670,135672],{"class":104,"line":163},[102,135669,9275],{"class":59165},[102,135671,68805],{"class":112},[102,135673,1077],{"class":119},[102,135675,135676,135678,135680,135682],{"class":104,"line":175},[102,135677,78770],{"class":187},[102,135679,59302],{"class":119},[102,135681,62754],{"class":187},[102,135683,266],{"class":119},[102,135685,135686,135688,135690,135692],{"class":104,"line":181},[102,135687,78367],{"class":187},[102,135689,59302],{"class":119},[102,135691,135031],{"class":187},[102,135693,266],{"class":119},[102,135695,135696],{"class":104,"line":202},[102,135697,301],{"class":119},[102,135699,135700,135702,135705],{"class":104,"line":208},[102,135701,9275],{"class":59165},[102,135703,135704],{"class":112},":active",[102,135706,1077],{"class":119},[102,135708,135709,135711,135713,135716],{"class":104,"line":214},[102,135710,78770],{"class":187},[102,135712,59302],{"class":119},[102,135714,135715],{"class":187},"green",[102,135717,266],{"class":119},[102,135719,135720],{"class":104,"line":225},[102,135721,301],{"class":119},[48,135723,135725,135726,135729],{"id":135724},"_735-伪类选择器","7.3.5 ",[135727,135728],"focus",{},"伪类选择器",[14,135731,135732,135734,135735,135737],{},[135727,135733],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[83,135736,134478],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[93,135739,135741],{"className":134417,"code":135740,"language":134419,"meta":98,"style":98},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[83,135742,135743,135751,135762,135772],{"__ignoreMap":98},[102,135744,135745,135747,135749],{"class":104,"line":105},[102,135746,61686],{"class":59165},[102,135748,69765],{"class":112},[102,135750,1077],{"class":119},[102,135752,135753,135756,135758,135760],{"class":104,"line":116},[102,135754,135755],{"class":187},"  border-color",[102,135757,59302],{"class":119},[102,135759,62754],{"class":187},[102,135761,266],{"class":119},[102,135763,135764,135766,135768,135770],{"class":104,"line":123},[102,135765,78663],{"class":187},[102,135767,59302],{"class":119},[102,135769,62602],{"class":187},[102,135771,266],{"class":119},[102,135773,135774],{"class":104,"line":130},[102,135775,301],{"class":119},[8955,135777,135778],{},"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":98,"searchDepth":116,"depth":116,"links":135780},[135781,135786,135790],{"id":135156,"depth":116,"text":135157,"children":135782},[135783,135784,135785],{"id":135160,"depth":123,"text":135161},{"id":135244,"depth":123,"text":135245},{"id":135292,"depth":123,"text":135293},{"id":135382,"depth":116,"text":135383,"children":135787},[135788,135789],{"id":135386,"depth":123,"text":135387},{"id":135459,"depth":123,"text":135460},{"id":135469,"depth":116,"text":135470,"children":135791},[135792,135793,135794,135795,135796],{"id":135473,"depth":123,"text":135474},{"id":135526,"depth":123,"text":135527},{"id":135542,"depth":123,"text":135543},{"id":135562,"depth":123,"text":135563},{"id":135724,"depth":123,"text":135797},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":135148,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":135804,"title":135805,"body":135806,"description":31240,"extension":8978,"meta":137729,"navigation":651,"path":137730,"seo":137731,"stem":137732,"__hash__":137733},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":135807,"toc":137703},[135808,135811,135815,135824,135828,135854,135859,135862,135865,135868,135871,135875,135878,135888,135896,135900,135935,135940,135943,135946,135949,135952,135956,135959,135968,135972,135985,135990,135993,135996,135999,136003,136006,136010,136013,136068,136071,136102,136105,136159,136163,136166,136332,136455,136458,136461,136464,136467,136471,136474,136478,136481,136484,136488,136491,136522,136549,136577,136580,136584,136610,136653,136657,136751,136754,136781,136784,136787,136790,136793,136796,136799,136802,136805,136808,136812,136869,136896,136900,136948,136952,136993,136995,136998,137001,137004,137007,137011,137103,137106,137109,137112,137116,137239,137440,137444,137448,137451,137454,137457,137461,137464,137467,137492,137495,137498,137501,137504,137507,137511,137519,137581,137584,137642,137645,137648,137651,137654,137657,137660,137663,137700],[10,135809,135805],{"id":135810},"_8-css显示模式与背景特性",[43,135812,135814],{"id":135813},"_81-css元素显示模式","8.1 css元素显示模式",[14,135816,135817,135818,135820,135821,135823],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[83,135819,134028],{},"自己占一行，比如一行可以放多个",[83,135822,134031],{},"，HTML 元素一般分为块元素和行内元素两种类型",[48,135825,135827],{"id":135826},"_811-块元素","8.1.1 块元素",[14,135829,135830,135831,135833,135834,9250,135837,9250,135839,9250,135841,9250,135844,9250,135847,135850,135851,135853],{},"常见的块元素有",[83,135832,133932],{},"~",[83,135835,135836],{},"\u003Ch6>",[83,135838,133958],{},[83,135840,134028],{},[83,135842,135843],{},"\u003Cul>",[83,135845,135846],{},"\u003Col>",[83,135848,135849],{},"\u003Cli>","等，其中 ",[83,135852,134028],{}," 标签是最典型的块元素",[14,135855,135856],{},[18,135857,135858],{},"块级元素的特点：",[14,135860,135861],{},"① 比较霸道，自己独占一行。",[14,135863,135864],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,135866,135867],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,135869,135870],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,135872,135873],{},[18,135874,9076],{},[14,135876,135877],{},"①文字类的元素内不能使用块级元素",[14,135879,85114,135880,135882,135883,135885,135886],{},[83,135881,133958],{}," 标签主要用于存放文字，因此 ",[83,135884,133958],{}," 里面不能放块级元素，特别是不能放",[83,135887,134028],{},[14,135889,135890,135891,135833,135893,135895],{},"⑥同理， ",[83,135892,133932],{},[83,135894,135836],{},"等都是文字类块级标签，里面也不能放其他块级元素",[48,135897,135899],{"id":135898},"_812-行内元素","8.1.2 行内元素",[14,135901,135902,135903,9250,135905,9250,135908,9250,135911,9250,135914,9250,135917,9250,135920,9250,135923,9250,135926,9250,135929,135931,135932,135934],{},"常见的行内元素有 ",[83,135904,134190],{},[83,135906,135907],{},"\u003Cstrong>",[83,135909,135910],{},"\u003Cb>",[83,135912,135913],{},"\u003Cem>",[83,135915,135916],{},"\u003Ci>",[83,135918,135919],{},"\u003Cdel>",[83,135921,135922],{},"\u003Cs>",[83,135924,135925],{},"\u003Cins>",[83,135927,135928],{},"\u003Cu>",[83,135930,134031],{}," 等，其中 ",[83,135933,134031],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,135936,135937],{},[18,135938,135939],{},"特点：",[14,135941,135942],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,135944,135945],{},"② 高、宽直接设置是无效的。",[14,135947,135948],{},"③ 默认宽度就是它本身内容的宽度。",[14,135950,135951],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,135953,135954],{},[18,135955,9076],{},[14,135957,135958],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,135960,135961,135962,135964,135965,135967],{},"②特殊情况链接 ",[83,135963,134190],{}," 里面可以放块级元素，但是给 ",[83,135966,134190],{}," 转换一下块级模式最安全",[48,135969,135971],{"id":135970},"_813-行内块元素","8.1.3 行内块元素",[14,135973,135974,135975,9250,135978,9250,135981,135984],{},"在行内元素中有几个特殊的标签 —— ",[83,135976,135977],{},"\u003Cimg \u002F>",[83,135979,135980],{},"\u003Cinput \u002F>",[83,135982,135983],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,135986,135987],{},[18,135988,135989],{},"行内块元素的特点：",[14,135991,135992],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,135994,135995],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,135997,135998],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[48,136000,136002],{"id":136001},"_814-总结","8.1.4 总结",[6750,136004],{"style":134273,"src":136005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[48,136007,136009],{"id":136008},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,136011,136012],{},"①转换为块元素：display:block;",[93,136014,136016],{"className":134417,"code":136015,"language":134419,"meta":98,"style":98},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[83,136017,136018,136023,136029,136040,136052,136064],{"__ignoreMap":98},[102,136019,136020],{"class":104,"line":105},[102,136021,136022],{"class":126},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[102,136024,136025,136027],{"class":104,"line":116},[102,136026,9275],{"class":59165},[102,136028,1077],{"class":119},[102,136030,136031,136034,136036,136038],{"class":104,"line":123},[102,136032,136033],{"class":187},"  display",[102,136035,59302],{"class":119},[102,136037,68734],{"class":187},[102,136039,266],{"class":119},[102,136041,136042,136044,136046,136048,136050],{"class":104,"line":130},[102,136043,78433],{"class":187},[102,136045,59302],{"class":119},[102,136047,5569],{"class":187},[102,136049,59357],{"class":108},[102,136051,266],{"class":119},[102,136053,136054,136056,136058,136060,136062],{"class":104,"line":136},[102,136055,78653],{"class":187},[102,136057,59302],{"class":119},[102,136059,9434],{"class":187},[102,136061,59357],{"class":108},[102,136063,266],{"class":119},[102,136065,136066],{"class":104,"line":142},[102,136067,301],{"class":119},[14,136069,136070],{},"②转换为行内元素：display:inline;",[93,136072,136074],{"className":134417,"code":136073,"language":134419,"meta":98,"style":98},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[83,136075,136076,136081,136087,136098],{"__ignoreMap":98},[102,136077,136078],{"class":104,"line":105},[102,136079,136080],{"class":126},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[102,136082,136083,136085],{"class":104,"line":116},[102,136084,59476],{"class":59165},[102,136086,1077],{"class":119},[102,136088,136089,136091,136093,136096],{"class":104,"line":123},[102,136090,136033],{"class":187},[102,136092,59302],{"class":119},[102,136094,136095],{"class":187},"inline",[102,136097,266],{"class":119},[102,136099,136100],{"class":104,"line":130},[102,136101,301],{"class":119},[14,136103,136104],{},"③转换为行内块：display:inline-block;",[93,136106,136108],{"className":134417,"code":136107,"language":134419,"meta":98,"style":98},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[83,136109,136110,136115,136121,136131,136143,136155],{"__ignoreMap":98},[102,136111,136112],{"class":104,"line":105},[102,136113,136114],{"class":126},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[102,136116,136117,136119],{"class":104,"line":116},[102,136118,102],{"class":59165},[102,136120,1077],{"class":119},[102,136122,136123,136125,136127,136129],{"class":104,"line":123},[102,136124,136033],{"class":187},[102,136126,59302],{"class":119},[102,136128,80248],{"class":187},[102,136130,266],{"class":119},[102,136132,136133,136135,136137,136139,136141],{"class":104,"line":130},[102,136134,78433],{"class":187},[102,136136,59302],{"class":119},[102,136138,9639],{"class":187},[102,136140,59357],{"class":108},[102,136142,266],{"class":119},[102,136144,136145,136147,136149,136151,136153],{"class":104,"line":136},[102,136146,78653],{"class":187},[102,136148,59302],{"class":119},[102,136150,9972],{"class":187},[102,136152,59357],{"class":108},[102,136154,266],{"class":119},[102,136156,136157],{"class":104,"line":142},[102,136158,301],{"class":119},[48,136160,136162],{"id":136161},"_816-小米侧边栏","8.1.6 小米侧边栏",[6750,136164],{"style":134273,"src":136165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[93,136167,136169],{"className":135164,"code":136168,"language":135166,"meta":98,"style":98},"\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",[83,136170,136171,136176,136191,136210,136229,136248,136267,136286,136305,136324],{"__ignoreMap":98},[102,136172,136173],{"class":104,"line":105},[102,136174,136175],{"class":126},"\u003C!-- 小米侧边栏案例 -->\n",[102,136177,136178,136180,136182,136184,136186,136189],{"class":104,"line":116},[102,136179,1208],{"class":119},[102,136181,59476],{"class":59165},[102,136183,61351],{"class":112},[102,136185,260],{"class":119},[102,136187,136188],{"class":278},"\"sidebar\"",[102,136190,59172],{"class":119},[102,136192,136193,136195,136197,136199,136201,136203,136206,136208],{"class":104,"line":123},[102,136194,60009],{"class":119},[102,136196,9275],{"class":59165},[102,136198,68922],{"class":112},[102,136200,260],{"class":119},[102,136202,68927],{"class":278},[102,136204,136205],{"class":119},">手机 电话卡\u003C\u002F",[102,136207,9275],{"class":59165},[102,136209,59172],{"class":119},[102,136211,136212,136214,136216,136218,136220,136222,136225,136227],{"class":104,"line":130},[102,136213,60009],{"class":119},[102,136215,9275],{"class":59165},[102,136217,68922],{"class":112},[102,136219,260],{"class":119},[102,136221,68927],{"class":278},[102,136223,136224],{"class":119},">电视 盒子\u003C\u002F",[102,136226,9275],{"class":59165},[102,136228,59172],{"class":119},[102,136230,136231,136233,136235,136237,136239,136241,136244,136246],{"class":104,"line":136},[102,136232,60009],{"class":119},[102,136234,9275],{"class":59165},[102,136236,68922],{"class":112},[102,136238,260],{"class":119},[102,136240,68927],{"class":278},[102,136242,136243],{"class":119},">笔记本 平板\u003C\u002F",[102,136245,9275],{"class":59165},[102,136247,59172],{"class":119},[102,136249,136250,136252,136254,136256,136258,136260,136263,136265],{"class":104,"line":142},[102,136251,60009],{"class":119},[102,136253,9275],{"class":59165},[102,136255,68922],{"class":112},[102,136257,260],{"class":119},[102,136259,68927],{"class":278},[102,136261,136262],{"class":119},">出行 穿戴\u003C\u002F",[102,136264,9275],{"class":59165},[102,136266,59172],{"class":119},[102,136268,136269,136271,136273,136275,136277,136279,136282,136284],{"class":104,"line":148},[102,136270,60009],{"class":119},[102,136272,9275],{"class":59165},[102,136274,68922],{"class":112},[102,136276,260],{"class":119},[102,136278,68927],{"class":278},[102,136280,136281],{"class":119},">智能 路由器\u003C\u002F",[102,136283,9275],{"class":59165},[102,136285,59172],{"class":119},[102,136287,136288,136290,136292,136294,136296,136298,136301,136303],{"class":104,"line":157},[102,136289,60009],{"class":119},[102,136291,9275],{"class":59165},[102,136293,68922],{"class":112},[102,136295,260],{"class":119},[102,136297,68927],{"class":278},[102,136299,136300],{"class":119},">健康 儿童\u003C\u002F",[102,136302,9275],{"class":59165},[102,136304,59172],{"class":119},[102,136306,136307,136309,136311,136313,136315,136317,136320,136322],{"class":104,"line":163},[102,136308,60009],{"class":119},[102,136310,9275],{"class":59165},[102,136312,68922],{"class":112},[102,136314,260],{"class":119},[102,136316,68927],{"class":278},[102,136318,136319],{"class":119},">耳机 音响\u003C\u002F",[102,136321,9275],{"class":59165},[102,136323,59172],{"class":119},[102,136325,136326,136328,136330],{"class":104,"line":175},[102,136327,59650],{"class":119},[102,136329,59476],{"class":59165},[102,136331,59172],{"class":119},[93,136333,136335],{"className":134417,"code":136334,"language":134419,"meta":98,"style":98},".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",[83,136336,136337,136346,136356,136369,136381,136393,136405,136415,136426,136430,136440,136451],{"__ignoreMap":98},[102,136338,136339,136342,136344],{"class":104,"line":105},[102,136340,136341],{"class":112},".sidebar",[102,136343,4378],{"class":59165},[102,136345,1077],{"class":119},[102,136347,136348,136350,136352,136354],{"class":104,"line":116},[102,136349,136033],{"class":187},[102,136351,59302],{"class":119},[102,136353,68734],{"class":187},[102,136355,266],{"class":119},[102,136357,136358,136360,136362,136365,136367],{"class":104,"line":123},[102,136359,78433],{"class":187},[102,136361,59302],{"class":119},[102,136363,136364],{"class":187},"234",[102,136366,59357],{"class":108},[102,136368,266],{"class":119},[102,136370,136371,136373,136375,136377,136379],{"class":104,"line":130},[102,136372,78653],{"class":187},[102,136374,59302],{"class":119},[102,136376,9483],{"class":187},[102,136378,59357],{"class":108},[102,136380,266],{"class":119},[102,136382,136383,136385,136387,136389,136391],{"class":104,"line":136},[102,136384,135101],{"class":187},[102,136386,59302],{"class":119},[102,136388,9483],{"class":187},[102,136390,59357],{"class":108},[102,136392,266],{"class":119},[102,136394,136395,136397,136399,136401,136403],{"class":104,"line":142},[102,136396,78688],{"class":187},[102,136398,59302],{"class":119},[102,136400,9972],{"class":187},[102,136402,59357],{"class":108},[102,136404,266],{"class":119},[102,136406,136407,136409,136411,136413],{"class":104,"line":148},[102,136408,78770],{"class":187},[102,136410,59302],{"class":119},[102,136412,68707],{"class":187},[102,136414,266],{"class":119},[102,136416,136417,136419,136421,136424],{"class":104,"line":157},[102,136418,78743],{"class":187},[102,136420,59302],{"class":119},[102,136422,136423],{"class":187},"#55585a",[102,136425,266],{"class":119},[102,136427,136428],{"class":104,"line":163},[102,136429,301],{"class":119},[102,136431,136432,136434,136436,136438],{"class":104,"line":175},[102,136433,136341],{"class":112},[102,136435,4378],{"class":59165},[102,136437,68805],{"class":112},[102,136439,1077],{"class":119},[102,136441,136442,136444,136446,136449],{"class":104,"line":181},[102,136443,78743],{"class":187},[102,136445,59302],{"class":119},[102,136447,136448],{"class":187},"#ff6700",[102,136450,266],{"class":119},[102,136452,136453],{"class":104,"line":202},[102,136454,301],{"class":119},[6750,136456],{"style":134273,"src":136457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,136459,136460],{},"行高=盒子高度：实现文字的垂直居中",[14,136462,136463],{},"原理讲解：",[6750,136465],{"style":134273,"src":136466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[43,136468,136470],{"id":136469},"_82-css背景","8.2 css背景",[14,136472,136473],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[48,136475,136477],{"id":136476},"_821-背景颜色","8.2.1 背景颜色",[14,136479,136480],{},"background-color:颜色值;",[14,136482,136483],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[48,136485,136487],{"id":136486},"_822-背景图片","8.2.2 背景图片",[14,136489,136490],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[93,136492,136494],{"className":134417,"code":136493,"language":134419,"meta":98,"style":98},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[83,136495,136496,136502,136518],{"__ignoreMap":98},[102,136497,136498,136500],{"class":104,"line":105},[102,136499,59476],{"class":59165},[102,136501,1077],{"class":119},[102,136503,136504,136507,136509,136511,136513,136516],{"class":104,"line":116},[102,136505,136506],{"class":187},"  background-image",[102,136508,59302],{"class":119},[102,136510,69591],{"class":187},[102,136512,380],{"class":119},[102,136514,136515],{"class":386},"images\u002Fbg.png",[102,136517,552],{"class":119},[102,136519,136520],{"class":104,"line":123},[102,136521,301],{"class":119},[9177,136523,136524,136533],{},[9180,136525,136526],{},[9183,136527,136528,136531],{},[9186,136529,136530],{"align":31600},"参数值",[9186,136532,110561],{"align":31600},[9223,136534,136535,136542],{},[9183,136536,136537,136539],{},[9228,136538,62602],{"align":31600},[9228,136540,136541],{"align":31600},"无背景图（默认的）",[9183,136543,136544,136546],{},[9228,136545,69591],{"align":31600},[9228,136547,136548],{"align":31600},"使用绝对或相对地址指定背景图像",[93,136550,136551],{"className":134417,"code":136493,"language":134419,"meta":98,"style":98},[83,136552,136553,136559,136573],{"__ignoreMap":98},[102,136554,136555,136557],{"class":104,"line":105},[102,136556,59476],{"class":59165},[102,136558,1077],{"class":119},[102,136560,136561,136563,136565,136567,136569,136571],{"class":104,"line":116},[102,136562,136506],{"class":187},[102,136564,59302],{"class":119},[102,136566,69591],{"class":187},[102,136568,380],{"class":119},[102,136570,136515],{"class":386},[102,136572,552],{"class":119},[102,136574,136575],{"class":104,"line":123},[102,136576,301],{"class":119},[14,136578,136579],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[48,136581,136583],{"id":136582},"_823-背景平铺","8.2.3 背景平铺",[93,136585,136587],{"className":134417,"code":136586,"language":134419,"meta":98,"style":98},"div {\n  background-repeat: no-repeat;\n}\n",[83,136588,136589,136595,136606],{"__ignoreMap":98},[102,136590,136591,136593],{"class":104,"line":105},[102,136592,59476],{"class":59165},[102,136594,1077],{"class":119},[102,136596,136597,136600,136602,136604],{"class":104,"line":116},[102,136598,136599],{"class":187},"  background-repeat",[102,136601,59302],{"class":119},[102,136603,69601],{"class":187},[102,136605,266],{"class":119},[102,136607,136608],{"class":104,"line":123},[102,136609,301],{"class":119},[9177,136611,136612,136620],{},[9180,136613,136614],{},[9183,136615,136616,136618],{},[9186,136617,136530],{"align":31600},[9186,136619,110561],{"align":31600},[9223,136621,136622,136630,136637,136645],{},[9183,136623,136624,136627],{},[9228,136625,136626],{"align":31600},"repeat",[9228,136628,136629],{"align":31600},"背景图像在纵向和横向上平铺（默认的）",[9183,136631,136632,136634],{},[9228,136633,69601],{"align":31600},[9228,136635,136636],{"align":31600},"背景图像不平铺",[9183,136638,136639,136642],{},[9228,136640,136641],{"align":31600},"repeat-x",[9228,136643,136644],{"align":31600},"背景图像在横向上平铺",[9183,136646,136647,136650],{},[9228,136648,136649],{"align":31600},"repeat-y",[9228,136651,136652],{"align":31600},"背景图像在纵向平铺",[48,136654,136656],{"id":136655},"_824-背景图片位置","8.2.4 背景图片位置",[93,136658,136660],{"className":134417,"code":136659,"language":134419,"meta":98,"style":98},"\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",[83,136661,136662,136667,136673,136687,136691,136696,136702,136718,136722,136727,136733,136747],{"__ignoreMap":98},[102,136663,136664],{"class":104,"line":105},[102,136665,136666],{"class":126},"\u002F* 方位名词 *\u002F\n",[102,136668,136669,136671],{"class":104,"line":116},[102,136670,59476],{"class":59165},[102,136672,1077],{"class":119},[102,136674,136675,136678,136680,136682,136685],{"class":104,"line":123},[102,136676,136677],{"class":187},"  background-position",[102,136679,59302],{"class":119},[102,136681,59457],{"class":187},[102,136683,136684],{"class":187}," top",[102,136686,266],{"class":119},[102,136688,136689],{"class":104,"line":130},[102,136690,301],{"class":119},[102,136692,136693],{"class":104,"line":136},[102,136694,136695],{"class":126},"\u002F* 精确单位 *\u002F\n",[102,136697,136698,136700],{"class":104,"line":142},[102,136699,59476],{"class":59165},[102,136701,1077],{"class":119},[102,136703,136704,136706,136708,136710,136712,136714,136716],{"class":104,"line":148},[102,136705,136677],{"class":187},[102,136707,59302],{"class":119},[102,136709,5016],{"class":187},[102,136711,59357],{"class":108},[102,136713,65369],{"class":187},[102,136715,59357],{"class":108},[102,136717,266],{"class":119},[102,136719,136720],{"class":104,"line":157},[102,136721,301],{"class":119},[102,136723,136724],{"class":104,"line":163},[102,136725,136726],{"class":126},"\u002F* 混合单位 *\u002F\n",[102,136728,136729,136731],{"class":104,"line":175},[102,136730,59476],{"class":59165},[102,136732,1077],{"class":119},[102,136734,136735,136737,136739,136741,136743,136745],{"class":104,"line":181},[102,136736,136677],{"class":187},[102,136738,59302],{"class":119},[102,136740,5016],{"class":187},[102,136742,59357],{"class":108},[102,136744,2705],{"class":187},[102,136746,266],{"class":119},[102,136748,136749],{"class":104,"line":202},[102,136750,301],{"class":119},[14,136752,136753],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[9177,136755,136756,136764],{},[9180,136757,136758],{},[9183,136759,136760,136762],{},[9186,136761,136530],{"align":31600},[9186,136763,33734],{"align":31600},[9223,136765,136766,136773],{},[9183,136767,136768,136770],{},[9228,136769,59833],{"align":31600},[9228,136771,136772],{"align":31600},"百分数|由浮点数和单位标识符组成的长度值",[9183,136774,136775,136778],{},[9228,136776,136777],{"align":31600},"position",[9228,136779,136780],{"align":31600},"top|center|bottom|left|center|right 方位名词",[14,136782,136783],{},"其他说明：",[14,136785,136786],{},"①参数是方位名词",[14,136788,136789],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,136791,136792],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,136794,136795],{},"②参数是精确单位",[14,136797,136798],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,136800,136801],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,136803,136804],{},"③参数是混合单位",[14,136806,136807],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[48,136809,136811],{"id":136810},"_825-背景图片固定","8.2.5 背景图片固定",[93,136813,136815],{"className":134417,"code":136814,"language":134419,"meta":98,"style":98},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[83,136816,136817,136822,136828,136840,136844,136849,136855,136865],{"__ignoreMap":98},[102,136818,136819],{"class":104,"line":105},[102,136820,136821],{"class":126},"\u002F* 背景滚动（默认） *\u002F\n",[102,136823,136824,136826],{"class":104,"line":116},[102,136825,59476],{"class":59165},[102,136827,1077],{"class":119},[102,136829,136830,136833,136835,136838],{"class":104,"line":123},[102,136831,136832],{"class":187},"  background-attachment",[102,136834,59302],{"class":119},[102,136836,136837],{"class":187},"scroll",[102,136839,266],{"class":119},[102,136841,136842],{"class":104,"line":130},[102,136843,301],{"class":119},[102,136845,136846],{"class":104,"line":136},[102,136847,136848],{"class":126},"\u002F* 背景固定 *\u002F\n",[102,136850,136851,136853],{"class":104,"line":142},[102,136852,59476],{"class":59165},[102,136854,1077],{"class":119},[102,136856,136857,136859,136861,136863],{"class":104,"line":148},[102,136858,136832],{"class":187},[102,136860,59302],{"class":119},[102,136862,94098],{"class":187},[102,136864,266],{"class":119},[102,136866,136867],{"class":104,"line":157},[102,136868,301],{"class":119},[9177,136870,136871,136880],{},[9180,136872,136873],{},[9183,136874,136875,136878],{},[9186,136876,136877],{"align":31600},"参数",[9186,136879,110561],{"align":31600},[9223,136881,136882,136889],{},[9183,136883,136884,136886],{},[9228,136885,136837],{"align":31600},[9228,136887,136888],{"align":31600},"背景图像是随对象内容滚动",[9183,136890,136891,136893],{},[9228,136892,94098],{"align":31600},[9228,136894,136895],{"align":31600},"背景图像固定",[48,136897,136899],{"id":136898},"_826-背景样式合写","8.2.6 背景样式合写",[93,136901,136903],{"className":134417,"code":136902,"language":134419,"meta":98,"style":98},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[83,136904,136905,136910,136916,136944],{"__ignoreMap":98},[102,136906,136907],{"class":104,"line":105},[102,136908,136909],{"class":126},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[102,136911,136912,136914],{"class":104,"line":116},[102,136913,59476],{"class":59165},[102,136915,1077],{"class":119},[102,136917,136918,136920,136922,136924,136927,136929,136931,136933,136935,136938,136940,136942],{"class":104,"line":123},[102,136919,78476],{"class":187},[102,136921,59302],{"class":119},[102,136923,68707],{"class":187},[102,136925,136926],{"class":187}," url",[102,136928,380],{"class":119},[102,136930,136515],{"class":386},[102,136932,22445],{"class":119},[102,136934,69601],{"class":187},[102,136936,136937],{"class":187}," fixed",[102,136939,2705],{"class":187},[102,136941,136684],{"class":187},[102,136943,266],{"class":119},[102,136945,136946],{"class":104,"line":130},[102,136947,301],{"class":119},[48,136949,136951],{"id":136950},"_827-背景色半透明","8.2.7 背景色半透明",[93,136953,136955],{"className":134417,"code":136954,"language":134419,"meta":98,"style":98},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[83,136956,136957,136963,136989],{"__ignoreMap":98},[102,136958,136959,136961],{"class":104,"line":105},[102,136960,59476],{"class":59165},[102,136962,1077],{"class":119},[102,136964,136965,136967,136969,136971,136973,136975,136977,136979,136981,136983,136985,136987],{"class":104,"line":116},[102,136966,78476],{"class":187},[102,136968,59302],{"class":119},[102,136970,62975],{"class":187},[102,136972,380],{"class":119},[102,136974,8423],{"class":187},[102,136976,2571],{"class":119},[102,136978,8423],{"class":187},[102,136980,2571],{"class":119},[102,136982,8423],{"class":187},[102,136984,2571],{"class":119},[102,136986,108386],{"class":187},[102,136988,552],{"class":119},[102,136990,136991],{"class":104,"line":123},[102,136992,301],{"class":119},[14,136994,107261],{},[14,136996,136997],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,136999,137000],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,137002,137003],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,137005,137006],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[48,137008,137010],{"id":137009},"_828-总结","8.2.8 总结",[9177,137012,137013,137024],{},[9180,137014,137015],{},[9183,137016,137017,137020,137022],{},[9186,137018,137019],{"align":31600},"属性",[9186,137021,110561],{"align":31600},[9186,137023,9191],{"align":31600},[9223,137025,137026,137037,137048,137059,137070,137081,137092],{},[9183,137027,137028,137031,137034],{},[9228,137029,137030],{"align":31600},"background-color",[9228,137032,137033],{"align":31600},"背景颜色",[9228,137035,137036],{"align":31600},"预定义的颜色值\u002F十六进制\u002FRGB代码",[9183,137038,137039,137042,137045],{},[9228,137040,137041],{"align":31600},"background-image",[9228,137043,137044],{"align":31600},"背景图片",[9228,137046,137047],{"align":31600},"url(图片路径)",[9183,137049,137050,137053,137056],{},[9228,137051,137052],{"align":31600},"background-repeat",[9228,137054,137055],{"align":31600},"是否平铺",[9228,137057,137058],{"align":31600},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[9183,137060,137061,137064,137067],{},[9228,137062,137063],{"align":31600},"background-position",[9228,137065,137066],{"align":31600},"背景位置",[9228,137068,137069],{"align":31600},"length\u002Fposition 分别是x和y坐标",[9183,137071,137072,137075,137078],{},[9228,137073,137074],{"align":31600},"background-attachment",[9228,137076,137077],{"align":31600},"背景附着",[9228,137079,137080],{"align":31600},"scroll(背景滚动) \u002Ffixed (背景固定)",[9183,137082,137083,137086,137089],{},[9228,137084,137085],{"align":31600},"背景简写",[9228,137087,137088],{"align":31600},"书写更简单",[9228,137090,137091],{"align":31600},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[9183,137093,137094,137097,137100],{},[9228,137095,137096],{"align":31600},"背景半透明",[9228,137098,137099],{"align":31600},"背景颜色半透明",[9228,137101,137102],{"align":31600},"background: rgba(0,0,0.3); 后面必须是4个值",[14,137104,137105],{},"颜色渐变：",[6750,137107],{"style":134273,"src":137108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[6750,137110],{"style":134273,"src":137111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[48,137113,137115],{"id":137114},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[93,137117,137119],{"className":135164,"code":137118,"language":135166,"meta":98,"style":98},"\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",[83,137120,137121,137136,137155,137174,137193,137212,137231],{"__ignoreMap":98},[102,137122,137123,137125,137127,137129,137131,137134],{"class":104,"line":105},[102,137124,1208],{"class":119},[102,137126,59476],{"class":59165},[102,137128,61351],{"class":112},[102,137130,260],{"class":119},[102,137132,137133],{"class":278},"\"nav\"",[102,137135,59172],{"class":119},[102,137137,137138,137140,137142,137144,137146,137148,137151,137153],{"class":104,"line":116},[102,137139,60009],{"class":119},[102,137141,9275],{"class":59165},[102,137143,68922],{"class":112},[102,137145,260],{"class":119},[102,137147,68927],{"class":278},[102,137149,137150],{"class":119},">五彩导航1\u003C\u002F",[102,137152,9275],{"class":59165},[102,137154,59172],{"class":119},[102,137156,137157,137159,137161,137163,137165,137167,137170,137172],{"class":104,"line":123},[102,137158,60009],{"class":119},[102,137160,9275],{"class":59165},[102,137162,68922],{"class":112},[102,137164,260],{"class":119},[102,137166,68927],{"class":278},[102,137168,137169],{"class":119},">五彩导航2\u003C\u002F",[102,137171,9275],{"class":59165},[102,137173,59172],{"class":119},[102,137175,137176,137178,137180,137182,137184,137186,137189,137191],{"class":104,"line":130},[102,137177,60009],{"class":119},[102,137179,9275],{"class":59165},[102,137181,68922],{"class":112},[102,137183,260],{"class":119},[102,137185,68927],{"class":278},[102,137187,137188],{"class":119},">五彩导航3\u003C\u002F",[102,137190,9275],{"class":59165},[102,137192,59172],{"class":119},[102,137194,137195,137197,137199,137201,137203,137205,137208,137210],{"class":104,"line":136},[102,137196,60009],{"class":119},[102,137198,9275],{"class":59165},[102,137200,68922],{"class":112},[102,137202,260],{"class":119},[102,137204,68927],{"class":278},[102,137206,137207],{"class":119},">五彩导航4\u003C\u002F",[102,137209,9275],{"class":59165},[102,137211,59172],{"class":119},[102,137213,137214,137216,137218,137220,137222,137224,137227,137229],{"class":104,"line":142},[102,137215,60009],{"class":119},[102,137217,9275],{"class":59165},[102,137219,68922],{"class":112},[102,137221,260],{"class":119},[102,137223,68927],{"class":278},[102,137225,137226],{"class":119},">五彩导航5\u003C\u002F",[102,137228,9275],{"class":59165},[102,137230,59172],{"class":119},[102,137232,137233,137235,137237],{"class":104,"line":148},[102,137234,59650],{"class":119},[102,137236,59476],{"class":59165},[102,137238,59172],{"class":119},[93,137240,137242],{"className":134417,"code":137241,"language":134419,"meta":98,"style":98},".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",[83,137243,137244,137253,137263,137275,137287,137297,137309,137319,137323,137348,137371,137394,137417],{"__ignoreMap":98},[102,137245,137246,137249,137251],{"class":104,"line":105},[102,137247,137248],{"class":112},".nav",[102,137250,4378],{"class":59165},[102,137252,1077],{"class":119},[102,137254,137255,137257,137259,137261],{"class":104,"line":116},[102,137256,136033],{"class":187},[102,137258,59302],{"class":119},[102,137260,80248],{"class":187},[102,137262,266],{"class":119},[102,137264,137265,137267,137269,137271,137273],{"class":104,"line":123},[102,137266,78433],{"class":187},[102,137268,59302],{"class":119},[102,137270,9840],{"class":187},[102,137272,59357],{"class":108},[102,137274,266],{"class":119},[102,137276,137277,137279,137281,137283,137285],{"class":104,"line":130},[102,137278,78653],{"class":187},[102,137280,59302],{"class":119},[102,137282,9878],{"class":187},[102,137284,59357],{"class":108},[102,137286,266],{"class":119},[102,137288,137289,137291,137293,137295],{"class":104,"line":136},[102,137290,78391],{"class":187},[102,137292,59302],{"class":119},[102,137294,59457],{"class":187},[102,137296,266],{"class":119},[102,137298,137299,137301,137303,137305,137307],{"class":104,"line":142},[102,137300,135101],{"class":187},[102,137302,59302],{"class":119},[102,137304,9878],{"class":187},[102,137306,59357],{"class":108},[102,137308,266],{"class":119},[102,137310,137311,137313,137315,137317],{"class":104,"line":148},[102,137312,78770],{"class":187},[102,137314,59302],{"class":119},[102,137316,68707],{"class":187},[102,137318,266],{"class":119},[102,137320,137321],{"class":104,"line":157},[102,137322,301],{"class":119},[102,137324,137325,137327,137329,137332,137334,137336,137339,137341,137343,137345],{"class":104,"line":163},[102,137326,137248],{"class":112},[102,137328,4378],{"class":59165},[102,137330,137331],{"class":112},":nth-child",[102,137333,380],{"class":119},[102,137335,7039],{"class":187},[102,137337,137338],{"class":119},") { ",[102,137340,137030],{"class":187},[102,137342,59302],{"class":119},[102,137344,136448],{"class":187},[102,137346,137347],{"class":119},"; }\n",[102,137349,137350,137352,137354,137356,137358,137360,137362,137364,137366,137369],{"class":104,"line":175},[102,137351,137248],{"class":112},[102,137353,4378],{"class":59165},[102,137355,137331],{"class":112},[102,137357,380],{"class":119},[102,137359,7044],{"class":187},[102,137361,137338],{"class":119},[102,137363,137030],{"class":187},[102,137365,59302],{"class":119},[102,137367,137368],{"class":187},"#ff0000",[102,137370,137347],{"class":119},[102,137372,137373,137375,137377,137379,137381,137383,137385,137387,137389,137392],{"class":104,"line":181},[102,137374,137248],{"class":112},[102,137376,4378],{"class":59165},[102,137378,137331],{"class":112},[102,137380,380],{"class":119},[102,137382,7049],{"class":187},[102,137384,137338],{"class":119},[102,137386,137030],{"class":187},[102,137388,59302],{"class":119},[102,137390,137391],{"class":187},"#00a4ff",[102,137393,137347],{"class":119},[102,137395,137396,137398,137400,137402,137404,137406,137408,137410,137412,137415],{"class":104,"line":202},[102,137397,137248],{"class":112},[102,137399,4378],{"class":59165},[102,137401,137331],{"class":112},[102,137403,380],{"class":119},[102,137405,9329],{"class":187},[102,137407,137338],{"class":119},[102,137409,137030],{"class":187},[102,137411,59302],{"class":119},[102,137413,137414],{"class":187},"#ff00ff",[102,137416,137347],{"class":119},[102,137418,137419,137421,137423,137425,137427,137429,137431,137433,137435,137438],{"class":104,"line":208},[102,137420,137248],{"class":112},[102,137422,4378],{"class":59165},[102,137424,137331],{"class":112},[102,137426,380],{"class":119},[102,137428,9354],{"class":187},[102,137430,137338],{"class":119},[102,137432,137030],{"class":187},[102,137434,59302],{"class":119},[102,137436,137437],{"class":187},"#00ff00",[102,137439,137347],{"class":119},[43,137441,137443],{"id":137442},"_83-css三大特性","8.3 css三大特性",[48,137445,137447],{"id":137446},"_831-层叠性","8.3.1 层叠性",[14,137449,137450],{},"为了解决样式冲突问题",[14,137452,137453],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,137455,137456],{},"   ②样式不冲突，不会层叠",[48,137458,137460],{"id":137459},"_832-继承性","8.3.2 继承性",[14,137462,137463],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,137465,137466],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[93,137468,137470],{"className":134417,"code":137469,"language":134419,"meta":98,"style":98},"p {\n  color: #333;\n}\n",[83,137471,137472,137478,137488],{"__ignoreMap":98},[102,137473,137474,137476],{"class":104,"line":105},[102,137475,14],{"class":59165},[102,137477,1077],{"class":119},[102,137479,137480,137482,137484,137486],{"class":104,"line":116},[102,137481,78770],{"class":187},[102,137483,59302],{"class":119},[102,137485,70234],{"class":187},[102,137487,266],{"class":119},[102,137489,137490],{"class":104,"line":123},[102,137491,301],{"class":119},[6750,137493],{"style":134273,"src":137494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,137496,137497],{},"解释：①行高可以跟单位也可以不跟单位",[14,137499,137500],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,137502,137503],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,137505,137506],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[48,137508,137510],{"id":137509},"_833-优先级","8.3.3 优先级",[87,137512,137513,137516],{},[62,137514,137515],{},"选择器相同，则执行层叠性",[62,137517,137518],{},"选择器不同，则根据选择器权重执行",[9177,137520,137521,137531],{},[9180,137522,137523],{},[9183,137524,137525,137528],{},[9186,137526,137527],{"align":31600},"选择器",[9186,137529,137530],{"align":31600},"选择器权重",[9223,137532,137533,137541,137549,137557,137565,137573],{},[9183,137534,137535,137538],{},[9228,137536,137537],{"align":31600},"继承 或者*",[9228,137539,137540],{"align":31600},"0，0，0，0",[9183,137542,137543,137546],{},[9228,137544,137545],{"align":31600},"标签选择器",[9228,137547,137548],{"align":31600},"0，0，0，1",[9183,137550,137551,137554],{},[9228,137552,137553],{"align":31600},"类选择器，伪类选择器",[9228,137555,137556],{"align":31600},"0，0，1，0",[9183,137558,137559,137562],{},[9228,137560,137561],{"align":31600},"ID选择器",[9228,137563,137564],{"align":31600},"0，1，0，0",[9183,137566,137567,137570],{},[9228,137568,137569],{"align":31600},"行内样式",[9228,137571,137572],{"align":31600},"1，0，0，0",[9183,137574,137575,137578],{},[9228,137576,137577],{"align":31600},"！important",[9228,137579,137580],{"align":31600},"无穷大",[14,137582,137583],{},"! important用法：",[93,137585,137587],{"className":134417,"code":137586,"language":134419,"meta":98,"style":98},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[83,137588,137589,137594,137600,137613,137617,137622,137628,137638],{"__ignoreMap":98},[102,137590,137591],{"class":104,"line":105},[102,137592,137593],{"class":126},"\u002F* !important 拥有最高优先级 *\u002F\n",[102,137595,137596,137598],{"class":104,"line":116},[102,137597,59476],{"class":59165},[102,137599,1077],{"class":119},[102,137601,137602,137604,137606,137608,137611],{"class":104,"line":123},[102,137603,78770],{"class":187},[102,137605,59302],{"class":119},[102,137607,59510],{"class":187},[102,137609,137610],{"class":108}," !important",[102,137612,266],{"class":119},[102,137614,137615],{"class":104,"line":130},[102,137616,301],{"class":119},[102,137618,137619],{"class":104,"line":136},[102,137620,137621],{"class":126},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[102,137623,137624,137626],{"class":104,"line":142},[102,137625,59476],{"class":59165},[102,137627,1077],{"class":119},[102,137629,137630,137632,137634,137636],{"class":104,"line":148},[102,137631,78770],{"class":187},[102,137633,59302],{"class":119},[102,137635,65286],{"class":187},[102,137637,266],{"class":119},[102,137639,137640],{"class":104,"line":157},[102,137641,301],{"class":119},[14,137643,137644],{},"优先级注意点：",[14,137646,137647],{},"①权重是有4组数字组成,但是不会有进位",[14,137649,137650],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,137652,137653],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,137655,137656],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,137658,137659],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,137661,137662],{},"⑥复合选择器",[9177,137664,137665,137675],{},[9180,137666,137667],{},[9183,137668,137669,137672],{},[9186,137670,137671],{"align":31600},"div ul li",[9186,137673,137674],{"align":31600},"0,0,0,3",[9223,137676,137677,137685,137693],{},[9183,137678,137679,137682],{},[9228,137680,137681],{"align":31600},".nav ul li",[9228,137683,137684],{"align":31600},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[9183,137686,137687,137690],{},[9228,137688,137689],{"align":31600},"a:hover",[9228,137691,137692],{"align":31600},"0,0,1,1",[9183,137694,137695,137698],{},[9228,137696,137697],{"align":31600},".nav a",[9228,137699,137692],{"align":31600},[8955,137701,137702],{},"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":98,"searchDepth":116,"depth":116,"links":137704},[137705,137713,137724],{"id":135813,"depth":116,"text":135814,"children":137706},[137707,137708,137709,137710,137711,137712],{"id":135826,"depth":123,"text":135827},{"id":135898,"depth":123,"text":135899},{"id":135970,"depth":123,"text":135971},{"id":136001,"depth":123,"text":136002},{"id":136008,"depth":123,"text":136009},{"id":136161,"depth":123,"text":136162},{"id":136469,"depth":116,"text":136470,"children":137714},[137715,137716,137717,137718,137719,137720,137721,137722,137723],{"id":136476,"depth":123,"text":136477},{"id":136486,"depth":123,"text":136487},{"id":136582,"depth":123,"text":136583},{"id":136655,"depth":123,"text":136656},{"id":136810,"depth":123,"text":136811},{"id":136898,"depth":123,"text":136899},{"id":136950,"depth":123,"text":136951},{"id":137009,"depth":123,"text":137010},{"id":137114,"depth":123,"text":137115},{"id":137442,"depth":116,"text":137443,"children":137725},[137726,137727,137728],{"id":137446,"depth":123,"text":137447},{"id":137459,"depth":123,"text":137460},{"id":137509,"depth":123,"text":137510},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":135805,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":137735,"title":137736,"body":137737,"description":31240,"extension":8978,"meta":139327,"navigation":651,"path":139328,"seo":139329,"stem":139330,"__hash__":139331},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":137738,"toc":139306},[137739,137742,137746,137749,137752,137755,137758,137761,137764,137767,137771,137779,137816,137852,137855,137869,137874,137908,137911,138004,138009,138012,138042,138045,138050,138058,138062,138069,138115,138159,138164,138167,138170,138173,138176,138179,138182,138184,138187,138191,138196,138240,138245,138248,138251,138288,138293,138296,138299,138302,138305,138337,138340,138343,138346,138378,138381,138384,138387,138391,138394,138426,138429,138433,138453,138456,138464,138467,138471,138476,138479,138511,138516,138519,138557,138561,138566,138569,138572,138603,138606,138623,138628,138680,138740,138745,138799,138837,138841,138845,138848,138852,138860,138863,138865,138876,138881,138929,138963,138966,138969,138972,138975,139019,139022,139025,139028,139031,139034,139037,139081,139084,139087,139090,139093,139096,139099,139105,139108,139152,139155,139158,139161,139164,139167,139211,139214,139216,139219,139223,139227,139265,139269,139272,139275,139279,139287,139291,139294,139297,139300,139303],[10,137740,137736],{"id":137741},"_9-css盒模型浮动与切图",[43,137743,137745],{"id":137744},"_91-盒子模型","9.1 盒子模型",[14,137747,137748],{},"利用盒子来设计网页",[14,137750,137751],{},"盒子包含：边框、外边距、内边距、实际内容",[14,137753,137754],{},"网页布局设置：",[14,137756,137757],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,137759,137760],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,137762,137763],{},"③往盒子里装内容",[6750,137765],{"style":134273,"src":137766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[48,137768,137770],{"id":137769},"_911-边框border","9.1.1 边框（border）",[87,137772,137773,137776],{},[62,137774,137775],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[62,137777,137778],{},"语法",[93,137780,137782],{"className":134417,"code":137781,"language":134419,"meta":98,"style":98},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[83,137783,137784,137789,137795,137812],{"__ignoreMap":98},[102,137785,137786],{"class":104,"line":105},[102,137787,137788],{"class":126},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[102,137790,137791,137793],{"class":104,"line":116},[102,137792,59476],{"class":59165},[102,137794,1077],{"class":119},[102,137796,137797,137799,137801,137803,137805,137807,137810],{"class":104,"line":123},[102,137798,78761],{"class":187},[102,137800,59302],{"class":119},[102,137802,7039],{"class":187},[102,137804,59357],{"class":108},[102,137806,59386],{"class":187},[102,137808,137809],{"class":187}," #ccc",[102,137811,266],{"class":119},[102,137813,137814],{"class":104,"line":130},[102,137815,301],{"class":119},[9177,137817,137818,137826],{},[9180,137819,137820],{},[9183,137821,137822,137824],{},[9186,137823,137019],{"align":31600},[9186,137825,110561],{"align":31600},[9223,137827,137828,137836,137844],{},[9183,137829,137830,137833],{},[9228,137831,137832],{"align":31600},"border-width",[9228,137834,137835],{"align":31600},"定义边框粗细，单位是px",[9183,137837,137838,137841],{},[9228,137839,137840],{"align":31600},"border-style",[9228,137842,137843],{"align":31600},"边框的样式",[9183,137845,137846,137849],{},[9228,137847,137848],{"align":31600},"border-color",[9228,137850,137851],{"align":31600},"边框的颜色",[14,137853,137854],{},"边框样式 border-style 可以设置如下值：",[59,137856,137857,137860,137863,137866],{},[62,137858,137859],{},"none：没有边框即忽略所有边框的宽度（默认值）",[62,137861,137862],{},"solid：边框为单实线(最为常用的)",[62,137864,137865],{},"dashed：边框为虚线",[62,137867,137868],{},"dotted：边框为点线",[87,137870,137871],{"start":123},[62,137872,137873],{},"边框的合写分写",[93,137875,137876],{"className":134417,"code":137781,"language":134419,"meta":98,"style":98},[83,137877,137878,137882,137888,137904],{"__ignoreMap":98},[102,137879,137880],{"class":104,"line":105},[102,137881,137788],{"class":126},[102,137883,137884,137886],{"class":104,"line":116},[102,137885,59476],{"class":59165},[102,137887,1077],{"class":119},[102,137889,137890,137892,137894,137896,137898,137900,137902],{"class":104,"line":123},[102,137891,78761],{"class":187},[102,137893,59302],{"class":119},[102,137895,7039],{"class":187},[102,137897,59357],{"class":108},[102,137899,59386],{"class":187},[102,137901,137809],{"class":187},[102,137903,266],{"class":119},[102,137905,137906],{"class":104,"line":130},[102,137907,301],{"class":119},[14,137909,137910],{},"边框分开写法：",[93,137912,137914],{"className":134417,"code":137913,"language":134419,"meta":98,"style":98},"\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",[83,137915,137916,137921,137927,137945,137963,137982,138000],{"__ignoreMap":98},[102,137917,137918],{"class":104,"line":105},[102,137919,137920],{"class":126},"\u002F* 边框分开写法 *\u002F\n",[102,137922,137923,137925],{"class":104,"line":116},[102,137924,59476],{"class":59165},[102,137926,1077],{"class":119},[102,137928,137929,137932,137934,137936,137938,137940,137943],{"class":104,"line":123},[102,137930,137931],{"class":187},"  border-top",[102,137933,59302],{"class":119},[102,137935,7039],{"class":187},[102,137937,59357],{"class":108},[102,137939,59386],{"class":187},[102,137941,137942],{"class":187}," #000",[102,137944,266],{"class":119},[102,137946,137947,137950,137952,137954,137956,137958,137961],{"class":104,"line":130},[102,137948,137949],{"class":187},"  border-right",[102,137951,59302],{"class":119},[102,137953,7044],{"class":187},[102,137955,59357],{"class":108},[102,137957,70106],{"class":187},[102,137959,137960],{"class":187}," #333",[102,137962,266],{"class":119},[102,137964,137965,137968,137970,137972,137974,137977,137980],{"class":104,"line":136},[102,137966,137967],{"class":187},"  border-bottom",[102,137969,59302],{"class":119},[102,137971,7049],{"class":187},[102,137973,59357],{"class":108},[102,137975,137976],{"class":187}," dotted",[102,137978,137979],{"class":187}," #666",[102,137981,266],{"class":119},[102,137983,137984,137987,137989,137991,137993,137995,137998],{"class":104,"line":142},[102,137985,137986],{"class":187},"  border-left",[102,137988,59302],{"class":119},[102,137990,7039],{"class":187},[102,137992,59357],{"class":108},[102,137994,59386],{"class":187},[102,137996,137997],{"class":187}," #999",[102,137999,266],{"class":119},[102,138001,138002],{"class":104,"line":148},[102,138003,301],{"class":119},[87,138005,138006],{"start":130},[62,138007,138008],{},"表格的细线边框",[14,138010,138011],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[93,138013,138015],{"className":134417,"code":138014,"language":134419,"meta":98,"style":98},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[83,138016,138017,138022,138028,138038],{"__ignoreMap":98},[102,138018,138019],{"class":104,"line":105},[102,138020,138021],{"class":126},"\u002F* 表格细线边框合并 *\u002F\n",[102,138023,138024,138026],{"class":104,"line":116},[102,138025,9177],{"class":59165},[102,138027,1077],{"class":119},[102,138029,138030,138032,138034,138036],{"class":104,"line":123},[102,138031,78443],{"class":187},[102,138033,59302],{"class":119},[102,138035,72900],{"class":187},[102,138037,266],{"class":119},[102,138039,138040],{"class":104,"line":130},[102,138041,301],{"class":119},[14,138043,138044],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[87,138046,138047],{"start":136},[62,138048,138049],{},"解决边框额外增加盒子的实际大小的方法：",[59,138051,138052,138055],{},[62,138053,138054],{},"测量盒子大小的时候,不量边框",[62,138056,138057],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[48,138059,138061],{"id":138060},"_912-内边距","9.1.2 内边距",[87,138063,138064,138067],{},[62,138065,138066],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[62,138068,137778],{},[9177,138070,138071,138081],{},[9180,138072,138073],{},[9183,138074,138075,138078],{},[9186,138076,138077],{"align":31600},"值的个数",[9186,138079,138080],{"align":31600},"表达意思",[9223,138082,138083,138091,138099,138107],{},[9183,138084,138085,138088],{},[9228,138086,138087],{"align":31600},"padding: 5px;",[9228,138089,138090],{"align":31600},"1个值，代表上下左右都有5个元素",[9183,138092,138093,138096],{},[9228,138094,138095],{"align":31600},"padding: 5px 10px;",[9228,138097,138098],{"align":31600},"2个值，代表上下内边距为5像素，左右内边距为10像素",[9183,138100,138101,138104],{},[9228,138102,138103],{"align":31600},"padding: 5px 10px 20px;",[9228,138105,138106],{"align":31600},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[9183,138108,138109,138112],{},[9228,138110,138111],{"align":31600},"padding: 5px 10px 20px 30px;",[9228,138113,138114],{"align":31600},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[9177,138116,138117,138125],{},[9180,138118,138119],{},[9183,138120,138121,138123],{},[9186,138122,137019],{"align":31600},[9186,138124,110561],{"align":31600},[9223,138126,138127,138135,138143,138151],{},[9183,138128,138129,138132],{},[9228,138130,138131],{"align":31600},"padding-left",[9228,138133,138134],{"align":31600},"左内边距",[9183,138136,138137,138140],{},[9228,138138,138139],{"align":31600},"padding-right",[9228,138141,138142],{"align":31600},"右内边距",[9183,138144,138145,138148],{},[9228,138146,138147],{"align":31600},"padding-top",[9228,138149,138150],{"align":31600},"上内边距",[9183,138152,138153,138156],{},[9228,138154,138155],{"align":31600},"padding-bottom",[9228,138157,138158],{"align":31600},"下内边距",[87,138160,138161],{"start":123},[62,138162,138163],{},"内边距会影响盒子的实际大小",[14,138165,138166],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,138168,138169],{},"①内容和边框有了距离，添加了内边距",[14,138171,138172],{},"②padding影响了盒子实际大小",[14,138174,138175],{},"内边距对盒子大小的影响：",[14,138177,138178],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,138180,138181],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,138183,103085],{},[14,138185,138186],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[48,138188,138190],{"id":138189},"_913-外边距","9.1.3 外边距",[87,138192,138193],{},[62,138194,138195],{},"控制盒子与盒子之间的距离",[9177,138197,138198,138206],{},[9180,138199,138200],{},[9183,138201,138202,138204],{},[9186,138203,137019],{"align":31600},[9186,138205,110561],{"align":31600},[9223,138207,138208,138216,138224,138232],{},[9183,138209,138210,138213],{},[9228,138211,138212],{"align":31600},"margin-left",[9228,138214,138215],{"align":31600},"左外边距",[9183,138217,138218,138221],{},[9228,138219,138220],{"align":31600},"margin-right",[9228,138222,138223],{"align":31600},"右外边距",[9183,138225,138226,138229],{},[9228,138227,138228],{"align":31600},"margin-top",[9228,138230,138231],{"align":31600},"上外边距",[9183,138233,138234,138237],{},[9228,138235,138236],{"align":31600},"margin-bottom",[9228,138238,138239],{"align":31600},"下外边距",[87,138241,138242],{"start":116},[62,138243,138244],{},"外边距可以让块级盒子水平居中的两个条件：",[14,138246,138247],{},"①盒子必须指定了宽度（width）",[14,138249,138250],{},"②盒子左右的外边距都设置为 auto",[93,138252,138254],{"className":134417,"code":138253,"language":134419,"meta":98,"style":98},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[83,138255,138256,138261,138268,138284],{"__ignoreMap":98},[102,138257,138258],{"class":104,"line":105},[102,138259,138260],{"class":126},"\u002F* margin 复合写法（同上） *\u002F\n",[102,138262,138263,138266],{"class":104,"line":116},[102,138264,138265],{"class":112},".box",[102,138267,1077],{"class":119},[102,138269,138270,138272,138274,138276,138278,138281],{"class":104,"line":123},[102,138271,78335],{"class":187},[102,138273,59302],{"class":119},[102,138275,8423],{"class":187},[102,138277,59421],{"class":187},[102,138279,138280],{"class":119},";  ",[102,138282,138283],{"class":126},"\u002F* 块级盒子水平居中 *\u002F\n",[102,138285,138286],{"class":104,"line":130},[102,138287,301],{"class":119},[87,138289,138290],{"start":123},[62,138291,138292],{},"外边距塌陷问题",[14,138294,138295],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[6750,138297],{"style":134273,"src":138298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,138300,138301],{},"解决方案：",[14,138303,138304],{},"①可以为父亲元素定义上边距",[93,138306,138307],{"className":134417,"code":138253,"language":134419,"meta":98,"style":98},[83,138308,138309,138313,138319,138333],{"__ignoreMap":98},[102,138310,138311],{"class":104,"line":105},[102,138312,138260],{"class":126},[102,138314,138315,138317],{"class":104,"line":116},[102,138316,138265],{"class":112},[102,138318,1077],{"class":119},[102,138320,138321,138323,138325,138327,138329,138331],{"class":104,"line":123},[102,138322,78335],{"class":187},[102,138324,59302],{"class":119},[102,138326,8423],{"class":187},[102,138328,59421],{"class":187},[102,138330,138280],{"class":119},[102,138332,138283],{"class":126},[102,138334,138335],{"class":104,"line":130},[102,138336,301],{"class":119},[14,138338,138339],{},"②可以为父亲元素定义上内边距",[14,138341,138342],{},"③可以为父亲元素添加overflow:hidden",[6750,138344],{"style":134273,"src":138345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[93,138347,138348],{"className":134417,"code":138253,"language":134419,"meta":98,"style":98},[83,138349,138350,138354,138360,138374],{"__ignoreMap":98},[102,138351,138352],{"class":104,"line":105},[102,138353,138260],{"class":126},[102,138355,138356,138358],{"class":104,"line":116},[102,138357,138265],{"class":112},[102,138359,1077],{"class":119},[102,138361,138362,138364,138366,138368,138370,138372],{"class":104,"line":123},[102,138363,78335],{"class":187},[102,138365,59302],{"class":119},[102,138367,8423],{"class":187},[102,138369,59421],{"class":187},[102,138371,138280],{"class":119},[102,138373,138283],{"class":126},[102,138375,138376],{"class":104,"line":130},[102,138377,301],{"class":119},[6750,138379],{"style":134273,"src":138380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,138382,138383],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,138385,138386],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[48,138388,138390],{"id":138389},"_914-清除内外边距","9.1.4 清除内外边距",[14,138392,138393],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[93,138395,138396],{"className":134417,"code":138253,"language":134419,"meta":98,"style":98},[83,138397,138398,138402,138408,138422],{"__ignoreMap":98},[102,138399,138400],{"class":104,"line":105},[102,138401,138260],{"class":126},[102,138403,138404,138406],{"class":104,"line":116},[102,138405,138265],{"class":112},[102,138407,1077],{"class":119},[102,138409,138410,138412,138414,138416,138418,138420],{"class":104,"line":123},[102,138411,78335],{"class":187},[102,138413,59302],{"class":119},[102,138415,8423],{"class":187},[102,138417,59421],{"class":187},[102,138419,138280],{"class":119},[102,138421,138283],{"class":126},[102,138423,138424],{"class":104,"line":130},[102,138425,301],{"class":119},[14,138427,138428],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[48,138430,138432],{"id":138431},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[59,138434,138435,138438,138441,138444,138447,138450],{},[62,138436,138437],{},"文件→打开 ：可以打开我们要测量的图片",[62,138439,138440],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[62,138442,138443],{},"右击标尺，把里面的单位改为像素",[62,138445,138446],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[62,138448,138449],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[62,138451,138452],{},"用选区拖动 可以测量大小",[6750,138454],{"style":134273,"src":138455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[59,138457,138458,138461],{},[62,138459,138460],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[62,138462,138463],{},"吸管取色工具",[6750,138465],{"style":134273,"src":138466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[48,138468,138470],{"id":138469},"_916-案例","9.1.6 案例",[87,138472,138473],{},[62,138474,138475],{},"小米商品",[6750,138477],{"style":134273,"src":138478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[93,138480,138481],{"className":134417,"code":138253,"language":134419,"meta":98,"style":98},[83,138482,138483,138487,138493,138507],{"__ignoreMap":98},[102,138484,138485],{"class":104,"line":105},[102,138486,138260],{"class":126},[102,138488,138489,138491],{"class":104,"line":116},[102,138490,138265],{"class":112},[102,138492,1077],{"class":119},[102,138494,138495,138497,138499,138501,138503,138505],{"class":104,"line":123},[102,138496,78335],{"class":187},[102,138498,59302],{"class":119},[102,138500,8423],{"class":187},[102,138502,59421],{"class":187},[102,138504,138280],{"class":119},[102,138506,138283],{"class":126},[102,138508,138509],{"class":104,"line":130},[102,138510,301],{"class":119},[87,138512,138513],{"start":116},[62,138514,138515],{},"快报模块",[6750,138517],{"style":134273,"src":138518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[93,138520,138522],{"className":135164,"code":138521,"language":135166,"meta":98,"style":98},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[83,138523,138524,138529,138544,138549],{"__ignoreMap":98},[102,138525,138526],{"class":104,"line":105},[102,138527,138528],{"class":126},"\u003C!-- HTML 代码示例 -->\n",[102,138530,138531,138533,138535,138537,138539,138542],{"class":104,"line":116},[102,138532,1208],{"class":119},[102,138534,59476],{"class":59165},[102,138536,61351],{"class":112},[102,138538,260],{"class":119},[102,138540,138541],{"class":278},"\"example\"",[102,138543,59172],{"class":119},[102,138545,138546],{"class":104,"line":123},[102,138547,138548],{"class":119},"  示例内容\n",[102,138550,138551,138553,138555],{"class":104,"line":130},[102,138552,59650],{"class":119},[102,138554,59476],{"class":59165},[102,138556,59172],{"class":119},[48,138558,138560],{"id":138559},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[87,138562,138563],{},[62,138564,138565],{},"圆角边框",[14,138567,138568],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[6750,138570],{"style":134273,"src":138571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[93,138573,138575],{"className":134417,"code":138574,"language":134419,"meta":98,"style":98},"div {\n  border: 1px solid #ccc;\n}\n",[83,138576,138577,138583,138599],{"__ignoreMap":98},[102,138578,138579,138581],{"class":104,"line":105},[102,138580,59476],{"class":59165},[102,138582,1077],{"class":119},[102,138584,138585,138587,138589,138591,138593,138595,138597],{"class":104,"line":116},[102,138586,78761],{"class":187},[102,138588,59302],{"class":119},[102,138590,7039],{"class":187},[102,138592,59357],{"class":108},[102,138594,59386],{"class":187},[102,138596,137809],{"class":187},[102,138598,266],{"class":119},[102,138600,138601],{"class":104,"line":123},[102,138602,301],{"class":119},[14,138604,138605],{},"解释:",[59,138607,138608,138611,138614,138617,138620],{},[62,138609,138610],{},"参数值可以为数值或百分比的形式",[62,138612,138613],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[62,138615,138616],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[62,138618,138619],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[62,138621,138622],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[87,138624,138625],{"start":116},[62,138626,138627],{},"盒子阴影",[93,138629,138631],{"className":134417,"code":138630,"language":134419,"meta":98,"style":98},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[83,138632,138633,138639,138676],{"__ignoreMap":98},[102,138634,138635,138637],{"class":104,"line":105},[102,138636,59476],{"class":59165},[102,138638,1077],{"class":119},[102,138640,138641,138644,138646,138648,138650,138652,138654,138656,138658,138660,138662,138664,138666,138668,138670,138672,138674],{"class":104,"line":116},[102,138642,138643],{"class":187},"  box-shadow",[102,138645,59302],{"class":119},[102,138647,8423],{"class":187},[102,138649,188],{"class":187},[102,138651,59357],{"class":108},[102,138653,989],{"class":187},[102,138655,59357],{"class":108},[102,138657,86632],{"class":187},[102,138659,380],{"class":119},[102,138661,8423],{"class":187},[102,138663,2571],{"class":119},[102,138665,8423],{"class":187},[102,138667,2571],{"class":119},[102,138669,8423],{"class":187},[102,138671,2571],{"class":119},[102,138673,94075],{"class":187},[102,138675,552],{"class":119},[102,138677,138678],{"class":104,"line":123},[102,138679,301],{"class":119},[9177,138681,138682,138690],{},[9180,138683,138684],{},[9183,138685,138686,138688],{},[9186,138687,9191],{"align":31600},[9186,138689,35354],{"align":31600},[9223,138691,138692,138700,138708,138716,138724,138732],{},[9183,138693,138694,138697],{},[9228,138695,138696],{"align":31600},"h-shadow",[9228,138698,138699],{"align":31600},"必需,水平阴影的位置,允许负值",[9183,138701,138702,138705],{},[9228,138703,138704],{"align":31600},"v-shadow",[9228,138706,138707],{"align":31600},"必需,垂直阴影的位置,允许负值",[9183,138709,138710,138713],{},[9228,138711,138712],{"align":31600},"blur",[9228,138714,138715],{"align":31600},"可选,模糊距离,就是影子的虚实",[9183,138717,138718,138721],{},[9228,138719,138720],{"align":31600},"spread",[9228,138722,138723],{"align":31600},"可选,阴影尺寸",[9183,138725,138726,138729],{},[9228,138727,138728],{"align":31600},"color",[9228,138730,138731],{"align":31600},"可选,阴影的颜色",[9183,138733,138734,138737],{},[9228,138735,138736],{"align":31600},"inset",[9228,138738,138739],{"align":31600},"可选,将外部阴影(outset)改为内部阴影",[87,138741,138742],{"start":123},[62,138743,138744],{},"文字阴影",[93,138746,138748],{"className":134417,"code":138747,"language":134419,"meta":98,"style":98},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[83,138749,138750,138756,138795],{"__ignoreMap":98},[102,138751,138752,138754],{"class":104,"line":105},[102,138753,14],{"class":59165},[102,138755,1077],{"class":119},[102,138757,138758,138761,138763,138765,138767,138769,138771,138773,138775,138777,138779,138781,138783,138785,138787,138789,138791,138793],{"class":104,"line":116},[102,138759,138760],{"class":187},"  text-shadow",[102,138762,59302],{"class":119},[102,138764,7039],{"class":187},[102,138766,59357],{"class":108},[102,138768,32983],{"class":187},[102,138770,59357],{"class":108},[102,138772,188],{"class":187},[102,138774,59357],{"class":108},[102,138776,86632],{"class":187},[102,138778,380],{"class":119},[102,138780,8423],{"class":187},[102,138782,2571],{"class":119},[102,138784,8423],{"class":187},[102,138786,2571],{"class":119},[102,138788,8423],{"class":187},[102,138790,2571],{"class":119},[102,138792,108386],{"class":187},[102,138794,552],{"class":119},[102,138796,138797],{"class":104,"line":123},[102,138798,301],{"class":119},[9177,138800,138801,138809],{},[9180,138802,138803],{},[9183,138804,138805,138807],{},[9186,138806,9191],{"align":31600},[9186,138808,35354],{"align":31600},[9223,138810,138811,138817,138824,138831],{},[9183,138812,138813,138815],{},[9228,138814,138696],{"align":31600},[9228,138816,138699],{"align":31600},[9183,138818,138819,138821],{},[9228,138820,138704],{"align":31600},[9228,138822,138823],{"align":31600},"必需,垂直阴影位置,允许负值",[9183,138825,138826,138828],{},[9228,138827,138712],{"align":31600},[9228,138829,138830],{"align":31600},"可选,模糊的距离",[9183,138832,138833,138835],{},[9228,138834,138728],{"align":31600},[9228,138836,138731],{"align":31600},[43,138838,138840],{"id":138839},"_92-浮动","9.2 浮动",[48,138842,138844],{"id":138843},"_921-浮动介绍","9.2.1 浮动介绍",[14,138846,138847],{},"在16.2中详细介绍",[48,138849,138851],{"id":138850},"_922-清除浮动","9.2.2 清除浮动",[87,138853,138854,138857],{},[62,138855,138856],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[62,138858,138859],{},"清除浮动的本质",[14,138861,138862],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,138864,7501],{},[59,138866,138867,138870,138873],{},[62,138868,138869],{},"如果父盒子本身有高度，则不需要清除浮动",[62,138871,138872],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[62,138874,138875],{},"父级有了高度，就不会影响下面的标准流了",[87,138877,138878],{"start":123},[62,138879,138880],{},"清除浮动样式",[93,138882,138884],{"className":134417,"code":138883,"language":134419,"meta":98,"style":98},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[83,138885,138886,138893,138904,138908,138915,138925],{"__ignoreMap":98},[102,138887,138888,138891],{"class":104,"line":105},[102,138889,138890],{"class":112},".left",[102,138892,1077],{"class":119},[102,138894,138895,138898,138900,138902],{"class":104,"line":116},[102,138896,138897],{"class":187},"  float",[102,138899,59302],{"class":119},[102,138901,31600],{"class":187},[102,138903,266],{"class":119},[102,138905,138906],{"class":104,"line":123},[102,138907,301],{"class":119},[102,138909,138910,138913],{"class":104,"line":130},[102,138911,138912],{"class":112},".right",[102,138914,1077],{"class":119},[102,138916,138917,138919,138921,138923],{"class":104,"line":136},[102,138918,138897],{"class":187},[102,138920,59302],{"class":119},[102,138922,80387],{"class":187},[102,138924,266],{"class":119},[102,138926,138927],{"class":104,"line":142},[102,138928,301],{"class":119},[9177,138930,138931,138939],{},[9180,138932,138933],{},[9183,138934,138935,138937],{},[9186,138936,134881],{"align":31600},[9186,138938,35354],{"align":31600},[9223,138940,138941,138948,138955],{},[9183,138942,138943,138945],{},[9228,138944,31600],{"align":31600},[9228,138946,138947],{"align":31600},"不允许左侧有浮动元素（清除左侧浮动的影响）",[9183,138949,138950,138952],{},[9228,138951,80387],{"align":31600},[9228,138953,138954],{"align":31600},"不允许右侧有浮动元素（清除右侧浮动的影响）",[9183,138956,138957,138960],{},[9228,138958,138959],{"align":31600},"both",[9228,138961,138962],{"align":31600},"同时清除左右侧浮动的影响",[14,138964,138965],{},"法一",[14,138967,138968],{},"额外标签法也称为隔墙法",[14,138970,138971],{},"使用方式：",[14,138973,138974],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[93,138976,138977],{"className":134417,"code":138883,"language":134419,"meta":98,"style":98},[83,138978,138979,138985,138995,138999,139005,139015],{"__ignoreMap":98},[102,138980,138981,138983],{"class":104,"line":105},[102,138982,138890],{"class":112},[102,138984,1077],{"class":119},[102,138986,138987,138989,138991,138993],{"class":104,"line":116},[102,138988,138897],{"class":187},[102,138990,59302],{"class":119},[102,138992,31600],{"class":187},[102,138994,266],{"class":119},[102,138996,138997],{"class":104,"line":123},[102,138998,301],{"class":119},[102,139000,139001,139003],{"class":104,"line":130},[102,139002,138912],{"class":112},[102,139004,1077],{"class":119},[102,139006,139007,139009,139011,139013],{"class":104,"line":136},[102,139008,138897],{"class":187},[102,139010,59302],{"class":119},[102,139012,80387],{"class":187},[102,139014,266],{"class":119},[102,139016,139017],{"class":104,"line":142},[102,139018,301],{"class":119},[14,139020,139021],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,139023,139024],{},"优点： 通俗易懂，书写方便",[14,139026,139027],{},"缺点： 添加许多无意义的标签，结构化较差",[14,139029,139030],{},"注意： 要求这个新的空标签必须是块级元素。",[14,139032,139033],{},"法二",[14,139035,139036],{},"父级添加overflow属性",[93,139038,139039],{"className":134417,"code":138883,"language":134419,"meta":98,"style":98},[83,139040,139041,139047,139057,139061,139067,139077],{"__ignoreMap":98},[102,139042,139043,139045],{"class":104,"line":105},[102,139044,138890],{"class":112},[102,139046,1077],{"class":119},[102,139048,139049,139051,139053,139055],{"class":104,"line":116},[102,139050,138897],{"class":187},[102,139052,59302],{"class":119},[102,139054,31600],{"class":187},[102,139056,266],{"class":119},[102,139058,139059],{"class":104,"line":123},[102,139060,301],{"class":119},[102,139062,139063,139065],{"class":104,"line":130},[102,139064,138912],{"class":112},[102,139066,1077],{"class":119},[102,139068,139069,139071,139073,139075],{"class":104,"line":136},[102,139070,138897],{"class":187},[102,139072,59302],{"class":119},[102,139074,80387],{"class":187},[102,139076,266],{"class":119},[102,139078,139079],{"class":104,"line":142},[102,139080,301],{"class":119},[14,139082,139083],{},"overflow: hidden;",[14,139085,139086],{},"优点：代码简洁",[14,139088,139089],{},"缺点：无法显示溢出的部分",[14,139091,139092],{},"注意：是给父元素添加代码",[14,139094,139095],{},"法三",[14,139097,139098],{},"父级添加after伪元素",[14,139100,139101,139104],{},[139102,139103],"after",{}," 方式是额外标签法的升级版",[14,139106,139107],{},"使用的时候复制就可以",[93,139109,139110],{"className":134417,"code":138883,"language":134419,"meta":98,"style":98},[83,139111,139112,139118,139128,139132,139138,139148],{"__ignoreMap":98},[102,139113,139114,139116],{"class":104,"line":105},[102,139115,138890],{"class":112},[102,139117,1077],{"class":119},[102,139119,139120,139122,139124,139126],{"class":104,"line":116},[102,139121,138897],{"class":187},[102,139123,59302],{"class":119},[102,139125,31600],{"class":187},[102,139127,266],{"class":119},[102,139129,139130],{"class":104,"line":123},[102,139131,301],{"class":119},[102,139133,139134,139136],{"class":104,"line":130},[102,139135,138912],{"class":112},[102,139137,1077],{"class":119},[102,139139,139140,139142,139144,139146],{"class":104,"line":136},[102,139141,138897],{"class":187},[102,139143,59302],{"class":119},[102,139145,80387],{"class":187},[102,139147,266],{"class":119},[102,139149,139150],{"class":104,"line":142},[102,139151,301],{"class":119},[14,139153,139154],{},"优点：没有增加标签，结构更简单",[14,139156,139157],{},"缺点：照顾低版本浏览器",[14,139159,139160],{},"代表网站： 百度、淘宝网、网易等",[14,139162,139163],{},"法四",[14,139165,139166],{},"父级添加双伪元素",[93,139168,139169],{"className":134417,"code":138883,"language":134419,"meta":98,"style":98},[83,139170,139171,139177,139187,139191,139197,139207],{"__ignoreMap":98},[102,139172,139173,139175],{"class":104,"line":105},[102,139174,138890],{"class":112},[102,139176,1077],{"class":119},[102,139178,139179,139181,139183,139185],{"class":104,"line":116},[102,139180,138897],{"class":187},[102,139182,59302],{"class":119},[102,139184,31600],{"class":187},[102,139186,266],{"class":119},[102,139188,139189],{"class":104,"line":123},[102,139190,301],{"class":119},[102,139192,139193,139195],{"class":104,"line":130},[102,139194,138912],{"class":112},[102,139196,1077],{"class":119},[102,139198,139199,139201,139203,139205],{"class":104,"line":136},[102,139200,138897],{"class":187},[102,139202,59302],{"class":119},[102,139204,80387],{"class":187},[102,139206,266],{"class":119},[102,139208,139209],{"class":104,"line":142},[102,139210,301],{"class":119},[14,139212,139213],{},"优点：代码更简洁",[14,139215,139157],{},[14,139217,139218],{},"代表网站：小米、腾讯等",[43,139220,139222],{"id":139221},"_93-ps切图","9.3 PS切图",[48,139224,139226],{"id":139225},"_931-常见图片格式","9.3.1 常见图片格式",[9177,139228,139229,139239],{},[9180,139230,139231],{},[9183,139232,139233,139236],{},[9186,139234,139235],{"align":31600},"jpg图像格式",[9186,139237,139238],{"align":31600},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[9223,139240,139241,139249,139257],{},[9183,139242,139243,139246],{},[9228,139244,139245],{"align":31600},"gif图像格式",[9228,139247,139248],{"align":31600},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[9183,139250,139251,139254],{},[9228,139252,139253],{"align":31600},"png图像格式",[9228,139255,139256],{"align":31600},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[9183,139258,139259,139262],{},[9228,139260,139261],{"align":31600},"PSD图像格式",[9228,139263,139264],{"align":31600},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[48,139266,139268],{"id":139267},"_932-图层切图","9.3.2 图层切图",[14,139270,139271],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,139273,139274],{},"按住shift选中两个图层->图层菜单->合并图层",[48,139276,139278],{"id":139277},"_933-切片切图","9.3.3 切片切图",[59,139280,139281,139284],{},[62,139282,139283],{},"利用切片工具手动划出",[62,139285,139286],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[48,139288,139290],{"id":139289},"_934-切图步骤","9.3.4 切图步骤",[14,139292,139293],{},"用切片工具选中：",[6750,139295],{"style":134273,"src":139296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,139298,139299],{},"文件 -> 导出",[6750,139301],{"style":134273,"src":139302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[8955,139304,139305],{},"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":98,"searchDepth":116,"depth":116,"links":139307},[139308,139317,139321],{"id":137744,"depth":116,"text":137745,"children":139309},[139310,139311,139312,139313,139314,139315,139316],{"id":137769,"depth":123,"text":137770},{"id":138060,"depth":123,"text":138061},{"id":138189,"depth":123,"text":138190},{"id":138389,"depth":123,"text":138390},{"id":138431,"depth":123,"text":138432},{"id":138469,"depth":123,"text":138470},{"id":138559,"depth":123,"text":138560},{"id":138839,"depth":116,"text":138840,"children":139318},[139319,139320],{"id":138843,"depth":123,"text":138844},{"id":138850,"depth":123,"text":138851},{"id":139221,"depth":116,"text":139222,"children":139322},[139323,139324,139325,139326],{"id":139225,"depth":123,"text":139226},{"id":139267,"depth":123,"text":139268},{"id":139277,"depth":123,"text":139278},{"id":139289,"depth":123,"text":139290},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":137736,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":139333,"title":139334,"body":139335,"description":31240,"extension":8978,"meta":139976,"navigation":651,"path":139977,"seo":139978,"stem":139979,"__hash__":139980},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":139336,"toc":139964},[139337,139340,139344,139370,139404,139408,139412,139415,139457,139464,139474,139482,139484,139487,139490,139493,139500,139514,139518,139521,139550,139554,139557,139571,139575,139578,139606,139610,139613,139639,139643,139648,139681,139686,139714,139718,139735,139781,139786,139830,139847,139954,139962],[10,139338,139334],{"id":139339},"_10-css规范与学成在线案例",[43,139341,139343],{"id":139342},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[87,139345,139346,139352,139358,139364],{},[62,139347,139348,139351],{},[18,139349,139350],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[62,139353,139354,139357],{},[18,139355,139356],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[62,139359,139360,139363],{},[18,139361,139362],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[62,139365,139366,139369],{},[18,139367,139368],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[93,139371,139372],{"className":134417,"code":137781,"language":134419,"meta":98,"style":98},[83,139373,139374,139378,139384,139400],{"__ignoreMap":98},[102,139375,139376],{"class":104,"line":105},[102,139377,137788],{"class":126},[102,139379,139380,139382],{"class":104,"line":116},[102,139381,59476],{"class":59165},[102,139383,1077],{"class":119},[102,139385,139386,139388,139390,139392,139394,139396,139398],{"class":104,"line":123},[102,139387,78761],{"class":187},[102,139389,59302],{"class":119},[102,139391,7039],{"class":187},[102,139393,59357],{"class":108},[102,139395,59386],{"class":187},[102,139397,137809],{"class":187},[102,139399,266],{"class":119},[102,139401,139402],{"class":104,"line":130},[102,139403,301],{"class":119},[43,139405,139407],{"id":139406},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[48,139409,139411],{"id":139410},"_1021-header头部制作","10.2.1 header头部制作",[6750,139413],{"style":134273,"src":139414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[59,139416,139417,139424,139431,139437,139444,139451],{},[62,139418,139419,139420,139423],{},"1号是版心盒子 ",[18,139421,139422],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[62,139425,139426,139427,139430],{},"版心盒子 里面包含 2号盒子 ",[18,139428,139429],{},"logo"," 图标",[62,139432,139433,139434,139436],{},"版心盒子 里面包含 3号盒子 ",[18,139435,61578],{}," 导航栏",[62,139438,139439,139440,139443],{},"版心盒子 里面包含 4号盒子 ",[18,139441,139442],{},"search"," 搜索框",[62,139445,139446,139447,139450],{},"版心盒子 里面包含 5号盒子 ",[18,139448,139449],{},"user"," 个人信息",[62,139452,139453,139454],{},"注意，要求里面的 ",[18,139455,139456],{},"4个子盒子 必须都浮动",[87,139458,139459],{},[62,139460,139461],{},[18,139462,139463],{},"导航栏注意点:",[14,139465,139466,139467,139470,139471],{},"实际开发中， ",[18,139468,139469],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[18,139472,139473],{},"用 li 包含链接(li+a)的做法",[59,139475,139476,139479],{},[62,139477,139478],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[62,139480,139481],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,139483,7501],{},[14,139485,139486],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,139488,139489],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,139491,139492],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[87,139494,139495],{"start":116},[62,139496,139497],{},[18,139498,139499],{},"4号盒子search的细节：",[59,139501,139502,139505,139508],{},[62,139503,139504],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[62,139506,139507],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[62,139509,139510,139513],{},[83,139511,139512],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[48,139515,139517],{"id":139516},"_1022-banner制作","10.2.2 banner制作",[6750,139519],{"style":134273,"src":139520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[59,139522,139523,139530,139536,139543],{},[62,139524,139525,139526,139529],{},"1号盒子是通栏的大盒子 ",[18,139527,139528],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[62,139531,139532,139533,139535],{},"2号盒子是版心 ",[18,139534,2142],{}," ， 要水平居中对齐",[62,139537,139538,139539,139542],{},"3号盒子版心内，左对齐 ",[18,139540,139541],{},"subnav"," 侧导航栏",[62,139544,139545,139546,139549],{},"4号盒子版心内，右对齐 ",[18,139547,139548],{},"course"," 课程",[48,139551,139553],{"id":139552},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[6750,139555],{"style":134273,"src":139556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[59,139558,139559,139562,139565,139568],{},[62,139560,139561],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[62,139563,139564],{},"1号盒子是标题 H3 左侧浮动",[62,139566,139567],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[62,139569,139570],{},"3号盒子 右浮动 mod 修改",[48,139572,139574],{"id":139573},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[6750,139576],{"style":134273,"src":139577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[59,139579,139580,139586,139593,139600,139603],{},[62,139581,139582,139583,139585],{},"1号盒子为最大的盒子 ",[18,139584,61579],{}," 版心水平居中对齐",[62,139587,139588,139589,139592],{},"2号盒子为上面部分 ",[18,139590,139591],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[62,139594,139595,139596,139599],{},"3号盒子为底下部分 ",[18,139597,139598],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[62,139601,139602],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[62,139604,139605],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[48,139607,139609],{"id":139608},"_1025-底部模块制作","10.2.5 底部模块制作",[6750,139611],{"style":134273,"src":139612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[59,139614,139615,139622,139625,139632],{},[62,139616,139617,139618,139621],{},"1号盒子通栏大盒子 底部 ",[18,139619,139620],{},"footer"," 给高度 底色是白色",[62,139623,139624],{},"2号盒子版心水平居中",[62,139626,139627,139628,139631],{},"3号盒子版权 ",[18,139629,139630],{},"copyright"," 左对齐",[62,139633,139634,139635,139638],{},"4号盒子 链接组 ",[18,139636,139637],{},"links"," 右对齐",[48,139640,139642],{"id":139641},"_1026-代码模块","10.2.6 代码模块",[87,139644,139645],{},[62,139646,139647],{},"html部分",[93,139649,139651],{"className":135164,"code":139650,"language":135166,"meta":98,"style":98},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[83,139652,139653],{"__ignoreMap":98},[102,139654,139655,139657,139659,139661,139663,139666,139669,139671,139674,139677,139679],{"class":104,"line":105},[102,139656,1208],{"class":119},[102,139658,9275],{"class":59165},[102,139660,68922],{"class":112},[102,139662,260],{"class":119},[102,139664,139665],{"class":278},"\"https:\u002F\u002Fexample.com\"",[102,139667,139668],{"class":112}," target",[102,139670,260],{"class":119},[102,139672,139673],{"class":278},"\"_blank\"",[102,139675,139676],{"class":119},">链接文字\u003C\u002F",[102,139678,9275],{"class":59165},[102,139680,59172],{"class":119},[87,139682,139683],{"start":116},[62,139684,139685],{},"css部分",[93,139687,139688],{"className":135164,"code":139650,"language":135166,"meta":98,"style":98},[83,139689,139690],{"__ignoreMap":98},[102,139691,139692,139694,139696,139698,139700,139702,139704,139706,139708,139710,139712],{"class":104,"line":105},[102,139693,1208],{"class":119},[102,139695,9275],{"class":59165},[102,139697,68922],{"class":112},[102,139699,260],{"class":119},[102,139701,139665],{"class":278},[102,139703,139668],{"class":112},[102,139705,260],{"class":119},[102,139707,139673],{"class":278},[102,139709,139676],{"class":119},[102,139711,9275],{"class":59165},[102,139713,59172],{"class":119},[48,139715,139717],{"id":139716},"_1027-收获","10.2.7 收获",[87,139719,139720,139723,139726,139729,139732],{},[62,139721,139722],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[62,139724,139725],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[62,139727,139728],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[62,139730,139731],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[62,139733,139734],{},"遗忘代码",[93,139736,139738],{"className":134417,"code":139737,"language":134419,"meta":98,"style":98},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[83,139739,139740,139762,139767,139777],{"__ignoreMap":98},[102,139741,139742,139744,139746,139748,139750,139752,139754,139756,139758,139760],{"class":104,"line":105},[102,139743,59476],{"class":59165},[102,139745,2571],{"class":119},[102,139747,14],{"class":59165},[102,139749,2571],{"class":119},[102,139751,10],{"class":59165},[102,139753,2571],{"class":119},[102,139755,59],{"class":59165},[102,139757,2571],{"class":119},[102,139759,62],{"class":59165},[102,139761,1077],{"class":119},[102,139763,139764],{"class":104,"line":116},[102,139765,139766],{"class":126},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[102,139768,139769,139771,139773,139775],{"class":104,"line":123},[102,139770,136033],{"class":187},[102,139772,59302],{"class":119},[102,139774,68734],{"class":187},[102,139776,266],{"class":119},[102,139778,139779],{"class":104,"line":130},[102,139780,301],{"class":119},[87,139782,139783],{"start":142},[62,139784,139785],{},"html引css的程序",[93,139787,139788],{"className":134417,"code":139737,"language":134419,"meta":98,"style":98},[83,139789,139790,139812,139816,139826],{"__ignoreMap":98},[102,139791,139792,139794,139796,139798,139800,139802,139804,139806,139808,139810],{"class":104,"line":105},[102,139793,59476],{"class":59165},[102,139795,2571],{"class":119},[102,139797,14],{"class":59165},[102,139799,2571],{"class":119},[102,139801,10],{"class":59165},[102,139803,2571],{"class":119},[102,139805,59],{"class":59165},[102,139807,2571],{"class":119},[102,139809,62],{"class":59165},[102,139811,1077],{"class":119},[102,139813,139814],{"class":104,"line":116},[102,139815,139766],{"class":126},[102,139817,139818,139820,139822,139824],{"class":104,"line":123},[102,139819,136033],{"class":187},[102,139821,59302],{"class":119},[102,139823,68734],{"class":187},[102,139825,266],{"class":119},[102,139827,139828],{"class":104,"line":130},[102,139829,301],{"class":119},[87,139831,139832,139835,139838,139841,139844],{"start":148},[62,139833,139834],{},"浮动的盒子不会有外边距合并问题",[62,139836,139837],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[62,139839,139840],{},"ctrl+g快速定位行；shift+alt多个光标",[62,139842,139843],{},"学习上方各个模块的选择器起名方法，以后就这样用",[62,139845,139846],{},"在写选择器时尽量写全一些，例如",[93,139848,139850],{"className":134417,"code":139849,"language":134419,"meta":98,"style":98},"\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",[83,139851,139852,139857,139873,139878,139893,139898,139913,139918,139933,139938],{"__ignoreMap":98},[102,139853,139854],{"class":104,"line":105},[102,139855,139856],{"class":126},"\u002F* 静态定位（默认） *\u002F\n",[102,139858,139859,139862,139864,139866,139868,139871],{"class":104,"line":116},[102,139860,139861],{"class":112},".static",[102,139863,87672],{"class":119},[102,139865,136777],{"class":187},[102,139867,59302],{"class":119},[102,139869,139870],{"class":187},"static",[102,139872,137347],{"class":119},[102,139874,139875],{"class":104,"line":123},[102,139876,139877],{"class":126},"\u002F* 相对定位 *\u002F\n",[102,139879,139880,139883,139885,139887,139889,139891],{"class":104,"line":130},[102,139881,139882],{"class":112},".relative",[102,139884,87672],{"class":119},[102,139886,136777],{"class":187},[102,139888,59302],{"class":119},[102,139890,62629],{"class":187},[102,139892,137347],{"class":119},[102,139894,139895],{"class":104,"line":136},[102,139896,139897],{"class":126},"\u002F* 绝对定位 *\u002F\n",[102,139899,139900,139903,139905,139907,139909,139911],{"class":104,"line":142},[102,139901,139902],{"class":112},".absolute",[102,139904,87672],{"class":119},[102,139906,136777],{"class":187},[102,139908,59302],{"class":119},[102,139910,62696],{"class":187},[102,139912,137347],{"class":119},[102,139914,139915],{"class":104,"line":148},[102,139916,139917],{"class":126},"\u002F* 固定定位 *\u002F\n",[102,139919,139920,139923,139925,139927,139929,139931],{"class":104,"line":157},[102,139921,139922],{"class":112},".fixed",[102,139924,87672],{"class":119},[102,139926,136777],{"class":187},[102,139928,59302],{"class":119},[102,139930,94098],{"class":187},[102,139932,137347],{"class":119},[102,139934,139935],{"class":104,"line":163},[102,139936,139937],{"class":126},"\u002F* 粘性定位 *\u002F\n",[102,139939,139940,139943,139945,139947,139949,139952],{"class":104,"line":175},[102,139941,139942],{"class":112},".sticky",[102,139944,87672],{"class":119},[102,139946,136777],{"class":187},[102,139948,59302],{"class":119},[102,139950,139951],{"class":187},"sticky",[102,139953,137347],{"class":119},[87,139955,139956,139959],{"start":202},[62,139957,139958],{},"一定要用好注释",[62,139960,139961],{},"浮动的盒子不会有外边距合并的问题",[8955,139963,139305],{},{"title":98,"searchDepth":116,"depth":116,"links":139965},[139966,139967],{"id":139342,"depth":116,"text":139343},{"id":139406,"depth":116,"text":139407,"children":139968},[139969,139970,139971,139972,139973,139974,139975],{"id":139410,"depth":123,"text":139411},{"id":139516,"depth":123,"text":139517},{"id":139552,"depth":123,"text":139553},{"id":139573,"depth":123,"text":139574},{"id":139608,"depth":123,"text":139609},{"id":139641,"depth":123,"text":139642},{"id":139716,"depth":123,"text":139717},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":139334,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":139982,"title":139983,"body":139984,"description":31240,"extension":8978,"meta":141470,"navigation":651,"path":141471,"seo":141472,"stem":141473,"__hash__":141474},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":139985,"toc":141462},[139986,139989,139993,139997,140008,140012,140029,140073,140106,140109,140126,140129,140132,140176,140180,140184,140187,140190,140194,140197,140208,140271,140312,140315,140330,140384,140392,140395,140406,140460,140486,140489,140502,140556,140588,140642,140665,140719,140722,140725,140732,140786,140807,140861,140864,140867,140952,140960,141017,141040,141044,141047,141065,141069,141088,141142,141180,141184,141187,141190,141212,141216,141224,141227,141232,141243,141246,141250,141264,141308,141311,141315,141318,141323,141349,141354,141431,141434,141438,141441,141444,141447,141450,141453,141456,141459],[10,139987,139983],{"id":139988},"_11-传统布局与定位体系",[43,139990,139992],{"id":139991},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[48,139994,139996],{"id":139995},"_1111-普通流标准流","11.1.1 普通流（标准流）",[59,139998,139999,140002,140005],{},[62,140000,140001],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[62,140003,140004],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[62,140006,140007],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[48,140009,140011],{"id":140010},"_1112-浮动","11.1.2 浮动",[59,140013,140014,140017,140020,140023,140026],{},[62,140015,140016],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[62,140018,140019],{},"浮动可以改变元素标签默认的排列方式",[62,140021,140022],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[62,140024,140025],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[62,140027,140028],{},"在使用行内块转换时盒子之间是有空隙的",[93,140030,140031],{"className":134417,"code":138883,"language":134419,"meta":98,"style":98},[83,140032,140033,140039,140049,140053,140059,140069],{"__ignoreMap":98},[102,140034,140035,140037],{"class":104,"line":105},[102,140036,138890],{"class":112},[102,140038,1077],{"class":119},[102,140040,140041,140043,140045,140047],{"class":104,"line":116},[102,140042,138897],{"class":187},[102,140044,59302],{"class":119},[102,140046,31600],{"class":187},[102,140048,266],{"class":119},[102,140050,140051],{"class":104,"line":123},[102,140052,301],{"class":119},[102,140054,140055,140057],{"class":104,"line":130},[102,140056,138912],{"class":112},[102,140058,1077],{"class":119},[102,140060,140061,140063,140065,140067],{"class":104,"line":136},[102,140062,138897],{"class":187},[102,140064,59302],{"class":119},[102,140066,80387],{"class":187},[102,140068,266],{"class":119},[102,140070,140071],{"class":104,"line":142},[102,140072,301],{"class":119},[9177,140074,140075,140083],{},[9180,140076,140077],{},[9183,140078,140079,140081],{},[9186,140080,134881],{"align":31600},[9186,140082,35354],{"align":31600},[9223,140084,140085,140092,140099],{},[9183,140086,140087,140089],{},[9228,140088,62602],{"align":31600},[9228,140090,140091],{"align":31600},"元素不浮动（默认值）",[9183,140093,140094,140096],{},[9228,140095,31600],{"align":31600},[9228,140097,140098],{"align":31600},"元素向左浮动",[9183,140100,140101,140103],{},[9228,140102,80387],{"align":31600},[9228,140104,140105],{"align":31600},"元素向右浮动",[14,140107,140108],{},"浮动重点：",[59,140110,140111,140114,140117,140120,140123],{},[62,140112,140113],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[62,140115,140116],{},"浮动的元素会一行内显示并且元素顶部对齐",[62,140118,140119],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[62,140121,140122],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[62,140124,140125],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,140127,140128],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,140130,140131],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[93,140133,140134],{"className":134417,"code":138883,"language":134419,"meta":98,"style":98},[83,140135,140136,140142,140152,140156,140162,140172],{"__ignoreMap":98},[102,140137,140138,140140],{"class":104,"line":105},[102,140139,138890],{"class":112},[102,140141,1077],{"class":119},[102,140143,140144,140146,140148,140150],{"class":104,"line":116},[102,140145,138897],{"class":187},[102,140147,59302],{"class":119},[102,140149,31600],{"class":187},[102,140151,266],{"class":119},[102,140153,140154],{"class":104,"line":123},[102,140155,301],{"class":119},[102,140157,140158,140160],{"class":104,"line":130},[102,140159,138912],{"class":112},[102,140161,1077],{"class":119},[102,140163,140164,140166,140168,140170],{"class":104,"line":136},[102,140165,138897],{"class":187},[102,140167,59302],{"class":119},[102,140169,80387],{"class":187},[102,140171,266],{"class":119},[102,140173,140174],{"class":104,"line":142},[102,140175,301],{"class":119},[48,140177,140179],{"id":140178},"_1113-定位","11.1.3 定位",[7601,140181,140183],{"id":140182},"_11131-使用场景","11.1.3.1 使用场景",[14,140185,140186],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,140188,140189],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[7601,140191,140193],{"id":140192},"_11132-定位组成","11.1.3.2 定位组成",[14,140195,140196],{},"定位 = 定位模式 + 边偏移",[87,140198,140199],{},[62,140200,140201,140204,140205],{},[18,140202,140203],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[18,140206,140207],{},"定位模式",[93,140209,140211],{"className":134417,"code":140210,"language":134419,"meta":98,"style":98},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[83,140212,140213,140219,140233,140250,140267],{"__ignoreMap":98},[102,140214,140215,140217],{"class":104,"line":105},[102,140216,138265],{"class":112},[102,140218,1077],{"class":119},[102,140220,140221,140224,140226,140228,140230],{"class":104,"line":116},[102,140222,140223],{"class":187},"  position",[102,140225,59302],{"class":119},[102,140227,62629],{"class":187},[102,140229,138280],{"class":119},[102,140231,140232],{"class":126},"\u002F* 定位模式 *\u002F\n",[102,140234,140235,140238,140240,140242,140244,140247],{"class":104,"line":123},[102,140236,140237],{"class":187},"  top",[102,140239,59302],{"class":119},[102,140241,263],{"class":187},[102,140243,59357],{"class":108},[102,140245,140246],{"class":119},";           ",[102,140248,140249],{"class":126},"\u002F* 边偏移：上 *\u002F\n",[102,140251,140252,140255,140257,140259,140261,140264],{"class":104,"line":130},[102,140253,140254],{"class":187},"  left",[102,140256,59302],{"class":119},[102,140258,5016],{"class":187},[102,140260,59357],{"class":108},[102,140262,140263],{"class":119},";          ",[102,140265,140266],{"class":126},"\u002F* 边偏移：左 *\u002F\n",[102,140268,140269],{"class":104,"line":136},[102,140270,301],{"class":119},[9177,140272,140273,140282],{},[9180,140274,140275],{},[9183,140276,140277,140279],{},[9186,140278,9191],{"align":31600},[9186,140280,140281],{"align":31600},"语义",[9223,140283,140284,140291,140298,140305],{},[9183,140285,140286,140288],{},[9228,140287,139870],{"align":31600},[9228,140289,140290],{"align":31600},"静态定位",[9183,140292,140293,140295],{},[9228,140294,62629],{"align":31600},[9228,140296,140297],{"align":31600},"相对定位",[9183,140299,140300,140302],{},[9228,140301,62696],{"align":31600},[9228,140303,140304],{"align":31600},"绝对定位",[9183,140306,140307,140309],{},[9228,140308,94098],{"align":31600},[9228,140310,140311],{"align":31600},"固定定位",[14,140313,140314],{},"（1）静态定位：",[59,140316,140317,140328],{},[62,140318,140319,140320,140323,140324,140327],{},"静态定位是元素的 ",[18,140321,140322],{},"默认定位方式"," ， ",[18,140325,140326],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[62,140329,80],{},[93,140331,140332],{"className":134417,"code":140210,"language":134419,"meta":98,"style":98},[83,140333,140334,140340,140352,140366,140380],{"__ignoreMap":98},[102,140335,140336,140338],{"class":104,"line":105},[102,140337,138265],{"class":112},[102,140339,1077],{"class":119},[102,140341,140342,140344,140346,140348,140350],{"class":104,"line":116},[102,140343,140223],{"class":187},[102,140345,59302],{"class":119},[102,140347,62629],{"class":187},[102,140349,138280],{"class":119},[102,140351,140232],{"class":126},[102,140353,140354,140356,140358,140360,140362,140364],{"class":104,"line":123},[102,140355,140237],{"class":187},[102,140357,59302],{"class":119},[102,140359,263],{"class":187},[102,140361,59357],{"class":108},[102,140363,140246],{"class":119},[102,140365,140249],{"class":126},[102,140367,140368,140370,140372,140374,140376,140378],{"class":104,"line":130},[102,140369,140254],{"class":187},[102,140371,59302],{"class":119},[102,140373,5016],{"class":187},[102,140375,59357],{"class":108},[102,140377,140263],{"class":119},[102,140379,140266],{"class":126},[102,140381,140382],{"class":104,"line":136},[102,140383,301],{"class":119},[59,140385,140386,140389],{},[62,140387,140388],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[62,140390,140391],{},"静态定位在布局时我们几乎不用的",[14,140393,140394],{},"（2）相对定位",[59,140396,140397,140404],{},[62,140398,140399,140400,140403],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[18,140401,140402],{},"原来的位置"," 来说的（自恋型）",[62,140405,80],{},[93,140407,140408],{"className":134417,"code":140210,"language":134419,"meta":98,"style":98},[83,140409,140410,140416,140428,140442,140456],{"__ignoreMap":98},[102,140411,140412,140414],{"class":104,"line":105},[102,140413,138265],{"class":112},[102,140415,1077],{"class":119},[102,140417,140418,140420,140422,140424,140426],{"class":104,"line":116},[102,140419,140223],{"class":187},[102,140421,59302],{"class":119},[102,140423,62629],{"class":187},[102,140425,138280],{"class":119},[102,140427,140232],{"class":126},[102,140429,140430,140432,140434,140436,140438,140440],{"class":104,"line":123},[102,140431,140237],{"class":187},[102,140433,59302],{"class":119},[102,140435,263],{"class":187},[102,140437,59357],{"class":108},[102,140439,140246],{"class":119},[102,140441,140249],{"class":126},[102,140443,140444,140446,140448,140450,140452,140454],{"class":104,"line":130},[102,140445,140254],{"class":187},[102,140447,59302],{"class":119},[102,140449,5016],{"class":187},[102,140451,59357],{"class":108},[102,140453,140263],{"class":119},[102,140455,140266],{"class":126},[102,140457,140458],{"class":104,"line":136},[102,140459,301],{"class":119},[59,140461,140462],{},[62,140463,140464,140465,140467,140468,140470,140471,140474,140475,140478,140479,140481,140482,140485],{},"相对定位的特点：",[61581,140466],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[61581,140469],{},"  ② ",[18,140472,140473],{},"原来"," 在标准流的 ",[18,140476,140477],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[61581,140480],{},"  ③因此， ",[18,140483,140484],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,140487,140488],{},"（3）绝对定位",[59,140490,140491,140500],{},[62,140492,140493,140495,140496,140499],{},[18,140494,140304],{}," 是元素在移动位置的时候，是相对于它 ",[18,140497,140498],{},"祖先元素"," 来说的（拼爹型）",[62,140501,80],{},[93,140503,140504],{"className":134417,"code":140210,"language":134419,"meta":98,"style":98},[83,140505,140506,140512,140524,140538,140552],{"__ignoreMap":98},[102,140507,140508,140510],{"class":104,"line":105},[102,140509,138265],{"class":112},[102,140511,1077],{"class":119},[102,140513,140514,140516,140518,140520,140522],{"class":104,"line":116},[102,140515,140223],{"class":187},[102,140517,59302],{"class":119},[102,140519,62629],{"class":187},[102,140521,138280],{"class":119},[102,140523,140232],{"class":126},[102,140525,140526,140528,140530,140532,140534,140536],{"class":104,"line":123},[102,140527,140237],{"class":187},[102,140529,59302],{"class":119},[102,140531,263],{"class":187},[102,140533,59357],{"class":108},[102,140535,140246],{"class":119},[102,140537,140249],{"class":126},[102,140539,140540,140542,140544,140546,140548,140550],{"class":104,"line":130},[102,140541,140254],{"class":187},[102,140543,59302],{"class":119},[102,140545,5016],{"class":187},[102,140547,59357],{"class":108},[102,140549,140263],{"class":119},[102,140551,140266],{"class":126},[102,140553,140554],{"class":104,"line":136},[102,140555,301],{"class":119},[59,140557,140558,140573,140582,140585],{},[62,140559,140560,140561,140563,140564,140566,140567,140569,140570,140572],{},"绝对定位的特点：",[61581,140562],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[61581,140565],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[61581,140568],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[61581,140571],{},"  (4)固定定位",[62,140574,140575,140577,140578,140581],{},[18,140576,140311],{}," 是元素 ",[18,140579,140580],{},"固定于浏览器可视区的位置"," 。（认死理型）",[62,140583,140584],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[62,140586,140587],{},"语法:",[93,140589,140590],{"className":134417,"code":140210,"language":134419,"meta":98,"style":98},[83,140591,140592,140598,140610,140624,140638],{"__ignoreMap":98},[102,140593,140594,140596],{"class":104,"line":105},[102,140595,138265],{"class":112},[102,140597,1077],{"class":119},[102,140599,140600,140602,140604,140606,140608],{"class":104,"line":116},[102,140601,140223],{"class":187},[102,140603,59302],{"class":119},[102,140605,62629],{"class":187},[102,140607,138280],{"class":119},[102,140609,140232],{"class":126},[102,140611,140612,140614,140616,140618,140620,140622],{"class":104,"line":123},[102,140613,140237],{"class":187},[102,140615,59302],{"class":119},[102,140617,263],{"class":187},[102,140619,59357],{"class":108},[102,140621,140246],{"class":119},[102,140623,140249],{"class":126},[102,140625,140626,140628,140630,140632,140634,140636],{"class":104,"line":130},[102,140627,140254],{"class":187},[102,140629,59302],{"class":119},[102,140631,5016],{"class":187},[102,140633,59357],{"class":108},[102,140635,140263],{"class":119},[102,140637,140266],{"class":126},[102,140639,140640],{"class":104,"line":136},[102,140641,301],{"class":119},[59,140643,140644,140653],{},[62,140645,140646,140647,140649,140650,140652],{},"特点:",[61581,140648],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[61581,140651],{},"  ②固定定位不再占有原先的位置,完全脱标",[62,140654,140655,140656,140658,140659,140661,140662,140664],{},"固定在版心位置的方法:",[61581,140657],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[61581,140660],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[61581,140663],{},"  实例：",[93,140666,140667],{"className":134417,"code":140210,"language":134419,"meta":98,"style":98},[83,140668,140669,140675,140687,140701,140715],{"__ignoreMap":98},[102,140670,140671,140673],{"class":104,"line":105},[102,140672,138265],{"class":112},[102,140674,1077],{"class":119},[102,140676,140677,140679,140681,140683,140685],{"class":104,"line":116},[102,140678,140223],{"class":187},[102,140680,59302],{"class":119},[102,140682,62629],{"class":187},[102,140684,138280],{"class":119},[102,140686,140232],{"class":126},[102,140688,140689,140691,140693,140695,140697,140699],{"class":104,"line":123},[102,140690,140237],{"class":187},[102,140692,59302],{"class":119},[102,140694,263],{"class":187},[102,140696,59357],{"class":108},[102,140698,140246],{"class":119},[102,140700,140249],{"class":126},[102,140702,140703,140705,140707,140709,140711,140713],{"class":104,"line":130},[102,140704,140254],{"class":187},[102,140706,59302],{"class":119},[102,140708,5016],{"class":187},[102,140710,59357],{"class":108},[102,140712,140263],{"class":119},[102,140714,140266],{"class":126},[102,140716,140717],{"class":104,"line":136},[102,140718,301],{"class":119},[6750,140720],{"style":134273,"src":140721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,140723,140724],{},"(5)粘性定位",[59,140726,140727,140730],{},[62,140728,140729],{},"粘性定位可以被认为是相对定位和固定定位的混合",[62,140731,80],{},[93,140733,140734],{"className":134417,"code":140210,"language":134419,"meta":98,"style":98},[83,140735,140736,140742,140754,140768,140782],{"__ignoreMap":98},[102,140737,140738,140740],{"class":104,"line":105},[102,140739,138265],{"class":112},[102,140741,1077],{"class":119},[102,140743,140744,140746,140748,140750,140752],{"class":104,"line":116},[102,140745,140223],{"class":187},[102,140747,59302],{"class":119},[102,140749,62629],{"class":187},[102,140751,138280],{"class":119},[102,140753,140232],{"class":126},[102,140755,140756,140758,140760,140762,140764,140766],{"class":104,"line":123},[102,140757,140237],{"class":187},[102,140759,59302],{"class":119},[102,140761,263],{"class":187},[102,140763,59357],{"class":108},[102,140765,140246],{"class":119},[102,140767,140249],{"class":126},[102,140769,140770,140772,140774,140776,140778,140780],{"class":104,"line":130},[102,140771,140254],{"class":187},[102,140773,59302],{"class":119},[102,140775,5016],{"class":187},[102,140777,59357],{"class":108},[102,140779,140263],{"class":119},[102,140781,140266],{"class":126},[102,140783,140784],{"class":104,"line":136},[102,140785,301],{"class":119},[59,140787,140788],{},[62,140789,140790,140791,140793,140794,140796,140797,140799,140800,140803,140804,140806],{},"粘性定位的特点：",[61581,140792],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[61581,140795],{},"  ②粘性定位占有原先的位置（相对定位特点）",[61581,140798],{},"  ③必须添加 top 、left、right、bottom ",[18,140801,140802],{},"其中一个"," 才有效",[61581,140805],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[93,140808,140809],{"className":134417,"code":140210,"language":134419,"meta":98,"style":98},[83,140810,140811,140817,140829,140843,140857],{"__ignoreMap":98},[102,140812,140813,140815],{"class":104,"line":105},[102,140814,138265],{"class":112},[102,140816,1077],{"class":119},[102,140818,140819,140821,140823,140825,140827],{"class":104,"line":116},[102,140820,140223],{"class":187},[102,140822,59302],{"class":119},[102,140824,62629],{"class":187},[102,140826,138280],{"class":119},[102,140828,140232],{"class":126},[102,140830,140831,140833,140835,140837,140839,140841],{"class":104,"line":123},[102,140832,140237],{"class":187},[102,140834,59302],{"class":119},[102,140836,263],{"class":187},[102,140838,59357],{"class":108},[102,140840,140246],{"class":119},[102,140842,140249],{"class":126},[102,140844,140845,140847,140849,140851,140853,140855],{"class":104,"line":130},[102,140846,140254],{"class":187},[102,140848,59302],{"class":119},[102,140850,5016],{"class":187},[102,140852,59357],{"class":108},[102,140854,140263],{"class":119},[102,140856,140266],{"class":126},[102,140858,140859],{"class":104,"line":136},[102,140860,301],{"class":119},[6750,140862],{"style":134273,"src":140863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,140865,140866],{},"(6)总结",[9177,140868,140869,140884],{},[9180,140870,140871],{},[9183,140872,140873,140875,140878,140881],{},[9186,140874,140207],{"align":31600},[9186,140876,140877],{"align":31600},"是否脱标",[9186,140879,140880],{"align":31600},"移动位置",[9186,140882,140883],{"align":31600},"是否常用",[9223,140885,140886,140899,140913,140927,140940],{},[9183,140887,140888,140891,140893,140896],{},[9228,140889,140890],{"align":31600},"Static 静态定位",[9228,140892,112543],{"align":31600},[9228,140894,140895],{"align":31600},"不能使用边偏移",[9228,140897,140898],{"align":31600},"很少",[9183,140900,140901,140904,140907,140910],{},[9228,140902,140903],{"align":31600},"Relative 相对定位",[9228,140905,140906],{"align":31600},"否(占有位置)",[9228,140908,140909],{"align":31600},"相对于自身位置移动",[9228,140911,140912],{"align":31600},"基本单独使用",[9183,140914,140915,140918,140921,140924],{},[9228,140916,140917],{"align":31600},"Absolute 绝对定位",[9228,140919,140920],{"align":31600},"是(不占有位置)",[9228,140922,140923],{"align":31600},"带有定位的父级",[9228,140925,140926],{"align":31600},"要和定位父级元素搭配使用",[9183,140928,140929,140932,140934,140937],{},[9228,140930,140931],{"align":31600},"Fixed 固定定位",[9228,140933,140920],{"align":31600},[9228,140935,140936],{"align":31600},"浏览器可视区",[9228,140938,140939],{"align":31600},"单独使用,不需要父级",[9183,140941,140942,140945,140947,140949],{},[9228,140943,140944],{"align":31600},"Sticky 粘性定位",[9228,140946,140906],{"align":31600},[9228,140948,140936],{"align":31600},[9228,140950,140951],{"align":31600},"当前阶段少",[87,140953,140954],{"start":116},[62,140955,140956,140959],{},[18,140957,140958],{},"边偏移"," 则决定了该元素的最终位置",[9177,140961,140962,140973],{},[9180,140963,140964],{},[9183,140965,140966,140969,140971],{},[9186,140967,140968],{"align":31600},"边偏移属性",[9186,140970,35357],{"align":31600},[9186,140972,35354],{"align":31600},[9223,140974,140975,140986,140997,141007],{},[9183,140976,140977,140980,140983],{},[9228,140978,140979],{"align":31600},"top",[9228,140981,140982],{"align":31600},"top: 80px;",[9228,140984,140985],{"align":31600},"顶端偏移量，定义元素相对于父元素上边线的距离",[9183,140987,140988,140991,140994],{},[9228,140989,140990],{"align":31600},"bottom",[9228,140992,140993],{"align":31600},"bottom: 80px ;",[9228,140995,140996],{"align":31600},"底部偏移量，定义元素相对于其父元素下边线的距离",[9183,140998,140999,141001,141004],{},[9228,141000,31600],{"align":31600},[9228,141002,141003],{"align":31600},"left: 80px ;",[9228,141005,141006],{"align":31600},"左侧偏移量，定义元素相对于其父元素左边线的距离",[9183,141008,141009,141011,141014],{},[9228,141010,80387],{"align":31600},[9228,141012,141013],{"align":31600},"right: 80px ;",[9228,141015,141016],{"align":31600},"右侧偏移量，定义元素相对于其父元素右边线的距离",[59,141018,141019],{},[62,141020,7501,141021,141023,141024,141026,141027,141029,141030,141033,141034,141036,141037,141039],{},[61581,141022],{},"  ① ",[18,141025,140958],{}," 需要和 ",[18,141028,140207],{}," 联合使用， ",[18,141031,141032],{},"单独使用无效"," ；",[61581,141035],{},"  ②top和bottom不要同时使用",[61581,141038],{},"  ③left和right不要同时使用",[7601,141041,141043],{"id":141042},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,141045,141046],{},"子级是绝对定位的话，父级要用相对定位",[59,141048,141049,141052,141055,141058],{},[62,141050,141051],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[62,141053,141054],{},"父盒子需要加定位限制子盒子在父盒子内显示",[62,141056,141057],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[62,141059,141060,141061,141064],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[18,141062,141063],{},"子绝父绝"," 也会遇到",[7601,141066,141068],{"id":141067},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[59,141070,141071,141086],{},[62,141072,141073,141074,141077,141078,141081,141082,141085],{},"在使用 ",[18,141075,141076],{},"定位"," 布局时，可能会 ",[18,141079,141080],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[18,141083,141084],{},"z-index"," 来控制盒子的前后次序 (z轴)",[62,141087,80],{},[93,141089,141090],{"className":134417,"code":140210,"language":134419,"meta":98,"style":98},[83,141091,141092,141098,141110,141124,141138],{"__ignoreMap":98},[102,141093,141094,141096],{"class":104,"line":105},[102,141095,138265],{"class":112},[102,141097,1077],{"class":119},[102,141099,141100,141102,141104,141106,141108],{"class":104,"line":116},[102,141101,140223],{"class":187},[102,141103,59302],{"class":119},[102,141105,62629],{"class":187},[102,141107,138280],{"class":119},[102,141109,140232],{"class":126},[102,141111,141112,141114,141116,141118,141120,141122],{"class":104,"line":123},[102,141113,140237],{"class":187},[102,141115,59302],{"class":119},[102,141117,263],{"class":187},[102,141119,59357],{"class":108},[102,141121,140246],{"class":119},[102,141123,140249],{"class":126},[102,141125,141126,141128,141130,141132,141134,141136],{"class":104,"line":130},[102,141127,140254],{"class":187},[102,141129,59302],{"class":119},[102,141131,5016],{"class":187},[102,141133,59357],{"class":108},[102,141135,140263],{"class":119},[102,141137,140266],{"class":126},[102,141139,141140],{"class":104,"line":136},[102,141141,301],{"class":119},[59,141143,141144],{},[62,141145,141146,141147,141023,141149,141151,141152,135580,141155,90404,141158,141160,141161,141163,141164,141167,141168,141033,141171,141173,141174,141177,141179],{},"z-index的特性",[61581,141148],{},[18,141150,134881],{}," ： ",[18,141153,141154],{},"正整数",[18,141156,141157],{},"负整数",[18,141159,8423],{}," ，默认值是 0，数值越大，盒子越靠上；",[61581,141162],{},"  ②如果 ",[18,141165,141166],{},"属性值相同"," ，则按照书写顺序， ",[18,141169,141170],{},"后来居上",[61581,141172],{},"  ③数字后面 ",[18,141175,141176],{},"不能加单位",[61581,141178],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[7601,141181,141183],{"id":141182},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,141185,141186],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,141188,141189],{},"方法:",[59,141191,141192,141202],{},[62,141193,141194,141195,141198,141199],{},"left: 50%; 让 ",[18,141196,141197],{},"盒子的左侧"," 移动到 ",[18,141200,141201],{},"父级元素的水平中心位置",[62,141203,141204,141205,141208,141209],{},"margin-left: -100px; 让盒子 ",[18,141206,141207],{},"向左"," 移动 ",[18,141210,141211],{},"自身宽度的一半",[7601,141213,141215],{"id":141214},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[87,141217,141218,141221],{},[62,141219,141220],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[62,141222,141223],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,141225,141226],{},"也就是说绝对定位和固定定位和浮动类似",[87,141228,141229],{"start":123},[62,141230,141231],{},"display 是显示模式， 可以改变显示模式有以下方式:",[59,141233,141234,141237,141240],{},[62,141235,141236],{},"可以用inline-block 转换为行内块",[62,141238,141239],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[62,141241,141242],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,141244,141245],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[7601,141247,141249],{"id":141248},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[87,141251,141252,141255,141258,141261],{},[62,141253,141254],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[62,141256,141257],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[62,141259,141260],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[62,141262,141263],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[93,141265,141266],{"className":134417,"code":138883,"language":134419,"meta":98,"style":98},[83,141267,141268,141274,141284,141288,141294,141304],{"__ignoreMap":98},[102,141269,141270,141272],{"class":104,"line":105},[102,141271,138890],{"class":112},[102,141273,1077],{"class":119},[102,141275,141276,141278,141280,141282],{"class":104,"line":116},[102,141277,138897],{"class":187},[102,141279,59302],{"class":119},[102,141281,31600],{"class":187},[102,141283,266],{"class":119},[102,141285,141286],{"class":104,"line":123},[102,141287,301],{"class":119},[102,141289,141290,141292],{"class":104,"line":130},[102,141291,138912],{"class":112},[102,141293,1077],{"class":119},[102,141295,141296,141298,141300,141302],{"class":104,"line":136},[102,141297,138897],{"class":187},[102,141299,59302],{"class":119},[102,141301,80387],{"class":187},[102,141303,266],{"class":119},[102,141305,141306],{"class":104,"line":142},[102,141307,301],{"class":119},[6750,141309],{"style":134273,"src":141310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[7601,141312,141314],{"id":141313},"_11138-轮播图","11.1.3.8 轮播图",[6750,141316],{"style":134273,"src":141317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[87,141319,141320],{},[62,141321,141322],{},"制作顺序:",[59,141324,141325,141328,141331,141340],{},[62,141326,141327],{},"大盒子我们类名为： tb-promo 淘宝广告",[62,141329,141330],{},"里面先放一张图片",[62,141332,141333,141334,141336,141337,141339],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[61581,141335],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[61581,141338],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[62,141341,141342,141343,141345,141346,141348],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[61581,141344],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[61581,141347],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[87,141350,141351],{"start":116},[62,141352,141353],{},"代码模块",[93,141355,141357],{"className":134417,"code":141356,"language":134419,"meta":98,"style":98},"\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",[83,141358,141359,141364,141371,141381,141391,141401,141405,141410,141417,141427],{"__ignoreMap":98},[102,141360,141361],{"class":104,"line":105},[102,141362,141363],{"class":126},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[102,141365,141366,141369],{"class":104,"line":116},[102,141367,141368],{"class":112},".son",[102,141370,1077],{"class":119},[102,141372,141373,141375,141377,141379],{"class":104,"line":123},[102,141374,140223],{"class":187},[102,141376,59302],{"class":119},[102,141378,62696],{"class":187},[102,141380,266],{"class":119},[102,141382,141383,141385,141387,141389],{"class":104,"line":130},[102,141384,140237],{"class":187},[102,141386,59302],{"class":119},[102,141388,8423],{"class":187},[102,141390,266],{"class":119},[102,141392,141393,141395,141397,141399],{"class":104,"line":136},[102,141394,140254],{"class":187},[102,141396,59302],{"class":119},[102,141398,8423],{"class":187},[102,141400,266],{"class":119},[102,141402,141403],{"class":104,"line":142},[102,141404,301],{"class":119},[102,141406,141407],{"class":104,"line":148},[102,141408,141409],{"class":126},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[102,141411,141412,141415],{"class":104,"line":157},[102,141413,141414],{"class":112},".father",[102,141416,1077],{"class":119},[102,141418,141419,141421,141423,141425],{"class":104,"line":163},[102,141420,140223],{"class":187},[102,141422,59302],{"class":119},[102,141424,62629],{"class":187},[102,141426,266],{"class":119},[102,141428,141429],{"class":104,"line":175},[102,141430,301],{"class":119},[14,141432,141433],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[48,141435,141437],{"id":141436},"_1114-定位数值的移动","11.1.4 定位数值的移动",[6750,141439],{"style":134273,"src":141440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,141442,141443],{},"✨ 黄金口诀：",[14,141445,141446],{},"\"TOP正下负上，LEFT正右负左\"",[14,141448,141449],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,141451,141452],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,141454,141455],{},"✨ 简单记：",[14,141457,141458],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[8955,141460,141461],{},"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":98,"searchDepth":116,"depth":116,"links":141463},[141464],{"id":139991,"depth":116,"text":139992,"children":141465},[141466,141467,141468,141469],{"id":139995,"depth":123,"text":139996},{"id":140010,"depth":123,"text":140011},{"id":140178,"depth":123,"text":140179},{"id":141436,"depth":123,"text":141437},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":139983,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":141476,"title":141477,"body":141478,"description":31240,"extension":8978,"meta":142901,"navigation":651,"path":142902,"seo":142903,"stem":142904,"__hash__":142905},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":141479,"toc":142880},[141480,141483,141487,141495,141499,141504,141512,141524,141528,141533,141541,141552,141556,141561,141602,141610,141614,141617,141620,141623,141717,141720,141814,141817,141911,141914,141917,141952,141955,141958,141988,141991,141994,141997,142000,142003,142006,142009,142079,142082,142086,142090,142131,142135,142141,142144,142147,142151,142154,142157,142160,142241,142244,142247,142251,142255,142258,142261,142264,142267,142270,142276,142285,142289,142308,142312,142322,142325,142328,142331,142334,142337,142340,142343,142346,142355,142359,142368,142371,142376,142429,142434,142600,142603,142606,142611,142614,142617,142620,142623,142628,142776,142779,142782,142787,142790,142795,142829,142832,142835,142839,142842,142849,142852,142855,142858,142861,142864,142867,142870,142874,142877],[10,141481,141477],{"id":141482},"_12-显示隐藏与图形资源",[43,141484,141486],{"id":141485},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[59,141488,141489,141492],{},[62,141490,141491],{},"目的:让一个元素在页面中消失或者显示出来",[62,141493,141494],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[48,141496,141498],{"id":141497},"_1211-display-显示","12.1.1 display 显示",[87,141500,141501],{},[62,141502,141503],{},"display 设置或检索对象是否及如何显示",[59,141505,141506,141509],{},[62,141507,141508],{},"display: none;隐藏对象",[62,141510,141511],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[87,141513,141514,141521],{"start":116},[62,141515,141516,141517,141520],{},"特点： display 隐藏元素后， ",[18,141518,141519],{},"不再占"," 有原来的位置",[62,141522,141523],{},"在js中使用非常的广泛",[48,141525,141527],{"id":141526},"_1212-visibility可见性","12.1.2 visibility可见性",[87,141529,141530],{},[62,141531,141532],{},"visibility 属性用于指定一个元素应可见还是隐藏",[59,141534,141535,141538],{},[62,141536,141537],{},"visibility： visible；元素可见",[62,141539,141540],{},"visibility：hidden；元素隐藏",[87,141542,141543,141546,141549],{"start":116},[62,141544,141545],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[62,141547,141548],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[62,141550,141551],{},"隐藏后继续占有原有位置",[48,141553,141555],{"id":141554},"_1213-overflow溢出","12.1.3 overflow溢出",[59,141557,141558],{},[62,141559,141560],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[9177,141562,141563,141571],{},[9180,141564,141565],{},[9183,141566,141567,141569],{},[9186,141568,134881],{"align":31600},[9186,141570,35354],{"align":31600},[9223,141572,141573,141581,141588,141595],{},[9183,141574,141575,141578],{},[9228,141576,141577],{"align":31600},"visible",[9228,141579,141580],{"align":31600},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[9183,141582,141583,141585],{},[9228,141584,69579],{"align":31600},[9228,141586,141587],{"align":31600},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[9183,141589,141590,141592],{},[9228,141591,136837],{"align":31600},[9228,141593,141594],{"align":31600},"不管超出内容否，总是显示滚动条",[9183,141596,141597,141599],{},[9228,141598,80528],{"align":31600},[9228,141600,141601],{"align":31600},"超出自动显示滚动条，不超出不显示滚动条",[59,141603,141604,141607],{},[62,141605,141606],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[62,141608,141609],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[48,141611,141613],{"id":141612},"_1214-案例收获","12.1.4 案例收获",[6750,141615],{"style":134273,"src":141616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,141618,141619],{},"问题：没做出来动态效果，使用hover没实现",[14,141621,141622],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[93,141624,141625],{"className":134417,"code":139849,"language":134419,"meta":98,"style":98},[83,141626,141627,141631,141645,141649,141663,141667,141681,141685,141699,141703],{"__ignoreMap":98},[102,141628,141629],{"class":104,"line":105},[102,141630,139856],{"class":126},[102,141632,141633,141635,141637,141639,141641,141643],{"class":104,"line":116},[102,141634,139861],{"class":112},[102,141636,87672],{"class":119},[102,141638,136777],{"class":187},[102,141640,59302],{"class":119},[102,141642,139870],{"class":187},[102,141644,137347],{"class":119},[102,141646,141647],{"class":104,"line":123},[102,141648,139877],{"class":126},[102,141650,141651,141653,141655,141657,141659,141661],{"class":104,"line":130},[102,141652,139882],{"class":112},[102,141654,87672],{"class":119},[102,141656,136777],{"class":187},[102,141658,59302],{"class":119},[102,141660,62629],{"class":187},[102,141662,137347],{"class":119},[102,141664,141665],{"class":104,"line":136},[102,141666,139897],{"class":126},[102,141668,141669,141671,141673,141675,141677,141679],{"class":104,"line":142},[102,141670,139902],{"class":112},[102,141672,87672],{"class":119},[102,141674,136777],{"class":187},[102,141676,59302],{"class":119},[102,141678,62696],{"class":187},[102,141680,137347],{"class":119},[102,141682,141683],{"class":104,"line":148},[102,141684,139917],{"class":126},[102,141686,141687,141689,141691,141693,141695,141697],{"class":104,"line":157},[102,141688,139922],{"class":112},[102,141690,87672],{"class":119},[102,141692,136777],{"class":187},[102,141694,59302],{"class":119},[102,141696,94098],{"class":187},[102,141698,137347],{"class":119},[102,141700,141701],{"class":104,"line":163},[102,141702,139937],{"class":126},[102,141704,141705,141707,141709,141711,141713,141715],{"class":104,"line":175},[102,141706,139942],{"class":112},[102,141708,87672],{"class":119},[102,141710,136777],{"class":187},[102,141712,59302],{"class":119},[102,141714,139951],{"class":187},[102,141716,137347],{"class":119},[14,141718,141719],{},"完整代码：",[93,141721,141722],{"className":134417,"code":139849,"language":134419,"meta":98,"style":98},[83,141723,141724,141728,141742,141746,141760,141764,141778,141782,141796,141800],{"__ignoreMap":98},[102,141725,141726],{"class":104,"line":105},[102,141727,139856],{"class":126},[102,141729,141730,141732,141734,141736,141738,141740],{"class":104,"line":116},[102,141731,139861],{"class":112},[102,141733,87672],{"class":119},[102,141735,136777],{"class":187},[102,141737,59302],{"class":119},[102,141739,139870],{"class":187},[102,141741,137347],{"class":119},[102,141743,141744],{"class":104,"line":123},[102,141745,139877],{"class":126},[102,141747,141748,141750,141752,141754,141756,141758],{"class":104,"line":130},[102,141749,139882],{"class":112},[102,141751,87672],{"class":119},[102,141753,136777],{"class":187},[102,141755,59302],{"class":119},[102,141757,62629],{"class":187},[102,141759,137347],{"class":119},[102,141761,141762],{"class":104,"line":136},[102,141763,139897],{"class":126},[102,141765,141766,141768,141770,141772,141774,141776],{"class":104,"line":142},[102,141767,139902],{"class":112},[102,141769,87672],{"class":119},[102,141771,136777],{"class":187},[102,141773,59302],{"class":119},[102,141775,62696],{"class":187},[102,141777,137347],{"class":119},[102,141779,141780],{"class":104,"line":148},[102,141781,139917],{"class":126},[102,141783,141784,141786,141788,141790,141792,141794],{"class":104,"line":157},[102,141785,139922],{"class":112},[102,141787,87672],{"class":119},[102,141789,136777],{"class":187},[102,141791,59302],{"class":119},[102,141793,94098],{"class":187},[102,141795,137347],{"class":119},[102,141797,141798],{"class":104,"line":163},[102,141799,139937],{"class":126},[102,141801,141802,141804,141806,141808,141810,141812],{"class":104,"line":175},[102,141803,139942],{"class":112},[102,141805,87672],{"class":119},[102,141807,136777],{"class":187},[102,141809,59302],{"class":119},[102,141811,139951],{"class":187},[102,141813,137347],{"class":119},[14,141815,141816],{},"分布思路重点详解：",[93,141818,141819],{"className":134417,"code":139849,"language":134419,"meta":98,"style":98},[83,141820,141821,141825,141839,141843,141857,141861,141875,141879,141893,141897],{"__ignoreMap":98},[102,141822,141823],{"class":104,"line":105},[102,141824,139856],{"class":126},[102,141826,141827,141829,141831,141833,141835,141837],{"class":104,"line":116},[102,141828,139861],{"class":112},[102,141830,87672],{"class":119},[102,141832,136777],{"class":187},[102,141834,59302],{"class":119},[102,141836,139870],{"class":187},[102,141838,137347],{"class":119},[102,141840,141841],{"class":104,"line":123},[102,141842,139877],{"class":126},[102,141844,141845,141847,141849,141851,141853,141855],{"class":104,"line":130},[102,141846,139882],{"class":112},[102,141848,87672],{"class":119},[102,141850,136777],{"class":187},[102,141852,59302],{"class":119},[102,141854,62629],{"class":187},[102,141856,137347],{"class":119},[102,141858,141859],{"class":104,"line":136},[102,141860,139897],{"class":126},[102,141862,141863,141865,141867,141869,141871,141873],{"class":104,"line":142},[102,141864,139902],{"class":112},[102,141866,87672],{"class":119},[102,141868,136777],{"class":187},[102,141870,59302],{"class":119},[102,141872,62696],{"class":187},[102,141874,137347],{"class":119},[102,141876,141877],{"class":104,"line":148},[102,141878,139917],{"class":126},[102,141880,141881,141883,141885,141887,141889,141891],{"class":104,"line":157},[102,141882,139922],{"class":112},[102,141884,87672],{"class":119},[102,141886,136777],{"class":187},[102,141888,59302],{"class":119},[102,141890,94098],{"class":187},[102,141892,137347],{"class":119},[102,141894,141895],{"class":104,"line":163},[102,141896,139937],{"class":126},[102,141898,141899,141901,141903,141905,141907,141909],{"class":104,"line":175},[102,141900,139942],{"class":112},[102,141902,87672],{"class":119},[102,141904,136777],{"class":187},[102,141906,59302],{"class":119},[102,141908,139951],{"class":187},[102,141910,137347],{"class":119},[6750,141912],{"style":134273,"src":141913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,141915,141916],{},"图片太大，盒子太小，此时需要修改图片的大小",[93,141918,141920],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[83,141921,141922],{"__ignoreMap":98},[102,141923,141924,141926,141928,141930,141932,141935,141937,141939,141942,141945,141947,141950],{"class":104,"line":105},[102,141925,1208],{"class":119},[102,141927,6750],{"class":59165},[102,141929,63104],{"class":112},[102,141931,260],{"class":119},[102,141933,141934],{"class":278},"\"images\u002Fpic.jpg\"",[102,141936,63112],{"class":112},[102,141938,260],{"class":119},[102,141940,141941],{"class":278},"\"描述文字\"",[102,141943,141944],{"class":112}," title",[102,141946,260],{"class":119},[102,141948,141949],{"class":278},"\"悬停提示\"",[102,141951,59172],{"class":119},[6750,141953],{"style":134273,"src":141954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,141956,141957],{},"制造遮罩层",[93,141959,141960],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,141961,141962],{"__ignoreMap":98},[102,141963,141964,141966,141968,141970,141972,141974,141976,141978,141980,141982,141984,141986],{"class":104,"line":105},[102,141965,1208],{"class":119},[102,141967,6750],{"class":59165},[102,141969,63104],{"class":112},[102,141971,260],{"class":119},[102,141973,141934],{"class":278},[102,141975,63112],{"class":112},[102,141977,260],{"class":119},[102,141979,141941],{"class":278},[102,141981,141944],{"class":112},[102,141983,260],{"class":119},[102,141985,141949],{"class":278},[102,141987,59172],{"class":119},[14,141989,141990],{},"此时是这样的为标准流",[6750,141992],{"style":134273,"src":141993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,141995,141996],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,141998,141999],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,142001,142002],{},"让他在中间，用center(background-position)",[14,142004,142005],{},"将需要变的尽可能放到一个盒子中",[14,142007,142008],{},"放大盒子上内部盒子发生变化",[93,142010,142012],{"className":134417,"code":142011,"language":134419,"meta":98,"style":98},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[83,142013,142014,142020,142030,142034,142041,142051,142063,142075],{"__ignoreMap":98},[102,142015,142016,142018],{"class":104,"line":105},[102,142017,135484],{"class":112},[102,142019,1077],{"class":119},[102,142021,142022,142024,142026,142028],{"class":104,"line":116},[102,142023,140223],{"class":187},[102,142025,59302],{"class":119},[102,142027,62629],{"class":187},[102,142029,266],{"class":119},[102,142031,142032],{"class":104,"line":123},[102,142033,301],{"class":119},[102,142035,142036,142039],{"class":104,"line":130},[102,142037,142038],{"class":112},".child",[102,142040,1077],{"class":119},[102,142042,142043,142045,142047,142049],{"class":104,"line":136},[102,142044,140223],{"class":187},[102,142046,59302],{"class":119},[102,142048,62696],{"class":187},[102,142050,266],{"class":119},[102,142052,142053,142055,142057,142059,142061],{"class":104,"line":142},[102,142054,140237],{"class":187},[102,142056,59302],{"class":119},[102,142058,1445],{"class":187},[102,142060,9363],{"class":108},[102,142062,266],{"class":119},[102,142064,142065,142067,142069,142071,142073],{"class":104,"line":148},[102,142066,140254],{"class":187},[102,142068,59302],{"class":119},[102,142070,1445],{"class":187},[102,142072,9363],{"class":108},[102,142074,266],{"class":119},[102,142076,142077],{"class":104,"line":157},[102,142078,301],{"class":119},[14,142080,142081],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[43,142083,142085],{"id":142084},"_122-精灵图","12.2 精灵图",[48,142087,142089],{"id":142088},"_1221-理解","12.2.1 理解",[87,142091,142092,142110],{},[62,142093,142094,142095,140323,142098,142101,142102,142105,142106,142109],{},"目的： ",[18,142096,142097],{},"为了有效地减少服务器接收和发送请求的次数",[18,142099,142100],{},"提高"," 页面的 ",[18,142103,142104],{},"加载速度"," ，出现了 ",[18,142107,142108],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[62,142111,142112,142113,142115,142116,142118,142119,142121,142122,142124,142125,142127,142128,142130],{},"使用精灵图核心：",[61581,142114],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[61581,142117],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[61581,142120],{},"  ③移动背景图片位置， 此时可以使用 background-position",[61581,142123],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[61581,142126],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[61581,142129],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[48,142132,142134],{"id":142133},"_1222-扒图","12.2.2 扒图",[93,142136,142139],{"className":142137,"code":142138,"language":6778},[6776],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[83,142140,142138],{"__ignoreMap":98},[6750,142142],{"style":134273,"src":142143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[6750,142145],{"style":134273,"src":142146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[48,142148,142150],{"id":142149},"_1223-精灵图的实现","12.2.3 精灵图的实现",[6750,142152],{"style":134273,"src":142153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,142155,142156],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[6750,142158],{"style":134273,"src":142159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[93,142161,142163],{"className":134417,"code":142162,"language":134419,"meta":98,"style":98},"\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",[83,142164,142165,142170,142177,142189,142201,142220,142237],{"__ignoreMap":98},[102,142166,142167],{"class":104,"line":105},[102,142168,142169],{"class":126},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[102,142171,142172,142175],{"class":104,"line":116},[102,142173,142174],{"class":112},".icon",[102,142176,1077],{"class":119},[102,142178,142179,142181,142183,142185,142187],{"class":104,"line":123},[102,142180,78433],{"class":187},[102,142182,59302],{"class":119},[102,142184,5016],{"class":187},[102,142186,59357],{"class":108},[102,142188,266],{"class":119},[102,142190,142191,142193,142195,142197,142199],{"class":104,"line":130},[102,142192,78653],{"class":187},[102,142194,59302],{"class":119},[102,142196,5016],{"class":187},[102,142198,59357],{"class":108},[102,142200,266],{"class":119},[102,142202,142203,142205,142207,142209,142211,142214,142216,142218],{"class":104,"line":136},[102,142204,78476],{"class":187},[102,142206,59302],{"class":119},[102,142208,69591],{"class":187},[102,142210,380],{"class":119},[102,142212,142213],{"class":386},"sprites.png",[102,142215,22445],{"class":119},[102,142217,69601],{"class":187},[102,142219,266],{"class":119},[102,142221,142222,142224,142226,142228,142230,142233,142235],{"class":104,"line":142},[102,142223,136677],{"class":187},[102,142225,59302],{"class":119},[102,142227,59628],{"class":187},[102,142229,59357],{"class":108},[102,142231,142232],{"class":187}," -20",[102,142234,59357],{"class":108},[102,142236,266],{"class":119},[102,142238,142239],{"class":104,"line":148},[102,142240,301],{"class":119},[6750,142242],{"style":134273,"src":142243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,142245,142246],{},"在前端中坐标轴的正方向是右和下",[43,142248,142250],{"id":142249},"_123-字体图标","12.3 字体图标",[48,142252,142254],{"id":142253},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,142256,142257],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,142259,142260],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,142262,142263],{},"1.图片文件还是比较大的。",[14,142265,142266],{},"2.图片本身放大和缩小会失真。",[14,142268,142269],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,142271,142272,142273,33605],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[18,142274,142275],{},"字体图标 iconfont",[14,142277,142278,142281,142282,36250],{},[18,142279,142280],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[18,142283,142284],{},"展示的是图标，本质属于字体",[48,142286,142288],{"id":142287},"_1232-字体图标的优点","12.3.2 字体图标的优点",[59,142290,142291,142296,142299,142302,142305],{},[62,142292,142293,142295],{},[18,142294,33741],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[62,142297,142298],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[62,142300,142301],{},"兼容性：几乎支持所有的浏览器，请放心使用",[62,142303,142304],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[62,142306,142307],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[48,142309,142311],{"id":142310},"_1233-字体库下载网站","12.3.3 字体库下载网站",[59,142313,142314],{},[62,142315,142316,142317],{},"icomoon字体库：",[9275,142318,142321],{"href":142319,"rel":142320},"http:\u002F\u002Ficomoon.io\u002F",[31729],"http:\u002F\u002Ficomoon.io",[14,142323,142324],{},"进去之后点icomoon app",[6750,142326],{"style":134273,"src":142327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,142329,142330],{},"可以对其编辑：",[6750,142332],{"style":134273,"src":142333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,142335,142336],{},"生成字体：",[6750,142338],{"style":134273,"src":142339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,142341,142342],{},"下载：",[6750,142344],{"style":134273,"src":142345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[59,142347,142348],{},[62,142349,142350,142351],{},"阿里iconfont字体库： ",[9275,142352,142353],{"href":142353,"rel":142354},"http:\u002F\u002Fwww.iconfont.cn\u002F",[31729],[48,142356,142358],{"id":142357},"_1234-字体图标的引入","12.3.4 字体图标的引入",[87,142360,142361],{},[62,142362,142363,142364,142367],{},"把下载包里面的 ",[18,142365,142366],{},"fonts"," 文件夹放入页面根目录下",[6750,142369],{"style":134273,"src":142370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[87,142372,142373],{"start":116},[62,142374,142375],{},"字体文件格式",[9177,142377,142378,142387],{},[9180,142379,142380],{},[9183,142381,142382,142385],{},[9186,142383,142384],{"align":31600},"格式",[9186,142386,31604],{"align":31600},[9223,142388,142389,142399,142409,142419],{},[9183,142390,142391,142396],{},[9228,142392,142393],{"align":31600},[18,142394,142395],{},".ttf",[9228,142397,142398],{"align":31600},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[9183,142400,142401,142406],{},[9228,142402,142403],{"align":31600},[18,142404,142405],{},".woff",[9228,142407,142408],{"align":31600},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[9183,142410,142411,142416],{},[9228,142412,142413],{"align":31600},[18,142414,142415],{},".eot",[9228,142417,142418],{"align":31600},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[9183,142420,142421,142426],{},[9228,142422,142423],{"align":31600},[18,142424,142425],{},"svg",[9228,142427,142428],{"align":31600},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[87,142430,142431],{"start":123},[62,142432,142433],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[93,142435,142437],{"className":134417,"code":142436,"language":134419,"meta":98,"style":98},"\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",[83,142438,142439,142444,142451,142463,142479,142504,142525,142545,142565,142569,142575,142585,142596],{"__ignoreMap":98},[102,142440,142441],{"class":104,"line":105},[102,142442,142443],{"class":126},"\u002F* 引入字体图标 *\u002F\n",[102,142445,142446,142449],{"class":104,"line":116},[102,142447,142448],{"class":108},"@font-face",[102,142450,1077],{"class":119},[102,142452,142453,142456,142458,142461],{"class":104,"line":123},[102,142454,142455],{"class":187},"  font-family",[102,142457,59302],{"class":119},[102,142459,142460],{"class":278},"'icomoon'",[102,142462,266],{"class":119},[102,142464,142465,142468,142470,142472,142474,142477],{"class":104,"line":130},[102,142466,142467],{"class":187},"  src",[102,142469,59302],{"class":119},[102,142471,69591],{"class":187},[102,142473,380],{"class":119},[102,142475,142476],{"class":278},"'fonts\u002Ficomoon.eot'",[102,142478,552],{"class":119},[102,142480,142481,142483,142485,142487,142489,142492,142494,142497,142499,142502],{"class":104,"line":136},[102,142482,142467],{"class":187},[102,142484,59302],{"class":119},[102,142486,69591],{"class":187},[102,142488,380],{"class":119},[102,142490,142491],{"class":278},"'fonts\u002Ficomoon.eot?#iefix'",[102,142493,22445],{"class":119},[102,142495,142496],{"class":187},"format",[102,142498,380],{"class":119},[102,142500,142501],{"class":278},"'embedded-opentype'",[102,142503,45912],{"class":119},[102,142505,142506,142509,142511,142514,142516,142518,142520,142523],{"class":104,"line":142},[102,142507,142508],{"class":187},"       url",[102,142510,380],{"class":119},[102,142512,142513],{"class":278},"'fonts\u002Ficomoon.woff'",[102,142515,22445],{"class":119},[102,142517,142496],{"class":187},[102,142519,380],{"class":119},[102,142521,142522],{"class":278},"'woff'",[102,142524,45912],{"class":119},[102,142526,142527,142529,142531,142534,142536,142538,142540,142543],{"class":104,"line":148},[102,142528,142508],{"class":187},[102,142530,380],{"class":119},[102,142532,142533],{"class":278},"'fonts\u002Ficomoon.ttf'",[102,142535,22445],{"class":119},[102,142537,142496],{"class":187},[102,142539,380],{"class":119},[102,142541,142542],{"class":278},"'truetype'",[102,142544,45912],{"class":119},[102,142546,142547,142549,142551,142554,142556,142558,142560,142563],{"class":104,"line":157},[102,142548,142508],{"class":187},[102,142550,380],{"class":119},[102,142552,142553],{"class":278},"'fonts\u002Ficomoon.svg#icomoon'",[102,142555,22445],{"class":119},[102,142557,142496],{"class":187},[102,142559,380],{"class":119},[102,142561,142562],{"class":278},"'svg'",[102,142564,552],{"class":119},[102,142566,142567],{"class":104,"line":163},[102,142568,301],{"class":119},[102,142570,142571,142573],{"class":104,"line":175},[102,142572,142174],{"class":112},[102,142574,1077],{"class":119},[102,142576,142577,142579,142581,142583],{"class":104,"line":181},[102,142578,142455],{"class":187},[102,142580,59302],{"class":119},[102,142582,142460],{"class":278},[102,142584,266],{"class":119},[102,142586,142587,142590,142592,142594],{"class":104,"line":202},[102,142588,142589],{"class":187},"  font-style",[102,142591,59302],{"class":119},[102,142593,71706],{"class":187},[102,142595,266],{"class":119},[102,142597,142598],{"class":104,"line":208},[102,142599,301],{"class":119},[14,142601,142602],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[6750,142604],{"style":134273,"src":142605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[87,142607,142608],{"start":130},[62,142609,142610],{},"添加字体",[6750,142612],{"style":134273,"src":142613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,142615,142616],{},"复制：",[6750,142618],{"style":134273,"src":142619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,142621,142622],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[87,142624,142625],{"start":136},[62,142626,142627],{},"代码展示：",[93,142629,142630],{"className":134417,"code":142436,"language":134419,"meta":98,"style":98},[83,142631,142632,142636,142642,142652,142666,142688,142706,142724,142742,142746,142752,142762,142772],{"__ignoreMap":98},[102,142633,142634],{"class":104,"line":105},[102,142635,142443],{"class":126},[102,142637,142638,142640],{"class":104,"line":116},[102,142639,142448],{"class":108},[102,142641,1077],{"class":119},[102,142643,142644,142646,142648,142650],{"class":104,"line":123},[102,142645,142455],{"class":187},[102,142647,59302],{"class":119},[102,142649,142460],{"class":278},[102,142651,266],{"class":119},[102,142653,142654,142656,142658,142660,142662,142664],{"class":104,"line":130},[102,142655,142467],{"class":187},[102,142657,59302],{"class":119},[102,142659,69591],{"class":187},[102,142661,380],{"class":119},[102,142663,142476],{"class":278},[102,142665,552],{"class":119},[102,142667,142668,142670,142672,142674,142676,142678,142680,142682,142684,142686],{"class":104,"line":136},[102,142669,142467],{"class":187},[102,142671,59302],{"class":119},[102,142673,69591],{"class":187},[102,142675,380],{"class":119},[102,142677,142491],{"class":278},[102,142679,22445],{"class":119},[102,142681,142496],{"class":187},[102,142683,380],{"class":119},[102,142685,142501],{"class":278},[102,142687,45912],{"class":119},[102,142689,142690,142692,142694,142696,142698,142700,142702,142704],{"class":104,"line":142},[102,142691,142508],{"class":187},[102,142693,380],{"class":119},[102,142695,142513],{"class":278},[102,142697,22445],{"class":119},[102,142699,142496],{"class":187},[102,142701,380],{"class":119},[102,142703,142522],{"class":278},[102,142705,45912],{"class":119},[102,142707,142708,142710,142712,142714,142716,142718,142720,142722],{"class":104,"line":148},[102,142709,142508],{"class":187},[102,142711,380],{"class":119},[102,142713,142533],{"class":278},[102,142715,22445],{"class":119},[102,142717,142496],{"class":187},[102,142719,380],{"class":119},[102,142721,142542],{"class":278},[102,142723,45912],{"class":119},[102,142725,142726,142728,142730,142732,142734,142736,142738,142740],{"class":104,"line":157},[102,142727,142508],{"class":187},[102,142729,380],{"class":119},[102,142731,142553],{"class":278},[102,142733,22445],{"class":119},[102,142735,142496],{"class":187},[102,142737,380],{"class":119},[102,142739,142562],{"class":278},[102,142741,552],{"class":119},[102,142743,142744],{"class":104,"line":163},[102,142745,301],{"class":119},[102,142747,142748,142750],{"class":104,"line":175},[102,142749,142174],{"class":112},[102,142751,1077],{"class":119},[102,142753,142754,142756,142758,142760],{"class":104,"line":181},[102,142755,142455],{"class":187},[102,142757,59302],{"class":119},[102,142759,142460],{"class":278},[102,142761,266],{"class":119},[102,142763,142764,142766,142768,142770],{"class":104,"line":202},[102,142765,142589],{"class":187},[102,142767,59302],{"class":119},[102,142769,71706],{"class":187},[102,142771,266],{"class":119},[102,142773,142774],{"class":104,"line":208},[102,142775,301],{"class":119},[6750,142777],{"style":134273,"src":142778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,142780,142781],{},"更加细节展示：",[87,142783,142784],{},[62,142785,142786],{},"html 标签内添加小图标",[6750,142788],{"style":134273,"src":142789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[87,142791,142792],{"start":116},[62,142793,142794],{},"给标签定义字体",[93,142796,142797],{"className":135164,"code":138521,"language":135166,"meta":98,"style":98},[83,142798,142799,142803,142817,142821],{"__ignoreMap":98},[102,142800,142801],{"class":104,"line":105},[102,142802,138528],{"class":126},[102,142804,142805,142807,142809,142811,142813,142815],{"class":104,"line":116},[102,142806,1208],{"class":119},[102,142808,59476],{"class":59165},[102,142810,61351],{"class":112},[102,142812,260],{"class":119},[102,142814,138541],{"class":278},[102,142816,59172],{"class":119},[102,142818,142819],{"class":104,"line":123},[102,142820,138548],{"class":119},[102,142822,142823,142825,142827],{"class":104,"line":130},[102,142824,59650],{"class":119},[102,142826,59476],{"class":59165},[102,142828,59172],{"class":119},[14,142830,142831],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[6750,142833],{"style":134273,"src":142834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[48,142836,142838],{"id":142837},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,142840,142841],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,142843,142844,142845,142848],{},"把压缩包里面的 ",[18,142846,142847],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,142850,142851],{},"打开网站，点下方：",[6750,142853],{"style":134273,"src":142854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[6750,142856],{"style":134273,"src":142857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[6750,142859],{"style":134273,"src":142860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,142862,142863],{},"点yes重新加载",[14,142865,142866],{},"然后重复之前的操作就可以实现了",[14,142868,142869],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[48,142871,142873],{"id":142872},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[6750,142875],{"style":134273,"src":142876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[8955,142878,142879],{},"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":98,"searchDepth":116,"depth":116,"links":142881},[142882,142888,142893],{"id":141485,"depth":116,"text":141486,"children":142883},[142884,142885,142886,142887],{"id":141497,"depth":123,"text":141498},{"id":141526,"depth":123,"text":141527},{"id":141554,"depth":123,"text":141555},{"id":141612,"depth":123,"text":141613},{"id":142084,"depth":116,"text":142085,"children":142889},[142890,142891,142892],{"id":142088,"depth":123,"text":142089},{"id":142133,"depth":123,"text":142134},{"id":142149,"depth":123,"text":142150},{"id":142249,"depth":116,"text":142250,"children":142894},[142895,142896,142897,142898,142899,142900],{"id":142253,"depth":123,"text":142254},{"id":142287,"depth":123,"text":142288},{"id":142310,"depth":123,"text":142311},{"id":142357,"depth":123,"text":142358},{"id":142837,"depth":123,"text":142838},{"id":142872,"depth":123,"text":142873},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":141477,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":142907,"title":142908,"body":142909,"description":31240,"extension":8978,"meta":144136,"navigation":651,"path":144137,"seo":144138,"stem":144139,"__hash__":144140},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":142910,"toc":144117},[142911,142914,142918,142921,142935,143003,143033,143036,143040,143044,143146,143193,143197,143200,143203,143237,143240,143243,143246,143249,143252,143255,143258,143260,143263,143266,143269,143272,143275,143278,143281,143309,143312,143316,143319,143326,143329,143332,143358,143361,143365,143368,143371,143378,143382,143385,143387,143419,143422,143425,143437,143443,143446,143449,143452,143454,143458,143461,143464,143467,143512,143516,143518,143521,143528,143570,143573,143577,143582,143596,143600,143603,143606,143609,143612,143615,143649,143652,143655,143709,143712,143715,143718,143721,143773,143776,143779,143828,143832,143834,143837,143840,143843,143846,143849,143907,143910,143916,143919,143922,143954,143957,143961,143965,143968,144000,144004,144007,144051,144055,144058,144061,144064,144067,144070,144073,144076,144078,144081,144083,144086,144089,144092,144095,144100,144103,144105,144108,144111,144114],[10,142912,142908],{"id":142913},"_13-界面样式与布局技巧",[43,142915,142917],{"id":142916},"_131-css三角","13.1 css三角",[14,142919,142920],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[59,142922,142923,142926,142929,142932],{},[62,142924,142925],{},"用css 边框可以模拟三角效果",[62,142927,142928],{},"宽度高度为0",[62,142930,142931],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[62,142933,142934],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[93,142936,142938],{"className":134417,"code":142937,"language":134419,"meta":98,"style":98},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[83,142939,142940,142945,142952,142962,142972,142988,142999],{"__ignoreMap":98},[102,142941,142942],{"class":104,"line":105},[102,142943,142944],{"class":126},"\u002F* CSS 实现三角形 *\u002F\n",[102,142946,142947,142950],{"class":104,"line":116},[102,142948,142949],{"class":112},".triangle",[102,142951,1077],{"class":119},[102,142953,142954,142956,142958,142960],{"class":104,"line":123},[102,142955,78433],{"class":187},[102,142957,59302],{"class":119},[102,142959,8423],{"class":187},[102,142961,266],{"class":119},[102,142963,142964,142966,142968,142970],{"class":104,"line":130},[102,142965,78653],{"class":187},[102,142967,59302],{"class":119},[102,142969,8423],{"class":187},[102,142971,266],{"class":119},[102,142973,142974,142976,142978,142980,142982,142984,142986],{"class":104,"line":136},[102,142975,78761],{"class":187},[102,142977,59302],{"class":119},[102,142979,263],{"class":187},[102,142981,59357],{"class":108},[102,142983,59386],{"class":187},[102,142985,71856],{"class":187},[102,142987,266],{"class":119},[102,142989,142990,142993,142995,142997],{"class":104,"line":142},[102,142991,142992],{"class":187},"  border-bottom-color",[102,142994,59302],{"class":119},[102,142996,70234],{"class":187},[102,142998,266],{"class":119},[102,143000,143001],{"class":104,"line":148},[102,143002,301],{"class":119},[93,143004,143005],{"className":134417,"code":138574,"language":134419,"meta":98,"style":98},[83,143006,143007,143013,143029],{"__ignoreMap":98},[102,143008,143009,143011],{"class":104,"line":105},[102,143010,59476],{"class":59165},[102,143012,1077],{"class":119},[102,143014,143015,143017,143019,143021,143023,143025,143027],{"class":104,"line":116},[102,143016,78761],{"class":187},[102,143018,59302],{"class":119},[102,143020,7039],{"class":187},[102,143022,59357],{"class":108},[102,143024,59386],{"class":187},[102,143026,137809],{"class":187},[102,143028,266],{"class":119},[102,143030,143031],{"class":104,"line":123},[102,143032,301],{"class":119},[6750,143034],{"style":134273,"src":143035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[43,143037,143039],{"id":143038},"_132-css用户界面样式","13.2 css用户界面样式",[48,143041,143043],{"id":143042},"_1321-鼠标样式","13.2.1 鼠标样式",[93,143045,143047],{"className":134417,"code":143046,"language":134419,"meta":98,"style":98},"\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",[83,143048,143049,143054,143073,143091,143110,143127],{"__ignoreMap":98},[102,143050,143051],{"class":104,"line":105},[102,143052,143053],{"class":126},"\u002F* 鼠标样式 *\u002F\n",[102,143055,143056,143058,143060,143063,143065,143067,143070],{"class":104,"line":116},[102,143057,59476],{"class":59165},[102,143059,87672],{"class":119},[102,143061,143062],{"class":187},"cursor",[102,143064,59302],{"class":119},[102,143066,69895],{"class":187},[102,143068,143069],{"class":119},"; }   ",[102,143071,143072],{"class":126},"\u002F* 手型 *\u002F\n",[102,143074,143075,143077,143079,143081,143083,143086,143088],{"class":104,"line":123},[102,143076,59476],{"class":59165},[102,143078,87672],{"class":119},[102,143080,143062],{"class":187},[102,143082,59302],{"class":119},[102,143084,143085],{"class":187},"default",[102,143087,143069],{"class":119},[102,143089,143090],{"class":126},"\u002F* 默认 *\u002F\n",[102,143092,143093,143095,143097,143099,143101,143104,143107],{"class":104,"line":130},[102,143094,59476],{"class":59165},[102,143096,87672],{"class":119},[102,143098,143062],{"class":187},[102,143100,59302],{"class":119},[102,143102,143103],{"class":187},"move",[102,143105,143106],{"class":119},"; }      ",[102,143108,143109],{"class":126},"\u002F* 移动 *\u002F\n",[102,143111,143112,143114,143116,143118,143120,143122,143124],{"class":104,"line":136},[102,143113,59476],{"class":59165},[102,143115,87672],{"class":119},[102,143117,143062],{"class":187},[102,143119,59302],{"class":119},[102,143121,6778],{"class":187},[102,143123,143106],{"class":119},[102,143125,143126],{"class":126},"\u002F* 文本 *\u002F\n",[102,143128,143129,143131,143133,143135,143137,143140,143143],{"class":104,"line":142},[102,143130,59476],{"class":59165},[102,143132,87672],{"class":119},[102,143134,143062],{"class":187},[102,143136,59302],{"class":119},[102,143138,143139],{"class":187},"not-allowed",[102,143141,143142],{"class":119},"; } ",[102,143144,143145],{"class":126},"\u002F* 禁止 *\u002F\n",[9177,143147,143148,143156],{},[9180,143149,143150],{},[9183,143151,143152,143154],{},[9186,143153,134881],{"align":31600},[9186,143155,35354],{"align":31600},[9223,143157,143158,143165,143172,143179,143186],{},[9183,143159,143160,143162],{},[9228,143161,143085],{"align":31600},[9228,143163,143164],{"align":31600},"小白 默认",[9183,143166,143167,143169],{},[9228,143168,69895],{"align":31600},[9228,143170,143171],{"align":31600},"小手",[9183,143173,143174,143176],{},[9228,143175,143103],{"align":31600},[9228,143177,143178],{"align":31600},"移动",[9183,143180,143181,143183],{},[9228,143182,6778],{"align":31600},[9228,143184,143185],{"align":31600},"文本",[9183,143187,143188,143190],{},[9228,143189,143139],{"align":31600},[9228,143191,143192],{"align":31600},"禁止",[48,143194,143196],{"id":143195},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,143198,143199],{},"去除表单轮廓线",[14,143201,143202],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[93,143204,143205],{"className":134417,"code":137781,"language":134419,"meta":98,"style":98},[83,143206,143207,143211,143217,143233],{"__ignoreMap":98},[102,143208,143209],{"class":104,"line":105},[102,143210,137788],{"class":126},[102,143212,143213,143215],{"class":104,"line":116},[102,143214,59476],{"class":59165},[102,143216,1077],{"class":119},[102,143218,143219,143221,143223,143225,143227,143229,143231],{"class":104,"line":123},[102,143220,78761],{"class":187},[102,143222,59302],{"class":119},[102,143224,7039],{"class":187},[102,143226,59357],{"class":108},[102,143228,59386],{"class":187},[102,143230,137809],{"class":187},[102,143232,266],{"class":119},[102,143234,143235],{"class":104,"line":130},[102,143236,301],{"class":119},[14,143238,143239],{},"文本域：",[6750,143241],{"style":134273,"src":143242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,143244,143245],{},"此时会有一个空白区域",[6750,143247],{"style":134273,"src":143248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,143250,143251],{},"写在同一行就不会出现这个问题",[6750,143253],{"style":134273,"src":143254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,143256,143257],{},"文本域是行内块元素，一定记住！！！",[14,143259,106098],{},[6750,143261],{"style":134273,"src":143262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,143264,143265],{},"文本域尽量放在一行",[14,143267,143268],{},"知识回顾：cols是列，rols是行",[6750,143270],{"style":134273,"src":143271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,143273,143274],{},"它可以进行拖动，显然这是我们不愿意看到的",[6750,143276],{"style":134273,"src":143277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,143279,143280],{},"使用resize进行解决",[93,143282,143284],{"className":134417,"code":143283,"language":134419,"meta":98,"style":98},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[83,143285,143286,143292,143305],{"__ignoreMap":98},[102,143287,143288,143290],{"class":104,"line":105},[102,143289,61686],{"class":59165},[102,143291,1077],{"class":119},[102,143293,143294,143296,143298,143300,143302],{"class":104,"line":116},[102,143295,78663],{"class":187},[102,143297,59302],{"class":119},[102,143299,62602],{"class":187},[102,143301,138280],{"class":119},[102,143303,143304],{"class":126},"\u002F* 取消表单轮廓线 *\u002F\n",[102,143306,143307],{"class":104,"line":123},[102,143308,301],{"class":119},[14,143310,143311],{},"此时就无法通过右下方实现拖动了",[48,143313,143315],{"id":143314},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,143317,143318],{},"实现一个盒子中的文字和图片对齐",[14,143320,143321,143322,143325],{},"用于设置一个元素的 ",[18,143323,143324],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,143327,143328],{},"图片和文字默认是基线对齐",[6750,143330],{"style":134273,"src":143331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[93,143333,143334],{"className":134417,"code":143283,"language":134419,"meta":98,"style":98},[83,143335,143336,143342,143354],{"__ignoreMap":98},[102,143337,143338,143340],{"class":104,"line":105},[102,143339,61686],{"class":59165},[102,143341,1077],{"class":119},[102,143343,143344,143346,143348,143350,143352],{"class":104,"line":116},[102,143345,78663],{"class":187},[102,143347,59302],{"class":119},[102,143349,62602],{"class":187},[102,143351,138280],{"class":119},[102,143353,143304],{"class":126},[102,143355,143356],{"class":104,"line":123},[102,143357,301],{"class":119},[6750,143359],{"style":134273,"src":143360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[7601,143362,143364],{"id":143363},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,143366,143367],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[6750,143369],{"style":134273,"src":143370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,143372,143373,143374,143377],{},"此时可以给图片、表单这些行内块元素的 ",[18,143375,143376],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[7601,143379,143381],{"id":143380},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,143383,143384],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,143386,32],{},[93,143388,143390],{"className":134417,"code":143389,"language":134419,"meta":98,"style":98},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[83,143391,143392,143397,143403,143415],{"__ignoreMap":98},[102,143393,143394],{"class":104,"line":105},[102,143395,143396],{"class":126},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[102,143398,143399,143401],{"class":104,"line":116},[102,143400,6750],{"class":59165},[102,143402,1077],{"class":119},[102,143404,143405,143408,143410,143413],{"class":104,"line":123},[102,143406,143407],{"class":187},"  vertical-align",[102,143409,59302],{"class":119},[102,143411,143412],{"class":187},"middle",[102,143414,266],{"class":119},[102,143416,143417],{"class":104,"line":130},[102,143418,301],{"class":119},[6750,143420],{"style":134273,"src":143421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,143423,143424],{},"主要解决方法有两种：",[87,143426,143427],{},[62,143428,143429,143432,143433,143436],{},[18,143430,143431],{},"给图片"," 添加 ",[18,143434,143435],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,143438,143439,143440],{},"2.把图片转换为块级元素 ",[18,143441,143442],{},"display: block",[14,143444,143445],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,143447,143448],{},"img {",[14,143450,143451],{},"vertical-align:middle;",[14,143453,9967],{},[48,143455,143457],{"id":143456},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,143459,143460],{},"效果：",[6750,143462],{"style":134273,"src":143463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,143465,143466],{},"单行文本溢出显示省略号--必须满足三个条件：",[93,143468,143470],{"className":134417,"code":143469,"language":134419,"meta":98,"style":98},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[83,143471,143472,143477,143483,143493,143498,143508],{"__ignoreMap":98},[102,143473,143474],{"class":104,"line":105},[102,143475,143476],{"class":126},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[102,143478,143479,143481],{"class":104,"line":116},[102,143480,6750],{"class":59165},[102,143482,1077],{"class":119},[102,143484,143485,143487,143489,143491],{"class":104,"line":123},[102,143486,143407],{"class":187},[102,143488,59302],{"class":119},[102,143490,143412],{"class":187},[102,143492,266],{"class":119},[102,143494,143495],{"class":104,"line":130},[102,143496,143497],{"class":126},"  \u002F* 或 *\u002F\n",[102,143499,143500,143502,143504,143506],{"class":104,"line":136},[102,143501,136033],{"class":187},[102,143503,59302],{"class":119},[102,143505,68734],{"class":187},[102,143507,266],{"class":119},[102,143509,143510],{"class":104,"line":142},[102,143511,301],{"class":119},[48,143513,143515],{"id":143514},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,143517,143460],{},[6750,143519],{"style":134273,"src":143520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,143522,143523,143524,143527],{},"多行文本溢出显示省略号， ",[18,143525,143526],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[93,143529,143530],{"className":134417,"code":143469,"language":134419,"meta":98,"style":98},[83,143531,143532,143536,143542,143552,143556,143566],{"__ignoreMap":98},[102,143533,143534],{"class":104,"line":105},[102,143535,143476],{"class":126},[102,143537,143538,143540],{"class":104,"line":116},[102,143539,6750],{"class":59165},[102,143541,1077],{"class":119},[102,143543,143544,143546,143548,143550],{"class":104,"line":123},[102,143545,143407],{"class":187},[102,143547,59302],{"class":119},[102,143549,143412],{"class":187},[102,143551,266],{"class":119},[102,143553,143554],{"class":104,"line":130},[102,143555,143497],{"class":126},[102,143557,143558,143560,143562,143564],{"class":104,"line":136},[102,143559,136033],{"class":187},[102,143561,59302],{"class":119},[102,143563,68734],{"class":187},[102,143565,266],{"class":119},[102,143567,143568],{"class":104,"line":142},[102,143569,301],{"class":119},[14,143571,143572],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[43,143574,143576],{"id":143575},"_133-常见布局技巧","13.3 常见布局技巧",[14,143578,143579],{},[18,143580,143581],{},"巧妙利用一个技术更快更好的布局：",[87,143583,143584,143587,143590,143593],{},[62,143585,143586],{},"margin负值的运用",[62,143588,143589],{},"文字围绕浮动元素",[62,143591,143592],{},"行内块的巧妙运用",[62,143594,143595],{},"CSS三角强化",[48,143597,143599],{"id":143598},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,143601,143602],{},"应用场景：",[6750,143604],{"style":134273,"src":143605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[6750,143607],{"style":134273,"src":143608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,143610,143611],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,143613,143614],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[93,143616,143617],{"className":134417,"code":137781,"language":134419,"meta":98,"style":98},[83,143618,143619,143623,143629,143645],{"__ignoreMap":98},[102,143620,143621],{"class":104,"line":105},[102,143622,137788],{"class":126},[102,143624,143625,143627],{"class":104,"line":116},[102,143626,59476],{"class":59165},[102,143628,1077],{"class":119},[102,143630,143631,143633,143635,143637,143639,143641,143643],{"class":104,"line":123},[102,143632,78761],{"class":187},[102,143634,59302],{"class":119},[102,143636,7039],{"class":187},[102,143638,59357],{"class":108},[102,143640,59386],{"class":187},[102,143642,137809],{"class":187},[102,143644,266],{"class":119},[102,143646,143647],{"class":104,"line":130},[102,143648,301],{"class":119},[6750,143650],{"style":134273,"src":143651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,143653,143654],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[93,143656,143658],{"className":134417,"code":143657,"language":134419,"meta":98,"style":98},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[83,143659,143660,143665,143671,143681,143693,143705],{"__ignoreMap":98},[102,143661,143662],{"class":104,"line":105},[102,143663,143664],{"class":126},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[102,143666,143667,143669],{"class":104,"line":116},[102,143668,138265],{"class":112},[102,143670,1077],{"class":119},[102,143672,143673,143675,143677,143679],{"class":104,"line":123},[102,143674,140223],{"class":187},[102,143676,59302],{"class":119},[102,143678,62629],{"class":187},[102,143680,266],{"class":119},[102,143682,143683,143685,143687,143689,143691],{"class":104,"line":130},[102,143684,140237],{"class":187},[102,143686,59302],{"class":119},[102,143688,263],{"class":187},[102,143690,59357],{"class":108},[102,143692,266],{"class":119},[102,143694,143695,143697,143699,143701,143703],{"class":104,"line":136},[102,143696,140254],{"class":187},[102,143698,59302],{"class":119},[102,143700,5016],{"class":187},[102,143702,59357],{"class":108},[102,143704,266],{"class":119},[102,143706,143707],{"class":104,"line":142},[102,143708,301],{"class":119},[14,143710,143711],{},"加上上述代码会发现：",[6750,143713],{"style":134273,"src":143714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,143716,143717],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,143719,143720],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[93,143722,143723],{"className":134417,"code":143657,"language":134419,"meta":98,"style":98},[83,143724,143725,143729,143735,143745,143757,143769],{"__ignoreMap":98},[102,143726,143727],{"class":104,"line":105},[102,143728,143664],{"class":126},[102,143730,143731,143733],{"class":104,"line":116},[102,143732,138265],{"class":112},[102,143734,1077],{"class":119},[102,143736,143737,143739,143741,143743],{"class":104,"line":123},[102,143738,140223],{"class":187},[102,143740,59302],{"class":119},[102,143742,62629],{"class":187},[102,143744,266],{"class":119},[102,143746,143747,143749,143751,143753,143755],{"class":104,"line":130},[102,143748,140237],{"class":187},[102,143750,59302],{"class":119},[102,143752,263],{"class":187},[102,143754,59357],{"class":108},[102,143756,266],{"class":119},[102,143758,143759,143761,143763,143765,143767],{"class":104,"line":136},[102,143760,140254],{"class":187},[102,143762,59302],{"class":119},[102,143764,5016],{"class":187},[102,143766,59357],{"class":108},[102,143768,266],{"class":119},[102,143770,143771],{"class":104,"line":142},[102,143772,301],{"class":119},[14,143774,143775],{},"解决方式2：",[14,143777,143778],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[93,143780,143782],{"className":134417,"code":143781,"language":134419,"meta":98,"style":98},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[83,143783,143784,143790,143800,143812,143824],{"__ignoreMap":98},[102,143785,143786,143788],{"class":104,"line":105},[102,143787,59476],{"class":59165},[102,143789,1077],{"class":119},[102,143791,143792,143794,143796,143798],{"class":104,"line":116},[102,143793,140223],{"class":187},[102,143795,59302],{"class":119},[102,143797,62629],{"class":187},[102,143799,266],{"class":119},[102,143801,143802,143804,143806,143808,143810],{"class":104,"line":123},[102,143803,140237],{"class":187},[102,143805,59302],{"class":119},[102,143807,263],{"class":187},[102,143809,59357],{"class":108},[102,143811,266],{"class":119},[102,143813,143814,143816,143818,143820,143822],{"class":104,"line":130},[102,143815,140254],{"class":187},[102,143817,59302],{"class":119},[102,143819,5016],{"class":187},[102,143821,59357],{"class":108},[102,143823,266],{"class":119},[102,143825,143826],{"class":104,"line":136},[102,143827,301],{"class":119},[48,143829,143831],{"id":143830},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,143833,143602],{},[6750,143835],{"style":134273,"src":143836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,143838,143839],{},"实现结构图：",[6750,143841],{"style":134273,"src":143842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,143844,143845],{},"巧妙运用浮动元素不会压住文字的特性",[14,143847,143848],{},"代码显示：",[93,143850,143852],{"className":134417,"code":143851,"language":134419,"meta":98,"style":98},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[83,143853,143854,143860,143870,143874,143879,143883,143889,143903],{"__ignoreMap":98},[102,143855,143856,143858],{"class":104,"line":105},[102,143857,138265],{"class":112},[102,143859,1077],{"class":119},[102,143861,143862,143864,143866,143868],{"class":104,"line":116},[102,143863,138897],{"class":187},[102,143865,59302],{"class":119},[102,143867,31600],{"class":187},[102,143869,266],{"class":119},[102,143871,143872],{"class":104,"line":123},[102,143873,301],{"class":119},[102,143875,143876],{"class":104,"line":130},[102,143877,143878],{"class":119},"```Css\n",[102,143880,143881],{"class":104,"line":136},[102,143882,138260],{"class":126},[102,143884,143885,143887],{"class":104,"line":142},[102,143886,138265],{"class":112},[102,143888,1077],{"class":119},[102,143890,143891,143893,143895,143897,143899,143901],{"class":104,"line":148},[102,143892,78335],{"class":187},[102,143894,59302],{"class":119},[102,143896,8423],{"class":187},[102,143898,59421],{"class":187},[102,143900,138280],{"class":119},[102,143902,138283],{"class":126},[102,143904,143905],{"class":104,"line":157},[102,143906,301],{"class":119},[14,143908,143909],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[93,143911,143914],{"className":143912,"code":143913,"language":6778},[6776],"\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",[83,143915,143913],{"__ignoreMap":98},[6750,143917],{"style":134273,"src":143918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,143920,143921],{},"最终展示结果：",[93,143923,143924],{"className":134417,"code":138253,"language":134419,"meta":98,"style":98},[83,143925,143926,143930,143936,143950],{"__ignoreMap":98},[102,143927,143928],{"class":104,"line":105},[102,143929,138260],{"class":126},[102,143931,143932,143934],{"class":104,"line":116},[102,143933,138265],{"class":112},[102,143935,1077],{"class":119},[102,143937,143938,143940,143942,143944,143946,143948],{"class":104,"line":123},[102,143939,78335],{"class":187},[102,143941,59302],{"class":119},[102,143943,8423],{"class":187},[102,143945,59421],{"class":187},[102,143947,138280],{"class":119},[102,143949,138283],{"class":126},[102,143951,143952],{"class":104,"line":130},[102,143953,301],{"class":119},[6750,143955],{"style":134273,"src":143956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[43,143958,143960],{"id":143959},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[48,143962,143964],{"id":143963},"_1341-原理","13.4.1 原理",[6750,143966],{"style":134273,"src":143967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[93,143969,143970],{"className":134417,"code":138253,"language":134419,"meta":98,"style":98},[83,143971,143972,143976,143982,143996],{"__ignoreMap":98},[102,143973,143974],{"class":104,"line":105},[102,143975,138260],{"class":126},[102,143977,143978,143980],{"class":104,"line":116},[102,143979,138265],{"class":112},[102,143981,1077],{"class":119},[102,143983,143984,143986,143988,143990,143992,143994],{"class":104,"line":123},[102,143985,78335],{"class":187},[102,143987,59302],{"class":119},[102,143989,8423],{"class":187},[102,143991,59421],{"class":187},[102,143993,138280],{"class":119},[102,143995,138283],{"class":126},[102,143997,143998],{"class":104,"line":130},[102,143999,301],{"class":119},[48,144001,144003],{"id":144002},"_1342-实例","13.4.2 实例",[6750,144005],{"style":134273,"src":144006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[93,144008,144009],{"className":134417,"code":138883,"language":134419,"meta":98,"style":98},[83,144010,144011,144017,144027,144031,144037,144047],{"__ignoreMap":98},[102,144012,144013,144015],{"class":104,"line":105},[102,144014,138890],{"class":112},[102,144016,1077],{"class":119},[102,144018,144019,144021,144023,144025],{"class":104,"line":116},[102,144020,138897],{"class":187},[102,144022,59302],{"class":119},[102,144024,31600],{"class":187},[102,144026,266],{"class":119},[102,144028,144029],{"class":104,"line":123},[102,144030,301],{"class":119},[102,144032,144033,144035],{"class":104,"line":130},[102,144034,138912],{"class":112},[102,144036,1077],{"class":119},[102,144038,144039,144041,144043,144045],{"class":104,"line":136},[102,144040,138897],{"class":187},[102,144042,59302],{"class":119},[102,144044,80387],{"class":187},[102,144046,266],{"class":119},[102,144048,144049],{"class":104,"line":142},[102,144050,301],{"class":119},[43,144052,144054],{"id":144053},"_135-css的初始化","13.5 css的初始化",[14,144056,144057],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,144059,144060],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,144062,144063],{},"每个网页都必须首先进行 CSS初始化。",[14,144065,144066],{},"这里我们以 京东CSS初始化代码为例。",[14,144068,144069],{},"在网页右键查看网页源代码",[14,144071,144072],{},"找到css的link引入语句",[14,144074,144075],{},"然后ctrl+f 输入body",[14,144077,85091],{},[6750,144079],{"style":134273,"src":144080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,144082,85114],{},[6750,144084],{"style":134273,"src":144085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,144087,144088],{},"③打开了网页上传压缩的代码",[6750,144090],{"style":134273,"src":144091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,144093,144094],{},"④从body前可以查看这个网页的初始化代码",[14,144096,144097],{},[18,144098,144099],{},"Unicode编码字体：",[14,144101,144102],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,144104,91072],{},[14,144106,144107],{},"黑体 \\9ED1\\4F53",[14,144109,144110],{},"宋体 \\5B8B\\4F53",[14,144112,144113],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[8955,144115,144116],{},"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":98,"searchDepth":116,"depth":116,"links":144118},[144119,144120,144127,144131,144135],{"id":142916,"depth":116,"text":142917},{"id":143038,"depth":116,"text":143039,"children":144121},[144122,144123,144124,144125,144126],{"id":143042,"depth":123,"text":143043},{"id":143195,"depth":123,"text":143196},{"id":143314,"depth":123,"text":143315},{"id":143456,"depth":123,"text":143457},{"id":143514,"depth":123,"text":143515},{"id":143575,"depth":116,"text":143576,"children":144128},[144129,144130],{"id":143598,"depth":123,"text":143599},{"id":143830,"depth":123,"text":143831},{"id":143959,"depth":116,"text":143960,"children":144132},[144133,144134],{"id":143963,"depth":123,"text":143964},{"id":144002,"depth":123,"text":144003},{"id":144053,"depth":116,"text":144054},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":142908,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":144142,"title":144143,"body":144144,"description":31240,"extension":8978,"meta":145830,"navigation":651,"path":145831,"seo":145832,"stem":145833,"__hash__":145834},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":144145,"toc":145819},[144146,144149,144153,144157,144160,144167,144170,144173,144211,144214,144216,144230,144234,144243,144247,144252,144255,144258,144261,144296,144301,144304,144334,144337,144342,144345,144348,144378,144381,144435,144438,144442,144447,144459,144462,144466,144496,144499,144504,144507,144537,144540,144544,144561,144565,144569,144572,144605,144608,144612,144615,144618,144621,144624,144627,144738,144741,144744,144747,144849,144852,144856,144860,144864,144867,144907,144910,144912,144928,144932,144935,144940,145021,145024,145027,145153,145158,145161,145169,145172,145177,145262,145265,145269,145272,145275,145279,145299,145304,145388,145391,145396,145399,145402,145480,145483,145486,145489,145492,145495,145500,145503,145506,145578,145581,145586,145589,145686,145689,145695,145698,145701,145704,145707,145710,145713,145716,145719,145723,145728,145731,145764,145769,145772,145813,145816],[10,144147,144143],{"id":144148},"_14-html5与css3新特性",[43,144150,144152],{"id":144151},"_141-html5的新特性","14.1 HTML5的新特性",[48,144154,144156],{"id":144155},"_1411-基本标签","14.1.1 基本标签",[14,144158,144159],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,144161,144162,144163,144166],{},"这些新特性都有兼容性问题，基本是 ",[18,144164,144165],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,144168,144169],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,144171,144172],{},"现在使用的是新特性：",[59,144174,144175,144181,144187,144193,144199,144205],{},[62,144176,144177,144180],{},[83,144178,144179],{},"\u003Cheader>"," 头部标签",[62,144182,144183,144186],{},[83,144184,144185],{},"\u003Cnav>"," 导航标签",[62,144188,144189,144192],{},[83,144190,144191],{},"\u003Carticle>"," 内容标签",[62,144194,144195,144198],{},[83,144196,144197],{},"\u003Csection>"," 定义文档某个区域",[62,144200,144201,144204],{},[83,144202,144203],{},"\u003Caside>"," 侧边栏标签",[62,144206,144207,144210],{},[83,144208,144209],{},"\u003Cfooter>"," 尾部标签",[6750,144212],{"style":134273,"src":144213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,144215,9076],{},[59,144217,144218,144221,144224,144227],{},[62,144219,144220],{},"这种语义化标准主要是针对搜索引擎的",[62,144222,144223],{},"这些标签页面中可以经常使用",[62,144225,144226],{},"在IE9中，需要把这些元素转换为块级元素",[62,144228,144229],{},"移动端更喜欢使用这些标签",[48,144231,144233],{"id":144232},"_1412-多媒体标签","14.1.2 多媒体标签",[14,144235,144236,144237,144239,144240,144242],{},"音频 ",[18,144238,36039],{}," 和视频 ",[18,144241,36048],{}," 两个标签",[7601,144244,144246],{"id":144245},"_14121-视频标签-video","14.1.2.1 视频标签- video",[87,144248,144249],{},[62,144250,144251],{},"支持格式：",[6750,144253],{"style":134273,"src":144254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,144256,144257],{},"尽量使用MP4，兼容性好",[14,144259,144260],{},"用MP4就可以",[93,144262,144264],{"className":135164,"code":144263,"language":135166,"meta":98,"style":98},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[83,144265,144266],{"__ignoreMap":98},[102,144267,144268,144270,144272,144274,144276,144279,144281,144284,144287,144290,144292,144294],{"class":104,"line":105},[102,144269,1208],{"class":119},[102,144271,36048],{"class":59165},[102,144273,63104],{"class":112},[102,144275,260],{"class":119},[102,144277,144278],{"class":278},"\"movie.mp4\"",[102,144280,100288],{"class":112},[102,144282,144283],{"class":112}," autoplay",[102,144285,144286],{"class":112}," muted",[102,144288,144289],{"class":112}," loop",[102,144291,63179],{"class":119},[102,144293,36048],{"class":59165},[102,144295,59172],{"class":119},[87,144297,144298],{"start":116},[62,144299,144300],{},"兼容写法",[14,144302,144303],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[93,144305,144306],{"className":135164,"code":144263,"language":135166,"meta":98,"style":98},[83,144307,144308],{"__ignoreMap":98},[102,144309,144310,144312,144314,144316,144318,144320,144322,144324,144326,144328,144330,144332],{"class":104,"line":105},[102,144311,1208],{"class":119},[102,144313,36048],{"class":59165},[102,144315,63104],{"class":112},[102,144317,260],{"class":119},[102,144319,144278],{"class":278},[102,144321,100288],{"class":112},[102,144323,144283],{"class":112},[102,144325,144286],{"class":112},[102,144327,144289],{"class":112},[102,144329,63179],{"class":119},[102,144331,36048],{"class":59165},[102,144333,59172],{"class":119},[14,144335,144336],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[87,144338,144339],{"start":123},[62,144340,144341],{},"video常用属性",[6750,144343],{"style":134273,"src":144344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,144346,144347],{},"poster属性后面是跟的等待加载图片的地址",[93,144349,144350],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,144351,144352],{"__ignoreMap":98},[102,144353,144354,144356,144358,144360,144362,144364,144366,144368,144370,144372,144374,144376],{"class":104,"line":105},[102,144355,1208],{"class":119},[102,144357,6750],{"class":59165},[102,144359,63104],{"class":112},[102,144361,260],{"class":119},[102,144363,141934],{"class":278},[102,144365,63112],{"class":112},[102,144367,260],{"class":119},[102,144369,141941],{"class":278},[102,144371,141944],{"class":112},[102,144373,260],{"class":119},[102,144375,141949],{"class":278},[102,144377,59172],{"class":119},[14,144379,144380],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[93,144382,144384],{"className":134417,"code":144383,"language":134419,"meta":98,"style":98},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[83,144385,144386,144391,144397,144421,144426,144431],{"__ignoreMap":98},[102,144387,144388],{"class":104,"line":105},[102,144389,144390],{"class":126},"\u002F* 2D 位移 *\u002F\n",[102,144392,144393,144395],{"class":104,"line":116},[102,144394,59476],{"class":59165},[102,144396,1077],{"class":119},[102,144398,144399,144402,144404,144407,144409,144411,144413,144415,144417,144419],{"class":104,"line":123},[102,144400,144401],{"class":187},"  transform",[102,144403,59302],{"class":119},[102,144405,144406],{"class":187},"translate",[102,144408,380],{"class":119},[102,144410,5569],{"class":187},[102,144412,59357],{"class":108},[102,144414,2571],{"class":119},[102,144416,1445],{"class":187},[102,144418,59357],{"class":108},[102,144420,552],{"class":119},[102,144422,144423],{"class":104,"line":130},[102,144424,144425],{"class":126},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[102,144427,144428],{"class":104,"line":136},[102,144429,144430],{"class":126},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[102,144432,144433],{"class":104,"line":142},[102,144434,301],{"class":119},[14,144436,144437],{},"muted:自动静音属性",[7601,144439,144441],{"id":144440},"_14122-音频标签audio","14.1.2.2 音频标签audio",[87,144443,144444],{},[62,144445,144446],{},"基本使用",[14,144448,144449,144450,144455,144456],{},"当前 ",[18,144451,144452],{},[83,144453,144454],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[18,144457,144458],{},"mp3格式",[6750,144460],{"style":134273,"src":144461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[87,144463,144464],{"start":116},[62,144465,144300],{},[93,144467,144468],{"className":135164,"code":144263,"language":135166,"meta":98,"style":98},[83,144469,144470],{"__ignoreMap":98},[102,144471,144472,144474,144476,144478,144480,144482,144484,144486,144488,144490,144492,144494],{"class":104,"line":105},[102,144473,1208],{"class":119},[102,144475,36048],{"class":59165},[102,144477,63104],{"class":112},[102,144479,260],{"class":119},[102,144481,144278],{"class":278},[102,144483,100288],{"class":112},[102,144485,144283],{"class":112},[102,144487,144286],{"class":112},[102,144489,144289],{"class":112},[102,144491,63179],{"class":119},[102,144493,36048],{"class":59165},[102,144495,59172],{"class":119},[14,144497,144498],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[87,144500,144501],{"start":123},[62,144502,144503],{},"常用属性",[6750,144505],{"style":134273,"src":144506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[93,144508,144509],{"className":135164,"code":144263,"language":135166,"meta":98,"style":98},[83,144510,144511],{"__ignoreMap":98},[102,144512,144513,144515,144517,144519,144521,144523,144525,144527,144529,144531,144533,144535],{"class":104,"line":105},[102,144514,1208],{"class":119},[102,144516,36048],{"class":59165},[102,144518,63104],{"class":112},[102,144520,260],{"class":119},[102,144522,144278],{"class":278},[102,144524,100288],{"class":112},[102,144526,144283],{"class":112},[102,144528,144286],{"class":112},[102,144530,144289],{"class":112},[102,144532,63179],{"class":119},[102,144534,36048],{"class":59165},[102,144536,59172],{"class":119},[14,144538,144539],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[7601,144541,144543],{"id":144542},"_14123-总结","14.1.2.3 总结",[59,144545,144546,144549,144552,144555,144558],{},[62,144547,144548],{},"音频标签和视频标签使用方式基本一致",[62,144550,144551],{},"浏览器支持情况不同",[62,144553,144554],{},"谷歌浏览器把音频和视频自动播放禁止了",[62,144556,144557],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[62,144559,144560],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[48,144562,144564],{"id":144563},"_1413-表单元素","14.1.3 表单元素",[7601,144566,144568],{"id":144567},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[6750,144570],{"style":134273,"src":144571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[93,144573,144575],{"className":135164,"code":144574,"language":135166,"meta":98,"style":98},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[83,144576,144577],{"__ignoreMap":98},[102,144578,144579,144581,144583,144585,144587,144589,144591,144593,144596,144598,144600,144603],{"class":104,"line":105},[102,144580,1208],{"class":119},[102,144582,61686],{"class":59165},[102,144584,61689],{"class":112},[102,144586,260],{"class":119},[102,144588,70564],{"class":278},[102,144590,387],{"class":112},[102,144592,260],{"class":119},[102,144594,144595],{"class":278},"\"username\"",[102,144597,68885],{"class":112},[102,144599,260],{"class":119},[102,144601,144602],{"class":278},"\"请输入用户名\"",[102,144604,59172],{"class":119},[6750,144606],{"style":134273,"src":144607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[7601,144609,144611],{"id":144610},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[6750,144613],{"style":134273,"src":144614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,144616,144617],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,144619,144620],{},"快捷操作：",[6750,144622],{"style":134273,"src":144623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,144625,144626],{},"例子1：",[93,144628,144630],{"className":135164,"code":144629,"language":135166,"meta":98,"style":98},"\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",[83,144631,144632,144655,144682,144711,144730],{"__ignoreMap":98},[102,144633,144634,144636,144638,144640,144642,144645,144648,144650,144653],{"class":104,"line":105},[102,144635,1208],{"class":119},[102,144637,74490],{"class":59165},[102,144639,74493],{"class":112},[102,144641,260],{"class":119},[102,144643,144644],{"class":278},"\"\u002Fsubmit\"",[102,144646,144647],{"class":112}," method",[102,144649,260],{"class":119},[102,144651,144652],{"class":278},"\"post\"",[102,144654,59172],{"class":119},[102,144656,144657,144659,144661,144663,144665,144667,144669,144671,144673,144675,144677,144680],{"class":104,"line":116},[102,144658,60009],{"class":119},[102,144660,61686],{"class":59165},[102,144662,61689],{"class":112},[102,144664,260],{"class":119},[102,144666,70564],{"class":278},[102,144668,387],{"class":112},[102,144670,260],{"class":119},[102,144672,144595],{"class":278},[102,144674,68885],{"class":112},[102,144676,260],{"class":119},[102,144678,144679],{"class":278},"\"用户名\"",[102,144681,59172],{"class":119},[102,144683,144684,144686,144688,144690,144692,144695,144697,144699,144702,144704,144706,144709],{"class":104,"line":123},[102,144685,60009],{"class":119},[102,144687,61686],{"class":59165},[102,144689,61689],{"class":112},[102,144691,260],{"class":119},[102,144693,144694],{"class":278},"\"password\"",[102,144696,387],{"class":112},[102,144698,260],{"class":119},[102,144700,144701],{"class":278},"\"pwd\"",[102,144703,68885],{"class":112},[102,144705,260],{"class":119},[102,144707,144708],{"class":278},"\"密码\"",[102,144710,59172],{"class":119},[102,144712,144713,144715,144717,144719,144721,144723,144726,144728],{"class":104,"line":130},[102,144714,60009],{"class":119},[102,144716,61752],{"class":59165},[102,144718,61689],{"class":112},[102,144720,260],{"class":119},[102,144722,74513],{"class":278},[102,144724,144725],{"class":119},">提交\u003C\u002F",[102,144727,61752],{"class":59165},[102,144729,59172],{"class":119},[102,144731,144732,144734,144736],{"class":104,"line":136},[102,144733,59650],{"class":119},[102,144735,74490],{"class":59165},[102,144737,59172],{"class":119},[6750,144739],{"style":134273,"src":144740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,144742,144743],{},"value是表单域的内容",[14,144745,144746],{},"例子2：",[93,144748,144749],{"className":135164,"code":144629,"language":135166,"meta":98,"style":98},[83,144750,144751,144771,144797,144823,144841],{"__ignoreMap":98},[102,144752,144753,144755,144757,144759,144761,144763,144765,144767,144769],{"class":104,"line":105},[102,144754,1208],{"class":119},[102,144756,74490],{"class":59165},[102,144758,74493],{"class":112},[102,144760,260],{"class":119},[102,144762,144644],{"class":278},[102,144764,144647],{"class":112},[102,144766,260],{"class":119},[102,144768,144652],{"class":278},[102,144770,59172],{"class":119},[102,144772,144773,144775,144777,144779,144781,144783,144785,144787,144789,144791,144793,144795],{"class":104,"line":116},[102,144774,60009],{"class":119},[102,144776,61686],{"class":59165},[102,144778,61689],{"class":112},[102,144780,260],{"class":119},[102,144782,70564],{"class":278},[102,144784,387],{"class":112},[102,144786,260],{"class":119},[102,144788,144595],{"class":278},[102,144790,68885],{"class":112},[102,144792,260],{"class":119},[102,144794,144679],{"class":278},[102,144796,59172],{"class":119},[102,144798,144799,144801,144803,144805,144807,144809,144811,144813,144815,144817,144819,144821],{"class":104,"line":123},[102,144800,60009],{"class":119},[102,144802,61686],{"class":59165},[102,144804,61689],{"class":112},[102,144806,260],{"class":119},[102,144808,144694],{"class":278},[102,144810,387],{"class":112},[102,144812,260],{"class":119},[102,144814,144701],{"class":278},[102,144816,68885],{"class":112},[102,144818,260],{"class":119},[102,144820,144708],{"class":278},[102,144822,59172],{"class":119},[102,144824,144825,144827,144829,144831,144833,144835,144837,144839],{"class":104,"line":130},[102,144826,60009],{"class":119},[102,144828,61752],{"class":59165},[102,144830,61689],{"class":112},[102,144832,260],{"class":119},[102,144834,74513],{"class":278},[102,144836,144725],{"class":119},[102,144838,61752],{"class":59165},[102,144840,59172],{"class":119},[102,144842,144843,144845,144847],{"class":104,"line":136},[102,144844,59650],{"class":119},[102,144846,74490],{"class":59165},[102,144848,59172],{"class":119},[6750,144850],{"style":134273,"src":144851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[43,144853,144855],{"id":144854},"_142-css新特性","14.2 CSS新特性",[48,144857,144859],{"id":144858},"_1421-新增选择器","14.2.1 新增选择器",[7601,144861,144863],{"id":144862},"_14211-属性选择器","14.2.1.1 属性选择器",[6750,144865],{"style":134273,"src":144866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[93,144868,144870],{"className":134417,"code":144869,"language":134419,"meta":98,"style":98},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[83,144871,144872,144887,144903],{"__ignoreMap":98},[102,144873,144874,144876,144878,144880,144882,144884],{"class":104,"line":105},[102,144875,61686],{"class":59165},[102,144877,9912],{"class":119},[102,144879,110972],{"class":112},[102,144881,260],{"class":108},[102,144883,70564],{"class":278},[102,144885,144886],{"class":119},"] {\n",[102,144888,144889,144891,144893,144895,144897,144899,144901],{"class":104,"line":116},[102,144890,78761],{"class":187},[102,144892,59302],{"class":119},[102,144894,7039],{"class":187},[102,144896,59357],{"class":108},[102,144898,59386],{"class":187},[102,144900,137997],{"class":187},[102,144902,266],{"class":119},[102,144904,144905],{"class":104,"line":123},[102,144906,301],{"class":119},[6750,144908],{"style":134273,"src":144909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,144911,9076],{},[59,144913,144914,144917,144920,144923],{},[62,144915,144916],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[62,144918,144919],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[62,144921,144922],{},"属性选择器也可以选择出来自定义的属性",[62,144924,144925,144927],{},[18,144926,7501],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[7601,144929,144931],{"id":144930},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[6750,144933],{"style":134273,"src":144934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[87,144936,144937],{},[62,144938,144939],{},"fist-child",[93,144941,144943],{"className":134417,"code":144942,"language":134419,"meta":98,"style":98},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[83,144944,144945,144950,144965,144985,145003],{"__ignoreMap":98},[102,144946,144947],{"class":104,"line":105},[102,144948,144949],{"class":126},"\u002F* 属性选择器 *\u002F\n",[102,144951,144952,144954,144956,144958,144960,144962],{"class":104,"line":116},[102,144953,61686],{"class":59165},[102,144955,9912],{"class":119},[102,144957,110972],{"class":112},[102,144959,260],{"class":108},[102,144961,70564],{"class":278},[102,144963,144964],{"class":119},"] { }\n",[102,144966,144967,144969,144971,144973,144976,144979,144982],{"class":104,"line":123},[102,144968,61686],{"class":59165},[102,144970,9912],{"class":119},[102,144972,109],{"class":112},[102,144974,144975],{"class":108},"^=",[102,144977,144978],{"class":278},"\"icon\"",[102,144980,144981],{"class":119},"] { }  ",[102,144983,144984],{"class":126},"\u002F* 以 icon 开头 *\u002F\n",[102,144986,144987,144989,144991,144993,144996,144998,145000],{"class":104,"line":130},[102,144988,61686],{"class":59165},[102,144990,9912],{"class":119},[102,144992,109],{"class":112},[102,144994,144995],{"class":108},"$=",[102,144997,144978],{"class":278},[102,144999,144981],{"class":119},[102,145001,145002],{"class":126},"\u002F* 以 icon 结尾 *\u002F\n",[102,145004,145005,145007,145009,145011,145014,145016,145018],{"class":104,"line":136},[102,145006,61686],{"class":59165},[102,145008,9912],{"class":119},[102,145010,109],{"class":112},[102,145012,145013],{"class":108},"*=",[102,145015,144978],{"class":278},[102,145017,144981],{"class":119},[102,145019,145020],{"class":126},"\u002F* 包含 icon *\u002F\n",[14,145022,145023],{},"ul的第一个儿子文本为红色",[14,145025,145026],{},"一定要在冒号前加空格，不然就是选中所有的了",[93,145028,145030],{"className":134417,"code":145029,"language":134419,"meta":98,"style":98},".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",[83,145031,145032,145038,145048,145052,145056,145061,145074,145087,145103,145120,145137],{"__ignoreMap":98},[102,145033,145034,145036],{"class":104,"line":105},[102,145035,134708],{"class":112},[102,145037,1077],{"class":119},[102,145039,145040,145042,145044,145046],{"class":104,"line":116},[102,145041,78770],{"class":187},[102,145043,59302],{"class":119},[102,145045,65286],{"class":187},[102,145047,266],{"class":119},[102,145049,145050],{"class":104,"line":123},[102,145051,301],{"class":119},[102,145053,145054],{"class":104,"line":130},[102,145055,143878],{"class":119},[102,145057,145058],{"class":104,"line":136},[102,145059,145060],{"class":126},"\u002F* 结构伪类选择器 *\u002F\n",[102,145062,145063,145065,145068,145071],{"class":104,"line":142},[102,145064,62],{"class":59165},[102,145066,145067],{"class":112},":first-child",[102,145069,145070],{"class":119}," { }           ",[102,145072,145073],{"class":126},"\u002F* 第一个 *\u002F\n",[102,145075,145076,145078,145081,145084],{"class":104,"line":148},[102,145077,62],{"class":59165},[102,145079,145080],{"class":112},":last-child",[102,145082,145083],{"class":119}," { }            ",[102,145085,145086],{"class":126},"\u002F* 最后一个 *\u002F\n",[102,145088,145089,145091,145093,145095,145097,145100],{"class":104,"line":157},[102,145090,62],{"class":59165},[102,145092,137331],{"class":112},[102,145094,380],{"class":119},[102,145096,7044],{"class":187},[102,145098,145099],{"class":119},") { }          ",[102,145101,145102],{"class":126},"\u002F* 第2个 *\u002F\n",[102,145104,145105,145107,145109,145111,145114,145117],{"class":104,"line":163},[102,145106,62],{"class":59165},[102,145108,137331],{"class":112},[102,145110,380],{"class":119},[102,145112,145113],{"class":187},"2n",[102,145115,145116],{"class":119},") { }         ",[102,145118,145119],{"class":126},"\u002F* 偶数 *\u002F\n",[102,145121,145122,145124,145126,145128,145131,145134],{"class":104,"line":175},[102,145123,62],{"class":59165},[102,145125,137331],{"class":112},[102,145127,380],{"class":119},[102,145129,145130],{"class":187},"2n+1",[102,145132,145133],{"class":119},") { }       ",[102,145135,145136],{"class":126},"\u002F* 奇数 *\u002F\n",[102,145138,145139,145141,145143,145145,145148,145150],{"class":104,"line":181},[102,145140,62],{"class":59165},[102,145142,137331],{"class":112},[102,145144,380],{"class":119},[102,145146,145147],{"class":187},"-n+3",[102,145149,145133],{"class":119},[102,145151,145152],{"class":126},"\u002F* 前3个 *\u002F\n",[59476,145154,145157],{"className":145155},[145156],"example","\n  示例内容\n",[14,145159,145160],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[59,145162,145163],{},[62,145164,145165,145168],{},[83,145166,145167],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,145170,145171],{},"也就是说它选择的是熊大",[87,145173,145174],{"start":142},[62,145175,145176],{},"权重",[93,145178,145180],{"className":134417,"code":145179,"language":134419,"meta":98,"style":98},"\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",[83,145181,145182,145186,145196,145206,145220,145234,145248],{"__ignoreMap":98},[102,145183,145184],{"class":104,"line":105},[102,145185,145060],{"class":126},[102,145187,145188,145190,145192,145194],{"class":104,"line":116},[102,145189,62],{"class":59165},[102,145191,145067],{"class":112},[102,145193,145070],{"class":119},[102,145195,145073],{"class":126},[102,145197,145198,145200,145202,145204],{"class":104,"line":123},[102,145199,62],{"class":59165},[102,145201,145080],{"class":112},[102,145203,145083],{"class":119},[102,145205,145086],{"class":126},[102,145207,145208,145210,145212,145214,145216,145218],{"class":104,"line":130},[102,145209,62],{"class":59165},[102,145211,137331],{"class":112},[102,145213,380],{"class":119},[102,145215,7044],{"class":187},[102,145217,145099],{"class":119},[102,145219,145102],{"class":126},[102,145221,145222,145224,145226,145228,145230,145232],{"class":104,"line":136},[102,145223,62],{"class":59165},[102,145225,137331],{"class":112},[102,145227,380],{"class":119},[102,145229,145113],{"class":187},[102,145231,145116],{"class":119},[102,145233,145119],{"class":126},[102,145235,145236,145238,145240,145242,145244,145246],{"class":104,"line":142},[102,145237,62],{"class":59165},[102,145239,137331],{"class":112},[102,145241,380],{"class":119},[102,145243,145130],{"class":187},[102,145245,145133],{"class":119},[102,145247,145136],{"class":126},[102,145249,145250,145252,145254,145256,145258,145260],{"class":104,"line":148},[102,145251,62],{"class":59165},[102,145253,137331],{"class":112},[102,145255,380],{"class":119},[102,145257,145147],{"class":187},[102,145259,145133],{"class":119},[102,145261,145152],{"class":126},[14,145263,145264],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[7601,145266,145268],{"id":145267},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,145270,145271],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[6750,145273],{"style":134273,"src":145274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[87,145276,145277],{},[62,145278,9076],{},[59,145280,145281,145284,145287,145290,145293,145296],{},[62,145282,145283],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[62,145285,145286],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[62,145288,145289],{},"语法： element::before {}",[62,145291,145292],{},"before 和 after 必须有 content 属性",[62,145294,145295],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[62,145297,145298],{},"伪元素选择器和标签选择器一样，权重为 1",[87,145300,145301],{"start":116},[62,145302,145303],{},"实例",[93,145305,145306],{"className":134417,"code":145179,"language":134419,"meta":98,"style":98},[83,145307,145308,145312,145322,145332,145346,145360,145374],{"__ignoreMap":98},[102,145309,145310],{"class":104,"line":105},[102,145311,145060],{"class":126},[102,145313,145314,145316,145318,145320],{"class":104,"line":116},[102,145315,62],{"class":59165},[102,145317,145067],{"class":112},[102,145319,145070],{"class":119},[102,145321,145073],{"class":126},[102,145323,145324,145326,145328,145330],{"class":104,"line":123},[102,145325,62],{"class":59165},[102,145327,145080],{"class":112},[102,145329,145083],{"class":119},[102,145331,145086],{"class":126},[102,145333,145334,145336,145338,145340,145342,145344],{"class":104,"line":130},[102,145335,62],{"class":59165},[102,145337,137331],{"class":112},[102,145339,380],{"class":119},[102,145341,7044],{"class":187},[102,145343,145099],{"class":119},[102,145345,145102],{"class":126},[102,145347,145348,145350,145352,145354,145356,145358],{"class":104,"line":136},[102,145349,62],{"class":59165},[102,145351,137331],{"class":112},[102,145353,380],{"class":119},[102,145355,145113],{"class":187},[102,145357,145116],{"class":119},[102,145359,145119],{"class":126},[102,145361,145362,145364,145366,145368,145370,145372],{"class":104,"line":142},[102,145363,62],{"class":59165},[102,145365,137331],{"class":112},[102,145367,380],{"class":119},[102,145369,145130],{"class":187},[102,145371,145133],{"class":119},[102,145373,145136],{"class":126},[102,145375,145376,145378,145380,145382,145384,145386],{"class":104,"line":148},[102,145377,62],{"class":59165},[102,145379,137331],{"class":112},[102,145381,380],{"class":119},[102,145383,145147],{"class":187},[102,145385,145133],{"class":119},[102,145387,145152],{"class":126},[6750,145389],{"style":134273,"src":145390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[87,145392,145393],{"start":123},[62,145394,145395],{},"使用场景1",[6750,145397],{"style":134273,"src":145398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,145400,145401],{},"不需要再加盒子来整红色那部分了",[93,145403,145405],{"className":134417,"code":145404,"language":134419,"meta":98,"style":98},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[83,145406,145407,145412,145421,145432,145442,145446,145455,145466,145476],{"__ignoreMap":98},[102,145408,145409],{"class":104,"line":105},[102,145410,145411],{"class":126},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[102,145413,145414,145416,145419],{"class":104,"line":116},[102,145415,59476],{"class":59165},[102,145417,145418],{"class":112},"::before",[102,145420,1077],{"class":119},[102,145422,145423,145426,145428,145430],{"class":104,"line":123},[102,145424,145425],{"class":187},"  content",[102,145427,59302],{"class":119},[102,145429,16439],{"class":278},[102,145431,266],{"class":119},[102,145433,145434,145436,145438,145440],{"class":104,"line":130},[102,145435,136033],{"class":187},[102,145437,59302],{"class":119},[102,145439,68734],{"class":187},[102,145441,266],{"class":119},[102,145443,145444],{"class":104,"line":136},[102,145445,301],{"class":119},[102,145447,145448,145450,145453],{"class":104,"line":142},[102,145449,59476],{"class":59165},[102,145451,145452],{"class":112},"::after",[102,145454,1077],{"class":119},[102,145456,145457,145459,145461,145464],{"class":104,"line":148},[102,145458,145425],{"class":187},[102,145460,59302],{"class":119},[102,145462,145463],{"class":278},"\"→\"",[102,145465,266],{"class":119},[102,145467,145468,145470,145472,145474],{"class":104,"line":157},[102,145469,78770],{"class":187},[102,145471,59302],{"class":119},[102,145473,69935],{"class":187},[102,145475,266],{"class":119},[102,145477,145478],{"class":104,"line":163},[102,145479,301],{"class":119},[6750,145481],{"style":134273,"src":145482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,145484,145485],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[6750,145487],{"style":134273,"src":145488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,145490,145491],{},"但是在引用时需要先转义一下",[14,145493,145494],{},"content='\\e930'",[87,145496,145497],{"start":130},[62,145498,145499],{},"使用场景2",[14,145501,145502],{},"仿土豆效果",[14,145504,145505],{},"通过使用伪元素选择器可以减少body中盒子的数量",[93,145507,145508],{"className":134417,"code":145404,"language":134419,"meta":98,"style":98},[83,145509,145510,145514,145522,145532,145542,145546,145554,145564,145574],{"__ignoreMap":98},[102,145511,145512],{"class":104,"line":105},[102,145513,145411],{"class":126},[102,145515,145516,145518,145520],{"class":104,"line":116},[102,145517,59476],{"class":59165},[102,145519,145418],{"class":112},[102,145521,1077],{"class":119},[102,145523,145524,145526,145528,145530],{"class":104,"line":123},[102,145525,145425],{"class":187},[102,145527,59302],{"class":119},[102,145529,16439],{"class":278},[102,145531,266],{"class":119},[102,145533,145534,145536,145538,145540],{"class":104,"line":130},[102,145535,136033],{"class":187},[102,145537,59302],{"class":119},[102,145539,68734],{"class":187},[102,145541,266],{"class":119},[102,145543,145544],{"class":104,"line":136},[102,145545,301],{"class":119},[102,145547,145548,145550,145552],{"class":104,"line":142},[102,145549,59476],{"class":59165},[102,145551,145452],{"class":112},[102,145553,1077],{"class":119},[102,145555,145556,145558,145560,145562],{"class":104,"line":148},[102,145557,145425],{"class":187},[102,145559,59302],{"class":119},[102,145561,145463],{"class":278},[102,145563,266],{"class":119},[102,145565,145566,145568,145570,145572],{"class":104,"line":157},[102,145567,78770],{"class":187},[102,145569,59302],{"class":119},[102,145571,69935],{"class":187},[102,145573,266],{"class":119},[102,145575,145576],{"class":104,"line":163},[102,145577,301],{"class":119},[6750,145579],{"style":134273,"src":145580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[87,145582,145583],{"start":136},[62,145584,145585],{},"使用场景3",[14,145587,145588],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[93,145590,145592],{"className":134417,"code":145591,"language":134419,"meta":98,"style":98},".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",[83,145593,145594,145600,145610,145614,145618,145622,145630,145640,145650,145654,145662,145672,145682],{"__ignoreMap":98},[102,145595,145596,145598],{"class":104,"line":105},[102,145597,138265],{"class":112},[102,145599,1077],{"class":119},[102,145601,145602,145604,145606,145608],{"class":104,"line":116},[102,145603,138897],{"class":187},[102,145605,59302],{"class":119},[102,145607,31600],{"class":187},[102,145609,266],{"class":119},[102,145611,145612],{"class":104,"line":123},[102,145613,301],{"class":119},[102,145615,145616],{"class":104,"line":130},[102,145617,143878],{"class":119},[102,145619,145620],{"class":104,"line":136},[102,145621,145411],{"class":126},[102,145623,145624,145626,145628],{"class":104,"line":142},[102,145625,59476],{"class":59165},[102,145627,145418],{"class":112},[102,145629,1077],{"class":119},[102,145631,145632,145634,145636,145638],{"class":104,"line":148},[102,145633,145425],{"class":187},[102,145635,59302],{"class":119},[102,145637,16439],{"class":278},[102,145639,266],{"class":119},[102,145641,145642,145644,145646,145648],{"class":104,"line":157},[102,145643,136033],{"class":187},[102,145645,59302],{"class":119},[102,145647,68734],{"class":187},[102,145649,266],{"class":119},[102,145651,145652],{"class":104,"line":163},[102,145653,301],{"class":119},[102,145655,145656,145658,145660],{"class":104,"line":175},[102,145657,59476],{"class":59165},[102,145659,145452],{"class":112},[102,145661,1077],{"class":119},[102,145663,145664,145666,145668,145670],{"class":104,"line":181},[102,145665,145425],{"class":187},[102,145667,59302],{"class":119},[102,145669,145463],{"class":278},[102,145671,266],{"class":119},[102,145673,145674,145676,145678,145680],{"class":104,"line":202},[102,145675,78770],{"class":187},[102,145677,59302],{"class":119},[102,145679,69935],{"class":187},[102,145681,266],{"class":119},[102,145683,145684],{"class":104,"line":208},[102,145685,301],{"class":119},[14,145687,145688],{},"div {\nmargin: 0 auto;\n}",[93,145690,145693],{"className":145691,"code":145692,"language":6778},[6776],"\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",[83,145694,145692],{"__ignoreMap":98},[14,145696,145697],{},"如果想让多个元素都发生变化",[14,145699,145700],{},"不能如下操作：",[14,145702,145703],{},"transition: width 2s ease 0.5s;",[14,145705,145706],{},"transition: height 2s ease 0.5s;不对！！！",[14,145708,145709],{},"上方会样式冲突，导致不显示任何过渡效果",[14,145711,145712],{},"使用如下：加逗号隔开",[14,145714,145715],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,145717,145718],{},"transition all 2s ease;",[48,145720,145722],{"id":145721},"_1426-过渡练习","14.2.6 过渡练习",[87,145724,145725],{},[62,145726,145727],{},"进度条",[6750,145729],{"style":134273,"src":145730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[93,145732,145734],{"className":134417,"code":145733,"language":134419,"meta":98,"style":98},"div {\n  transition: all 0.3s ease;\n}\n",[83,145735,145736,145742,145760],{"__ignoreMap":98},[102,145737,145738,145740],{"class":104,"line":105},[102,145739,59476],{"class":59165},[102,145741,1077],{"class":119},[102,145743,145744,145747,145749,145751,145754,145756,145758],{"class":104,"line":116},[102,145745,145746],{"class":187},"  transition",[102,145748,59302],{"class":119},[102,145750,35986],{"class":187},[102,145752,145753],{"class":187}," 0.3",[102,145755,9720],{"class":108},[102,145757,86545],{"class":187},[102,145759,266],{"class":119},[102,145761,145762],{"class":104,"line":123},[102,145763,301],{"class":119},[87,145765,145766],{"start":116},[62,145767,145768],{},"小米logo",[14,145770,145771],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[93,145773,145775],{"className":134417,"code":145774,"language":134419,"meta":98,"style":98},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[83,145776,145777,145782,145788,145804,145809],{"__ignoreMap":98},[102,145778,145779],{"class":104,"line":105},[102,145780,145781],{"class":126},"\u002F* CSS3 过渡 *\u002F\n",[102,145783,145784,145786],{"class":104,"line":116},[102,145785,59476],{"class":59165},[102,145787,1077],{"class":119},[102,145789,145790,145792,145794,145796,145798,145800,145802],{"class":104,"line":123},[102,145791,145746],{"class":187},[102,145793,59302],{"class":119},[102,145795,35986],{"class":187},[102,145797,145753],{"class":187},[102,145799,9720],{"class":108},[102,145801,86545],{"class":187},[102,145803,266],{"class":119},[102,145805,145806],{"class":104,"line":130},[102,145807,145808],{"class":126},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[102,145810,145811],{"class":104,"line":136},[102,145812,301],{"class":119},[14,145814,145815],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[8955,145817,145818],{},"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":98,"searchDepth":116,"depth":116,"links":145820},[145821,145826],{"id":144151,"depth":116,"text":144152,"children":145822},[145823,145824,145825],{"id":144155,"depth":123,"text":144156},{"id":144232,"depth":123,"text":144233},{"id":144563,"depth":123,"text":144564},{"id":144854,"depth":116,"text":144855,"children":145827},[145828,145829],{"id":144858,"depth":123,"text":144859},{"id":145721,"depth":123,"text":145722},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":144143,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":145836,"title":145837,"body":145838,"description":31240,"extension":8978,"meta":147582,"navigation":651,"path":147583,"seo":147584,"stem":147585,"__hash__":147586},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":145839,"toc":147563},[145840,145843,145847,145850,145856,145862,145866,145868,145871,145874,145877,145880,145883,145886,145889,145893,145897,145900,145903,145906,145910,145913,145916,145921,145924,145927,145930,145934,145937,145946,145949,145952,145956,145959,145962,145967,145974,145988,145996,146003,146008,146011,146014,146017,146024,146028,146034,146040,146043,146046,146051,146057,146059,146067,146072,146075,146081,146083,146088,146093,146096,146098,146103,146106,146111,146116,146150,146154,146158,146161,146165,146168,146254,146257,146294,146297,146333,146337,146342,146355,146409,146411,146439,146441,146469,146475,146489,146491,146535,146537,146581,146584,146591,146602,146604,146631,146633,146659,146666,146682,146684,146778,146780,146874,146881,146884,146889,146895,146969,146972,146974,147010,147012,147048,147051,147058,147077,147080,147083,147085,147110,147112,147136,147139,147142,147172,147176,147179,147242,147244,147310,147312,147376,147379,147411,147413,147439,147441,147467,147470,147501,147503,147529,147531,147557,147560],[10,145841,145837],{"id":145842},"_15-品优购项目上篇-搭建与公共模块",[43,145844,145846],{"id":145845},"_151-项目规划","15.1 项目规划",[6750,145848],{"style":134273,"src":145849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,145851,145852,145855],{},[18,145853,145854],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,145857,145858,145861],{},[18,145859,145860],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[43,145863,145865],{"id":145864},"_152-项目介绍","15.2 项目介绍",[14,145867,145854],{},[6750,145869],{"style":134273,"src":145870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,145872,145873],{},"主页：",[6750,145875],{"style":134273,"src":145876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,145878,145879],{},"列表页：",[6750,145881],{"style":134273,"src":145882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,145884,145885],{},"注册页：",[6750,145887],{"style":134273,"src":145888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[43,145890,145892],{"id":145891},"_153-项目搭建工作","15.3 项目搭建工作",[48,145894,145896],{"id":145895},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[6750,145898],{"style":134273,"src":145899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,145901,145902],{},"经常更换的图片要放到upload文件夹中",[14,145904,145905],{},"不经常换的放到images文件夹中",[48,145907,145909],{"id":145908},"_1532-创建文件如下","15.3.2 创建文件如下",[6750,145911],{"style":134273,"src":145912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[6750,145914],{"style":134273,"src":145915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,145917,145918],{},[18,145919,145920],{},"初始化样式：",[14,145922,145923],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,145925,145926],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,145928,145929],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[48,145931,145933],{"id":145932},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,145935,145936],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,145938,145939,145940,145945],{},"这里最典型的应用就是 ",[18,145941,145942],{},[83,145943,145944],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[6750,145947],{"style":134273,"src":145948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,145950,145951],{},"通过link方法来引入",[48,145953,145955],{"id":145954},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[6750,145957],{"style":134273,"src":145958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,145960,145961],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[87,145963,145964],{},[62,145965,145966],{},"制作favicon图标",[14,145968,145969,145970,145973],{},"①把品优购图标切成 ",[83,145971,145972],{},"png"," 图片",[14,145975,145976,145977,145979,145980,145983,145984],{},"②把 ",[83,145978,145972],{}," 图片转换为 ",[83,145981,145982],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[9275,145985,145986],{"href":145986,"rel":145987},"http:\u002F\u002Fwww.bitbug.net\u002F",[31729],[87,145989,145990,145993],{"start":116},[62,145991,145992],{},"favicon图标放到网站根目录下",[62,145994,145995],{},"HTML页面引入favicon",[14,145997,145998,145999,146002],{},"在html 页面里面的 ",[83,146000,146001],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,146004,146005],{},[83,146006,146007],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,146009,146010],{},"复制这行代码或者在生成这个的网站进行复制",[6750,146012],{"style":134273,"src":146013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,146015,146016],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,146018,146019,146020],{},"例如:",[9275,146021,146022],{"href":146022,"rel":146023},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[31729],[48,146025,146027],{"id":146026},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,146029,146030,146033],{},[18,146031,146032],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,146035,146036,146039],{},[18,146037,146038],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,146041,146042],{},"页面必须有三个标签用来符合 SEO 优化",[6750,146044],{"style":134273,"src":146045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[87,146047,146048],{},[62,146049,146050],{},"title网站标题",[14,146052,146053,146056],{},[18,146054,146055],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,146058,76655],{},[59,146060,146061,146064],{},[62,146062,146063],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[62,146065,146066],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[87,146068,146069],{"start":116},[62,146070,146071],{},"description网站描述",[14,146073,146074],{},"简要说明我们网站主要是做什么的",[14,146076,146077,146080],{},[18,146078,146079],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,146082,76655],{},[14,146084,146085],{},[83,146086,146087],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[87,146089,146090],{"start":123},[62,146091,146092],{},"keywords关键词",[14,146094,146095],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,146097,76655],{},[14,146099,146100],{},[83,146101,146102],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,146104,146105],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,146107,146108],{},[18,146109,146110],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[87,146112,146113],{"start":130},[62,146114,146115],{},"代码总结",[93,146117,146118],{"className":135164,"code":138521,"language":135166,"meta":98,"style":98},[83,146119,146120,146124,146138,146142],{"__ignoreMap":98},[102,146121,146122],{"class":104,"line":105},[102,146123,138528],{"class":126},[102,146125,146126,146128,146130,146132,146134,146136],{"class":104,"line":116},[102,146127,1208],{"class":119},[102,146129,59476],{"class":59165},[102,146131,61351],{"class":112},[102,146133,260],{"class":119},[102,146135,138541],{"class":278},[102,146137,59172],{"class":119},[102,146139,146140],{"class":104,"line":123},[102,146141,138548],{"class":119},[102,146143,146144,146146,146148],{"class":104,"line":130},[102,146145,59650],{"class":119},[102,146147,59476],{"class":59165},[102,146149,59172],{"class":119},[43,146151,146153],{"id":146152},"_154-项目公共部分制作","15.4 项目公共部分制作",[48,146155,146157],{"id":146156},"_1541-常用模块类命名","15.4.1 常用模块类命名",[6750,146159],{"style":134273,"src":146160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[48,146162,146164],{"id":146163},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,146166,146167],{},"布局思路：",[59,146169,146170,146173,146176,146198,146231],{},[62,146171,146172],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[62,146174,146175],{},"里面包含版心的盒子",[62,146177,146178,146179],{},"版心盒子里面包含 1 号左侧盒子左浮动",[59,146180,146181,146189,146195],{},[62,146182,146183,146184,7101,146186,146188],{},"1 号盒子 里面包含一个",[83,146185,59],{},[83,146187,59],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[62,146190,146191,146192,146194],{},"里面的内容是水平排列，所以需要给",[83,146193,62],{},"设置浮动",[62,146196,146197],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[62,146199,146200,146201],{},"版心盒子里面包含 2 号右侧盒子右浮动",[59,146202,146203,146217,146222],{},[62,146204,146205,146206,7101,146208,146210,146211,146213,146214,146216],{},"2 号盒子 里面包含一个",[83,146207,59],{},[83,146209,59],{},"包裹",[83,146212,62],{},"，中间的",[83,146215,9942],{},"可以用样式去设置，也可以用字符 |",[62,146218,146219,146220,146194],{},"里面内容水平排列，给",[83,146221,62],{},[62,146223,146224,146225,146227,146228,146230],{},"找到里面所有偶数的 ",[83,146226,62],{}," 设置样式（偶数的 ",[83,146229,62],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[62,146232,146233,146234],{},"需要用到字体图标",[59,146235,146236,146242,146245,146248,146251],{},[62,146237,146238,146239],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[83,146240,146241],{},"arrow-icon",[62,146243,146244],{},"先要引入字体图片的资源",[62,146246,146247],{},"在样式里面利用 font-face 来进行声明",[62,146249,146250],{},"在伪元素的 content属性设置 图标的编码",[62,146252,146253],{},"给伪元素设置font-family属性",[14,146255,146256],{},"结构实例代码：",[93,146258,146260],{"className":134417,"code":146259,"language":134419,"meta":98,"style":98},"div::before {\n  content: \"\";\n  display: block;\n}\n",[83,146261,146262,146270,146280,146290],{"__ignoreMap":98},[102,146263,146264,146266,146268],{"class":104,"line":105},[102,146265,59476],{"class":59165},[102,146267,145418],{"class":112},[102,146269,1077],{"class":119},[102,146271,146272,146274,146276,146278],{"class":104,"line":116},[102,146273,145425],{"class":187},[102,146275,59302],{"class":119},[102,146277,16439],{"class":278},[102,146279,266],{"class":119},[102,146281,146282,146284,146286,146288],{"class":104,"line":123},[102,146283,136033],{"class":187},[102,146285,59302],{"class":119},[102,146287,68734],{"class":187},[102,146289,266],{"class":119},[102,146291,146292],{"class":104,"line":130},[102,146293,301],{"class":119},[14,146295,146296],{},"样式实例代码：",[93,146298,146299],{"className":134417,"code":146259,"language":134419,"meta":98,"style":98},[83,146300,146301,146309,146319,146329],{"__ignoreMap":98},[102,146302,146303,146305,146307],{"class":104,"line":105},[102,146304,59476],{"class":59165},[102,146306,145418],{"class":112},[102,146308,1077],{"class":119},[102,146310,146311,146313,146315,146317],{"class":104,"line":116},[102,146312,145425],{"class":187},[102,146314,59302],{"class":119},[102,146316,16439],{"class":278},[102,146318,266],{"class":119},[102,146320,146321,146323,146325,146327],{"class":104,"line":123},[102,146322,136033],{"class":187},[102,146324,59302],{"class":119},[102,146326,68734],{"class":187},[102,146328,266],{"class":119},[102,146330,146331],{"class":104,"line":130},[102,146332,301],{"class":119},[48,146334,146336],{"id":146335},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[59,146338,146339],{},[62,146340,146341],{},"header 盒子必须要有高度",[14,146343,146344,146345,146347,146348],{},"1 号盒子是 ",[83,146346,139429],{}," 标志定位，在正常开发过程中， ",[18,146349,146350,146351,146354],{},"logo的布局其实是有讲究的，需要进行 ",[83,146352,146353],{},"logoSEO","的优化 （★★★）",[59,146356,146357,146365,146373,146400],{},[62,146358,146359,146361,146362,146364],{},[83,146360,139429],{}," 里面首先放一个 ",[83,146363,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[62,146366,146367,146369,146370,146372],{},[83,146368,10],{}," 里面再放一个链接，可以返回首页的，把 ",[83,146371,139429],{}," 的背景图片给链接即可",[62,146374,146375,146376],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[59,146377,146378,146393],{},[62,146379,146380,146381,146384,146385,146388,146389,146392],{},"方法1：",[83,146382,146383],{},"text-indent"," 移到盒子外面（",[83,146386,146387],{},"text-indent: -9999px",") ，然后 ",[83,146390,146391],{},"overflow:hidden"," ，淘宝的做法",[62,146394,146395,146396,146399],{},"方法2：直接给 ",[83,146397,146398],{},"font-size: 0;"," 就看不到文字了，京东的做法",[62,146401,146402,146403,146405,146406,146408],{},"最后给链接一个 ",[83,146404,59272],{}," 属性，这样鼠标放到 ",[83,146407,139429],{}," 上就可以看到提示文字了",[14,146410,146256],{},[93,146412,146413],{"className":135164,"code":139650,"language":135166,"meta":98,"style":98},[83,146414,146415],{"__ignoreMap":98},[102,146416,146417,146419,146421,146423,146425,146427,146429,146431,146433,146435,146437],{"class":104,"line":105},[102,146418,1208],{"class":119},[102,146420,9275],{"class":59165},[102,146422,68922],{"class":112},[102,146424,260],{"class":119},[102,146426,139665],{"class":278},[102,146428,139668],{"class":112},[102,146430,260],{"class":119},[102,146432,139673],{"class":278},[102,146434,139676],{"class":119},[102,146436,9275],{"class":59165},[102,146438,59172],{"class":119},[14,146440,146296],{},[93,146442,146443],{"className":135164,"code":139650,"language":135166,"meta":98,"style":98},[83,146444,146445],{"__ignoreMap":98},[102,146446,146447,146449,146451,146453,146455,146457,146459,146461,146463,146465,146467],{"class":104,"line":105},[102,146448,1208],{"class":119},[102,146450,9275],{"class":59165},[102,146452,68922],{"class":112},[102,146454,260],{"class":119},[102,146456,139665],{"class":278},[102,146458,139668],{"class":112},[102,146460,260],{"class":119},[102,146462,139673],{"class":278},[102,146464,139676],{"class":119},[102,146466,9275],{"class":59165},[102,146468,59172],{"class":119},[14,146470,146471,146472,146474],{},"2 号盒子是 ",[83,146473,139442],{}," 搜索模块定位",[59,146476,146477,146480,146483,146486],{},[62,146478,146479],{},"search盒子利用定位的方式放在对应的位置",[62,146481,146482],{},"search盒子设置绝对定位，header盒子设置相对定位",[62,146484,146485],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[62,146487,146488],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,146490,146256],{},[93,146492,146493],{"className":134417,"code":139737,"language":134419,"meta":98,"style":98},[83,146494,146495,146517,146521,146531],{"__ignoreMap":98},[102,146496,146497,146499,146501,146503,146505,146507,146509,146511,146513,146515],{"class":104,"line":105},[102,146498,59476],{"class":59165},[102,146500,2571],{"class":119},[102,146502,14],{"class":59165},[102,146504,2571],{"class":119},[102,146506,10],{"class":59165},[102,146508,2571],{"class":119},[102,146510,59],{"class":59165},[102,146512,2571],{"class":119},[102,146514,62],{"class":59165},[102,146516,1077],{"class":119},[102,146518,146519],{"class":104,"line":116},[102,146520,139766],{"class":126},[102,146522,146523,146525,146527,146529],{"class":104,"line":123},[102,146524,136033],{"class":187},[102,146526,59302],{"class":119},[102,146528,68734],{"class":187},[102,146530,266],{"class":119},[102,146532,146533],{"class":104,"line":130},[102,146534,301],{"class":119},[14,146536,146296],{},[93,146538,146539],{"className":134417,"code":139737,"language":134419,"meta":98,"style":98},[83,146540,146541,146563,146567,146577],{"__ignoreMap":98},[102,146542,146543,146545,146547,146549,146551,146553,146555,146557,146559,146561],{"class":104,"line":105},[102,146544,59476],{"class":59165},[102,146546,2571],{"class":119},[102,146548,14],{"class":59165},[102,146550,2571],{"class":119},[102,146552,10],{"class":59165},[102,146554,2571],{"class":119},[102,146556,59],{"class":59165},[102,146558,2571],{"class":119},[102,146560,62],{"class":59165},[102,146562,1077],{"class":119},[102,146564,146565],{"class":104,"line":116},[102,146566,139766],{"class":126},[102,146568,146569,146571,146573,146575],{"class":104,"line":123},[102,146570,136033],{"class":187},[102,146572,59302],{"class":119},[102,146574,68734],{"class":187},[102,146576,266],{"class":119},[102,146578,146579],{"class":104,"line":130},[102,146580,301],{"class":119},[14,146582,146583],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,146585,146586,146587,146590],{},"3 号盒子是 ",[83,146588,146589],{},"hotwords"," 热词模块定位",[59,146592,146593,146596,146599],{},[62,146594,146595],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[62,146597,146598],{},"给里面所有的a标签设置 左右10px的外边距",[62,146600,146601],{},"给第一个a标签设置文字变红色（#c81623）",[14,146603,146256],{},[93,146605,146607],{"className":134417,"code":146606,"language":134419,"meta":98,"style":98},"div {\n  margin: 0 auto;\n}\n",[83,146608,146609,146615,146627],{"__ignoreMap":98},[102,146610,146611,146613],{"class":104,"line":105},[102,146612,59476],{"class":59165},[102,146614,1077],{"class":119},[102,146616,146617,146619,146621,146623,146625],{"class":104,"line":116},[102,146618,78335],{"class":187},[102,146620,59302],{"class":119},[102,146622,8423],{"class":187},[102,146624,59421],{"class":187},[102,146626,266],{"class":119},[102,146628,146629],{"class":104,"line":123},[102,146630,301],{"class":119},[14,146632,146296],{},[93,146634,146635],{"className":134417,"code":146606,"language":134419,"meta":98,"style":98},[83,146636,146637,146643,146655],{"__ignoreMap":98},[102,146638,146639,146641],{"class":104,"line":105},[102,146640,59476],{"class":59165},[102,146642,1077],{"class":119},[102,146644,146645,146647,146649,146651,146653],{"class":104,"line":116},[102,146646,78335],{"class":187},[102,146648,59302],{"class":119},[102,146650,8423],{"class":187},[102,146652,59421],{"class":187},[102,146654,266],{"class":119},[102,146656,146657],{"class":104,"line":123},[102,146658,301],{"class":119},[14,146660,146661,146662,146665],{},"4 号盒子是 ",[83,146663,146664],{},"shopcar"," 购物车模块",[59,146667,146668,146673,146676,146679],{},[62,146669,131200,146670,146672],{},[83,146671,146664],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[62,146674,146675],{},"count 统计部分用绝对定位做",[62,146677,146678],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[62,146680,146681],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,146683,146256],{},[93,146685,146686],{"className":134417,"code":139849,"language":134419,"meta":98,"style":98},[83,146687,146688,146692,146706,146710,146724,146728,146742,146746,146760,146764],{"__ignoreMap":98},[102,146689,146690],{"class":104,"line":105},[102,146691,139856],{"class":126},[102,146693,146694,146696,146698,146700,146702,146704],{"class":104,"line":116},[102,146695,139861],{"class":112},[102,146697,87672],{"class":119},[102,146699,136777],{"class":187},[102,146701,59302],{"class":119},[102,146703,139870],{"class":187},[102,146705,137347],{"class":119},[102,146707,146708],{"class":104,"line":123},[102,146709,139877],{"class":126},[102,146711,146712,146714,146716,146718,146720,146722],{"class":104,"line":130},[102,146713,139882],{"class":112},[102,146715,87672],{"class":119},[102,146717,136777],{"class":187},[102,146719,59302],{"class":119},[102,146721,62629],{"class":187},[102,146723,137347],{"class":119},[102,146725,146726],{"class":104,"line":136},[102,146727,139897],{"class":126},[102,146729,146730,146732,146734,146736,146738,146740],{"class":104,"line":142},[102,146731,139902],{"class":112},[102,146733,87672],{"class":119},[102,146735,136777],{"class":187},[102,146737,59302],{"class":119},[102,146739,62696],{"class":187},[102,146741,137347],{"class":119},[102,146743,146744],{"class":104,"line":148},[102,146745,139917],{"class":126},[102,146747,146748,146750,146752,146754,146756,146758],{"class":104,"line":157},[102,146749,139922],{"class":112},[102,146751,87672],{"class":119},[102,146753,136777],{"class":187},[102,146755,59302],{"class":119},[102,146757,94098],{"class":187},[102,146759,137347],{"class":119},[102,146761,146762],{"class":104,"line":163},[102,146763,139937],{"class":126},[102,146765,146766,146768,146770,146772,146774,146776],{"class":104,"line":175},[102,146767,139942],{"class":112},[102,146769,87672],{"class":119},[102,146771,136777],{"class":187},[102,146773,59302],{"class":119},[102,146775,139951],{"class":187},[102,146777,137347],{"class":119},[14,146779,146296],{},[93,146781,146782],{"className":134417,"code":139849,"language":134419,"meta":98,"style":98},[83,146783,146784,146788,146802,146806,146820,146824,146838,146842,146856,146860],{"__ignoreMap":98},[102,146785,146786],{"class":104,"line":105},[102,146787,139856],{"class":126},[102,146789,146790,146792,146794,146796,146798,146800],{"class":104,"line":116},[102,146791,139861],{"class":112},[102,146793,87672],{"class":119},[102,146795,136777],{"class":187},[102,146797,59302],{"class":119},[102,146799,139870],{"class":187},[102,146801,137347],{"class":119},[102,146803,146804],{"class":104,"line":123},[102,146805,139877],{"class":126},[102,146807,146808,146810,146812,146814,146816,146818],{"class":104,"line":130},[102,146809,139882],{"class":112},[102,146811,87672],{"class":119},[102,146813,136777],{"class":187},[102,146815,59302],{"class":119},[102,146817,62629],{"class":187},[102,146819,137347],{"class":119},[102,146821,146822],{"class":104,"line":136},[102,146823,139897],{"class":126},[102,146825,146826,146828,146830,146832,146834,146836],{"class":104,"line":142},[102,146827,139902],{"class":112},[102,146829,87672],{"class":119},[102,146831,136777],{"class":187},[102,146833,59302],{"class":119},[102,146835,62696],{"class":187},[102,146837,137347],{"class":119},[102,146839,146840],{"class":104,"line":148},[102,146841,139917],{"class":126},[102,146843,146844,146846,146848,146850,146852,146854],{"class":104,"line":157},[102,146845,139922],{"class":112},[102,146847,87672],{"class":119},[102,146849,136777],{"class":187},[102,146851,59302],{"class":119},[102,146853,94098],{"class":187},[102,146855,137347],{"class":119},[102,146857,146858],{"class":104,"line":163},[102,146859,139937],{"class":126},[102,146861,146862,146864,146866,146868,146870,146872],{"class":104,"line":175},[102,146863,139942],{"class":112},[102,146865,87672],{"class":119},[102,146867,136777],{"class":187},[102,146869,59302],{"class":119},[102,146871,139951],{"class":187},[102,146873,137347],{"class":119},[48,146875,146877,146878,146880],{"id":146876},"_1544-nav导航模块制作","15.4.4 ",[83,146879,61578],{},"导航模块制作",[6750,146882],{"style":134273,"src":146883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,146885,146886,146888],{},[83,146887,61578],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,146890,146891,146892],{},"1 号盒子左侧浮动，",[83,146893,146894],{},"dropdown",[59,146896,146897,146907,146915,146921,146929,146939,146947,146958],{},[62,146898,146899,146900,108883,146903,146906],{},"1号盒子有讲究，根据相关性 里面包含 ",[83,146901,146902],{},".dt",[83,146904,146905],{},".dd"," 两个盒子",[62,146908,146909,146911,146912,146914],{},[83,146910,146902],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[83,146913,146905],{}," 挤到下面去了",[62,146916,146917,146918,146920],{},"给 ",[83,146919,146905],{}," 盒子设置宽度 和 高度，以及背景颜色",[62,146922,146917,146923,146925,146926,128102],{},[83,146924,146905],{}," 盒子里面定义 无序列表 （",[83,146927,146928],{},"ul > li > a",[62,146930,146931,146932,146934,146935,146938],{},"每个 ",[83,146933,62],{}," 都有一个高度（",[83,146936,146937],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[62,146940,146917,146941,146943,146944,128102],{},[83,146942,62],{}," 里面的a设置文字大小（",[83,146945,146946],{},"14px",[62,146948,146917,146949,146951,146952,146954,146955,146957],{},[83,146950,62],{}," 设置 ",[83,146953,135578],{},"，当鼠标移入的时候，让",[83,146956,62],{},"的背景变成白色，让里面的文字变成红色",[62,146959,146960,146962,146963,146965,146966,146968],{},[83,146961,62],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[83,146964,62],{},"的右侧，那么给",[83,146967,62],{},"设置相对定位",[14,146970,146971],{},"一定要注意相关性",[14,146973,146256],{},[93,146975,146976],{"className":134417,"code":146259,"language":134419,"meta":98,"style":98},[83,146977,146978,146986,146996,147006],{"__ignoreMap":98},[102,146979,146980,146982,146984],{"class":104,"line":105},[102,146981,59476],{"class":59165},[102,146983,145418],{"class":112},[102,146985,1077],{"class":119},[102,146987,146988,146990,146992,146994],{"class":104,"line":116},[102,146989,145425],{"class":187},[102,146991,59302],{"class":119},[102,146993,16439],{"class":278},[102,146995,266],{"class":119},[102,146997,146998,147000,147002,147004],{"class":104,"line":123},[102,146999,136033],{"class":187},[102,147001,59302],{"class":119},[102,147003,68734],{"class":187},[102,147005,266],{"class":119},[102,147007,147008],{"class":104,"line":130},[102,147009,301],{"class":119},[14,147011,146296],{},[93,147013,147014],{"className":134417,"code":146259,"language":134419,"meta":98,"style":98},[83,147015,147016,147024,147034,147044],{"__ignoreMap":98},[102,147017,147018,147020,147022],{"class":104,"line":105},[102,147019,59476],{"class":59165},[102,147021,145418],{"class":112},[102,147023,1077],{"class":119},[102,147025,147026,147028,147030,147032],{"class":104,"line":116},[102,147027,145425],{"class":187},[102,147029,59302],{"class":119},[102,147031,16439],{"class":278},[102,147033,266],{"class":119},[102,147035,147036,147038,147040,147042],{"class":104,"line":123},[102,147037,136033],{"class":187},[102,147039,59302],{"class":119},[102,147041,68734],{"class":187},[102,147043,266],{"class":119},[102,147045,147046],{"class":104,"line":130},[102,147047,301],{"class":119},[14,147049,147050],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,147052,147053,147054,147057],{},"2 号盒子左侧浮动，",[83,147055,147056],{},"navitems"," 导航栏组",[59,147059,147060,147065,147074],{},[62,147061,147062,147063],{},"里面结构是 ",[83,147064,146928],{},[62,147066,147067,147068,147070,147071,147073],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[83,147069,9275],{},"左右的",[83,147072,38748],{},"把两侧撑开",[62,147075,147076],{},"让文字垂直居中（行高等于高度）",[6750,147078],{"style":134273,"src":147079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,147081,147082],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,147084,146256],{},[93,147086,147088],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},".box {\n  float: left;\n}\n",[83,147089,147090,147096,147106],{"__ignoreMap":98},[102,147091,147092,147094],{"class":104,"line":105},[102,147093,138265],{"class":112},[102,147095,1077],{"class":119},[102,147097,147098,147100,147102,147104],{"class":104,"line":116},[102,147099,138897],{"class":187},[102,147101,59302],{"class":119},[102,147103,31600],{"class":187},[102,147105,266],{"class":119},[102,147107,147108],{"class":104,"line":123},[102,147109,301],{"class":119},[14,147111,146296],{},[93,147113,147114],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,147115,147116,147122,147132],{"__ignoreMap":98},[102,147117,147118,147120],{"class":104,"line":105},[102,147119,138265],{"class":112},[102,147121,1077],{"class":119},[102,147123,147124,147126,147128,147130],{"class":104,"line":116},[102,147125,138897],{"class":187},[102,147127,59302],{"class":119},[102,147129,31600],{"class":187},[102,147131,266],{"class":119},[102,147133,147134],{"class":104,"line":123},[102,147135,301],{"class":119},[14,147137,147138],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[6750,147140],{"style":134273,"src":147141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[93,147143,147144],{"className":134417,"code":138574,"language":134419,"meta":98,"style":98},[83,147145,147146,147152,147168],{"__ignoreMap":98},[102,147147,147148,147150],{"class":104,"line":105},[102,147149,59476],{"class":59165},[102,147151,1077],{"class":119},[102,147153,147154,147156,147158,147160,147162,147164,147166],{"class":104,"line":116},[102,147155,78761],{"class":187},[102,147157,59302],{"class":119},[102,147159,7039],{"class":187},[102,147161,59357],{"class":108},[102,147163,59386],{"class":187},[102,147165,137809],{"class":187},[102,147167,266],{"class":119},[102,147169,147170],{"class":104,"line":123},[102,147171,301],{"class":119},[48,147173,147175],{"id":147174},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[6750,147177],{"style":134273,"src":147178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[59,147180,147181,147186,147191],{},[62,147182,147183,147185],{},[83,147184,139620],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[62,147187,147188,147190],{},[83,147189,139620],{}," 里面有一个大的版心",[62,147192,147193,147194,147197,147198],{},"版心里面包含 1 号盒子，",[83,147195,147196],{},"mod_service"," 是服务模块，mod 是模块的意思",[59,147199,147200,147205,147218,147234,147239],{},[62,147201,146917,147202,147204],{},[83,147203,147196],{}," 设置高度（80px）和下边框",[62,147206,147207,147208,147211,147212,147214,147215,147217],{},"在里面定义 ",[83,147209,147210],{},"ul > li"," ,每个",[83,147213,62],{}," 宽度是300px 高度是 50px，给每个",[83,147216,62],{},"设置35px的左内边距",[62,147219,147220,147221,147223,147224,147226,147227,147229,147230,3977,147232,128102],{},"在每个",[83,147222,62],{},"里面，放一个 ",[83,147225,8518],{},"（里面放图标），一个",[83,147228,59476],{},"（里面放",[83,147231,59476],{},[83,147233,14],{},[62,147235,146917,147236,147238],{},[83,147237,8518],{},"设置浮动，让h5与这个div左右排列",[62,147240,147241],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,147243,146256],{},[93,147245,147247],{"className":134417,"code":147246,"language":134419,"meta":98,"style":98},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[83,147248,147249,147255,147267,147279,147306],{"__ignoreMap":98},[102,147250,147251,147253],{"class":104,"line":105},[102,147252,142174],{"class":112},[102,147254,1077],{"class":119},[102,147256,147257,147259,147261,147263,147265],{"class":104,"line":116},[102,147258,78433],{"class":187},[102,147260,59302],{"class":119},[102,147262,5016],{"class":187},[102,147264,59357],{"class":108},[102,147266,266],{"class":119},[102,147268,147269,147271,147273,147275,147277],{"class":104,"line":123},[102,147270,78653],{"class":187},[102,147272,59302],{"class":119},[102,147274,5016],{"class":187},[102,147276,59357],{"class":108},[102,147278,266],{"class":119},[102,147280,147281,147283,147285,147287,147289,147291,147293,147295,147298,147300,147302,147304],{"class":104,"line":130},[102,147282,78476],{"class":187},[102,147284,59302],{"class":119},[102,147286,69591],{"class":187},[102,147288,380],{"class":119},[102,147290,142213],{"class":386},[102,147292,22445],{"class":119},[102,147294,69601],{"class":187},[102,147296,147297],{"class":187}," -10",[102,147299,59357],{"class":108},[102,147301,142232],{"class":187},[102,147303,59357],{"class":108},[102,147305,266],{"class":119},[102,147307,147308],{"class":104,"line":136},[102,147309,301],{"class":119},[14,147311,146296],{},[93,147313,147314],{"className":134417,"code":147246,"language":134419,"meta":98,"style":98},[83,147315,147316,147322,147334,147346,147372],{"__ignoreMap":98},[102,147317,147318,147320],{"class":104,"line":105},[102,147319,142174],{"class":112},[102,147321,1077],{"class":119},[102,147323,147324,147326,147328,147330,147332],{"class":104,"line":116},[102,147325,78433],{"class":187},[102,147327,59302],{"class":119},[102,147329,5016],{"class":187},[102,147331,59357],{"class":108},[102,147333,266],{"class":119},[102,147335,147336,147338,147340,147342,147344],{"class":104,"line":123},[102,147337,78653],{"class":187},[102,147339,59302],{"class":119},[102,147341,5016],{"class":187},[102,147343,59357],{"class":108},[102,147345,266],{"class":119},[102,147347,147348,147350,147352,147354,147356,147358,147360,147362,147364,147366,147368,147370],{"class":104,"line":130},[102,147349,78476],{"class":187},[102,147351,59302],{"class":119},[102,147353,69591],{"class":187},[102,147355,380],{"class":119},[102,147357,142213],{"class":386},[102,147359,22445],{"class":119},[102,147361,69601],{"class":187},[102,147363,147297],{"class":187},[102,147365,59357],{"class":108},[102,147367,142232],{"class":187},[102,147369,59357],{"class":108},[102,147371,266],{"class":119},[102,147373,147374],{"class":104,"line":136},[102,147375,301],{"class":119},[14,147377,147378],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[59,147380,147381,147384,147390,147396,147408],{},[62,147382,147383],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[62,147385,147386,147387,128102],{},"里面的布局利用 自定义列表来实现（",[83,147388,147389],{},"dl > dt + dd",[62,147391,146917,147392,147395],{},[83,147393,147394],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[62,147397,146917,147398,147401,147402,3977,147404,147407],{},[83,147399,147400],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[83,147403,147400],{},[83,147405,147406],{},"dd","之间有些距离",[62,147409,147410],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,147412,146256],{},[93,147414,147415],{"className":134417,"code":146606,"language":134419,"meta":98,"style":98},[83,147416,147417,147423,147435],{"__ignoreMap":98},[102,147418,147419,147421],{"class":104,"line":105},[102,147420,59476],{"class":59165},[102,147422,1077],{"class":119},[102,147424,147425,147427,147429,147431,147433],{"class":104,"line":116},[102,147426,78335],{"class":187},[102,147428,59302],{"class":119},[102,147430,8423],{"class":187},[102,147432,59421],{"class":187},[102,147434,266],{"class":119},[102,147436,147437],{"class":104,"line":123},[102,147438,301],{"class":119},[14,147440,146296],{},[93,147442,147443],{"className":134417,"code":146606,"language":134419,"meta":98,"style":98},[83,147444,147445,147451,147463],{"__ignoreMap":98},[102,147446,147447,147449],{"class":104,"line":105},[102,147448,59476],{"class":59165},[102,147450,1077],{"class":119},[102,147452,147453,147455,147457,147459,147461],{"class":104,"line":116},[102,147454,78335],{"class":187},[102,147456,59302],{"class":119},[102,147458,8423],{"class":187},[102,147460,59421],{"class":187},[102,147462,266],{"class":119},[102,147464,147465],{"class":104,"line":123},[102,147466,301],{"class":119},[14,147468,147469],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[59,147471,147472,147481,147484,147495],{},[62,147473,147474,147475,147477,147478,147480],{},"分为上下两块，上面是 ",[83,147476,139637],{}," 友情链接，下面是 ",[83,147479,139630],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[62,147482,147483],{},"把内容分别复制到相应模块中",[62,147485,146917,147486,147488,147489,147491,147492,147494],{},[83,147487,139637],{}," 设置 15px 的下外边距，给",[83,147490,139637],{}," 里面 的 ",[83,147493,9275],{}," 标签设置 左右 3px 的外边距",[62,147496,147497,147498,147500],{},"给",[83,147499,139630],{}," 设置 20px 的行高",[14,147502,146256],{},[93,147504,147505],{"className":134417,"code":146606,"language":134419,"meta":98,"style":98},[83,147506,147507,147513,147525],{"__ignoreMap":98},[102,147508,147509,147511],{"class":104,"line":105},[102,147510,59476],{"class":59165},[102,147512,1077],{"class":119},[102,147514,147515,147517,147519,147521,147523],{"class":104,"line":116},[102,147516,78335],{"class":187},[102,147518,59302],{"class":119},[102,147520,8423],{"class":187},[102,147522,59421],{"class":187},[102,147524,266],{"class":119},[102,147526,147527],{"class":104,"line":123},[102,147528,301],{"class":119},[14,147530,146296],{},[93,147532,147533],{"className":134417,"code":146606,"language":134419,"meta":98,"style":98},[83,147534,147535,147541,147553],{"__ignoreMap":98},[102,147536,147537,147539],{"class":104,"line":105},[102,147538,59476],{"class":59165},[102,147540,1077],{"class":119},[102,147542,147543,147545,147547,147549,147551],{"class":104,"line":116},[102,147544,78335],{"class":187},[102,147546,59302],{"class":119},[102,147548,8423],{"class":187},[102,147550,59421],{"class":187},[102,147552,266],{"class":119},[102,147554,147555],{"class":104,"line":123},[102,147556,301],{"class":119},[14,147558,147559],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[8955,147561,147562],{},"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":98,"searchDepth":116,"depth":116,"links":147564},[147565,147566,147567,147574],{"id":145845,"depth":116,"text":145846},{"id":145864,"depth":116,"text":145865},{"id":145891,"depth":116,"text":145892,"children":147568},[147569,147570,147571,147572,147573],{"id":145895,"depth":123,"text":145896},{"id":145908,"depth":123,"text":145909},{"id":145932,"depth":123,"text":145933},{"id":145954,"depth":123,"text":145955},{"id":146026,"depth":123,"text":146027},{"id":146152,"depth":116,"text":146153,"children":147575},[147576,147577,147578,147579,147581],{"id":146156,"depth":123,"text":146157},{"id":146163,"depth":123,"text":146164},{"id":146335,"depth":123,"text":146336},{"id":146876,"depth":123,"text":147580},"15.4.4 nav导航模块制作",{"id":147174,"depth":123,"text":147175},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":145837,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":147588,"title":147589,"body":147590,"description":31240,"extension":8978,"meta":149992,"navigation":651,"path":149993,"seo":149994,"stem":149995,"__hash__":149996},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":147591,"toc":149969},[147592,147595,147599,147603,147615,147618,147621,147624,147635,147637,147661,147663,147687,147692,147695,147697,147733,147735,147771,147774,147779,147782,147785,147788,147818,147825,147828,147838,147840,147874,147877,147911,147917,147934,147936,147972,147974,148010,148015,148040,148042,148068,148070,148094,148101,148104,148168,148170,148212,148214,148254,148261,148266,148268,148298,148300,148330,148334,148337,148344,148356,148358,148384,148386,148410,148413,148415,148439,148445,148455,148457,148487,148489,148519,148526,148567,148569,148605,148607,148643,148647,148650,148653,148656,148662,148667,148670,148693,148696,148720,148723,148747,148752,148755,148758,148761,148764,148767,148841,148843,148873,148875,148905,148908,148911,148943,148947,148951,148965,148974,148977,148982,148984,149078,149080,149174,149197,149199,149223,149225,149249,149256,149259,149269,149271,149295,149300,149308,149310,149340,149345,149385,149387,149413,149415,149441,149445,149448,149453,149456,149460,149468,149475,149483,149485,149515,149517,149547,149555,149558,149561,149563,149593,149595,149625,149628,149633,149635,149659,149661,149685,149688,149773,149775,149799,149801,149825,149829,149831,149855,149857,149891,149895,149909,149912,149917,149920,149925,149928,149958,149966],[10,147593,147589],{"id":147594},"_16-品优购项目下篇-主体与页面开发",[43,147596,147598],{"id":147597},"_161-项目主体模块制作","16.1 项目主体模块制作",[48,147600,147602],{"id":147601},"_1611-首页制作","16.1.1 首页制作",[14,147604,147605,147607,147608,147610,147611,147614],{},[18,147606,109923],{}," 主体模块是 ",[18,147609,81923],{}," 里面专有的，注意需要新的样式文件 ",[18,147612,147613],{},"index.css，"," 就不要写在common.css中了",[6750,147616],{"style":134273,"src":147617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[6750,147619],{"style":134273,"src":147620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,147622,147623],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[59,147625,147626,147629,147632],{},[62,147627,147628],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[62,147630,147631],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[62,147633,147634],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,147636,146256],{},[93,147638,147639],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,147640,147641,147647,147657],{"__ignoreMap":98},[102,147642,147643,147645],{"class":104,"line":105},[102,147644,138265],{"class":112},[102,147646,1077],{"class":119},[102,147648,147649,147651,147653,147655],{"class":104,"line":116},[102,147650,138897],{"class":187},[102,147652,59302],{"class":119},[102,147654,31600],{"class":187},[102,147656,266],{"class":119},[102,147658,147659],{"class":104,"line":123},[102,147660,301],{"class":119},[14,147662,146296],{},[93,147664,147665],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,147666,147667,147673,147683],{"__ignoreMap":98},[102,147668,147669,147671],{"class":104,"line":105},[102,147670,138265],{"class":112},[102,147672,1077],{"class":119},[102,147674,147675,147677,147679,147681],{"class":104,"line":116},[102,147676,138897],{"class":187},[102,147678,59302],{"class":119},[102,147680,31600],{"class":187},[102,147682,266],{"class":119},[102,147684,147685],{"class":104,"line":123},[102,147686,301],{"class":119},[87,147688,147689],{},[62,147690,147691],{},"左侧focus模块制作",[6750,147693],{"style":134273,"src":147694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,147696,146256],{},[93,147698,147699],{"className":134417,"code":135740,"language":134419,"meta":98,"style":98},[83,147700,147701,147709,147719,147729],{"__ignoreMap":98},[102,147702,147703,147705,147707],{"class":104,"line":105},[102,147704,61686],{"class":59165},[102,147706,69765],{"class":112},[102,147708,1077],{"class":119},[102,147710,147711,147713,147715,147717],{"class":104,"line":116},[102,147712,135755],{"class":187},[102,147714,59302],{"class":119},[102,147716,62754],{"class":187},[102,147718,266],{"class":119},[102,147720,147721,147723,147725,147727],{"class":104,"line":123},[102,147722,78663],{"class":187},[102,147724,59302],{"class":119},[102,147726,62602],{"class":187},[102,147728,266],{"class":119},[102,147730,147731],{"class":104,"line":130},[102,147732,301],{"class":119},[14,147734,146296],{},[93,147736,147737],{"className":134417,"code":135740,"language":134419,"meta":98,"style":98},[83,147738,147739,147747,147757,147767],{"__ignoreMap":98},[102,147740,147741,147743,147745],{"class":104,"line":105},[102,147742,61686],{"class":59165},[102,147744,69765],{"class":112},[102,147746,1077],{"class":119},[102,147748,147749,147751,147753,147755],{"class":104,"line":116},[102,147750,135755],{"class":187},[102,147752,59302],{"class":119},[102,147754,62754],{"class":187},[102,147756,266],{"class":119},[102,147758,147759,147761,147763,147765],{"class":104,"line":123},[102,147760,78663],{"class":187},[102,147762,59302],{"class":119},[102,147764,62602],{"class":187},[102,147766,266],{"class":119},[102,147768,147769],{"class":104,"line":130},[102,147770,301],{"class":119},[14,147772,147773],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[87,147775,147776],{"start":116},[62,147777,147778],{},"右侧newsflash模块制作",[6750,147780],{"style":134273,"src":147781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,147783,147784],{},"右侧的模块 分为上中下三个盒子",[14,147786,147787],{},"结构代码：",[93,147789,147790],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,147791,147792],{"__ignoreMap":98},[102,147793,147794,147796,147798,147800,147802,147804,147806,147808,147810,147812,147814,147816],{"class":104,"line":105},[102,147795,1208],{"class":119},[102,147797,6750],{"class":59165},[102,147799,63104],{"class":112},[102,147801,260],{"class":119},[102,147803,141934],{"class":278},[102,147805,63112],{"class":112},[102,147807,260],{"class":119},[102,147809,141941],{"class":278},[102,147811,141944],{"class":112},[102,147813,260],{"class":119},[102,147815,141949],{"class":278},[102,147817,59172],{"class":119},[14,147819,147820,147821,147824],{},"1 号盒子为 ",[83,147822,147823],{},"news"," 新闻模块 高度为 165px",[6750,147826],{"style":134273,"src":147827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,147829,147830,147831,147834,147835],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[83,147832,147833],{},"news-hd","，下面是 ",[83,147836,147837],{},"news-bd",[14,147839,147787],{},[93,147841,147842],{"className":135164,"code":138521,"language":135166,"meta":98,"style":98},[83,147843,147844,147848,147862,147866],{"__ignoreMap":98},[102,147845,147846],{"class":104,"line":105},[102,147847,138528],{"class":126},[102,147849,147850,147852,147854,147856,147858,147860],{"class":104,"line":116},[102,147851,1208],{"class":119},[102,147853,59476],{"class":59165},[102,147855,61351],{"class":112},[102,147857,260],{"class":119},[102,147859,138541],{"class":278},[102,147861,59172],{"class":119},[102,147863,147864],{"class":104,"line":123},[102,147865,138548],{"class":119},[102,147867,147868,147870,147872],{"class":104,"line":130},[102,147869,59650],{"class":119},[102,147871,59476],{"class":59165},[102,147873,59172],{"class":119},[14,147875,147876],{},"样式代码：",[93,147878,147879],{"className":135164,"code":138521,"language":135166,"meta":98,"style":98},[83,147880,147881,147885,147899,147903],{"__ignoreMap":98},[102,147882,147883],{"class":104,"line":105},[102,147884,138528],{"class":126},[102,147886,147887,147889,147891,147893,147895,147897],{"class":104,"line":116},[102,147888,1208],{"class":119},[102,147890,59476],{"class":59165},[102,147892,61351],{"class":112},[102,147894,260],{"class":119},[102,147896,138541],{"class":278},[102,147898,59172],{"class":119},[102,147900,147901],{"class":104,"line":123},[102,147902,138548],{"class":119},[102,147904,147905,147907,147909],{"class":104,"line":130},[102,147906,59650],{"class":119},[102,147908,59476],{"class":59165},[102,147910,59172],{"class":119},[14,147912,147913,147914,147916],{},"上面是",[83,147915,147833],{},"，设置高度是 33px，设置下边框",[59,147918,147919,147925],{},[62,147920,147921,147922,147924],{},"里面放一个",[83,147923,8518],{}," 标题",[62,147926,147927,147928,147930,147931,147933],{},"放一个a",[83,147929,110558],{},"，内容是 更多，然后让 ",[83,147932,9275],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,147935,147787],{},[93,147937,147938],{"className":134417,"code":146259,"language":134419,"meta":98,"style":98},[83,147939,147940,147948,147958,147968],{"__ignoreMap":98},[102,147941,147942,147944,147946],{"class":104,"line":105},[102,147943,59476],{"class":59165},[102,147945,145418],{"class":112},[102,147947,1077],{"class":119},[102,147949,147950,147952,147954,147956],{"class":104,"line":116},[102,147951,145425],{"class":187},[102,147953,59302],{"class":119},[102,147955,16439],{"class":278},[102,147957,266],{"class":119},[102,147959,147960,147962,147964,147966],{"class":104,"line":123},[102,147961,136033],{"class":187},[102,147963,59302],{"class":119},[102,147965,68734],{"class":187},[102,147967,266],{"class":119},[102,147969,147970],{"class":104,"line":130},[102,147971,301],{"class":119},[14,147973,147876],{},[93,147975,147976],{"className":134417,"code":146259,"language":134419,"meta":98,"style":98},[83,147977,147978,147986,147996,148006],{"__ignoreMap":98},[102,147979,147980,147982,147984],{"class":104,"line":105},[102,147981,59476],{"class":59165},[102,147983,145418],{"class":112},[102,147985,1077],{"class":119},[102,147987,147988,147990,147992,147994],{"class":104,"line":116},[102,147989,145425],{"class":187},[102,147991,59302],{"class":119},[102,147993,16439],{"class":278},[102,147995,266],{"class":119},[102,147997,147998,148000,148002,148004],{"class":104,"line":123},[102,147999,136033],{"class":187},[102,148001,59302],{"class":119},[102,148003,68734],{"class":187},[102,148005,266],{"class":119},[102,148007,148008],{"class":104,"line":130},[102,148009,301],{"class":119},[14,148011,148012,148013],{},"下面是",[83,148014,147837],{},[59,148016,148017,148025],{},[62,148018,148019,148020,108883,148022,148024],{},"里面包含 ",[83,148021,59],{},[83,148023,62],{}," 还有链接",[62,148026,147497,148027,148029,148030,148032,148033,148036,148037],{},[83,148028,62],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[83,148031,139083],{}," 2.设置 ",[83,148034,148035],{},"white-space: nowrap;"," 3. 设置 ",[83,148038,148039],{},"text-overflow: ellipsis;",[14,148041,147787],{},[93,148043,148045],{"className":134417,"code":148044,"language":134419,"meta":98,"style":98},"div {\n  overflow: hidden;\n}\n",[83,148046,148047,148053,148064],{"__ignoreMap":98},[102,148048,148049,148051],{"class":104,"line":105},[102,148050,59476],{"class":59165},[102,148052,1077],{"class":119},[102,148054,148055,148058,148060,148062],{"class":104,"line":116},[102,148056,148057],{"class":187},"  overflow",[102,148059,59302],{"class":119},[102,148061,69579],{"class":187},[102,148063,266],{"class":119},[102,148065,148066],{"class":104,"line":123},[102,148067,301],{"class":119},[14,148069,147876],{},[93,148071,148072],{"className":134417,"code":148044,"language":134419,"meta":98,"style":98},[83,148073,148074,148080,148090],{"__ignoreMap":98},[102,148075,148076,148078],{"class":104,"line":105},[102,148077,59476],{"class":59165},[102,148079,1077],{"class":119},[102,148081,148082,148084,148086,148088],{"class":104,"line":116},[102,148083,148057],{"class":187},[102,148085,59302],{"class":119},[102,148087,69579],{"class":187},[102,148089,266],{"class":119},[102,148091,148092],{"class":104,"line":123},[102,148093,301],{"class":119},[14,148095,148096,148097,148100],{},"2 号盒子为 ",[83,148098,148099],{},"lifeservice"," 生活服务模块 高度为 209px",[6750,148102],{"style":134273,"src":148103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[59,148105,148106,148109,148119,148143,148154],{},[62,148107,148108],{},"设置边框（左右下边框）",[62,148110,148111,148112,148115,148116,148118],{},"里面的内容 是 ",[83,148113,148114],{},"ul > 12*li","，给",[83,148117,62],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[62,148120,148121,148122],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[59,148123,148124,148129,148138],{},[62,148125,148126,148128],{},[83,148127,148099],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[62,148130,148131,148132,148134,148135,148137],{},"可以让 ",[83,148133,148099],{}," 里面的 ",[83,148136,59],{}," 宽度为 252，就可以装的下 4 个 小 li",[62,148139,148140,148142],{},[83,148141,148099],{}," 盒子 overflow 隐藏多余的部分就可以了",[62,148144,124332,148145,148147,148148,148150,148151,148153],{},[83,148146,62],{}," 里面放一个 ",[83,148149,9473],{},"（里面放图标），下面的文本用 ",[83,148152,14],{}," 标签包裹",[62,148155,146917,148156,148158,148159,148161,148162,146951,148164,148167],{},[83,148157,9473],{}," 设置 24px宽和28px的高（注意 ",[83,148160,9473],{}," 是行内元素， 转成行内块），给 ",[83,148163,62],{},[83,148165,148166],{},"text-align:center"," 让里面内容居中显示",[14,148169,147787],{},[93,148171,148173],{"className":134417,"code":148172,"language":134419,"meta":98,"style":98},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[83,148174,148175,148193,148198,148208],{"__ignoreMap":98},[102,148176,148177,148179,148181,148183,148185,148187,148189,148191],{"class":104,"line":105},[102,148178,102],{"class":59165},[102,148180,2571],{"class":119},[102,148182,9275],{"class":59165},[102,148184,2571],{"class":119},[102,148186,31417],{"class":59165},[102,148188,2571],{"class":119},[102,148190,18],{"class":59165},[102,148192,1077],{"class":119},[102,148194,148195],{"class":104,"line":116},[102,148196,148197],{"class":126},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[102,148199,148200,148202,148204,148206],{"class":104,"line":123},[102,148201,136033],{"class":187},[102,148203,59302],{"class":119},[102,148205,136095],{"class":187},[102,148207,266],{"class":119},[102,148209,148210],{"class":104,"line":130},[102,148211,301],{"class":119},[14,148213,147876],{},[93,148215,148216],{"className":134417,"code":148172,"language":134419,"meta":98,"style":98},[83,148217,148218,148236,148240,148250],{"__ignoreMap":98},[102,148219,148220,148222,148224,148226,148228,148230,148232,148234],{"class":104,"line":105},[102,148221,102],{"class":59165},[102,148223,2571],{"class":119},[102,148225,9275],{"class":59165},[102,148227,2571],{"class":119},[102,148229,31417],{"class":59165},[102,148231,2571],{"class":119},[102,148233,18],{"class":59165},[102,148235,1077],{"class":119},[102,148237,148238],{"class":104,"line":116},[102,148239,148197],{"class":126},[102,148241,148242,148244,148246,148248],{"class":104,"line":123},[102,148243,136033],{"class":187},[102,148245,59302],{"class":119},[102,148247,136095],{"class":187},[102,148249,266],{"class":119},[102,148251,148252],{"class":104,"line":130},[102,148253,301],{"class":119},[14,148255,148256,148257,148260],{},"3 号盒子为 ",[83,148258,148259],{},"bargain"," 特价商品",[59,148262,148263],{},[62,148264,148265],{},"这个比较简单，直接插入一张图片即可",[14,148267,147787],{},[93,148269,148270],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,148271,148272],{"__ignoreMap":98},[102,148273,148274,148276,148278,148280,148282,148284,148286,148288,148290,148292,148294,148296],{"class":104,"line":105},[102,148275,1208],{"class":119},[102,148277,6750],{"class":59165},[102,148279,63104],{"class":112},[102,148281,260],{"class":119},[102,148283,141934],{"class":278},[102,148285,63112],{"class":112},[102,148287,260],{"class":119},[102,148289,141941],{"class":278},[102,148291,141944],{"class":112},[102,148293,260],{"class":119},[102,148295,141949],{"class":278},[102,148297,59172],{"class":119},[14,148299,147876],{},[93,148301,148302],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,148303,148304],{"__ignoreMap":98},[102,148305,148306,148308,148310,148312,148314,148316,148318,148320,148322,148324,148326,148328],{"class":104,"line":105},[102,148307,1208],{"class":119},[102,148309,6750],{"class":59165},[102,148311,63104],{"class":112},[102,148313,260],{"class":119},[102,148315,141934],{"class":278},[102,148317,63112],{"class":112},[102,148319,260],{"class":119},[102,148321,141941],{"class":278},[102,148323,141944],{"class":112},[102,148325,260],{"class":119},[102,148327,141949],{"class":278},[102,148329,59172],{"class":119},[48,148331,148333],{"id":148332},"_1612-推荐模块制作","16.1.2 推荐模块制作",[6750,148335],{"style":134273,"src":148336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,148338,148339,148340,148343],{},"大盒子 ",[83,148341,148342],{},"recom"," 推荐模块 recommend",[59,148345,148346],{},[62,148347,148348,148349,148351,148352,148355],{},"给这个 ",[83,148350,148342],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[83,148353,148354],{},"#ebebeb","），设置距离上边 12px",[14,148357,147787],{},[93,148359,148361],{"className":134417,"code":148360,"language":134419,"meta":98,"style":98},"div {\n  background-color: #f0f0f0;\n}\n",[83,148362,148363,148369,148380],{"__ignoreMap":98},[102,148364,148365,148367],{"class":104,"line":105},[102,148366,59476],{"class":59165},[102,148368,1077],{"class":119},[102,148370,148371,148373,148375,148378],{"class":104,"line":116},[102,148372,78743],{"class":187},[102,148374,59302],{"class":119},[102,148376,148377],{"class":187},"#f0f0f0",[102,148379,266],{"class":119},[102,148381,148382],{"class":104,"line":123},[102,148383,301],{"class":119},[14,148385,147876],{},[93,148387,148388],{"className":134417,"code":148360,"language":134419,"meta":98,"style":98},[83,148389,148390,148396,148406],{"__ignoreMap":98},[102,148391,148392,148394],{"class":104,"line":105},[102,148393,59476],{"class":59165},[102,148395,1077],{"class":119},[102,148397,148398,148400,148402,148404],{"class":104,"line":116},[102,148399,78743],{"class":187},[102,148401,59302],{"class":119},[102,148403,148377],{"class":187},[102,148405,266],{"class":119},[102,148407,148408],{"class":104,"line":123},[102,148409,301],{"class":119},[14,148411,148412],{},"里面包含 2 个盒子， 浮动即可",[14,148414,147787],{},[93,148416,148417],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,148418,148419,148425,148435],{"__ignoreMap":98},[102,148420,148421,148423],{"class":104,"line":105},[102,148422,138265],{"class":112},[102,148424,1077],{"class":119},[102,148426,148427,148429,148431,148433],{"class":104,"line":116},[102,148428,138897],{"class":187},[102,148430,59302],{"class":119},[102,148432,31600],{"class":187},[102,148434,266],{"class":119},[102,148436,148437],{"class":104,"line":123},[102,148438,301],{"class":119},[14,148440,148441,148442],{},"1 号盒子 ",[83,148443,148444],{},"recom_hd",[59,148446,148447,148450],{},[62,148448,148449],{},"设置宽度205px，高度163px",[62,148451,147921,148452,148454],{},[83,148453,6750],{},"标签，插入图片即可",[14,148456,147787],{},[93,148458,148459],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,148460,148461],{"__ignoreMap":98},[102,148462,148463,148465,148467,148469,148471,148473,148475,148477,148479,148481,148483,148485],{"class":104,"line":105},[102,148464,1208],{"class":119},[102,148466,6750],{"class":59165},[102,148468,63104],{"class":112},[102,148470,260],{"class":119},[102,148472,141934],{"class":278},[102,148474,63112],{"class":112},[102,148476,260],{"class":119},[102,148478,141941],{"class":278},[102,148480,141944],{"class":112},[102,148482,260],{"class":119},[102,148484,141949],{"class":278},[102,148486,59172],{"class":119},[14,148488,147876],{},[93,148490,148491],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,148492,148493],{"__ignoreMap":98},[102,148494,148495,148497,148499,148501,148503,148505,148507,148509,148511,148513,148515,148517],{"class":104,"line":105},[102,148496,1208],{"class":119},[102,148498,6750],{"class":59165},[102,148500,63104],{"class":112},[102,148502,260],{"class":119},[102,148504,141934],{"class":278},[102,148506,63112],{"class":112},[102,148508,260],{"class":119},[102,148510,141941],{"class":278},[102,148512,141944],{"class":112},[102,148514,260],{"class":119},[102,148516,141949],{"class":278},[102,148518,59172],{"class":119},[14,148520,148521,148522,148525],{},"2 号盒子 ",[83,148523,148524],{},"recom_bd"," ，注意里面的小竖线",[59,148527,148528,148539,148542,148547,148552],{},[62,148529,148530,148531,148533,148534,148536,148537],{},"右侧结构里面放 ",[83,148532,59],{}," 包含 4个 ",[83,148535,62],{},"，每个li里面包含一个",[83,148538,6750],{},[62,148540,148541],{},"直接利用切片工具把里面的内容当成一张图片",[62,148543,146917,148544,148546],{},[83,148545,62],{}," 设置浮动",[62,148548,146917,148549,148551],{},[83,148550,6750],{}," 设置宽高，宽度 248px，高度 163px",[62,148553,148554,148555,148115,148558,148560,148561,148563,148564],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[83,148556,148557],{},"top 10px",[83,148559,62],{},"设置相对定位（注意，最后一个",[83,148562,62],{},"不用设置伪元素），可以利用 ",[83,148565,148566],{},"nth-child(-n+3){...}",[14,148568,147787],{},[93,148570,148571],{"className":134417,"code":146259,"language":134419,"meta":98,"style":98},[83,148572,148573,148581,148591,148601],{"__ignoreMap":98},[102,148574,148575,148577,148579],{"class":104,"line":105},[102,148576,59476],{"class":59165},[102,148578,145418],{"class":112},[102,148580,1077],{"class":119},[102,148582,148583,148585,148587,148589],{"class":104,"line":116},[102,148584,145425],{"class":187},[102,148586,59302],{"class":119},[102,148588,16439],{"class":278},[102,148590,266],{"class":119},[102,148592,148593,148595,148597,148599],{"class":104,"line":123},[102,148594,136033],{"class":187},[102,148596,59302],{"class":119},[102,148598,68734],{"class":187},[102,148600,266],{"class":119},[102,148602,148603],{"class":104,"line":130},[102,148604,301],{"class":119},[14,148606,147876],{},[93,148608,148609],{"className":134417,"code":146259,"language":134419,"meta":98,"style":98},[83,148610,148611,148619,148629,148639],{"__ignoreMap":98},[102,148612,148613,148615,148617],{"class":104,"line":105},[102,148614,59476],{"class":59165},[102,148616,145418],{"class":112},[102,148618,1077],{"class":119},[102,148620,148621,148623,148625,148627],{"class":104,"line":116},[102,148622,145425],{"class":187},[102,148624,59302],{"class":119},[102,148626,16439],{"class":278},[102,148628,266],{"class":119},[102,148630,148631,148633,148635,148637],{"class":104,"line":123},[102,148632,136033],{"class":187},[102,148634,59302],{"class":119},[102,148636,68734],{"class":187},[102,148638,266],{"class":119},[102,148640,148641],{"class":104,"line":130},[102,148642,301],{"class":119},[48,148644,148646],{"id":148645},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[6750,148648],{"style":134273,"src":148649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,148651,148652],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,148654,148655],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,148657,148658,148661],{},[83,148659,148660],{},"box_hd"," 制作",[14,148663,148441,148664,148666],{},[83,148665,148660],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[6750,148668],{"style":134273,"src":148669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[59,148671,148672,148677,148682,148685],{},[62,148673,148674,148676],{},[83,148675,148660],{}," 给 30px 的高度，2个像素的下边框",[62,148678,148679,148680],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[83,148681,146928],{},[62,148683,148684],{},"左侧盒左浮动，右侧盒子右浮动",[62,148686,148687,148689,148690,148692],{},[83,148688,9275],{},"标签之间的距离用左右的",[83,148691,38748],{},"撑开即可",[14,148694,148695],{},"结构代码",[93,148697,148698],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,148699,148700,148706,148716],{"__ignoreMap":98},[102,148701,148702,148704],{"class":104,"line":105},[102,148703,138265],{"class":112},[102,148705,1077],{"class":119},[102,148707,148708,148710,148712,148714],{"class":104,"line":116},[102,148709,138897],{"class":187},[102,148711,59302],{"class":119},[102,148713,31600],{"class":187},[102,148715,266],{"class":119},[102,148717,148718],{"class":104,"line":123},[102,148719,301],{"class":119},[14,148721,148722],{},"样式代码",[93,148724,148725],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,148726,148727,148733,148743],{"__ignoreMap":98},[102,148728,148729,148731],{"class":104,"line":105},[102,148730,138265],{"class":112},[102,148732,1077],{"class":119},[102,148734,148735,148737,148739,148741],{"class":104,"line":116},[102,148736,138897],{"class":187},[102,148738,59302],{"class":119},[102,148740,31600],{"class":187},[102,148742,266],{"class":119},[102,148744,148745],{"class":104,"line":123},[102,148746,301],{"class":119},[14,148748,148749,148661],{},[83,148750,148751],{},"box_bd",[14,148753,148754],{},"2 号盒子 box_bd，不要给高度",[6750,148756],{"style":134273,"src":148757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,148759,148760],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,148762,148763],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,148765,148766],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[59,148768,148769,148781,148797],{},[62,148770,148771,148773,148774,148777,148778,148780],{},[83,148772,148751],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[83,148775,148776],{},"tab_content","，在",[83,148779,148776],{}," 里面包裹tab选项卡对应的内容",[62,148782,148783,148784,148787,148788,148790,148791,148793,148794,148796],{},"内容被一个大盒子包裹（",[83,148785,148786],{},"tab_list_item","），里面是 ",[83,148789,59],{}," 包裹 5个 ",[83,148792,62],{},"，每个",[83,148795,62],{},"设置对应的宽度，然后设置浮动",[62,148798,148799,148800,148802,148803,148805,148806],{},"而这5个",[83,148801,62],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[83,148804,62],{},"设置",[59,148807,148808,148826,148829],{},[62,148809,148810,148811,148813,148814,148816,148817,148819,148820,148822,148823,148825],{},"第一个小 ",[83,148812,62],{}," 分为上下结构，上面是 ",[83,148815,59],{}," 包裹 ",[83,148818,62],{}," ，",[83,148821,62],{},"里面包裹 ",[83,148824,9275],{},"，下面插入一张图片",[62,148827,148828],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[62,148830,148831,148832,148834,148835,148837,148838,148840],{},"后面的小 ",[83,148833,62],{}," 里面先放一个",[83,148836,9275],{},"标签，然后在",[83,148839,9275],{},"标签里面插入图片即可",[14,148842,148695],{},[93,148844,148845],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,148846,148847],{"__ignoreMap":98},[102,148848,148849,148851,148853,148855,148857,148859,148861,148863,148865,148867,148869,148871],{"class":104,"line":105},[102,148850,1208],{"class":119},[102,148852,6750],{"class":59165},[102,148854,63104],{"class":112},[102,148856,260],{"class":119},[102,148858,141934],{"class":278},[102,148860,63112],{"class":112},[102,148862,260],{"class":119},[102,148864,141941],{"class":278},[102,148866,141944],{"class":112},[102,148868,260],{"class":119},[102,148870,141949],{"class":278},[102,148872,59172],{"class":119},[14,148874,148722],{},[93,148876,148877],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,148878,148879],{"__ignoreMap":98},[102,148880,148881,148883,148885,148887,148889,148891,148893,148895,148897,148899,148901,148903],{"class":104,"line":105},[102,148882,1208],{"class":119},[102,148884,6750],{"class":59165},[102,148886,63104],{"class":112},[102,148888,260],{"class":119},[102,148890,141934],{"class":278},[102,148892,63112],{"class":112},[102,148894,260],{"class":119},[102,148896,141941],{"class":278},[102,148898,141944],{"class":112},[102,148900,260],{"class":119},[102,148902,141949],{"class":278},[102,148904,59172],{"class":119},[14,148906,148907],{},"tab栏切换需求！！！！！！介绍：",[6750,148909],{"style":134273,"src":148910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[59,148912,148913,148921,148927,148930],{},[62,148914,148915,148918,148919],{},[83,148916,148917],{},"tab","栏的布局是 ",[83,148920,146928],{},[62,148922,148923,148924,148926],{},"有多少个",[83,148925,148917],{},"选项卡，那么对应就有多少个内容",[62,148928,148929],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[62,148931,148932,148933,148936,148937,148939,148940,148942],{},"等后面我们学习了",[83,148934,148935],{},"js","之后，我们就会配合",[83,148938,148935],{},"来实现，",[83,148941,148917],{},"栏的切换",[43,148944,148946],{"id":148945},"_162-列表制作","16.2 列表制作",[48,148948,148950],{"id":148949},"_1621-准备工作","16.2.1 准备工作",[59,148952,148953,148956,148959,148962],{},[62,148954,148955],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[62,148957,148958],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[62,148960,148961],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[62,148963,148964],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[48,148966,148968,148969,108883,148971,148973],{"id":148967},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[83,148970,139422],{},[83,148972,61578],{}," 修改",[6750,148975],{"style":134273,"src":148976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[59,148978,148979],{},[62,148980,148981],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,148983,147787],{},[93,148985,148986],{"className":134417,"code":139849,"language":134419,"meta":98,"style":98},[83,148987,148988,148992,149006,149010,149024,149028,149042,149046,149060,149064],{"__ignoreMap":98},[102,148989,148990],{"class":104,"line":105},[102,148991,139856],{"class":126},[102,148993,148994,148996,148998,149000,149002,149004],{"class":104,"line":116},[102,148995,139861],{"class":112},[102,148997,87672],{"class":119},[102,148999,136777],{"class":187},[102,149001,59302],{"class":119},[102,149003,139870],{"class":187},[102,149005,137347],{"class":119},[102,149007,149008],{"class":104,"line":123},[102,149009,139877],{"class":126},[102,149011,149012,149014,149016,149018,149020,149022],{"class":104,"line":130},[102,149013,139882],{"class":112},[102,149015,87672],{"class":119},[102,149017,136777],{"class":187},[102,149019,59302],{"class":119},[102,149021,62629],{"class":187},[102,149023,137347],{"class":119},[102,149025,149026],{"class":104,"line":136},[102,149027,139897],{"class":126},[102,149029,149030,149032,149034,149036,149038,149040],{"class":104,"line":142},[102,149031,139902],{"class":112},[102,149033,87672],{"class":119},[102,149035,136777],{"class":187},[102,149037,59302],{"class":119},[102,149039,62696],{"class":187},[102,149041,137347],{"class":119},[102,149043,149044],{"class":104,"line":148},[102,149045,139917],{"class":126},[102,149047,149048,149050,149052,149054,149056,149058],{"class":104,"line":157},[102,149049,139922],{"class":112},[102,149051,87672],{"class":119},[102,149053,136777],{"class":187},[102,149055,59302],{"class":119},[102,149057,94098],{"class":187},[102,149059,137347],{"class":119},[102,149061,149062],{"class":104,"line":163},[102,149063,139937],{"class":126},[102,149065,149066,149068,149070,149072,149074,149076],{"class":104,"line":175},[102,149067,139942],{"class":112},[102,149069,87672],{"class":119},[102,149071,136777],{"class":187},[102,149073,59302],{"class":119},[102,149075,139951],{"class":187},[102,149077,137347],{"class":119},[14,149079,147876],{},[93,149081,149082],{"className":134417,"code":139849,"language":134419,"meta":98,"style":98},[83,149083,149084,149088,149102,149106,149120,149124,149138,149142,149156,149160],{"__ignoreMap":98},[102,149085,149086],{"class":104,"line":105},[102,149087,139856],{"class":126},[102,149089,149090,149092,149094,149096,149098,149100],{"class":104,"line":116},[102,149091,139861],{"class":112},[102,149093,87672],{"class":119},[102,149095,136777],{"class":187},[102,149097,59302],{"class":119},[102,149099,139870],{"class":187},[102,149101,137347],{"class":119},[102,149103,149104],{"class":104,"line":123},[102,149105,139877],{"class":126},[102,149107,149108,149110,149112,149114,149116,149118],{"class":104,"line":130},[102,149109,139882],{"class":112},[102,149111,87672],{"class":119},[102,149113,136777],{"class":187},[102,149115,59302],{"class":119},[102,149117,62629],{"class":187},[102,149119,137347],{"class":119},[102,149121,149122],{"class":104,"line":136},[102,149123,139897],{"class":126},[102,149125,149126,149128,149130,149132,149134,149136],{"class":104,"line":142},[102,149127,139902],{"class":112},[102,149129,87672],{"class":119},[102,149131,136777],{"class":187},[102,149133,59302],{"class":119},[102,149135,62696],{"class":187},[102,149137,137347],{"class":119},[102,149139,149140],{"class":104,"line":148},[102,149141,139917],{"class":126},[102,149143,149144,149146,149148,149150,149152,149154],{"class":104,"line":157},[102,149145,139922],{"class":112},[102,149147,87672],{"class":119},[102,149149,136777],{"class":187},[102,149151,59302],{"class":119},[102,149153,94098],{"class":187},[102,149155,137347],{"class":119},[102,149157,149158],{"class":104,"line":163},[102,149159,139937],{"class":126},[102,149161,149162,149164,149166,149168,149170,149172],{"class":104,"line":175},[102,149163,139942],{"class":112},[102,149165,87672],{"class":119},[102,149167,136777],{"class":187},[102,149169,59302],{"class":119},[102,149171,139951],{"class":187},[102,149173,137347],{"class":119},[59,149175,149176,149187],{},[62,149177,149178,149179,149182,149183,108883,149185],{},"1 号盒子左侧浮动 ",[83,149180,149181],{},"sk_list"," 里面包含 ",[83,149184,59],{},[83,149186,62],{},[62,149188,149189,149190,149182,149193,108883,149195],{},"2 号盒子左侧浮动 ",[83,149191,149192],{},"sk_con",[83,149194,59],{},[83,149196,62],{},[14,149198,147787],{},[93,149200,149201],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,149202,149203,149209,149219],{"__ignoreMap":98},[102,149204,149205,149207],{"class":104,"line":105},[102,149206,138265],{"class":112},[102,149208,1077],{"class":119},[102,149210,149211,149213,149215,149217],{"class":104,"line":116},[102,149212,138897],{"class":187},[102,149214,59302],{"class":119},[102,149216,31600],{"class":187},[102,149218,266],{"class":119},[102,149220,149221],{"class":104,"line":123},[102,149222,301],{"class":119},[14,149224,147876],{},[93,149226,149227],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,149228,149229,149235,149245],{"__ignoreMap":98},[102,149230,149231,149233],{"class":104,"line":105},[102,149232,138265],{"class":112},[102,149234,1077],{"class":119},[102,149236,149237,149239,149241,149243],{"class":104,"line":116},[102,149238,138897],{"class":187},[102,149240,59302],{"class":119},[102,149242,31600],{"class":187},[102,149244,266],{"class":119},[102,149246,149247],{"class":104,"line":123},[102,149248,301],{"class":119},[48,149250,149252,149253],{"id":149251},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[83,149254,149255],{},"sk_container",[6750,149257],{"style":134273,"src":149258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[59,149260,149261,149266],{},[62,149262,148441,149263,149265],{},[83,149264,149255],{}," 给宽度 1200，不要给高度",[62,149267,149268],{},"一定不要忘记清除浮动",[14,149270,147787],{},[93,149272,149273],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,149274,149275,149281,149291],{"__ignoreMap":98},[102,149276,149277,149279],{"class":104,"line":105},[102,149278,138265],{"class":112},[102,149280,1077],{"class":119},[102,149282,149283,149285,149287,149289],{"class":104,"line":116},[102,149284,138897],{"class":187},[102,149286,59302],{"class":119},[102,149288,31600],{"class":187},[102,149290,266],{"class":119},[102,149292,149293],{"class":104,"line":123},[102,149294,301],{"class":119},[87,149296,149297],{},[62,149298,149299],{},"sk_hd制作",[59,149301,149302],{},[62,149303,148521,149304,149307],{},[83,149305,149306],{},"sk_hd"," ，插入图片即可",[14,149309,147787],{},[93,149311,149312],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,149313,149314],{"__ignoreMap":98},[102,149315,149316,149318,149320,149322,149324,149326,149328,149330,149332,149334,149336,149338],{"class":104,"line":105},[102,149317,1208],{"class":119},[102,149319,6750],{"class":59165},[102,149321,63104],{"class":112},[102,149323,260],{"class":119},[102,149325,141934],{"class":278},[102,149327,63112],{"class":112},[102,149329,260],{"class":119},[102,149331,141941],{"class":278},[102,149333,141944],{"class":112},[102,149335,260],{"class":119},[102,149337,141949],{"class":278},[102,149339,59172],{"class":119},[87,149341,149342],{"start":116},[62,149343,149344],{},"sk_bd制作",[59,149346,149347],{},[62,149348,149349,149350,149353,149354,108883,149356,149358],{},"3 号盒子 ",[83,149351,149352],{},"sk_bd"," ，里面包含很多的 ",[83,149355,59],{},[83,149357,62],{},[59,149359,149360,149369],{},[62,149361,149362,149363,149365,149366,149368],{},"当鼠标移入到 ",[83,149364,62],{}," 上面的时候显示红色的边框，在这里先给 ",[83,149367,62],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[62,149370,149371,149372,149374,149375,149377,149378,149381,149382,149384],{},"由于给每个 ",[83,149373,62],{}," 都设置了外边距，导致一行的最后一个 ",[83,149376,62],{}," 掉了下来，在这里我们利用 ",[83,149379,149380],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[83,149383,62],{},"，去掉外边距就好了",[14,149386,147787],{},[93,149388,149389],{"className":134417,"code":146606,"language":134419,"meta":98,"style":98},[83,149390,149391,149397,149409],{"__ignoreMap":98},[102,149392,149393,149395],{"class":104,"line":105},[102,149394,59476],{"class":59165},[102,149396,1077],{"class":119},[102,149398,149399,149401,149403,149405,149407],{"class":104,"line":116},[102,149400,78335],{"class":187},[102,149402,59302],{"class":119},[102,149404,8423],{"class":187},[102,149406,59421],{"class":187},[102,149408,266],{"class":119},[102,149410,149411],{"class":104,"line":123},[102,149412,301],{"class":119},[14,149414,147876],{},[93,149416,149417],{"className":134417,"code":146606,"language":134419,"meta":98,"style":98},[83,149418,149419,149425,149437],{"__ignoreMap":98},[102,149420,149421,149423],{"class":104,"line":105},[102,149422,59476],{"class":59165},[102,149424,1077],{"class":119},[102,149426,149427,149429,149431,149433,149435],{"class":104,"line":116},[102,149428,78335],{"class":187},[102,149430,59302],{"class":119},[102,149432,8423],{"class":187},[102,149434,59421],{"class":187},[102,149436,266],{"class":119},[102,149438,149439],{"class":104,"line":123},[102,149440,301],{"class":119},[43,149442,149444],{"id":149443},"_163-注册页面制作","16.3 注册页面制作",[6750,149446],{"style":134273,"src":149447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,149449,149450,149452],{},[18,149451,7501],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[6750,149454],{"style":134273,"src":149455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[48,149457,149459],{"id":149458},"_1631-准备工作","16.3.1 准备工作",[59,149461,149462,149465],{},[62,149463,149464],{},"创建register.html，引入 base.css，引入favicon图标",[62,149466,149467],{},"创建register.css ，在html页面进行引入",[48,149469,149471,149472,149474],{"id":149470},"_1632-header-头部实现","16.3.2 ",[83,149473,139422],{}," 头部实现",[59,149476,149477,149480],{},[62,149478,149479],{},"整个内容用 版心 进行包裹",[62,149481,149482],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,149484,147787],{},[93,149486,149487],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,149488,149489],{"__ignoreMap":98},[102,149490,149491,149493,149495,149497,149499,149501,149503,149505,149507,149509,149511,149513],{"class":104,"line":105},[102,149492,1208],{"class":119},[102,149494,6750],{"class":59165},[102,149496,63104],{"class":112},[102,149498,260],{"class":119},[102,149500,141934],{"class":278},[102,149502,63112],{"class":112},[102,149504,260],{"class":119},[102,149506,141941],{"class":278},[102,149508,141944],{"class":112},[102,149510,260],{"class":119},[102,149512,141949],{"class":278},[102,149514,59172],{"class":119},[14,149516,147876],{},[93,149518,149519],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,149520,149521],{"__ignoreMap":98},[102,149522,149523,149525,149527,149529,149531,149533,149535,149537,149539,149541,149543,149545],{"class":104,"line":105},[102,149524,1208],{"class":119},[102,149526,6750],{"class":59165},[102,149528,63104],{"class":112},[102,149530,260],{"class":119},[102,149532,141934],{"class":278},[102,149534,63112],{"class":112},[102,149536,260],{"class":119},[102,149538,141941],{"class":278},[102,149540,141944],{"class":112},[102,149542,260],{"class":119},[102,149544,141949],{"class":278},[102,149546,59172],{"class":119},[48,149548,149550,149551,149554],{"id":149549},"_1633-registerarea-主体模块实现","16.3.3 ",[83,149552,149553],{},"registerarea"," 主体模块实现",[6750,149556],{"style":134273,"src":149557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,149559,149560],{},"整个大盒子 高度为 522px，设置4个边框",[14,149562,147787],{},[93,149564,149565],{"className":134417,"code":138574,"language":134419,"meta":98,"style":98},[83,149566,149567,149573,149589],{"__ignoreMap":98},[102,149568,149569,149571],{"class":104,"line":105},[102,149570,59476],{"class":59165},[102,149572,1077],{"class":119},[102,149574,149575,149577,149579,149581,149583,149585,149587],{"class":104,"line":116},[102,149576,78761],{"class":187},[102,149578,59302],{"class":119},[102,149580,7039],{"class":187},[102,149582,59357],{"class":108},[102,149584,59386],{"class":187},[102,149586,137809],{"class":187},[102,149588,266],{"class":119},[102,149590,149591],{"class":104,"line":123},[102,149592,301],{"class":119},[14,149594,147876],{},[93,149596,149597],{"className":134417,"code":138574,"language":134419,"meta":98,"style":98},[83,149598,149599,149605,149621],{"__ignoreMap":98},[102,149600,149601,149603],{"class":104,"line":105},[102,149602,59476],{"class":59165},[102,149604,1077],{"class":119},[102,149606,149607,149609,149611,149613,149615,149617,149619],{"class":104,"line":116},[102,149608,78761],{"class":187},[102,149610,59302],{"class":119},[102,149612,7039],{"class":187},[102,149614,59357],{"class":108},[102,149616,59386],{"class":187},[102,149618,137809],{"class":187},[102,149620,266],{"class":119},[102,149622,149623],{"class":104,"line":123},[102,149624,301],{"class":119},[14,149626,149627],{},"1号盒子 是一个 h3 标签，放标题",[59,149629,149630],{},[62,149631,149632],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,149634,147787],{},[93,149636,149637],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,149638,149639,149645,149655],{"__ignoreMap":98},[102,149640,149641,149643],{"class":104,"line":105},[102,149642,138265],{"class":112},[102,149644,1077],{"class":119},[102,149646,149647,149649,149651,149653],{"class":104,"line":116},[102,149648,138897],{"class":187},[102,149650,59302],{"class":119},[102,149652,31600],{"class":187},[102,149654,266],{"class":119},[102,149656,149657],{"class":104,"line":123},[102,149658,301],{"class":119},[14,149660,147876],{},[93,149662,149663],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,149664,149665,149671,149681],{"__ignoreMap":98},[102,149666,149667,149669],{"class":104,"line":105},[102,149668,138265],{"class":112},[102,149670,1077],{"class":119},[102,149672,149673,149675,149677,149679],{"class":104,"line":116},[102,149674,138897],{"class":187},[102,149676,59302],{"class":119},[102,149678,31600],{"class":187},[102,149680,266],{"class":119},[102,149682,149683],{"class":104,"line":123},[102,149684,301],{"class":119},[14,149686,149687],{},"2号盒子 里面放注册的内容",[59,149689,149690,149693,149702,149716,149729,149732,149735,149753,149767],{},[62,149691,149692],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[62,149694,149695,149696,149698,149699,149701],{},"里面的内容利用 ",[83,149697,59],{}," 包含 ",[83,149700,62],{}," 来实现的（不需要用表格）",[62,149703,146931,149704,149706,149707,149709,149710,149712,149713,149715],{},[83,149705,62],{}," 里面，左侧放 ",[83,149708,41473],{}," 标签， 中间放",[83,149711,61686],{}," 标签， 右侧放 ",[83,149714,102],{}," 提示信息",[62,149717,149718,149719,149721,149722,149724,149725,149728],{},"左侧 ",[83,149720,41473],{},"里面的文字都是右对齐，我们可以给",[83,149723,41473],{},"设置一个宽度（88px），然后利用",[83,149726,149727],{},"text-align"," 来设置右对齐",[62,149730,149731],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[62,149733,149734],{},"右侧 span修饰一下文字颜色",[62,149736,149737,149738],{},"提示信息的样式优化",[59,149739,149740,149743,149746],{},[62,149741,149742],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[62,149744,149745],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[62,149747,149748,149749,149752],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[83,149750,149751],{},"vertical-algin"," 来设置 图片与文字对齐方式",[62,149754,149755,149756],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[59,149757,149758,149764],{},[62,149759,149760,149761,149763],{},"设置 ",[83,149762,31417],{}," 的 左右 12px 的内边距，设置一下文字颜色",[62,149765,149766],{},"分别设置 背景颜色",[62,149768,149769,149770,149772],{},"同意协议 和 完成注册 都是用 ",[83,149771,62],{}," 进行包裹",[14,149774,147787],{},[93,149776,149777],{"className":134417,"code":148360,"language":134419,"meta":98,"style":98},[83,149778,149779,149785,149795],{"__ignoreMap":98},[102,149780,149781,149783],{"class":104,"line":105},[102,149782,59476],{"class":59165},[102,149784,1077],{"class":119},[102,149786,149787,149789,149791,149793],{"class":104,"line":116},[102,149788,78743],{"class":187},[102,149790,59302],{"class":119},[102,149792,148377],{"class":187},[102,149794,266],{"class":119},[102,149796,149797],{"class":104,"line":123},[102,149798,301],{"class":119},[14,149800,147876],{},[93,149802,149803],{"className":134417,"code":148360,"language":134419,"meta":98,"style":98},[83,149804,149805,149811,149821],{"__ignoreMap":98},[102,149806,149807,149809],{"class":104,"line":105},[102,149808,59476],{"class":59165},[102,149810,1077],{"class":119},[102,149812,149813,149815,149817,149819],{"class":104,"line":116},[102,149814,78743],{"class":187},[102,149816,59302],{"class":119},[102,149818,148377],{"class":187},[102,149820,266],{"class":119},[102,149822,149823],{"class":104,"line":123},[102,149824,301],{"class":119},[48,149826,149828],{"id":149827},"_1634-底部实现","16.3.4 底部实现",[14,149830,147787],{},[93,149832,149833],{"className":134417,"code":148360,"language":134419,"meta":98,"style":98},[83,149834,149835,149841,149851],{"__ignoreMap":98},[102,149836,149837,149839],{"class":104,"line":105},[102,149838,59476],{"class":59165},[102,149840,1077],{"class":119},[102,149842,149843,149845,149847,149849],{"class":104,"line":116},[102,149844,78743],{"class":187},[102,149846,59302],{"class":119},[102,149848,148377],{"class":187},[102,149850,266],{"class":119},[102,149852,149853],{"class":104,"line":123},[102,149854,301],{"class":119},[14,149856,147876],{},[93,149858,149859],{"className":135164,"code":138521,"language":135166,"meta":98,"style":98},[83,149860,149861,149865,149879,149883],{"__ignoreMap":98},[102,149862,149863],{"class":104,"line":105},[102,149864,138528],{"class":126},[102,149866,149867,149869,149871,149873,149875,149877],{"class":104,"line":116},[102,149868,1208],{"class":119},[102,149870,59476],{"class":59165},[102,149872,61351],{"class":112},[102,149874,260],{"class":119},[102,149876,138541],{"class":278},[102,149878,59172],{"class":119},[102,149880,149881],{"class":104,"line":123},[102,149882,138548],{"class":119},[102,149884,149885,149887,149889],{"class":104,"line":130},[102,149886,59650],{"class":119},[102,149888,59476],{"class":59165},[102,149890,59172],{"class":119},[43,149892,149894],{"id":149893},"_164-项目总结","16.4 项目总结",[87,149896,149897,149900,149903,149906],{},[62,149898,149899],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[62,149901,149902],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[62,149904,149905],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[62,149907,149908],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[6750,149910],{"style":134273,"src":149911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[87,149913,149914],{"start":136},[62,149915,149916],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[6750,149918],{"style":134273,"src":149919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[87,149921,149922],{"start":142},[62,149923,149924],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[6750,149926],{"style":134273,"src":149927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[93,149929,149930],{"className":135164,"code":144574,"language":135166,"meta":98,"style":98},[83,149931,149932],{"__ignoreMap":98},[102,149933,149934,149936,149938,149940,149942,149944,149946,149948,149950,149952,149954,149956],{"class":104,"line":105},[102,149935,1208],{"class":119},[102,149937,61686],{"class":59165},[102,149939,61689],{"class":112},[102,149941,260],{"class":119},[102,149943,70564],{"class":278},[102,149945,387],{"class":112},[102,149947,260],{"class":119},[102,149949,144595],{"class":278},[102,149951,68885],{"class":112},[102,149953,260],{"class":119},[102,149955,144602],{"class":278},[102,149957,59172],{"class":119},[87,149959,149960,149963],{"start":148},[62,149961,149962],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[62,149964,149965],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[8955,149967,149968],{},"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":98,"searchDepth":116,"depth":116,"links":149970},[149971,149976,149983,149991],{"id":147597,"depth":116,"text":147598,"children":149972},[149973,149974,149975],{"id":147601,"depth":123,"text":147602},{"id":148332,"depth":123,"text":148333},{"id":148645,"depth":123,"text":148646},{"id":148945,"depth":116,"text":148946,"children":149977},[149978,149979,149981],{"id":148949,"depth":123,"text":148950},{"id":148967,"depth":123,"text":149980},"16.2.2 列表页 header 和 nav 修改",{"id":149251,"depth":123,"text":149982},"16.2.3 列表页主体 sk_container",{"id":149443,"depth":116,"text":149444,"children":149984},[149985,149986,149988,149990],{"id":149458,"depth":123,"text":149459},{"id":149470,"depth":123,"text":149987},"16.3.2 header 头部实现",{"id":149549,"depth":123,"text":149989},"16.3.3 registerarea 主体模块实现",{"id":149827,"depth":123,"text":149828},{"id":149893,"depth":116,"text":149894},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":147589,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":149998,"title":149999,"body":150000,"description":31240,"extension":8978,"meta":150108,"navigation":651,"path":150109,"seo":150110,"stem":150111,"__hash__":150112},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":150001,"toc":150103},[150002,150005,150009,150012,150015,150024,150033,150037,150042,150049,150067,150070,150073,150076,150079,150082,150085,150088,150091,150094,150097,150100],[10,150003,149999],{"id":150004},"_17-web服务器与网站发布",[43,150006,150008],{"id":150007},"_171-web服务器","17.1 Web服务器",[14,150010,150011],{},"把自己网站上传到服务器上，可以让其他人访问",[6750,150013],{"style":134273,"src":150014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,150016,150017,150020,150021],{},[18,150018,150019],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[18,150022,150023],{},"Web 服务器等",[14,150025,150026,150027,108883,150030,33605],{},"根据服务器在网络中所在的位置不同，又可分为 ",[18,150028,150029],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[18,150031,150032],{},"远程服务器",[48,150034,150036],{"id":150035},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,150038,150039],{},[18,150040,150041],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,150043,150044,150045],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[9275,150046,150047],{"href":150047,"rel":150048},"http:\u002F\u002Ffree.3v.do\u002F",[31729],[59,150050,150051,150054,150057,150064],{},[62,150052,150053],{},"去免费空间网站注册账号。",[62,150055,150056],{},"记录下主机名、用户名、密码、域名。",[62,150058,150059,150060,150063],{},"利用 ",[83,150061,150062],{},"utftp"," 软件 上传网站到远程服务器",[62,150065,150066],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,150068,150069],{},"使用软件上传，对上传软件文件进行解压",[6750,150071],{"style":134273,"src":150072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[6750,150074],{"style":134273,"src":150075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,150077,150078],{},"输入刚刚申请的服务器账号信息：",[6750,150080],{"style":134273,"src":150081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[6750,150083],{"style":134273,"src":150084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[6750,150086],{"style":134273,"src":150087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[6750,150089],{"style":134273,"src":150090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,150092,150093],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[6750,150095],{"style":134273,"src":150096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,150098,150099],{},"浏览器输入域名即可访问",[14,150101,150102],{},"首页一定必须是index",{"title":98,"searchDepth":116,"depth":116,"links":150104},[150105],{"id":150007,"depth":116,"text":150008,"children":150106},[150107],{"id":150035,"depth":123,"text":150036},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":149999,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":150114,"title":150115,"body":150116,"description":31240,"extension":8978,"meta":151043,"navigation":651,"path":151044,"seo":151045,"stem":151046,"__hash__":151047},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":150117,"toc":151026},[150118,150121,150125,150128,150131,150142,150145,150149,150153,150158,150161,150164,150167,150170,150174,150200,150204,150208,150211,150214,150218,150251,150255,150258,150261,150325,150329,150333,150336,150339,150342,150346,150391,150395,150398,150428,150432,150436,150439,150442,150446,150449,150518,150521,150629,150631,150637,150641,150644,150647,150743,150746,150750,150774,150778,150781,150785,150788,150792,150795,150798,150801,150804,150808,150811,150814,150818,150822,150825,150828,150831,150834,150838,150841,150845,150848,150851,150896,150900,150904,150907,150910,150913,150945,150949,150952,150986,150990,150993,151023],[10,150119,150115],{"id":150120},"_18-2d动画与3d转换",[43,150122,150124],{"id":150123},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,150126,150127],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,150129,150130],{},"转换（transform）你可以简单理解为变形",[59,150132,150133,150136,150139],{},[62,150134,150135],{},"移动：translate",[62,150137,150138],{},"旋转：rotate",[62,150140,150141],{},"缩放：scale",[6750,150143],{"style":134273,"src":150144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[48,150146,150148],{"id":150147},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[7601,150150,150152],{"id":150151},"_18111-translate介绍","18.1.1.1 translate介绍",[14,150154,150155,150156],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[18,150157,141076],{},[6750,150159],{"style":134273,"src":150160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,150162,150163],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,150165,150166],{},"对于行内元素无效",[14,150168,150169],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[7601,150171,150173],{"id":150172},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[93,150175,150176],{"className":134417,"code":146606,"language":134419,"meta":98,"style":98},[83,150177,150178,150184,150196],{"__ignoreMap":98},[102,150179,150180,150182],{"class":104,"line":105},[102,150181,59476],{"class":59165},[102,150183,1077],{"class":119},[102,150185,150186,150188,150190,150192,150194],{"class":104,"line":116},[102,150187,78335],{"class":187},[102,150189,59302],{"class":119},[102,150191,8423],{"class":187},[102,150193,59421],{"class":187},[102,150195,266],{"class":119},[102,150197,150198],{"class":104,"line":123},[102,150199,301],{"class":119},[48,150201,150203],{"id":150202},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[7601,150205,150207],{"id":150206},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,150209,150210],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[6750,150212],{"style":134273,"src":150213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[7601,150215,150217],{"id":150216},"_18122-旋转效果","18.1.2.2 旋转效果",[93,150219,150221],{"className":134417,"code":150220,"language":134419,"meta":98,"style":98},"div {\n  transform: rotate(45deg);\n}\n",[83,150222,150223,150229,150247],{"__ignoreMap":98},[102,150224,150225,150227],{"class":104,"line":105},[102,150226,59476],{"class":59165},[102,150228,1077],{"class":119},[102,150230,150231,150233,150235,150238,150240,150242,150245],{"class":104,"line":116},[102,150232,144401],{"class":187},[102,150234,59302],{"class":119},[102,150236,150237],{"class":187},"rotate",[102,150239,380],{"class":119},[102,150241,9557],{"class":187},[102,150243,150244],{"class":108},"deg",[102,150246,552],{"class":119},[102,150248,150249],{"class":104,"line":123},[102,150250,301],{"class":119},[7601,150252,150254],{"id":150253},"_18123-三角做法","18.1.2.3 三角做法",[14,150256,150257],{},"该下标当经过最外层大盒子时会实现向上反转",[6750,150259],{"style":134273,"src":150260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[93,150262,150263],{"className":134417,"code":142937,"language":134419,"meta":98,"style":98},[83,150264,150265,150269,150275,150285,150295,150311,150321],{"__ignoreMap":98},[102,150266,150267],{"class":104,"line":105},[102,150268,142944],{"class":126},[102,150270,150271,150273],{"class":104,"line":116},[102,150272,142949],{"class":112},[102,150274,1077],{"class":119},[102,150276,150277,150279,150281,150283],{"class":104,"line":123},[102,150278,78433],{"class":187},[102,150280,59302],{"class":119},[102,150282,8423],{"class":187},[102,150284,266],{"class":119},[102,150286,150287,150289,150291,150293],{"class":104,"line":130},[102,150288,78653],{"class":187},[102,150290,59302],{"class":119},[102,150292,8423],{"class":187},[102,150294,266],{"class":119},[102,150296,150297,150299,150301,150303,150305,150307,150309],{"class":104,"line":136},[102,150298,78761],{"class":187},[102,150300,59302],{"class":119},[102,150302,263],{"class":187},[102,150304,59357],{"class":108},[102,150306,59386],{"class":187},[102,150308,71856],{"class":187},[102,150310,266],{"class":119},[102,150312,150313,150315,150317,150319],{"class":104,"line":142},[102,150314,142992],{"class":187},[102,150316,59302],{"class":119},[102,150318,70234],{"class":187},[102,150320,266],{"class":119},[102,150322,150323],{"class":104,"line":148},[102,150324,301],{"class":119},[48,150326,150328],{"id":150327},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[7601,150330,150332],{"id":150331},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,150334,150335],{},"设置中心点",[6750,150337],{"style":134273,"src":150338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,150340,150341],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[7601,150343,150345],{"id":150344},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[93,150347,150349],{"className":134417,"code":150348,"language":134419,"meta":98,"style":98},"\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",[83,150350,150351,150356,150362,150377,150382,150387],{"__ignoreMap":98},[102,150352,150353],{"class":104,"line":105},[102,150354,150355],{"class":126},"\u002F* 转换中心点 *\u002F\n",[102,150357,150358,150360],{"class":104,"line":116},[102,150359,59476],{"class":59165},[102,150361,1077],{"class":119},[102,150363,150364,150367,150369,150371,150373,150375],{"class":104,"line":123},[102,150365,150366],{"class":187},"  transform-origin",[102,150368,59302],{"class":119},[102,150370,59457],{"class":187},[102,150372,2705],{"class":187},[102,150374,138280],{"class":119},[102,150376,143090],{"class":126},[102,150378,150379],{"class":104,"line":130},[102,150380,150381],{"class":126},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[102,150383,150384],{"class":104,"line":136},[102,150385,150386],{"class":126},"  \u002F* transform-origin: left top; *\u002F\n",[102,150388,150389],{"class":104,"line":142},[102,150390,301],{"class":119},[7601,150392,150394],{"id":150393},"_18133-旋转案例","18.1.3.3 旋转案例",[6750,150396],{"style":134273,"src":150397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[93,150399,150400],{"className":134417,"code":150220,"language":134419,"meta":98,"style":98},[83,150401,150402,150408,150424],{"__ignoreMap":98},[102,150403,150404,150406],{"class":104,"line":105},[102,150405,59476],{"class":59165},[102,150407,1077],{"class":119},[102,150409,150410,150412,150414,150416,150418,150420,150422],{"class":104,"line":116},[102,150411,144401],{"class":187},[102,150413,59302],{"class":119},[102,150415,150237],{"class":187},[102,150417,380],{"class":119},[102,150419,9557],{"class":187},[102,150421,150244],{"class":108},[102,150423,552],{"class":119},[102,150425,150426],{"class":104,"line":123},[102,150427,301],{"class":119},[48,150429,150431],{"id":150430},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[7601,150433,150435],{"id":150434},"_18141-scale介绍","18.1.4.1 scale介绍",[14,150437,150438],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[6750,150440],{"style":134273,"src":150441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[7601,150443,150445],{"id":150444},"_18142-分页按钮","18.1.4.2 分页按钮",[6750,150447],{"style":134273,"src":150448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[93,150450,150452],{"className":134417,"code":150451,"language":134419,"meta":98,"style":98},"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",[83,150453,150454,150460,150476,150480,150484,150489,150495,150509,150514],{"__ignoreMap":98},[102,150455,150456,150458],{"class":104,"line":105},[102,150457,59476],{"class":59165},[102,150459,1077],{"class":119},[102,150461,150462,150464,150466,150469,150471,150474],{"class":104,"line":116},[102,150463,144401],{"class":187},[102,150465,59302],{"class":119},[102,150467,150468],{"class":187},"scale",[102,150470,380],{"class":119},[102,150472,150473],{"class":187},"1.2",[102,150475,552],{"class":119},[102,150477,150478],{"class":104,"line":123},[102,150479,301],{"class":119},[102,150481,150482],{"class":104,"line":130},[102,150483,143878],{"class":119},[102,150485,150486],{"class":104,"line":136},[102,150487,150488],{"class":126},"\u002F* 2D 缩放 *\u002F\n",[102,150490,150491,150493],{"class":104,"line":142},[102,150492,59476],{"class":59165},[102,150494,1077],{"class":119},[102,150496,150497,150499,150501,150503,150505,150507],{"class":104,"line":148},[102,150498,144401],{"class":187},[102,150500,59302],{"class":119},[102,150502,150468],{"class":187},[102,150504,380],{"class":119},[102,150506,150473],{"class":187},[102,150508,552],{"class":119},[102,150510,150511],{"class":104,"line":157},[102,150512,150513],{"class":126},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[102,150515,150516],{"class":104,"line":163},[102,150517,301],{"class":119},[14,150519,150520],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[93,150522,150524],{"className":134417,"code":150523,"language":134419,"meta":98,"style":98},"\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",[83,150525,150526,150531,150541,150562,150583,150587,150592,150598,150625],{"__ignoreMap":98},[102,150527,150528],{"class":104,"line":105},[102,150529,150530],{"class":126},"\u002F* 定义动画 *\u002F\n",[102,150532,150533,150536,150539],{"class":104,"line":116},[102,150534,150535],{"class":108},"@keyframes",[102,150537,150538],{"class":386}," move",[102,150540,1077],{"class":119},[102,150542,150543,150546,150548,150550,150552,150555,150557,150559],{"class":104,"line":123},[102,150544,150545],{"class":112},"  0%",[102,150547,87672],{"class":119},[102,150549,55999],{"class":187},[102,150551,59302],{"class":119},[102,150553,150554],{"class":187},"translateX",[102,150556,380],{"class":119},[102,150558,8423],{"class":187},[102,150560,150561],{"class":119},"); }\n",[102,150563,150564,150567,150569,150571,150573,150575,150577,150579,150581],{"class":104,"line":130},[102,150565,150566],{"class":112},"  100%",[102,150568,87672],{"class":119},[102,150570,55999],{"class":187},[102,150572,59302],{"class":119},[102,150574,150554],{"class":187},[102,150576,380],{"class":119},[102,150578,5569],{"class":187},[102,150580,59357],{"class":108},[102,150582,150561],{"class":119},[102,150584,150585],{"class":104,"line":136},[102,150586,301],{"class":119},[102,150588,150589],{"class":104,"line":142},[102,150590,150591],{"class":126},"\u002F* 调用动画 *\u002F\n",[102,150593,150594,150596],{"class":104,"line":148},[102,150595,59476],{"class":59165},[102,150597,1077],{"class":119},[102,150599,150600,150603,150605,150607,150609,150611,150613,150615,150617,150620,150623],{"class":104,"line":157},[102,150601,150602],{"class":187},"  animation",[102,150604,59302],{"class":119},[102,150606,143103],{"class":187},[102,150608,32983],{"class":187},[102,150610,9720],{"class":108},[102,150612,86545],{"class":187},[102,150614,866],{"class":187},[102,150616,9720],{"class":108},[102,150618,150619],{"class":187}," infinite",[102,150621,150622],{"class":187}," alternate",[102,150624,266],{"class":119},[102,150626,150627],{"class":104,"line":163},[102,150628,301],{"class":119},[14,150630,150520],{},[93,150632,150635],{"className":150633,"code":150634,"language":6778},[6776],"\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",[83,150636,150634],{"__ignoreMap":98},[7601,150638,150640],{"id":150639},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,150642,150643],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[6750,150645],{"style":134273,"src":150646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[93,150648,150649],{"className":134417,"code":150523,"language":134419,"meta":98,"style":98},[83,150650,150651,150655,150663,150681,150701,150705,150709,150715,150739],{"__ignoreMap":98},[102,150652,150653],{"class":104,"line":105},[102,150654,150530],{"class":126},[102,150656,150657,150659,150661],{"class":104,"line":116},[102,150658,150535],{"class":108},[102,150660,150538],{"class":386},[102,150662,1077],{"class":119},[102,150664,150665,150667,150669,150671,150673,150675,150677,150679],{"class":104,"line":123},[102,150666,150545],{"class":112},[102,150668,87672],{"class":119},[102,150670,55999],{"class":187},[102,150672,59302],{"class":119},[102,150674,150554],{"class":187},[102,150676,380],{"class":119},[102,150678,8423],{"class":187},[102,150680,150561],{"class":119},[102,150682,150683,150685,150687,150689,150691,150693,150695,150697,150699],{"class":104,"line":130},[102,150684,150566],{"class":112},[102,150686,87672],{"class":119},[102,150688,55999],{"class":187},[102,150690,59302],{"class":119},[102,150692,150554],{"class":187},[102,150694,380],{"class":119},[102,150696,5569],{"class":187},[102,150698,59357],{"class":108},[102,150700,150561],{"class":119},[102,150702,150703],{"class":104,"line":136},[102,150704,301],{"class":119},[102,150706,150707],{"class":104,"line":142},[102,150708,150591],{"class":126},[102,150710,150711,150713],{"class":104,"line":148},[102,150712,59476],{"class":59165},[102,150714,1077],{"class":119},[102,150716,150717,150719,150721,150723,150725,150727,150729,150731,150733,150735,150737],{"class":104,"line":157},[102,150718,150602],{"class":187},[102,150720,59302],{"class":119},[102,150722,143103],{"class":187},[102,150724,32983],{"class":187},[102,150726,9720],{"class":108},[102,150728,86545],{"class":187},[102,150730,866],{"class":187},[102,150732,9720],{"class":108},[102,150734,150619],{"class":187},[102,150736,150622],{"class":187},[102,150738,266],{"class":119},[102,150740,150741],{"class":104,"line":163},[102,150742,301],{"class":119},[14,150744,150745],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[48,150747,150749],{"id":150748},"_1823-知识点回顾","18.2.3 知识点回顾",[93,150751,150752],{"className":134417,"code":136586,"language":134419,"meta":98,"style":98},[83,150753,150754,150760,150770],{"__ignoreMap":98},[102,150755,150756,150758],{"class":104,"line":105},[102,150757,59476],{"class":59165},[102,150759,1077],{"class":119},[102,150761,150762,150764,150766,150768],{"class":104,"line":116},[102,150763,136599],{"class":187},[102,150765,59302],{"class":119},[102,150767,69601],{"class":187},[102,150769,266],{"class":119},[102,150771,150772],{"class":104,"line":123},[102,150773,301],{"class":119},[43,150775,150777],{"id":150776},"_183-3d-转换","18.3 3D 转换",[14,150779,150780],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[48,150782,150784],{"id":150783},"_1831-坐标轴认识","18.3.1 坐标轴认识",[6750,150786],{"style":134273,"src":150787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[48,150789,150791],{"id":150790},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[6750,150793],{"style":134273,"src":150794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,150796,150797],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,150799,150800],{},"translate3d的效果需要搭配透视perspective来使用",[6750,150802],{"style":134273,"src":150803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[48,150805,150807],{"id":150806},"_1833-透视-perspective","18.3.3 透视 perspective",[6750,150809],{"style":134273,"src":150810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,150812,150813],{},"透视写在父盒子上，单位为像素",[48,150815,150817],{"id":150816},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[7601,150819,150821],{"id":150820},"_18341-分开解释","18.3.4.1 分开解释",[6750,150823],{"style":134273,"src":150824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[6750,150826],{"style":134273,"src":150827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[6750,150829],{"style":134273,"src":150830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,150832,150833],{},"总结来说就是左手原则",[7601,150835,150837],{"id":150836},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[6750,150839],{"style":134273,"src":150840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[48,150842,150844],{"id":150843},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[6750,150846],{"style":134273,"src":150847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[6750,150849],{"style":134273,"src":150850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[93,150852,150854],{"className":134417,"code":150853,"language":134419,"meta":98,"style":98},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[83,150855,150856,150862,150875,150892],{"__ignoreMap":98},[102,150857,150858,150860],{"class":104,"line":105},[102,150859,59476],{"class":59165},[102,150861,1077],{"class":119},[102,150863,150864,150867,150869,150871,150873],{"class":104,"line":116},[102,150865,150866],{"class":187},"  perspective",[102,150868,59302],{"class":119},[102,150870,72939],{"class":187},[102,150872,59357],{"class":108},[102,150874,266],{"class":119},[102,150876,150877,150879,150881,150884,150886,150888,150890],{"class":104,"line":123},[102,150878,144401],{"class":187},[102,150880,59302],{"class":119},[102,150882,150883],{"class":187},"rotateX",[102,150885,380],{"class":119},[102,150887,9557],{"class":187},[102,150889,150244],{"class":108},[102,150891,552],{"class":119},[102,150893,150894],{"class":104,"line":130},[102,150895,301],{"class":119},[48,150897,150899],{"id":150898},"_1836-案例","18.3.6 案例",[7601,150901,150903],{"id":150902},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[6750,150905],{"style":134273,"src":150906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[6750,150908],{"style":134273,"src":150909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[6750,150911],{"style":134273,"src":150912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[93,150914,150916],{"className":134417,"code":150915,"language":134419,"meta":98,"style":98},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[83,150917,150918,150923,150929,150941],{"__ignoreMap":98},[102,150919,150920],{"class":104,"line":105},[102,150921,150922],{"class":126},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[102,150924,150925,150927],{"class":104,"line":116},[102,150926,141414],{"class":112},[102,150928,1077],{"class":119},[102,150930,150931,150933,150935,150937,150939],{"class":104,"line":123},[102,150932,150866],{"class":187},[102,150934,59302],{"class":119},[102,150936,72939],{"class":187},[102,150938,59357],{"class":108},[102,150940,266],{"class":119},[102,150942,150943],{"class":104,"line":130},[102,150944,301],{"class":119},[7601,150946,150948],{"id":150947},"_18362-3d导航栏","18.3.6.2 3D导航栏",[6750,150950],{"style":134273,"src":150951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[93,150953,150954],{"className":135164,"code":138521,"language":135166,"meta":98,"style":98},[83,150955,150956,150960,150974,150978],{"__ignoreMap":98},[102,150957,150958],{"class":104,"line":105},[102,150959,138528],{"class":126},[102,150961,150962,150964,150966,150968,150970,150972],{"class":104,"line":116},[102,150963,1208],{"class":119},[102,150965,59476],{"class":59165},[102,150967,61351],{"class":112},[102,150969,260],{"class":119},[102,150971,138541],{"class":278},[102,150973,59172],{"class":119},[102,150975,150976],{"class":104,"line":123},[102,150977,138548],{"class":119},[102,150979,150980,150982,150984],{"class":104,"line":130},[102,150981,59650],{"class":119},[102,150983,59476],{"class":59165},[102,150985,59172],{"class":119},[7601,150987,150989],{"id":150988},"_18363-旋转木马","18.3.6.3 旋转木马",[6750,150991],{"style":134273,"src":150992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[93,150994,150995],{"className":134417,"code":150220,"language":134419,"meta":98,"style":98},[83,150996,150997,151003,151019],{"__ignoreMap":98},[102,150998,150999,151001],{"class":104,"line":105},[102,151000,59476],{"class":59165},[102,151002,1077],{"class":119},[102,151004,151005,151007,151009,151011,151013,151015,151017],{"class":104,"line":116},[102,151006,144401],{"class":187},[102,151008,59302],{"class":119},[102,151010,150237],{"class":187},[102,151012,380],{"class":119},[102,151014,9557],{"class":187},[102,151016,150244],{"class":108},[102,151018,552],{"class":119},[102,151020,151021],{"class":104,"line":123},[102,151022,301],{"class":119},[8955,151024,151025],{},"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":98,"searchDepth":116,"depth":116,"links":151027},[151028,151035],{"id":150123,"depth":116,"text":150124,"children":151029},[151030,151031,151032,151033,151034],{"id":150147,"depth":123,"text":150148},{"id":150202,"depth":123,"text":150203},{"id":150327,"depth":123,"text":150328},{"id":150430,"depth":123,"text":150431},{"id":150748,"depth":123,"text":150749},{"id":150776,"depth":116,"text":150777,"children":151036},[151037,151038,151039,151040,151041,151042],{"id":150783,"depth":123,"text":150784},{"id":150790,"depth":123,"text":150791},{"id":150806,"depth":123,"text":150807},{"id":150816,"depth":123,"text":150817},{"id":150843,"depth":123,"text":150844},{"id":150898,"depth":123,"text":150899},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":150115,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":151049,"title":151050,"body":151051,"description":31240,"extension":8978,"meta":151254,"navigation":651,"path":151255,"seo":151256,"stem":151257,"__hash__":151258},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":151052,"toc":151243},[151053,151056,151060,151063,151066,151070,151073,151076,151079,151083,151086,151090,151093,151097,151100,151104,151118,151122,151147,151150,151153,151170,151174,151178,151181,151184,151188,151191,151194,151212,151216,151219,151233,151237,151240],[10,151054,151050],{"id":151055},"_19-移动端基础-前缀现状与视口",[43,151057,151059],{"id":151058},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[6750,151061],{"style":134273,"src":151062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,151064,151065],{},"意思就是加个前缀，增加兼容性",[43,151067,151069],{"id":151068},"_192-移动端现状认识","19.2 移动端现状认识",[6750,151071],{"style":134273,"src":151072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,151074,151075],{},"调试方法：",[6750,151077],{"style":134273,"src":151078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[43,151080,151082],{"id":151081},"_193-视口","19.3 视口",[14,151084,151085],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[48,151087,151089],{"id":151088},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[6750,151091],{"style":134273,"src":151092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[48,151094,151096],{"id":151095},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[6750,151098],{"style":134273,"src":151099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[48,151101,151103],{"id":151102},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[59,151105,151106,151109,151112,151115],{},[62,151107,151108],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[62,151110,151111],{},"理想视口，对设备来讲，是最理想的视口尺寸",[62,151113,151114],{},"需要手动添写meta视口标签通知浏览器操作",[62,151116,151117],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[48,151119,151121],{"id":151120},"_1934-meta视口标签","19.3.4 meta视口标签",[93,151123,151125],{"className":135164,"code":151124,"language":135166,"meta":98,"style":98},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[83,151126,151127],{"__ignoreMap":98},[102,151128,151129,151131,151133,151135,151137,151139,151141,151143,151145],{"class":104,"line":105},[102,151130,1208],{"class":119},[102,151132,59209],{"class":59165},[102,151134,387],{"class":112},[102,151136,260],{"class":119},[102,151138,59256],{"class":278},[102,151140,59236],{"class":112},[102,151142,260],{"class":119},[102,151144,59263],{"class":278},[102,151146,59172],{"class":119},[6750,151148],{"style":134273,"src":151149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,151151,151152],{},"标准视口设置：",[87,151154,151155,151158,151161,151164,151167],{},[62,151156,151157],{},"视口宽度和设备保持一致",[62,151159,151160],{},"视口的默认缩放比例1.0",[62,151162,151163],{},"不允许用户自行缩放",[62,151165,151166],{},"最大允许的缩放比例1.0",[62,151168,151169],{},"最小允许的缩放比例1.0",[48,151171,151173],{"id":151172},"_1935-二倍图","19.3.5 二倍图",[7601,151175,151177],{"id":151176},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[6750,151179],{"style":134273,"src":151180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[6750,151182],{"style":134273,"src":151183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[7601,151185,151187],{"id":151186},"_19352-多倍图","19.3.5.2 多倍图",[6750,151189],{"style":134273,"src":151190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,151192,151193],{},"二倍图法，代码如下：",[93,151195,151197],{"className":134417,"code":151196,"language":134419,"meta":98,"style":98},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[83,151198,151199,151204],{"__ignoreMap":98},[102,151200,151201],{"class":104,"line":105},[102,151202,151203],{"class":126},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[102,151205,151206,151209],{"class":104,"line":116},[102,151207,151208],{"class":59165},"background-size",[102,151210,151211],{"class":119},": 50% 50%;\n",[7601,151213,151215],{"id":151214},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[6750,151217],{"style":134273,"src":151218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[87,151220,151221,151224,151227,151230],{},[62,151222,151223],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[62,151225,151226],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[62,151228,151229],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[62,151231,151232],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[7601,151234,151236],{"id":151235},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[6750,151238],{"style":134273,"src":151239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[8955,151241,151242],{},"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":98,"searchDepth":116,"depth":116,"links":151244},[151245,151246,151247],{"id":151058,"depth":116,"text":151059},{"id":151068,"depth":116,"text":151069},{"id":151081,"depth":116,"text":151082,"children":151248},[151249,151250,151251,151252,151253],{"id":151088,"depth":123,"text":151089},{"id":151095,"depth":123,"text":151096},{"id":151102,"depth":123,"text":151103},{"id":151120,"depth":123,"text":151121},{"id":151172,"depth":123,"text":151173},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":151050,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":151260,"title":151261,"body":151262,"description":31240,"extension":8978,"meta":152139,"navigation":651,"path":152140,"seo":152141,"stem":152142,"__hash__":152143},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":151263,"toc":152123},[151264,151267,151271,151278,151281,151288,151291,151296,151299,151303,151307,151314,151317,151320,151324,151327,151330,151333,151336,151339,151343,151346,151350,151352,151355,151358,151361,151364,151366,151369,151371,151401,151403,151433,151437,151440,151444,151447,151464,151467,151470,151546,151548,151551,151554,151557,151560,151562,151565,151568,151572,151594,151597,151600,151604,151607,151613,151616,151620,151623,151626,151630,151633,151636,151639,151643,151646,151649,151652,151655,151659,151662,151666,151673,151676,151679,151682,151685,151695,151698,151701,151708,151711,151715,151718,151721,151725,151728,151731,151734,151779,151782,151785,151788,151790,151919,151921,151959,151962,151965,151967,152085,152087,152121],[10,151265,151261],{"id":151266},"_20-移动端布局实战上篇",[43,151268,151270],{"id":151269},"_201-移动端主流方案","20.1 移动端主流方案",[87,151272,151273],{},[62,151274,151275],{},[18,151276,151277],{},"单独移动端页面（主流）",[6750,151279],{"style":134273,"src":151280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[87,151282,151283],{"start":116},[62,151284,151285],{},[18,151286,151287],{},"响应式兼容PC移动端",[6750,151289],{"style":134273,"src":151290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[87,151292,151293],{"start":123},[62,151294,151295],{},"两种页面选型布局方式",[6750,151297],{"style":134273,"src":151298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[43,151300,151302],{"id":151301},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[48,151304,151306],{"id":151305},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,151308,151309,151310],{},"官网地址： ",[9275,151311,151312],{"href":151312,"rel":151313},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[31729],[6750,151315],{"style":134273,"src":151316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[6750,151318],{"style":134273,"src":151319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[48,151321,151323],{"id":151322},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[6750,151325],{"style":134273,"src":151326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[6750,151328],{"style":134273,"src":151329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,151331,151332],{},"去除高亮：",[14,151334,151335],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,151337,151338],{},"-webkit- tap-highlight-color: transparent;",[43,151340,151342],{"id":151341},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[6750,151344],{"style":134273,"src":151345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[43,151347,151349],{"id":151348},"_204-流式布局案例","20.4 流式布局案例",[14,151351,9076],{},[14,151353,151354],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,151356,151357],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,151359,151360],{},"图片格式：",[6750,151362],{"style":134273,"src":151363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,151365,143460],{},[6750,151367],{"style":134273,"src":151368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,151370,147787],{},[93,151372,151373],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,151374,151375],{"__ignoreMap":98},[102,151376,151377,151379,151381,151383,151385,151387,151389,151391,151393,151395,151397,151399],{"class":104,"line":105},[102,151378,1208],{"class":119},[102,151380,6750],{"class":59165},[102,151382,63104],{"class":112},[102,151384,260],{"class":119},[102,151386,141934],{"class":278},[102,151388,63112],{"class":112},[102,151390,260],{"class":119},[102,151392,141941],{"class":278},[102,151394,141944],{"class":112},[102,151396,260],{"class":119},[102,151398,141949],{"class":278},[102,151400,59172],{"class":119},[14,151402,147876],{},[93,151404,151405],{"className":135164,"code":141919,"language":135166,"meta":98,"style":98},[83,151406,151407],{"__ignoreMap":98},[102,151408,151409,151411,151413,151415,151417,151419,151421,151423,151425,151427,151429,151431],{"class":104,"line":105},[102,151410,1208],{"class":119},[102,151412,6750],{"class":59165},[102,151414,63104],{"class":112},[102,151416,260],{"class":119},[102,151418,141934],{"class":278},[102,151420,63112],{"class":112},[102,151422,260],{"class":119},[102,151424,141941],{"class":278},[102,151426,141944],{"class":112},[102,151428,260],{"class":119},[102,151430,141949],{"class":278},[102,151432,59172],{"class":119},[43,151434,151436],{"id":151435},"_205-flex布局","20.5 flex布局",[6750,151438],{"style":134273,"src":151439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[48,151441,151443],{"id":151442},"_2051-布局原理","20.5.1 布局原理",[14,151445,151446],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[59,151448,151449,151452,151455,151458,151461],{},[62,151450,151451],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[62,151453,151454],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[62,151456,151457],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[62,151459,151460],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[62,151462,151463],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,151465,151466],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,151468,151469],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[93,151471,151473],{"className":134417,"code":151472,"language":134419,"meta":98,"style":98},"\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",[83,151474,151475,151480,151487,151497,151509,151520,151531,151542],{"__ignoreMap":98},[102,151476,151477],{"class":104,"line":105},[102,151478,151479],{"class":126},"\u002F* Flex 弹性布局 *\u002F\n",[102,151481,151482,151485],{"class":104,"line":116},[102,151483,151484],{"class":112},".container",[102,151486,1077],{"class":119},[102,151488,151489,151491,151493,151495],{"class":104,"line":123},[102,151490,136033],{"class":187},[102,151492,59302],{"class":119},[102,151494,59342],{"class":187},[102,151496,266],{"class":119},[102,151498,151499,151502,151504,151507],{"class":104,"line":130},[102,151500,151501],{"class":187},"  flex-direction",[102,151503,59302],{"class":119},[102,151505,151506],{"class":187},"row",[102,151508,266],{"class":119},[102,151510,151511,151514,151516,151518],{"class":104,"line":136},[102,151512,151513],{"class":187},"  justify-content",[102,151515,59302],{"class":119},[102,151517,59533],{"class":187},[102,151519,266],{"class":119},[102,151521,151522,151525,151527,151529],{"class":104,"line":142},[102,151523,151524],{"class":187},"  align-items",[102,151526,59302],{"class":119},[102,151528,59457],{"class":187},[102,151530,266],{"class":119},[102,151532,151533,151536,151538,151540],{"class":104,"line":148},[102,151534,151535],{"class":187},"  flex-wrap",[102,151537,59302],{"class":119},[102,151539,86475],{"class":187},[102,151541,266],{"class":119},[102,151543,151544],{"class":104,"line":157},[102,151545,301],{"class":119},[14,151547,78318],{},[14,151549,151550],{},".form-item .male-label {",[14,151552,151553],{},"   margin-right: 20px;",[14,151555,151556],{},"   display: inline-flex;",[14,151558,151559],{},"   align-items: center;",[14,151561,9967],{},[6750,151563],{"style":134273,"src":151564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[6750,151566],{"style":134273,"src":151567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[48,151569,151571],{"id":151570},"_2052-常见父项属性","20.5.2 常见父项属性",[87,151573,151574,151577,151580,151583,151586,151589,151592],{},[62,151575,151576],{},"flex-direction：设置主轴的方向",[62,151578,151579],{},"justify-content：设置主轴上的子元素排列方式",[62,151581,151582],{},"flex-wrap：设置子元素是否换行",[62,151584,151585],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[62,151587,151588],{},"align-items：设置侧轴上的子元素排列方式（单行）",[62,151590,151591],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[62,151593,151576],{},[6750,151595],{"style":134273,"src":151596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[6750,151598],{"style":134273,"src":151599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[87,151601,151602],{"start":116},[62,151603,151579],{},[6750,151605],{"style":134273,"src":151606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,151608,151609,151612],{},[83,151610,151611],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,151614,151615],{},"跟着主轴走",[87,151617,151618],{"start":123},[62,151619,151582],{},[6750,151621],{"style":134273,"src":151622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,151624,151625],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[87,151627,151628],{"start":130},[62,151629,151585],{},[6750,151631],{"style":134273,"src":151632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,151634,151635],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,151637,151638],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[87,151640,151641],{"start":136},[62,151642,151588],{},[6750,151644],{"style":134273,"src":151645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,151647,151648],{},"align-items与align-content之间的区别：",[14,151650,151651],{},"单找items，多找content",[6750,151653],{"style":134273,"src":151654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[87,151656,151657],{"start":142},[62,151658,151591],{},[6750,151660],{"style":134273,"src":151661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[48,151663,151665],{"id":151664},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[87,151667,151668],{},[62,151669,151670],{},[18,151671,151672],{},"flex 属性",[14,151674,151675],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[6750,151677],{"style":134273,"src":151678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,151680,151681],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,151683,151684],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[87,151686,151687],{"start":116},[62,151688,151689,81,151692],{},[18,151690,151691],{},"align-self",[18,151693,151694],{},"控制子项自己在侧轴上的排列方式",[6750,151696],{"style":134273,"src":151697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,151699,151700],{},"单个子盒子在父盒子侧轴上的排列方式",[87,151702,151703],{"start":123},[62,151704,151705,151707],{},[18,151706,103162],{}," 属性定义项目的排列顺序",[6750,151709],{"style":134273,"src":151710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[48,151712,151714],{"id":151713},"_2054-背景线性渐变","20.5.4 背景线性渐变",[6750,151716],{"style":134273,"src":151717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,151719,151720],{},"必须要添加浏览器的私有前缀",[48,151722,151724],{"id":151723},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,151726,151727],{},"学到最重要的知识：",[14,151729,151730],{},"flex处理这样的布局思路",[6750,151732],{"style":134273,"src":151733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[93,151735,151737],{"className":134417,"code":151736,"language":134419,"meta":98,"style":98},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[83,151738,151739,151745,151755,151765,151775],{"__ignoreMap":98},[102,151740,151741,151743],{"class":104,"line":105},[102,151742,151484],{"class":112},[102,151744,1077],{"class":119},[102,151746,151747,151749,151751,151753],{"class":104,"line":116},[102,151748,136033],{"class":187},[102,151750,59302],{"class":119},[102,151752,59342],{"class":187},[102,151754,266],{"class":119},[102,151756,151757,151759,151761,151763],{"class":104,"line":123},[102,151758,151513],{"class":187},[102,151760,59302],{"class":119},[102,151762,59457],{"class":187},[102,151764,266],{"class":119},[102,151766,151767,151769,151771,151773],{"class":104,"line":130},[102,151768,151524],{"class":187},[102,151770,59302],{"class":119},[102,151772,59457],{"class":187},[102,151774,266],{"class":119},[102,151776,151777],{"class":104,"line":136},[102,151778,301],{"class":119},[14,151780,151781],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,151783,151784],{},"使用属性选择器",[6750,151786],{"style":134273,"src":151787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,151789,76754],{},[93,151791,151793],{"className":135164,"code":151792,"language":135166,"meta":98,"style":98},"\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",[83,151794,151795,151800,151814,151819,151839,151844,151863,151868,151887,151892,151911],{"__ignoreMap":98},[102,151796,151797],{"class":104,"line":105},[102,151798,151799],{"class":126},"\u003C!-- 携程网移动端案例结构 -->\n",[102,151801,151802,151804,151806,151808,151810,151812],{"class":104,"line":116},[102,151803,1208],{"class":119},[102,151805,59476],{"class":59165},[102,151807,61351],{"class":112},[102,151809,260],{"class":119},[102,151811,100188],{"class":278},[102,151813,59172],{"class":119},[102,151815,151816],{"class":104,"line":123},[102,151817,151818],{"class":126},"  \u003C!-- 搜索栏 -->\n",[102,151820,151821,151823,151825,151827,151829,151832,151835,151837],{"class":104,"line":130},[102,151822,60009],{"class":119},[102,151824,59476],{"class":59165},[102,151826,61351],{"class":112},[102,151828,260],{"class":119},[102,151830,151831],{"class":278},"\"search-index\"",[102,151833,151834],{"class":119},">...\u003C\u002F",[102,151836,59476],{"class":59165},[102,151838,59172],{"class":119},[102,151840,151841],{"class":104,"line":136},[102,151842,151843],{"class":126},"  \u003C!-- 焦点图 -->\n",[102,151845,151846,151848,151850,151852,151854,151857,151859,151861],{"class":104,"line":142},[102,151847,60009],{"class":119},[102,151849,59476],{"class":59165},[102,151851,61351],{"class":112},[102,151853,260],{"class":119},[102,151855,151856],{"class":278},"\"focus\"",[102,151858,151834],{"class":119},[102,151860,59476],{"class":59165},[102,151862,59172],{"class":119},[102,151864,151865],{"class":104,"line":148},[102,151866,151867],{"class":126},"  \u003C!-- 主导航 -->\n",[102,151869,151870,151872,151874,151876,151878,151881,151883,151885],{"class":104,"line":157},[102,151871,60009],{"class":119},[102,151873,59476],{"class":59165},[102,151875,61351],{"class":112},[102,151877,260],{"class":119},[102,151879,151880],{"class":278},"\"local-nav\"",[102,151882,151834],{"class":119},[102,151884,59476],{"class":59165},[102,151886,59172],{"class":119},[102,151888,151889],{"class":104,"line":163},[102,151890,151891],{"class":126},"  \u003C!-- 子导航 -->\n",[102,151893,151894,151896,151898,151900,151902,151905,151907,151909],{"class":104,"line":175},[102,151895,60009],{"class":119},[102,151897,59476],{"class":59165},[102,151899,61351],{"class":112},[102,151901,260],{"class":119},[102,151903,151904],{"class":278},"\"nav-common\"",[102,151906,151834],{"class":119},[102,151908,59476],{"class":59165},[102,151910,59172],{"class":119},[102,151912,151913,151915,151917],{"class":104,"line":181},[102,151914,59650],{"class":119},[102,151916,59476],{"class":59165},[102,151918,59172],{"class":119},[14,151920,78318],{},[93,151922,151923],{"className":134417,"code":144869,"language":134419,"meta":98,"style":98},[83,151924,151925,151939,151955],{"__ignoreMap":98},[102,151926,151927,151929,151931,151933,151935,151937],{"class":104,"line":105},[102,151928,61686],{"class":59165},[102,151930,9912],{"class":119},[102,151932,110972],{"class":112},[102,151934,260],{"class":108},[102,151936,70564],{"class":278},[102,151938,144886],{"class":119},[102,151940,151941,151943,151945,151947,151949,151951,151953],{"class":104,"line":116},[102,151942,78761],{"class":187},[102,151944,59302],{"class":119},[102,151946,7039],{"class":187},[102,151948,59357],{"class":108},[102,151950,59386],{"class":187},[102,151952,137997],{"class":187},[102,151954,266],{"class":119},[102,151956,151957],{"class":104,"line":123},[102,151958,301],{"class":119},[14,151960,151961],{},"总代码和效果展示：",[6750,151963],{"style":134273,"src":151964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,151966,76754],{},[93,151968,151969],{"className":135164,"code":151792,"language":135166,"meta":98,"style":98},[83,151970,151971,151975,151989,151993,152011,152015,152033,152037,152055,152059,152077],{"__ignoreMap":98},[102,151972,151973],{"class":104,"line":105},[102,151974,151799],{"class":126},[102,151976,151977,151979,151981,151983,151985,151987],{"class":104,"line":116},[102,151978,1208],{"class":119},[102,151980,59476],{"class":59165},[102,151982,61351],{"class":112},[102,151984,260],{"class":119},[102,151986,100188],{"class":278},[102,151988,59172],{"class":119},[102,151990,151991],{"class":104,"line":123},[102,151992,151818],{"class":126},[102,151994,151995,151997,151999,152001,152003,152005,152007,152009],{"class":104,"line":130},[102,151996,60009],{"class":119},[102,151998,59476],{"class":59165},[102,152000,61351],{"class":112},[102,152002,260],{"class":119},[102,152004,151831],{"class":278},[102,152006,151834],{"class":119},[102,152008,59476],{"class":59165},[102,152010,59172],{"class":119},[102,152012,152013],{"class":104,"line":136},[102,152014,151843],{"class":126},[102,152016,152017,152019,152021,152023,152025,152027,152029,152031],{"class":104,"line":142},[102,152018,60009],{"class":119},[102,152020,59476],{"class":59165},[102,152022,61351],{"class":112},[102,152024,260],{"class":119},[102,152026,151856],{"class":278},[102,152028,151834],{"class":119},[102,152030,59476],{"class":59165},[102,152032,59172],{"class":119},[102,152034,152035],{"class":104,"line":148},[102,152036,151867],{"class":126},[102,152038,152039,152041,152043,152045,152047,152049,152051,152053],{"class":104,"line":157},[102,152040,60009],{"class":119},[102,152042,59476],{"class":59165},[102,152044,61351],{"class":112},[102,152046,260],{"class":119},[102,152048,151880],{"class":278},[102,152050,151834],{"class":119},[102,152052,59476],{"class":59165},[102,152054,59172],{"class":119},[102,152056,152057],{"class":104,"line":163},[102,152058,151891],{"class":126},[102,152060,152061,152063,152065,152067,152069,152071,152073,152075],{"class":104,"line":175},[102,152062,60009],{"class":119},[102,152064,59476],{"class":59165},[102,152066,61351],{"class":112},[102,152068,260],{"class":119},[102,152070,151904],{"class":278},[102,152072,151834],{"class":119},[102,152074,59476],{"class":59165},[102,152076,59172],{"class":119},[102,152078,152079,152081,152083],{"class":104,"line":181},[102,152080,59650],{"class":119},[102,152082,59476],{"class":59165},[102,152084,59172],{"class":119},[14,152086,78318],{},[93,152088,152089],{"className":135164,"code":138521,"language":135166,"meta":98,"style":98},[83,152090,152091,152095,152109,152113],{"__ignoreMap":98},[102,152092,152093],{"class":104,"line":105},[102,152094,138528],{"class":126},[102,152096,152097,152099,152101,152103,152105,152107],{"class":104,"line":116},[102,152098,1208],{"class":119},[102,152100,59476],{"class":59165},[102,152102,61351],{"class":112},[102,152104,260],{"class":119},[102,152106,138541],{"class":278},[102,152108,59172],{"class":119},[102,152110,152111],{"class":104,"line":123},[102,152112,138548],{"class":119},[102,152114,152115,152117,152119],{"class":104,"line":130},[102,152116,59650],{"class":119},[102,152118,59476],{"class":59165},[102,152120,59172],{"class":119},[8955,152122,145818],{},{"title":98,"searchDepth":116,"depth":116,"links":152124},[152125,152126,152130,152131,152132],{"id":151269,"depth":116,"text":151270},{"id":151301,"depth":116,"text":151302,"children":152127},[152128,152129],{"id":151305,"depth":123,"text":151306},{"id":151322,"depth":123,"text":151323},{"id":151341,"depth":116,"text":151342},{"id":151348,"depth":116,"text":151349},{"id":151435,"depth":116,"text":151436,"children":152133},[152134,152135,152136,152137,152138],{"id":151442,"depth":123,"text":151443},{"id":151570,"depth":123,"text":151571},{"id":151664,"depth":123,"text":151665},{"id":151713,"depth":123,"text":151714},{"id":151723,"depth":123,"text":151724},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":151261,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":152145,"title":152146,"body":152147,"description":31240,"extension":8978,"meta":153374,"navigation":651,"path":153375,"seo":153376,"stem":153377,"__hash__":153378},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":152148,"toc":153352},[152149,152152,152156,152160,152163,152166,152170,152175,152178,152181,152184,152187,152190,152247,152250,152255,152258,152261,152265,152276,152280,152283,152286,152293,152298,152302,152305,152311,152314,152318,152321,152328,152331,152334,152341,152344,152351,152354,152357,152364,152367,152370,152372,152389,152393,152396,152399,152402,152406,152409,152412,152415,152418,152421,152424,152426,152429,152432,152494,152497,152607,152614,152620,152623,152626,152630,152633,152637,152642,152645,152652,152655,152661,152666,152669,152672,152675,152678,152681,152684,152687,152690,152746,152748,152774,152778,152781,152784,152787,152795,152798,152801,152805,152861,152864,152868,152874,152885,152888,152893,152896,152899,152905,152908,152911,152914,152917,152920,152923,152926,152929,152954,152960,152963,152966,152969,152972,152975,152978,152983,152986,152989,152992,153000,153003,153010,153013,153016,153018,153042,153044,153047,153050,153053,153056,153059,153062,153065,153099,153102,153105,153139,153146,153149,153152,153155,153158,153161,153164,153171,153174,153177,153180,153183,153190,153193,153196,153203,153206,153209,153213,153216,153219,153222,153225,153228,153231,153234,153237,153239,153263,153265,153289,153293,153304,153307,153310,153313,153316,153319,153322,153325,153328,153331,153334,153337,153340,153343,153346,153349],[10,152150,152146],{"id":152151},"_21-移动端布局实战下篇",[43,152153,152155],{"id":152154},"_211-rem适配布局","21.1 rem适配布局",[48,152157,152159],{"id":152158},"_2111-rem单位","21.1.1 rem单位",[6750,152161],{"style":134273,"src":152162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,152164,152165],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[48,152167,152169],{"id":152168},"_2112-媒体查询","21.1.2 媒体查询",[87,152171,152172],{},[62,152173,152174],{},"参数介绍",[6750,152176],{"style":134273,"src":152177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[6750,152179],{"style":134273,"src":152180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[6750,152182],{"style":134273,"src":152183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[6750,152185],{"style":134273,"src":152186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[6750,152188],{"style":134273,"src":152189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[93,152191,152193],{"className":134417,"code":152192,"language":134419,"meta":98,"style":98},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[83,152194,152195,152200,152219,152226,152239,152243],{"__ignoreMap":98},[102,152196,152197],{"class":104,"line":105},[102,152198,152199],{"class":126},"\u002F* 媒体查询 *\u002F\n",[102,152201,152202,152205,152207,152210,152212,152215,152217],{"class":104,"line":116},[102,152203,152204],{"class":108},"@media",[102,152206,2432],{"class":119},[102,152208,152209],{"class":187},"max-width",[102,152211,59302],{"class":119},[102,152213,152214],{"class":187},"768",[102,152216,59357],{"class":108},[102,152218,1105],{"class":119},[102,152220,152221,152224],{"class":104,"line":123},[102,152222,152223],{"class":112},"  .container",[102,152225,1077],{"class":119},[102,152227,152228,152231,152233,152235,152237],{"class":104,"line":130},[102,152229,152230],{"class":187},"    width",[102,152232,59302],{"class":119},[102,152234,5569],{"class":187},[102,152236,9363],{"class":108},[102,152238,266],{"class":119},[102,152240,152241],{"class":104,"line":136},[102,152242,135213],{"class":119},[102,152244,152245],{"class":104,"line":142},[102,152246,301],{"class":119},[14,152248,152249],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[87,152251,152252],{"start":116},[62,152253,152254],{},"引入资源",[6750,152256],{"style":134273,"src":152257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,152259,152260],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[48,152262,152264],{"id":152263},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[59,152266,152267,152270,152273],{},[62,152268,152269],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[62,152271,152272],{},"媒体查询可以根据不同设备宽度来修改样式",[62,152274,152275],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[43,152277,152279],{"id":152278},"_212-less基础","21.2 Less基础",[14,152281,152282],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,152284,152285],{},"Less可以解决该问题，它是css的扩展语言",[14,152287,152288,152289],{},"Less中文网址： ",[9275,152290,152291],{"href":152291,"rel":152292},"http:\u002F\u002Flesscss.cn\u002F",[31729],[14,152294,152295],{},[18,152296,152297],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[48,152299,152301],{"id":152300},"_2121-less安装","21.2.1 less安装",[14,152303,152304],{},"如果使用vscode，则无需进行下方安装步骤",[14,152306,152307],{},[9275,152308,152309],{"href":152309,"rel":152310},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[31729],[6750,152312],{"style":134273,"src":152313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[48,152315,152317],{"id":152316},"_2122-less使用","21.2.2 less使用",[14,152319,152320],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[87,152322,152323],{},[62,152324,152325],{},[18,152326,152327],{},"Less 变量",[6750,152329],{"style":134273,"src":152330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[6750,152332],{"style":134273,"src":152333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[87,152335,152336],{"start":116},[62,152337,152338],{},[18,152339,152340],{},"Less 编译",[6750,152342],{"style":134273,"src":152343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[87,152345,152346],{"start":123},[62,152347,152348],{},[18,152349,152350],{},"Less 嵌套",[6750,152352],{"style":134273,"src":152353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[6750,152355],{"style":134273,"src":152356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[87,152358,152359],{"start":130},[62,152360,152361],{},[18,152362,152363],{},"Less 运算",[6750,152365],{"style":134273,"src":152366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,152368,152369],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,152371,9076],{},[59,152373,152374,152377,152380,152383,152386],{},[62,152375,152376],{},"乘号（*）和除号（\u002F）的写法",[62,152378,152379],{},"运算符中间左右有个空格隔开 1px + 5",[62,152381,152382],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[62,152384,152385],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[62,152387,152388],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[43,152390,152392],{"id":152391},"_213-rem-适配方案","21.3 rem 适配方案",[14,152394,152395],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,152397,152398],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[6750,152400],{"style":134273,"src":152401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[48,152403,152405],{"id":152404},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,152407,152408],{},"rem + 媒体查询 + less 技术",[6750,152410],{"style":134273,"src":152411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,152413,152414],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,152416,152417],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[6750,152419],{"style":134273,"src":152420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,152422,152423],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,152425,32],{},[6750,152427],{"style":134273,"src":152428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,152430,152431],{},"index.html:",[93,152433,152435],{"className":134417,"code":152434,"language":134419,"meta":98,"style":98},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[83,152436,152437,152442,152448,152464,152468,152474,152490],{"__ignoreMap":98},[102,152438,152439],{"class":104,"line":105},[102,152440,152441],{"class":126},"\u002F* rem 适配方案 *\u002F\n",[102,152443,152444,152446],{"class":104,"line":116},[102,152445,58500],{"class":59165},[102,152447,1077],{"class":119},[102,152449,152450,152452,152454,152457,152459,152461],{"class":104,"line":123},[102,152451,78491],{"class":187},[102,152453,59302],{"class":119},[102,152455,152456],{"class":187},"62.5",[102,152458,9363],{"class":108},[102,152460,138280],{"class":119},[102,152462,152463],{"class":126},"\u002F* 1rem = 10px *\u002F\n",[102,152465,152466],{"class":104,"line":130},[102,152467,301],{"class":119},[102,152469,152470,152472],{"class":104,"line":136},[102,152471,138265],{"class":112},[102,152473,1077],{"class":119},[102,152475,152476,152478,152480,152482,152485,152487],{"class":104,"line":142},[102,152477,78433],{"class":187},[102,152479,59302],{"class":119},[102,152481,263],{"class":187},[102,152483,152484],{"class":108},"rem",[102,152486,138280],{"class":119},[102,152488,152489],{"class":126},"\u002F* 100px *\u002F\n",[102,152491,152492],{"class":104,"line":148},[102,152493,301],{"class":119},[14,152495,152496],{},"common.less",[93,152498,152500],{"className":134417,"code":152499,"language":134419,"meta":98,"style":98},"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",[83,152501,152502,152508,152523,152527,152533,152547,152551,152555,152559,152565,152579,152583,152589,152603],{"__ignoreMap":98},[102,152503,152504,152506],{"class":104,"line":105},[102,152505,58500],{"class":59165},[102,152507,1077],{"class":119},[102,152509,152510,152512,152514,152516,152518,152520],{"class":104,"line":116},[102,152511,78491],{"class":187},[102,152513,59302],{"class":119},[102,152515,152456],{"class":187},[102,152517,9363],{"class":108},[102,152519,33932],{"class":119},[102,152521,152522],{"class":126},"\u002F* 10px *\u002F\n",[102,152524,152525],{"class":104,"line":123},[102,152526,301],{"class":119},[102,152528,152529,152531],{"class":104,"line":130},[102,152530,59476],{"class":59165},[102,152532,1077],{"class":119},[102,152534,152535,152537,152539,152541,152543,152545],{"class":104,"line":136},[102,152536,78433],{"class":187},[102,152538,59302],{"class":119},[102,152540,263],{"class":187},[102,152542,152484],{"class":108},[102,152544,33932],{"class":119},[102,152546,152489],{"class":126},[102,152548,152549],{"class":104,"line":142},[102,152550,301],{"class":119},[102,152552,152553],{"class":104,"line":148},[102,152554,143878],{"class":119},[102,152556,152557],{"class":104,"line":157},[102,152558,152441],{"class":126},[102,152560,152561,152563],{"class":104,"line":163},[102,152562,58500],{"class":59165},[102,152564,1077],{"class":119},[102,152566,152567,152569,152571,152573,152575,152577],{"class":104,"line":175},[102,152568,78491],{"class":187},[102,152570,59302],{"class":119},[102,152572,152456],{"class":187},[102,152574,9363],{"class":108},[102,152576,138280],{"class":119},[102,152578,152463],{"class":126},[102,152580,152581],{"class":104,"line":181},[102,152582,301],{"class":119},[102,152584,152585,152587],{"class":104,"line":202},[102,152586,138265],{"class":112},[102,152588,1077],{"class":119},[102,152590,152591,152593,152595,152597,152599,152601],{"class":104,"line":208},[102,152592,78433],{"class":187},[102,152594,59302],{"class":119},[102,152596,263],{"class":187},[102,152598,152484],{"class":108},[102,152600,138280],{"class":119},[102,152602,152489],{"class":126},[102,152604,152605],{"class":104,"line":214},[102,152606,301],{"class":119},[14,152608,152609,152610,152613],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[31417,152611,152612],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[93,152615,152618],{"className":152616,"code":152617,"language":6778},[6776],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[83,152619,152617],{"__ignoreMap":98},[14,152621,152622],{},"less保存时会自动变成.css文件",[14,152624,152625],{},"好好搞懂上述代码写法",[48,152627,152629],{"id":152628},"_2132-样式导入样式","21.3.2 样式导入样式",[6750,152631],{"style":134273,"src":152632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[48,152634,152636],{"id":152635},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[87,152638,152639],{},[62,152640,152641],{},"准备工作",[6750,152643],{"style":134273,"src":152644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,152646,152647,152648],{},"github地址：",[9275,152649,152650],{"href":152650,"rel":152651},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[31729],[14,152653,152654],{},"下载之后，将index.js文件拖到项目中就可以了",[14,152656,152657,152658],{},"js文件引入到index.html中使用的是",[83,152659,152660],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[87,152662,152663],{"start":116},[62,152664,152665],{},"vscode插件",[6750,152667],{"style":134273,"src":152668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,152670,152671],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,152673,152674],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[6750,152676],{"style":134273,"src":152677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,152679,152680],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[6750,152682],{"style":134273,"src":152683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,152685,152686],{},"修改成75就可以，alt+z为快捷键",[14,152688,152689],{},"index.css：",[93,152691,152692],{"className":134417,"code":152434,"language":134419,"meta":98,"style":98},[83,152693,152694,152698,152704,152718,152722,152728,152742],{"__ignoreMap":98},[102,152695,152696],{"class":104,"line":105},[102,152697,152441],{"class":126},[102,152699,152700,152702],{"class":104,"line":116},[102,152701,58500],{"class":59165},[102,152703,1077],{"class":119},[102,152705,152706,152708,152710,152712,152714,152716],{"class":104,"line":123},[102,152707,78491],{"class":187},[102,152709,59302],{"class":119},[102,152711,152456],{"class":187},[102,152713,9363],{"class":108},[102,152715,138280],{"class":119},[102,152717,152463],{"class":126},[102,152719,152720],{"class":104,"line":130},[102,152721,301],{"class":119},[102,152723,152724,152726],{"class":104,"line":136},[102,152725,138265],{"class":112},[102,152727,1077],{"class":119},[102,152729,152730,152732,152734,152736,152738,152740],{"class":104,"line":142},[102,152731,78433],{"class":187},[102,152733,59302],{"class":119},[102,152735,263],{"class":187},[102,152737,152484],{"class":108},[102,152739,138280],{"class":119},[102,152741,152489],{"class":126},[102,152743,152744],{"class":104,"line":148},[102,152745,301],{"class":119},[14,152747,152431],{},[93,152749,152750],{"className":134417,"code":134821,"language":134419,"meta":98,"style":98},[83,152751,152752,152758,152770],{"__ignoreMap":98},[102,152753,152754,152756],{"class":104,"line":105},[102,152755,59665],{"class":59165},[102,152757,1077],{"class":119},[102,152759,152760,152762,152764,152766,152768],{"class":104,"line":116},[102,152761,78491],{"class":187},[102,152763,59302],{"class":119},[102,152765,9628],{"class":187},[102,152767,59357],{"class":108},[102,152769,266],{"class":119},[102,152771,152772],{"class":104,"line":123},[102,152773,301],{"class":119},[43,152775,152777],{"id":152776},"_214-响应式开发","21.4 响应式开发",[14,152779,152780],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[6750,152782],{"style":134273,"src":152783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,152785,152786],{},"做法：",[59,152788,152789,152792],{},[62,152790,152791],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[62,152793,152794],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[6750,152796],{"style":134273,"src":152797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,152799,152800],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[48,152802,152804],{"id":152803},"_2141-简单代码示范","21.4.1 简单代码示范",[93,152806,152807],{"className":134417,"code":152434,"language":134419,"meta":98,"style":98},[83,152808,152809,152813,152819,152833,152837,152843,152857],{"__ignoreMap":98},[102,152810,152811],{"class":104,"line":105},[102,152812,152441],{"class":126},[102,152814,152815,152817],{"class":104,"line":116},[102,152816,58500],{"class":59165},[102,152818,1077],{"class":119},[102,152820,152821,152823,152825,152827,152829,152831],{"class":104,"line":123},[102,152822,78491],{"class":187},[102,152824,59302],{"class":119},[102,152826,152456],{"class":187},[102,152828,9363],{"class":108},[102,152830,138280],{"class":119},[102,152832,152463],{"class":126},[102,152834,152835],{"class":104,"line":130},[102,152836,301],{"class":119},[102,152838,152839,152841],{"class":104,"line":136},[102,152840,138265],{"class":112},[102,152842,1077],{"class":119},[102,152844,152845,152847,152849,152851,152853,152855],{"class":104,"line":142},[102,152846,78433],{"class":187},[102,152848,59302],{"class":119},[102,152850,263],{"class":187},[102,152852,152484],{"class":108},[102,152854,138280],{"class":119},[102,152856,152489],{"class":126},[102,152858,152859],{"class":104,"line":148},[102,152860,301],{"class":119},[14,152862,152863],{},"父盒子一般命名为container",[48,152865,152867],{"id":152866},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,152869,152870,152871],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[18,152872,152873],{},"使得 Web 开发更加快捷",[59,152875,152876],{},[62,152877,152878,152879],{},"官网：",[18,152880,152881],{},[9275,152882,152883],{"href":152883,"rel":152884},"http:\u002F\u002Fgetbootstrap.com\u002F",[31729],[14,152886,152887],{},"可以直接去官网拿现成的东西",[87,152889,152890],{},[62,152891,152892],{},"Bootstrap的使用",[14,152894,152895],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,152897,152898],{},"Bootstrap 使用四步曲：",[14,152900,152901,152904],{},[18,152902,152903],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[6750,152906],{"style":134273,"src":152907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,152909,152910],{},"打开Bootstrap官网，然后下载",[6750,152912],{"style":134273,"src":152913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[6750,152915],{"style":134273,"src":152916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,152918,152919],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,152921,152922],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,152924,152925],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[6750,152927],{"style":134273,"src":152928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[93,152930,152932],{"className":134417,"code":152931,"language":134419,"meta":98,"style":98},".center {\n  color: red;\n}\n",[83,152933,152934,152940,152950],{"__ignoreMap":98},[102,152935,152936,152938],{"class":104,"line":105},[102,152937,134708],{"class":112},[102,152939,1077],{"class":119},[102,152941,152942,152944,152946,152948],{"class":104,"line":116},[102,152943,78770],{"class":187},[102,152945,59302],{"class":119},[102,152947,65286],{"class":187},[102,152949,266],{"class":119},[102,152951,152952],{"class":104,"line":123},[102,152953,301],{"class":119},[14,152955,152956,152959],{},[83,152957,152958],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[6750,152961],{"style":134273,"src":152962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[6750,152964],{"style":134273,"src":152965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[6750,152967],{"style":134273,"src":152968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,152970,152971],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[6750,152973],{"style":134273,"src":152974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,152976,152977],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[87,152979,152980],{"start":116},[62,152981,152982],{},"布局容器",[6750,152984],{"style":134273,"src":152985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,152987,152988],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,152990,152991],{},"container-fluid用于移动式布局比较方便",[87,152993,152994],{"start":123},[62,152995,152996,152997],{},"bootstrap ",[18,152998,152999],{},"栅格系统原理",[6750,153001],{"style":134273,"src":153002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[87,153004,153005],{"start":130},[62,153006,153007],{},[18,153008,153009],{},"栅格选项参数",[6750,153011],{"style":134273,"src":153012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,153014,153015],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,153017,32],{},[93,153019,153020],{"className":134417,"code":152931,"language":134419,"meta":98,"style":98},[83,153021,153022,153028,153038],{"__ignoreMap":98},[102,153023,153024,153026],{"class":104,"line":105},[102,153025,134708],{"class":112},[102,153027,1077],{"class":119},[102,153029,153030,153032,153034,153036],{"class":104,"line":116},[102,153031,78770],{"class":187},[102,153033,59302],{"class":119},[102,153035,65286],{"class":187},[102,153037,266],{"class":119},[102,153039,153040],{"class":104,"line":123},[102,153041,301],{"class":119},[14,153043,143460],{},[6750,153045],{"style":134273,"src":153046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,153048,153049],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,153051,153052],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,153054,153055],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,153057,153058],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,153060,153061],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,153063,153064],{},"汇总展示说明：",[93,153066,153067],{"className":135164,"code":138521,"language":135166,"meta":98,"style":98},[83,153068,153069,153073,153087,153091],{"__ignoreMap":98},[102,153070,153071],{"class":104,"line":105},[102,153072,138528],{"class":126},[102,153074,153075,153077,153079,153081,153083,153085],{"class":104,"line":116},[102,153076,1208],{"class":119},[102,153078,59476],{"class":59165},[102,153080,61351],{"class":112},[102,153082,260],{"class":119},[102,153084,138541],{"class":278},[102,153086,59172],{"class":119},[102,153088,153089],{"class":104,"line":123},[102,153090,138548],{"class":119},[102,153092,153093,153095,153097],{"class":104,"line":130},[102,153094,59650],{"class":119},[102,153096,59476],{"class":59165},[102,153098,59172],{"class":119},[6750,153100],{"style":134273,"src":153101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,153103,153104],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[93,153106,153107],{"className":135164,"code":138521,"language":135166,"meta":98,"style":98},[83,153108,153109,153113,153127,153131],{"__ignoreMap":98},[102,153110,153111],{"class":104,"line":105},[102,153112,138528],{"class":126},[102,153114,153115,153117,153119,153121,153123,153125],{"class":104,"line":116},[102,153116,1208],{"class":119},[102,153118,59476],{"class":59165},[102,153120,61351],{"class":112},[102,153122,260],{"class":119},[102,153124,138541],{"class":278},[102,153126,59172],{"class":119},[102,153128,153129],{"class":104,"line":123},[102,153130,138548],{"class":119},[102,153132,153133,153135,153137],{"class":104,"line":130},[102,153134,59650],{"class":119},[102,153136,59476],{"class":59165},[102,153138,59172],{"class":119},[87,153140,153141],{"start":136},[62,153142,153143],{},[18,153144,153145],{},"列嵌套",[6750,153147],{"style":134273,"src":153148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,153150,153151],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,153153,153154],{},"没加row内部这样：",[6750,153156],{"style":134273,"src":153157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,153159,153160],{},"加上row之后内部为：",[6750,153162],{"style":134273,"src":153163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[87,153165,153166],{"start":142},[62,153167,153168],{},[18,153169,153170],{},"列偏移",[6750,153172],{"style":134273,"src":153173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,153175,153176],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,153178,153179],{},"要加偏移量，即偏移份数",[14,153181,153182],{},"偏移的份数=12-两个盒子的份数",[87,153184,153185],{"start":148},[62,153186,153187],{},[18,153188,153189],{},"列排序",[6750,153191],{"style":134273,"src":153192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,153194,153195],{},"pull拉左；push推右",[87,153197,153198],{"start":157},[62,153199,153200],{},[18,153201,153202],{},"响应式工具",[6750,153204],{"style":134273,"src":153205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,153207,153208],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[48,153210,153212],{"id":153211},"_2143-响应式小项目","21.4.3 响应式小项目",[14,153214,153215],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,153217,153218],{},"ul {",[14,153220,153221],{},"list-style: none;",[14,153223,153224],{},"margin:0;",[14,153226,153227],{},"padding:0; }",[6750,153229],{"style":134273,"src":153230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[6750,153232],{"style":134273,"src":153233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,153235,153236],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,153238,76754],{},[93,153240,153241],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,153242,153243,153249,153259],{"__ignoreMap":98},[102,153244,153245,153247],{"class":104,"line":105},[102,153246,138265],{"class":112},[102,153248,1077],{"class":119},[102,153250,153251,153253,153255,153257],{"class":104,"line":116},[102,153252,138897],{"class":187},[102,153254,59302],{"class":119},[102,153256,31600],{"class":187},[102,153258,266],{"class":119},[102,153260,153261],{"class":104,"line":123},[102,153262,301],{"class":119},[14,153264,78318],{},[93,153266,153267],{"className":134417,"code":147087,"language":134419,"meta":98,"style":98},[83,153268,153269,153275,153285],{"__ignoreMap":98},[102,153270,153271,153273],{"class":104,"line":105},[102,153272,138265],{"class":112},[102,153274,1077],{"class":119},[102,153276,153277,153279,153281,153283],{"class":104,"line":116},[102,153278,138897],{"class":187},[102,153280,59302],{"class":119},[102,153282,31600],{"class":187},[102,153284,266],{"class":119},[102,153286,153287],{"class":104,"line":123},[102,153288,301],{"class":119},[43,153290,153292],{"id":153291},"_215-swiper-插件使用","21.5 swiper 插件使用",[59,153294,153295,153298,153301],{},[62,153296,153297],{},"下载需要的css和js文件html页面中 引入相关文件",[62,153299,153300],{},"官网找到类似案例，复制html结构，css样式 js 语法",[62,153302,153303],{},"根据需求定制修改模块",[6750,153305],{"style":134273,"src":153306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,153308,153309],{},"解压后将这两部分放到项目中",[6750,153311],{"style":134273,"src":153312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,153314,153315],{},"这个插件可以帮助我们实现轮播图效果",[14,153317,153318],{},"用法：",[6750,153320],{"style":134273,"src":153321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,153323,153324],{},"找到自己喜欢的",[6750,153326],{"style":134273,"src":153327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,153329,153330],{},"右键，查看网页源代码",[6750,153332],{"style":134273,"src":153333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,153335,153336],{},"复制人家的结构内容",[14,153338,153339],{},"然后去看API文档：",[6750,153341],{"style":134273,"src":153342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,153344,153345],{},"可以看看如何修改样式",[14,153347,153348],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[8955,153350,153351],{},"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":98,"searchDepth":116,"depth":116,"links":153353},[153354,153359,153363,153368,153373],{"id":152154,"depth":116,"text":152155,"children":153355},[153356,153357,153358],{"id":152158,"depth":123,"text":152159},{"id":152168,"depth":123,"text":152169},{"id":152263,"depth":123,"text":152264},{"id":152278,"depth":116,"text":152279,"children":153360},[153361,153362],{"id":152300,"depth":123,"text":152301},{"id":152316,"depth":123,"text":152317},{"id":152391,"depth":116,"text":152392,"children":153364},[153365,153366,153367],{"id":152404,"depth":123,"text":152405},{"id":152628,"depth":123,"text":152629},{"id":152635,"depth":123,"text":152636},{"id":152776,"depth":116,"text":152777,"children":153369},[153370,153371,153372],{"id":152803,"depth":123,"text":152804},{"id":152866,"depth":123,"text":152867},{"id":153211,"depth":123,"text":153212},{"id":153291,"depth":116,"text":153292},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":152146,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":153380,"title":153381,"body":153382,"description":31240,"extension":8978,"meta":153602,"navigation":651,"path":153603,"seo":153604,"stem":153605,"__hash__":153606},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":153383,"toc":153598},[153384,153387,153391,153394,153409,153414,153417,153422,153457,153462,153474,153479,153492,153497,153514,153519,153539,153544,153562,153565,153568,153571,153574,153578,153581,153584,153587,153590,153593,153596],[10,153385,153381],{"id":153386},"_22-代码提交与新型相对单位",[43,153388,153390],{"id":153389},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,153392,153393],{},"法1：",[87,153395,153396,153403,153406],{},[62,153397,153398,153399],{},"登录网站注册：",[9275,153400,153401],{"href":153401,"rel":153402},"https:\u002F\u002Fgitee.com\u002F",[31729],[62,153404,153405],{},"码云创建新的仓库",[62,153407,153408],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[59,153410,153411],{},[62,153412,153413],{},"在网站根目录右键-- Git Bash Here",[6750,153415],{"style":134273,"src":153416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[59,153418,153419],{},[62,153420,153421],{},"如果是第一次利用git提交，请配置好全局选项",[93,153423,153425],{"className":125161,"code":153424,"language":125163,"meta":98,"style":98},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[83,153426,153427,153443],{"__ignoreMap":98},[102,153428,153429,153432,153434,153437,153440],{"class":104,"line":105},[102,153430,153431],{"class":112},"git",[102,153433,127584],{"class":278},[102,153435,153436],{"class":187}," --global",[102,153438,153439],{"class":278}," user.name",[102,153441,153442],{"class":278}," \"你的名字\"\n",[102,153444,153445,153447,153449,153451,153454],{"class":104,"line":116},[102,153446,153431],{"class":112},[102,153448,127584],{"class":278},[102,153450,153436],{"class":187},[102,153452,153453],{"class":278}," user.email",[102,153455,153456],{"class":278}," \"你的邮箱\"\n",[59,153458,153459],{},[62,153460,153461],{},"初始化仓库",[93,153463,153465],{"className":125161,"code":153464,"language":125163,"meta":98,"style":98},"git init\n",[83,153466,153467],{"__ignoreMap":98},[102,153468,153469,153471],{"class":104,"line":105},[102,153470,153431],{"class":112},[102,153472,153473],{"class":278}," init\n",[59,153475,153476],{},[62,153477,153478],{},"把本地文件放到暂存区",[93,153480,153482],{"className":125161,"code":153481,"language":125163,"meta":98,"style":98},"git add .\n",[83,153483,153484],{"__ignoreMap":98},[102,153485,153486,153488,153490],{"class":104,"line":105},[102,153487,153431],{"class":112},[102,153489,14015],{"class":278},[102,153491,36606],{"class":278},[59,153493,153494],{},[62,153495,153496],{},"把本地文件放到本地仓库里面",[93,153498,153500],{"className":125161,"code":153499,"language":125163,"meta":98,"style":98},"git commit -m \"first commit\"\n",[83,153501,153502],{"__ignoreMap":98},[102,153503,153504,153506,153509,153511],{"class":104,"line":105},[102,153505,153431],{"class":112},[102,153507,153508],{"class":278}," commit",[102,153510,108747],{"class":187},[102,153512,153513],{"class":278}," \"first commit\"\n",[59,153515,153516],{},[62,153517,153518],{},"链接远程仓库",[93,153520,153522],{"className":125161,"code":153521,"language":125163,"meta":98,"style":98},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[83,153523,153524],{"__ignoreMap":98},[102,153525,153526,153528,153531,153533,153536],{"class":104,"line":105},[102,153527,153431],{"class":112},[102,153529,153530],{"class":278}," remote",[102,153532,14015],{"class":278},[102,153534,153535],{"class":278}," origin",[102,153537,153538],{"class":278}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[59,153540,153541],{},[62,153542,153543],{},"把本地仓库的文件推送到远程仓库 push",[93,153545,153547],{"className":125161,"code":153546,"language":125163,"meta":98,"style":98},"git push -u origin master\n",[83,153548,153549],{"__ignoreMap":98},[102,153550,153551,153553,153555,153557,153559],{"class":104,"line":105},[102,153552,153431],{"class":112},[102,153554,36881],{"class":278},[102,153556,36155],{"class":187},[102,153558,153535],{"class":278},[102,153560,153561],{"class":278}," master\n",[6750,153563],{"style":134273,"src":153564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,153566,153567],{},"上方方法暂未实现，后边学完git后在整",[14,153569,153570],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[6750,153572],{"style":134273,"src":153573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[43,153575,153577],{"id":153576},"_222-新型相对单位","22.2 新型相对单位",[6750,153579],{"style":134273,"src":153580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[6750,153582],{"style":134273,"src":153583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,153585,153586],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,153588,153589],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[6750,153591],{"style":134273,"src":153592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,153594,153595],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[8955,153597,31822],{},{"title":98,"searchDepth":116,"depth":116,"links":153599},[153600,153601],{"id":153389,"depth":116,"text":153390},{"id":153576,"depth":116,"text":153577},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":153381,"description":31240},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":153608,"title":153609,"body":153610,"description":153614,"extension":8978,"meta":153615,"navigation":651,"path":153616,"seo":153617,"stem":153618,"__hash__":153619},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":153611,"toc":153612},[],{"title":98,"searchDepth":116,"depth":116,"links":153613},[],"自己正经开始学编程的第一门语言！",{"category":100704},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":153609,"description":153614},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":153621,"title":153622,"body":153623,"description":31240,"extension":8978,"meta":154770,"navigation":651,"path":154771,"seo":154772,"stem":154773,"__hash__":154774},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":153624,"toc":154746},[153625,153628,153632,153635,153638,153663,153666,153672,153676,153679,153706,153709,153749,153752,153764,153767,153773,153777,153781,153808,153825,153832,153836,153839,153865,153868,153872,153875,153915,153918,153935,153941,153945,153950,153994,153997,154015,154018,154086,154090,154097,154100,154115,154118,154127,154130,154141,154144,154153,154156,154173,154176,154191,154195,154199,154202,154204,154224,154228,154231,154234,154245,154248,154254,154258,154264,154291,154294,154306,154309,154320,154323,154329,154333,154339,154389,154392,154434,154437,154470,154473,154507,154511,154514,154534,154537,154573,154576,154589,154593,154597,154603,154606,154619,154623,154626,154632,154635,154639,154642,154645,154694,154698,154714,154720,154727,154733,154743],[10,153626,153622],{"id":153627},"_1-python环境与第一个程序",[43,153629,153631],{"id":153630},"_11-什么是python","1.1 什么是Python",[14,153633,153634],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,153636,153637],{},"理解 Python 时抓住三个关键词：",[87,153639,153640,153643,153646],{},[62,153641,153642],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[62,153644,153645],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[62,153647,153648,153649,9250,153652,9250,153655,9250,153658,9250,153660,36250],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[83,153650,153651],{},"os",[83,153653,153654],{},"sys",[83,153656,153657],{},"json",[83,153659,65725],{},[83,153661,153662],{},"datetime",[14,153664,153665],{},"Python 程序的运行链路：",[93,153667,153670],{"className":153668,"code":153669,"language":6778,"meta":98},[6776],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[83,153671,153669],{"__ignoreMap":98},[43,153673,153675],{"id":153674},"_12-python解释器","1.2 Python解释器",[14,153677,153678],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[93,153680,153682],{"className":31686,"code":153681,"language":31688,"meta":98,"style":98},"python --version\npython3 --version\npython\npython3\n",[83,153683,153684,153690,153696,153701],{"__ignoreMap":98},[102,153685,153686,153688],{"class":104,"line":105},[102,153687,38245],{"class":112},[102,153689,34158],{"class":187},[102,153691,153692,153694],{"class":104,"line":116},[102,153693,108744],{"class":112},[102,153695,34158],{"class":187},[102,153697,153698],{"class":104,"line":123},[102,153699,153700],{"class":112},"python\n",[102,153702,153703],{"class":104,"line":130},[102,153704,153705],{"class":112},"python3\n",[14,153707,153708],{},"进入交互模式后，可以直接输入表达式：",[93,153710,153712],{"className":38243,"code":153711,"language":38245,"meta":98,"style":98},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[83,153713,153714,153725,153730,153744],{"__ignoreMap":98},[102,153715,153716,153719,153721,153723],{"class":104,"line":105},[102,153717,153718],{"class":108},">>>",[102,153720,32983],{"class":187},[102,153722,53431],{"class":108},[102,153724,55588],{"class":187},[102,153726,153727],{"class":104,"line":116},[102,153728,153729],{"class":187},"3\n",[102,153731,153732,153734,153737,153739,153742],{"class":104,"line":123},[102,153733,153718],{"class":108},[102,153735,153736],{"class":187}," print",[102,153738,380],{"class":119},[102,153740,153741],{"class":278},"\"hello python\"",[102,153743,390],{"class":119},[102,153745,153746],{"class":104,"line":130},[102,153747,153748],{"class":119},"hello python\n",[14,153750,153751],{},"退出交互模式：",[93,153753,153755],{"className":38243,"code":153754,"language":38245,"meta":98,"style":98},"exit()\n",[83,153756,153757],{"__ignoreMap":98},[102,153758,153759,153762],{"class":104,"line":105},[102,153760,153761],{"class":187},"exit",[102,153763,172],{"class":119},[14,153765,153766],{},"或使用快捷键：",[93,153768,153771],{"className":153769,"code":153770,"language":6778,"meta":98},[6776],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[83,153772,153770],{"__ignoreMap":98},[43,153774,153776],{"id":153775},"_13-安装python","1.3 安装Python",[48,153778,153780],{"id":153779},"_131-windows安装","1.3.1 Windows安装",[87,153782,153783,153790,153793,153799,153805],{},[62,153784,153785,153786],{},"打开 Python 官网：",[9275,153787,153788],{"href":153788,"rel":153789},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[31729],[62,153791,153792],{},"下载 Windows Installer。",[62,153794,153795,153796,36250],{},"安装时勾选 ",[83,153797,153798],{},"Add Python to PATH",[62,153800,153801,153802,36250],{},"点击 ",[83,153803,153804],{},"Install Now",[62,153806,153807],{},"安装完成后打开命令提示符验证：",[93,153809,153811],{"className":31686,"code":153810,"language":31688,"meta":98,"style":98},"python --version\npip --version\n",[83,153812,153813,153819],{"__ignoreMap":98},[102,153814,153815,153817],{"class":104,"line":105},[102,153816,38245],{"class":112},[102,153818,34158],{"class":187},[102,153820,153821,153823],{"class":104,"line":116},[102,153822,31695],{"class":112},[102,153824,34158],{"class":187},[14,153826,153827,153828,153831],{},"如果提示 ",[83,153829,153830],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[48,153833,153835],{"id":153834},"_132-macos安装","1.3.2 macOS安装",[14,153837,153838],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[93,153840,153842],{"className":31686,"code":153841,"language":31688,"meta":98,"style":98},"brew install python\npython3 --version\npip3 --version\n",[83,153843,153844,153853,153859],{"__ignoreMap":98},[102,153845,153846,153849,153851],{"class":104,"line":105},[102,153847,153848],{"class":112},"brew",[102,153850,31698],{"class":278},[102,153852,132183],{"class":278},[102,153854,153855,153857],{"class":104,"line":116},[102,153856,108744],{"class":112},[102,153858,34158],{"class":187},[102,153860,153861,153863],{"class":104,"line":123},[102,153862,127565],{"class":112},[102,153864,34158],{"class":187},[14,153866,153867],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[48,153869,153871],{"id":153870},"_133-linux安装","1.3.3 Linux安装",[14,153873,153874],{},"Ubuntu\u002FDebian：",[93,153876,153878],{"className":31686,"code":153877,"language":31688,"meta":98,"style":98},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[83,153879,153880,153888,153903,153909],{"__ignoreMap":98},[102,153881,153882,153884,153886],{"class":104,"line":105},[102,153883,32441],{"class":112},[102,153885,125182],{"class":278},[102,153887,34107],{"class":278},[102,153889,153890,153892,153894,153896,153898,153900],{"class":104,"line":116},[102,153891,32441],{"class":112},[102,153893,125182],{"class":278},[102,153895,31698],{"class":278},[102,153897,112268],{"class":278},[102,153899,108663],{"class":278},[102,153901,153902],{"class":278}," python3-venv\n",[102,153904,153905,153907],{"class":104,"line":123},[102,153906,108744],{"class":112},[102,153908,34158],{"class":187},[102,153910,153911,153913],{"class":104,"line":130},[102,153912,127565],{"class":112},[102,153914,34158],{"class":187},[14,153916,153917],{},"Fedora：",[93,153919,153921],{"className":31686,"code":153920,"language":31688,"meta":98,"style":98},"sudo dnf install python3 python3-pip\n",[83,153922,153923],{"__ignoreMap":98},[102,153924,153925,153927,153929,153931,153933],{"class":104,"line":105},[102,153926,32441],{"class":112},[102,153928,34180],{"class":278},[102,153930,31698],{"class":278},[102,153932,112268],{"class":278},[102,153934,127630],{"class":278},[14,153936,153937,153938,153940],{},"Linux 上通常使用 ",[83,153939,108744],{}," 命令，避免和系统旧版本 Python 冲突。",[43,153942,153944],{"id":153943},"_14-pip包管理器","1.4 pip包管理器",[14,153946,153947,153949],{},[83,153948,31695],{}," 用来安装第三方库。",[93,153951,153953],{"className":31686,"code":153952,"language":31688,"meta":98,"style":98},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[83,153954,153955,153964,153973,153981,153987],{"__ignoreMap":98},[102,153956,153957,153959,153961],{"class":104,"line":105},[102,153958,31695],{"class":112},[102,153960,31698],{"class":278},[102,153962,153963],{"class":278}," requests\n",[102,153965,153966,153968,153971],{"class":104,"line":116},[102,153967,31695],{"class":112},[102,153969,153970],{"class":278}," uninstall",[102,153972,153963],{"class":278},[102,153974,153975,153977,153979],{"class":104,"line":123},[102,153976,31695],{"class":112},[102,153978,125439],{"class":278},[102,153980,153963],{"class":278},[102,153982,153983,153985],{"class":104,"line":130},[102,153984,31695],{"class":112},[102,153986,126820],{"class":278},[102,153988,153989,153991],{"class":104,"line":136},[102,153990,31695],{"class":112},[102,153992,153993],{"class":278}," freeze\n",[14,153995,153996],{},"国内网络较慢时可以临时使用镜像：",[93,153998,154000],{"className":31686,"code":153999,"language":31688,"meta":98,"style":98},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[83,154001,154002],{"__ignoreMap":98},[102,154003,154004,154006,154008,154011,154013],{"class":104,"line":105},[102,154005,31695],{"class":112},[102,154007,31698],{"class":278},[102,154009,154010],{"class":278}," requests",[102,154012,34295],{"class":187},[102,154014,127593],{"class":278},[14,154016,154017],{},"常见第三方库：",[9177,154019,154020,154029],{},[9180,154021,154022],{},[9183,154023,154024,154027],{},[9186,154025,154026],{},"库",[9186,154028,110561],{},[9223,154030,154031,154039,154046,154054,154062,154070,154078],{},[9183,154032,154033,154036],{},[9228,154034,154035],{},"requests",[9228,154037,154038],{},"网络请求",[9183,154040,154041,154043],{},[9228,154042,108491],{},[9228,154044,154045],{},"数值计算",[9183,154047,154048,154051],{},[9228,154049,154050],{},"pandas",[9228,154052,154053],{},"表格数据处理",[9183,154055,154056,154059],{},[9228,154057,154058],{},"matplotlib",[9228,154060,154061],{},"绘图",[9183,154063,154064,154067],{},[9228,154065,154066],{},"pyecharts",[9228,154068,154069],{},"ECharts 图表",[9183,154071,154072,154075],{},[9228,154073,154074],{},"flask",[9228,154076,154077],{},"Web 后端",[9183,154079,154080,154083],{},[9228,154081,154082],{},"pytest",[9228,154084,154085],{},"自动化测试",[43,154087,154089],{"id":154088},"_15-虚拟环境","1.5 虚拟环境",[14,154091,154092,154093,154096],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[83,154094,154095],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,154098,154099],{},"创建虚拟环境：",[93,154101,154103],{"className":31686,"code":154102,"language":31688,"meta":98,"style":98},"python -m venv .venv\n",[83,154104,154105],{"__ignoreMap":98},[102,154106,154107,154109,154111,154113],{"class":104,"line":105},[102,154108,38245],{"class":112},[102,154110,108747],{"class":187},[102,154112,108750],{"class":278},[102,154114,108753],{"class":278},[14,154116,154117],{},"Windows 激活：",[93,154119,154121],{"className":31686,"code":154120,"language":31688,"meta":98,"style":98},".venv\\Scripts\\activate\n",[83,154122,154123],{"__ignoreMap":98},[102,154124,154125],{"class":104,"line":105},[102,154126,154120],{"class":112},[14,154128,154129],{},"macOS\u002FLinux 激活：",[93,154131,154133],{"className":31686,"code":154132,"language":31688,"meta":98,"style":98},"source .venv\u002Fbin\u002Factivate\n",[83,154134,154135],{"__ignoreMap":98},[102,154136,154137,154139],{"class":104,"line":105},[102,154138,108758],{"class":187},[102,154140,108761],{"class":278},[14,154142,154143],{},"退出虚拟环境：",[93,154145,154147],{"className":31686,"code":154146,"language":31688,"meta":98,"style":98},"deactivate\n",[83,154148,154149],{"__ignoreMap":98},[102,154150,154151],{"class":104,"line":105},[102,154152,154146],{"class":112},[14,154154,154155],{},"保存依赖：",[93,154157,154159],{"className":31686,"code":154158,"language":31688,"meta":98,"style":98},"pip freeze > requirements.txt\n",[83,154160,154161],{"__ignoreMap":98},[102,154162,154163,154165,154168,154170],{"class":104,"line":105},[102,154164,31695],{"class":112},[102,154166,154167],{"class":278}," freeze",[102,154169,34087],{"class":108},[102,154171,154172],{"class":278}," requirements.txt\n",[14,154174,154175],{},"安装依赖：",[93,154177,154179],{"className":31686,"code":154178,"language":31688,"meta":98,"style":98},"pip install -r requirements.txt\n",[83,154180,154181],{"__ignoreMap":98},[102,154182,154183,154185,154187,154189],{"class":104,"line":105},[102,154184,31695],{"class":112},[102,154186,31698],{"class":278},[102,154188,127504],{"class":187},[102,154190,154172],{"class":278},[43,154192,154194],{"id":154193},"_16-开发工具","1.6 开发工具",[48,154196,154198],{"id":154197},"_161-pycharm","1.6.1 PyCharm",[14,154200,154201],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,154203,129927],{},[87,154205,154206,154209,154212,154218,154221],{},[62,154207,154208],{},"New Project：创建项目。",[62,154210,154211],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[62,154213,154214,154215,133848],{},"New Python File：创建 ",[83,154216,154217],{},".py",[62,154219,154220],{},"Run：运行当前文件。",[62,154222,154223],{},"Debug：断点调试。",[48,154225,154227],{"id":154226},"_162-vs-code","1.6.2 VS Code",[14,154229,154230],{},"VS Code 轻量，适合后续多语言开发。",[14,154232,154233],{},"建议安装插件：",[87,154235,154236,154239,154242],{},[62,154237,154238],{},"Python。",[62,154240,154241],{},"Pylance。",[62,154243,154244],{},"Jupyter。",[14,154246,154247],{},"选择解释器：",[93,154249,154252],{"className":154250,"code":154251,"language":6778,"meta":98},[6776],"Ctrl + Shift + P -> Python: Select Interpreter\n",[83,154253,154251],{"__ignoreMap":98},[43,154255,154257],{"id":154256},"_17-第一个python程序","1.7 第一个Python程序",[14,154259,154260,154261,32483],{},"创建文件 ",[83,154262,154263],{},"hello.py",[93,154265,154267],{"className":38243,"code":154266,"language":38245,"meta":98,"style":98},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[83,154268,154269,154280],{"__ignoreMap":98},[102,154270,154271,154273,154275,154278],{"class":104,"line":105},[102,154272,38280],{"class":187},[102,154274,380],{"class":119},[102,154276,154277],{"class":278},"\"Hello World\"",[102,154279,390],{"class":119},[102,154281,154282,154284,154286,154289],{"class":104,"line":116},[102,154283,38280],{"class":187},[102,154285,380],{"class":119},[102,154287,154288],{"class":278},"\"你好，Python\"",[102,154290,390],{"class":119},[14,154292,154293],{},"在终端运行：",[93,154295,154297],{"className":31686,"code":154296,"language":31688,"meta":98,"style":98},"python hello.py\n",[83,154298,154299],{"__ignoreMap":98},[102,154300,154301,154303],{"class":104,"line":105},[102,154302,38245],{"class":112},[102,154304,154305],{"class":278}," hello.py\n",[14,154307,154308],{},"或：",[93,154310,154312],{"className":31686,"code":154311,"language":31688,"meta":98,"style":98},"python3 hello.py\n",[83,154313,154314],{"__ignoreMap":98},[102,154315,154316,154318],{"class":104,"line":105},[102,154317,108744],{"class":112},[102,154319,154305],{"class":278},[14,154321,154322],{},"输出：",[93,154324,154327],{"className":154325,"code":154326,"language":6778,"meta":98},[6776],"Hello World\n你好，Python\n",[83,154328,154326],{"__ignoreMap":98},[43,154330,154332],{"id":154331},"_18-print函数","1.8 print函数",[14,154334,154335,154338],{},[83,154336,154337],{},"print()"," 用来输出内容。",[93,154340,154342],{"className":38243,"code":154341,"language":38245,"meta":98,"style":98},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[83,154343,154344,154354,154364,154374],{"__ignoreMap":98},[102,154345,154346,154348,154350,154352],{"class":104,"line":105},[102,154347,38280],{"class":187},[102,154349,380],{"class":119},[102,154351,14642],{"class":278},[102,154353,390],{"class":119},[102,154355,154356,154358,154360,154362],{"class":104,"line":116},[102,154357,38280],{"class":187},[102,154359,380],{"class":119},[102,154361,5569],{"class":187},[102,154363,390],{"class":119},[102,154365,154366,154368,154370,154372],{"class":104,"line":123},[102,154367,38280],{"class":187},[102,154369,380],{"class":119},[102,154371,9094],{"class":187},[102,154373,390],{"class":119},[102,154375,154376,154378,154380,154383,154385,154387],{"class":104,"line":130},[102,154377,38280],{"class":187},[102,154379,380],{"class":119},[102,154381,154382],{"class":278},"\"年龄:\"",[102,154384,2571],{"class":119},[102,154386,6080],{"class":187},[102,154388,390],{"class":119},[14,154390,154391],{},"多个内容用逗号隔开，默认中间加空格：",[93,154393,154395],{"className":38243,"code":154394,"language":38245,"meta":98,"style":98},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[83,154396,154397,154407,154417],{"__ignoreMap":98},[102,154398,154399,154402,154404],{"class":104,"line":105},[102,154400,154401],{"class":119},"name ",[102,154403,260],{"class":108},[102,154405,154406],{"class":278}," \"张三\"\n",[102,154408,154409,154412,154414],{"class":104,"line":116},[102,154410,154411],{"class":119},"age ",[102,154413,260],{"class":108},[102,154415,154416],{"class":187}," 18\n",[102,154418,154419,154421,154423,154426,154429,154431],{"class":104,"line":123},[102,154420,38280],{"class":187},[102,154422,380],{"class":119},[102,154424,154425],{"class":278},"\"姓名:\"",[102,154427,154428],{"class":119},", name, ",[102,154430,154382],{"class":278},[102,154432,154433],{"class":119},", age)\n",[14,154435,154436],{},"修改分隔符：",[93,154438,154440],{"className":38243,"code":154439,"language":38245,"meta":98,"style":98},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[83,154441,154442],{"__ignoreMap":98},[102,154443,154444,154446,154448,154451,154453,154455,154457,154459,154461,154464,154466,154468],{"class":104,"line":105},[102,154445,38280],{"class":187},[102,154447,380],{"class":119},[102,154449,154450],{"class":278},"\"2024\"",[102,154452,2571],{"class":119},[102,154454,62181],{"class":278},[102,154456,2571],{"class":119},[102,154458,62181],{"class":278},[102,154460,2571],{"class":119},[102,154462,154463],{"class":386},"sep",[102,154465,260],{"class":108},[102,154467,40348],{"class":278},[102,154469,390],{"class":119},[14,154471,154472],{},"修改结尾符：",[93,154474,154476],{"className":38243,"code":154475,"language":38245,"meta":98,"style":98},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[83,154477,154478,154496],{"__ignoreMap":98},[102,154479,154480,154482,154484,154486,154488,154490,154492,154494],{"class":104,"line":105},[102,154481,38280],{"class":187},[102,154483,380],{"class":119},[102,154485,14642],{"class":278},[102,154487,2571],{"class":119},[102,154489,53666],{"class":386},[102,154491,260],{"class":108},[102,154493,485],{"class":278},[102,154495,390],{"class":119},[102,154497,154498,154500,154502,154505],{"class":104,"line":116},[102,154499,38280],{"class":187},[102,154501,380],{"class":119},[102,154503,154504],{"class":278},"\"python\"",[102,154506,390],{"class":119},[43,154508,154510],{"id":154509},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,154512,154513],{},"交互运行适合临时验证：",[93,154515,154517],{"className":38243,"code":154516,"language":38245,"meta":98,"style":98},">>> 10 * 3\n30\n",[83,154518,154519,154529],{"__ignoreMap":98},[102,154520,154521,154523,154525,154527],{"class":104,"line":105},[102,154522,153718],{"class":108},[102,154524,989],{"class":187},[102,154526,5159],{"class":108},[102,154528,127901],{"class":187},[102,154530,154531],{"class":104,"line":116},[102,154532,154533],{"class":187},"30\n",[14,154535,154536],{},"脚本运行适合保存程序：",[93,154538,154540],{"className":38243,"code":154539,"language":38245,"meta":98,"style":98},"price = 8\ncount = 5\nprint(price * count)\n",[83,154541,154542,154552,154561],{"__ignoreMap":98},[102,154543,154544,154547,154549],{"class":104,"line":105},[102,154545,154546],{"class":119},"price ",[102,154548,260],{"class":108},[102,154550,154551],{"class":187}," 8\n",[102,154553,154554,154557,154559],{"class":104,"line":116},[102,154555,154556],{"class":119},"count ",[102,154558,260],{"class":108},[102,154560,62292],{"class":187},[102,154562,154563,154565,154568,154570],{"class":104,"line":123},[102,154564,38280],{"class":187},[102,154566,154567],{"class":119},"(price ",[102,154569,191],{"class":108},[102,154571,154572],{"class":119}," count)\n",[14,154574,154575],{},"实际学习中推荐：",[87,154577,154578,154581,154586],{},[62,154579,154580],{},"临时试一个语法，用交互模式。",[62,154582,154583,154584,133848],{},"写完整练习，用 ",[83,154585,154217],{},[62,154587,154588],{},"写项目，用独立目录和虚拟环境。",[43,154590,154592],{"id":154591},"_110-常见错误","1.10 常见错误",[48,154594,154596],{"id":154595},"_1101-命令找不到","1.10.1 命令找不到",[93,154598,154601],{"className":154599,"code":154600,"language":6778,"meta":98},[6776],"python: command not found\n",[83,154602,154600],{"__ignoreMap":98},[14,154604,154605],{},"原因：",[87,154607,154608,154611,154614],{},[62,154609,154610],{},"没安装 Python。",[62,154612,154613],{},"PATH 没配置。",[62,154615,154616,154617,36250],{},"Linux\u002FmacOS 应该使用 ",[83,154618,108744],{},[48,154620,154622],{"id":154621},"_1102-文件名冲突","1.10.2 文件名冲突",[14,154624,154625],{},"不要把文件命名为：",[93,154627,154630],{"className":154628,"code":154629,"language":6778,"meta":98},[6776],"random.py\njson.py\ntime.py\nrequests.py\n",[83,154631,154629],{"__ignoreMap":98},[14,154633,154634],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[48,154636,154638],{"id":154637},"_1103-中文乱码","1.10.3 中文乱码",[14,154640,154641],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,154643,154644],{},"如果读写文件出现乱码，要明确指定编码：",[93,154646,154648],{"className":38243,"code":154647,"language":38245,"meta":98,"style":98},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[83,154649,154650,154684],{"__ignoreMap":98},[102,154651,154652,154654,154657,154659,154662,154664,154667,154669,154672,154674,154677,154679,154681],{"class":104,"line":105},[102,154653,115698],{"class":108},[102,154655,154656],{"class":187}," open",[102,154658,380],{"class":119},[102,154660,154661],{"class":278},"\"data.txt\"",[102,154663,2571],{"class":119},[102,154665,154666],{"class":278},"\"r\"",[102,154668,2571],{"class":119},[102,154670,154671],{"class":386},"encoding",[102,154673,260],{"class":108},[102,154675,154676],{"class":278},"\"utf-8\"",[102,154678,22445],{"class":119},[102,154680,39248],{"class":108},[102,154682,154683],{"class":119}," f:\n",[102,154685,154686,154689,154691],{"class":104,"line":116},[102,154687,154688],{"class":119},"    content ",[102,154690,260],{"class":108},[102,154692,154693],{"class":119}," f.read()\n",[43,154695,154697],{"id":154696},"_111-本章练习","1.11 本章练习",[87,154699,154700,154703,154709],{},[62,154701,154702],{},"安装 Python，并在终端输出版本号。",[62,154704,154705,154706,154708],{},"新建 ",[83,154707,154263],{},"，输出自己的姓名、年龄、学习目标。",[62,154710,112231,154711,154713],{},[83,154712,154337],{}," 输出下面格式：",[93,154715,154718],{"className":154716,"code":154717,"language":6778,"meta":98},[6776],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[83,154719,154717],{"__ignoreMap":98},[87,154721,154722],{"start":130},[62,154723,112231,154724,154726],{},[83,154725,154463],{}," 输出日期：",[93,154728,154731],{"className":154729,"code":154730,"language":6778,"meta":98},[6776],"2024-10-10\n",[83,154732,154730],{"__ignoreMap":98},[87,154734,154735],{"start":136},[62,154736,112231,154737,154739,154740,154742],{},[83,154738,53666],{}," 让两次 ",[83,154741,154337],{}," 输出在同一行。",[8955,154744,154745],{},"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":98,"searchDepth":116,"depth":116,"links":154747},[154748,154749,154750,154755,154756,154757,154761,154762,154763,154764,154769],{"id":153630,"depth":116,"text":153631},{"id":153674,"depth":116,"text":153675},{"id":153775,"depth":116,"text":153776,"children":154751},[154752,154753,154754],{"id":153779,"depth":123,"text":153780},{"id":153834,"depth":123,"text":153835},{"id":153870,"depth":123,"text":153871},{"id":153943,"depth":116,"text":153944},{"id":154088,"depth":116,"text":154089},{"id":154193,"depth":116,"text":154194,"children":154758},[154759,154760],{"id":154197,"depth":123,"text":154198},{"id":154226,"depth":123,"text":154227},{"id":154256,"depth":116,"text":154257},{"id":154331,"depth":116,"text":154332},{"id":154509,"depth":116,"text":154510},{"id":154591,"depth":116,"text":154592,"children":154765},[154766,154767,154768],{"id":154595,"depth":123,"text":154596},{"id":154621,"depth":123,"text":154622},{"id":154637,"depth":123,"text":154638},{"id":154696,"depth":116,"text":154697},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":153622,"description":31240},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":154776,"title":154777,"body":154778,"description":31240,"extension":8978,"meta":157182,"navigation":651,"path":157183,"seo":157184,"stem":157185,"__hash__":157186},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":154779,"toc":157167},[154780,154783,154787,154790,154793,154810,154813,154855,154858,154862,154865,154868,154905,154908,154942,154945,155037,155041,155055,155058,155085,155088,155092,155195,155202,155205,155222,155226,155233,155422,155425,155498,155502,155505,155589,155592,155624,155628,155832,155835,155839,155845,155947,155950,156206,156210,156213,156216,156230,156232,156418,156422,156784,156790,156794,156797,156921,156924,157103,157106,157110,157143,157147,157164],[10,154781,154777],{"id":154782},"_10-json与pyecharts折线图",[43,154784,154786],{"id":154785},"_101-数据可视化","10.1 数据可视化",[14,154788,154789],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,154791,154792],{},"常见图表：",[87,154794,154795,154798,154801,154804,154807],{},[62,154796,154797],{},"折线图：看趋势。",[62,154799,154800],{},"柱状图：看分类对比。",[62,154802,154803],{},"饼图：看占比。",[62,154805,154806],{},"地图：看地域分布。",[62,154808,154809],{},"散点图：看两个变量之间的关系。",[14,154811,154812],{},"Python 可视化常用库：",[9177,154814,154815,154823],{},[9180,154816,154817],{},[9183,154818,154819,154821],{},[9186,154820,154026],{},[9186,154822,31604],{},[9223,154824,154825,154832,154840,154847],{},[9183,154826,154827,154829],{},[9228,154828,154058],{},[9228,154830,154831],{},"基础、经典、可定制",[9183,154833,154834,154837],{},[9228,154835,154836],{},"seaborn",[9228,154838,154839],{},"统计图表更美观",[9183,154841,154842,154844],{},[9228,154843,154066],{},[9228,154845,154846],{},"生成交互式网页图表",[9183,154848,154849,154852],{},[9228,154850,154851],{},"plotly",[9228,154853,154854],{},"交互图表能力强",[14,154856,154857],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[43,154859,154861],{"id":154860},"_102-json回顾","10.2 JSON回顾",[14,154863,154864],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,154866,154867],{},"Python 字典：",[93,154869,154871],{"className":38243,"code":154870,"language":38245,"meta":98,"style":98},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[83,154872,154873,154881,154892,154901],{"__ignoreMap":98},[102,154874,154875,154877,154879],{"class":104,"line":105},[102,154876,109523],{"class":119},[102,154878,260],{"class":108},[102,154880,1077],{"class":119},[102,154882,154883,154886,154888,154890],{"class":104,"line":116},[102,154884,154885],{"class":278},"    \"name\"",[102,154887,59302],{"class":119},[102,154889,77134],{"class":278},[102,154891,39331],{"class":119},[102,154893,154894,154897,154899],{"class":104,"line":123},[102,154895,154896],{"class":278},"    \"value\"",[102,154898,59302],{"class":119},[102,154900,105323],{"class":187},[102,154902,154903],{"class":104,"line":130},[102,154904,301],{"class":119},[14,154906,154907],{},"JSON 字符串：",[93,154909,154912],{"className":154910,"code":154911,"language":153657,"meta":98,"style":98},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[83,154913,154914,154918,154929,154938],{"__ignoreMap":98},[102,154915,154916],{"class":104,"line":105},[102,154917,120],{"class":119},[102,154919,154920,154923,154925,154927],{"class":104,"line":116},[102,154921,154922],{"class":187},"  \"name\"",[102,154924,59302],{"class":119},[102,154926,77134],{"class":278},[102,154928,39331],{"class":119},[102,154930,154931,154934,154936],{"class":104,"line":123},[102,154932,154933],{"class":187},"  \"value\"",[102,154935,59302],{"class":119},[102,154937,105323],{"class":187},[102,154939,154940],{"class":104,"line":130},[102,154941,301],{"class":119},[14,154943,154944],{},"Python 与 JSON 的转换：",[93,154946,154948],{"className":38243,"code":154947,"language":38245,"meta":98,"style":98},"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",[83,154949,154950,154957,154961,154986,154990,155009,155016,155020,155030],{"__ignoreMap":98},[102,154951,154952,154954],{"class":104,"line":105},[102,154953,38257],{"class":108},[102,154955,154956],{"class":119}," json\n",[102,154958,154959],{"class":104,"line":116},[102,154960,652],{"emptyLinePlaceholder":651},[102,154962,154963,154965,154967,154969,154971,154973,154975,154977,154980,154982,154984],{"class":104,"line":123},[102,154964,109523],{"class":119},[102,154966,260],{"class":108},[102,154968,13257],{"class":119},[102,154970,70544],{"class":278},[102,154972,59302],{"class":119},[102,154974,77134],{"class":278},[102,154976,2571],{"class":119},[102,154978,154979],{"class":278},"\"value\"",[102,154981,59302],{"class":119},[102,154983,5569],{"class":187},[102,154985,301],{"class":119},[102,154987,154988],{"class":104,"line":130},[102,154989,652],{"emptyLinePlaceholder":651},[102,154991,154992,154995,154997,155000,155003,155005,155007],{"class":104,"line":136},[102,154993,154994],{"class":119},"json_text ",[102,154996,260],{"class":108},[102,154998,154999],{"class":119}," json.dumps(data, ",[102,155001,155002],{"class":386},"ensure_ascii",[102,155004,260],{"class":108},[102,155006,41852],{"class":187},[102,155008,390],{"class":119},[102,155010,155011,155013],{"class":104,"line":142},[102,155012,38280],{"class":187},[102,155014,155015],{"class":119},"(json_text)\n",[102,155017,155018],{"class":104,"line":148},[102,155019,652],{"emptyLinePlaceholder":651},[102,155021,155022,155025,155027],{"class":104,"line":157},[102,155023,155024],{"class":119},"new_data ",[102,155026,260],{"class":108},[102,155028,155029],{"class":119}," json.loads(json_text)\n",[102,155031,155032,155034],{"class":104,"line":163},[102,155033,38280],{"class":187},[102,155035,155036],{"class":119},"(new_data)\n",[43,155038,155040],{"id":155039},"_103-安装pyecharts","10.3 安装pyecharts",[93,155042,155044],{"className":31686,"code":155043,"language":31688,"meta":98,"style":98},"pip install pyecharts\n",[83,155045,155046],{"__ignoreMap":98},[102,155047,155048,155050,155052],{"class":104,"line":105},[102,155049,31695],{"class":112},[102,155051,31698],{"class":278},[102,155053,155054],{"class":278}," pyecharts\n",[14,155056,155057],{},"验证：",[93,155059,155061],{"className":38243,"code":155060,"language":38245,"meta":98,"style":98},"import pyecharts\n\nprint(pyecharts.__version__)\n",[83,155062,155063,155069,155073],{"__ignoreMap":98},[102,155064,155065,155067],{"class":104,"line":105},[102,155066,38257],{"class":108},[102,155068,155054],{"class":119},[102,155070,155071],{"class":104,"line":116},[102,155072,652],{"emptyLinePlaceholder":651},[102,155074,155075,155077,155080,155083],{"class":104,"line":123},[102,155076,38280],{"class":187},[102,155078,155079],{"class":119},"(pyecharts.",[102,155081,155082],{"class":187},"__version__",[102,155084,390],{"class":119},[14,155086,155087],{},"如果使用虚拟环境，要先激活环境再安装。",[43,155089,155091],{"id":155090},"_104-第一个折线图","10.4 第一个折线图",[93,155093,155095],{"className":38243,"code":155094,"language":38245,"meta":98,"style":98},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[83,155096,155097,155109,155113,155123,155153,155185],{"__ignoreMap":98},[102,155098,155099,155101,155104,155106],{"class":104,"line":105},[102,155100,38602],{"class":108},[102,155102,155103],{"class":119}," pyecharts.charts ",[102,155105,38257],{"class":108},[102,155107,155108],{"class":119}," Line\n",[102,155110,155111],{"class":104,"line":116},[102,155112,652],{"emptyLinePlaceholder":651},[102,155114,155115,155118,155120],{"class":104,"line":123},[102,155116,155117],{"class":119},"line ",[102,155119,260],{"class":108},[102,155121,155122],{"class":119}," Line()\n",[102,155124,155125,155128,155131,155133,155136,155138,155141,155143,155146,155148,155151],{"class":104,"line":130},[102,155126,155127],{"class":119},"line.add_xaxis([",[102,155129,155130],{"class":278},"\"周一\"",[102,155132,2571],{"class":119},[102,155134,155135],{"class":278},"\"周二\"",[102,155137,2571],{"class":119},[102,155139,155140],{"class":278},"\"周三\"",[102,155142,2571],{"class":119},[102,155144,155145],{"class":278},"\"周四\"",[102,155147,2571],{"class":119},[102,155149,155150],{"class":278},"\"周五\"",[102,155152,13466],{"class":119},[102,155154,155155,155158,155161,155163,155165,155167,155169,155171,155173,155175,155178,155180,155183],{"class":104,"line":136},[102,155156,155157],{"class":119},"line.add_yaxis(",[102,155159,155160],{"class":278},"\"销售额\"",[102,155162,85383],{"class":119},[102,155164,5569],{"class":187},[102,155166,2571],{"class":119},[102,155168,9840],{"class":187},[102,155170,2571],{"class":119},[102,155172,9884],{"class":187},[102,155174,2571],{"class":119},[102,155176,155177],{"class":187},"150",[102,155179,2571],{"class":119},[102,155181,155182],{"class":187},"180",[102,155184,13466],{"class":119},[102,155186,155187,155190,155193],{"class":104,"line":142},[102,155188,155189],{"class":119},"line.render(",[102,155191,155192],{"class":278},"\"line.html\"",[102,155194,390],{"class":119},[14,155196,155197,155198,155201],{},"运行后会生成 ",[83,155199,155200],{},"line.html","，用浏览器打开即可看到图表。",[14,155203,155204],{},"核心步骤：",[87,155206,155207,155210,155213,155216,155219],{},[62,155208,155209],{},"导入图表类。",[62,155211,155212],{},"创建图表对象。",[62,155214,155215],{},"添加 x 轴数据。",[62,155217,155218],{},"添加 y 轴数据。",[62,155220,155221],{},"渲染为 HTML。",[43,155223,155225],{"id":155224},"_105-全局配置","10.5 全局配置",[14,155227,155228,155229,155232],{},"常用配置在 ",[83,155230,155231],{},"pyecharts.options"," 中。",[93,155234,155236],{"className":38243,"code":155235,"language":38245,"meta":98,"style":98},"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",[83,155237,155238,155255,155265,155269,155277,155301,155329,155334,155353,155372,155390,155410,155414],{"__ignoreMap":98},[102,155239,155240,155242,155245,155247,155250,155252],{"class":104,"line":105},[102,155241,38602],{"class":108},[102,155243,155244],{"class":119}," pyecharts ",[102,155246,38257],{"class":108},[102,155248,155249],{"class":119}," options ",[102,155251,39248],{"class":108},[102,155253,155254],{"class":119}," opts\n",[102,155256,155257,155259,155261,155263],{"class":104,"line":116},[102,155258,38602],{"class":108},[102,155260,155103],{"class":119},[102,155262,38257],{"class":108},[102,155264,155108],{"class":119},[102,155266,155267],{"class":104,"line":123},[102,155268,652],{"emptyLinePlaceholder":651},[102,155270,155271,155273,155275],{"class":104,"line":130},[102,155272,155117],{"class":119},[102,155274,260],{"class":108},[102,155276,155122],{"class":119},[102,155278,155279,155281,155283,155285,155287,155289,155291,155293,155295,155297,155299],{"class":104,"line":136},[102,155280,155127],{"class":119},[102,155282,155130],{"class":278},[102,155284,2571],{"class":119},[102,155286,155135],{"class":278},[102,155288,2571],{"class":119},[102,155290,155140],{"class":278},[102,155292,2571],{"class":119},[102,155294,155145],{"class":278},[102,155296,2571],{"class":119},[102,155298,155150],{"class":278},[102,155300,13466],{"class":119},[102,155302,155303,155305,155307,155309,155311,155313,155315,155317,155319,155321,155323,155325,155327],{"class":104,"line":142},[102,155304,155157],{"class":119},[102,155306,155160],{"class":278},[102,155308,85383],{"class":119},[102,155310,5569],{"class":187},[102,155312,2571],{"class":119},[102,155314,9840],{"class":187},[102,155316,2571],{"class":119},[102,155318,9884],{"class":187},[102,155320,2571],{"class":119},[102,155322,155177],{"class":187},[102,155324,2571],{"class":119},[102,155326,155182],{"class":187},[102,155328,13466],{"class":119},[102,155330,155331],{"class":104,"line":148},[102,155332,155333],{"class":119},"line.set_global_opts(\n",[102,155335,155336,155339,155341,155344,155346,155348,155351],{"class":104,"line":157},[102,155337,155338],{"class":386},"    title_opts",[102,155340,260],{"class":108},[102,155342,155343],{"class":119},"opts.TitleOpts(",[102,155345,59272],{"class":386},[102,155347,260],{"class":108},[102,155349,155350],{"class":278},"\"一周销售额\"",[102,155352,45912],{"class":119},[102,155354,155355,155358,155360,155363,155365,155367,155370],{"class":104,"line":163},[102,155356,155357],{"class":386},"    xaxis_opts",[102,155359,260],{"class":108},[102,155361,155362],{"class":119},"opts.AxisOpts(",[102,155364,87675],{"class":386},[102,155366,260],{"class":108},[102,155368,155369],{"class":278},"\"日期\"",[102,155371,45912],{"class":119},[102,155373,155374,155377,155379,155381,155383,155385,155388],{"class":104,"line":175},[102,155375,155376],{"class":386},"    yaxis_opts",[102,155378,260],{"class":108},[102,155380,155362],{"class":119},[102,155382,87675],{"class":386},[102,155384,260],{"class":108},[102,155386,155387],{"class":278},"\"金额\"",[102,155389,45912],{"class":119},[102,155391,155392,155395,155397,155400,155403,155405,155408],{"class":104,"line":181},[102,155393,155394],{"class":386},"    tooltip_opts",[102,155396,260],{"class":108},[102,155398,155399],{"class":119},"opts.TooltipOpts(",[102,155401,155402],{"class":386},"trigger",[102,155404,260],{"class":108},[102,155406,155407],{"class":278},"\"axis\"",[102,155409,45912],{"class":119},[102,155411,155412],{"class":104,"line":202},[102,155413,390],{"class":119},[102,155415,155416,155418,155420],{"class":104,"line":208},[102,155417,155189],{"class":119},[102,155419,155192],{"class":278},[102,155421,390],{"class":119},[14,155423,155424],{},"常见全局配置：",[9177,155426,155427,155436],{},[9180,155428,155429],{},[9183,155430,155431,155434],{},[9186,155432,155433],{},"配置",[9186,155435,110561],{},[9223,155437,155438,155448,155458,155468,155478,155488],{},[9183,155439,155440,155445],{},[9228,155441,155442],{},[83,155443,155444],{},"TitleOpts",[9228,155446,155447],{},"标题",[9183,155449,155450,155455],{},[9228,155451,155452],{},[83,155453,155454],{},"LegendOpts",[9228,155456,155457],{},"图例",[9183,155459,155460,155465],{},[9228,155461,155462],{},[83,155463,155464],{},"TooltipOpts",[9228,155466,155467],{},"提示框",[9183,155469,155470,155475],{},[9228,155471,155472],{},[83,155473,155474],{},"AxisOpts",[9228,155476,155477],{},"坐标轴",[9183,155479,155480,155485],{},[9228,155481,155482],{},[83,155483,155484],{},"VisualMapOpts",[9228,155486,155487],{},"视觉映射",[9183,155489,155490,155495],{},[9228,155491,155492],{},[83,155493,155494],{},"DataZoomOpts",[9228,155496,155497],{},"区域缩放",[43,155499,155501],{"id":155500},"_106-系列配置","10.6 系列配置",[14,155503,155504],{},"系列配置作用于某一组数据。",[93,155506,155508],{"className":38243,"code":155507,"language":38245,"meta":98,"style":98},"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",[83,155509,155510,155515,155526,155555,155566,155585],{"__ignoreMap":98},[102,155511,155512],{"class":104,"line":105},[102,155513,155514],{"class":119},"line.add_yaxis(\n",[102,155516,155517,155520,155522,155524],{"class":104,"line":116},[102,155518,155519],{"class":386},"    series_name",[102,155521,260],{"class":108},[102,155523,155160],{"class":278},[102,155525,39331],{"class":119},[102,155527,155528,155531,155533,155535,155537,155539,155541,155543,155545,155547,155549,155551,155553],{"class":104,"line":123},[102,155529,155530],{"class":386},"    y_axis",[102,155532,260],{"class":108},[102,155534,9912],{"class":119},[102,155536,5569],{"class":187},[102,155538,2571],{"class":119},[102,155540,9840],{"class":187},[102,155542,2571],{"class":119},[102,155544,9884],{"class":187},[102,155546,2571],{"class":119},[102,155548,155177],{"class":187},[102,155550,2571],{"class":119},[102,155552,155182],{"class":187},[102,155554,95701],{"class":119},[102,155556,155557,155560,155562,155564],{"class":104,"line":130},[102,155558,155559],{"class":386},"    is_smooth",[102,155561,260],{"class":108},[102,155563,39341],{"class":187},[102,155565,39331],{"class":119},[102,155567,155568,155571,155573,155576,155579,155581,155583],{"class":104,"line":136},[102,155569,155570],{"class":386},"    label_opts",[102,155572,260],{"class":108},[102,155574,155575],{"class":119},"opts.LabelOpts(",[102,155577,155578],{"class":386},"is_show",[102,155580,260],{"class":108},[102,155582,39341],{"class":187},[102,155584,45912],{"class":119},[102,155586,155587],{"class":104,"line":142},[102,155588,390],{"class":119},[14,155590,155591],{},"常用参数：",[87,155593,155594,155600,155606,155612,155618],{},[62,155595,155596,155599],{},[83,155597,155598],{},"series_name","：系列名称。",[62,155601,155602,155605],{},[83,155603,155604],{},"y_axis","：y 轴数据。",[62,155607,155608,155611],{},[83,155609,155610],{},"is_smooth","：是否平滑曲线。",[62,155613,155614,155617],{},[83,155615,155616],{},"label_opts","：标签配置。",[62,155619,155620,155623],{},[83,155621,155622],{},"symbol_size","：标记点大小。",[43,155625,155627],{"id":155626},"_107-多条折线","10.7 多条折线",[93,155629,155631],{"className":38243,"code":155630,"language":38245,"meta":98,"style":98},"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",[83,155632,155633,155647,155657,155661,155690,155694,155702,155707,155745,155782,155786,155803,155819,155823],{"__ignoreMap":98},[102,155634,155635,155637,155639,155641,155643,155645],{"class":104,"line":105},[102,155636,38602],{"class":108},[102,155638,155244],{"class":119},[102,155640,38257],{"class":108},[102,155642,155249],{"class":119},[102,155644,39248],{"class":108},[102,155646,155254],{"class":119},[102,155648,155649,155651,155653,155655],{"class":104,"line":116},[102,155650,38602],{"class":108},[102,155652,155103],{"class":119},[102,155654,38257],{"class":108},[102,155656,155108],{"class":119},[102,155658,155659],{"class":104,"line":123},[102,155660,652],{"emptyLinePlaceholder":651},[102,155662,155663,155666,155668,155670,155672,155674,155676,155678,155680,155682,155684,155686,155688],{"class":104,"line":130},[102,155664,155665],{"class":119},"dates ",[102,155667,260],{"class":108},[102,155669,60091],{"class":119},[102,155671,155130],{"class":278},[102,155673,2571],{"class":119},[102,155675,155135],{"class":278},[102,155677,2571],{"class":119},[102,155679,155140],{"class":278},[102,155681,2571],{"class":119},[102,155683,155145],{"class":278},[102,155685,2571],{"class":119},[102,155687,155150],{"class":278},[102,155689,41111],{"class":119},[102,155691,155692],{"class":104,"line":136},[102,155693,652],{"emptyLinePlaceholder":651},[102,155695,155696,155698,155700],{"class":104,"line":142},[102,155697,155117],{"class":119},[102,155699,260],{"class":108},[102,155701,155122],{"class":119},[102,155703,155704],{"class":104,"line":148},[102,155705,155706],{"class":119},"line.add_xaxis(dates)\n",[102,155708,155709,155711,155714,155716,155718,155720,155723,155725,155727,155729,155731,155733,155735,155737,155739,155741,155743],{"class":104,"line":157},[102,155710,155157],{"class":119},[102,155712,155713],{"class":278},"\"线上销售\"",[102,155715,85383],{"class":119},[102,155717,5569],{"class":187},[102,155719,2571],{"class":119},[102,155721,155722],{"class":187},"130",[102,155724,2571],{"class":119},[102,155726,9840],{"class":187},[102,155728,2571],{"class":119},[102,155730,6640],{"class":187},[102,155732,2571],{"class":119},[102,155734,7866],{"class":187},[102,155736,120067],{"class":119},[102,155738,155610],{"class":386},[102,155740,260],{"class":108},[102,155742,39341],{"class":187},[102,155744,390],{"class":119},[102,155746,155747,155749,155752,155754,155756,155758,155760,155762,155764,155766,155768,155770,155772,155774,155776,155778,155780],{"class":104,"line":163},[102,155748,155157],{"class":119},[102,155750,155751],{"class":278},"\"线下销售\"",[102,155753,85383],{"class":119},[102,155755,9639],{"class":187},[102,155757,2571],{"class":119},[102,155759,9884],{"class":187},[102,155761,2571],{"class":119},[102,155763,5569],{"class":187},[102,155765,2571],{"class":119},[102,155767,9840],{"class":187},[102,155769,2571],{"class":119},[102,155771,155177],{"class":187},[102,155773,120067],{"class":119},[102,155775,155610],{"class":386},[102,155777,260],{"class":108},[102,155779,39341],{"class":187},[102,155781,390],{"class":119},[102,155783,155784],{"class":104,"line":175},[102,155785,155333],{"class":119},[102,155787,155788,155790,155792,155794,155796,155798,155801],{"class":104,"line":181},[102,155789,155338],{"class":386},[102,155791,260],{"class":108},[102,155793,155343],{"class":119},[102,155795,59272],{"class":386},[102,155797,260],{"class":108},[102,155799,155800],{"class":278},"\"线上线下销售趋势\"",[102,155802,45912],{"class":119},[102,155804,155805,155807,155809,155811,155813,155815,155817],{"class":104,"line":202},[102,155806,155394],{"class":386},[102,155808,260],{"class":108},[102,155810,155399],{"class":119},[102,155812,155402],{"class":386},[102,155814,260],{"class":108},[102,155816,155407],{"class":278},[102,155818,45912],{"class":119},[102,155820,155821],{"class":104,"line":208},[102,155822,390],{"class":119},[102,155824,155825,155827,155830],{"class":104,"line":214},[102,155826,155189],{"class":119},[102,155828,155829],{"class":278},"\"sales.html\"",[102,155831,390],{"class":119},[14,155833,155834],{},"多条折线适合比较不同指标或不同地区。",[43,155836,155838],{"id":155837},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,155840,155841,155842,32483],{},"假设 ",[83,155843,155844],{},"sales.json",[93,155846,155848],{"className":154910,"code":155847,"language":153657,"meta":98,"style":98},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[83,155849,155850,155855,155887,155915,155943],{"__ignoreMap":98},[102,155851,155852],{"class":104,"line":105},[102,155853,155854],{"class":119},"[\n",[102,155856,155857,155860,155863,155865,155867,155869,155872,155874,155876,155878,155881,155883,155885],{"class":104,"line":116},[102,155858,155859],{"class":119},"  {",[102,155861,155862],{"class":187},"\"date\"",[102,155864,59302],{"class":119},[102,155866,155130],{"class":278},[102,155868,2571],{"class":119},[102,155870,155871],{"class":187},"\"online\"",[102,155873,59302],{"class":119},[102,155875,5569],{"class":187},[102,155877,2571],{"class":119},[102,155879,155880],{"class":187},"\"offline\"",[102,155882,59302],{"class":119},[102,155884,9639],{"class":187},[102,155886,13739],{"class":119},[102,155888,155889,155891,155893,155895,155897,155899,155901,155903,155905,155907,155909,155911,155913],{"class":104,"line":123},[102,155890,155859],{"class":119},[102,155892,155862],{"class":187},[102,155894,59302],{"class":119},[102,155896,155135],{"class":278},[102,155898,2571],{"class":119},[102,155900,155871],{"class":187},[102,155902,59302],{"class":119},[102,155904,155722],{"class":187},[102,155906,2571],{"class":119},[102,155908,155880],{"class":187},[102,155910,59302],{"class":119},[102,155912,9884],{"class":187},[102,155914,13739],{"class":119},[102,155916,155917,155919,155921,155923,155925,155927,155929,155931,155933,155935,155937,155939,155941],{"class":104,"line":130},[102,155918,155859],{"class":119},[102,155920,155862],{"class":187},[102,155922,59302],{"class":119},[102,155924,155140],{"class":278},[102,155926,2571],{"class":119},[102,155928,155871],{"class":187},[102,155930,59302],{"class":119},[102,155932,9840],{"class":187},[102,155934,2571],{"class":119},[102,155936,155880],{"class":187},[102,155938,59302],{"class":119},[102,155940,5569],{"class":187},[102,155942,301],{"class":119},[102,155944,155945],{"class":104,"line":136},[102,155946,41111],{"class":119},[14,155948,155949],{},"读取并绘图：",[93,155951,155953],{"className":38243,"code":155952,"language":38245,"meta":98,"style":98},"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",[83,155954,155955,155961,155975,155985,155989,156021,156034,156038,156046,156055,156064,156068,156080,156089,156098,156107,156111,156119,156123,156140,156157,156161,156178,156194,156198],{"__ignoreMap":98},[102,155956,155957,155959],{"class":104,"line":105},[102,155958,38257],{"class":108},[102,155960,154956],{"class":119},[102,155962,155963,155965,155967,155969,155971,155973],{"class":104,"line":116},[102,155964,38602],{"class":108},[102,155966,155244],{"class":119},[102,155968,38257],{"class":108},[102,155970,155249],{"class":119},[102,155972,39248],{"class":108},[102,155974,155254],{"class":119},[102,155976,155977,155979,155981,155983],{"class":104,"line":123},[102,155978,38602],{"class":108},[102,155980,155103],{"class":119},[102,155982,38257],{"class":108},[102,155984,155108],{"class":119},[102,155986,155987],{"class":104,"line":130},[102,155988,652],{"emptyLinePlaceholder":651},[102,155990,155991,155993,155995,155997,156000,156002,156004,156006,156008,156010,156012,156014,156016,156019],{"class":104,"line":136},[102,155992,115698],{"class":108},[102,155994,154656],{"class":187},[102,155996,380],{"class":119},[102,155998,155999],{"class":278},"\"sales.json\"",[102,156001,2571],{"class":119},[102,156003,154666],{"class":278},[102,156005,2571],{"class":119},[102,156007,154671],{"class":386},[102,156009,260],{"class":108},[102,156011,154676],{"class":278},[102,156013,22445],{"class":119},[102,156015,39248],{"class":108},[102,156017,156018],{"class":386}," file",[102,156020,12552],{"class":119},[102,156022,156023,156025,156027,156030,156032],{"class":104,"line":142},[102,156024,109286],{"class":119},[102,156026,260],{"class":108},[102,156028,156029],{"class":119}," json.load(",[102,156031,53219],{"class":386},[102,156033,390],{"class":119},[102,156035,156036],{"class":104,"line":148},[102,156037,652],{"emptyLinePlaceholder":651},[102,156039,156040,156042,156044],{"class":104,"line":157},[102,156041,155665],{"class":119},[102,156043,260],{"class":108},[102,156045,59703],{"class":119},[102,156047,156048,156051,156053],{"class":104,"line":163},[102,156049,156050],{"class":119},"online_sales ",[102,156052,260],{"class":108},[102,156054,59703],{"class":119},[102,156056,156057,156060,156062],{"class":104,"line":175},[102,156058,156059],{"class":119},"offline_sales ",[102,156061,260],{"class":108},[102,156063,59703],{"class":119},[102,156065,156066],{"class":104,"line":181},[102,156067,652],{"emptyLinePlaceholder":651},[102,156069,156070,156072,156075,156077],{"class":104,"line":202},[102,156071,11841],{"class":108},[102,156073,156074],{"class":119}," item ",[102,156076,33908],{"class":108},[102,156078,156079],{"class":119}," data:\n",[102,156081,156082,156085,156087],{"class":104,"line":208},[102,156083,156084],{"class":119},"    dates.append(item[",[102,156086,155862],{"class":278},[102,156088,13466],{"class":119},[102,156090,156091,156094,156096],{"class":104,"line":214},[102,156092,156093],{"class":119},"    online_sales.append(item[",[102,156095,155871],{"class":278},[102,156097,13466],{"class":119},[102,156099,156100,156103,156105],{"class":104,"line":225},[102,156101,156102],{"class":119},"    offline_sales.append(item[",[102,156104,155880],{"class":278},[102,156106,13466],{"class":119},[102,156108,156109],{"class":104,"line":230},[102,156110,652],{"emptyLinePlaceholder":651},[102,156112,156113,156115,156117],{"class":104,"line":236},[102,156114,155117],{"class":119},[102,156116,260],{"class":108},[102,156118,155122],{"class":119},[102,156120,156121],{"class":104,"line":242},[102,156122,155706],{"class":119},[102,156124,156125,156127,156129,156132,156134,156136,156138],{"class":104,"line":248},[102,156126,155157],{"class":119},[102,156128,155713],{"class":278},[102,156130,156131],{"class":119},", online_sales, ",[102,156133,155610],{"class":386},[102,156135,260],{"class":108},[102,156137,39341],{"class":187},[102,156139,390],{"class":119},[102,156141,156142,156144,156146,156149,156151,156153,156155],{"class":104,"line":254},[102,156143,155157],{"class":119},[102,156145,155751],{"class":278},[102,156147,156148],{"class":119},", offline_sales, ",[102,156150,155610],{"class":386},[102,156152,260],{"class":108},[102,156154,39341],{"class":187},[102,156156,390],{"class":119},[102,156158,156159],{"class":104,"line":269},[102,156160,155333],{"class":119},[102,156162,156163,156165,156167,156169,156171,156173,156176],{"class":104,"line":298},[102,156164,155338],{"class":386},[102,156166,260],{"class":108},[102,156168,155343],{"class":119},[102,156170,59272],{"class":386},[102,156172,260],{"class":108},[102,156174,156175],{"class":278},"\"销售趋势\"",[102,156177,45912],{"class":119},[102,156179,156180,156182,156184,156186,156188,156190,156192],{"class":104,"line":502},[102,156181,155394],{"class":386},[102,156183,260],{"class":108},[102,156185,155399],{"class":119},[102,156187,155402],{"class":386},[102,156189,260],{"class":108},[102,156191,155407],{"class":278},[102,156193,45912],{"class":119},[102,156195,156196],{"class":104,"line":507},[102,156197,390],{"class":119},[102,156199,156200,156202,156204],{"class":104,"line":512},[102,156201,155189],{"class":119},[102,156203,155829],{"class":278},[102,156205,390],{"class":119},[43,156207,156209],{"id":156208},"_109-数据清洗","10.9 数据清洗",[14,156211,156212],{},"真实数据经常不整齐，需要清洗。",[14,156214,156215],{},"常见问题：",[87,156217,156218,156221,156224,156227],{},[62,156219,156220],{},"数字是字符串。",[62,156222,156223],{},"字段缺失。",[62,156225,156226],{},"空值。",[62,156228,156229],{},"日期格式不统一。",[14,156231,619],{},[93,156233,156235],{"className":38243,"code":156234,"language":38245,"meta":98,"style":98},"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",[83,156236,156237,156246,156269,156289,156310,156314,156318,156326,156335,156339,156350,156364,156373,156378,156382,156390,156400,156404,156411],{"__ignoreMap":98},[102,156238,156239,156242,156244],{"class":104,"line":105},[102,156240,156241],{"class":119},"raw_data ",[102,156243,260],{"class":108},[102,156245,63312],{"class":119},[102,156247,156248,156251,156253,156255,156257,156259,156262,156264,156267],{"class":104,"line":116},[102,156249,156250],{"class":119},"    {",[102,156252,155862],{"class":278},[102,156254,59302],{"class":119},[102,156256,155130],{"class":278},[102,156258,2571],{"class":119},[102,156260,156261],{"class":278},"\"sales\"",[102,156263,59302],{"class":119},[102,156265,156266],{"class":278},"\"100\"",[102,156268,13739],{"class":119},[102,156270,156271,156273,156275,156277,156279,156281,156283,156285,156287],{"class":104,"line":123},[102,156272,156250],{"class":119},[102,156274,155862],{"class":278},[102,156276,59302],{"class":119},[102,156278,155135],{"class":278},[102,156280,2571],{"class":119},[102,156282,156261],{"class":278},[102,156284,59302],{"class":119},[102,156286,16439],{"class":278},[102,156288,13739],{"class":119},[102,156290,156291,156293,156295,156297,156299,156301,156303,156305,156308],{"class":104,"line":130},[102,156292,156250],{"class":119},[102,156294,155862],{"class":278},[102,156296,59302],{"class":119},[102,156298,155140],{"class":278},[102,156300,2571],{"class":119},[102,156302,156261],{"class":278},[102,156304,59302],{"class":119},[102,156306,156307],{"class":278},"\"120\"",[102,156309,13739],{"class":119},[102,156311,156312],{"class":104,"line":136},[102,156313,41111],{"class":119},[102,156315,156316],{"class":104,"line":142},[102,156317,652],{"emptyLinePlaceholder":651},[102,156319,156320,156322,156324],{"class":104,"line":148},[102,156321,155665],{"class":119},[102,156323,260],{"class":108},[102,156325,59703],{"class":119},[102,156327,156328,156331,156333],{"class":104,"line":157},[102,156329,156330],{"class":119},"sales ",[102,156332,260],{"class":108},[102,156334,59703],{"class":119},[102,156336,156337],{"class":104,"line":163},[102,156338,652],{"emptyLinePlaceholder":651},[102,156340,156341,156343,156345,156347],{"class":104,"line":175},[102,156342,11841],{"class":108},[102,156344,156074],{"class":119},[102,156346,33908],{"class":108},[102,156348,156349],{"class":119}," raw_data:\n",[102,156351,156352,156355,156357,156360,156362],{"class":104,"line":181},[102,156353,156354],{"class":119},"    value ",[102,156356,260],{"class":108},[102,156358,156359],{"class":119}," item.get(",[102,156361,156261],{"class":278},[102,156363,390],{"class":119},[102,156365,156366,156368,156370],{"class":104,"line":202},[102,156367,2343],{"class":108},[102,156369,46795],{"class":108},[102,156371,156372],{"class":119}," value:\n",[102,156374,156375],{"class":104,"line":208},[102,156376,156377],{"class":108},"        continue\n",[102,156379,156380],{"class":104,"line":214},[102,156381,652],{"emptyLinePlaceholder":651},[102,156383,156384,156386,156388],{"class":104,"line":225},[102,156385,156084],{"class":119},[102,156387,155862],{"class":278},[102,156389,13466],{"class":119},[102,156391,156392,156395,156397],{"class":104,"line":230},[102,156393,156394],{"class":119},"    sales.append(",[102,156396,217],{"class":187},[102,156398,156399],{"class":119},"(value))\n",[102,156401,156402],{"class":104,"line":236},[102,156403,652],{"emptyLinePlaceholder":651},[102,156405,156406,156408],{"class":104,"line":242},[102,156407,38280],{"class":187},[102,156409,156410],{"class":119},"(dates)\n",[102,156412,156413,156415],{"class":104,"line":248},[102,156414,38280],{"class":187},[102,156416,156417],{"class":119},"(sales)\n",[43,156419,156421],{"id":156420},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[93,156423,156425],{"className":38243,"code":156424,"language":38245,"meta":98,"style":98},"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",[83,156426,156427,156441,156451,156455,156463,156484,156506,156528,156550,156572,156576,156580,156602,156623,156627,156635,156639,156643,156653,156662,156672,156688,156692,156696,156713,156729,156745,156761,156771,156775],{"__ignoreMap":98},[102,156428,156429,156431,156433,156435,156437,156439],{"class":104,"line":105},[102,156430,38602],{"class":108},[102,156432,155244],{"class":119},[102,156434,38257],{"class":108},[102,156436,155249],{"class":119},[102,156438,39248],{"class":108},[102,156440,155254],{"class":119},[102,156442,156443,156445,156447,156449],{"class":104,"line":116},[102,156444,38602],{"class":108},[102,156446,155103],{"class":119},[102,156448,38257],{"class":108},[102,156450,155108],{"class":119},[102,156452,156453],{"class":104,"line":123},[102,156454,652],{"emptyLinePlaceholder":651},[102,156456,156457,156459,156461],{"class":104,"line":130},[102,156458,156330],{"class":119},[102,156460,260],{"class":108},[102,156462,63312],{"class":119},[102,156464,156465,156467,156469,156471,156474,156476,156478,156480,156482],{"class":104,"line":136},[102,156466,156250],{"class":119},[102,156468,155862],{"class":278},[102,156470,59302],{"class":119},[102,156472,156473],{"class":278},"\"2024-10-01\"",[102,156475,2571],{"class":119},[102,156477,91949],{"class":278},[102,156479,59302],{"class":119},[102,156481,99888],{"class":187},[102,156483,13739],{"class":119},[102,156485,156486,156488,156490,156492,156495,156497,156499,156501,156504],{"class":104,"line":142},[102,156487,156250],{"class":119},[102,156489,155862],{"class":278},[102,156491,59302],{"class":119},[102,156493,156494],{"class":278},"\"2024-10-02\"",[102,156496,2571],{"class":119},[102,156498,91949],{"class":278},[102,156500,59302],{"class":119},[102,156502,156503],{"class":187},"1800",[102,156505,13739],{"class":119},[102,156507,156508,156510,156512,156514,156517,156519,156521,156523,156526],{"class":104,"line":148},[102,156509,156250],{"class":119},[102,156511,155862],{"class":278},[102,156513,59302],{"class":119},[102,156515,156516],{"class":278},"\"2024-10-03\"",[102,156518,2571],{"class":119},[102,156520,91949],{"class":278},[102,156522,59302],{"class":119},[102,156524,156525],{"class":187},"1500",[102,156527,13739],{"class":119},[102,156529,156530,156532,156534,156536,156539,156541,156543,156545,156548],{"class":104,"line":157},[102,156531,156250],{"class":119},[102,156533,155862],{"class":278},[102,156535,59302],{"class":119},[102,156537,156538],{"class":278},"\"2024-10-04\"",[102,156540,2571],{"class":119},[102,156542,91949],{"class":278},[102,156544,59302],{"class":119},[102,156546,156547],{"class":187},"2100",[102,156549,13739],{"class":119},[102,156551,156552,156554,156556,156558,156561,156563,156565,156567,156570],{"class":104,"line":163},[102,156553,156250],{"class":119},[102,156555,155862],{"class":278},[102,156557,59302],{"class":119},[102,156559,156560],{"class":278},"\"2024-10-05\"",[102,156562,2571],{"class":119},[102,156564,91949],{"class":278},[102,156566,59302],{"class":119},[102,156568,156569],{"class":187},"2600",[102,156571,13739],{"class":119},[102,156573,156574],{"class":104,"line":175},[102,156575,41111],{"class":119},[102,156577,156578],{"class":104,"line":181},[102,156579,652],{"emptyLinePlaceholder":651},[102,156581,156582,156584,156586,156589,156591,156593,156595,156597,156599],{"class":104,"line":202},[102,156583,155665],{"class":119},[102,156585,260],{"class":108},[102,156587,156588],{"class":119}," [item[",[102,156590,155862],{"class":278},[102,156592,13252],{"class":119},[102,156594,11841],{"class":108},[102,156596,156074],{"class":119},[102,156598,33908],{"class":108},[102,156600,156601],{"class":119}," sales]\n",[102,156603,156604,156607,156609,156611,156613,156615,156617,156619,156621],{"class":104,"line":208},[102,156605,156606],{"class":119},"amounts ",[102,156608,260],{"class":108},[102,156610,156588],{"class":119},[102,156612,91949],{"class":278},[102,156614,13252],{"class":119},[102,156616,11841],{"class":108},[102,156618,156074],{"class":119},[102,156620,33908],{"class":108},[102,156622,156601],{"class":119},[102,156624,156625],{"class":104,"line":214},[102,156626,652],{"emptyLinePlaceholder":651},[102,156628,156629,156631,156633],{"class":104,"line":225},[102,156630,155117],{"class":119},[102,156632,260],{"class":108},[102,156634,155122],{"class":119},[102,156636,156637],{"class":104,"line":230},[102,156638,155706],{"class":119},[102,156640,156641],{"class":104,"line":236},[102,156642,155514],{"class":119},[102,156644,156645,156647,156649,156651],{"class":104,"line":242},[102,156646,155519],{"class":386},[102,156648,260],{"class":108},[102,156650,155160],{"class":278},[102,156652,39331],{"class":119},[102,156654,156655,156657,156659],{"class":104,"line":248},[102,156656,155530],{"class":386},[102,156658,260],{"class":108},[102,156660,156661],{"class":119},"amounts,\n",[102,156663,156664,156666,156668,156670],{"class":104,"line":254},[102,156665,155559],{"class":386},[102,156667,260],{"class":108},[102,156669,39341],{"class":187},[102,156671,39331],{"class":119},[102,156673,156674,156676,156678,156680,156682,156684,156686],{"class":104,"line":269},[102,156675,155570],{"class":386},[102,156677,260],{"class":108},[102,156679,155575],{"class":119},[102,156681,155578],{"class":386},[102,156683,260],{"class":108},[102,156685,39341],{"class":187},[102,156687,45912],{"class":119},[102,156689,156690],{"class":104,"line":298},[102,156691,390],{"class":119},[102,156693,156694],{"class":104,"line":502},[102,156695,155333],{"class":119},[102,156697,156698,156700,156702,156704,156706,156708,156711],{"class":104,"line":507},[102,156699,155338],{"class":386},[102,156701,260],{"class":108},[102,156703,155343],{"class":119},[102,156705,59272],{"class":386},[102,156707,260],{"class":108},[102,156709,156710],{"class":278},"\"每日销售额\"",[102,156712,45912],{"class":119},[102,156714,156715,156717,156719,156721,156723,156725,156727],{"class":104,"line":512},[102,156716,155357],{"class":386},[102,156718,260],{"class":108},[102,156720,155362],{"class":119},[102,156722,87675],{"class":386},[102,156724,260],{"class":108},[102,156726,155369],{"class":278},[102,156728,45912],{"class":119},[102,156730,156731,156733,156735,156737,156739,156741,156743],{"class":104,"line":521},[102,156732,155376],{"class":386},[102,156734,260],{"class":108},[102,156736,155362],{"class":119},[102,156738,87675],{"class":386},[102,156740,260],{"class":108},[102,156742,155387],{"class":278},[102,156744,45912],{"class":119},[102,156746,156747,156749,156751,156753,156755,156757,156759],{"class":104,"line":526},[102,156748,155394],{"class":386},[102,156750,260],{"class":108},[102,156752,155399],{"class":119},[102,156754,155402],{"class":386},[102,156756,260],{"class":108},[102,156758,155407],{"class":278},[102,156760,45912],{"class":119},[102,156762,156763,156766,156768],{"class":104,"line":532},[102,156764,156765],{"class":386},"    datazoom_opts",[102,156767,260],{"class":108},[102,156769,156770],{"class":119},"[opts.DataZoomOpts()],\n",[102,156772,156773],{"class":104,"line":538},[102,156774,390],{"class":119},[102,156776,156777,156779,156782],{"class":104,"line":555},[102,156778,155189],{"class":119},[102,156780,156781],{"class":278},"\"daily_sales.html\"",[102,156783,390],{"class":119},[14,156785,156786,156789],{},[83,156787,156788],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[43,156791,156793],{"id":156792},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,156795,156796],{},"如果数据结构如下：",[93,156798,156800],{"className":38243,"code":156799,"language":38245,"meta":98,"style":98},"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",[83,156801,156802,156810,156818,156840,156861,156866,156873,156893,156913,156917],{"__ignoreMap":98},[102,156803,156804,156806,156808],{"class":104,"line":105},[102,156805,109523],{"class":119},[102,156807,260],{"class":108},[102,156809,1077],{"class":119},[102,156811,156812,156815],{"class":104,"line":116},[102,156813,156814],{"class":278},"    \"北京\"",[102,156816,156817],{"class":119},": [\n",[102,156819,156820,156822,156824,156826,156829,156831,156834,156836,156838],{"class":104,"line":123},[102,156821,13726],{"class":119},[102,156823,155862],{"class":278},[102,156825,59302],{"class":119},[102,156827,156828],{"class":278},"\"2024-01-01\"",[102,156830,2571],{"class":119},[102,156832,156833],{"class":278},"\"confirm\"",[102,156835,59302],{"class":119},[102,156837,263],{"class":187},[102,156839,13739],{"class":119},[102,156841,156842,156844,156846,156848,156851,156853,156855,156857,156859],{"class":104,"line":130},[102,156843,13726],{"class":119},[102,156845,155862],{"class":278},[102,156847,59302],{"class":119},[102,156849,156850],{"class":278},"\"2024-01-02\"",[102,156852,2571],{"class":119},[102,156854,156833],{"class":278},[102,156856,59302],{"class":119},[102,156858,9527],{"class":187},[102,156860,13739],{"class":119},[102,156862,156863],{"class":104,"line":136},[102,156864,156865],{"class":119},"    ],\n",[102,156867,156868,156871],{"class":104,"line":142},[102,156869,156870],{"class":278},"    \"上海\"",[102,156872,156817],{"class":119},[102,156874,156875,156877,156879,156881,156883,156885,156887,156889,156891],{"class":104,"line":148},[102,156876,13726],{"class":119},[102,156878,155862],{"class":278},[102,156880,59302],{"class":119},[102,156882,156828],{"class":278},[102,156884,2571],{"class":119},[102,156886,156833],{"class":278},[102,156888,59302],{"class":119},[102,156890,9428],{"class":187},[102,156892,13739],{"class":119},[102,156894,156895,156897,156899,156901,156903,156905,156907,156909,156911],{"class":104,"line":157},[102,156896,13726],{"class":119},[102,156898,155862],{"class":278},[102,156900,59302],{"class":119},[102,156902,156850],{"class":278},[102,156904,2571],{"class":119},[102,156906,156833],{"class":278},[102,156908,59302],{"class":119},[102,156910,9551],{"class":187},[102,156912,13739],{"class":119},[102,156914,156915],{"class":104,"line":163},[102,156916,156865],{"class":119},[102,156918,156919],{"class":104,"line":175},[102,156920,301],{"class":119},[14,156922,156923],{},"绘制多地区趋势：",[93,156925,156927],{"className":38243,"code":156926,"language":38245,"meta":98,"style":98},"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",[83,156928,156929,156943,156953,156957,156982,156986,156994,156998,157002,157014,157036,157049,157053,157057,157074,157090,157094],{"__ignoreMap":98},[102,156930,156931,156933,156935,156937,156939,156941],{"class":104,"line":105},[102,156932,38602],{"class":108},[102,156934,155244],{"class":119},[102,156936,38257],{"class":108},[102,156938,155249],{"class":119},[102,156940,39248],{"class":108},[102,156942,155254],{"class":119},[102,156944,156945,156947,156949,156951],{"class":104,"line":116},[102,156946,38602],{"class":108},[102,156948,155103],{"class":119},[102,156950,38257],{"class":108},[102,156952,155108],{"class":119},[102,156954,156955],{"class":104,"line":123},[102,156956,652],{"emptyLinePlaceholder":651},[102,156958,156959,156961,156963,156965,156967,156969,156971,156973,156975,156978,156980],{"class":104,"line":130},[102,156960,155665],{"class":119},[102,156962,260],{"class":108},[102,156964,156588],{"class":119},[102,156966,155862],{"class":278},[102,156968,13252],{"class":119},[102,156970,11841],{"class":108},[102,156972,156074],{"class":119},[102,156974,33908],{"class":108},[102,156976,156977],{"class":119}," data[",[102,156979,77134],{"class":278},[102,156981,85392],{"class":119},[102,156983,156984],{"class":104,"line":136},[102,156985,652],{"emptyLinePlaceholder":651},[102,156987,156988,156990,156992],{"class":104,"line":142},[102,156989,155117],{"class":119},[102,156991,260],{"class":108},[102,156993,155122],{"class":119},[102,156995,156996],{"class":104,"line":148},[102,156997,155706],{"class":119},[102,156999,157000],{"class":104,"line":157},[102,157001,652],{"emptyLinePlaceholder":651},[102,157003,157004,157006,157009,157011],{"class":104,"line":163},[102,157005,11841],{"class":108},[102,157007,157008],{"class":119}," city, records ",[102,157010,33908],{"class":108},[102,157012,157013],{"class":119}," data.items():\n",[102,157015,157016,157019,157021,157023,157025,157027,157029,157031,157033],{"class":104,"line":175},[102,157017,157018],{"class":119},"    values ",[102,157020,260],{"class":108},[102,157022,156588],{"class":119},[102,157024,156833],{"class":278},[102,157026,13252],{"class":119},[102,157028,11841],{"class":108},[102,157030,156074],{"class":119},[102,157032,33908],{"class":108},[102,157034,157035],{"class":119}," records]\n",[102,157037,157038,157041,157043,157045,157047],{"class":104,"line":181},[102,157039,157040],{"class":119},"    line.add_yaxis(city, values, ",[102,157042,155610],{"class":386},[102,157044,260],{"class":108},[102,157046,39341],{"class":187},[102,157048,390],{"class":119},[102,157050,157051],{"class":104,"line":202},[102,157052,652],{"emptyLinePlaceholder":651},[102,157054,157055],{"class":104,"line":208},[102,157056,155333],{"class":119},[102,157058,157059,157061,157063,157065,157067,157069,157072],{"class":104,"line":214},[102,157060,155338],{"class":386},[102,157062,260],{"class":108},[102,157064,155343],{"class":119},[102,157066,59272],{"class":386},[102,157068,260],{"class":108},[102,157070,157071],{"class":278},"\"多地区趋势图\"",[102,157073,45912],{"class":119},[102,157075,157076,157078,157080,157082,157084,157086,157088],{"class":104,"line":225},[102,157077,155394],{"class":386},[102,157079,260],{"class":108},[102,157081,155399],{"class":119},[102,157083,155402],{"class":386},[102,157085,260],{"class":108},[102,157087,155407],{"class":278},[102,157089,45912],{"class":119},[102,157091,157092],{"class":104,"line":230},[102,157093,390],{"class":119},[102,157095,157096,157098,157101],{"class":104,"line":236},[102,157097,155189],{"class":119},[102,157099,157100],{"class":278},"\"trend.html\"",[102,157102,390],{"class":119},[14,157104,157105],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[43,157107,157109],{"id":157108},"_1012-易错点","10.12 易错点",[87,157111,157112,157118,157124,157134,157140],{},[62,157113,157114,157117],{},[83,157115,157116],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[62,157119,157120,157123],{},[83,157121,157122],{},"render()"," 生成的是 HTML，不是图片。",[62,157125,157126,157127,157130,157131,36250],{},"JSON 字符串用 ",[83,157128,157129],{},"json.loads()","，JSON 文件用 ",[83,157132,157133],{},"json.load()",[62,157135,157136,157137,36250],{},"中文 JSON 保存时加 ",[83,157138,157139],{},"ensure_ascii=False",[62,157141,157142],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[43,157144,157146],{"id":157145},"_1013-本章练习","10.13 本章练习",[87,157148,157149,157152,157155,157158,157161],{},[62,157150,157151],{},"安装 pyecharts 并生成第一个折线图。",[62,157153,157154],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[62,157156,157157],{},"绘制两条折线，对比线上和线下销售额。",[62,157159,157160],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[62,157162,157163],{},"对含有空值的销售数据进行清洗后再绘图。",[8955,157165,157166],{},"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":98,"searchDepth":116,"depth":116,"links":157168},[157169,157170,157171,157172,157173,157174,157175,157176,157177,157178,157179,157180,157181],{"id":154785,"depth":116,"text":154786},{"id":154860,"depth":116,"text":154861},{"id":155039,"depth":116,"text":155040},{"id":155090,"depth":116,"text":155091},{"id":155224,"depth":116,"text":155225},{"id":155500,"depth":116,"text":155501},{"id":155626,"depth":116,"text":155627},{"id":155837,"depth":116,"text":155838},{"id":156208,"depth":116,"text":156209},{"id":156420,"depth":116,"text":156421},{"id":156792,"depth":116,"text":156793},{"id":157108,"depth":116,"text":157109},{"id":157145,"depth":116,"text":157146},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":154777,"description":31240},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":157188,"title":157189,"body":157190,"description":31240,"extension":8978,"meta":159550,"navigation":651,"path":159551,"seo":159552,"stem":159553,"__hash__":159554},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":157191,"toc":159527},[157192,157195,157199,157202,157205,157281,157284,157375,157378,157382,157385,157429,157442,157446,157449,157516,157519,157523,157526,157610,157618,157622,157627,157768,157771,157782,157788,157794,157908,157912,157915,157918,158171,158174,158178,158181,158285,158288,158292,158443,158447,158454,158567,158571,158574,158680,158683,158687,158690,158721,158724,158829,158832,158836,158840,158850,158918,158922,158929,158993,158996,159000,159006,159102,159111,159115,159439,159448,159452,159480,159484,159524],[10,157193,157189],{"id":157194},"_11-面向对象基础",[43,157196,157198],{"id":157197},"_111-什么是面向对象","11.1 什么是面向对象",[14,157200,157201],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,157203,157204],{},"面向过程：",[93,157206,157208],{"className":38243,"code":157207,"language":38245,"meta":98,"style":98},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[83,157209,157210,157219,157227,157231,157241,157272,157276],{"__ignoreMap":98},[102,157211,157212,157214,157216],{"class":104,"line":105},[102,157213,154401],{"class":119},[102,157215,260],{"class":108},[102,157217,157218],{"class":278}," \"小明\"\n",[102,157220,157221,157223,157225],{"class":104,"line":116},[102,157222,154411],{"class":119},[102,157224,260],{"class":108},[102,157226,154416],{"class":187},[102,157228,157229],{"class":104,"line":123},[102,157230,652],{"emptyLinePlaceholder":651},[102,157232,157233,157235,157238],{"class":104,"line":130},[102,157234,39812],{"class":108},[102,157236,157237],{"class":112}," introduce",[102,157239,157240],{"class":119},"(name, age):\n",[102,157242,157243,157245,157247,157249,157252,157254,157256,157258,157261,157263,157265,157267,157270],{"class":104,"line":136},[102,157244,39164],{"class":187},[102,157246,380],{"class":119},[102,157248,9097],{"class":108},[102,157250,157251],{"class":278},"\"我叫",[102,157253,9918],{"class":187},[102,157255,87675],{"class":119},[102,157257,9967],{"class":187},[102,157259,157260],{"class":278},"，今年",[102,157262,9918],{"class":187},[102,157264,78086],{"class":119},[102,157266,9967],{"class":187},[102,157268,157269],{"class":278},"岁\"",[102,157271,390],{"class":119},[102,157273,157274],{"class":104,"line":142},[102,157275,652],{"emptyLinePlaceholder":651},[102,157277,157278],{"class":104,"line":148},[102,157279,157280],{"class":119},"introduce(name, age)\n",[14,157282,157283],{},"面向对象：",[93,157285,157287],{"className":38243,"code":157286,"language":38245,"meta":98,"style":98},"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",[83,157288,157289,157297,157305,157334,157338,157342,157352,157361,157370],{"__ignoreMap":98},[102,157290,157291,157293,157295],{"class":104,"line":105},[102,157292,109],{"class":108},[102,157294,16679],{"class":112},[102,157296,12552],{"class":119},[102,157298,157299,157301,157303],{"class":104,"line":116},[102,157300,38666],{"class":108},[102,157302,157237],{"class":112},[102,157304,38672],{"class":119},[102,157306,157307,157309,157311,157313,157315,157318,157320,157322,157324,157326,157328,157330,157332],{"class":104,"line":123},[102,157308,40316],{"class":187},[102,157310,380],{"class":119},[102,157312,9097],{"class":108},[102,157314,157251],{"class":278},[102,157316,157317],{"class":187},"{self",[102,157319,88166],{"class":119},[102,157321,9967],{"class":187},[102,157323,157260],{"class":278},[102,157325,157317],{"class":187},[102,157327,88178],{"class":119},[102,157329,9967],{"class":187},[102,157331,157269],{"class":278},[102,157333,390],{"class":119},[102,157335,157336],{"class":104,"line":130},[102,157337,652],{"emptyLinePlaceholder":651},[102,157339,157340],{"class":104,"line":136},[102,157341,652],{"emptyLinePlaceholder":651},[102,157343,157344,157347,157349],{"class":104,"line":142},[102,157345,157346],{"class":119},"student ",[102,157348,260],{"class":108},[102,157350,157351],{"class":119}," Student()\n",[102,157353,157354,157357,157359],{"class":104,"line":148},[102,157355,157356],{"class":119},"student.name ",[102,157358,260],{"class":108},[102,157360,157218],{"class":278},[102,157362,157363,157366,157368],{"class":104,"line":157},[102,157364,157365],{"class":119},"student.age ",[102,157367,260],{"class":108},[102,157369,154416],{"class":187},[102,157371,157372],{"class":104,"line":163},[102,157373,157374],{"class":119},"student.introduce()\n",[14,157376,157377],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[43,157379,157381],{"id":157380},"_112-类和对象","11.2 类和对象",[14,157383,157384],{},"类是模板，对象是根据模板创建出来的具体实例。",[93,157386,157388],{"className":38243,"code":157387,"language":38245,"meta":98,"style":98},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[83,157389,157390,157398,157403,157407,157411,157420],{"__ignoreMap":98},[102,157391,157392,157394,157396],{"class":104,"line":105},[102,157393,109],{"class":108},[102,157395,16679],{"class":112},[102,157397,12552],{"class":119},[102,157399,157400],{"class":104,"line":116},[102,157401,157402],{"class":108},"    pass\n",[102,157404,157405],{"class":104,"line":123},[102,157406,652],{"emptyLinePlaceholder":651},[102,157408,157409],{"class":104,"line":130},[102,157410,652],{"emptyLinePlaceholder":651},[102,157412,157413,157416,157418],{"class":104,"line":136},[102,157414,157415],{"class":119},"student1 ",[102,157417,260],{"class":108},[102,157419,157351],{"class":119},[102,157421,157422,157425,157427],{"class":104,"line":142},[102,157423,157424],{"class":119},"student2 ",[102,157426,260],{"class":108},[102,157428,157351],{"class":119},[14,157430,157431,157434,157435,108883,157438,157441],{},[83,157432,157433],{},"Student"," 是类，",[83,157436,157437],{},"student1",[83,157439,157440],{},"student2"," 是对象。",[43,157443,157445],{"id":157444},"_113-属性","11.3 属性",[14,157447,157448],{},"属性是对象保存的数据。",[93,157450,157452],{"className":38243,"code":157451,"language":38245,"meta":98,"style":98},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[83,157453,157454,157462,157466,157470,157474,157482,157490,157498,157502,157509],{"__ignoreMap":98},[102,157455,157456,157458,157460],{"class":104,"line":105},[102,157457,109],{"class":108},[102,157459,16679],{"class":112},[102,157461,12552],{"class":119},[102,157463,157464],{"class":104,"line":116},[102,157465,157402],{"class":108},[102,157467,157468],{"class":104,"line":123},[102,157469,652],{"emptyLinePlaceholder":651},[102,157471,157472],{"class":104,"line":130},[102,157473,652],{"emptyLinePlaceholder":651},[102,157475,157476,157478,157480],{"class":104,"line":136},[102,157477,157346],{"class":119},[102,157479,260],{"class":108},[102,157481,157351],{"class":119},[102,157483,157484,157486,157488],{"class":104,"line":142},[102,157485,157356],{"class":119},[102,157487,260],{"class":108},[102,157489,157218],{"class":278},[102,157491,157492,157494,157496],{"class":104,"line":148},[102,157493,157365],{"class":119},[102,157495,260],{"class":108},[102,157497,154416],{"class":187},[102,157499,157500],{"class":104,"line":157},[102,157501,652],{"emptyLinePlaceholder":651},[102,157503,157504,157506],{"class":104,"line":163},[102,157505,38280],{"class":187},[102,157507,157508],{"class":119},"(student.name)\n",[102,157510,157511,157513],{"class":104,"line":175},[102,157512,38280],{"class":187},[102,157514,157515],{"class":119},"(student.age)\n",[14,157517,157518],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[43,157520,157522],{"id":157521},"_114-方法","11.4 方法",[14,157524,157525],{},"类中的函数叫方法。",[93,157527,157528],{"className":38243,"code":157286,"language":38245,"meta":98,"style":98},[83,157529,157530,157538,157546,157574,157578,157582,157590,157598,157606],{"__ignoreMap":98},[102,157531,157532,157534,157536],{"class":104,"line":105},[102,157533,109],{"class":108},[102,157535,16679],{"class":112},[102,157537,12552],{"class":119},[102,157539,157540,157542,157544],{"class":104,"line":116},[102,157541,38666],{"class":108},[102,157543,157237],{"class":112},[102,157545,38672],{"class":119},[102,157547,157548,157550,157552,157554,157556,157558,157560,157562,157564,157566,157568,157570,157572],{"class":104,"line":123},[102,157549,40316],{"class":187},[102,157551,380],{"class":119},[102,157553,9097],{"class":108},[102,157555,157251],{"class":278},[102,157557,157317],{"class":187},[102,157559,88166],{"class":119},[102,157561,9967],{"class":187},[102,157563,157260],{"class":278},[102,157565,157317],{"class":187},[102,157567,88178],{"class":119},[102,157569,9967],{"class":187},[102,157571,157269],{"class":278},[102,157573,390],{"class":119},[102,157575,157576],{"class":104,"line":130},[102,157577,652],{"emptyLinePlaceholder":651},[102,157579,157580],{"class":104,"line":136},[102,157581,652],{"emptyLinePlaceholder":651},[102,157583,157584,157586,157588],{"class":104,"line":142},[102,157585,157346],{"class":119},[102,157587,260],{"class":108},[102,157589,157351],{"class":119},[102,157591,157592,157594,157596],{"class":104,"line":148},[102,157593,157356],{"class":119},[102,157595,260],{"class":108},[102,157597,157218],{"class":278},[102,157599,157600,157602,157604],{"class":104,"line":157},[102,157601,157365],{"class":119},[102,157603,260],{"class":108},[102,157605,154416],{"class":187},[102,157607,157608],{"class":104,"line":163},[102,157609,157374],{"class":119},[14,157611,157612,157614,157615,157617],{},[83,157613,38688],{}," 表示当前对象。调用方法时不需要手动传入 ",[83,157616,38688],{},"，Python 会自动传。",[43,157619,157621],{"id":157620},"_115-构造方法__init__","11.5 构造方法__init__",[14,157623,157624,157626],{},[83,157625,38694],{}," 在对象创建时自动执行，用于初始化属性。",[93,157628,157630],{"className":38243,"code":157629,"language":38245,"meta":98,"style":98},"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",[83,157631,157632,157640,157649,157661,157673,157684,157688,157696,157734,157738,157742,157764],{"__ignoreMap":98},[102,157633,157634,157636,157638],{"class":104,"line":105},[102,157635,109],{"class":108},[102,157637,16679],{"class":112},[102,157639,12552],{"class":119},[102,157641,157642,157644,157646],{"class":104,"line":116},[102,157643,38666],{"class":108},[102,157645,38669],{"class":187},[102,157647,157648],{"class":119},"(self, name, age, score):\n",[102,157650,157651,157653,157656,157658],{"class":104,"line":123},[102,157652,38710],{"class":187},[102,157654,157655],{"class":119},".name ",[102,157657,260],{"class":108},[102,157659,157660],{"class":119}," name\n",[102,157662,157663,157665,157668,157670],{"class":104,"line":130},[102,157664,38710],{"class":187},[102,157666,157667],{"class":119},".age ",[102,157669,260],{"class":108},[102,157671,157672],{"class":119}," age\n",[102,157674,157675,157677,157680,157682],{"class":104,"line":136},[102,157676,38710],{"class":187},[102,157678,157679],{"class":119},".score ",[102,157681,260],{"class":108},[102,157683,10452],{"class":119},[102,157685,157686],{"class":104,"line":142},[102,157687,652],{"emptyLinePlaceholder":651},[102,157689,157690,157692,157694],{"class":104,"line":148},[102,157691,38666],{"class":108},[102,157693,157237],{"class":112},[102,157695,38672],{"class":119},[102,157697,157698,157700,157702,157704,157706,157708,157710,157712,157714,157716,157718,157720,157723,157725,157728,157730,157732],{"class":104,"line":157},[102,157699,40316],{"class":187},[102,157701,380],{"class":119},[102,157703,9097],{"class":108},[102,157705,157251],{"class":278},[102,157707,157317],{"class":187},[102,157709,88166],{"class":119},[102,157711,9967],{"class":187},[102,157713,157260],{"class":278},[102,157715,157317],{"class":187},[102,157717,88178],{"class":119},[102,157719,9967],{"class":187},[102,157721,157722],{"class":278},"岁，成绩",[102,157724,157317],{"class":187},[102,157726,157727],{"class":119},".score",[102,157729,9967],{"class":187},[102,157731,9288],{"class":278},[102,157733,390],{"class":119},[102,157735,157736],{"class":104,"line":163},[102,157737,652],{"emptyLinePlaceholder":651},[102,157739,157740],{"class":104,"line":175},[102,157741,652],{"emptyLinePlaceholder":651},[102,157743,157744,157746,157748,157751,157754,157756,157758,157760,157762],{"class":104,"line":181},[102,157745,157346],{"class":119},[102,157747,260],{"class":108},[102,157749,157750],{"class":119}," Student(",[102,157752,157753],{"class":278},"\"小明\"",[102,157755,2571],{"class":119},[102,157757,6080],{"class":187},[102,157759,2571],{"class":119},[102,157761,10009],{"class":187},[102,157763,390],{"class":119},[102,157765,157766],{"class":104,"line":202},[102,157767,157374],{"class":119},[14,157769,157770],{},"构造方法的好处：",[87,157772,157773,157776,157779],{},[62,157774,157775],{},"创建对象时必须提供必要数据。",[62,157777,157778],{},"属性初始化集中，不容易漏。",[62,157780,157781],{},"对象状态更完整。",[43,157783,157785,157786],{"id":157784},"_116-str","11.6 ",[18,157787,10185],{},[14,157789,157790,157791,36250],{},"直接打印对象时，默认输出不直观。可以定义 ",[83,157792,157793],{},"__str__",[93,157795,157797],{"className":38243,"code":157796,"language":38245,"meta":98,"style":98},"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",[83,157798,157799,157807,157816,157826,157836,157840,157849,157877,157881,157885,157901],{"__ignoreMap":98},[102,157800,157801,157803,157805],{"class":104,"line":105},[102,157802,109],{"class":108},[102,157804,16679],{"class":112},[102,157806,12552],{"class":119},[102,157808,157809,157811,157813],{"class":104,"line":116},[102,157810,38666],{"class":108},[102,157812,38669],{"class":187},[102,157814,157815],{"class":119},"(self, name, age):\n",[102,157817,157818,157820,157822,157824],{"class":104,"line":123},[102,157819,38710],{"class":187},[102,157821,157655],{"class":119},[102,157823,260],{"class":108},[102,157825,157660],{"class":119},[102,157827,157828,157830,157832,157834],{"class":104,"line":130},[102,157829,38710],{"class":187},[102,157831,157667],{"class":119},[102,157833,260],{"class":108},[102,157835,157672],{"class":119},[102,157837,157838],{"class":104,"line":136},[102,157839,652],{"emptyLinePlaceholder":651},[102,157841,157842,157844,157847],{"class":104,"line":142},[102,157843,38666],{"class":108},[102,157845,157846],{"class":187}," __str__",[102,157848,38672],{"class":119},[102,157850,157851,157853,157856,157859,157861,157863,157865,157868,157870,157872,157874],{"class":104,"line":148},[102,157852,184],{"class":108},[102,157854,157855],{"class":108}," f",[102,157857,157858],{"class":278},"\"Student(name=",[102,157860,157317],{"class":187},[102,157862,88166],{"class":119},[102,157864,9967],{"class":187},[102,157866,157867],{"class":278},", age=",[102,157869,157317],{"class":187},[102,157871,88178],{"class":119},[102,157873,9967],{"class":187},[102,157875,157876],{"class":278},")\"\n",[102,157878,157879],{"class":104,"line":157},[102,157880,652],{"emptyLinePlaceholder":651},[102,157882,157883],{"class":104,"line":163},[102,157884,652],{"emptyLinePlaceholder":651},[102,157886,157887,157889,157891,157893,157895,157897,157899],{"class":104,"line":175},[102,157888,157346],{"class":119},[102,157890,260],{"class":108},[102,157892,157750],{"class":119},[102,157894,157753],{"class":278},[102,157896,2571],{"class":119},[102,157898,6080],{"class":187},[102,157900,390],{"class":119},[102,157902,157903,157905],{"class":104,"line":181},[102,157904,38280],{"class":187},[102,157906,157907],{"class":119},"(student)\n",[43,157909,157911],{"id":157910},"_117-封装","11.7 封装",[14,157913,157914],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,157916,157917],{},"Python 中以双下划线开头的属性通常视为私有属性。",[93,157919,157921],{"className":38243,"code":157920,"language":38245,"meta":98,"style":98},"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",[83,157922,157923,157932,157941,157953,157965,157969,157978,157987,157991,158001,158014,158025,158030,158041,158045,158054,158066,158077,158081,158094,158105,158109,158120,158124,158128,158146,158155,158164],{"__ignoreMap":98},[102,157924,157925,157927,157930],{"class":104,"line":105},[102,157926,109],{"class":108},[102,157928,157929],{"class":112}," Account",[102,157931,12552],{"class":119},[102,157933,157934,157936,157938],{"class":104,"line":116},[102,157935,38666],{"class":108},[102,157937,38669],{"class":187},[102,157939,157940],{"class":119},"(self, owner, balance):\n",[102,157942,157943,157945,157948,157950],{"class":104,"line":123},[102,157944,38710],{"class":187},[102,157946,157947],{"class":119},".owner ",[102,157949,260],{"class":108},[102,157951,157952],{"class":119}," owner\n",[102,157954,157955,157957,157960,157962],{"class":104,"line":130},[102,157956,38710],{"class":187},[102,157958,157959],{"class":119},".__balance ",[102,157961,260],{"class":108},[102,157963,157964],{"class":119}," balance\n",[102,157966,157967],{"class":104,"line":136},[102,157968,652],{"emptyLinePlaceholder":651},[102,157970,157971,157973,157976],{"class":104,"line":142},[102,157972,38666],{"class":108},[102,157974,157975],{"class":112}," get_balance",[102,157977,38672],{"class":119},[102,157979,157980,157982,157984],{"class":104,"line":148},[102,157981,184],{"class":108},[102,157983,46738],{"class":187},[102,157985,157986],{"class":119},".__balance\n",[102,157988,157989],{"class":104,"line":157},[102,157990,652],{"emptyLinePlaceholder":651},[102,157992,157993,157995,157998],{"class":104,"line":163},[102,157994,38666],{"class":108},[102,157996,157997],{"class":112}," deposit",[102,157999,158000],{"class":119},"(self, money):\n",[102,158002,158003,158005,158008,158010,158012],{"class":104,"line":175},[102,158004,1202],{"class":108},[102,158006,158007],{"class":119}," money ",[102,158009,10461],{"class":108},[102,158011,866],{"class":187},[102,158013,12552],{"class":119},[102,158015,158016,158018,158020,158023],{"class":104,"line":181},[102,158017,42515],{"class":187},[102,158019,380],{"class":119},[102,158021,158022],{"class":278},"\"存款金额必须大于0\"",[102,158024,390],{"class":119},[102,158026,158027],{"class":104,"line":202},[102,158028,158029],{"class":108},"            return\n",[102,158031,158032,158034,158036,158038],{"class":104,"line":208},[102,158033,38710],{"class":187},[102,158035,157959],{"class":119},[102,158037,18244],{"class":108},[102,158039,158040],{"class":119}," money\n",[102,158042,158043],{"class":104,"line":214},[102,158044,652],{"emptyLinePlaceholder":651},[102,158046,158047,158049,158052],{"class":104,"line":225},[102,158048,38666],{"class":108},[102,158050,158051],{"class":112}," withdraw",[102,158053,158000],{"class":119},[102,158055,158056,158058,158060,158062,158064],{"class":104,"line":230},[102,158057,1202],{"class":108},[102,158059,158007],{"class":119},[102,158061,10461],{"class":108},[102,158063,866],{"class":187},[102,158065,12552],{"class":119},[102,158067,158068,158070,158072,158075],{"class":104,"line":236},[102,158069,42515],{"class":187},[102,158071,380],{"class":119},[102,158073,158074],{"class":278},"\"取款金额必须大于0\"",[102,158076,390],{"class":119},[102,158078,158079],{"class":104,"line":242},[102,158080,158029],{"class":108},[102,158082,158083,158085,158087,158089,158091],{"class":104,"line":248},[102,158084,1202],{"class":108},[102,158086,158007],{"class":119},[102,158088,1219],{"class":108},[102,158090,46738],{"class":187},[102,158092,158093],{"class":119},".__balance:\n",[102,158095,158096,158098,158100,158103],{"class":104,"line":254},[102,158097,42515],{"class":187},[102,158099,380],{"class":119},[102,158101,158102],{"class":278},"\"余额不足\"",[102,158104,390],{"class":119},[102,158106,158107],{"class":104,"line":269},[102,158108,158029],{"class":108},[102,158110,158111,158113,158115,158118],{"class":104,"line":298},[102,158112,38710],{"class":187},[102,158114,157959],{"class":119},[102,158116,158117],{"class":108},"-=",[102,158119,158040],{"class":119},[102,158121,158122],{"class":104,"line":502},[102,158123,652],{"emptyLinePlaceholder":651},[102,158125,158126],{"class":104,"line":507},[102,158127,652],{"emptyLinePlaceholder":651},[102,158129,158130,158133,158135,158138,158140,158142,158144],{"class":104,"line":512},[102,158131,158132],{"class":119},"account ",[102,158134,260],{"class":108},[102,158136,158137],{"class":119}," Account(",[102,158139,157753],{"class":278},[102,158141,2571],{"class":119},[102,158143,15205],{"class":187},[102,158145,390],{"class":119},[102,158147,158148,158151,158153],{"class":104,"line":521},[102,158149,158150],{"class":119},"account.deposit(",[102,158152,7866],{"class":187},[102,158154,390],{"class":119},[102,158156,158157,158160,158162],{"class":104,"line":526},[102,158158,158159],{"class":119},"account.withdraw(",[102,158161,5569],{"class":187},[102,158163,390],{"class":119},[102,158165,158166,158168],{"class":104,"line":532},[102,158167,38280],{"class":187},[102,158169,158170],{"class":119},"(account.get_balance())\n",[14,158172,158173],{},"封装的意义是避免外部随意修改内部状态。",[43,158175,158177],{"id":158176},"_118-继承","11.8 继承",[14,158179,158180],{},"继承可以让子类复用父类的属性和方法。",[93,158182,158184],{"className":38243,"code":158183,"language":38245,"meta":98,"style":98},"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",[83,158185,158186,158195,158204,158215,158219,158223,158237,158246,158257,158261,158265,158275,158280],{"__ignoreMap":98},[102,158187,158188,158190,158193],{"class":104,"line":105},[102,158189,109],{"class":108},[102,158191,158192],{"class":112}," Animal",[102,158194,12552],{"class":119},[102,158196,158197,158199,158202],{"class":104,"line":116},[102,158198,38666],{"class":108},[102,158200,158201],{"class":112}," eat",[102,158203,38672],{"class":119},[102,158205,158206,158208,158210,158213],{"class":104,"line":123},[102,158207,40316],{"class":187},[102,158209,380],{"class":119},[102,158211,158212],{"class":278},"\"吃东西\"",[102,158214,390],{"class":119},[102,158216,158217],{"class":104,"line":130},[102,158218,652],{"emptyLinePlaceholder":651},[102,158220,158221],{"class":104,"line":136},[102,158222,652],{"emptyLinePlaceholder":651},[102,158224,158225,158227,158230,158232,158235],{"class":104,"line":142},[102,158226,109],{"class":108},[102,158228,158229],{"class":112}," Dog",[102,158231,380],{"class":119},[102,158233,158234],{"class":112},"Animal",[102,158236,38651],{"class":119},[102,158238,158239,158241,158244],{"class":104,"line":148},[102,158240,38666],{"class":108},[102,158242,158243],{"class":112}," bark",[102,158245,38672],{"class":119},[102,158247,158248,158250,158252,158255],{"class":104,"line":157},[102,158249,40316],{"class":187},[102,158251,380],{"class":119},[102,158253,158254],{"class":278},"\"汪汪\"",[102,158256,390],{"class":119},[102,158258,158259],{"class":104,"line":163},[102,158260,652],{"emptyLinePlaceholder":651},[102,158262,158263],{"class":104,"line":175},[102,158264,652],{"emptyLinePlaceholder":651},[102,158266,158267,158270,158272],{"class":104,"line":181},[102,158268,158269],{"class":119},"dog ",[102,158271,260],{"class":108},[102,158273,158274],{"class":119}," Dog()\n",[102,158276,158277],{"class":104,"line":202},[102,158278,158279],{"class":119},"dog.eat()\n",[102,158281,158282],{"class":104,"line":208},[102,158283,158284],{"class":119},"dog.bark()\n",[14,158286,158287],{},"子类可以扩展新方法，也可以重写父类方法。",[43,158289,158291],{"id":158290},"_119-方法重写","11.9 方法重写",[93,158293,158295],{"className":38243,"code":158294,"language":38245,"meta":98,"style":98},"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",[83,158296,158297,158305,158314,158325,158329,158333,158345,158353,158363,158367,158371,158384,158392,158403,158407,158411,158419,158429,158433,158438],{"__ignoreMap":98},[102,158298,158299,158301,158303],{"class":104,"line":105},[102,158300,109],{"class":108},[102,158302,158192],{"class":112},[102,158304,12552],{"class":119},[102,158306,158307,158309,158312],{"class":104,"line":116},[102,158308,38666],{"class":108},[102,158310,158311],{"class":112}," speak",[102,158313,38672],{"class":119},[102,158315,158316,158318,158320,158323],{"class":104,"line":123},[102,158317,40316],{"class":187},[102,158319,380],{"class":119},[102,158321,158322],{"class":278},"\"动物叫\"",[102,158324,390],{"class":119},[102,158326,158327],{"class":104,"line":130},[102,158328,652],{"emptyLinePlaceholder":651},[102,158330,158331],{"class":104,"line":136},[102,158332,652],{"emptyLinePlaceholder":651},[102,158334,158335,158337,158339,158341,158343],{"class":104,"line":142},[102,158336,109],{"class":108},[102,158338,158229],{"class":112},[102,158340,380],{"class":119},[102,158342,158234],{"class":112},[102,158344,38651],{"class":119},[102,158346,158347,158349,158351],{"class":104,"line":148},[102,158348,38666],{"class":108},[102,158350,158311],{"class":112},[102,158352,38672],{"class":119},[102,158354,158355,158357,158359,158361],{"class":104,"line":157},[102,158356,40316],{"class":187},[102,158358,380],{"class":119},[102,158360,158254],{"class":278},[102,158362,390],{"class":119},[102,158364,158365],{"class":104,"line":163},[102,158366,652],{"emptyLinePlaceholder":651},[102,158368,158369],{"class":104,"line":175},[102,158370,652],{"emptyLinePlaceholder":651},[102,158372,158373,158375,158378,158380,158382],{"class":104,"line":181},[102,158374,109],{"class":108},[102,158376,158377],{"class":112}," Cat",[102,158379,380],{"class":119},[102,158381,158234],{"class":112},[102,158383,38651],{"class":119},[102,158385,158386,158388,158390],{"class":104,"line":202},[102,158387,38666],{"class":108},[102,158389,158311],{"class":112},[102,158391,38672],{"class":119},[102,158393,158394,158396,158398,158401],{"class":104,"line":208},[102,158395,40316],{"class":187},[102,158397,380],{"class":119},[102,158399,158400],{"class":278},"\"喵喵\"",[102,158402,390],{"class":119},[102,158404,158405],{"class":104,"line":214},[102,158406,652],{"emptyLinePlaceholder":651},[102,158408,158409],{"class":104,"line":225},[102,158410,652],{"emptyLinePlaceholder":651},[102,158412,158413,158415,158417],{"class":104,"line":230},[102,158414,158269],{"class":119},[102,158416,260],{"class":108},[102,158418,158274],{"class":119},[102,158420,158421,158424,158426],{"class":104,"line":236},[102,158422,158423],{"class":119},"cat ",[102,158425,260],{"class":108},[102,158427,158428],{"class":119}," Cat()\n",[102,158430,158431],{"class":104,"line":242},[102,158432,652],{"emptyLinePlaceholder":651},[102,158434,158435],{"class":104,"line":248},[102,158436,158437],{"class":119},"dog.speak()\n",[102,158439,158440],{"class":104,"line":254},[102,158441,158442],{"class":119},"cat.speak()\n",[43,158444,158446],{"id":158445},"_1110-super","11.10 super",[14,158448,158449,158450,158453],{},"子类可以通过 ",[83,158451,158452],{},"super()"," 调用父类方法。",[93,158455,158457],{"className":38243,"code":158456,"language":38245,"meta":98,"style":98},"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",[83,158458,158459,158467,158476,158486,158490,158494,158506,158515,158526,158536,158540,158544,158560],{"__ignoreMap":98},[102,158460,158461,158463,158465],{"class":104,"line":105},[102,158462,109],{"class":108},[102,158464,1074],{"class":112},[102,158466,12552],{"class":119},[102,158468,158469,158471,158473],{"class":104,"line":116},[102,158470,38666],{"class":108},[102,158472,38669],{"class":187},[102,158474,158475],{"class":119},"(self, name):\n",[102,158477,158478,158480,158482,158484],{"class":104,"line":123},[102,158479,38710],{"class":187},[102,158481,157655],{"class":119},[102,158483,260],{"class":108},[102,158485,157660],{"class":119},[102,158487,158488],{"class":104,"line":130},[102,158489,652],{"emptyLinePlaceholder":651},[102,158491,158492],{"class":104,"line":136},[102,158493,652],{"emptyLinePlaceholder":651},[102,158495,158496,158498,158500,158502,158504],{"class":104,"line":142},[102,158497,109],{"class":108},[102,158499,16679],{"class":112},[102,158501,380],{"class":119},[102,158503,4621],{"class":112},[102,158505,38651],{"class":119},[102,158507,158508,158510,158512],{"class":104,"line":148},[102,158509,38666],{"class":108},[102,158511,38669],{"class":187},[102,158513,158514],{"class":119},"(self, name, score):\n",[102,158516,158517,158519,158521,158523],{"class":104,"line":157},[102,158518,38682],{"class":187},[102,158520,2825],{"class":119},[102,158522,38694],{"class":187},[102,158524,158525],{"class":119},"(name)\n",[102,158527,158528,158530,158532,158534],{"class":104,"line":163},[102,158529,38710],{"class":187},[102,158531,157679],{"class":119},[102,158533,260],{"class":108},[102,158535,10452],{"class":119},[102,158537,158538],{"class":104,"line":175},[102,158539,652],{"emptyLinePlaceholder":651},[102,158541,158542],{"class":104,"line":181},[102,158543,652],{"emptyLinePlaceholder":651},[102,158545,158546,158548,158550,158552,158554,158556,158558],{"class":104,"line":202},[102,158547,157346],{"class":119},[102,158549,260],{"class":108},[102,158551,157750],{"class":119},[102,158553,157753],{"class":278},[102,158555,2571],{"class":119},[102,158557,10009],{"class":187},[102,158559,390],{"class":119},[102,158561,158562,158564],{"class":104,"line":208},[102,158563,38280],{"class":187},[102,158565,158566],{"class":119},"(student.name, student.score)\n",[43,158568,158570],{"id":158569},"_1111-多态","11.11 多态",[14,158572,158573],{},"多态指不同对象响应同一个方法，表现出不同结果。",[93,158575,158577],{"className":38243,"code":158576,"language":38245,"meta":98,"style":98},"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",[83,158578,158579,158587,158595,158605,158609,158613,158621,158629,158639,158643,158647,158657,158662,158666,158670,158675],{"__ignoreMap":98},[102,158580,158581,158583,158585],{"class":104,"line":105},[102,158582,109],{"class":108},[102,158584,158229],{"class":112},[102,158586,12552],{"class":119},[102,158588,158589,158591,158593],{"class":104,"line":116},[102,158590,38666],{"class":108},[102,158592,158311],{"class":112},[102,158594,38672],{"class":119},[102,158596,158597,158599,158601,158603],{"class":104,"line":123},[102,158598,40316],{"class":187},[102,158600,380],{"class":119},[102,158602,158254],{"class":278},[102,158604,390],{"class":119},[102,158606,158607],{"class":104,"line":130},[102,158608,652],{"emptyLinePlaceholder":651},[102,158610,158611],{"class":104,"line":136},[102,158612,652],{"emptyLinePlaceholder":651},[102,158614,158615,158617,158619],{"class":104,"line":142},[102,158616,109],{"class":108},[102,158618,158377],{"class":112},[102,158620,12552],{"class":119},[102,158622,158623,158625,158627],{"class":104,"line":148},[102,158624,38666],{"class":108},[102,158626,158311],{"class":112},[102,158628,38672],{"class":119},[102,158630,158631,158633,158635,158637],{"class":104,"line":157},[102,158632,40316],{"class":187},[102,158634,380],{"class":119},[102,158636,158400],{"class":278},[102,158638,390],{"class":119},[102,158640,158641],{"class":104,"line":163},[102,158642,652],{"emptyLinePlaceholder":651},[102,158644,158645],{"class":104,"line":175},[102,158646,652],{"emptyLinePlaceholder":651},[102,158648,158649,158651,158654],{"class":104,"line":181},[102,158650,39812],{"class":108},[102,158652,158653],{"class":112}," make_sound",[102,158655,158656],{"class":119},"(animal):\n",[102,158658,158659],{"class":104,"line":202},[102,158660,158661],{"class":119},"    animal.speak()\n",[102,158663,158664],{"class":104,"line":208},[102,158665,652],{"emptyLinePlaceholder":651},[102,158667,158668],{"class":104,"line":214},[102,158669,652],{"emptyLinePlaceholder":651},[102,158671,158672],{"class":104,"line":225},[102,158673,158674],{"class":119},"make_sound(Dog())\n",[102,158676,158677],{"class":104,"line":230},[102,158678,158679],{"class":119},"make_sound(Cat())\n",[14,158681,158682],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[43,158684,158686],{"id":158685},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,158688,158689],{},"实例属性属于对象：",[93,158691,158693],{"className":38243,"code":158692,"language":38245,"meta":98,"style":98},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[83,158694,158695,158703,158711],{"__ignoreMap":98},[102,158696,158697,158699,158701],{"class":104,"line":105},[102,158698,109],{"class":108},[102,158700,16679],{"class":112},[102,158702,12552],{"class":119},[102,158704,158705,158707,158709],{"class":104,"line":116},[102,158706,38666],{"class":108},[102,158708,38669],{"class":187},[102,158710,158475],{"class":119},[102,158712,158713,158715,158717,158719],{"class":104,"line":123},[102,158714,38710],{"class":187},[102,158716,157655],{"class":119},[102,158718,260],{"class":108},[102,158720,157660],{"class":119},[14,158722,158723],{},"类属性属于类，所有对象共享：",[93,158725,158727],{"className":38243,"code":158726,"language":38245,"meta":98,"style":98},"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",[83,158728,158729,158737,158747,158751,158759,158769,158773,158777,158790,158804,158808,158815,158822],{"__ignoreMap":98},[102,158730,158731,158733,158735],{"class":104,"line":105},[102,158732,109],{"class":108},[102,158734,16679],{"class":112},[102,158736,12552],{"class":119},[102,158738,158739,158742,158744],{"class":104,"line":116},[102,158740,158741],{"class":119},"    school ",[102,158743,260],{"class":108},[102,158745,158746],{"class":278}," \"黑马学校\"\n",[102,158748,158749],{"class":104,"line":123},[102,158750,652],{"emptyLinePlaceholder":651},[102,158752,158753,158755,158757],{"class":104,"line":130},[102,158754,38666],{"class":108},[102,158756,38669],{"class":187},[102,158758,158475],{"class":119},[102,158760,158761,158763,158765,158767],{"class":104,"line":136},[102,158762,38710],{"class":187},[102,158764,157655],{"class":119},[102,158766,260],{"class":108},[102,158768,157660],{"class":119},[102,158770,158771],{"class":104,"line":142},[102,158772,652],{"emptyLinePlaceholder":651},[102,158774,158775],{"class":104,"line":148},[102,158776,652],{"emptyLinePlaceholder":651},[102,158778,158779,158782,158784,158786,158788],{"class":104,"line":157},[102,158780,158781],{"class":119},"s1 ",[102,158783,260],{"class":108},[102,158785,157750],{"class":119},[102,158787,157753],{"class":278},[102,158789,390],{"class":119},[102,158791,158792,158795,158797,158799,158802],{"class":104,"line":163},[102,158793,158794],{"class":119},"s2 ",[102,158796,260],{"class":108},[102,158798,157750],{"class":119},[102,158800,158801],{"class":278},"\"小红\"",[102,158803,390],{"class":119},[102,158805,158806],{"class":104,"line":175},[102,158807,652],{"emptyLinePlaceholder":651},[102,158809,158810,158812],{"class":104,"line":181},[102,158811,38280],{"class":187},[102,158813,158814],{"class":119},"(s1.school)\n",[102,158816,158817,158819],{"class":104,"line":202},[102,158818,38280],{"class":187},[102,158820,158821],{"class":119},"(s2.school)\n",[102,158823,158824,158826],{"class":104,"line":208},[102,158825,38280],{"class":187},[102,158827,158828],{"class":119},"(Student.school)\n",[14,158830,158831],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[43,158833,158835],{"id":158834},"_1113-类方法和静态方法","11.13 类方法和静态方法",[48,158837,158839],{"id":158838},"_11131-类方法","11.13.1 类方法",[14,158841,158842,158843,158846,158847,36250],{},"类方法使用 ",[83,158844,158845],{},"@classmethod","，第一个参数通常是 ",[83,158848,158849],{},"cls",[93,158851,158853],{"className":38243,"code":158852,"language":38245,"meta":98,"style":98},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[83,158854,158855,158863,158871,158875,158883,158893,158903,158907,158911],{"__ignoreMap":98},[102,158856,158857,158859,158861],{"class":104,"line":105},[102,158858,109],{"class":108},[102,158860,16679],{"class":112},[102,158862,12552],{"class":119},[102,158864,158865,158867,158869],{"class":104,"line":116},[102,158866,158741],{"class":119},[102,158868,260],{"class":108},[102,158870,158746],{"class":278},[102,158872,158873],{"class":104,"line":123},[102,158874,652],{"emptyLinePlaceholder":651},[102,158876,158877,158880],{"class":104,"line":130},[102,158878,158879],{"class":112},"    @",[102,158881,158882],{"class":187},"classmethod\n",[102,158884,158885,158887,158890],{"class":104,"line":136},[102,158886,38666],{"class":108},[102,158888,158889],{"class":112}," get_school",[102,158891,158892],{"class":119},"(cls):\n",[102,158894,158895,158897,158900],{"class":104,"line":142},[102,158896,184],{"class":108},[102,158898,158899],{"class":187}," cls",[102,158901,158902],{"class":119},".school\n",[102,158904,158905],{"class":104,"line":148},[102,158906,652],{"emptyLinePlaceholder":651},[102,158908,158909],{"class":104,"line":157},[102,158910,652],{"emptyLinePlaceholder":651},[102,158912,158913,158915],{"class":104,"line":163},[102,158914,38280],{"class":187},[102,158916,158917],{"class":119},"(Student.get_school())\n",[48,158919,158921],{"id":158920},"_11132-静态方法","11.13.2 静态方法",[14,158923,158924,158925,158928],{},"静态方法使用 ",[83,158926,158927],{},"@staticmethod","，不需要访问实例和类。",[93,158930,158932],{"className":38243,"code":158931,"language":38245,"meta":98,"style":98},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[83,158933,158934,158943,158950,158959,158970,158974,158978],{"__ignoreMap":98},[102,158935,158936,158938,158941],{"class":104,"line":105},[102,158937,109],{"class":108},[102,158939,158940],{"class":112}," MathUtils",[102,158942,12552],{"class":119},[102,158944,158945,158947],{"class":104,"line":116},[102,158946,158879],{"class":112},[102,158948,158949],{"class":187},"staticmethod\n",[102,158951,158952,158954,158956],{"class":104,"line":123},[102,158953,38666],{"class":108},[102,158955,14015],{"class":112},[102,158957,158958],{"class":119},"(a, b):\n",[102,158960,158961,158963,158965,158967],{"class":104,"line":130},[102,158962,184],{"class":108},[102,158964,19610],{"class":119},[102,158966,1702],{"class":108},[102,158968,158969],{"class":119}," b\n",[102,158971,158972],{"class":104,"line":136},[102,158973,652],{"emptyLinePlaceholder":651},[102,158975,158976],{"class":104,"line":142},[102,158977,652],{"emptyLinePlaceholder":651},[102,158979,158980,158982,158985,158987,158989,158991],{"class":104,"line":148},[102,158981,38280],{"class":187},[102,158983,158984],{"class":119},"(MathUtils.add(",[102,158986,7039],{"class":187},[102,158988,2571],{"class":119},[102,158990,7044],{"class":187},[102,158992,38362],{"class":119},[14,158994,158995],{},"静态方法本质上是放在类命名空间里的普通函数。",[43,158997,158999],{"id":158998},"_1114-dataclass","11.14 dataclass",[14,159001,159002,159005],{},[83,159003,159004],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[93,159007,159009],{"className":38243,"code":159008,"language":38245,"meta":98,"style":98},"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",[83,159010,159011,159023,159027,159031,159036,159044,159052,159060,159068,159072,159076,159096],{"__ignoreMap":98},[102,159012,159013,159015,159018,159020],{"class":104,"line":105},[102,159014,38602],{"class":108},[102,159016,159017],{"class":119}," dataclasses ",[102,159019,38257],{"class":108},[102,159021,159022],{"class":119}," dataclass\n",[102,159024,159025],{"class":104,"line":116},[102,159026,652],{"emptyLinePlaceholder":651},[102,159028,159029],{"class":104,"line":123},[102,159030,652],{"emptyLinePlaceholder":651},[102,159032,159033],{"class":104,"line":130},[102,159034,159035],{"class":112},"@dataclass\n",[102,159037,159038,159040,159042],{"class":104,"line":136},[102,159039,109],{"class":108},[102,159041,16679],{"class":112},[102,159043,12552],{"class":119},[102,159045,159046,159049],{"class":104,"line":142},[102,159047,159048],{"class":119},"    name: ",[102,159050,159051],{"class":187},"str\n",[102,159053,159054,159057],{"class":104,"line":148},[102,159055,159056],{"class":119},"    age: ",[102,159058,159059],{"class":187},"int\n",[102,159061,159062,159065],{"class":104,"line":157},[102,159063,159064],{"class":119},"    score: ",[102,159066,159067],{"class":187},"float\n",[102,159069,159070],{"class":104,"line":163},[102,159071,652],{"emptyLinePlaceholder":651},[102,159073,159074],{"class":104,"line":175},[102,159075,652],{"emptyLinePlaceholder":651},[102,159077,159078,159080,159082,159084,159086,159088,159090,159092,159094],{"class":104,"line":181},[102,159079,157346],{"class":119},[102,159081,260],{"class":108},[102,159083,157750],{"class":119},[102,159085,157753],{"class":278},[102,159087,2571],{"class":119},[102,159089,6080],{"class":187},[102,159091,2571],{"class":119},[102,159093,10009],{"class":187},[102,159095,390],{"class":119},[102,159097,159098,159100],{"class":104,"line":202},[102,159099,38280],{"class":187},[102,159101,157907],{"class":119},[14,159103,159104,159105,9250,159107,159110],{},"它会自动生成 ",[83,159106,38694],{},[83,159108,159109],{},"__repr__"," 等方法。适合数据模型类。",[43,159112,159114],{"id":159113},"_1115-小案例学生类","11.15 小案例：学生类",[93,159116,159118],{"className":38243,"code":159117,"language":38245,"meta":98,"style":98},"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",[83,159119,159120,159128,159137,159149,159159,159169,159179,159183,159192,159205,159209,159218,159224,159236,159248,159260,159272,159276,159280,159286,159296,159305,159315,159323,159331,159340,159344,159348,159356,159392,159396,159400,159425,159432],{"__ignoreMap":98},[102,159121,159122,159124,159126],{"class":104,"line":105},[102,159123,109],{"class":108},[102,159125,16679],{"class":112},[102,159127,12552],{"class":119},[102,159129,159130,159132,159134],{"class":104,"line":116},[102,159131,38666],{"class":108},[102,159133,38669],{"class":187},[102,159135,159136],{"class":119},"(self, student_id, name, age, score):\n",[102,159138,159139,159141,159144,159146],{"class":104,"line":123},[102,159140,38710],{"class":187},[102,159142,159143],{"class":119},".student_id ",[102,159145,260],{"class":108},[102,159147,159148],{"class":119}," student_id\n",[102,159150,159151,159153,159155,159157],{"class":104,"line":130},[102,159152,38710],{"class":187},[102,159154,157655],{"class":119},[102,159156,260],{"class":108},[102,159158,157660],{"class":119},[102,159160,159161,159163,159165,159167],{"class":104,"line":136},[102,159162,38710],{"class":187},[102,159164,157667],{"class":119},[102,159166,260],{"class":108},[102,159168,157672],{"class":119},[102,159170,159171,159173,159175,159177],{"class":104,"line":142},[102,159172,38710],{"class":187},[102,159174,157679],{"class":119},[102,159176,260],{"class":108},[102,159178,10452],{"class":119},[102,159180,159181],{"class":104,"line":148},[102,159182,652],{"emptyLinePlaceholder":651},[102,159184,159185,159187,159190],{"class":104,"line":157},[102,159186,38666],{"class":108},[102,159188,159189],{"class":112}," is_passed",[102,159191,38672],{"class":119},[102,159193,159194,159196,159198,159200,159202],{"class":104,"line":163},[102,159195,184],{"class":108},[102,159197,46738],{"class":187},[102,159199,157679],{"class":119},[102,159201,10571],{"class":108},[102,159203,159204],{"class":187}," 60\n",[102,159206,159207],{"class":104,"line":175},[102,159208,652],{"emptyLinePlaceholder":651},[102,159210,159211,159213,159216],{"class":104,"line":181},[102,159212,38666],{"class":108},[102,159214,159215],{"class":112}," to_dict",[102,159217,38672],{"class":119},[102,159219,159220,159222],{"class":104,"line":202},[102,159221,184],{"class":108},[102,159223,1077],{"class":119},[102,159225,159226,159229,159231,159233],{"class":104,"line":208},[102,159227,159228],{"class":278},"            \"student_id\"",[102,159230,59302],{"class":119},[102,159232,38688],{"class":187},[102,159234,159235],{"class":119},".student_id,\n",[102,159237,159238,159241,159243,159245],{"class":104,"line":214},[102,159239,159240],{"class":278},"            \"name\"",[102,159242,59302],{"class":119},[102,159244,38688],{"class":187},[102,159246,159247],{"class":119},".name,\n",[102,159249,159250,159253,159255,159257],{"class":104,"line":225},[102,159251,159252],{"class":278},"            \"age\"",[102,159254,59302],{"class":119},[102,159256,38688],{"class":187},[102,159258,159259],{"class":119},".age,\n",[102,159261,159262,159265,159267,159269],{"class":104,"line":230},[102,159263,159264],{"class":278},"            \"score\"",[102,159266,59302],{"class":119},[102,159268,38688],{"class":187},[102,159270,159271],{"class":119},".score,\n",[102,159273,159274],{"class":104,"line":236},[102,159275,1252],{"class":119},[102,159277,159278],{"class":104,"line":242},[102,159279,652],{"emptyLinePlaceholder":651},[102,159281,159282,159284],{"class":104,"line":248},[102,159283,158879],{"class":112},[102,159285,158882],{"class":187},[102,159287,159288,159290,159293],{"class":104,"line":254},[102,159289,38666],{"class":108},[102,159291,159292],{"class":112}," from_dict",[102,159294,159295],{"class":119},"(cls, data):\n",[102,159297,159298,159300,159302],{"class":104,"line":269},[102,159299,184],{"class":108},[102,159301,158899],{"class":187},[102,159303,159304],{"class":119},"(\n",[102,159306,159307,159310,159313],{"class":104,"line":298},[102,159308,159309],{"class":119},"            data[",[102,159311,159312],{"class":278},"\"student_id\"",[102,159314,95701],{"class":119},[102,159316,159317,159319,159321],{"class":104,"line":502},[102,159318,159309],{"class":119},[102,159320,70544],{"class":278},[102,159322,95701],{"class":119},[102,159324,159325,159327,159329],{"class":104,"line":507},[102,159326,159309],{"class":119},[102,159328,76989],{"class":278},[102,159330,95701],{"class":119},[102,159332,159333,159335,159338],{"class":104,"line":512},[102,159334,159309],{"class":119},[102,159336,159337],{"class":278},"\"score\"",[102,159339,95701],{"class":119},[102,159341,159342],{"class":104,"line":521},[102,159343,45991],{"class":119},[102,159345,159346],{"class":104,"line":526},[102,159347,652],{"emptyLinePlaceholder":651},[102,159349,159350,159352,159354],{"class":104,"line":532},[102,159351,38666],{"class":108},[102,159353,157846],{"class":187},[102,159355,38672],{"class":119},[102,159357,159358,159360,159362,159364,159366,159369,159371,159374,159376,159378,159380,159382,159384,159386,159388,159390],{"class":104,"line":538},[102,159359,184],{"class":108},[102,159361,157855],{"class":108},[102,159363,9288],{"class":278},[102,159365,157317],{"class":187},[102,159367,159368],{"class":119},".student_id",[102,159370,9967],{"class":187},[102,159372,159373],{"class":187}," {self",[102,159375,88166],{"class":119},[102,159377,9967],{"class":187},[102,159379,159373],{"class":187},[102,159381,88178],{"class":119},[102,159383,9967],{"class":187},[102,159385,159373],{"class":187},[102,159387,157727],{"class":119},[102,159389,9967],{"class":187},[102,159391,32998],{"class":278},[102,159393,159394],{"class":104,"line":555},[102,159395,652],{"emptyLinePlaceholder":651},[102,159397,159398],{"class":104,"line":570},[102,159399,652],{"emptyLinePlaceholder":651},[102,159401,159402,159404,159406,159408,159411,159413,159415,159417,159419,159421,159423],{"class":104,"line":581},[102,159403,157346],{"class":119},[102,159405,260],{"class":108},[102,159407,157750],{"class":119},[102,159409,159410],{"class":278},"\"001\"",[102,159412,2571],{"class":119},[102,159414,157753],{"class":278},[102,159416,2571],{"class":119},[102,159418,6080],{"class":187},[102,159420,2571],{"class":119},[102,159422,10009],{"class":187},[102,159424,390],{"class":119},[102,159426,159427,159429],{"class":104,"line":819},[102,159428,38280],{"class":187},[102,159430,159431],{"class":119},"(student.is_passed())\n",[102,159433,159434,159436],{"class":104,"line":828},[102,159435,38280],{"class":187},[102,159437,159438],{"class":119},"(student.to_dict())\n",[14,159440,159441,108883,159444,159447],{},[83,159442,159443],{},"to_dict()",[83,159445,159446],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[43,159449,159451],{"id":159450},"_1116-易错点","11.16 易错点",[87,159453,159454,159460,159466,159471,159474,159477],{},[62,159455,159456,159457,36250],{},"类名推荐使用大驼峰，如 ",[83,159458,159459],{},"StudentManager",[62,159461,159462,159463,159465],{},"方法第一个参数必须写 ",[83,159464,38688],{},"，调用时不用传。",[62,159467,159468,159470],{},[83,159469,38694],{}," 不是普通方法，它在创建对象时自动执行。",[62,159472,159473],{},"私有属性不是绝对安全，只是约定和名称改写。",[62,159475,159476],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[62,159478,159479],{},"类中方法太多时，说明职责可能过重。",[43,159481,159483],{"id":159482},"_1117-本章练习","11.17 本章练习",[87,159485,159486,159492,159498,159503,159516],{},[62,159487,159488,159489,159491],{},"定义 ",[83,159490,157433],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[62,159493,159488,159494,159497],{},[83,159495,159496],{},"Account"," 类，实现存款、取款、查询余额。",[62,159499,159488,159500,159502],{},[83,159501,2788],{}," 类，计算圆的周长和面积。",[62,159504,159488,159505,9250,159508,159511,159512,159515],{},[83,159506,159507],{},"Dog",[83,159509,159510],{},"Cat"," 类，并用同一个函数调用它们的 ",[83,159513,159514],{},"speak()"," 方法。",[62,159517,112231,159518,159520,159521,36250],{},[83,159519,159004],{}," 定义一个商品类 ",[83,159522,159523],{},"Product",[8955,159525,159526],{},"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":98,"searchDepth":116,"depth":116,"links":159528},[159529,159530,159531,159532,159533,159534,159536,159537,159538,159539,159540,159541,159542,159546,159547,159548,159549],{"id":157197,"depth":116,"text":157198},{"id":157380,"depth":116,"text":157381},{"id":157444,"depth":116,"text":157445},{"id":157521,"depth":116,"text":157522},{"id":157620,"depth":116,"text":157621},{"id":157784,"depth":116,"text":159535},"11.6 str",{"id":157910,"depth":116,"text":157911},{"id":158176,"depth":116,"text":158177},{"id":158290,"depth":116,"text":158291},{"id":158445,"depth":116,"text":158446},{"id":158569,"depth":116,"text":158570},{"id":158685,"depth":116,"text":158686},{"id":158834,"depth":116,"text":158835,"children":159543},[159544,159545],{"id":158838,"depth":123,"text":158839},{"id":158920,"depth":123,"text":158921},{"id":158998,"depth":116,"text":158999},{"id":159113,"depth":116,"text":159114},{"id":159450,"depth":116,"text":159451},{"id":159482,"depth":116,"text":159483},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":157189,"description":31240},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":159556,"title":159557,"body":159558,"description":31240,"extension":8978,"meta":162871,"navigation":651,"path":162872,"seo":162873,"stem":162874,"__hash__":162875},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":159559,"toc":162847},[159560,159563,159567,159570,159573,159602,159605,159613,159617,159621,159624,159647,159650,159656,159660,161106,161109,161130,161134,161137,161149,161152,161336,161339,161465,161468,161472,161476,161612,161616,161702,161706,161788,161792,161829,161833,162022,162026,162029,162259,162263,162266,162447,162450,162454,162457,162463,162466,162492,162496,162499,162513,162516,162541,162544,162558,162561,162578,162581,162598,162601,162618,162622,162648,162652,162675,162679,162682,162684,162690,162692,162713,162716,162722,162728,162732,162735,162811,162814,162818,162844],[10,159561,159557],{"id":159562},"_12-综合案例与复习路线",[43,159564,159566],{"id":159565},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,159568,159569],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,159571,159572],{},"一个合格的入门综合项目最好覆盖：",[87,159574,159575,159578,159581,159584,159587,159590,159593,159596,159599],{},[62,159576,159577],{},"输入输出。",[62,159579,159580],{},"判断和循环。",[62,159582,159583],{},"函数拆分。",[62,159585,159586],{},"列表、字典等容器。",[62,159588,159589],{},"文件持久化。",[62,159591,159592],{},"异常处理。",[62,159594,159595],{},"模块拆分。",[62,159597,159598],{},"可选：面向对象。",[62,159600,159601],{},"可选：数据可视化。",[14,159603,159604],{},"本章整理两个方向：",[87,159606,159607,159610],{},[62,159608,159609],{},"学生管理系统。",[62,159611,159612],{},"销售数据统计和可视化。",[43,159614,159616],{"id":159615},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[48,159618,159620],{"id":159619},"_1221-需求","12.2.1 需求",[14,159622,159623],{},"实现一个命令行学生管理系统：",[87,159625,159626,159629,159632,159635,159638,159641,159644],{},[62,159627,159628],{},"添加学生。",[62,159630,159631],{},"删除学生。",[62,159633,159634],{},"修改学生。",[62,159636,159637],{},"查询学生。",[62,159639,159640],{},"显示所有学生。",[62,159642,159643],{},"保存到 JSON 文件。",[62,159645,159646],{},"程序启动时自动读取 JSON 文件。",[14,159648,159649],{},"学生字段：",[93,159651,159654],{"className":159652,"code":159653,"language":6778,"meta":98},[6776],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[83,159655,159653],{"__ignoreMap":98},[43,159657,159659],{"id":159658},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[93,159661,159663],{"className":38243,"code":159662,"language":38245,"meta":98,"style":98},"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",[83,159664,159665,159671,159681,159685,159699,159703,159707,159716,159728,159734,159738,159744,159775,159785,159792,159803,159809,159813,159817,159827,159858,159884,159888,159892,159901,159912,159923,159934,159945,159956,159967,159978,159982,159986,159996,160008,160024,160031,160038,160042,160046,160056,160064,160071,160084,160094,160105,160109,160113,160122,160130,160136,160148,160156,160167,160171,160175,160184,160200,160204,160211,160222,160227,160231,160247,160262,160277,160281,160286,160294,160302,160310,160318,160322,160327,160338,160342,160346,160355,160370,160380,160384,160396,160407,160411,160415,160420,160424,160435,160439,160443,160452,160467,160475,160479,160491,160501,160505,160509,160524,160537,160550,160554,160567,160579,160591,160595,160599,160610,160614,160618,160627,160642,160650,160654,160666,160676,160680,160684,160689,160693,160697,160707,160713,160735,160754,160773,160792,160797,160801,160805,160814,160822,160833,160837,160841,160867,160877,160882,160886,160890,160898,160908,160912,160920,160925,160941,160945,160959,160964,160978,160983,160996,161001,161014,161019,161032,161037,161050,161061,161065,161071,161082,161086,161090,161102],{"__ignoreMap":98},[102,159666,159667,159669],{"class":104,"line":105},[102,159668,38257],{"class":108},[102,159670,154956],{"class":119},[102,159672,159673,159675,159677,159679],{"class":104,"line":116},[102,159674,38602],{"class":108},[102,159676,116176],{"class":119},[102,159678,38257],{"class":108},[102,159680,116181],{"class":119},[102,159682,159683],{"class":104,"line":123},[102,159684,652],{"emptyLinePlaceholder":651},[102,159686,159687,159690,159692,159694,159697],{"class":104,"line":130},[102,159688,159689],{"class":187},"DATA_FILE",[102,159691,22296],{"class":108},[102,159693,116410],{"class":119},[102,159695,159696],{"class":278},"\"students.json\"",[102,159698,390],{"class":119},[102,159700,159701],{"class":104,"line":136},[102,159702,652],{"emptyLinePlaceholder":651},[102,159704,159705],{"class":104,"line":142},[102,159706,652],{"emptyLinePlaceholder":651},[102,159708,159709,159711,159714],{"class":104,"line":148},[102,159710,39812],{"class":108},[102,159712,159713],{"class":112}," load_students",[102,159715,39818],{"class":119},[102,159717,159718,159720,159722,159725],{"class":104,"line":157},[102,159719,2343],{"class":108},[102,159721,46795],{"class":108},[102,159723,159724],{"class":187}," DATA_FILE",[102,159726,159727],{"class":119},".exists():\n",[102,159729,159730,159732],{"class":104,"line":163},[102,159731,184],{"class":108},[102,159733,59703],{"class":119},[102,159735,159736],{"class":104,"line":175},[102,159737,652],{"emptyLinePlaceholder":651},[102,159739,159740,159742],{"class":104,"line":181},[102,159741,133649],{"class":108},[102,159743,12552],{"class":119},[102,159745,159746,159749,159751,159753,159755,159757,159759,159761,159763,159765,159767,159769,159771,159773],{"class":104,"line":202},[102,159747,159748],{"class":108},"        with",[102,159750,154656],{"class":187},[102,159752,380],{"class":119},[102,159754,159689],{"class":187},[102,159756,2571],{"class":119},[102,159758,154666],{"class":278},[102,159760,2571],{"class":119},[102,159762,154671],{"class":386},[102,159764,260],{"class":108},[102,159766,154676],{"class":278},[102,159768,22445],{"class":119},[102,159770,39248],{"class":108},[102,159772,156018],{"class":386},[102,159774,12552],{"class":119},[102,159776,159777,159779,159781,159783],{"class":104,"line":208},[102,159778,1245],{"class":108},[102,159780,156029],{"class":119},[102,159782,53219],{"class":386},[102,159784,390],{"class":119},[102,159786,159787,159789],{"class":104,"line":214},[102,159788,133677],{"class":108},[102,159790,159791],{"class":119}," json.JSONDecodeError:\n",[102,159793,159794,159796,159798,159801],{"class":104,"line":225},[102,159795,40316],{"class":187},[102,159797,380],{"class":119},[102,159799,159800],{"class":278},"\"数据文件格式错误，已使用空数据启动\"",[102,159802,390],{"class":119},[102,159804,159805,159807],{"class":104,"line":230},[102,159806,184],{"class":108},[102,159808,59703],{"class":119},[102,159810,159811],{"class":104,"line":236},[102,159812,652],{"emptyLinePlaceholder":651},[102,159814,159815],{"class":104,"line":242},[102,159816,652],{"emptyLinePlaceholder":651},[102,159818,159819,159821,159824],{"class":104,"line":248},[102,159820,39812],{"class":108},[102,159822,159823],{"class":112}," save_students",[102,159825,159826],{"class":119},"(students):\n",[102,159828,159829,159831,159833,159835,159837,159839,159842,159844,159846,159848,159850,159852,159854,159856],{"class":104,"line":254},[102,159830,42043],{"class":108},[102,159832,154656],{"class":187},[102,159834,380],{"class":119},[102,159836,159689],{"class":187},[102,159838,2571],{"class":119},[102,159840,159841],{"class":278},"\"w\"",[102,159843,2571],{"class":119},[102,159845,154671],{"class":386},[102,159847,260],{"class":108},[102,159849,154676],{"class":278},[102,159851,22445],{"class":119},[102,159853,39248],{"class":108},[102,159855,156018],{"class":386},[102,159857,12552],{"class":119},[102,159859,159860,159863,159865,159867,159869,159871,159873,159875,159878,159880,159882],{"class":104,"line":269},[102,159861,159862],{"class":119},"        json.dump(students, ",[102,159864,53219],{"class":386},[102,159866,2571],{"class":119},[102,159868,155002],{"class":386},[102,159870,260],{"class":108},[102,159872,41852],{"class":187},[102,159874,2571],{"class":119},[102,159876,159877],{"class":386},"indent",[102,159879,260],{"class":108},[102,159881,7044],{"class":187},[102,159883,390],{"class":119},[102,159885,159886],{"class":104,"line":298},[102,159887,652],{"emptyLinePlaceholder":651},[102,159889,159890],{"class":104,"line":502},[102,159891,652],{"emptyLinePlaceholder":651},[102,159893,159894,159896,159899],{"class":104,"line":507},[102,159895,39812],{"class":108},[102,159897,159898],{"class":112}," show_menu",[102,159900,39818],{"class":119},[102,159902,159903,159905,159907,159910],{"class":104,"line":512},[102,159904,39164],{"class":187},[102,159906,380],{"class":119},[102,159908,159909],{"class":278},"\"====== 学生管理系统 ======\"",[102,159911,390],{"class":119},[102,159913,159914,159916,159918,159921],{"class":104,"line":521},[102,159915,39164],{"class":187},[102,159917,380],{"class":119},[102,159919,159920],{"class":278},"\"1. 添加学生\"",[102,159922,390],{"class":119},[102,159924,159925,159927,159929,159932],{"class":104,"line":526},[102,159926,39164],{"class":187},[102,159928,380],{"class":119},[102,159930,159931],{"class":278},"\"2. 删除学生\"",[102,159933,390],{"class":119},[102,159935,159936,159938,159940,159943],{"class":104,"line":532},[102,159937,39164],{"class":187},[102,159939,380],{"class":119},[102,159941,159942],{"class":278},"\"3. 修改学生\"",[102,159944,390],{"class":119},[102,159946,159947,159949,159951,159954],{"class":104,"line":538},[102,159948,39164],{"class":187},[102,159950,380],{"class":119},[102,159952,159953],{"class":278},"\"4. 查询学生\"",[102,159955,390],{"class":119},[102,159957,159958,159960,159962,159965],{"class":104,"line":555},[102,159959,39164],{"class":187},[102,159961,380],{"class":119},[102,159963,159964],{"class":278},"\"5. 显示所有学生\"",[102,159966,390],{"class":119},[102,159968,159969,159971,159973,159976],{"class":104,"line":570},[102,159970,39164],{"class":187},[102,159972,380],{"class":119},[102,159974,159975],{"class":278},"\"0. 退出系统\"",[102,159977,390],{"class":119},[102,159979,159980],{"class":104,"line":581},[102,159981,652],{"emptyLinePlaceholder":651},[102,159983,159984],{"class":104,"line":819},[102,159985,652],{"emptyLinePlaceholder":651},[102,159987,159988,159990,159993],{"class":104,"line":828},[102,159989,39812],{"class":108},[102,159991,159992],{"class":112}," find_student",[102,159994,159995],{"class":119},"(students, student_id):\n",[102,159997,159998,160000,160003,160005],{"class":104,"line":837},[102,159999,12016],{"class":108},[102,160001,160002],{"class":119}," student ",[102,160004,33908],{"class":108},[102,160006,160007],{"class":119}," students:\n",[102,160009,160010,160012,160015,160017,160019,160021],{"class":104,"line":842},[102,160011,1202],{"class":108},[102,160013,160014],{"class":119}," student[",[102,160016,159312],{"class":278},[102,160018,13252],{"class":119},[102,160020,1876],{"class":108},[102,160022,160023],{"class":119}," student_id:\n",[102,160025,160026,160028],{"class":104,"line":855},[102,160027,1245],{"class":108},[102,160029,160030],{"class":119}," student\n",[102,160032,160033,160035],{"class":104,"line":860},[102,160034,863],{"class":108},[102,160036,160037],{"class":187}," None\n",[102,160039,160040],{"class":104,"line":871},[102,160041,652],{"emptyLinePlaceholder":651},[102,160043,160044],{"class":104,"line":1359},[102,160045,652],{"emptyLinePlaceholder":651},[102,160047,160048,160050,160053],{"class":104,"line":1368},[102,160049,39812],{"class":108},[102,160051,160052],{"class":112}," input_int",[102,160054,160055],{"class":119},"(prompt):\n",[102,160057,160058,160060,160062],{"class":104,"line":1373},[102,160059,11089],{"class":108},[102,160061,103157],{"class":187},[102,160063,12552],{"class":119},[102,160065,160066,160069],{"class":104,"line":1378},[102,160067,160068],{"class":108},"        try",[102,160070,12552],{"class":119},[102,160072,160073,160075,160077,160079,160081],{"class":104,"line":1384},[102,160074,1245],{"class":108},[102,160076,6392],{"class":187},[102,160078,380],{"class":119},[102,160080,61686],{"class":187},[102,160082,160083],{"class":119},"(prompt))\n",[102,160085,160086,160089,160092],{"class":104,"line":1398},[102,160087,160088],{"class":108},"        except",[102,160090,160091],{"class":187}," ValueError",[102,160093,12552],{"class":119},[102,160095,160096,160098,160100,160103],{"class":104,"line":1424},[102,160097,42515],{"class":187},[102,160099,380],{"class":119},[102,160101,160102],{"class":278},"\"请输入整数\"",[102,160104,390],{"class":119},[102,160106,160107],{"class":104,"line":1429},[102,160108,652],{"emptyLinePlaceholder":651},[102,160110,160111],{"class":104,"line":1435},[102,160112,652],{"emptyLinePlaceholder":651},[102,160114,160115,160117,160120],{"class":104,"line":1450},[102,160116,39812],{"class":108},[102,160118,160119],{"class":112}," input_float",[102,160121,160055],{"class":119},[102,160123,160124,160126,160128],{"class":104,"line":1473},[102,160125,11089],{"class":108},[102,160127,103157],{"class":187},[102,160129,12552],{"class":119},[102,160131,160132,160134],{"class":104,"line":1478},[102,160133,160068],{"class":108},[102,160135,12552],{"class":119},[102,160137,160138,160140,160142,160144,160146],{"class":104,"line":1484},[102,160139,1245],{"class":108},[102,160141,117662],{"class":187},[102,160143,380],{"class":119},[102,160145,61686],{"class":187},[102,160147,160083],{"class":119},[102,160149,160150,160152,160154],{"class":104,"line":1499},[102,160151,160088],{"class":108},[102,160153,160091],{"class":187},[102,160155,12552],{"class":119},[102,160157,160158,160160,160162,160165],{"class":104,"line":1508},[102,160159,42515],{"class":187},[102,160161,380],{"class":119},[102,160163,160164],{"class":278},"\"请输入数字\"",[102,160166,390],{"class":119},[102,160168,160169],{"class":104,"line":1513},[102,160170,652],{"emptyLinePlaceholder":651},[102,160172,160173],{"class":104,"line":1524},[102,160174,652],{"emptyLinePlaceholder":651},[102,160176,160177,160179,160182],{"class":104,"line":1529},[102,160178,39812],{"class":108},[102,160180,160181],{"class":112}," add_student",[102,160183,159826],{"class":119},[102,160185,160186,160189,160191,160193,160195,160198],{"class":104,"line":1538},[102,160187,160188],{"class":119},"    student_id ",[102,160190,260],{"class":108},[102,160192,68470],{"class":187},[102,160194,380],{"class":119},[102,160196,160197],{"class":278},"\"请输入学号:\"",[102,160199,390],{"class":119},[102,160201,160202],{"class":104,"line":2089},[102,160203,652],{"emptyLinePlaceholder":651},[102,160205,160206,160208],{"class":104,"line":2094},[102,160207,2343],{"class":108},[102,160209,160210],{"class":119}," find_student(students, student_id):\n",[102,160212,160213,160215,160217,160220],{"class":104,"line":2100},[102,160214,40316],{"class":187},[102,160216,380],{"class":119},[102,160218,160219],{"class":278},"\"学号已存在\"",[102,160221,390],{"class":119},[102,160223,160224],{"class":104,"line":2106},[102,160225,160226],{"class":108},"        return\n",[102,160228,160229],{"class":104,"line":2120},[102,160230,652],{"emptyLinePlaceholder":651},[102,160232,160233,160236,160238,160240,160242,160245],{"class":104,"line":2128},[102,160234,160235],{"class":119},"    name ",[102,160237,260],{"class":108},[102,160239,68470],{"class":187},[102,160241,380],{"class":119},[102,160243,160244],{"class":278},"\"请输入姓名:\"",[102,160246,390],{"class":119},[102,160248,160249,160252,160254,160257,160260],{"class":104,"line":2149},[102,160250,160251],{"class":119},"    age ",[102,160253,260],{"class":108},[102,160255,160256],{"class":119}," input_int(",[102,160258,160259],{"class":278},"\"请输入年龄:\"",[102,160261,390],{"class":119},[102,160263,160264,160267,160269,160272,160275],{"class":104,"line":2161},[102,160265,160266],{"class":119},"    score ",[102,160268,260],{"class":108},[102,160270,160271],{"class":119}," input_float(",[102,160273,160274],{"class":278},"\"请输入成绩:\"",[102,160276,390],{"class":119},[102,160278,160279],{"class":104,"line":2167},[102,160280,652],{"emptyLinePlaceholder":651},[102,160282,160283],{"class":104,"line":2190},[102,160284,160285],{"class":119},"    students.append({\n",[102,160287,160288,160291],{"class":104,"line":2196},[102,160289,160290],{"class":278},"        \"student_id\"",[102,160292,160293],{"class":119},": student_id,\n",[102,160295,160296,160299],{"class":104,"line":2219},[102,160297,160298],{"class":278},"        \"name\"",[102,160300,160301],{"class":119},": name,\n",[102,160303,160304,160307],{"class":104,"line":2233},[102,160305,160306],{"class":278},"        \"age\"",[102,160308,160309],{"class":119},": age,\n",[102,160311,160312,160315],{"class":104,"line":2253},[102,160313,160314],{"class":278},"        \"score\"",[102,160316,160317],{"class":119},": score,\n",[102,160319,160320],{"class":104,"line":2259},[102,160321,41326],{"class":119},[102,160323,160324],{"class":104,"line":2270},[102,160325,160326],{"class":119},"    save_students(students)\n",[102,160328,160329,160331,160333,160336],{"class":104,"line":2293},[102,160330,39164],{"class":187},[102,160332,380],{"class":119},[102,160334,160335],{"class":278},"\"添加成功\"",[102,160337,390],{"class":119},[102,160339,160340],{"class":104,"line":2315},[102,160341,652],{"emptyLinePlaceholder":651},[102,160343,160344],{"class":104,"line":2320},[102,160345,652],{"emptyLinePlaceholder":651},[102,160347,160348,160350,160353],{"class":104,"line":2326},[102,160349,39812],{"class":108},[102,160351,160352],{"class":112}," delete_student",[102,160354,159826],{"class":119},[102,160356,160357,160359,160361,160363,160365,160368],{"class":104,"line":2340},[102,160358,160188],{"class":119},[102,160360,260],{"class":108},[102,160362,68470],{"class":187},[102,160364,380],{"class":119},[102,160366,160367],{"class":278},"\"请输入要删除的学号:\"",[102,160369,390],{"class":119},[102,160371,160372,160375,160377],{"class":104,"line":2354},[102,160373,160374],{"class":119},"    student ",[102,160376,260],{"class":108},[102,160378,160379],{"class":119}," find_student(students, student_id)\n",[102,160381,160382],{"class":104,"line":2359},[102,160383,652],{"emptyLinePlaceholder":651},[102,160385,160386,160388,160390,160392,160394],{"class":104,"line":2373},[102,160387,2343],{"class":108},[102,160389,160002],{"class":119},[102,160391,46792],{"class":108},[102,160393,46798],{"class":187},[102,160395,12552],{"class":119},[102,160397,160398,160400,160402,160405],{"class":104,"line":2378},[102,160399,40316],{"class":187},[102,160401,380],{"class":119},[102,160403,160404],{"class":278},"\"学生不存在\"",[102,160406,390],{"class":119},[102,160408,160409],{"class":104,"line":2384},[102,160410,160226],{"class":108},[102,160412,160413],{"class":104,"line":2389},[102,160414,652],{"emptyLinePlaceholder":651},[102,160416,160417],{"class":104,"line":2403},[102,160418,160419],{"class":119},"    students.remove(student)\n",[102,160421,160422],{"class":104,"line":2408},[102,160423,160326],{"class":119},[102,160425,160426,160428,160430,160433],{"class":104,"line":2413},[102,160427,39164],{"class":187},[102,160429,380],{"class":119},[102,160431,160432],{"class":278},"\"删除成功\"",[102,160434,390],{"class":119},[102,160436,160437],{"class":104,"line":2427},[102,160438,652],{"emptyLinePlaceholder":651},[102,160440,160441],{"class":104,"line":2440},[102,160442,652],{"emptyLinePlaceholder":651},[102,160444,160445,160447,160450],{"class":104,"line":2445},[102,160446,39812],{"class":108},[102,160448,160449],{"class":112}," update_student",[102,160451,159826],{"class":119},[102,160453,160454,160456,160458,160460,160462,160465],{"class":104,"line":2458},[102,160455,160188],{"class":119},[102,160457,260],{"class":108},[102,160459,68470],{"class":187},[102,160461,380],{"class":119},[102,160463,160464],{"class":278},"\"请输入要修改的学号:\"",[102,160466,390],{"class":119},[102,160468,160469,160471,160473],{"class":104,"line":2463},[102,160470,160374],{"class":119},[102,160472,260],{"class":108},[102,160474,160379],{"class":119},[102,160476,160477],{"class":104,"line":2468},[102,160478,652],{"emptyLinePlaceholder":651},[102,160480,160481,160483,160485,160487,160489],{"class":104,"line":2473},[102,160482,2343],{"class":108},[102,160484,160002],{"class":119},[102,160486,46792],{"class":108},[102,160488,46798],{"class":187},[102,160490,12552],{"class":119},[102,160492,160493,160495,160497,160499],{"class":104,"line":2486},[102,160494,40316],{"class":187},[102,160496,380],{"class":119},[102,160498,160404],{"class":278},[102,160500,390],{"class":119},[102,160502,160503],{"class":104,"line":2491},[102,160504,160226],{"class":108},[102,160506,160507],{"class":104,"line":40498},[102,160508,652],{"emptyLinePlaceholder":651},[102,160510,160511,160513,160515,160517,160519,160522],{"class":104,"line":40504},[102,160512,160235],{"class":119},[102,160514,260],{"class":108},[102,160516,68470],{"class":187},[102,160518,380],{"class":119},[102,160520,160521],{"class":278},"\"请输入新姓名:\"",[102,160523,390],{"class":119},[102,160525,160526,160528,160530,160532,160535],{"class":104,"line":40510},[102,160527,160251],{"class":119},[102,160529,260],{"class":108},[102,160531,160256],{"class":119},[102,160533,160534],{"class":278},"\"请输入新年龄:\"",[102,160536,390],{"class":119},[102,160538,160539,160541,160543,160545,160548],{"class":104,"line":40516},[102,160540,160266],{"class":119},[102,160542,260],{"class":108},[102,160544,160271],{"class":119},[102,160546,160547],{"class":278},"\"请输入新成绩:\"",[102,160549,390],{"class":119},[102,160551,160552],{"class":104,"line":40522},[102,160553,652],{"emptyLinePlaceholder":651},[102,160555,160556,160559,160561,160563,160565],{"class":104,"line":40533},[102,160557,160558],{"class":119},"    student[",[102,160560,70544],{"class":278},[102,160562,13252],{"class":119},[102,160564,260],{"class":108},[102,160566,157660],{"class":119},[102,160568,160569,160571,160573,160575,160577],{"class":104,"line":40539},[102,160570,160558],{"class":119},[102,160572,76989],{"class":278},[102,160574,13252],{"class":119},[102,160576,260],{"class":108},[102,160578,157672],{"class":119},[102,160580,160581,160583,160585,160587,160589],{"class":104,"line":40559},[102,160582,160558],{"class":119},[102,160584,159337],{"class":278},[102,160586,13252],{"class":119},[102,160588,260],{"class":108},[102,160590,10452],{"class":119},[102,160592,160593],{"class":104,"line":40565},[102,160594,652],{"emptyLinePlaceholder":651},[102,160596,160597],{"class":104,"line":40576},[102,160598,160326],{"class":119},[102,160600,160601,160603,160605,160608],{"class":104,"line":40582},[102,160602,39164],{"class":187},[102,160604,380],{"class":119},[102,160606,160607],{"class":278},"\"修改成功\"",[102,160609,390],{"class":119},[102,160611,160612],{"class":104,"line":40588},[102,160613,652],{"emptyLinePlaceholder":651},[102,160615,160616],{"class":104,"line":40594},[102,160617,652],{"emptyLinePlaceholder":651},[102,160619,160620,160622,160625],{"class":104,"line":40600},[102,160621,39812],{"class":108},[102,160623,160624],{"class":112}," query_student",[102,160626,159826],{"class":119},[102,160628,160629,160631,160633,160635,160637,160640],{"class":104,"line":40606},[102,160630,160188],{"class":119},[102,160632,260],{"class":108},[102,160634,68470],{"class":187},[102,160636,380],{"class":119},[102,160638,160639],{"class":278},"\"请输入要查询的学号:\"",[102,160641,390],{"class":119},[102,160643,160644,160646,160648],{"class":104,"line":40612},[102,160645,160374],{"class":119},[102,160647,260],{"class":108},[102,160649,160379],{"class":119},[102,160651,160652],{"class":104,"line":40618},[102,160653,652],{"emptyLinePlaceholder":651},[102,160655,160656,160658,160660,160662,160664],{"class":104,"line":40638},[102,160657,2343],{"class":108},[102,160659,160002],{"class":119},[102,160661,46792],{"class":108},[102,160663,46798],{"class":187},[102,160665,12552],{"class":119},[102,160667,160668,160670,160672,160674],{"class":104,"line":40644},[102,160669,40316],{"class":187},[102,160671,380],{"class":119},[102,160673,160404],{"class":278},[102,160675,390],{"class":119},[102,160677,160678],{"class":104,"line":40660},[102,160679,160226],{"class":108},[102,160681,160682],{"class":104,"line":40666},[102,160683,652],{"emptyLinePlaceholder":651},[102,160685,160686],{"class":104,"line":40680},[102,160687,160688],{"class":119},"    print_student(student)\n",[102,160690,160691],{"class":104,"line":40686},[102,160692,652],{"emptyLinePlaceholder":651},[102,160694,160695],{"class":104,"line":40701},[102,160696,652],{"emptyLinePlaceholder":651},[102,160698,160699,160701,160704],{"class":104,"line":40707},[102,160700,39812],{"class":108},[102,160702,160703],{"class":112}," print_student",[102,160705,160706],{"class":119},"(student):\n",[102,160708,160709,160711],{"class":104,"line":40716},[102,160710,39164],{"class":187},[102,160712,159304],{"class":119},[102,160714,160715,160718,160720,160722,160725,160728,160730,160733],{"class":104,"line":40722},[102,160716,160717],{"class":108},"        f",[102,160719,9288],{"class":278},[102,160721,9918],{"class":187},[102,160723,160724],{"class":119},"student[",[102,160726,160727],{"class":278},"'student_id'",[102,160729,9961],{"class":119},[102,160731,160732],{"class":187},"}\\t",[102,160734,32998],{"class":278},[102,160736,160737,160739,160741,160743,160745,160748,160750,160752],{"class":104,"line":40731},[102,160738,160717],{"class":108},[102,160740,9288],{"class":278},[102,160742,9918],{"class":187},[102,160744,160724],{"class":119},[102,160746,160747],{"class":278},"'name'",[102,160749,9961],{"class":119},[102,160751,160732],{"class":187},[102,160753,32998],{"class":278},[102,160755,160756,160758,160760,160762,160764,160767,160769,160771],{"class":104,"line":40737},[102,160757,160717],{"class":108},[102,160759,9288],{"class":278},[102,160761,9918],{"class":187},[102,160763,160724],{"class":119},[102,160765,160766],{"class":278},"'age'",[102,160768,9961],{"class":119},[102,160770,160732],{"class":187},[102,160772,32998],{"class":278},[102,160774,160775,160777,160779,160781,160783,160786,160788,160790],{"class":104,"line":40743},[102,160776,160717],{"class":108},[102,160778,9288],{"class":278},[102,160780,9918],{"class":187},[102,160782,160724],{"class":119},[102,160784,160785],{"class":278},"'score'",[102,160787,9961],{"class":119},[102,160789,9967],{"class":187},[102,160791,32998],{"class":278},[102,160793,160794],{"class":104,"line":40752},[102,160795,160796],{"class":119},"    )\n",[102,160798,160799],{"class":104,"line":40758},[102,160800,652],{"emptyLinePlaceholder":651},[102,160802,160803],{"class":104,"line":40769},[102,160804,652],{"emptyLinePlaceholder":651},[102,160806,160807,160809,160812],{"class":104,"line":40775},[102,160808,39812],{"class":108},[102,160810,160811],{"class":112}," show_all_students",[102,160813,159826],{"class":119},[102,160815,160816,160818,160820],{"class":104,"line":40794},[102,160817,2343],{"class":108},[102,160819,46795],{"class":108},[102,160821,160007],{"class":119},[102,160823,160824,160826,160828,160831],{"class":104,"line":40800},[102,160825,40316],{"class":187},[102,160827,380],{"class":119},[102,160829,160830],{"class":278},"\"暂无学生\"",[102,160832,390],{"class":119},[102,160834,160835],{"class":104,"line":40811},[102,160836,160226],{"class":108},[102,160838,160839],{"class":104,"line":40817},[102,160840,652],{"emptyLinePlaceholder":651},[102,160842,160843,160845,160847,160850,160852,160855,160857,160860,160862,160865],{"class":104,"line":40837},[102,160844,39164],{"class":187},[102,160846,380],{"class":119},[102,160848,160849],{"class":278},"\"学号",[102,160851,10118],{"class":187},[102,160853,160854],{"class":278},"姓名",[102,160856,10118],{"class":187},[102,160858,160859],{"class":278},"年龄",[102,160861,10118],{"class":187},[102,160863,160864],{"class":278},"成绩\"",[102,160866,390],{"class":119},[102,160868,160869,160871,160873,160875],{"class":104,"line":40853},[102,160870,12016],{"class":108},[102,160872,160002],{"class":119},[102,160874,33908],{"class":108},[102,160876,160007],{"class":119},[102,160878,160879],{"class":104,"line":40859},[102,160880,160881],{"class":119},"        print_student(student)\n",[102,160883,160884],{"class":104,"line":40873},[102,160885,652],{"emptyLinePlaceholder":651},[102,160887,160888],{"class":104,"line":40879},[102,160889,652],{"emptyLinePlaceholder":651},[102,160891,160892,160894,160896],{"class":104,"line":40885},[102,160893,39812],{"class":108},[102,160895,220],{"class":112},[102,160897,39818],{"class":119},[102,160899,160900,160903,160905],{"class":104,"line":40896},[102,160901,160902],{"class":119},"    students ",[102,160904,260],{"class":108},[102,160906,160907],{"class":119}," load_students()\n",[102,160909,160910],{"class":104,"line":40902},[102,160911,652],{"emptyLinePlaceholder":651},[102,160913,160914,160916,160918],{"class":104,"line":40908},[102,160915,11089],{"class":108},[102,160917,103157],{"class":187},[102,160919,12552],{"class":119},[102,160921,160922],{"class":104,"line":40918},[102,160923,160924],{"class":119},"        show_menu()\n",[102,160926,160927,160930,160932,160934,160936,160939],{"class":104,"line":40924},[102,160928,160929],{"class":119},"        choice ",[102,160931,260],{"class":108},[102,160933,68470],{"class":187},[102,160935,380],{"class":119},[102,160937,160938],{"class":278},"\"请输入操作:\"",[102,160940,390],{"class":119},[102,160942,160943],{"class":104,"line":40935},[102,160944,652],{"emptyLinePlaceholder":651},[102,160946,160947,160949,160952,160954,160957],{"class":104,"line":40941},[102,160948,1202],{"class":108},[102,160950,160951],{"class":119}," choice ",[102,160953,1876],{"class":108},[102,160955,160956],{"class":278}," \"1\"",[102,160958,12552],{"class":119},[102,160960,160961],{"class":104,"line":40951},[102,160962,160963],{"class":119},"            add_student(students)\n",[102,160965,160966,160969,160971,160973,160976],{"class":104,"line":40956},[102,160967,160968],{"class":108},"        elif",[102,160970,160951],{"class":119},[102,160972,1876],{"class":108},[102,160974,160975],{"class":278}," \"2\"",[102,160977,12552],{"class":119},[102,160979,160980],{"class":104,"line":40962},[102,160981,160982],{"class":119},"            delete_student(students)\n",[102,160984,160985,160987,160989,160991,160994],{"class":104,"line":41011},[102,160986,160968],{"class":108},[102,160988,160951],{"class":119},[102,160990,1876],{"class":108},[102,160992,160993],{"class":278}," \"3\"",[102,160995,12552],{"class":119},[102,160997,160998],{"class":104,"line":41058},[102,160999,161000],{"class":119},"            update_student(students)\n",[102,161002,161003,161005,161007,161009,161012],{"class":104,"line":41063},[102,161004,160968],{"class":108},[102,161006,160951],{"class":119},[102,161008,1876],{"class":108},[102,161010,161011],{"class":278}," \"4\"",[102,161013,12552],{"class":119},[102,161015,161016],{"class":104,"line":41069},[102,161017,161018],{"class":119},"            query_student(students)\n",[102,161020,161021,161023,161025,161027,161030],{"class":104,"line":41088},[102,161022,160968],{"class":108},[102,161024,160951],{"class":119},[102,161026,1876],{"class":108},[102,161028,161029],{"class":278}," \"5\"",[102,161031,12552],{"class":119},[102,161033,161034],{"class":104,"line":41094},[102,161035,161036],{"class":119},"            show_all_students(students)\n",[102,161038,161039,161041,161043,161045,161048],{"class":104,"line":41114},[102,161040,160968],{"class":108},[102,161042,160951],{"class":119},[102,161044,1876],{"class":108},[102,161046,161047],{"class":278}," \"0\"",[102,161049,12552],{"class":119},[102,161051,161052,161054,161056,161059],{"class":104,"line":41120},[102,161053,42515],{"class":187},[102,161055,380],{"class":119},[102,161057,161058],{"class":278},"\"退出系统\"",[102,161060,390],{"class":119},[102,161062,161063],{"class":104,"line":41126},[102,161064,122963],{"class":108},[102,161066,161067,161069],{"class":104,"line":41136},[102,161068,11363],{"class":108},[102,161070,12552],{"class":119},[102,161072,161073,161075,161077,161080],{"class":104,"line":41141},[102,161074,42515],{"class":187},[102,161076,380],{"class":119},[102,161078,161079],{"class":278},"\"输入错误\"",[102,161081,390],{"class":119},[102,161083,161084],{"class":104,"line":41147},[102,161085,652],{"emptyLinePlaceholder":651},[102,161087,161088],{"class":104,"line":41163},[102,161089,652],{"emptyLinePlaceholder":651},[102,161091,161092,161094,161096,161098,161100],{"class":104,"line":41208},[102,161093,10407],{"class":108},[102,161095,39085],{"class":187},[102,161097,109424],{"class":108},[102,161099,109427],{"class":278},[102,161101,12552],{"class":119},[102,161103,161104],{"class":104,"line":41214},[102,161105,109434],{"class":119},[14,161107,161108],{},"这个项目串联了：",[87,161110,161111,161114,161117,161120,161123,161125],{},[62,161112,161113],{},"菜单循环。",[62,161115,161116],{},"函数封装。",[62,161118,161119],{},"列表字典。",[62,161121,161122],{},"JSON 读写。",[62,161124,159592],{},[62,161126,161127,36250],{},[83,161128,161129],{},"if __name__ == \"__main__\"",[43,161131,161133],{"id":161132},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,161135,161136],{},"可以进一步拆成两个类：",[87,161138,161139,161144],{},[62,161140,161141,161143],{},[83,161142,157433],{},"：表示单个学生。",[62,161145,161146,161148],{},[83,161147,159459],{},"：负责学生增删改查和文件保存。",[14,161150,161151],{},"示意代码：",[93,161153,161155],{"className":38243,"code":161154,"language":38245,"meta":98,"style":98},"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",[83,161156,161157,161167,161171,161175,161179,161187,161194,161200,161206,161212,161216,161224,161230,161240,161250,161260,161270,161274,161278,161284,161292,161300,161308,161316,161324,161332],{"__ignoreMap":98},[102,161158,161159,161161,161163,161165],{"class":104,"line":105},[102,161160,38602],{"class":108},[102,161162,159017],{"class":119},[102,161164,38257],{"class":108},[102,161166,159022],{"class":119},[102,161168,161169],{"class":104,"line":116},[102,161170,652],{"emptyLinePlaceholder":651},[102,161172,161173],{"class":104,"line":123},[102,161174,652],{"emptyLinePlaceholder":651},[102,161176,161177],{"class":104,"line":130},[102,161178,159035],{"class":112},[102,161180,161181,161183,161185],{"class":104,"line":136},[102,161182,109],{"class":108},[102,161184,16679],{"class":112},[102,161186,12552],{"class":119},[102,161188,161189,161192],{"class":104,"line":142},[102,161190,161191],{"class":119},"    student_id: ",[102,161193,159051],{"class":187},[102,161195,161196,161198],{"class":104,"line":148},[102,161197,159048],{"class":119},[102,161199,159051],{"class":187},[102,161201,161202,161204],{"class":104,"line":157},[102,161203,159056],{"class":119},[102,161205,159059],{"class":187},[102,161207,161208,161210],{"class":104,"line":163},[102,161209,159064],{"class":119},[102,161211,159067],{"class":187},[102,161213,161214],{"class":104,"line":175},[102,161215,652],{"emptyLinePlaceholder":651},[102,161217,161218,161220,161222],{"class":104,"line":181},[102,161219,38666],{"class":108},[102,161221,159215],{"class":112},[102,161223,38672],{"class":119},[102,161225,161226,161228],{"class":104,"line":202},[102,161227,184],{"class":108},[102,161229,1077],{"class":119},[102,161231,161232,161234,161236,161238],{"class":104,"line":208},[102,161233,159228],{"class":278},[102,161235,59302],{"class":119},[102,161237,38688],{"class":187},[102,161239,159235],{"class":119},[102,161241,161242,161244,161246,161248],{"class":104,"line":214},[102,161243,159240],{"class":278},[102,161245,59302],{"class":119},[102,161247,38688],{"class":187},[102,161249,159247],{"class":119},[102,161251,161252,161254,161256,161258],{"class":104,"line":225},[102,161253,159252],{"class":278},[102,161255,59302],{"class":119},[102,161257,38688],{"class":187},[102,161259,159259],{"class":119},[102,161261,161262,161264,161266,161268],{"class":104,"line":230},[102,161263,159264],{"class":278},[102,161265,59302],{"class":119},[102,161267,38688],{"class":187},[102,161269,159271],{"class":119},[102,161271,161272],{"class":104,"line":236},[102,161273,1252],{"class":119},[102,161275,161276],{"class":104,"line":242},[102,161277,652],{"emptyLinePlaceholder":651},[102,161279,161280,161282],{"class":104,"line":248},[102,161281,158879],{"class":112},[102,161283,158882],{"class":187},[102,161285,161286,161288,161290],{"class":104,"line":254},[102,161287,38666],{"class":108},[102,161289,159292],{"class":112},[102,161291,159295],{"class":119},[102,161293,161294,161296,161298],{"class":104,"line":269},[102,161295,184],{"class":108},[102,161297,158899],{"class":187},[102,161299,159304],{"class":119},[102,161301,161302,161304,161306],{"class":104,"line":298},[102,161303,159309],{"class":119},[102,161305,159312],{"class":278},[102,161307,95701],{"class":119},[102,161309,161310,161312,161314],{"class":104,"line":502},[102,161311,159309],{"class":119},[102,161313,70544],{"class":278},[102,161315,95701],{"class":119},[102,161317,161318,161320,161322],{"class":104,"line":507},[102,161319,159309],{"class":119},[102,161321,76989],{"class":278},[102,161323,95701],{"class":119},[102,161325,161326,161328,161330],{"class":104,"line":512},[102,161327,159309],{"class":119},[102,161329,159337],{"class":278},[102,161331,95701],{"class":119},[102,161333,161334],{"class":104,"line":521},[102,161335,45991],{"class":119},[14,161337,161338],{},"管理器示意：",[93,161340,161342],{"className":38243,"code":161341,"language":38245,"meta":98,"style":98},"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",[83,161343,161344,161353,161361,161372,161376,161386,161399,161410,161417,161423,161427,161436,161445,161451,161458],{"__ignoreMap":98},[102,161345,161346,161348,161351],{"class":104,"line":105},[102,161347,109],{"class":108},[102,161349,161350],{"class":112}," StudentManager",[102,161352,12552],{"class":119},[102,161354,161355,161357,161359],{"class":104,"line":116},[102,161356,38666],{"class":108},[102,161358,38669],{"class":187},[102,161360,38672],{"class":119},[102,161362,161363,161365,161368,161370],{"class":104,"line":123},[102,161364,38710],{"class":187},[102,161366,161367],{"class":119},".students ",[102,161369,260],{"class":108},[102,161371,59703],{"class":119},[102,161373,161374],{"class":104,"line":130},[102,161375,652],{"emptyLinePlaceholder":651},[102,161377,161378,161380,161383],{"class":104,"line":136},[102,161379,38666],{"class":108},[102,161381,161382],{"class":112}," find_by_id",[102,161384,161385],{"class":119},"(self, student_id):\n",[102,161387,161388,161390,161392,161394,161396],{"class":104,"line":142},[102,161389,12217],{"class":108},[102,161391,160002],{"class":119},[102,161393,33908],{"class":108},[102,161395,46738],{"class":187},[102,161397,161398],{"class":119},".students:\n",[102,161400,161401,161403,161406,161408],{"class":104,"line":148},[102,161402,13451],{"class":108},[102,161404,161405],{"class":119}," student.student_id ",[102,161407,1876],{"class":108},[102,161409,160023],{"class":119},[102,161411,161412,161415],{"class":104,"line":157},[102,161413,161414],{"class":108},"                return",[102,161416,160030],{"class":119},[102,161418,161419,161421],{"class":104,"line":163},[102,161420,184],{"class":108},[102,161422,160037],{"class":187},[102,161424,161425],{"class":104,"line":175},[102,161426,652],{"emptyLinePlaceholder":651},[102,161428,161429,161431,161433],{"class":104,"line":181},[102,161430,38666],{"class":108},[102,161432,14015],{"class":112},[102,161434,161435],{"class":119},"(self, student):\n",[102,161437,161438,161440,161442],{"class":104,"line":202},[102,161439,1202],{"class":108},[102,161441,46738],{"class":187},[102,161443,161444],{"class":119},".find_by_id(student.student_id):\n",[102,161446,161447,161449],{"class":104,"line":208},[102,161448,1245],{"class":108},[102,161450,133672],{"class":187},[102,161452,161453,161455],{"class":104,"line":214},[102,161454,38710],{"class":187},[102,161456,161457],{"class":119},".students.append(student)\n",[102,161459,161460,161462],{"class":104,"line":225},[102,161461,184],{"class":108},[102,161463,161464],{"class":187}," True\n",[14,161466,161467],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[43,161469,161471],{"id":161470},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[48,161473,161475],{"id":161474},"_1251-数据结构","12.5.1 数据结构",[93,161477,161479],{"className":38243,"code":161478,"language":38245,"meta":98,"style":98},"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",[83,161480,161481,161489,161520,161550,161579,161608],{"__ignoreMap":98},[102,161482,161483,161485,161487],{"class":104,"line":105},[102,161484,156330],{"class":119},[102,161486,260],{"class":108},[102,161488,63312],{"class":119},[102,161490,161491,161493,161495,161497,161499,161501,161504,161506,161509,161511,161513,161515,161518],{"class":104,"line":116},[102,161492,156250],{"class":119},[102,161494,155862],{"class":278},[102,161496,59302],{"class":119},[102,161498,156473],{"class":278},[102,161500,2571],{"class":119},[102,161502,161503],{"class":278},"\"category\"",[102,161505,59302],{"class":119},[102,161507,161508],{"class":278},"\"手机\"",[102,161510,2571],{"class":119},[102,161512,91949],{"class":278},[102,161514,59302],{"class":119},[102,161516,161517],{"class":187},"12000",[102,161519,13739],{"class":119},[102,161521,161522,161524,161526,161528,161530,161532,161534,161536,161539,161541,161543,161545,161548],{"class":104,"line":123},[102,161523,156250],{"class":119},[102,161525,155862],{"class":278},[102,161527,59302],{"class":119},[102,161529,156473],{"class":278},[102,161531,2571],{"class":119},[102,161533,161503],{"class":278},[102,161535,59302],{"class":119},[102,161537,161538],{"class":278},"\"电脑\"",[102,161540,2571],{"class":119},[102,161542,91949],{"class":278},[102,161544,59302],{"class":119},[102,161546,161547],{"class":187},"18000",[102,161549,13739],{"class":119},[102,161551,161552,161554,161556,161558,161560,161562,161564,161566,161568,161570,161572,161574,161577],{"class":104,"line":130},[102,161553,156250],{"class":119},[102,161555,155862],{"class":278},[102,161557,59302],{"class":119},[102,161559,156494],{"class":278},[102,161561,2571],{"class":119},[102,161563,161503],{"class":278},[102,161565,59302],{"class":119},[102,161567,161508],{"class":278},[102,161569,2571],{"class":119},[102,161571,91949],{"class":278},[102,161573,59302],{"class":119},[102,161575,161576],{"class":187},"15000",[102,161578,13739],{"class":119},[102,161580,161581,161583,161585,161587,161589,161591,161593,161595,161597,161599,161601,161603,161606],{"class":104,"line":136},[102,161582,156250],{"class":119},[102,161584,155862],{"class":278},[102,161586,59302],{"class":119},[102,161588,156494],{"class":278},[102,161590,2571],{"class":119},[102,161592,161503],{"class":278},[102,161594,59302],{"class":119},[102,161596,161538],{"class":278},[102,161598,2571],{"class":119},[102,161600,91949],{"class":278},[102,161602,59302],{"class":119},[102,161604,161605],{"class":187},"16000",[102,161607,13739],{"class":119},[102,161609,161610],{"class":104,"line":142},[102,161611,41111],{"class":119},[48,161613,161615],{"id":161614},"_1252-按日期统计","12.5.2 按日期统计",[93,161617,161619],{"className":38243,"code":161618,"language":38245,"meta":98,"style":98},"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",[83,161620,161621,161630,161634,161645,161659,161672,161691,161695],{"__ignoreMap":98},[102,161622,161623,161626,161628],{"class":104,"line":105},[102,161624,161625],{"class":119},"daily_total ",[102,161627,260],{"class":108},[102,161629,95733],{"class":119},[102,161631,161632],{"class":104,"line":116},[102,161633,652],{"emptyLinePlaceholder":651},[102,161635,161636,161638,161640,161642],{"class":104,"line":123},[102,161637,11841],{"class":108},[102,161639,156074],{"class":119},[102,161641,33908],{"class":108},[102,161643,161644],{"class":119}," sales:\n",[102,161646,161647,161650,161652,161655,161657],{"class":104,"line":130},[102,161648,161649],{"class":119},"    date ",[102,161651,260],{"class":108},[102,161653,161654],{"class":119}," item[",[102,161656,155862],{"class":278},[102,161658,41111],{"class":119},[102,161660,161661,161664,161666,161668,161670],{"class":104,"line":136},[102,161662,161663],{"class":119},"    amount ",[102,161665,260],{"class":108},[102,161667,161654],{"class":119},[102,161669,91949],{"class":278},[102,161671,41111],{"class":119},[102,161673,161674,161677,161679,161682,161684,161686,161688],{"class":104,"line":142},[102,161675,161676],{"class":119},"    daily_total[date] ",[102,161678,260],{"class":108},[102,161680,161681],{"class":119}," daily_total.get(date, ",[102,161683,8423],{"class":187},[102,161685,22445],{"class":119},[102,161687,1702],{"class":108},[102,161689,161690],{"class":119}," amount\n",[102,161692,161693],{"class":104,"line":148},[102,161694,652],{"emptyLinePlaceholder":651},[102,161696,161697,161699],{"class":104,"line":157},[102,161698,38280],{"class":187},[102,161700,161701],{"class":119},"(daily_total)\n",[48,161703,161705],{"id":161704},"_1253-按类别统计","12.5.3 按类别统计",[93,161707,161709],{"className":38243,"code":161708,"language":38245,"meta":98,"style":98},"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",[83,161710,161711,161720,161724,161734,161747,161759,161777,161781],{"__ignoreMap":98},[102,161712,161713,161716,161718],{"class":104,"line":105},[102,161714,161715],{"class":119},"category_total ",[102,161717,260],{"class":108},[102,161719,95733],{"class":119},[102,161721,161722],{"class":104,"line":116},[102,161723,652],{"emptyLinePlaceholder":651},[102,161725,161726,161728,161730,161732],{"class":104,"line":123},[102,161727,11841],{"class":108},[102,161729,156074],{"class":119},[102,161731,33908],{"class":108},[102,161733,161644],{"class":119},[102,161735,161736,161739,161741,161743,161745],{"class":104,"line":130},[102,161737,161738],{"class":119},"    category ",[102,161740,260],{"class":108},[102,161742,161654],{"class":119},[102,161744,161503],{"class":278},[102,161746,41111],{"class":119},[102,161748,161749,161751,161753,161755,161757],{"class":104,"line":136},[102,161750,161663],{"class":119},[102,161752,260],{"class":108},[102,161754,161654],{"class":119},[102,161756,91949],{"class":278},[102,161758,41111],{"class":119},[102,161760,161761,161764,161766,161769,161771,161773,161775],{"class":104,"line":142},[102,161762,161763],{"class":119},"    category_total[category] ",[102,161765,260],{"class":108},[102,161767,161768],{"class":119}," category_total.get(category, ",[102,161770,8423],{"class":187},[102,161772,22445],{"class":119},[102,161774,1702],{"class":108},[102,161776,161690],{"class":119},[102,161778,161779],{"class":104,"line":148},[102,161780,652],{"emptyLinePlaceholder":651},[102,161782,161783,161785],{"class":104,"line":157},[102,161784,38280],{"class":187},[102,161786,161787],{"class":119},"(category_total)\n",[48,161789,161791],{"id":161790},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[93,161793,161795],{"className":38243,"code":161794,"language":38245,"meta":98,"style":98},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[83,161796,161797,161822],{"__ignoreMap":98},[102,161798,161799,161802,161804,161806,161809,161812,161815,161818,161820],{"class":104,"line":105},[102,161800,161801],{"class":119},"top_date, top_amount ",[102,161803,260],{"class":108},[102,161805,14749],{"class":187},[102,161807,161808],{"class":119},"(daily_total.items(), ",[102,161810,161811],{"class":386},"key",[102,161813,161814],{"class":108},"=lambda",[102,161816,161817],{"class":119}," item: item[",[102,161819,7039],{"class":187},[102,161821,13466],{"class":119},[102,161823,161824,161826],{"class":104,"line":116},[102,161825,38280],{"class":187},[102,161827,161828],{"class":119},"(top_date, top_amount)\n",[43,161830,161832],{"id":161831},"_126-绘制柱状图","12.6 绘制柱状图",[93,161834,161836],{"className":38243,"code":161835,"language":38245,"meta":98,"style":98},"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",[83,161837,161838,161852,161863,161867,161875,161887,161899,161910,161914,161918,161928,161939,161953,161958,161975,161992,162008,162012],{"__ignoreMap":98},[102,161839,161840,161842,161844,161846,161848,161850],{"class":104,"line":105},[102,161841,38602],{"class":108},[102,161843,155244],{"class":119},[102,161845,38257],{"class":108},[102,161847,155249],{"class":119},[102,161849,39248],{"class":108},[102,161851,155254],{"class":119},[102,161853,161854,161856,161858,161860],{"class":104,"line":116},[102,161855,38602],{"class":108},[102,161857,155103],{"class":119},[102,161859,38257],{"class":108},[102,161861,161862],{"class":119}," Bar\n",[102,161864,161865],{"class":104,"line":123},[102,161866,652],{"emptyLinePlaceholder":651},[102,161868,161869,161871,161873],{"class":104,"line":130},[102,161870,161715],{"class":119},[102,161872,260],{"class":108},[102,161874,1077],{"class":119},[102,161876,161877,161880,161882,161885],{"class":104,"line":136},[102,161878,161879],{"class":278},"    \"手机\"",[102,161881,59302],{"class":119},[102,161883,161884],{"class":187},"27000",[102,161886,39331],{"class":119},[102,161888,161889,161892,161894,161897],{"class":104,"line":142},[102,161890,161891],{"class":278},"    \"电脑\"",[102,161893,59302],{"class":119},[102,161895,161896],{"class":187},"34000",[102,161898,39331],{"class":119},[102,161900,161901,161904,161906,161908],{"class":104,"line":148},[102,161902,161903],{"class":278},"    \"耳机\"",[102,161905,59302],{"class":119},[102,161907,132264],{"class":187},[102,161909,39331],{"class":119},[102,161911,161912],{"class":104,"line":157},[102,161913,301],{"class":119},[102,161915,161916],{"class":104,"line":163},[102,161917,652],{"emptyLinePlaceholder":651},[102,161919,161920,161923,161925],{"class":104,"line":175},[102,161921,161922],{"class":119},"bar ",[102,161924,260],{"class":108},[102,161926,161927],{"class":119}," Bar()\n",[102,161929,161930,161933,161936],{"class":104,"line":181},[102,161931,161932],{"class":119},"bar.add_xaxis(",[102,161934,161935],{"class":187},"list",[102,161937,161938],{"class":119},"(category_total.keys()))\n",[102,161940,161941,161944,161946,161948,161950],{"class":104,"line":202},[102,161942,161943],{"class":119},"bar.add_yaxis(",[102,161945,155160],{"class":278},[102,161947,2571],{"class":119},[102,161949,161935],{"class":187},[102,161951,161952],{"class":119},"(category_total.values()))\n",[102,161954,161955],{"class":104,"line":208},[102,161956,161957],{"class":119},"bar.set_global_opts(\n",[102,161959,161960,161962,161964,161966,161968,161970,161973],{"class":104,"line":214},[102,161961,155338],{"class":386},[102,161963,260],{"class":108},[102,161965,155343],{"class":119},[102,161967,59272],{"class":386},[102,161969,260],{"class":108},[102,161971,161972],{"class":278},"\"品类销售额\"",[102,161974,45912],{"class":119},[102,161976,161977,161979,161981,161983,161985,161987,161990],{"class":104,"line":225},[102,161978,155357],{"class":386},[102,161980,260],{"class":108},[102,161982,155362],{"class":119},[102,161984,87675],{"class":386},[102,161986,260],{"class":108},[102,161988,161989],{"class":278},"\"品类\"",[102,161991,45912],{"class":119},[102,161993,161994,161996,161998,162000,162002,162004,162006],{"class":104,"line":230},[102,161995,155376],{"class":386},[102,161997,260],{"class":108},[102,161999,155362],{"class":119},[102,162001,87675],{"class":386},[102,162003,260],{"class":108},[102,162005,155160],{"class":278},[102,162007,45912],{"class":119},[102,162009,162010],{"class":104,"line":236},[102,162011,390],{"class":119},[102,162013,162014,162017,162020],{"class":104,"line":242},[102,162015,162016],{"class":119},"bar.render(",[102,162018,162019],{"class":278},"\"category_sales.html\"",[102,162021,390],{"class":119},[43,162023,162025],{"id":162024},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,162027,162028],{},"时间线适合展示不同日期、月份、年份的数据变化。",[93,162030,162032],{"className":38243,"code":162031,"language":38245,"meta":98,"style":98},"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",[83,162033,162034,162048,162059,162063,162071,162095,162118,162143,162147,162151,162161,162165,162176,162185,162195,162209,162240,162245,162249],{"__ignoreMap":98},[102,162035,162036,162038,162040,162042,162044,162046],{"class":104,"line":105},[102,162037,38602],{"class":108},[102,162039,155244],{"class":119},[102,162041,38257],{"class":108},[102,162043,155249],{"class":119},[102,162045,39248],{"class":108},[102,162047,155254],{"class":119},[102,162049,162050,162052,162054,162056],{"class":104,"line":116},[102,162051,38602],{"class":108},[102,162053,155103],{"class":119},[102,162055,38257],{"class":108},[102,162057,162058],{"class":119}," Bar, Timeline\n",[102,162060,162061],{"class":104,"line":123},[102,162062,652],{"emptyLinePlaceholder":651},[102,162064,162065,162067,162069],{"class":104,"line":130},[102,162066,109523],{"class":119},[102,162068,260],{"class":108},[102,162070,1077],{"class":119},[102,162072,162073,162076,162079,162081,162083,162085,162087,162089,162091,162093],{"class":104,"line":136},[102,162074,162075],{"class":278},"    \"2024-10-01\"",[102,162077,162078],{"class":119},": {",[102,162080,161508],{"class":278},[102,162082,59302],{"class":119},[102,162084,161517],{"class":187},[102,162086,2571],{"class":119},[102,162088,161538],{"class":278},[102,162090,59302],{"class":119},[102,162092,161547],{"class":187},[102,162094,13739],{"class":119},[102,162096,162097,162100,162102,162104,162106,162108,162110,162112,162114,162116],{"class":104,"line":142},[102,162098,162099],{"class":278},"    \"2024-10-02\"",[102,162101,162078],{"class":119},[102,162103,161508],{"class":278},[102,162105,59302],{"class":119},[102,162107,161576],{"class":187},[102,162109,2571],{"class":119},[102,162111,161538],{"class":278},[102,162113,59302],{"class":119},[102,162115,161605],{"class":187},[102,162117,13739],{"class":119},[102,162119,162120,162123,162125,162127,162129,162132,162134,162136,162138,162141],{"class":104,"line":148},[102,162121,162122],{"class":278},"    \"2024-10-03\"",[102,162124,162078],{"class":119},[102,162126,161508],{"class":278},[102,162128,59302],{"class":119},[102,162130,162131],{"class":187},"17000",[102,162133,2571],{"class":119},[102,162135,161538],{"class":278},[102,162137,59302],{"class":119},[102,162139,162140],{"class":187},"19000",[102,162142,13739],{"class":119},[102,162144,162145],{"class":104,"line":157},[102,162146,301],{"class":119},[102,162148,162149],{"class":104,"line":163},[102,162150,652],{"emptyLinePlaceholder":651},[102,162152,162153,162156,162158],{"class":104,"line":175},[102,162154,162155],{"class":119},"timeline ",[102,162157,260],{"class":108},[102,162159,162160],{"class":119}," Timeline()\n",[102,162162,162163],{"class":104,"line":181},[102,162164,652],{"emptyLinePlaceholder":651},[102,162166,162167,162169,162172,162174],{"class":104,"line":202},[102,162168,11841],{"class":108},[102,162170,162171],{"class":119}," date, category_data ",[102,162173,33908],{"class":108},[102,162175,157013],{"class":119},[102,162177,162178,162181,162183],{"class":104,"line":208},[102,162179,162180],{"class":119},"    bar ",[102,162182,260],{"class":108},[102,162184,161927],{"class":119},[102,162186,162187,162190,162192],{"class":104,"line":214},[102,162188,162189],{"class":119},"    bar.add_xaxis(",[102,162191,161935],{"class":187},[102,162193,162194],{"class":119},"(category_data.keys()))\n",[102,162196,162197,162200,162202,162204,162206],{"class":104,"line":225},[102,162198,162199],{"class":119},"    bar.add_yaxis(",[102,162201,155160],{"class":278},[102,162203,2571],{"class":119},[102,162205,161935],{"class":187},[102,162207,162208],{"class":119},"(category_data.values()))\n",[102,162210,162211,162214,162217,162219,162221,162223,162225,162227,162229,162231,162233,162235,162238],{"class":104,"line":230},[102,162212,162213],{"class":119},"    bar.set_global_opts(",[102,162215,162216],{"class":386},"title_opts",[102,162218,260],{"class":108},[102,162220,155343],{"class":119},[102,162222,59272],{"class":386},[102,162224,260],{"class":108},[102,162226,9097],{"class":108},[102,162228,9288],{"class":278},[102,162230,9918],{"class":187},[102,162232,81791],{"class":119},[102,162234,9967],{"class":187},[102,162236,162237],{"class":278},"销售额\"",[102,162239,38362],{"class":119},[102,162241,162242],{"class":104,"line":236},[102,162243,162244],{"class":119},"    timeline.add(bar, date)\n",[102,162246,162247],{"class":104,"line":242},[102,162248,652],{"emptyLinePlaceholder":651},[102,162250,162251,162254,162257],{"class":104,"line":248},[102,162252,162253],{"class":119},"timeline.render(",[102,162255,162256],{"class":278},"\"timeline_sales.html\"",[102,162258,390],{"class":119},[43,162260,162262],{"id":162261},"_128-绘制地图","12.8 绘制地图",[14,162264,162265],{},"地图适合展示地区数据。",[93,162267,162269],{"className":38243,"code":162268,"language":38245,"meta":98,"style":98},"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",[83,162270,162271,162285,162296,162300,162308,162321,162333,162346,162359,162363,162367,162377,162392,162397,162414,162433,162437],{"__ignoreMap":98},[102,162272,162273,162275,162277,162279,162281,162283],{"class":104,"line":105},[102,162274,38602],{"class":108},[102,162276,155244],{"class":119},[102,162278,38257],{"class":108},[102,162280,155249],{"class":119},[102,162282,39248],{"class":108},[102,162284,155254],{"class":119},[102,162286,162287,162289,162291,162293],{"class":104,"line":116},[102,162288,38602],{"class":108},[102,162290,155103],{"class":119},[102,162292,38257],{"class":108},[102,162294,162295],{"class":119}," Map\n",[102,162297,162298],{"class":104,"line":123},[102,162299,652],{"emptyLinePlaceholder":651},[102,162301,162302,162304,162306],{"class":104,"line":130},[102,162303,109523],{"class":119},[102,162305,260],{"class":108},[102,162307,63312],{"class":119},[102,162309,162310,162313,162315,162317,162319],{"class":104,"line":136},[102,162311,162312],{"class":119},"    (",[102,162314,77134],{"class":278},[102,162316,2571],{"class":119},[102,162318,9840],{"class":187},[102,162320,45912],{"class":119},[102,162322,162323,162325,162327,162329,162331],{"class":104,"line":142},[102,162324,162312],{"class":119},[102,162326,77154],{"class":278},[102,162328,2571],{"class":119},[102,162330,155177],{"class":187},[102,162332,45912],{"class":119},[102,162334,162335,162337,162340,162342,162344],{"class":104,"line":148},[102,162336,162312],{"class":119},[102,162338,162339],{"class":278},"\"广东\"",[102,162341,2571],{"class":119},[102,162343,7866],{"class":187},[102,162345,45912],{"class":119},[102,162347,162348,162350,162353,162355,162357],{"class":104,"line":157},[102,162349,162312],{"class":119},[102,162351,162352],{"class":278},"\"浙江\"",[102,162354,2571],{"class":119},[102,162356,155182],{"class":187},[102,162358,45912],{"class":119},[102,162360,162361],{"class":104,"line":163},[102,162362,41111],{"class":119},[102,162364,162365],{"class":104,"line":175},[102,162366,652],{"emptyLinePlaceholder":651},[102,162368,162369,162372,162374],{"class":104,"line":181},[102,162370,162371],{"class":119},"map_chart ",[102,162373,260],{"class":108},[102,162375,162376],{"class":119}," Map()\n",[102,162378,162379,162382,162384,162387,162390],{"class":104,"line":202},[102,162380,162381],{"class":119},"map_chart.add(",[102,162383,155160],{"class":278},[102,162385,162386],{"class":119},", data, ",[102,162388,162389],{"class":278},"\"china\"",[102,162391,390],{"class":119},[102,162393,162394],{"class":104,"line":208},[102,162395,162396],{"class":119},"map_chart.set_global_opts(\n",[102,162398,162399,162401,162403,162405,162407,162409,162412],{"class":104,"line":214},[102,162400,155338],{"class":386},[102,162402,260],{"class":108},[102,162404,155343],{"class":119},[102,162406,59272],{"class":386},[102,162408,260],{"class":108},[102,162410,162411],{"class":278},"\"地区销售额\"",[102,162413,45912],{"class":119},[102,162415,162416,162419,162421,162424,162427,162429,162431],{"class":104,"line":225},[102,162417,162418],{"class":386},"    visualmap_opts",[102,162420,260],{"class":108},[102,162422,162423],{"class":119},"opts.VisualMapOpts(",[102,162425,162426],{"class":386},"max_",[102,162428,260],{"class":108},[102,162430,7866],{"class":187},[102,162432,45912],{"class":119},[102,162434,162435],{"class":104,"line":230},[102,162436,390],{"class":119},[102,162438,162439,162442,162445],{"class":104,"line":236},[102,162440,162441],{"class":119},"map_chart.render(",[102,162443,162444],{"class":278},"\"map_sales.html\"",[102,162446,390],{"class":119},[14,162448,162449],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[43,162451,162453],{"id":162452},"_129-项目拆分建议","12.9 项目拆分建议",[14,162455,162456],{},"当代码超过一个文件时，可以这样组织：",[93,162458,162461],{"className":162459,"code":162460,"language":6778,"meta":98},[6776],"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",[83,162462,162460],{"__ignoreMap":98},[14,162464,162465],{},"职责：",[87,162467,162468,162474,162480,162486],{},[62,162469,162470,162473],{},[83,162471,162472],{},"main.py","：程序入口。",[62,162475,162476,162479],{},[83,162477,162478],{},"file_utils.py","：读写 JSON。",[62,162481,162482,162485],{},[83,162483,162484],{},"sales_service.py","：统计销售数据。",[62,162487,162488,162491],{},[83,162489,162490],{},"chart_builder.py","：生成图表。",[43,162493,162495],{"id":162494},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,162497,162498],{},"语法基础：",[87,162500,162501,162504,162507,162510],{},[62,162502,162503],{},"会写变量、注释、输入输出。",[62,162505,162506],{},"会使用 int、float、str、bool。",[62,162508,162509],{},"会做类型转换。",[62,162511,162512],{},"会使用 f-string 格式化输出。",[14,162514,162515],{},"流程控制：",[87,162517,162518,162524,162530,162538],{},[62,162519,162520,162521,36250],{},"会写 ",[83,162522,162523],{},"if elif else",[62,162525,162520,162526,108883,162528,36250],{},[83,162527,116528],{},[83,162529,11841],{},[62,162531,162532,162533,108883,162535,36250],{},"理解 ",[83,162534,10892],{},[83,162536,162537],{},"continue",[62,162539,162540],{},"能写嵌套循环。",[14,162542,162543],{},"函数：",[87,162545,162546,162549,162552,162555],{},[62,162547,162548],{},"会定义和调用函数。",[62,162550,162551],{},"理解参数和返回值。",[62,162553,162554],{},"知道局部变量和全局变量。",[62,162556,162557],{},"会使用默认参数、关键字参数、不定长参数。",[14,162559,162560],{},"容器：",[87,162562,162563,162566,162569,162572,162575],{},[62,162564,162565],{},"会使用列表增删改查。",[62,162567,162568],{},"会遍历列表、字典。",[62,162570,162571],{},"会使用切片。",[62,162573,162574],{},"会用集合去重。",[62,162576,162577],{},"会处理列表嵌套字典。",[14,162579,162580],{},"文件和模块：",[87,162582,162583,162586,162589,162592,162595],{},[62,162584,162585],{},"会读写文本文件。",[62,162587,162588],{},"会读写 JSON。",[62,162590,162591],{},"会捕获常见异常。",[62,162593,162594],{},"会导入模块和第三方包。",[62,162596,162597],{},"会创建简单包结构。",[14,162599,162600],{},"项目能力：",[87,162602,162603,162606,162609,162612,162615],{},[62,162604,162605],{},"能把代码拆成函数。",[62,162607,162608],{},"能把数据保存到文件。",[62,162610,162611],{},"能处理用户输入错误。",[62,162613,162614],{},"能写一个完整菜单程序。",[62,162616,162617],{},"能用 pyecharts 生成图表。",[43,162619,162621],{"id":162620},"_1211-推荐练习顺序","12.11 推荐练习顺序",[87,162623,162624,162627,162630,162633,162636,162639,162642,162645],{},[62,162625,162626],{},"猜数字游戏。",[62,162628,162629],{},"ATM 菜单程序。",[62,162631,162632],{},"学生成绩统计。",[62,162634,162635],{},"学生管理系统函数版。",[62,162637,162638],{},"学生管理系统文件持久化版。",[62,162640,162641],{},"学生管理系统面向对象版。",[62,162643,162644],{},"销售数据统计。",[62,162646,162647],{},"销售数据可视化。",[43,162649,162651],{"id":162650},"_1212-常见学习误区","12.12 常见学习误区",[87,162653,162654,162657,162660,162663,162666,162669,162672],{},[62,162655,162656],{},"只看视频不敲代码。",[62,162658,162659],{},"一报错就复制错误去搜，不先读报错位置。",[62,162661,162662],{},"变量名随便写，后续自己看不懂。",[62,162664,162665],{},"所有代码都写在一个文件一个函数里。",[62,162667,162668],{},"不保存练习代码，复习时没有材料。",[62,162670,162671],{},"还没掌握列表字典就急着学框架。",[62,162673,162674],{},"不会读官方文档，只依赖教程。",[43,162676,162678],{"id":162677},"_1213-如何读报错","12.13 如何读报错",[14,162680,162681],{},"报错通常从下往上看最后几行。",[14,162683,619],{},[93,162685,162688],{"className":162686,"code":162687,"language":6778,"meta":98},[6776],"ValueError: invalid literal for int() with base 10: 'abc'\n",[83,162689,162687],{"__ignoreMap":98},[14,162691,32464],{},[87,162693,162694,162700,162710],{},[62,162695,162696,162697,36250],{},"异常类型是 ",[83,162698,162699],{},"ValueError",[62,162701,115210,162702,162705,162706,162709],{},[83,162703,162704],{},"int()"," 无法把 ",[83,162707,162708],{},"'abc'"," 转成整数。",[62,162711,162712],{},"应该检查输入内容或增加异常处理。",[14,162714,162715],{},"再看文件名和行号：",[93,162717,162720],{"className":162718,"code":162719,"language":6778,"meta":98},[6776],"File \"main.py\", line 10, in \u003Cmodule>\n",[83,162721,162719],{"__ignoreMap":98},[14,162723,162724,162725,162727],{},"表示错误发生在 ",[83,162726,162472],{}," 第 10 行。",[43,162729,162731],{"id":162730},"_1214-后续学习方向","12.14 后续学习方向",[14,162733,162734],{},"Python 基础完成后，可以按兴趣选择方向：",[87,162736,162737,162749,162758,162770,162781,162790,162800],{},[62,162738,162739,162740,9250,162743,9250,162746,36250],{},"自动化办公：",[83,162741,162742],{},"openpyxl",[83,162744,162745],{},"python-docx",[83,162747,162748],{},"pdfplumber",[62,162750,162751,162752,9250,162754,9250,162756,36250],{},"数据分析：",[83,162753,108491],{},[83,162755,154050],{},[83,162757,154058],{},[62,162759,162760,162761,9250,162764,9250,162767,36250],{},"Web 后端：",[83,162762,162763],{},"Flask",[83,162765,162766],{},"FastAPI",[83,162768,162769],{},"Django",[62,162771,162772,162773,9250,162775,9250,162778,36250],{},"爬虫：",[83,162774,154035],{},[83,162776,162777],{},"BeautifulSoup",[83,162779,162780],{},"Scrapy",[62,162782,162783,162784,9250,162786,162789],{},"测试开发：",[83,162785,154082],{},[83,162787,162788],{},"selenium","、接口测试。",[62,162791,162792,162793,9250,162795,9250,162797,36250],{},"人工智能：",[83,162794,108491],{},[83,162796,154050],{},[83,162798,162799],{},"pytorch",[62,162801,162802,162803,9250,162805,9250,162808,36250],{},"运维脚本：",[83,162804,153651],{},[83,162806,162807],{},"subprocess",[83,162809,162810],{},"paramiko",[14,162812,162813],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[43,162815,162817],{"id":162816},"_1215-结课练习","12.15 结课练习",[87,162819,162820,162823,162826,162829,162832,162835,162838,162841],{},[62,162821,162822],{},"完成函数版学生管理系统。",[62,162824,162825],{},"给学生管理系统增加 JSON 持久化。",[62,162827,162828],{},"给学生管理系统增加异常处理。",[62,162830,162831],{},"把学生管理系统改成面向对象版。",[62,162833,162834],{},"使用 pyecharts 绘制学生成绩柱状图。",[62,162836,162837],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[62,162839,162840],{},"按品类统计销售额并绘制柱状图。",[62,162842,162843],{},"写一份自己的 Python 学习路线图。",[8955,162845,162846],{},"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":98,"searchDepth":116,"depth":116,"links":162848},[162849,162850,162853,162854,162855,162861,162862,162863,162864,162865,162866,162867,162868,162869,162870],{"id":159565,"depth":116,"text":159566},{"id":159615,"depth":116,"text":159616,"children":162851},[162852],{"id":159619,"depth":123,"text":159620},{"id":159658,"depth":116,"text":159659},{"id":161132,"depth":116,"text":161133},{"id":161470,"depth":116,"text":161471,"children":162856},[162857,162858,162859,162860],{"id":161474,"depth":123,"text":161475},{"id":161614,"depth":123,"text":161615},{"id":161704,"depth":123,"text":161705},{"id":161790,"depth":123,"text":161791},{"id":161831,"depth":116,"text":161832},{"id":162024,"depth":116,"text":162025},{"id":162261,"depth":116,"text":162262},{"id":162452,"depth":116,"text":162453},{"id":162494,"depth":116,"text":162495},{"id":162620,"depth":116,"text":162621},{"id":162650,"depth":116,"text":162651},{"id":162677,"depth":116,"text":162678},{"id":162730,"depth":116,"text":162731},{"id":162816,"depth":116,"text":162817},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":159557,"description":31240},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":162877,"title":162878,"body":162879,"description":31240,"extension":8978,"meta":165348,"navigation":651,"path":165349,"seo":165350,"stem":165351,"__hash__":165352},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":162880,"toc":165323},[162881,162884,162888,162891,162894,162914,162917,162940,162943,162946,162968,162971,162993,162997,163000,163040,163043,163164,163168,163171,163211,163214,163238,163241,163245,163248,163262,163295,163298,163333,163336,163359,163362,163395,163398,163400,163406,163481,163484,163490,163507,163547,163551,163554,163600,163602,163640,163643,163678,163681,163716,163719,163751,163754,163773,163777,163781,163894,163896,163971,163975,164021,164024,164050,164059,164063,164066,164129,164137,164165,164169,164209,164274,164278,164281,164320,164323,164368,164371,164432,164436,164463,164466,164494,164497,164501,164505,164570,164573,164611,164614,164646,164650,164749,164753,164756,164829,164832,164880,164884,164890,164930,164933,164980,164983,165032,165036,165038,165052,165054,165235,165239,165266,165286,165293,165297,165314,165320],[10,162882,162878],{"id":162883},"_2-基础语法变量与字符串",[43,162885,162887],{"id":162886},"_21-注释","2.1 注释",[14,162889,162890],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,162892,162893],{},"单行注释：",[93,162895,162897],{"className":38243,"code":162896,"language":38245,"meta":98,"style":98},"# 这是单行注释\nprint(\"hello\")\n",[83,162898,162899,162904],{"__ignoreMap":98},[102,162900,162901],{"class":104,"line":105},[102,162902,162903],{"class":126},"# 这是单行注释\n",[102,162905,162906,162908,162910,162912],{"class":104,"line":116},[102,162907,38280],{"class":187},[102,162909,380],{"class":119},[102,162911,14642],{"class":278},[102,162913,390],{"class":119},[14,162915,162916],{},"多行说明常用三引号：",[93,162918,162920],{"className":38243,"code":162919,"language":38245,"meta":98,"style":98},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[83,162921,162922,162926,162931,162936],{"__ignoreMap":98},[102,162923,162924],{"class":104,"line":105},[102,162925,103563],{"class":278},[102,162927,162928],{"class":104,"line":116},[102,162929,162930],{"class":278},"这是多行说明。\n",[102,162932,162933],{"class":104,"line":123},[102,162934,162935],{"class":278},"常用于文件顶部说明、函数说明等。\n",[102,162937,162938],{"class":104,"line":130},[102,162939,103563],{"class":278},[14,162941,162942],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,162944,162945],{},"不好：",[93,162947,162949],{"className":38243,"code":162948,"language":38245,"meta":98,"style":98},"# age 加 1\nage = age + 1\n",[83,162950,162951,162956],{"__ignoreMap":98},[102,162952,162953],{"class":104,"line":105},[102,162954,162955],{"class":126},"# age 加 1\n",[102,162957,162958,162960,162962,162964,162966],{"class":104,"line":116},[102,162959,154411],{"class":119},[102,162961,260],{"class":108},[102,162963,1216],{"class":119},[102,162965,1702],{"class":108},[102,162967,63564],{"class":187},[14,162969,162970],{},"较好：",[93,162972,162974],{"className":38243,"code":162973,"language":38245,"meta":98,"style":98},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[83,162975,162976,162981],{"__ignoreMap":98},[102,162977,162978],{"class":104,"line":105},[102,162979,162980],{"class":126},"# 用户过完生日后，年龄增加一岁\n",[102,162982,162983,162985,162987,162989,162991],{"class":104,"line":116},[102,162984,154411],{"class":119},[102,162986,260],{"class":108},[102,162988,1216],{"class":119},[102,162990,1702],{"class":108},[102,162992,63564],{"class":187},[43,162994,162996],{"id":162995},"_22-字面量","2.2 字面量",[14,162998,162999],{},"字面量就是代码中直接写出来的数据。",[93,163001,163003],{"className":38243,"code":163002,"language":38245,"meta":98,"style":98},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[83,163004,163005,163012,163019,163026,163033],{"__ignoreMap":98},[102,163006,163007,163009],{"class":104,"line":105},[102,163008,5569],{"class":187},[102,163010,163011],{"class":126},"          # 整数\n",[102,163013,163014,163016],{"class":104,"line":116},[102,163015,9094],{"class":187},[102,163017,163018],{"class":126},"         # 小数\n",[102,163020,163021,163023],{"class":104,"line":123},[102,163022,14642],{"class":278},[102,163024,163025],{"class":126},"      # 字符串\n",[102,163027,163028,163030],{"class":104,"line":130},[102,163029,39341],{"class":187},[102,163031,163032],{"class":126},"         # 布尔值\n",[102,163034,163035,163037],{"class":104,"line":136},[102,163036,103551],{"class":187},[102,163038,163039],{"class":126},"         # 空值\n",[14,163041,163042],{},"常见字面量类型：",[9177,163044,163045,163055],{},[9180,163046,163047],{},[9183,163048,163049,163051,163053],{},[9186,163050,31601],{},[9186,163052,35357],{},[9186,163054,33734],{},[9223,163056,163057,163068,163079,163090,163102,163114,163126,163139,163151],{},[9183,163058,163059,163061,163065],{},[9228,163060,217],{},[9228,163062,163063],{},[83,163064,5569],{},[9228,163066,163067],{},"整数",[9183,163069,163070,163072,163076],{},[9228,163071,9086],{},[9228,163073,163074],{},[83,163075,9094],{},[9228,163077,163078],{},"浮点数",[9183,163080,163081,163083,163087],{},[9228,163082,10185],{},[9228,163084,163085],{},[83,163086,14642],{},[9228,163088,163089],{},"字符串",[9183,163091,163092,163094,163100],{},[9228,163093,1998],{},[9228,163095,163096,9250,163098],{},[83,163097,39341],{},[83,163099,41852],{},[9228,163101,73880],{},[9183,163103,163104,163107,163111],{},[9228,163105,163106],{},"NoneType",[9228,163108,163109],{},[83,163110,103551],{},[9228,163112,163113],{},"空值",[9183,163115,163116,163118,163123],{},[9228,163117,161935],{},[9228,163119,163120],{},[83,163121,163122],{},"[1, 2, 3]",[9228,163124,163125],{},"列表",[9183,163127,163128,163131,163136],{},[9228,163129,163130],{},"tuple",[9228,163132,163133],{},[83,163134,163135],{},"(1, 2, 3)",[9228,163137,163138],{},"元组",[9183,163140,163141,163143,163148],{},[9228,163142,122411],{},[9228,163144,163145],{},[83,163146,163147],{},"{\"name\": \"张三\"}",[9228,163149,163150],{},"字典",[9183,163152,163153,163156,163161],{},[9228,163154,163155],{},"set",[9228,163157,163158],{},[83,163159,163160],{},"{1, 2, 3}",[9228,163162,163163],{},"集合",[43,163165,163167],{"id":163166},"_23-变量","2.3 变量",[14,163169,163170],{},"变量是保存数据的名字。",[93,163172,163174],{"className":38243,"code":163173,"language":38245,"meta":98,"style":98},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[83,163175,163176,163184,163192,163202],{"__ignoreMap":98},[102,163177,163178,163180,163182],{"class":104,"line":105},[102,163179,154401],{"class":119},[102,163181,260],{"class":108},[102,163183,157218],{"class":278},[102,163185,163186,163188,163190],{"class":104,"line":116},[102,163187,154411],{"class":119},[102,163189,260],{"class":108},[102,163191,154416],{"class":187},[102,163193,163194,163197,163199],{"class":104,"line":123},[102,163195,163196],{"class":119},"height ",[102,163198,260],{"class":108},[102,163200,163201],{"class":187}," 1.75\n",[102,163203,163204,163207,163209],{"class":104,"line":130},[102,163205,163206],{"class":119},"is_student ",[102,163208,260],{"class":108},[102,163210,161464],{"class":187},[14,163212,163213],{},"Python 的变量不需要提前声明类型：",[93,163215,163217],{"className":38243,"code":163216,"language":38245,"meta":98,"style":98},"score = 100\nscore = \"满分\"\n",[83,163218,163219,163229],{"__ignoreMap":98},[102,163220,163221,163224,163226],{"class":104,"line":105},[102,163222,163223],{"class":119},"score ",[102,163225,260],{"class":108},[102,163227,163228],{"class":187}," 100\n",[102,163230,163231,163233,163235],{"class":104,"line":116},[102,163232,163223],{"class":119},[102,163234,260],{"class":108},[102,163236,163237],{"class":278}," \"满分\"\n",[14,163239,163240],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[43,163242,163244],{"id":163243},"_24-变量命名规则","2.4 变量命名规则",[14,163246,163247],{},"硬性规则：",[87,163249,163250,163253,163256,163259],{},[62,163251,163252],{},"只能由字母、数字、下划线组成。",[62,163254,163255],{},"不能以数字开头。",[62,163257,163258],{},"不能使用 Python 关键字。",[62,163260,163261],{},"区分大小写。",[93,163263,163265],{"className":38243,"code":163264,"language":38245,"meta":98,"style":98},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[83,163266,163267,163276,163285],{"__ignoreMap":98},[102,163268,163269,163272,163274],{"class":104,"line":105},[102,163270,163271],{"class":119},"user_name ",[102,163273,260],{"class":108},[102,163275,154406],{"class":278},[102,163277,163278,163281,163283],{"class":104,"line":116},[102,163279,163280],{"class":119},"age2 ",[102,163282,260],{"class":108},[102,163284,154416],{"class":187},[102,163286,163287,163290,163292],{"class":104,"line":123},[102,163288,163289],{"class":119},"_token ",[102,163291,260],{"class":108},[102,163293,163294],{"class":278}," \"abc\"\n",[14,163296,163297],{},"错误写法：",[93,163299,163301],{"className":38243,"code":163300,"language":38245,"meta":98,"style":98},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[83,163302,163303,163312,163324],{"__ignoreMap":98},[102,163304,163305,163308,163310],{"class":104,"line":105},[102,163306,163307],{"class":85268},"2age",[102,163309,22296],{"class":108},[102,163311,154416],{"class":187},[102,163313,163314,163316,163318,163320,163322],{"class":104,"line":116},[102,163315,139449],{"class":119},[102,163317,2833],{"class":108},[102,163319,154401],{"class":119},[102,163321,260],{"class":108},[102,163323,154406],{"class":278},[102,163325,163326,163328,163330],{"class":104,"line":123},[102,163327,109],{"class":108},[102,163329,22296],{"class":108},[102,163331,163332],{"class":278}," \"一班\"\n",[14,163334,163335],{},"查看关键字：",[93,163337,163339],{"className":38243,"code":163338,"language":38245,"meta":98,"style":98},"import keyword\n\nprint(keyword.kwlist)\n",[83,163340,163341,163348,163352],{"__ignoreMap":98},[102,163342,163343,163345],{"class":104,"line":105},[102,163344,38257],{"class":108},[102,163346,163347],{"class":119}," keyword\n",[102,163349,163350],{"class":104,"line":116},[102,163351,652],{"emptyLinePlaceholder":651},[102,163353,163354,163356],{"class":104,"line":123},[102,163355,38280],{"class":187},[102,163357,163358],{"class":119},"(keyword.kwlist)\n",[14,163360,163361],{},"推荐命名风格：",[93,163363,163365],{"className":38243,"code":163364,"language":38245,"meta":98,"style":98},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[83,163366,163367,163376,163386],{"__ignoreMap":98},[102,163368,163369,163372,163374],{"class":104,"line":105},[102,163370,163371],{"class":119},"student_name ",[102,163373,260],{"class":108},[102,163375,157218],{"class":278},[102,163377,163378,163381,163383],{"class":104,"line":116},[102,163379,163380],{"class":119},"total_price ",[102,163382,260],{"class":108},[102,163384,163385],{"class":187}," 99.8\n",[102,163387,163388,163391,163393],{"class":104,"line":123},[102,163389,163390],{"class":119},"is_finished ",[102,163392,260],{"class":108},[102,163394,133672],{"class":187},[14,163396,163397],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[43,163399,58597],{"id":58596},[14,163401,112231,163402,163405],{},[83,163403,163404],{},"type()"," 查看数据类型：",[93,163407,163409],{"className":38243,"code":163408,"language":38245,"meta":98,"style":98},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[83,163410,163411,163425,163439,163453,163467],{"__ignoreMap":98},[102,163412,163413,163415,163417,163419,163421,163423],{"class":104,"line":105},[102,163414,38280],{"class":187},[102,163416,380],{"class":119},[102,163418,110972],{"class":187},[102,163420,380],{"class":119},[102,163422,5569],{"class":187},[102,163424,38362],{"class":119},[102,163426,163427,163429,163431,163433,163435,163437],{"class":104,"line":116},[102,163428,38280],{"class":187},[102,163430,380],{"class":119},[102,163432,110972],{"class":187},[102,163434,380],{"class":119},[102,163436,9094],{"class":187},[102,163438,38362],{"class":119},[102,163440,163441,163443,163445,163447,163449,163451],{"class":104,"line":123},[102,163442,38280],{"class":187},[102,163444,380],{"class":119},[102,163446,110972],{"class":187},[102,163448,380],{"class":119},[102,163450,14642],{"class":278},[102,163452,38362],{"class":119},[102,163454,163455,163457,163459,163461,163463,163465],{"class":104,"line":130},[102,163456,38280],{"class":187},[102,163458,380],{"class":119},[102,163460,110972],{"class":187},[102,163462,380],{"class":119},[102,163464,39341],{"class":187},[102,163466,38362],{"class":119},[102,163468,163469,163471,163473,163475,163477,163479],{"class":104,"line":136},[102,163470,38280],{"class":187},[102,163472,380],{"class":119},[102,163474,110972],{"class":187},[102,163476,380],{"class":119},[102,163478,103551],{"class":187},[102,163480,38362],{"class":119},[14,163482,163483],{},"输出类似：",[93,163485,163488],{"className":163486,"code":163487,"language":6778,"meta":98},[6776],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[83,163489,163487],{"__ignoreMap":98},[14,163491,7501,163492,115148,163494,163496,163497,163499,163500,7101,163502,163499,163504,163506],{},[83,163493,1998],{},[83,163495,217],{}," 的子类，",[83,163498,39341],{}," 可以当作 ",[83,163501,7039],{},[83,163503,41852],{},[83,163505,8423],{},"，但业务代码中不要滥用。",[93,163508,163510],{"className":38243,"code":163509,"language":38245,"meta":98,"style":98},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[83,163511,163512,163530],{"__ignoreMap":98},[102,163513,163514,163516,163518,163520,163522,163524,163527],{"class":104,"line":105},[102,163515,38280],{"class":187},[102,163517,380],{"class":119},[102,163519,39341],{"class":187},[102,163521,53431],{"class":108},[102,163523,32983],{"class":187},[102,163525,163526],{"class":119},")   ",[102,163528,163529],{"class":126},"# 2\n",[102,163531,163532,163534,163536,163538,163540,163542,163544],{"class":104,"line":116},[102,163533,38280],{"class":187},[102,163535,380],{"class":119},[102,163537,41852],{"class":187},[102,163539,53431],{"class":108},[102,163541,32983],{"class":187},[102,163543,53673],{"class":119},[102,163545,163546],{"class":126},"# 1\n",[43,163548,163550],{"id":163549},"_26-类型转换","2.6 类型转换",[14,163552,163553],{},"常用转换函数：",[93,163555,163557],{"className":38243,"code":163556,"language":38245,"meta":98,"style":98},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[83,163558,163559,163569,163580,163590],{"__ignoreMap":98},[102,163560,163561,163563,163565,163567],{"class":104,"line":105},[102,163562,217],{"class":187},[102,163564,380],{"class":119},[102,163566,62181],{"class":278},[102,163568,390],{"class":119},[102,163570,163571,163573,163575,163578],{"class":104,"line":116},[102,163572,9086],{"class":187},[102,163574,380],{"class":119},[102,163576,163577],{"class":278},"\"3.14\"",[102,163579,390],{"class":119},[102,163581,163582,163584,163586,163588],{"class":104,"line":123},[102,163583,10185],{"class":187},[102,163585,380],{"class":119},[102,163587,5569],{"class":187},[102,163589,390],{"class":119},[102,163591,163592,163594,163596,163598],{"class":104,"line":130},[102,163593,1998],{"class":187},[102,163595,380],{"class":119},[102,163597,7039],{"class":187},[102,163599,390],{"class":119},[14,163601,619],{},[93,163603,163605],{"className":38243,"code":163604,"language":38245,"meta":98,"style":98},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[83,163606,163607,163616,163627],{"__ignoreMap":98},[102,163608,163609,163611,163613],{"class":104,"line":105},[102,163610,154411],{"class":119},[102,163612,260],{"class":108},[102,163614,163615],{"class":278}," \"18\"\n",[102,163617,163618,163620,163622,163624],{"class":104,"line":116},[102,163619,154411],{"class":119},[102,163621,260],{"class":108},[102,163623,6392],{"class":187},[102,163625,163626],{"class":119},"(age)\n",[102,163628,163629,163631,163634,163636,163638],{"class":104,"line":123},[102,163630,38280],{"class":187},[102,163632,163633],{"class":119},"(age ",[102,163635,1702],{"class":108},[102,163637,32983],{"class":187},[102,163639,390],{"class":119},[14,163641,163642],{},"输入得到的内容永远是字符串：",[93,163644,163646],{"className":38243,"code":163645,"language":38245,"meta":98,"style":98},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[83,163647,163648,163664],{"__ignoreMap":98},[102,163649,163650,163653,163655,163657,163659,163662],{"class":104,"line":105},[102,163651,163652],{"class":119},"num ",[102,163654,260],{"class":108},[102,163656,68470],{"class":187},[102,163658,380],{"class":119},[102,163660,163661],{"class":278},"\"请输入数字:\"",[102,163663,390],{"class":119},[102,163665,163666,163668,163670,163672,163675],{"class":104,"line":116},[102,163667,38280],{"class":187},[102,163669,380],{"class":119},[102,163671,110972],{"class":187},[102,163673,163674],{"class":119},"(num))  ",[102,163676,163677],{"class":126},"# str\n",[14,163679,163680],{},"如果要做数学运算，必须转换：",[93,163682,163684],{"className":38243,"code":163683,"language":38245,"meta":98,"style":98},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[83,163685,163686,163704],{"__ignoreMap":98},[102,163687,163688,163690,163692,163694,163696,163698,163700,163702],{"class":104,"line":105},[102,163689,163652],{"class":119},[102,163691,260],{"class":108},[102,163693,6392],{"class":187},[102,163695,380],{"class":119},[102,163697,61686],{"class":187},[102,163699,380],{"class":119},[102,163701,163661],{"class":278},[102,163703,38362],{"class":119},[102,163705,163706,163708,163710,163712,163714],{"class":104,"line":116},[102,163707,38280],{"class":187},[102,163709,53484],{"class":119},[102,163711,1702],{"class":108},[102,163713,989],{"class":187},[102,163715,390],{"class":119},[14,163717,163718],{},"常见错误：",[93,163720,163722],{"className":38243,"code":163721,"language":38245,"meta":98,"style":98},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[83,163723,163724,163737],{"__ignoreMap":98},[102,163725,163726,163728,163730,163732,163734],{"class":104,"line":105},[102,163727,217],{"class":187},[102,163729,380],{"class":119},[102,163731,163577],{"class":278},[102,163733,163526],{"class":119},[102,163735,163736],{"class":126},"# 错误\n",[102,163738,163739,163741,163743,163746,163749],{"class":104,"line":116},[102,163740,217],{"class":187},[102,163742,380],{"class":119},[102,163744,163745],{"class":278},"\"abc\"",[102,163747,163748],{"class":119},")    ",[102,163750,163736],{"class":126},[14,163752,163753],{},"正确写法：",[93,163755,163757],{"className":38243,"code":163756,"language":38245,"meta":98,"style":98},"num = float(\"3.14\")\n",[83,163758,163759],{"__ignoreMap":98},[102,163760,163761,163763,163765,163767,163769,163771],{"class":104,"line":105},[102,163762,163652],{"class":119},[102,163764,260],{"class":108},[102,163766,117662],{"class":187},[102,163768,380],{"class":119},[102,163770,163577],{"class":278},[102,163772,390],{"class":119},[43,163774,163776],{"id":163775},"_27-运算符","2.7 运算符",[48,163778,163780],{"id":163779},"_271-算术运算符","2.7.1 算术运算符",[9177,163782,163783,163794],{},[9180,163784,163785],{},[9183,163786,163787,163790,163792],{},[9186,163788,163789],{},"运算符",[9186,163791,33734],{},[9186,163793,35357],{},[9223,163795,163796,163810,163824,163838,163852,163866,163880],{},[9183,163797,163798,163802,163805],{},[9228,163799,163800],{},[83,163801,1702],{},[9228,163803,163804],{},"加法",[9228,163806,163807],{},[83,163808,163809],{},"1 + 2",[9183,163811,163812,163816,163819],{},[9228,163813,163814],{},[83,163815,2833],{},[9228,163817,163818],{},"减法",[9228,163820,163821],{},[83,163822,163823],{},"5 - 3",[9183,163825,163826,163830,163833],{},[9228,163827,163828],{},[83,163829,191],{},[9228,163831,163832],{},"乘法",[9228,163834,163835],{},[83,163836,163837],{},"2 * 3",[9183,163839,163840,163844,163847],{},[9228,163841,163842],{},[83,163843,9611],{},[9228,163845,163846],{},"除法，结果是浮点数",[9228,163848,163849],{},[83,163850,163851],{},"5 \u002F 2",[9183,163853,163854,163858,163861],{},[9228,163855,163856],{},[83,163857,41194],{},[9228,163859,163860],{},"整除",[9228,163862,163863],{},[83,163864,163865],{},"5 \u002F\u002F 2",[9183,163867,163868,163872,163875],{},[9228,163869,163870],{},[83,163871,9363],{},[9228,163873,163874],{},"取余",[9228,163876,163877],{},[83,163878,163879],{},"5 % 2",[9183,163881,163882,163886,163889],{},[9228,163883,163884],{},[83,163885,19403],{},[9228,163887,163888],{},"幂运算",[9228,163890,163891],{},[83,163892,163893],{},"2 ** 3",[14,163895,619],{},[93,163897,163899],{"className":38243,"code":163898,"language":38245,"meta":98,"style":98},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[83,163900,163901,163919,163936,163953],{"__ignoreMap":98},[102,163902,163903,163905,163907,163909,163912,163914,163916],{"class":104,"line":105},[102,163904,38280],{"class":187},[102,163906,380],{"class":119},[102,163908,9354],{"class":187},[102,163910,163911],{"class":108}," \u002F",[102,163913,188],{"class":187},[102,163915,163526],{"class":119},[102,163917,163918],{"class":126},"# 2.5\n",[102,163920,163921,163923,163925,163927,163930,163932,163934],{"class":104,"line":116},[102,163922,38280],{"class":187},[102,163924,380],{"class":119},[102,163926,9354],{"class":187},[102,163928,163929],{"class":108}," \u002F\u002F",[102,163931,188],{"class":187},[102,163933,53673],{"class":119},[102,163935,163529],{"class":126},[102,163937,163938,163940,163942,163944,163947,163949,163951],{"class":104,"line":123},[102,163939,38280],{"class":187},[102,163941,380],{"class":119},[102,163943,9354],{"class":187},[102,163945,163946],{"class":108}," %",[102,163948,188],{"class":187},[102,163950,163526],{"class":119},[102,163952,163546],{"class":126},[102,163954,163955,163957,163959,163961,163964,163966,163968],{"class":104,"line":130},[102,163956,38280],{"class":187},[102,163958,380],{"class":119},[102,163960,7044],{"class":187},[102,163962,163963],{"class":108}," **",[102,163965,85935],{"class":187},[102,163967,53673],{"class":119},[102,163969,163970],{"class":126},"# 8\n",[48,163972,163974],{"id":163973},"_272-赋值运算符","2.7.2 赋值运算符",[93,163976,163978],{"className":38243,"code":163977,"language":38245,"meta":98,"style":98},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[83,163979,163980,163988,163996,164004,164012],{"__ignoreMap":98},[102,163981,163982,163984,163986],{"class":104,"line":105},[102,163983,163652],{"class":119},[102,163985,260],{"class":108},[102,163987,66293],{"class":187},[102,163989,163990,163992,163994],{"class":104,"line":116},[102,163991,163652],{"class":119},[102,163993,18244],{"class":108},[102,163995,62292],{"class":187},[102,163997,163998,164000,164002],{"class":104,"line":123},[102,163999,163652],{"class":119},[102,164001,158117],{"class":108},[102,164003,55588],{"class":187},[102,164005,164006,164008,164010],{"class":104,"line":130},[102,164007,163652],{"class":119},[102,164009,145013],{"class":108},[102,164011,127901],{"class":187},[102,164013,164014,164016,164019],{"class":104,"line":136},[102,164015,163652],{"class":119},[102,164017,164018],{"class":108},"\u002F=",[102,164020,55588],{"class":187},[14,164022,164023],{},"等价关系：",[93,164025,164027],{"className":38243,"code":164026,"language":38245,"meta":98,"style":98},"num += 1\nnum = num + 1\n",[83,164028,164029,164037],{"__ignoreMap":98},[102,164030,164031,164033,164035],{"class":104,"line":105},[102,164032,163652],{"class":119},[102,164034,18244],{"class":108},[102,164036,63564],{"class":187},[102,164038,164039,164041,164043,164046,164048],{"class":104,"line":116},[102,164040,163652],{"class":119},[102,164042,260],{"class":108},[102,164044,164045],{"class":119}," num ",[102,164047,1702],{"class":108},[102,164049,63564],{"class":187},[14,164051,164052,164053,108883,164056,36250],{},"Python 没有 ",[83,164054,164055],{},"num++",[83,164057,164058],{},"num--",[48,164060,164062],{"id":164061},"_273-比较运算符","2.7.3 比较运算符",[14,164064,164065],{},"比较运算结果是布尔值。",[93,164067,164069],{"className":38243,"code":164068,"language":38245,"meta":98,"style":98},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[83,164070,164071,164085,164100,164114],{"__ignoreMap":98},[102,164072,164073,164075,164077,164079,164081,164083],{"class":104,"line":105},[102,164074,38280],{"class":187},[102,164076,380],{"class":119},[102,164078,263],{"class":187},[102,164080,34087],{"class":108},[102,164082,10987],{"class":187},[102,164084,390],{"class":119},[102,164086,164087,164089,164091,164093,164096,164098],{"class":104,"line":116},[102,164088,38280],{"class":187},[102,164090,380],{"class":119},[102,164092,263],{"class":187},[102,164094,164095],{"class":108}," >=",[102,164097,989],{"class":187},[102,164099,390],{"class":119},[102,164101,164102,164104,164106,164108,164110,164112],{"class":104,"line":123},[102,164103,38280],{"class":187},[102,164105,380],{"class":119},[102,164107,263],{"class":187},[102,164109,109424],{"class":108},[102,164111,10922],{"class":187},[102,164113,390],{"class":119},[102,164115,164116,164118,164120,164122,164125,164127],{"class":104,"line":130},[102,164117,38280],{"class":187},[102,164119,380],{"class":119},[102,164121,263],{"class":187},[102,164123,164124],{"class":108}," !=",[102,164126,10922],{"class":187},[102,164128,390],{"class":119},[14,164130,164131,164132,164134,164135,36250],{},"注意：判断相等用 ",[83,164133,1876],{},"，赋值用 ",[83,164136,260],{},[93,164138,164140],{"className":38243,"code":164139,"language":38245,"meta":98,"style":98},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[83,164141,164142,164154],{"__ignoreMap":98},[102,164143,164144,164146,164148,164151],{"class":104,"line":105},[102,164145,154411],{"class":119},[102,164147,260],{"class":108},[102,164149,164150],{"class":187}," 18",[102,164152,164153],{"class":126},"       # 赋值\n",[102,164155,164156,164158,164160,164162],{"class":104,"line":116},[102,164157,154411],{"class":119},[102,164159,1876],{"class":108},[102,164161,164150],{"class":187},[102,164163,164164],{"class":126},"      # 判断是否相等\n",[48,164166,164168],{"id":164167},"_274-逻辑运算符","2.7.4 逻辑运算符",[9177,164170,164171,164179],{},[9180,164172,164173],{},[9183,164174,164175,164177],{},[9186,164176,163789],{},[9186,164178,33734],{},[9223,164180,164181,164190,164199],{},[9183,164182,164183,164187],{},[9228,164184,164185],{},[83,164186,38327],{},[9228,164188,164189],{},"并且",[9183,164191,164192,164196],{},[9228,164193,164194],{},[83,164195,122955],{},[9228,164197,164198],{},"或者",[9183,164200,164201,164206],{},[9228,164202,164203],{},[83,164204,164205],{},"not",[9228,164207,164208],{},"取反",[93,164210,164212],{"className":38243,"code":164211,"language":38245,"meta":98,"style":98},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[83,164213,164214,164222,164231,164235,164250,164264],{"__ignoreMap":98},[102,164215,164216,164218,164220],{"class":104,"line":105},[102,164217,154411],{"class":119},[102,164219,260],{"class":108},[102,164221,95930],{"class":187},[102,164223,164224,164227,164229],{"class":104,"line":116},[102,164225,164226],{"class":119},"has_ticket ",[102,164228,260],{"class":108},[102,164230,161464],{"class":187},[102,164232,164233],{"class":104,"line":123},[102,164234,652],{"emptyLinePlaceholder":651},[102,164236,164237,164239,164241,164243,164245,164247],{"class":104,"line":130},[102,164238,38280],{"class":187},[102,164240,163633],{"class":119},[102,164242,10571],{"class":108},[102,164244,164150],{"class":187},[102,164246,128294],{"class":108},[102,164248,164249],{"class":119}," has_ticket)\n",[102,164251,164252,164254,164256,164258,164260,164262],{"class":104,"line":136},[102,164253,38280],{"class":187},[102,164255,163633],{"class":119},[102,164257,1208],{"class":108},[102,164259,164150],{"class":187},[102,164261,122066],{"class":108},[102,164263,164249],{"class":119},[102,164265,164266,164268,164270,164272],{"class":104,"line":142},[102,164267,38280],{"class":187},[102,164269,380],{"class":119},[102,164271,164205],{"class":108},[102,164273,164249],{"class":119},[43,164275,164277],{"id":164276},"_28-字符串定义","2.8 字符串定义",[14,164279,164280],{},"三种常见写法：",[93,164282,164284],{"className":38243,"code":164283,"language":38245,"meta":98,"style":98},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[83,164285,164286,164296,164305,164315],{"__ignoreMap":98},[102,164287,164288,164291,164293],{"class":104,"line":105},[102,164289,164290],{"class":119},"name1 ",[102,164292,260],{"class":108},[102,164294,164295],{"class":278}," '小明'\n",[102,164297,164298,164301,164303],{"class":104,"line":116},[102,164299,164300],{"class":119},"name2 ",[102,164302,260],{"class":108},[102,164304,157218],{"class":278},[102,164306,164307,164310,164312],{"class":104,"line":123},[102,164308,164309],{"class":119},"text ",[102,164311,260],{"class":108},[102,164313,164314],{"class":278}," \"\"\"这是多行字符串\n",[102,164316,164317],{"class":104,"line":130},[102,164318,164319],{"class":278},"可以换行\"\"\"\n",[14,164321,164322],{},"字符串中包含引号：",[93,164324,164326],{"className":38243,"code":164325,"language":38245,"meta":98,"style":98},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[83,164327,164328,164338,164348],{"__ignoreMap":98},[102,164329,164330,164333,164335],{"class":104,"line":105},[102,164331,164332],{"class":119},"msg ",[102,164334,260],{"class":108},[102,164336,164337],{"class":278}," \"他说:'你好'\"\n",[102,164339,164340,164343,164345],{"class":104,"line":116},[102,164341,164342],{"class":119},"msg2 ",[102,164344,260],{"class":108},[102,164346,164347],{"class":278}," '他说:\"你好\"'\n",[102,164349,164350,164353,164355,164358,164361,164364,164366],{"class":104,"line":123},[102,164351,164352],{"class":119},"msg3 ",[102,164354,260],{"class":108},[102,164356,164357],{"class":278}," \"他说:",[102,164359,164360],{"class":187},"\\\"",[102,164362,164363],{"class":278},"你好",[102,164365,164360],{"class":187},[102,164367,32998],{"class":278},[14,164369,164370],{},"常见转义字符：",[9177,164372,164373,164382],{},[9180,164374,164375],{},[9183,164376,164377,164380],{},[9186,164378,164379],{},"写法",[9186,164381,108565],{},[9223,164383,164384,164394,164403,164413,164422],{},[9183,164385,164386,164391],{},[9228,164387,164388],{},[83,164389,164390],{},"\\n",[9228,164392,164393],{},"换行",[9183,164395,164396,164400],{},[9228,164397,164398],{},[83,164399,10118],{},[9228,164401,164402],{},"制表符",[9183,164404,164405,164410],{},[9228,164406,164407],{},[83,164408,164409],{},"\\\\",[9228,164411,164412],{},"反斜杠",[9183,164414,164415,164419],{},[9228,164416,164417],{},[83,164418,164360],{},[9228,164420,164421],{},"双引号",[9183,164423,164424,164429],{},[9228,164425,164426],{},[83,164427,164428],{},"\\'",[9228,164430,164431],{},"单引号",[43,164433,164435],{"id":164434},"_29-字符串拼接","2.9 字符串拼接",[93,164437,164439],{"className":38243,"code":164438,"language":38245,"meta":98,"style":98},"name = \"小明\"\nprint(\"你好，\" + name)\n",[83,164440,164441,164449],{"__ignoreMap":98},[102,164442,164443,164445,164447],{"class":104,"line":105},[102,164444,154401],{"class":119},[102,164446,260],{"class":108},[102,164448,157218],{"class":278},[102,164450,164451,164453,164455,164458,164460],{"class":104,"line":116},[102,164452,38280],{"class":187},[102,164454,380],{"class":119},[102,164456,164457],{"class":278},"\"你好，\"",[102,164459,53431],{"class":108},[102,164461,164462],{"class":119}," name)\n",[14,164464,164465],{},"字符串只能和字符串拼接：",[93,164467,164469],{"className":38243,"code":164468,"language":38245,"meta":98,"style":98},"age = 18\nprint(\"年龄:\" + str(age))\n",[83,164470,164471,164479],{"__ignoreMap":98},[102,164472,164473,164475,164477],{"class":104,"line":105},[102,164474,154411],{"class":119},[102,164476,260],{"class":108},[102,164478,154416],{"class":187},[102,164480,164481,164483,164485,164487,164489,164491],{"class":104,"line":116},[102,164482,38280],{"class":187},[102,164484,380],{"class":119},[102,164486,154382],{"class":278},[102,164488,53431],{"class":108},[102,164490,81784],{"class":187},[102,164492,164493],{"class":119},"(age))\n",[14,164495,164496],{},"更推荐使用格式化字符串。",[43,164498,164500],{"id":164499},"_210-字符串格式化","2.10 字符串格式化",[48,164502,164504],{"id":164503},"_2101-百分号格式化","2.10.1 百分号格式化",[93,164506,164508],{"className":38243,"code":164507,"language":38245,"meta":98,"style":98},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[83,164509,164510,164518,164526,164535,164539],{"__ignoreMap":98},[102,164511,164512,164514,164516],{"class":104,"line":105},[102,164513,154401],{"class":119},[102,164515,260],{"class":108},[102,164517,157218],{"class":278},[102,164519,164520,164522,164524],{"class":104,"line":116},[102,164521,154411],{"class":119},[102,164523,260],{"class":108},[102,164525,154416],{"class":187},[102,164527,164528,164530,164532],{"class":104,"line":123},[102,164529,163223],{"class":119},[102,164531,260],{"class":108},[102,164533,164534],{"class":187}," 95.5\n",[102,164536,164537],{"class":104,"line":130},[102,164538,652],{"emptyLinePlaceholder":651},[102,164540,164541,164543,164545,164548,164551,164554,164557,164560,164563,164565,164567],{"class":104,"line":136},[102,164542,38280],{"class":187},[102,164544,380],{"class":119},[102,164546,164547],{"class":278},"\"姓名:",[102,164549,164550],{"class":187},"%s",[102,164552,164553],{"class":278}," 年龄:",[102,164555,164556],{"class":187},"%d",[102,164558,164559],{"class":278}," 分数:",[102,164561,164562],{"class":187},"%.1f",[102,164564,9288],{"class":278},[102,164566,163946],{"class":108},[102,164568,164569],{"class":119}," (name, age, score))\n",[14,164571,164572],{},"常用占位符：",[9177,164574,164575,164584],{},[9180,164576,164577],{},[9183,164578,164579,164582],{},[9186,164580,164581],{},"占位符",[9186,164583,33734],{},[9223,164585,164586,164594,164602],{},[9183,164587,164588,164592],{},[9228,164589,164590],{},[83,164591,164550],{},[9228,164593,163089],{},[9183,164595,164596,164600],{},[9228,164597,164598],{},[83,164599,164556],{},[9228,164601,163067],{},[9183,164603,164604,164609],{},[9228,164605,164606],{},[83,164607,164608],{},"%f",[9228,164610,163078],{},[14,164612,164613],{},"精度控制：",[93,164615,164617],{"className":38243,"code":164616,"language":38245,"meta":98,"style":98},"price = 12.3456\nprint(\"%.2f\" % price)\n",[83,164618,164619,164628],{"__ignoreMap":98},[102,164620,164621,164623,164625],{"class":104,"line":105},[102,164622,154546],{"class":119},[102,164624,260],{"class":108},[102,164626,164627],{"class":187}," 12.3456\n",[102,164629,164630,164632,164634,164636,164639,164641,164643],{"class":104,"line":116},[102,164631,38280],{"class":187},[102,164633,380],{"class":119},[102,164635,9288],{"class":278},[102,164637,164638],{"class":187},"%.2f",[102,164640,9288],{"class":278},[102,164642,163946],{"class":108},[102,164644,164645],{"class":119}," price)\n",[48,164647,164649],{"id":164648},"_2102-format方法","2.10.2 format方法",[93,164651,164653],{"className":38243,"code":164652,"language":38245,"meta":98,"style":98},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[83,164654,164655,164663,164671,164675,164694,164714],{"__ignoreMap":98},[102,164656,164657,164659,164661],{"class":104,"line":105},[102,164658,154401],{"class":119},[102,164660,260],{"class":108},[102,164662,157218],{"class":278},[102,164664,164665,164667,164669],{"class":104,"line":116},[102,164666,154411],{"class":119},[102,164668,260],{"class":108},[102,164670,154416],{"class":187},[102,164672,164673],{"class":104,"line":123},[102,164674,652],{"emptyLinePlaceholder":651},[102,164676,164677,164679,164681,164683,164685,164687,164689,164691],{"class":104,"line":130},[102,164678,38280],{"class":187},[102,164680,380],{"class":119},[102,164682,164547],{"class":278},[102,164684,40324],{"class":187},[102,164686,164553],{"class":278},[102,164688,40324],{"class":187},[102,164690,9288],{"class":278},[102,164692,164693],{"class":119},".format(name, age))\n",[102,164695,164696,164698,164700,164702,164705,164707,164710,164712],{"class":104,"line":136},[102,164697,38280],{"class":187},[102,164699,380],{"class":119},[102,164701,164547],{"class":278},[102,164703,164704],{"class":187},"{0}",[102,164706,164553],{"class":278},[102,164708,164709],{"class":187},"{1}",[102,164711,9288],{"class":278},[102,164713,164693],{"class":119},[102,164715,164716,164718,164720,164722,164725,164727,164730,164732,164735,164737,164739,164742,164744,164746],{"class":104,"line":142},[102,164717,38280],{"class":187},[102,164719,380],{"class":119},[102,164721,164547],{"class":278},[102,164723,164724],{"class":187},"{name}",[102,164726,164553],{"class":278},[102,164728,164729],{"class":187},"{age}",[102,164731,9288],{"class":278},[102,164733,164734],{"class":119},".format(",[102,164736,87675],{"class":386},[102,164738,260],{"class":108},[102,164740,164741],{"class":119},"name, ",[102,164743,78086],{"class":386},[102,164745,260],{"class":108},[102,164747,164748],{"class":119},"age))\n",[48,164750,164752],{"id":164751},"_2103-f-string","2.10.3 f-string",[14,164754,164755],{},"推荐写法：",[93,164757,164759],{"className":38243,"code":164758,"language":38245,"meta":98,"style":98},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[83,164760,164761,164769,164777,164785,164789],{"__ignoreMap":98},[102,164762,164763,164765,164767],{"class":104,"line":105},[102,164764,154401],{"class":119},[102,164766,260],{"class":108},[102,164768,157218],{"class":278},[102,164770,164771,164773,164775],{"class":104,"line":116},[102,164772,154411],{"class":119},[102,164774,260],{"class":108},[102,164776,154416],{"class":187},[102,164778,164779,164781,164783],{"class":104,"line":123},[102,164780,163223],{"class":119},[102,164782,260],{"class":108},[102,164784,164534],{"class":187},[102,164786,164787],{"class":104,"line":130},[102,164788,652],{"emptyLinePlaceholder":651},[102,164790,164791,164793,164795,164797,164799,164801,164803,164805,164807,164809,164811,164813,164815,164817,164820,164823,164825,164827],{"class":104,"line":136},[102,164792,38280],{"class":187},[102,164794,380],{"class":119},[102,164796,9097],{"class":108},[102,164798,164547],{"class":278},[102,164800,9918],{"class":187},[102,164802,87675],{"class":119},[102,164804,9967],{"class":187},[102,164806,164553],{"class":278},[102,164808,9918],{"class":187},[102,164810,78086],{"class":119},[102,164812,9967],{"class":187},[102,164814,164559],{"class":278},[102,164816,9918],{"class":187},[102,164818,164819],{"class":119},"score",[102,164821,164822],{"class":108},":.1f",[102,164824,9967],{"class":187},[102,164826,9288],{"class":278},[102,164828,390],{"class":119},[14,164830,164831],{},"表达式也可以放进去：",[93,164833,164835],{"className":38243,"code":164834,"language":38245,"meta":98,"style":98},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[83,164836,164837,164845,164853],{"__ignoreMap":98},[102,164838,164839,164841,164843],{"class":104,"line":105},[102,164840,154546],{"class":119},[102,164842,260],{"class":108},[102,164844,154551],{"class":187},[102,164846,164847,164849,164851],{"class":104,"line":116},[102,164848,154556],{"class":119},[102,164850,260],{"class":108},[102,164852,62292],{"class":187},[102,164854,164855,164857,164859,164861,164864,164866,164868,164870,164873,164875,164878],{"class":104,"line":123},[102,164856,38280],{"class":187},[102,164858,380],{"class":119},[102,164860,9097],{"class":108},[102,164862,164863],{"class":278},"\"总价:",[102,164865,9918],{"class":187},[102,164867,154546],{"class":119},[102,164869,191],{"class":108},[102,164871,164872],{"class":119}," count",[102,164874,9967],{"class":187},[102,164876,164877],{"class":278},"元\"",[102,164879,390],{"class":119},[43,164881,164883],{"id":164882},"_211-input输入","2.11 input输入",[14,164885,164886,164889],{},[83,164887,164888],{},"input()"," 会暂停程序，等待用户输入。",[93,164891,164893],{"className":38243,"code":164892,"language":38245,"meta":98,"style":98},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[83,164894,164895,164909],{"__ignoreMap":98},[102,164896,164897,164899,164901,164903,164905,164907],{"class":104,"line":105},[102,164898,154401],{"class":119},[102,164900,260],{"class":108},[102,164902,68470],{"class":187},[102,164904,380],{"class":119},[102,164906,160244],{"class":278},[102,164908,390],{"class":119},[102,164910,164911,164913,164915,164917,164920,164922,164924,164926,164928],{"class":104,"line":116},[102,164912,38280],{"class":187},[102,164914,380],{"class":119},[102,164916,9097],{"class":108},[102,164918,164919],{"class":278},"\"你好，",[102,164921,9918],{"class":187},[102,164923,87675],{"class":119},[102,164925,9967],{"class":187},[102,164927,9288],{"class":278},[102,164929,390],{"class":119},[14,164931,164932],{},"输入整数：",[93,164934,164936],{"className":38243,"code":164935,"language":38245,"meta":98,"style":98},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[83,164937,164938,164956],{"__ignoreMap":98},[102,164939,164940,164942,164944,164946,164948,164950,164952,164954],{"class":104,"line":105},[102,164941,154411],{"class":119},[102,164943,260],{"class":108},[102,164945,6392],{"class":187},[102,164947,380],{"class":119},[102,164949,61686],{"class":187},[102,164951,380],{"class":119},[102,164953,160259],{"class":278},[102,164955,38362],{"class":119},[102,164957,164958,164960,164962,164964,164967,164969,164971,164973,164976,164978],{"class":104,"line":116},[102,164959,38280],{"class":187},[102,164961,380],{"class":119},[102,164963,9097],{"class":108},[102,164965,164966],{"class":278},"\"明年你",[102,164968,9918],{"class":187},[102,164970,154411],{"class":119},[102,164972,1702],{"class":108},[102,164974,164975],{"class":187}," 1}",[102,164977,157269],{"class":278},[102,164979,390],{"class":119},[14,164981,164982],{},"输入小数：",[93,164984,164986],{"className":38243,"code":164985,"language":38245,"meta":98,"style":98},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[83,164987,164988,165007],{"__ignoreMap":98},[102,164989,164990,164992,164994,164996,164998,165000,165002,165005],{"class":104,"line":105},[102,164991,163196],{"class":119},[102,164993,260],{"class":108},[102,164995,117662],{"class":187},[102,164997,380],{"class":119},[102,164999,61686],{"class":187},[102,165001,380],{"class":119},[102,165003,165004],{"class":278},"\"请输入身高:\"",[102,165006,38362],{"class":119},[102,165008,165009,165011,165013,165015,165018,165020,165022,165025,165027,165030],{"class":104,"line":116},[102,165010,38280],{"class":187},[102,165012,380],{"class":119},[102,165014,9097],{"class":108},[102,165016,165017],{"class":278},"\"身高:",[102,165019,9918],{"class":187},[102,165021,32846],{"class":119},[102,165023,165024],{"class":108},":.2f",[102,165026,9967],{"class":187},[102,165028,165029],{"class":278},"米\"",[102,165031,390],{"class":119},[43,165033,165035],{"id":165034},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,165037,131157],{},[87,165039,165040,165043,165046,165049],{},[62,165041,165042],{},"输入商品单价。",[62,165044,165045],{},"输入购买数量。",[62,165047,165048],{},"输入折扣，例如 0.8 表示八折。",[62,165050,165051],{},"输出最终金额，保留两位小数。",[14,165053,18778],{},[93,165055,165057],{"className":38243,"code":165056,"language":38245,"meta":98,"style":98},"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",[83,165058,165059,165078,165097,165117,165121,165141,165145,165168,165189,165211],{"__ignoreMap":98},[102,165060,165061,165063,165065,165067,165069,165071,165073,165076],{"class":104,"line":105},[102,165062,154546],{"class":119},[102,165064,260],{"class":108},[102,165066,117662],{"class":187},[102,165068,380],{"class":119},[102,165070,61686],{"class":187},[102,165072,380],{"class":119},[102,165074,165075],{"class":278},"\"请输入商品单价:\"",[102,165077,38362],{"class":119},[102,165079,165080,165082,165084,165086,165088,165090,165092,165095],{"class":104,"line":116},[102,165081,154556],{"class":119},[102,165083,260],{"class":108},[102,165085,6392],{"class":187},[102,165087,380],{"class":119},[102,165089,61686],{"class":187},[102,165091,380],{"class":119},[102,165093,165094],{"class":278},"\"请输入购买数量:\"",[102,165096,38362],{"class":119},[102,165098,165099,165102,165104,165106,165108,165110,165112,165115],{"class":104,"line":123},[102,165100,165101],{"class":119},"discount ",[102,165103,260],{"class":108},[102,165105,117662],{"class":187},[102,165107,380],{"class":119},[102,165109,61686],{"class":187},[102,165111,380],{"class":119},[102,165113,165114],{"class":278},"\"请输入折扣:\"",[102,165116,38362],{"class":119},[102,165118,165119],{"class":104,"line":130},[102,165120,652],{"emptyLinePlaceholder":651},[102,165122,165123,165126,165128,165131,165133,165136,165138],{"class":104,"line":136},[102,165124,165125],{"class":119},"total ",[102,165127,260],{"class":108},[102,165129,165130],{"class":119}," price ",[102,165132,191],{"class":108},[102,165134,165135],{"class":119}," count ",[102,165137,191],{"class":108},[102,165139,165140],{"class":119}," discount\n",[102,165142,165143],{"class":104,"line":142},[102,165144,652],{"emptyLinePlaceholder":651},[102,165146,165147,165149,165151,165153,165156,165158,165160,165162,165164,165166],{"class":104,"line":148},[102,165148,38280],{"class":187},[102,165150,380],{"class":119},[102,165152,9097],{"class":108},[102,165154,165155],{"class":278},"\"商品单价:",[102,165157,9918],{"class":187},[102,165159,87680],{"class":119},[102,165161,165024],{"class":108},[102,165163,9967],{"class":187},[102,165165,9288],{"class":278},[102,165167,390],{"class":119},[102,165169,165170,165172,165174,165176,165179,165181,165183,165185,165187],{"class":104,"line":157},[102,165171,38280],{"class":187},[102,165173,380],{"class":119},[102,165175,9097],{"class":108},[102,165177,165178],{"class":278},"\"购买数量:",[102,165180,9918],{"class":187},[102,165182,92299],{"class":119},[102,165184,9967],{"class":187},[102,165186,9288],{"class":278},[102,165188,390],{"class":119},[102,165190,165191,165193,165195,165197,165200,165202,165205,165207,165209],{"class":104,"line":163},[102,165192,38280],{"class":187},[102,165194,380],{"class":119},[102,165196,9097],{"class":108},[102,165198,165199],{"class":278},"\"折扣:",[102,165201,9918],{"class":187},[102,165203,165204],{"class":119},"discount",[102,165206,9967],{"class":187},[102,165208,9288],{"class":278},[102,165210,390],{"class":119},[102,165212,165213,165215,165217,165219,165222,165224,165227,165229,165231,165233],{"class":104,"line":175},[102,165214,38280],{"class":187},[102,165216,380],{"class":119},[102,165218,9097],{"class":108},[102,165220,165221],{"class":278},"\"应付金额:",[102,165223,9918],{"class":187},[102,165225,165226],{"class":119},"total",[102,165228,165024],{"class":108},[102,165230,9967],{"class":187},[102,165232,164877],{"class":278},[102,165234,390],{"class":119},[43,165236,165238],{"id":165237},"_213-易错点","2.13 易错点",[87,165240,165241,165246,165252,165260,165263],{},[62,165242,165243,165245],{},[83,165244,164888],{}," 的结果是字符串，做运算前要转换。",[62,165247,165248,165249,36250],{},"字符串拼接时，数字要先 ",[83,165250,165251],{},"str()",[62,165253,165254,165256,165257,165259],{},[83,165255,260],{}," 是赋值，",[83,165258,1876],{}," 是比较。",[62,165261,165262],{},"Python 没有自增自减运算符。",[62,165264,165265],{},"浮点数计算可能有精度误差：",[93,165267,165269],{"className":38243,"code":165268,"language":38245,"meta":98,"style":98},"print(0.1 + 0.2)\n",[83,165270,165271],{"__ignoreMap":98},[102,165272,165273,165275,165277,165279,165281,165284],{"class":104,"line":105},[102,165274,38280],{"class":187},[102,165276,380],{"class":119},[102,165278,94075],{"class":187},[102,165280,53431],{"class":108},[102,165282,165283],{"class":187}," 0.2",[102,165285,390],{"class":119},[14,165287,165288,165289,165292],{},"金额计算如果要求严格，可以后续学习 ",[83,165290,165291],{},"decimal"," 模块。",[43,165294,165296],{"id":165295},"_214-本章练习","2.14 本章练习",[87,165298,165299,165302,165305,165308,165311],{},[62,165300,165301],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[62,165303,165304],{},"输入圆的半径，计算面积，保留两位小数。",[62,165306,165307],{},"输入工资和奖金，计算总收入。",[62,165309,165310],{},"输入摄氏温度，转换为华氏温度。",[62,165312,165313],{},"写一个 BMI 计算程序：",[93,165315,165318],{"className":165316,"code":165317,"language":6778,"meta":98},[6776],"BMI = 体重kg \u002F 身高m ** 2\n",[83,165319,165317],{"__ignoreMap":98},[8955,165321,165322],{},"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":98,"searchDepth":116,"depth":116,"links":165324},[165325,165326,165327,165328,165329,165330,165331,165337,165338,165339,165344,165345,165346,165347],{"id":162886,"depth":116,"text":162887},{"id":162995,"depth":116,"text":162996},{"id":163166,"depth":116,"text":163167},{"id":163243,"depth":116,"text":163244},{"id":58596,"depth":116,"text":58597},{"id":163549,"depth":116,"text":163550},{"id":163775,"depth":116,"text":163776,"children":165332},[165333,165334,165335,165336],{"id":163779,"depth":123,"text":163780},{"id":163973,"depth":123,"text":163974},{"id":164061,"depth":123,"text":164062},{"id":164167,"depth":123,"text":164168},{"id":164276,"depth":116,"text":164277},{"id":164434,"depth":116,"text":164435},{"id":164499,"depth":116,"text":164500,"children":165340},[165341,165342,165343],{"id":164503,"depth":123,"text":164504},{"id":164648,"depth":123,"text":164649},{"id":164751,"depth":123,"text":164752},{"id":164882,"depth":116,"text":164883},{"id":165034,"depth":116,"text":165035},{"id":165237,"depth":116,"text":165238},{"id":165295,"depth":116,"text":165296},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":162878,"description":31240},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":165354,"title":165355,"body":165356,"description":31240,"extension":8978,"meta":166992,"navigation":651,"path":166993,"seo":166994,"stem":166995,"__hash__":166996},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":165357,"toc":166973},[165358,165361,165365,165368,165383,165386,165414,165418,165468,165470,165486,165489,165515,165518,165522,165589,165592,165608,165612,165615,165733,165736,165743,165792,165798,165802,165805,165918,165921,165925,165929,165932,165982,165986,165989,166039,166043,166046,166084,166088,166091,166137,166140,166175,166179,166184,166187,166233,166235,166302,166306,166312,166423,166432,166436,166438,166449,166451,166617,166621,166623,166637,166639,166853,166857,166876,166893,166896,166942,166946,166970],[10,165359,165355],{"id":165360},"_3-判断语句",[43,165362,165364],{"id":165363},"_31-布尔值","3.1 布尔值",[14,165366,165367],{},"判断语句依赖布尔值：",[93,165369,165371],{"className":38243,"code":165370,"language":38245,"meta":98,"style":98},"True\nFalse\n",[83,165372,165373,165378],{"__ignoreMap":98},[102,165374,165375],{"class":104,"line":105},[102,165376,165377],{"class":187},"True\n",[102,165379,165380],{"class":104,"line":116},[102,165381,165382],{"class":187},"False\n",[14,165384,165385],{},"比较表达式会产生布尔值：",[93,165387,165389],{"className":38243,"code":165388,"language":38245,"meta":98,"style":98},"age = 18\nprint(age >= 18)  # True\n",[83,165390,165391,165399],{"__ignoreMap":98},[102,165392,165393,165395,165397],{"class":104,"line":105},[102,165394,154411],{"class":119},[102,165396,260],{"class":108},[102,165398,154416],{"class":187},[102,165400,165401,165403,165405,165407,165409,165411],{"class":104,"line":116},[102,165402,38280],{"class":187},[102,165404,163633],{"class":119},[102,165406,10571],{"class":108},[102,165408,164150],{"class":187},[102,165410,53673],{"class":119},[102,165412,165413],{"class":126},"# True\n",[43,165415,165417],{"id":165416},"_32-if基础语法","3.2 if基础语法",[93,165419,165421],{"className":38243,"code":165420,"language":38245,"meta":98,"style":98},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[83,165422,165423,165441,165445,165457],{"__ignoreMap":98},[102,165424,165425,165427,165429,165431,165433,165435,165437,165439],{"class":104,"line":105},[102,165426,154411],{"class":119},[102,165428,260],{"class":108},[102,165430,6392],{"class":187},[102,165432,380],{"class":119},[102,165434,61686],{"class":187},[102,165436,380],{"class":119},[102,165438,160259],{"class":278},[102,165440,38362],{"class":119},[102,165442,165443],{"class":104,"line":116},[102,165444,652],{"emptyLinePlaceholder":651},[102,165446,165447,165449,165451,165453,165455],{"class":104,"line":123},[102,165448,10407],{"class":108},[102,165450,1216],{"class":119},[102,165452,10571],{"class":108},[102,165454,164150],{"class":187},[102,165456,12552],{"class":119},[102,165458,165459,165461,165463,165466],{"class":104,"line":130},[102,165460,39164],{"class":187},[102,165462,380],{"class":119},[102,165464,165465],{"class":278},"\"可以进入网吧\"",[102,165467,390],{"class":119},[14,165469,7501],{},[87,165471,165472,165477,165480,165483],{},[62,165473,165474,165476],{},[83,165475,10407],{}," 后面是条件表达式。",[62,165478,165479],{},"条件后面必须写冒号。",[62,165481,165482],{},"条件成立时执行缩进代码块。",[62,165484,165485],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,165487,165488],{},"错误示例：",[93,165490,165492],{"className":38243,"code":165491,"language":38245,"meta":98,"style":98},"if age >= 18\n    print(\"可以进入\")\n",[83,165493,165494,165504],{"__ignoreMap":98},[102,165495,165496,165498,165500,165502],{"class":104,"line":105},[102,165497,10407],{"class":108},[102,165499,1216],{"class":119},[102,165501,10571],{"class":108},[102,165503,154416],{"class":187},[102,165505,165506,165508,165510,165513],{"class":104,"line":116},[102,165507,39164],{"class":187},[102,165509,380],{"class":119},[102,165511,165512],{"class":278},"\"可以进入\"",[102,165514,390],{"class":119},[14,165516,165517],{},"缺少冒号。",[43,165519,165521],{"id":165520},"_33-if-else","3.3 if else",[93,165523,165525],{"className":38243,"code":165524,"language":38245,"meta":98,"style":98},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[83,165526,165527,165545,165549,165561,165572,165578],{"__ignoreMap":98},[102,165528,165529,165531,165533,165535,165537,165539,165541,165543],{"class":104,"line":105},[102,165530,154411],{"class":119},[102,165532,260],{"class":108},[102,165534,6392],{"class":187},[102,165536,380],{"class":119},[102,165538,61686],{"class":187},[102,165540,380],{"class":119},[102,165542,160259],{"class":278},[102,165544,38362],{"class":119},[102,165546,165547],{"class":104,"line":116},[102,165548,652],{"emptyLinePlaceholder":651},[102,165550,165551,165553,165555,165557,165559],{"class":104,"line":123},[102,165552,10407],{"class":108},[102,165554,1216],{"class":119},[102,165556,10571],{"class":108},[102,165558,164150],{"class":187},[102,165560,12552],{"class":119},[102,165562,165563,165565,165567,165570],{"class":104,"line":130},[102,165564,39164],{"class":187},[102,165566,380],{"class":119},[102,165568,165569],{"class":278},"\"成年人\"",[102,165571,390],{"class":119},[102,165573,165574,165576],{"class":104,"line":136},[102,165575,10562],{"class":108},[102,165577,12552],{"class":119},[102,165579,165580,165582,165584,165587],{"class":104,"line":142},[102,165581,39164],{"class":187},[102,165583,380],{"class":119},[102,165585,165586],{"class":278},"\"未成年人\"",[102,165588,390],{"class":119},[14,165590,165591],{},"执行逻辑：",[87,165593,165594,165600,165605],{},[62,165595,165596,165597,165599],{},"条件成立，执行 ",[83,165598,10407],{}," 代码块。",[62,165601,165602,165603,165599],{},"条件不成立，执行 ",[83,165604,10562],{},[62,165606,165607],{},"两个代码块只会执行其中一个。",[43,165609,165611],{"id":165610},"_34-if-elif-else","3.4 if elif else",[14,165613,165614],{},"多条件判断：",[93,165616,165618],{"className":38243,"code":165617,"language":38245,"meta":98,"style":98},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[83,165619,165620,165638,165642,165656,165667,165681,165692,165705,165716,165722],{"__ignoreMap":98},[102,165621,165622,165624,165626,165628,165630,165632,165634,165636],{"class":104,"line":105},[102,165623,163223],{"class":119},[102,165625,260],{"class":108},[102,165627,6392],{"class":187},[102,165629,380],{"class":119},[102,165631,61686],{"class":187},[102,165633,380],{"class":119},[102,165635,160274],{"class":278},[102,165637,38362],{"class":119},[102,165639,165640],{"class":104,"line":116},[102,165641,652],{"emptyLinePlaceholder":651},[102,165643,165644,165646,165649,165651,165654],{"class":104,"line":123},[102,165645,10407],{"class":108},[102,165647,165648],{"class":119}," score ",[102,165650,10571],{"class":108},[102,165652,165653],{"class":187}," 90",[102,165655,12552],{"class":119},[102,165657,165658,165660,165662,165665],{"class":104,"line":130},[102,165659,39164],{"class":187},[102,165661,380],{"class":119},[102,165663,165664],{"class":278},"\"优秀\"",[102,165666,390],{"class":119},[102,165668,165669,165672,165674,165676,165679],{"class":104,"line":136},[102,165670,165671],{"class":108},"elif",[102,165673,165648],{"class":119},[102,165675,10571],{"class":108},[102,165677,165678],{"class":187}," 80",[102,165680,12552],{"class":119},[102,165682,165683,165685,165687,165690],{"class":104,"line":142},[102,165684,39164],{"class":187},[102,165686,380],{"class":119},[102,165688,165689],{"class":278},"\"良好\"",[102,165691,390],{"class":119},[102,165693,165694,165696,165698,165700,165703],{"class":104,"line":148},[102,165695,165671],{"class":108},[102,165697,165648],{"class":119},[102,165699,10571],{"class":108},[102,165701,165702],{"class":187}," 60",[102,165704,12552],{"class":119},[102,165706,165707,165709,165711,165714],{"class":104,"line":157},[102,165708,39164],{"class":187},[102,165710,380],{"class":119},[102,165712,165713],{"class":278},"\"及格\"",[102,165715,390],{"class":119},[102,165717,165718,165720],{"class":104,"line":163},[102,165719,10562],{"class":108},[102,165721,12552],{"class":119},[102,165723,165724,165726,165728,165731],{"class":104,"line":175},[102,165725,39164],{"class":187},[102,165727,380],{"class":119},[102,165729,165730],{"class":278},"\"不及格\"",[102,165732,390],{"class":119},[14,165734,165735],{},"注意判断顺序很重要。",[14,165737,165738,165739,165742],{},"如果把 ",[83,165740,165741],{},"score >= 60"," 放在最前面：",[93,165744,165746],{"className":38243,"code":165745,"language":38245,"meta":98,"style":98},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[83,165747,165748,165760,165770,165782],{"__ignoreMap":98},[102,165749,165750,165752,165754,165756,165758],{"class":104,"line":105},[102,165751,10407],{"class":108},[102,165753,165648],{"class":119},[102,165755,10571],{"class":108},[102,165757,165702],{"class":187},[102,165759,12552],{"class":119},[102,165761,165762,165764,165766,165768],{"class":104,"line":116},[102,165763,39164],{"class":187},[102,165765,380],{"class":119},[102,165767,165713],{"class":278},[102,165769,390],{"class":119},[102,165771,165772,165774,165776,165778,165780],{"class":104,"line":123},[102,165773,165671],{"class":108},[102,165775,165648],{"class":119},[102,165777,10571],{"class":108},[102,165779,165653],{"class":187},[102,165781,12552],{"class":119},[102,165783,165784,165786,165788,165790],{"class":104,"line":130},[102,165785,39164],{"class":187},[102,165787,380],{"class":119},[102,165789,165664],{"class":278},[102,165791,390],{"class":119},[14,165793,165794,165795,165797],{},"成绩 95 会先满足 ",[83,165796,165741],{},"，后面的优秀分支就不会执行。",[43,165799,165801],{"id":165800},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,165803,165804],{},"嵌套判断就是在一个判断内部再写判断。",[93,165806,165808],{"className":38243,"code":165807,"language":38245,"meta":98,"style":98},"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",[83,165809,165810,165828,165843,165847,165859,165873,165883,165890,165901,165907],{"__ignoreMap":98},[102,165811,165812,165814,165816,165818,165820,165822,165824,165826],{"class":104,"line":105},[102,165813,154411],{"class":119},[102,165815,260],{"class":108},[102,165817,6392],{"class":187},[102,165819,380],{"class":119},[102,165821,61686],{"class":187},[102,165823,380],{"class":119},[102,165825,160259],{"class":278},[102,165827,38362],{"class":119},[102,165829,165830,165832,165834,165836,165838,165841],{"class":104,"line":116},[102,165831,164226],{"class":119},[102,165833,260],{"class":108},[102,165835,68470],{"class":187},[102,165837,380],{"class":119},[102,165839,165840],{"class":278},"\"是否有票(y\u002Fn):\"",[102,165842,390],{"class":119},[102,165844,165845],{"class":104,"line":123},[102,165846,652],{"emptyLinePlaceholder":651},[102,165848,165849,165851,165853,165855,165857],{"class":104,"line":130},[102,165850,10407],{"class":108},[102,165852,1216],{"class":119},[102,165854,10571],{"class":108},[102,165856,164150],{"class":187},[102,165858,12552],{"class":119},[102,165860,165861,165863,165866,165868,165871],{"class":104,"line":136},[102,165862,2343],{"class":108},[102,165864,165865],{"class":119}," has_ticket ",[102,165867,1876],{"class":108},[102,165869,165870],{"class":278}," \"y\"",[102,165872,12552],{"class":119},[102,165874,165875,165877,165879,165881],{"class":104,"line":142},[102,165876,40316],{"class":187},[102,165878,380],{"class":119},[102,165880,165512],{"class":278},[102,165882,390],{"class":119},[102,165884,165885,165888],{"class":104,"line":148},[102,165886,165887],{"class":108},"    else",[102,165889,12552],{"class":119},[102,165891,165892,165894,165896,165899],{"class":104,"line":157},[102,165893,40316],{"class":187},[102,165895,380],{"class":119},[102,165897,165898],{"class":278},"\"请先买票\"",[102,165900,390],{"class":119},[102,165902,165903,165905],{"class":104,"line":163},[102,165904,10562],{"class":108},[102,165906,12552],{"class":119},[102,165908,165909,165911,165913,165916],{"class":104,"line":175},[102,165910,39164],{"class":187},[102,165912,380],{"class":119},[102,165914,165915],{"class":278},"\"未成年人禁止进入\"",[102,165917,390],{"class":119},[14,165919,165920],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[43,165922,165924],{"id":165923},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[48,165926,165928],{"id":165927},"_361-and","3.6.1 and",[14,165930,165931],{},"两个条件都成立才成立。",[93,165933,165935],{"className":38243,"code":165934,"language":38245,"meta":98,"style":98},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[83,165936,165937,165945,165953,165957,165972],{"__ignoreMap":98},[102,165938,165939,165941,165943],{"class":104,"line":105},[102,165940,154411],{"class":119},[102,165942,260],{"class":108},[102,165944,95930],{"class":187},[102,165946,165947,165949,165951],{"class":104,"line":116},[102,165948,164226],{"class":119},[102,165950,260],{"class":108},[102,165952,161464],{"class":187},[102,165954,165955],{"class":104,"line":123},[102,165956,652],{"emptyLinePlaceholder":651},[102,165958,165959,165961,165963,165965,165967,165969],{"class":104,"line":130},[102,165960,10407],{"class":108},[102,165962,1216],{"class":119},[102,165964,10571],{"class":108},[102,165966,164150],{"class":187},[102,165968,128294],{"class":108},[102,165970,165971],{"class":119}," has_ticket:\n",[102,165973,165974,165976,165978,165980],{"class":104,"line":136},[102,165975,39164],{"class":187},[102,165977,380],{"class":119},[102,165979,165512],{"class":278},[102,165981,390],{"class":119},[48,165983,165985],{"id":165984},"_362-or","3.6.2 or",[14,165987,165988],{},"只要一个条件成立就成立。",[93,165990,165992],{"className":38243,"code":165991,"language":38245,"meta":98,"style":98},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[83,165993,165994,166003,166012,166016,166028],{"__ignoreMap":98},[102,165995,165996,165999,166001],{"class":104,"line":105},[102,165997,165998],{"class":119},"is_vip ",[102,166000,260],{"class":108},[102,166002,133672],{"class":187},[102,166004,166005,166008,166010],{"class":104,"line":116},[102,166006,166007],{"class":119},"coupon ",[102,166009,260],{"class":108},[102,166011,161464],{"class":187},[102,166013,166014],{"class":104,"line":123},[102,166015,652],{"emptyLinePlaceholder":651},[102,166017,166018,166020,166023,166025],{"class":104,"line":130},[102,166019,10407],{"class":108},[102,166021,166022],{"class":119}," is_vip ",[102,166024,122955],{"class":108},[102,166026,166027],{"class":119}," coupon:\n",[102,166029,166030,166032,166034,166037],{"class":104,"line":136},[102,166031,39164],{"class":187},[102,166033,380],{"class":119},[102,166035,166036],{"class":278},"\"可以享受优惠\"",[102,166038,390],{"class":119},[48,166040,166042],{"id":166041},"_363-not","3.6.3 not",[14,166044,166045],{},"取反。",[93,166047,166049],{"className":38243,"code":166048,"language":38245,"meta":98,"style":98},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[83,166050,166051,166060,166064,166073],{"__ignoreMap":98},[102,166052,166053,166056,166058],{"class":104,"line":105},[102,166054,166055],{"class":119},"is_closed ",[102,166057,260],{"class":108},[102,166059,133672],{"class":187},[102,166061,166062],{"class":104,"line":116},[102,166063,652],{"emptyLinePlaceholder":651},[102,166065,166066,166068,166070],{"class":104,"line":123},[102,166067,10407],{"class":108},[102,166069,46795],{"class":108},[102,166071,166072],{"class":119}," is_closed:\n",[102,166074,166075,166077,166079,166082],{"class":104,"line":130},[102,166076,39164],{"class":187},[102,166078,380],{"class":119},[102,166080,166081],{"class":278},"\"店铺营业中\"",[102,166083,390],{"class":119},[43,166085,166087],{"id":166086},"_37-链式比较","3.7 链式比较",[14,166089,166090],{},"Python 支持链式比较：",[93,166092,166094],{"className":38243,"code":166093,"language":38245,"meta":98,"style":98},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[83,166095,166096,166105,166109,166126],{"__ignoreMap":98},[102,166097,166098,166100,166102],{"class":104,"line":105},[102,166099,163223],{"class":119},[102,166101,260],{"class":108},[102,166103,166104],{"class":187}," 85\n",[102,166106,166107],{"class":104,"line":116},[102,166108,652],{"emptyLinePlaceholder":651},[102,166110,166111,166113,166115,166118,166120,166122,166124],{"class":104,"line":123},[102,166112,10407],{"class":108},[102,166114,866],{"class":187},[102,166116,166117],{"class":108}," \u003C=",[102,166119,165648],{"class":119},[102,166121,10461],{"class":108},[102,166123,14552],{"class":187},[102,166125,12552],{"class":119},[102,166127,166128,166130,166132,166135],{"class":104,"line":130},[102,166129,39164],{"class":187},[102,166131,380],{"class":119},[102,166133,166134],{"class":278},"\"成绩合法\"",[102,166136,390],{"class":119},[14,166138,166139],{},"等价于：",[93,166141,166143],{"className":38243,"code":166142,"language":38245,"meta":98,"style":98},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[83,166144,166145,166165],{"__ignoreMap":98},[102,166146,166147,166149,166151,166153,166155,166157,166159,166161,166163],{"class":104,"line":105},[102,166148,10407],{"class":108},[102,166150,165648],{"class":119},[102,166152,10571],{"class":108},[102,166154,866],{"class":187},[102,166156,128294],{"class":108},[102,166158,165648],{"class":119},[102,166160,10461],{"class":108},[102,166162,14552],{"class":187},[102,166164,12552],{"class":119},[102,166166,166167,166169,166171,166173],{"class":104,"line":116},[102,166168,39164],{"class":187},[102,166170,380],{"class":119},[102,166172,166134],{"class":278},[102,166174,390],{"class":119},[43,166176,166178],{"id":166177},"_38-真值和假值","3.8 真值和假值",[14,166180,124332,166181,166183],{},[83,166182,10407],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,166185,166186],{},"假值：",[93,166188,166190],{"className":38243,"code":166189,"language":38245,"meta":98,"style":98},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[83,166191,166192,166196,166201,166205,166209,166214,166218,166222,166227],{"__ignoreMap":98},[102,166193,166194],{"class":104,"line":105},[102,166195,165382],{"class":187},[102,166197,166198],{"class":104,"line":116},[102,166199,166200],{"class":187},"None\n",[102,166202,166203],{"class":104,"line":123},[102,166204,11901],{"class":187},[102,166206,166207],{"class":104,"line":130},[102,166208,40207],{"class":187},[102,166210,166211],{"class":104,"line":136},[102,166212,166213],{"class":278},"\"\"\n",[102,166215,166216],{"class":104,"line":142},[102,166217,40222],{"class":119},[102,166219,166220],{"class":104,"line":148},[102,166221,172],{"class":119},[102,166223,166224],{"class":104,"line":157},[102,166225,166226],{"class":119},"{}\n",[102,166228,166229,166231],{"class":104,"line":163},[102,166230,163155],{"class":187},[102,166232,172],{"class":119},[14,166234,619],{},[93,166236,166238],{"className":38243,"code":166237,"language":38245,"meta":98,"style":98},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[83,166239,166240,166254,166258,166265,166285,166291],{"__ignoreMap":98},[102,166241,166242,166244,166246,166248,166250,166252],{"class":104,"line":105},[102,166243,154401],{"class":119},[102,166245,260],{"class":108},[102,166247,68470],{"class":187},[102,166249,380],{"class":119},[102,166251,160244],{"class":278},[102,166253,390],{"class":119},[102,166255,166256],{"class":104,"line":116},[102,166257,652],{"emptyLinePlaceholder":651},[102,166259,166260,166262],{"class":104,"line":123},[102,166261,10407],{"class":108},[102,166263,166264],{"class":119}," name:\n",[102,166266,166267,166269,166271,166273,166275,166277,166279,166281,166283],{"class":104,"line":130},[102,166268,39164],{"class":187},[102,166270,380],{"class":119},[102,166272,9097],{"class":108},[102,166274,164919],{"class":278},[102,166276,9918],{"class":187},[102,166278,87675],{"class":119},[102,166280,9967],{"class":187},[102,166282,9288],{"class":278},[102,166284,390],{"class":119},[102,166286,166287,166289],{"class":104,"line":136},[102,166288,10562],{"class":108},[102,166290,12552],{"class":119},[102,166292,166293,166295,166297,166300],{"class":104,"line":142},[102,166294,39164],{"class":187},[102,166296,380],{"class":119},[102,166298,166299],{"class":278},"\"姓名不能为空\"",[102,166301,390],{"class":119},[43,166303,166305],{"id":166304},"_39-match语句","3.9 match语句",[14,166307,166308,166309,166311],{},"Python 3.10 开始支持 ",[83,166310,79130],{},"。它适合处理固定选项。",[93,166313,166315],{"className":38243,"code":166314,"language":38245,"meta":98,"style":98},"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",[83,166316,166317,166333,166337,166344,166354,166365,166374,166385,166394,166405,166412],{"__ignoreMap":98},[102,166318,166319,166322,166324,166326,166328,166331],{"class":104,"line":105},[102,166320,166321],{"class":119},"command ",[102,166323,260],{"class":108},[102,166325,68470],{"class":187},[102,166327,380],{"class":119},[102,166329,166330],{"class":278},"\"请输入命令:\"",[102,166332,390],{"class":119},[102,166334,166335],{"class":104,"line":116},[102,166336,652],{"emptyLinePlaceholder":651},[102,166338,166339,166341],{"class":104,"line":123},[102,166340,79130],{"class":108},[102,166342,166343],{"class":119}," command:\n",[102,166345,166346,166349,166352],{"class":104,"line":130},[102,166347,166348],{"class":108},"    case",[102,166350,166351],{"class":278}," \"start\"",[102,166353,12552],{"class":119},[102,166355,166356,166358,166360,166363],{"class":104,"line":136},[102,166357,40316],{"class":187},[102,166359,380],{"class":119},[102,166361,166362],{"class":278},"\"启动\"",[102,166364,390],{"class":119},[102,166366,166367,166369,166372],{"class":104,"line":142},[102,166368,166348],{"class":108},[102,166370,166371],{"class":278}," \"stop\"",[102,166373,12552],{"class":119},[102,166375,166376,166378,166380,166383],{"class":104,"line":148},[102,166377,40316],{"class":187},[102,166379,380],{"class":119},[102,166381,166382],{"class":278},"\"停止\"",[102,166384,390],{"class":119},[102,166386,166387,166389,166392],{"class":104,"line":157},[102,166388,166348],{"class":108},[102,166390,166391],{"class":278}," \"restart\"",[102,166393,12552],{"class":119},[102,166395,166396,166398,166400,166403],{"class":104,"line":163},[102,166397,40316],{"class":187},[102,166399,380],{"class":119},[102,166401,166402],{"class":278},"\"重启\"",[102,166404,390],{"class":119},[102,166406,166407,166409],{"class":104,"line":175},[102,166408,166348],{"class":108},[102,166410,166411],{"class":119}," _:\n",[102,166413,166414,166416,166418,166421],{"class":104,"line":181},[102,166415,40316],{"class":187},[102,166417,380],{"class":119},[102,166419,166420],{"class":278},"\"未知命令\"",[102,166422,390],{"class":119},[14,166424,166425,166426,166428,166429,166431],{},"入门阶段掌握 ",[83,166427,162523],{}," 更重要，",[83,166430,79130],{}," 可以作为补充。",[43,166433,166435],{"id":166434},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,166437,131157],{},[87,166439,166440,166443,166446],{},[62,166441,166442],{},"输入成绩。",[62,166444,166445],{},"判断成绩是否合法。",[62,166447,166448],{},"输出等级。",[14,166450,18778],{},[93,166452,166454],{"className":38243,"code":166453,"language":38245,"meta":98,"style":98},"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",[83,166455,166456,166474,166478,166496,166507,166519,166530,166542,166553,166566,166577,166589,166600,166606],{"__ignoreMap":98},[102,166457,166458,166460,166462,166464,166466,166468,166470,166472],{"class":104,"line":105},[102,166459,163223],{"class":119},[102,166461,260],{"class":108},[102,166463,117662],{"class":187},[102,166465,380],{"class":119},[102,166467,61686],{"class":187},[102,166469,380],{"class":119},[102,166471,160274],{"class":278},[102,166473,38362],{"class":119},[102,166475,166476],{"class":104,"line":116},[102,166477,652],{"emptyLinePlaceholder":651},[102,166479,166480,166482,166484,166486,166488,166490,166492,166494],{"class":104,"line":123},[102,166481,10407],{"class":108},[102,166483,46795],{"class":108},[102,166485,866],{"class":187},[102,166487,166117],{"class":108},[102,166489,165648],{"class":119},[102,166491,10461],{"class":108},[102,166493,14552],{"class":187},[102,166495,12552],{"class":119},[102,166497,166498,166500,166502,166505],{"class":104,"line":130},[102,166499,39164],{"class":187},[102,166501,380],{"class":119},[102,166503,166504],{"class":278},"\"成绩不合法\"",[102,166506,390],{"class":119},[102,166508,166509,166511,166513,166515,166517],{"class":104,"line":136},[102,166510,165671],{"class":108},[102,166512,165648],{"class":119},[102,166514,10571],{"class":108},[102,166516,165653],{"class":187},[102,166518,12552],{"class":119},[102,166520,166521,166523,166525,166528],{"class":104,"line":142},[102,166522,39164],{"class":187},[102,166524,380],{"class":119},[102,166526,166527],{"class":278},"\"等级:A\"",[102,166529,390],{"class":119},[102,166531,166532,166534,166536,166538,166540],{"class":104,"line":148},[102,166533,165671],{"class":108},[102,166535,165648],{"class":119},[102,166537,10571],{"class":108},[102,166539,165678],{"class":187},[102,166541,12552],{"class":119},[102,166543,166544,166546,166548,166551],{"class":104,"line":157},[102,166545,39164],{"class":187},[102,166547,380],{"class":119},[102,166549,166550],{"class":278},"\"等级:B\"",[102,166552,390],{"class":119},[102,166554,166555,166557,166559,166561,166564],{"class":104,"line":163},[102,166556,165671],{"class":108},[102,166558,165648],{"class":119},[102,166560,10571],{"class":108},[102,166562,166563],{"class":187}," 70",[102,166565,12552],{"class":119},[102,166567,166568,166570,166572,166575],{"class":104,"line":175},[102,166569,39164],{"class":187},[102,166571,380],{"class":119},[102,166573,166574],{"class":278},"\"等级:C\"",[102,166576,390],{"class":119},[102,166578,166579,166581,166583,166585,166587],{"class":104,"line":181},[102,166580,165671],{"class":108},[102,166582,165648],{"class":119},[102,166584,10571],{"class":108},[102,166586,165702],{"class":187},[102,166588,12552],{"class":119},[102,166590,166591,166593,166595,166598],{"class":104,"line":202},[102,166592,39164],{"class":187},[102,166594,380],{"class":119},[102,166596,166597],{"class":278},"\"等级:D\"",[102,166599,390],{"class":119},[102,166601,166602,166604],{"class":104,"line":208},[102,166603,10562],{"class":108},[102,166605,12552],{"class":119},[102,166607,166608,166610,166612,166615],{"class":104,"line":214},[102,166609,39164],{"class":187},[102,166611,380],{"class":119},[102,166613,166614],{"class":278},"\"等级:E\"",[102,166616,390],{"class":119},[43,166618,166620],{"id":166619},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,166622,131157],{},[87,166624,166625,166628,166631,166634],{},[62,166626,166627],{},"输入消费金额。",[62,166629,166630],{},"输入会员等级，普通、银卡、金卡。",[62,166632,166633],{},"普通不打折，银卡 9 折，金卡 8 折。",[62,166635,166636],{},"满 500 再减 50。",[14,166638,18778],{},[93,166640,166642],{"className":38243,"code":166641,"language":38245,"meta":98,"style":98},"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",[83,166643,166644,166664,166680,166684,166692,166696,166710,166720,166733,166742,166755,166763,166769,166780,166784,166798,166802,166816,166826,166830],{"__ignoreMap":98},[102,166645,166646,166649,166651,166653,166655,166657,166659,166662],{"class":104,"line":105},[102,166647,166648],{"class":119},"amount ",[102,166650,260],{"class":108},[102,166652,117662],{"class":187},[102,166654,380],{"class":119},[102,166656,61686],{"class":187},[102,166658,380],{"class":119},[102,166660,166661],{"class":278},"\"请输入消费金额:\"",[102,166663,38362],{"class":119},[102,166665,166666,166669,166671,166673,166675,166678],{"class":104,"line":116},[102,166667,166668],{"class":119},"level ",[102,166670,260],{"class":108},[102,166672,68470],{"class":187},[102,166674,380],{"class":119},[102,166676,166677],{"class":278},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[102,166679,390],{"class":119},[102,166681,166682],{"class":104,"line":123},[102,166683,652],{"emptyLinePlaceholder":651},[102,166685,166686,166688,166690],{"class":104,"line":130},[102,166687,165101],{"class":119},[102,166689,260],{"class":108},[102,166691,63564],{"class":187},[102,166693,166694],{"class":104,"line":136},[102,166695,652],{"emptyLinePlaceholder":651},[102,166697,166698,166700,166703,166705,166708],{"class":104,"line":142},[102,166699,10407],{"class":108},[102,166701,166702],{"class":119}," level ",[102,166704,1876],{"class":108},[102,166706,166707],{"class":278}," \"银卡\"",[102,166709,12552],{"class":119},[102,166711,166712,166715,166717],{"class":104,"line":148},[102,166713,166714],{"class":119},"    discount ",[102,166716,260],{"class":108},[102,166718,166719],{"class":187}," 0.9\n",[102,166721,166722,166724,166726,166728,166731],{"class":104,"line":157},[102,166723,165671],{"class":108},[102,166725,166702],{"class":119},[102,166727,1876],{"class":108},[102,166729,166730],{"class":278}," \"金卡\"",[102,166732,12552],{"class":119},[102,166734,166735,166737,166739],{"class":104,"line":163},[102,166736,166714],{"class":119},[102,166738,260],{"class":108},[102,166740,166741],{"class":187}," 0.8\n",[102,166743,166744,166746,166748,166750,166753],{"class":104,"line":175},[102,166745,165671],{"class":108},[102,166747,166702],{"class":119},[102,166749,1876],{"class":108},[102,166751,166752],{"class":278}," \"普通\"",[102,166754,12552],{"class":119},[102,166756,166757,166759,166761],{"class":104,"line":181},[102,166758,166714],{"class":119},[102,166760,260],{"class":108},[102,166762,63564],{"class":187},[102,166764,166765,166767],{"class":104,"line":202},[102,166766,10562],{"class":108},[102,166768,12552],{"class":119},[102,166770,166771,166773,166775,166778],{"class":104,"line":208},[102,166772,39164],{"class":187},[102,166774,380],{"class":119},[102,166776,166777],{"class":278},"\"会员等级输入错误，按普通会员计算\"",[102,166779,390],{"class":119},[102,166781,166782],{"class":104,"line":214},[102,166783,652],{"emptyLinePlaceholder":651},[102,166785,166786,166789,166791,166794,166796],{"class":104,"line":225},[102,166787,166788],{"class":119},"pay ",[102,166790,260],{"class":108},[102,166792,166793],{"class":119}," amount ",[102,166795,191],{"class":108},[102,166797,165140],{"class":119},[102,166799,166800],{"class":104,"line":230},[102,166801,652],{"emptyLinePlaceholder":651},[102,166803,166804,166806,166809,166811,166814],{"class":104,"line":236},[102,166805,10407],{"class":108},[102,166807,166808],{"class":119}," pay ",[102,166810,10571],{"class":108},[102,166812,166813],{"class":187}," 500",[102,166815,12552],{"class":119},[102,166817,166818,166821,166823],{"class":104,"line":242},[102,166819,166820],{"class":119},"    pay ",[102,166822,158117],{"class":108},[102,166824,166825],{"class":187}," 50\n",[102,166827,166828],{"class":104,"line":248},[102,166829,652],{"emptyLinePlaceholder":651},[102,166831,166832,166834,166836,166838,166840,166842,166845,166847,166849,166851],{"class":104,"line":254},[102,166833,38280],{"class":187},[102,166835,380],{"class":119},[102,166837,9097],{"class":108},[102,166839,165221],{"class":278},[102,166841,9918],{"class":187},[102,166843,166844],{"class":119},"pay",[102,166846,165024],{"class":108},[102,166848,9967],{"class":187},[102,166850,164877],{"class":278},[102,166852,390],{"class":119},[43,166854,166856],{"id":166855},"_312-易错点","3.12 易错点",[87,166858,166859,166862,166865,166868,166873],{},[62,166860,166861],{},"冒号不能漏。",[62,166863,166864],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[62,166866,166867],{},"多分支判断要注意顺序。",[62,166869,166870,166871,36250],{},"判断相等用 ",[83,166872,1876],{},[62,166874,166875],{},"字符串比较区分大小写：",[93,166877,166879],{"className":38243,"code":166878,"language":38245,"meta":98,"style":98},"\"Y\" == \"y\"  # False\n",[83,166880,166881],{"__ignoreMap":98},[102,166882,166883,166886,166888,166890],{"class":104,"line":105},[102,166884,166885],{"class":278},"\"Y\"",[102,166887,109424],{"class":108},[102,166889,165870],{"class":278},[102,166891,166892],{"class":126},"  # False\n",[14,166894,166895],{},"可转换后再判断：",[93,166897,166899],{"className":38243,"code":166898,"language":38245,"meta":98,"style":98},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[83,166900,166901,166918,166931],{"__ignoreMap":98},[102,166902,166903,166906,166908,166910,166912,166915],{"class":104,"line":105},[102,166904,166905],{"class":119},"answer ",[102,166907,260],{"class":108},[102,166909,68470],{"class":187},[102,166911,380],{"class":119},[102,166913,166914],{"class":278},"\"是否继续(y\u002Fn):\"",[102,166916,166917],{"class":119},").lower()\n",[102,166919,166920,166922,166925,166927,166929],{"class":104,"line":116},[102,166921,10407],{"class":108},[102,166923,166924],{"class":119}," answer ",[102,166926,1876],{"class":108},[102,166928,165870],{"class":278},[102,166930,12552],{"class":119},[102,166932,166933,166935,166937,166940],{"class":104,"line":123},[102,166934,39164],{"class":187},[102,166936,380],{"class":119},[102,166938,166939],{"class":278},"\"继续\"",[102,166941,390],{"class":119},[43,166943,166945],{"id":166944},"_313-本章练习","3.13 本章练习",[87,166947,166948,166951,166954,166957,166967],{},[62,166949,166950],{},"输入年龄，判断是否成年。",[62,166952,166953],{},"输入年份，判断是否为闰年。",[62,166955,166956],{},"输入三个数字，输出最大值。",[62,166958,166959,166960,166963,166964,166966],{},"写登录判断：用户名是 ",[83,166961,166962],{},"admin"," 且密码是 ",[83,166965,565],{}," 才登录成功。",[62,166968,166969],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[8955,166971,166972],{},"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":98,"searchDepth":116,"depth":116,"links":166974},[166975,166976,166977,166978,166979,166980,166985,166986,166987,166988,166989,166990,166991],{"id":165363,"depth":116,"text":165364},{"id":165416,"depth":116,"text":165417},{"id":165520,"depth":116,"text":165521},{"id":165610,"depth":116,"text":165611},{"id":165800,"depth":116,"text":165801},{"id":165923,"depth":116,"text":165924,"children":166981},[166982,166983,166984],{"id":165927,"depth":123,"text":165928},{"id":165984,"depth":123,"text":165985},{"id":166041,"depth":123,"text":166042},{"id":166086,"depth":116,"text":166087},{"id":166177,"depth":116,"text":166178},{"id":166304,"depth":116,"text":166305},{"id":166434,"depth":116,"text":166435},{"id":166619,"depth":116,"text":166620},{"id":166855,"depth":116,"text":166856},{"id":166944,"depth":116,"text":166945},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":165355,"description":31240},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":166998,"title":166999,"body":167000,"description":31240,"extension":8978,"meta":168769,"navigation":651,"path":168770,"seo":168771,"stem":168772,"__hash__":168773},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":167001,"toc":168749},[167002,167005,167009,167015,167018,167035,167039,167041,167058,167060,167105,167107,167124,167128,167131,167197,167200,167218,167222,167383,167392,167396,167400,167405,167452,167454,167460,167464,167469,167516,167518,167524,167528,167533,167569,167572,167619,167623,167629,167687,167692,167723,167728,167732,167787,167790,167862,167865,167924,167928,167931,168006,168009,168013,168119,168122,168148,168152,168164,168233,168236,168328,168332,168334,168345,168347,168477,168481,168683,168691,168695,168725,168729,168746],[10,167003,166999],{"id":167004},"_4-循环语句",[43,167006,167008],{"id":167007},"_41-为什么需要循环","4.1 为什么需要循环",[14,167010,167011,167012,167014],{},"如果要输出 1 到 100，不应该写 100 行 ",[83,167013,154337],{},"，而应该用循环。",[14,167016,167017],{},"循环适合处理重复任务：",[87,167019,167020,167023,167026,167029,167032],{},[62,167021,167022],{},"重复输出。",[62,167024,167025],{},"重复输入。",[62,167027,167028],{},"遍历数据。",[62,167030,167031],{},"持续执行菜单。",[62,167033,167034],{},"批量处理文件或数据。",[43,167036,167038],{"id":167037},"_42-while循环","4.2 while循环",[14,167040,80],{},[93,167042,167044],{"className":38243,"code":167043,"language":38245,"meta":98,"style":98},"while 条件:\n    循环体\n",[83,167045,167046,167053],{"__ignoreMap":98},[102,167047,167048,167050],{"class":104,"line":105},[102,167049,116528],{"class":108},[102,167051,167052],{"class":119}," 条件:\n",[102,167054,167055],{"class":104,"line":116},[102,167056,167057],{"class":119},"    循环体\n",[14,167059,619],{},[93,167061,167063],{"className":38243,"code":167062,"language":38245,"meta":98,"style":98},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[83,167064,167065,167073,167077,167089,167096],{"__ignoreMap":98},[102,167066,167067,167069,167071],{"class":104,"line":105},[102,167068,108013],{"class":119},[102,167070,260],{"class":108},[102,167072,63564],{"class":187},[102,167074,167075],{"class":104,"line":116},[102,167076,652],{"emptyLinePlaceholder":651},[102,167078,167079,167081,167083,167085,167087],{"class":104,"line":123},[102,167080,116528],{"class":108},[102,167082,18205],{"class":119},[102,167084,10461],{"class":108},[102,167086,10987],{"class":187},[102,167088,12552],{"class":119},[102,167090,167091,167093],{"class":104,"line":130},[102,167092,39164],{"class":187},[102,167094,167095],{"class":119},"(i)\n",[102,167097,167098,167101,167103],{"class":104,"line":136},[102,167099,167100],{"class":119},"    i ",[102,167102,18244],{"class":108},[102,167104,63564],{"class":187},[14,167106,88794],{},[87,167108,167109,167115,167118,167121],{},[62,167110,167111,167112,36250],{},"判断条件 ",[83,167113,167114],{},"i \u003C= 5",[62,167116,167117],{},"条件成立，执行循环体。",[62,167119,167120],{},"执行完后回到条件判断。",[62,167122,167123],{},"条件不成立，退出循环。",[43,167125,167127],{"id":167126},"_43-while累加","4.3 while累加",[14,167129,167130],{},"计算 1 到 100 的和：",[93,167132,167134],{"className":38243,"code":167133,"language":38245,"meta":98,"style":98},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[83,167135,167136,167144,167152,167156,167168,167178,167186,167190],{"__ignoreMap":98},[102,167137,167138,167140,167142],{"class":104,"line":105},[102,167139,108013],{"class":119},[102,167141,260],{"class":108},[102,167143,63564],{"class":187},[102,167145,167146,167148,167150],{"class":104,"line":116},[102,167147,165125],{"class":119},[102,167149,260],{"class":108},[102,167151,55198],{"class":187},[102,167153,167154],{"class":104,"line":123},[102,167155,652],{"emptyLinePlaceholder":651},[102,167157,167158,167160,167162,167164,167166],{"class":104,"line":130},[102,167159,116528],{"class":108},[102,167161,18205],{"class":119},[102,167163,10461],{"class":108},[102,167165,14552],{"class":187},[102,167167,12552],{"class":119},[102,167169,167170,167173,167175],{"class":104,"line":136},[102,167171,167172],{"class":119},"    total ",[102,167174,18244],{"class":108},[102,167176,167177],{"class":119}," i\n",[102,167179,167180,167182,167184],{"class":104,"line":142},[102,167181,167100],{"class":119},[102,167183,18244],{"class":108},[102,167185,63564],{"class":187},[102,167187,167188],{"class":104,"line":148},[102,167189,652],{"emptyLinePlaceholder":651},[102,167191,167192,167194],{"class":104,"line":157},[102,167193,38280],{"class":187},[102,167195,167196],{"class":119},"(total)\n",[14,167198,167199],{},"核心思想：",[87,167201,167202,167207,167212],{},[62,167203,167204,167206],{},[83,167205,9473],{}," 控制循环次数。",[62,167208,167209,167211],{},[83,167210,165226],{}," 保存累加结果。",[62,167213,167214,167215,167217],{},"每轮循环都要更新 ",[83,167216,9473],{},"，否则可能死循环。",[43,167219,167221],{"id":167220},"_44-while猜数字","4.4 while猜数字",[93,167223,167225],{"className":38243,"code":167224,"language":38245,"meta":98,"style":98},"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",[83,167226,167227,167233,167237,167254,167262,167266,167274,167294,167303,167307,167319,167330,167340,167351,167357,167379],{"__ignoreMap":98},[102,167228,167229,167231],{"class":104,"line":105},[102,167230,38257],{"class":108},[102,167232,53193],{"class":119},[102,167234,167235],{"class":104,"line":116},[102,167236,652],{"emptyLinePlaceholder":651},[102,167238,167239,167241,167243,167246,167248,167250,167252],{"class":104,"line":123},[102,167240,166905],{"class":119},[102,167242,260],{"class":108},[102,167244,167245],{"class":119}," random.randint(",[102,167247,7039],{"class":187},[102,167249,2571],{"class":119},[102,167251,5569],{"class":187},[102,167253,390],{"class":119},[102,167255,167256,167258,167260],{"class":104,"line":130},[102,167257,154556],{"class":119},[102,167259,260],{"class":108},[102,167261,55198],{"class":187},[102,167263,167264],{"class":104,"line":136},[102,167265,652],{"emptyLinePlaceholder":651},[102,167267,167268,167270,167272],{"class":104,"line":142},[102,167269,116528],{"class":108},[102,167271,103157],{"class":187},[102,167273,12552],{"class":119},[102,167275,167276,167279,167281,167283,167285,167287,167289,167292],{"class":104,"line":148},[102,167277,167278],{"class":119},"    guess ",[102,167280,260],{"class":108},[102,167282,6392],{"class":187},[102,167284,380],{"class":119},[102,167286,61686],{"class":187},[102,167288,380],{"class":119},[102,167290,167291],{"class":278},"\"请输入1到100之间的数字:\"",[102,167293,38362],{"class":119},[102,167295,167296,167299,167301],{"class":104,"line":157},[102,167297,167298],{"class":119},"    count ",[102,167300,18244],{"class":108},[102,167302,63564],{"class":187},[102,167304,167305],{"class":104,"line":163},[102,167306,652],{"emptyLinePlaceholder":651},[102,167308,167309,167311,167314,167316],{"class":104,"line":175},[102,167310,2343],{"class":108},[102,167312,167313],{"class":119}," guess ",[102,167315,1219],{"class":108},[102,167317,167318],{"class":119}," answer:\n",[102,167320,167321,167323,167325,167328],{"class":104,"line":181},[102,167322,40316],{"class":187},[102,167324,380],{"class":119},[102,167326,167327],{"class":278},"\"猜大了\"",[102,167329,390],{"class":119},[102,167331,167332,167334,167336,167338],{"class":104,"line":202},[102,167333,47158],{"class":108},[102,167335,167313],{"class":119},[102,167337,1208],{"class":108},[102,167339,167318],{"class":119},[102,167341,167342,167344,167346,167349],{"class":104,"line":208},[102,167343,40316],{"class":187},[102,167345,380],{"class":119},[102,167347,167348],{"class":278},"\"猜小了\"",[102,167350,390],{"class":119},[102,167352,167353,167355],{"class":104,"line":214},[102,167354,165887],{"class":108},[102,167356,12552],{"class":119},[102,167358,167359,167361,167363,167365,167368,167370,167372,167374,167377],{"class":104,"line":225},[102,167360,40316],{"class":187},[102,167362,380],{"class":119},[102,167364,9097],{"class":108},[102,167366,167367],{"class":278},"\"猜对了，一共猜了",[102,167369,9918],{"class":187},[102,167371,92299],{"class":119},[102,167373,9967],{"class":187},[102,167375,167376],{"class":278},"次\"",[102,167378,390],{"class":119},[102,167380,167381],{"class":104,"line":230},[102,167382,39492],{"class":108},[14,167384,167385,167388,167389,167391],{},[83,167386,167387],{},"while True"," 表示无限循环，通常配合 ",[83,167390,10892],{}," 使用。",[43,167393,167395],{"id":167394},"_45-break和continue","4.5 break和continue",[48,167397,167399],{"id":167398},"_451-break","4.5.1 break",[14,167401,167402,167404],{},[83,167403,10892],{}," 直接结束整个循环。",[93,167406,167408],{"className":38243,"code":167407,"language":38245,"meta":98,"style":98},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[83,167409,167410,167430,167442,167446],{"__ignoreMap":98},[102,167411,167412,167414,167416,167418,167420,167422,167424,167426,167428],{"class":104,"line":105},[102,167413,11841],{"class":108},[102,167415,18205],{"class":119},[102,167417,33908],{"class":108},[102,167419,40308],{"class":187},[102,167421,380],{"class":119},[102,167423,7039],{"class":187},[102,167425,2571],{"class":119},[102,167427,9379],{"class":187},[102,167429,38651],{"class":119},[102,167431,167432,167434,167436,167438,167440],{"class":104,"line":116},[102,167433,2343],{"class":108},[102,167435,18205],{"class":119},[102,167437,1876],{"class":108},[102,167439,85935],{"class":187},[102,167441,12552],{"class":119},[102,167443,167444],{"class":104,"line":123},[102,167445,39492],{"class":108},[102,167447,167448,167450],{"class":104,"line":130},[102,167449,39164],{"class":187},[102,167451,167095],{"class":119},[14,167453,154322],{},[93,167455,167458],{"className":167456,"code":167457,"language":6778,"meta":98},[6776],"1\n2\n",[83,167459,167457],{"__ignoreMap":98},[48,167461,167463],{"id":167462},"_452-continue","4.5.2 continue",[14,167465,167466,167468],{},[83,167467,162537],{}," 跳过本轮剩余代码，进入下一轮循环。",[93,167470,167472],{"className":38243,"code":167471,"language":38245,"meta":98,"style":98},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[83,167473,167474,167494,167506,167510],{"__ignoreMap":98},[102,167475,167476,167478,167480,167482,167484,167486,167488,167490,167492],{"class":104,"line":105},[102,167477,11841],{"class":108},[102,167479,18205],{"class":119},[102,167481,33908],{"class":108},[102,167483,40308],{"class":187},[102,167485,380],{"class":119},[102,167487,7039],{"class":187},[102,167489,2571],{"class":119},[102,167491,9379],{"class":187},[102,167493,38651],{"class":119},[102,167495,167496,167498,167500,167502,167504],{"class":104,"line":116},[102,167497,2343],{"class":108},[102,167499,18205],{"class":119},[102,167501,1876],{"class":108},[102,167503,85935],{"class":187},[102,167505,12552],{"class":119},[102,167507,167508],{"class":104,"line":123},[102,167509,156377],{"class":108},[102,167511,167512,167514],{"class":104,"line":130},[102,167513,39164],{"class":187},[102,167515,167095],{"class":119},[14,167517,154322],{},[93,167519,167522],{"className":167520,"code":167521,"language":6778,"meta":98},[6776],"1\n2\n4\n5\n",[83,167523,167521],{"__ignoreMap":98},[43,167525,167527],{"id":167526},"_46-for循环","4.6 for循环",[14,167529,167530,167532],{},[83,167531,11841],{}," 常用于遍历序列。",[93,167534,167536],{"className":38243,"code":167535,"language":38245,"meta":98,"style":98},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[83,167537,167538,167547,167551,167562],{"__ignoreMap":98},[102,167539,167540,167542,167544],{"class":104,"line":105},[102,167541,154401],{"class":119},[102,167543,260],{"class":108},[102,167545,167546],{"class":278}," \"python\"\n",[102,167548,167549],{"class":104,"line":116},[102,167550,652],{"emptyLinePlaceholder":651},[102,167552,167553,167555,167558,167560],{"class":104,"line":123},[102,167554,11841],{"class":108},[102,167556,167557],{"class":119}," ch ",[102,167559,33908],{"class":108},[102,167561,166264],{"class":119},[102,167563,167564,167566],{"class":104,"line":130},[102,167565,39164],{"class":187},[102,167567,167568],{"class":119},"(ch)\n",[14,167570,167571],{},"遍历列表：",[93,167573,167575],{"className":38243,"code":167574,"language":38245,"meta":98,"style":98},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[83,167576,167577,167599,167603,167613],{"__ignoreMap":98},[102,167578,167579,167582,167584,167586,167588,167590,167592,167594,167597],{"class":104,"line":105},[102,167580,167581],{"class":119},"students ",[102,167583,260],{"class":108},[102,167585,60091],{"class":119},[102,167587,157753],{"class":278},[102,167589,2571],{"class":119},[102,167591,158801],{"class":278},[102,167593,2571],{"class":119},[102,167595,167596],{"class":278},"\"小刚\"",[102,167598,41111],{"class":119},[102,167600,167601],{"class":104,"line":116},[102,167602,652],{"emptyLinePlaceholder":651},[102,167604,167605,167607,167609,167611],{"class":104,"line":123},[102,167606,11841],{"class":108},[102,167608,160002],{"class":119},[102,167610,33908],{"class":108},[102,167612,160007],{"class":119},[102,167614,167615,167617],{"class":104,"line":130},[102,167616,39164],{"class":187},[102,167618,157907],{"class":119},[43,167620,167622],{"id":167621},"_47-range函数","4.7 range函数",[14,167624,167625,167628],{},[83,167626,167627],{},"range()"," 用于生成整数序列。",[93,167630,167632],{"className":38243,"code":167631,"language":38245,"meta":98,"style":98},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[83,167633,167634,167648,167666],{"__ignoreMap":98},[102,167635,167636,167638,167640,167642,167645],{"class":104,"line":105},[102,167637,41281],{"class":187},[102,167639,380],{"class":119},[102,167641,9354],{"class":187},[102,167643,167644],{"class":119},")          ",[102,167646,167647],{"class":126},"# 0,1,2,3,4\n",[102,167649,167650,167652,167654,167656,167658,167660,167663],{"class":104,"line":116},[102,167651,41281],{"class":187},[102,167653,380],{"class":119},[102,167655,7039],{"class":187},[102,167657,2571],{"class":119},[102,167659,9354],{"class":187},[102,167661,167662],{"class":119},")       ",[102,167664,167665],{"class":126},"# 1,2,3,4\n",[102,167667,167668,167670,167672,167674,167676,167678,167680,167682,167684],{"class":104,"line":123},[102,167669,41281],{"class":187},[102,167671,380],{"class":119},[102,167673,7039],{"class":187},[102,167675,2571],{"class":119},[102,167677,263],{"class":187},[102,167679,2571],{"class":119},[102,167681,7044],{"class":187},[102,167683,163526],{"class":119},[102,167685,167686],{"class":126},"# 1,3,5,7,9\n",[14,167688,167689,167690,32483],{},"配合 ",[83,167691,11841],{},[93,167693,167695],{"className":38243,"code":167694,"language":38245,"meta":98,"style":98},"for i in range(1, 6):\n    print(i)\n",[83,167696,167697,167717],{"__ignoreMap":98},[102,167698,167699,167701,167703,167705,167707,167709,167711,167713,167715],{"class":104,"line":105},[102,167700,11841],{"class":108},[102,167702,18205],{"class":119},[102,167704,33908],{"class":108},[102,167706,40308],{"class":187},[102,167708,380],{"class":119},[102,167710,7039],{"class":187},[102,167712,2571],{"class":119},[102,167714,9379],{"class":187},[102,167716,38651],{"class":119},[102,167718,167719,167721],{"class":104,"line":116},[102,167720,39164],{"class":187},[102,167722,167095],{"class":119},[14,167724,7501,167725,167727],{},[83,167726,41281],{}," 的结束值不包含在内。",[43,167729,167731],{"id":167730},"_48-for循环求和","4.8 for循环求和",[93,167733,167735],{"className":38243,"code":167734,"language":38245,"meta":98,"style":98},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[83,167736,167737,167745,167749,167769,167777,167781],{"__ignoreMap":98},[102,167738,167739,167741,167743],{"class":104,"line":105},[102,167740,165125],{"class":119},[102,167742,260],{"class":108},[102,167744,55198],{"class":187},[102,167746,167747],{"class":104,"line":116},[102,167748,652],{"emptyLinePlaceholder":651},[102,167750,167751,167753,167755,167757,167759,167761,167763,167765,167767],{"class":104,"line":123},[102,167752,11841],{"class":108},[102,167754,18205],{"class":119},[102,167756,33908],{"class":108},[102,167758,40308],{"class":187},[102,167760,380],{"class":119},[102,167762,7039],{"class":187},[102,167764,2571],{"class":119},[102,167766,9372],{"class":187},[102,167768,38651],{"class":119},[102,167770,167771,167773,167775],{"class":104,"line":130},[102,167772,167172],{"class":119},[102,167774,18244],{"class":108},[102,167776,167177],{"class":119},[102,167778,167779],{"class":104,"line":136},[102,167780,652],{"emptyLinePlaceholder":651},[102,167782,167783,167785],{"class":104,"line":142},[102,167784,38280],{"class":187},[102,167786,167196],{"class":119},[14,167788,167789],{},"求偶数和：",[93,167791,167793],{"className":38243,"code":167792,"language":38245,"meta":98,"style":98},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[83,167794,167795,167803,167807,167827,167843,167852,167856],{"__ignoreMap":98},[102,167796,167797,167799,167801],{"class":104,"line":105},[102,167798,165125],{"class":119},[102,167800,260],{"class":108},[102,167802,55198],{"class":187},[102,167804,167805],{"class":104,"line":116},[102,167806,652],{"emptyLinePlaceholder":651},[102,167808,167809,167811,167813,167815,167817,167819,167821,167823,167825],{"class":104,"line":123},[102,167810,11841],{"class":108},[102,167812,18205],{"class":119},[102,167814,33908],{"class":108},[102,167816,40308],{"class":187},[102,167818,380],{"class":119},[102,167820,7039],{"class":187},[102,167822,2571],{"class":119},[102,167824,9372],{"class":187},[102,167826,38651],{"class":119},[102,167828,167829,167831,167833,167835,167837,167839,167841],{"class":104,"line":130},[102,167830,2343],{"class":108},[102,167832,18205],{"class":119},[102,167834,9363],{"class":108},[102,167836,188],{"class":187},[102,167838,109424],{"class":108},[102,167840,866],{"class":187},[102,167842,12552],{"class":119},[102,167844,167845,167848,167850],{"class":104,"line":136},[102,167846,167847],{"class":119},"        total ",[102,167849,18244],{"class":108},[102,167851,167177],{"class":119},[102,167853,167854],{"class":104,"line":142},[102,167855,652],{"emptyLinePlaceholder":651},[102,167857,167858,167860],{"class":104,"line":148},[102,167859,38280],{"class":187},[102,167861,167196],{"class":119},[14,167863,167864],{},"也可以：",[93,167866,167868],{"className":38243,"code":167867,"language":38245,"meta":98,"style":98},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[83,167869,167870,167878,167882,167906,167914,167918],{"__ignoreMap":98},[102,167871,167872,167874,167876],{"class":104,"line":105},[102,167873,165125],{"class":119},[102,167875,260],{"class":108},[102,167877,55198],{"class":187},[102,167879,167880],{"class":104,"line":116},[102,167881,652],{"emptyLinePlaceholder":651},[102,167883,167884,167886,167888,167890,167892,167894,167896,167898,167900,167902,167904],{"class":104,"line":123},[102,167885,11841],{"class":108},[102,167887,18205],{"class":119},[102,167889,33908],{"class":108},[102,167891,40308],{"class":187},[102,167893,380],{"class":119},[102,167895,7044],{"class":187},[102,167897,2571],{"class":119},[102,167899,9372],{"class":187},[102,167901,2571],{"class":119},[102,167903,7044],{"class":187},[102,167905,38651],{"class":119},[102,167907,167908,167910,167912],{"class":104,"line":130},[102,167909,167172],{"class":119},[102,167911,18244],{"class":108},[102,167913,167177],{"class":119},[102,167915,167916],{"class":104,"line":136},[102,167917,652],{"emptyLinePlaceholder":651},[102,167919,167920,167922],{"class":104,"line":142},[102,167921,38280],{"class":187},[102,167923,167196],{"class":119},[43,167925,167927],{"id":167926},"_49-循环嵌套","4.9 循环嵌套",[14,167929,167930],{},"嵌套循环就是循环里面再写循环。",[93,167932,167934],{"className":38243,"code":167933,"language":38245,"meta":98,"style":98},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[83,167935,167936,167956,167976],{"__ignoreMap":98},[102,167937,167938,167940,167942,167944,167946,167948,167950,167952,167954],{"class":104,"line":105},[102,167939,11841],{"class":108},[102,167941,18205],{"class":119},[102,167943,33908],{"class":108},[102,167945,40308],{"class":187},[102,167947,380],{"class":119},[102,167949,7039],{"class":187},[102,167951,2571],{"class":119},[102,167953,9329],{"class":187},[102,167955,38651],{"class":119},[102,167957,167958,167960,167962,167964,167966,167968,167970,167972,167974],{"class":104,"line":116},[102,167959,12016],{"class":108},[102,167961,18267],{"class":119},[102,167963,33908],{"class":108},[102,167965,40308],{"class":187},[102,167967,380],{"class":119},[102,167969,7039],{"class":187},[102,167971,2571],{"class":119},[102,167973,9329],{"class":187},[102,167975,38651],{"class":119},[102,167977,167978,167980,167982,167984,167987,167989,167991,167993,167996,167998,168000,168002,168004],{"class":104,"line":123},[102,167979,40316],{"class":187},[102,167981,380],{"class":119},[102,167983,9097],{"class":108},[102,167985,167986],{"class":278},"\"i=",[102,167988,9918],{"class":187},[102,167990,9473],{"class":119},[102,167992,9967],{"class":187},[102,167994,167995],{"class":278},", j=",[102,167997,9918],{"class":187},[102,167999,9497],{"class":119},[102,168001,9967],{"class":187},[102,168003,9288],{"class":278},[102,168005,390],{"class":119},[14,168007,168008],{},"外层循环执行一次，内层循环执行完整一轮。",[43,168010,168012],{"id":168011},"_410-九九乘法表","4.10 九九乘法表",[93,168014,168016],{"className":38243,"code":168015,"language":38245,"meta":98,"style":98},"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",[83,168017,168018,168038,168061,168113],{"__ignoreMap":98},[102,168019,168020,168022,168024,168026,168028,168030,168032,168034,168036],{"class":104,"line":105},[102,168021,11841],{"class":108},[102,168023,18205],{"class":119},[102,168025,33908],{"class":108},[102,168027,40308],{"class":187},[102,168029,380],{"class":119},[102,168031,7039],{"class":187},[102,168033,2571],{"class":119},[102,168035,263],{"class":187},[102,168037,38651],{"class":119},[102,168039,168040,168042,168044,168046,168048,168050,168052,168055,168057,168059],{"class":104,"line":116},[102,168041,12016],{"class":108},[102,168043,18267],{"class":119},[102,168045,33908],{"class":108},[102,168047,40308],{"class":187},[102,168049,380],{"class":119},[102,168051,7039],{"class":187},[102,168053,168054],{"class":119},", i ",[102,168056,1702],{"class":108},[102,168058,32983],{"class":187},[102,168060,38651],{"class":119},[102,168062,168063,168065,168067,168069,168071,168073,168075,168077,168079,168081,168083,168085,168087,168089,168091,168093,168095,168097,168099,168101,168103,168105,168107,168109,168111],{"class":104,"line":123},[102,168064,40316],{"class":187},[102,168066,380],{"class":119},[102,168068,9097],{"class":108},[102,168070,9288],{"class":278},[102,168072,9918],{"class":187},[102,168074,9497],{"class":119},[102,168076,9967],{"class":187},[102,168078,191],{"class":278},[102,168080,9918],{"class":187},[102,168082,9473],{"class":119},[102,168084,9967],{"class":187},[102,168086,260],{"class":278},[102,168088,9918],{"class":187},[102,168090,108013],{"class":119},[102,168092,191],{"class":108},[102,168094,12224],{"class":119},[102,168096,9967],{"class":187},[102,168098,9288],{"class":278},[102,168100,2571],{"class":119},[102,168102,53666],{"class":386},[102,168104,260],{"class":108},[102,168106,9288],{"class":278},[102,168108,10118],{"class":187},[102,168110,9288],{"class":278},[102,168112,390],{"class":119},[102,168114,168115,168117],{"class":104,"line":130},[102,168116,39164],{"class":187},[102,168118,172],{"class":119},[14,168120,168121],{},"关键点：",[87,168123,168124,168130,168136,168142],{},[62,168125,168126,168127,168129],{},"外层 ",[83,168128,9473],{}," 控制行。",[62,168131,168132,168133,168135],{},"内层 ",[83,168134,9497],{}," 控制列。",[62,168137,168138,168139,168141],{},"每行结束后用 ",[83,168140,154337],{}," 换行。",[62,168143,168144,168147],{},[83,168145,168146],{},"end=\"\\t\""," 让同一行的内容横向排列。",[43,168149,168151],{"id":168150},"_411-循环else","4.11 循环else",[14,168153,168154,168155,168157,168158,168160,168161,168163],{},"Python 的循环可以带 ",[83,168156,10562],{},"。当循环正常结束时执行 ",[83,168159,10562],{},"，如果被 ",[83,168162,10892],{}," 打断，则不执行。",[93,168165,168167],{"className":38243,"code":168166,"language":38245,"meta":98,"style":98},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[83,168168,168169,168189,168201,168212,168216,168222],{"__ignoreMap":98},[102,168170,168171,168173,168175,168177,168179,168181,168183,168185,168187],{"class":104,"line":105},[102,168172,11841],{"class":108},[102,168174,18205],{"class":119},[102,168176,33908],{"class":108},[102,168178,40308],{"class":187},[102,168180,380],{"class":119},[102,168182,7039],{"class":187},[102,168184,2571],{"class":119},[102,168186,9379],{"class":187},[102,168188,38651],{"class":119},[102,168190,168191,168193,168195,168197,168199],{"class":104,"line":116},[102,168192,2343],{"class":108},[102,168194,18205],{"class":119},[102,168196,1876],{"class":108},[102,168198,989],{"class":187},[102,168200,12552],{"class":119},[102,168202,168203,168205,168207,168210],{"class":104,"line":123},[102,168204,40316],{"class":187},[102,168206,380],{"class":119},[102,168208,168209],{"class":278},"\"找到了\"",[102,168211,390],{"class":119},[102,168213,168214],{"class":104,"line":130},[102,168215,39492],{"class":108},[102,168217,168218,168220],{"class":104,"line":136},[102,168219,10562],{"class":108},[102,168221,12552],{"class":119},[102,168223,168224,168226,168228,168231],{"class":104,"line":142},[102,168225,39164],{"class":187},[102,168227,380],{"class":119},[102,168229,168230],{"class":278},"\"没找到\"",[102,168232,390],{"class":119},[14,168234,168235],{},"常用于搜索。",[93,168237,168239],{"className":38243,"code":168238,"language":38245,"meta":98,"style":98},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[83,168240,168241,168262,168271,168275,168287,168298,168308,168312,168318],{"__ignoreMap":98},[102,168242,168243,168246,168248,168250,168252,168254,168256,168258,168260],{"class":104,"line":105},[102,168244,168245],{"class":119},"names ",[102,168247,260],{"class":108},[102,168249,60091],{"class":119},[102,168251,157753],{"class":278},[102,168253,2571],{"class":119},[102,168255,158801],{"class":278},[102,168257,2571],{"class":119},[102,168259,167596],{"class":278},[102,168261,41111],{"class":119},[102,168263,168264,168266,168268],{"class":104,"line":116},[102,168265,119443],{"class":119},[102,168267,260],{"class":108},[102,168269,168270],{"class":278}," \"小李\"\n",[102,168272,168273],{"class":104,"line":123},[102,168274,652],{"emptyLinePlaceholder":651},[102,168276,168277,168279,168282,168284],{"class":104,"line":130},[102,168278,11841],{"class":108},[102,168280,168281],{"class":119}," name ",[102,168283,33908],{"class":108},[102,168285,168286],{"class":119}," names:\n",[102,168288,168289,168291,168293,168295],{"class":104,"line":136},[102,168290,2343],{"class":108},[102,168292,168281],{"class":119},[102,168294,1876],{"class":108},[102,168296,168297],{"class":119}," target:\n",[102,168299,168300,168302,168304,168306],{"class":104,"line":142},[102,168301,40316],{"class":187},[102,168303,380],{"class":119},[102,168305,168209],{"class":278},[102,168307,390],{"class":119},[102,168309,168310],{"class":104,"line":148},[102,168311,39492],{"class":108},[102,168313,168314,168316],{"class":104,"line":157},[102,168315,10562],{"class":108},[102,168317,12552],{"class":119},[102,168319,168320,168322,168324,168326],{"class":104,"line":163},[102,168321,39164],{"class":187},[102,168323,380],{"class":119},[102,168325,168230],{"class":278},[102,168327,390],{"class":119},[43,168329,168331],{"id":168330},"_412-小案例登录重试","4.12 小案例：登录重试",[14,168333,131157],{},[87,168335,168336,168339,168342],{},[62,168337,168338],{},"用户最多输入 3 次密码。",[62,168340,168341],{},"密码正确则登录成功。",[62,168343,168344],{},"3 次都错误则锁定账号。",[14,168346,18778],{},[93,168348,168350],{"className":38243,"code":168349,"language":38245,"meta":98,"style":98},"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",[83,168351,168352,168362,168366,168382,168398,168402,168414,168425,168429,168435,168460,168466],{"__ignoreMap":98},[102,168353,168354,168357,168359],{"class":104,"line":105},[102,168355,168356],{"class":119},"password ",[102,168358,260],{"class":108},[102,168360,168361],{"class":278}," \"123456\"\n",[102,168363,168364],{"class":104,"line":116},[102,168365,652],{"emptyLinePlaceholder":651},[102,168367,168368,168370,168372,168374,168376,168378,168380],{"class":104,"line":123},[102,168369,11841],{"class":108},[102,168371,18205],{"class":119},[102,168373,33908],{"class":108},[102,168375,40308],{"class":187},[102,168377,380],{"class":119},[102,168379,7049],{"class":187},[102,168381,38651],{"class":119},[102,168383,168384,168387,168389,168391,168393,168396],{"class":104,"line":130},[102,168385,168386],{"class":119},"    user_password ",[102,168388,260],{"class":108},[102,168390,68470],{"class":187},[102,168392,380],{"class":119},[102,168394,168395],{"class":278},"\"请输入密码:\"",[102,168397,390],{"class":119},[102,168399,168400],{"class":104,"line":136},[102,168401,652],{"emptyLinePlaceholder":651},[102,168403,168404,168406,168409,168411],{"class":104,"line":142},[102,168405,2343],{"class":108},[102,168407,168408],{"class":119}," user_password ",[102,168410,1876],{"class":108},[102,168412,168413],{"class":119}," password:\n",[102,168415,168416,168418,168420,168423],{"class":104,"line":148},[102,168417,40316],{"class":187},[102,168419,380],{"class":119},[102,168421,168422],{"class":278},"\"登录成功\"",[102,168424,390],{"class":119},[102,168426,168427],{"class":104,"line":157},[102,168428,39492],{"class":108},[102,168430,168431,168433],{"class":104,"line":163},[102,168432,165887],{"class":108},[102,168434,12552],{"class":119},[102,168436,168437,168439,168441,168443,168446,168449,168451,168453,168455,168458],{"class":104,"line":175},[102,168438,40316],{"class":187},[102,168440,380],{"class":119},[102,168442,9097],{"class":108},[102,168444,168445],{"class":278},"\"密码错误，还剩",[102,168447,168448],{"class":187},"{2",[102,168450,60136],{"class":108},[102,168452,11848],{"class":119},[102,168454,9967],{"class":187},[102,168456,168457],{"class":278},"次机会\"",[102,168459,390],{"class":119},[102,168461,168462,168464],{"class":104,"line":181},[102,168463,10562],{"class":108},[102,168465,12552],{"class":119},[102,168467,168468,168470,168472,168475],{"class":104,"line":202},[102,168469,39164],{"class":187},[102,168471,380],{"class":119},[102,168473,168474],{"class":278},"\"账号已锁定\"",[102,168476,390],{"class":119},[43,168478,168480],{"id":168479},"_413-小案例菜单程序","4.13 小案例：菜单程序",[93,168482,168484],{"className":38243,"code":168483,"language":38245,"meta":98,"style":98},"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",[83,168485,168486,168494,168505,168516,168527,168538,168549,168553,168568,168572,168584,168595,168607,168618,168630,168641,168653,168663,168667,168673],{"__ignoreMap":98},[102,168487,168488,168490,168492],{"class":104,"line":105},[102,168489,116528],{"class":108},[102,168491,103157],{"class":187},[102,168493,12552],{"class":119},[102,168495,168496,168498,168500,168503],{"class":104,"line":116},[102,168497,39164],{"class":187},[102,168499,380],{"class":119},[102,168501,168502],{"class":278},"\"====== 菜单 ======\"",[102,168504,390],{"class":119},[102,168506,168507,168509,168511,168514],{"class":104,"line":123},[102,168508,39164],{"class":187},[102,168510,380],{"class":119},[102,168512,168513],{"class":278},"\"1. 查询余额\"",[102,168515,390],{"class":119},[102,168517,168518,168520,168522,168525],{"class":104,"line":130},[102,168519,39164],{"class":187},[102,168521,380],{"class":119},[102,168523,168524],{"class":278},"\"2. 存款\"",[102,168526,390],{"class":119},[102,168528,168529,168531,168533,168536],{"class":104,"line":136},[102,168530,39164],{"class":187},[102,168532,380],{"class":119},[102,168534,168535],{"class":278},"\"3. 取款\"",[102,168537,390],{"class":119},[102,168539,168540,168542,168544,168547],{"class":104,"line":142},[102,168541,39164],{"class":187},[102,168543,380],{"class":119},[102,168545,168546],{"class":278},"\"0. 退出\"",[102,168548,390],{"class":119},[102,168550,168551],{"class":104,"line":148},[102,168552,652],{"emptyLinePlaceholder":651},[102,168554,168555,168558,168560,168562,168564,168566],{"class":104,"line":157},[102,168556,168557],{"class":119},"    choice ",[102,168559,260],{"class":108},[102,168561,68470],{"class":187},[102,168563,380],{"class":119},[102,168565,160938],{"class":278},[102,168567,390],{"class":119},[102,168569,168570],{"class":104,"line":163},[102,168571,652],{"emptyLinePlaceholder":651},[102,168573,168574,168576,168578,168580,168582],{"class":104,"line":175},[102,168575,2343],{"class":108},[102,168577,160951],{"class":119},[102,168579,1876],{"class":108},[102,168581,160956],{"class":278},[102,168583,12552],{"class":119},[102,168585,168586,168588,168590,168593],{"class":104,"line":181},[102,168587,40316],{"class":187},[102,168589,380],{"class":119},[102,168591,168592],{"class":278},"\"余额为1000元\"",[102,168594,390],{"class":119},[102,168596,168597,168599,168601,168603,168605],{"class":104,"line":202},[102,168598,47158],{"class":108},[102,168600,160951],{"class":119},[102,168602,1876],{"class":108},[102,168604,160975],{"class":278},[102,168606,12552],{"class":119},[102,168608,168609,168611,168613,168616],{"class":104,"line":208},[102,168610,40316],{"class":187},[102,168612,380],{"class":119},[102,168614,168615],{"class":278},"\"存款功能\"",[102,168617,390],{"class":119},[102,168619,168620,168622,168624,168626,168628],{"class":104,"line":214},[102,168621,47158],{"class":108},[102,168623,160951],{"class":119},[102,168625,1876],{"class":108},[102,168627,160993],{"class":278},[102,168629,12552],{"class":119},[102,168631,168632,168634,168636,168639],{"class":104,"line":225},[102,168633,40316],{"class":187},[102,168635,380],{"class":119},[102,168637,168638],{"class":278},"\"取款功能\"",[102,168640,390],{"class":119},[102,168642,168643,168645,168647,168649,168651],{"class":104,"line":230},[102,168644,47158],{"class":108},[102,168646,160951],{"class":119},[102,168648,1876],{"class":108},[102,168650,161047],{"class":278},[102,168652,12552],{"class":119},[102,168654,168655,168657,168659,168661],{"class":104,"line":236},[102,168656,40316],{"class":187},[102,168658,380],{"class":119},[102,168660,161058],{"class":278},[102,168662,390],{"class":119},[102,168664,168665],{"class":104,"line":242},[102,168666,39492],{"class":108},[102,168668,168669,168671],{"class":104,"line":248},[102,168670,165887],{"class":108},[102,168672,12552],{"class":119},[102,168674,168675,168677,168679,168681],{"class":104,"line":254},[102,168676,40316],{"class":187},[102,168678,380],{"class":119},[102,168680,161079],{"class":278},[102,168682,390],{"class":119},[14,168684,168685,168686,168688,168689,36250],{},"菜单类程序通常使用 ",[83,168687,167387],{},"，用户选择退出时 ",[83,168690,10892],{},[43,168692,168694],{"id":168693},"_414-易错点","4.14 易错点",[87,168696,168697,168702,168708,168716,168722],{},[62,168698,168699,168701],{},[83,168700,116528],{}," 循环必须更新控制变量。",[62,168703,168704,168707],{},[83,168705,168706],{},"range(1, 10)"," 不包含 10。",[62,168709,168710,168712,168713,168715],{},[83,168711,10892],{}," 结束整个循环，",[83,168714,162537],{}," 只跳过本轮。",[62,168717,168718,168719,168721],{},"嵌套循环中，",[83,168720,10892],{}," 只跳出当前所在的一层循环。",[62,168723,168724],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[43,168726,168728],{"id":168727},"_415-本章练习","4.15 本章练习",[87,168730,168731,168734,168737,168740,168743],{},[62,168732,168733],{},"输出 1 到 100。",[62,168735,168736],{},"计算 1 到 100 的偶数和。",[62,168738,168739],{},"输出 100 以内能被 3 和 5 同时整除的数。",[62,168741,168742],{},"编写猜数字游戏，限制最多猜 7 次。",[62,168744,168745],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[8955,168747,168748],{},"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":98,"searchDepth":116,"depth":116,"links":168750},[168751,168752,168753,168754,168755,168759,168760,168761,168762,168763,168764,168765,168766,168767,168768],{"id":167007,"depth":116,"text":167008},{"id":167037,"depth":116,"text":167038},{"id":167126,"depth":116,"text":167127},{"id":167220,"depth":116,"text":167221},{"id":167394,"depth":116,"text":167395,"children":168756},[168757,168758],{"id":167398,"depth":123,"text":167399},{"id":167462,"depth":123,"text":167463},{"id":167526,"depth":116,"text":167527},{"id":167621,"depth":116,"text":167622},{"id":167730,"depth":116,"text":167731},{"id":167926,"depth":116,"text":167927},{"id":168011,"depth":116,"text":168012},{"id":168150,"depth":116,"text":168151},{"id":168330,"depth":116,"text":168331},{"id":168479,"depth":116,"text":168480},{"id":168693,"depth":116,"text":168694},{"id":168727,"depth":116,"text":168728},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":166999,"description":31240},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":168775,"title":168776,"body":168777,"description":31240,"extension":8978,"meta":170782,"navigation":651,"path":170783,"seo":170784,"stem":170785,"__hash__":170786},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":168778,"toc":170762},[168779,168782,168786,168789,168792,168806,168809,168823,168827,168829,168848,168850,168897,168899,168913,168917,168991,168994,168998,169001,169060,169068,169071,169124,169127,169131,169136,169191,169199,169249,169253,169258,169266,169365,169371,169375,169380,169383,169394,169435,169448,169452,169455,169491,169494,169507,169510,169570,169574,169578,169581,169632,169636,169639,169686,169692,169758,169761,169765,169768,169884,169887,169891,169894,170000,170004,170007,170045,170048,170090,170093,170153,170156,170160,170624,170627,170631,170658,170664,170725,170729,170759],[10,168780,168776],{"id":168781},"_5-函数基础",[43,168783,168785],{"id":168784},"_51-为什么需要函数","5.1 为什么需要函数",[14,168787,168788],{},"函数用于封装一段可以重复使用的代码。",[14,168790,168791],{},"不使用函数的问题：",[87,168793,168794,168797,168800,168803],{},[62,168795,168796],{},"重复代码多。",[62,168798,168799],{},"修改逻辑时容易漏改。",[62,168801,168802],{},"主流程不清晰。",[62,168804,168805],{},"程序越写越长，难以维护。",[14,168807,168808],{},"使用函数后的好处：",[87,168810,168811,168814,168817,168820],{},[62,168812,168813],{},"提高复用性。",[62,168815,168816],{},"提高可读性。",[62,168818,168819],{},"便于调试。",[62,168821,168822],{},"便于分工。",[43,168824,168826],{"id":168825},"_52-函数定义","5.2 函数定义",[14,168828,80],{},[93,168830,168832],{"className":38243,"code":168831,"language":38245,"meta":98,"style":98},"def 函数名():\n    函数体\n",[83,168833,168834,168843],{"__ignoreMap":98},[102,168835,168836,168838,168841],{"class":104,"line":105},[102,168837,39812],{"class":108},[102,168839,168840],{"class":112}," 函数名",[102,168842,39818],{"class":119},[102,168844,168845],{"class":104,"line":116},[102,168846,168847],{"class":119},"    函数体\n",[14,168849,619],{},[93,168851,168853],{"className":38243,"code":168852,"language":38245,"meta":98,"style":98},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[83,168854,168855,168864,168874,168884,168888,168892],{"__ignoreMap":98},[102,168856,168857,168859,168862],{"class":104,"line":105},[102,168858,39812],{"class":108},[102,168860,168861],{"class":112}," say_hello",[102,168863,39818],{"class":119},[102,168865,168866,168868,168870,168872],{"class":104,"line":116},[102,168867,39164],{"class":187},[102,168869,380],{"class":119},[102,168871,14642],{"class":278},[102,168873,390],{"class":119},[102,168875,168876,168878,168880,168882],{"class":104,"line":123},[102,168877,39164],{"class":187},[102,168879,380],{"class":119},[102,168881,154504],{"class":278},[102,168883,390],{"class":119},[102,168885,168886],{"class":104,"line":130},[102,168887,652],{"emptyLinePlaceholder":651},[102,168889,168890],{"class":104,"line":136},[102,168891,652],{"emptyLinePlaceholder":651},[102,168893,168894],{"class":104,"line":142},[102,168895,168896],{"class":119},"say_hello()\n",[14,168898,7501],{},[87,168900,168901,168904,168907,168910],{},[62,168902,168903],{},"函数必须先定义，再调用。",[62,168905,168906],{},"函数名遵循变量命名规则。",[62,168908,168909],{},"函数体需要缩进。",[62,168911,168912],{},"函数不调用就不会执行。",[43,168914,168916],{"id":168915},"_53-函数调用","5.3 函数调用",[93,168918,168920],{"className":38243,"code":168919,"language":38245,"meta":98,"style":98},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[83,168921,168922,168931,168942,168953,168964,168974,168978,168982,168987],{"__ignoreMap":98},[102,168923,168924,168926,168929],{"class":104,"line":105},[102,168925,39812],{"class":108},[102,168927,168928],{"class":112}," print_menu",[102,168930,39818],{"class":119},[102,168932,168933,168935,168937,168940],{"class":104,"line":116},[102,168934,39164],{"class":187},[102,168936,380],{"class":119},[102,168938,168939],{"class":278},"\"1. 查询\"",[102,168941,390],{"class":119},[102,168943,168944,168946,168948,168951],{"class":104,"line":123},[102,168945,39164],{"class":187},[102,168947,380],{"class":119},[102,168949,168950],{"class":278},"\"2. 添加\"",[102,168952,390],{"class":119},[102,168954,168955,168957,168959,168962],{"class":104,"line":130},[102,168956,39164],{"class":187},[102,168958,380],{"class":119},[102,168960,168961],{"class":278},"\"3. 删除\"",[102,168963,390],{"class":119},[102,168965,168966,168968,168970,168972],{"class":104,"line":136},[102,168967,39164],{"class":187},[102,168969,380],{"class":119},[102,168971,168546],{"class":278},[102,168973,390],{"class":119},[102,168975,168976],{"class":104,"line":142},[102,168977,652],{"emptyLinePlaceholder":651},[102,168979,168980],{"class":104,"line":148},[102,168981,652],{"emptyLinePlaceholder":651},[102,168983,168984],{"class":104,"line":157},[102,168985,168986],{"class":119},"print_menu()\n",[102,168988,168989],{"class":104,"line":163},[102,168990,168986],{"class":119},[14,168992,168993],{},"函数可以多次调用，每次调用都会执行函数体。",[43,168995,168997],{"id":168996},"_54-参数","5.4 参数",[14,168999,169000],{},"参数用于向函数传递数据。",[93,169002,169004],{"className":38243,"code":169003,"language":38245,"meta":98,"style":98},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[83,169005,169006,169015,169035,169039,169043,169052],{"__ignoreMap":98},[102,169007,169008,169010,169012],{"class":104,"line":105},[102,169009,39812],{"class":108},[102,169011,168861],{"class":112},[102,169013,169014],{"class":119},"(name):\n",[102,169016,169017,169019,169021,169023,169025,169027,169029,169031,169033],{"class":104,"line":116},[102,169018,39164],{"class":187},[102,169020,380],{"class":119},[102,169022,9097],{"class":108},[102,169024,164919],{"class":278},[102,169026,9918],{"class":187},[102,169028,87675],{"class":119},[102,169030,9967],{"class":187},[102,169032,9288],{"class":278},[102,169034,390],{"class":119},[102,169036,169037],{"class":104,"line":123},[102,169038,652],{"emptyLinePlaceholder":651},[102,169040,169041],{"class":104,"line":130},[102,169042,652],{"emptyLinePlaceholder":651},[102,169044,169045,169048,169050],{"class":104,"line":136},[102,169046,169047],{"class":119},"say_hello(",[102,169049,157753],{"class":278},[102,169051,390],{"class":119},[102,169053,169054,169056,169058],{"class":104,"line":142},[102,169055,169047],{"class":119},[102,169057,158801],{"class":278},[102,169059,390],{"class":119},[14,169061,169062,169064,169065,169067],{},[83,169063,87675],{}," 是形参，",[83,169066,157753],{}," 是实参。",[14,169069,169070],{},"多个参数：",[93,169072,169074],{"className":38243,"code":169073,"language":38245,"meta":98,"style":98},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[83,169075,169076,169084,169097,169103,169107,169111],{"__ignoreMap":98},[102,169077,169078,169080,169082],{"class":104,"line":105},[102,169079,39812],{"class":108},[102,169081,14015],{"class":112},[102,169083,158958],{"class":119},[102,169085,169086,169089,169091,169093,169095],{"class":104,"line":116},[102,169087,169088],{"class":119},"    result ",[102,169090,260],{"class":108},[102,169092,19610],{"class":119},[102,169094,1702],{"class":108},[102,169096,158969],{"class":119},[102,169098,169099,169101],{"class":104,"line":123},[102,169100,39164],{"class":187},[102,169102,84450],{"class":119},[102,169104,169105],{"class":104,"line":130},[102,169106,652],{"emptyLinePlaceholder":651},[102,169108,169109],{"class":104,"line":136},[102,169110,652],{"emptyLinePlaceholder":651},[102,169112,169113,169116,169118,169120,169122],{"class":104,"line":142},[102,169114,169115],{"class":119},"add(",[102,169117,263],{"class":187},[102,169119,2571],{"class":119},[102,169121,5016],{"class":187},[102,169123,390],{"class":119},[14,169125,169126],{},"调用时参数数量必须匹配。",[43,169128,169130],{"id":169129},"_55-返回值","5.5 返回值",[14,169132,169133,169135],{},[83,169134,2607],{}," 用于把函数内部的结果返回给调用者。",[93,169137,169139],{"className":38243,"code":169138,"language":38245,"meta":98,"style":98},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[83,169140,169141,169149,169159,169163,169167,169185],{"__ignoreMap":98},[102,169142,169143,169145,169147],{"class":104,"line":105},[102,169144,39812],{"class":108},[102,169146,14015],{"class":112},[102,169148,158958],{"class":119},[102,169150,169151,169153,169155,169157],{"class":104,"line":116},[102,169152,863],{"class":108},[102,169154,19610],{"class":119},[102,169156,1702],{"class":108},[102,169158,158969],{"class":119},[102,169160,169161],{"class":104,"line":123},[102,169162,652],{"emptyLinePlaceholder":651},[102,169164,169165],{"class":104,"line":130},[102,169166,652],{"emptyLinePlaceholder":651},[102,169168,169169,169172,169174,169177,169179,169181,169183],{"class":104,"line":136},[102,169170,169171],{"class":119},"result ",[102,169173,260],{"class":108},[102,169175,169176],{"class":119}," add(",[102,169178,263],{"class":187},[102,169180,2571],{"class":119},[102,169182,5016],{"class":187},[102,169184,390],{"class":119},[102,169186,169187,169189],{"class":104,"line":142},[102,169188,38280],{"class":187},[102,169190,84450],{"class":119},[14,169192,169193,169194,169196,169197,36250],{},"如果函数没有写 ",[83,169195,2607],{},"，默认返回 ",[83,169198,103551],{},[93,169200,169202],{"className":38243,"code":169201,"language":38245,"meta":98,"style":98},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[83,169203,169204,169212,169222,169226,169230,169239],{"__ignoreMap":98},[102,169205,169206,169208,169210],{"class":104,"line":105},[102,169207,39812],{"class":108},[102,169209,168861],{"class":112},[102,169211,39818],{"class":119},[102,169213,169214,169216,169218,169220],{"class":104,"line":116},[102,169215,39164],{"class":187},[102,169217,380],{"class":119},[102,169219,14642],{"class":278},[102,169221,390],{"class":119},[102,169223,169224],{"class":104,"line":123},[102,169225,652],{"emptyLinePlaceholder":651},[102,169227,169228],{"class":104,"line":130},[102,169229,652],{"emptyLinePlaceholder":651},[102,169231,169232,169234,169236],{"class":104,"line":136},[102,169233,169171],{"class":119},[102,169235,260],{"class":108},[102,169237,169238],{"class":119}," say_hello()\n",[102,169240,169241,169243,169246],{"class":104,"line":142},[102,169242,38280],{"class":187},[102,169244,169245],{"class":119},"(result)  ",[102,169247,169248],{"class":126},"# None\n",[43,169250,169252],{"id":169251},"_56-return的作用","5.6 return的作用",[14,169254,169255,169257],{},[83,169256,2607],{}," 有两个作用：",[87,169259,169260,169263],{},[62,169261,169262],{},"返回结果。",[62,169264,169265],{},"结束函数。",[93,169267,169269],{"className":38243,"code":169268,"language":38245,"meta":98,"style":98},"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",[83,169270,169271,169281,169293,169300,169304,169316,169323,169327,169334,169338,169342,169353],{"__ignoreMap":98},[102,169272,169273,169275,169278],{"class":104,"line":105},[102,169274,39812],{"class":108},[102,169276,169277],{"class":112}," check_age",[102,169279,169280],{"class":119},"(age):\n",[102,169282,169283,169285,169287,169289,169291],{"class":104,"line":116},[102,169284,2343],{"class":108},[102,169286,1216],{"class":119},[102,169288,1208],{"class":108},[102,169290,866],{"class":187},[102,169292,12552],{"class":119},[102,169294,169295,169297],{"class":104,"line":123},[102,169296,184],{"class":108},[102,169298,169299],{"class":278}," \"年龄不合法\"\n",[102,169301,169302],{"class":104,"line":130},[102,169303,652],{"emptyLinePlaceholder":651},[102,169305,169306,169308,169310,169312,169314],{"class":104,"line":136},[102,169307,2343],{"class":108},[102,169309,1216],{"class":119},[102,169311,10571],{"class":108},[102,169313,164150],{"class":187},[102,169315,12552],{"class":119},[102,169317,169318,169320],{"class":104,"line":142},[102,169319,184],{"class":108},[102,169321,169322],{"class":278}," \"成年人\"\n",[102,169324,169325],{"class":104,"line":148},[102,169326,652],{"emptyLinePlaceholder":651},[102,169328,169329,169331],{"class":104,"line":157},[102,169330,863],{"class":108},[102,169332,169333],{"class":278}," \"未成年人\"\n",[102,169335,169336],{"class":104,"line":163},[102,169337,652],{"emptyLinePlaceholder":651},[102,169339,169340],{"class":104,"line":175},[102,169341,652],{"emptyLinePlaceholder":651},[102,169343,169344,169346,169349,169351],{"class":104,"line":181},[102,169345,38280],{"class":187},[102,169347,169348],{"class":119},"(check_age(",[102,169350,5016],{"class":187},[102,169352,38362],{"class":119},[102,169354,169355,169357,169359,169361,169363],{"class":104,"line":202},[102,169356,38280],{"class":187},[102,169358,169348],{"class":119},[102,169360,2833],{"class":108},[102,169362,7039],{"class":187},[102,169364,38362],{"class":119},[14,169366,169367,169368,169370],{},"函数执行到 ",[83,169369,2607],{}," 后，后面的代码不会继续执行。",[43,169372,169374],{"id":169373},"_57-none","5.7 None",[14,169376,169377,169379],{},[83,169378,103551],{}," 表示空值或没有结果。",[14,169381,169382],{},"常见使用场景：",[87,169384,169385,169388,169391],{},[62,169386,169387],{},"函数没有返回值。",[62,169389,169390],{},"变量暂时没有具体值。",[62,169392,169393],{},"表示查询不到结果。",[93,169395,169397],{"className":38243,"code":169396,"language":38245,"meta":98,"style":98},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[83,169398,169399,169407,169411,169424],{"__ignoreMap":98},[102,169400,169401,169403,169405],{"class":104,"line":105},[102,169402,169171],{"class":119},[102,169404,260],{"class":108},[102,169406,160037],{"class":187},[102,169408,169409],{"class":104,"line":116},[102,169410,652],{"emptyLinePlaceholder":651},[102,169412,169413,169415,169418,169420,169422],{"class":104,"line":123},[102,169414,10407],{"class":108},[102,169416,169417],{"class":119}," result ",[102,169419,46792],{"class":108},[102,169421,46798],{"class":187},[102,169423,12552],{"class":119},[102,169425,169426,169428,169430,169433],{"class":104,"line":130},[102,169427,39164],{"class":187},[102,169429,380],{"class":119},[102,169431,169432],{"class":278},"\"没有数据\"",[102,169434,390],{"class":119},[14,169436,169437,169438,169440,169441,169444,169445,36250],{},"判断 ",[83,169439,103551],{}," 推荐使用 ",[83,169442,169443],{},"is None","，不要写成 ",[83,169446,169447],{},"== None",[43,169449,169451],{"id":169450},"_58-函数文档字符串","5.8 函数文档字符串",[14,169453,169454],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[93,169456,169458],{"className":38243,"code":169457,"language":38245,"meta":98,"style":98},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[83,169459,169460,169470,169475],{"__ignoreMap":98},[102,169461,169462,169464,169467],{"class":104,"line":105},[102,169463,39812],{"class":108},[102,169465,169466],{"class":112}," calculate_bmi",[102,169468,169469],{"class":119},"(weight, height):\n",[102,169471,169472],{"class":104,"line":116},[102,169473,169474],{"class":278},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[102,169476,169477,169479,169482,169484,169487,169489],{"class":104,"line":123},[102,169478,863],{"class":108},[102,169480,169481],{"class":119}," weight ",[102,169483,9611],{"class":108},[102,169485,169486],{"class":119}," height ",[102,169488,19403],{"class":108},[102,169490,55588],{"class":187},[14,169492,169493],{},"查看说明：",[93,169495,169497],{"className":38243,"code":169496,"language":38245,"meta":98,"style":98},"help(calculate_bmi)\n",[83,169498,169499],{"__ignoreMap":98},[102,169500,169501,169504],{"class":104,"line":105},[102,169502,169503],{"class":187},"help",[102,169505,169506],{"class":119},"(calculate_bmi)\n",[14,169508,169509],{},"较完整的写法：",[93,169511,169513],{"className":38243,"code":169512,"language":38245,"meta":98,"style":98},"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",[83,169514,169515,169523,169528,169533,169537,169542,169547,169552,169556],{"__ignoreMap":98},[102,169516,169517,169519,169521],{"class":104,"line":105},[102,169518,39812],{"class":108},[102,169520,169466],{"class":112},[102,169522,169469],{"class":119},[102,169524,169525],{"class":104,"line":116},[102,169526,169527],{"class":278},"    \"\"\"\n",[102,169529,169530],{"class":104,"line":123},[102,169531,169532],{"class":278},"    计算BMI。\n",[102,169534,169535],{"class":104,"line":130},[102,169536,652],{"emptyLinePlaceholder":651},[102,169538,169539],{"class":104,"line":136},[102,169540,169541],{"class":278},"    :param weight: 体重，单位kg\n",[102,169543,169544],{"class":104,"line":142},[102,169545,169546],{"class":278},"    :param height: 身高，单位m\n",[102,169548,169549],{"class":104,"line":148},[102,169550,169551],{"class":278},"    :return: BMI数值\n",[102,169553,169554],{"class":104,"line":157},[102,169555,169527],{"class":278},[102,169557,169558,169560,169562,169564,169566,169568],{"class":104,"line":163},[102,169559,863],{"class":108},[102,169561,169481],{"class":119},[102,169563,9611],{"class":108},[102,169565,169486],{"class":119},[102,169567,19403],{"class":108},[102,169569,55588],{"class":187},[43,169571,169573],{"id":169572},"_59-变量作用域","5.9 变量作用域",[48,169575,169577],{"id":169576},"_591-局部变量","5.9.1 局部变量",[14,169579,169580],{},"在函数内部定义的变量，只能在函数内部使用。",[93,169582,169584],{"className":38243,"code":169583,"language":38245,"meta":98,"style":98},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[83,169585,169586,169595,169603,169609,169613,169617,169622],{"__ignoreMap":98},[102,169587,169588,169590,169593],{"class":104,"line":105},[102,169589,39812],{"class":108},[102,169591,169592],{"class":112}," test",[102,169594,39818],{"class":119},[102,169596,169597,169599,169601],{"class":104,"line":116},[102,169598,53458],{"class":119},[102,169600,260],{"class":108},[102,169602,66293],{"class":187},[102,169604,169605,169607],{"class":104,"line":123},[102,169606,39164],{"class":187},[102,169608,9060],{"class":119},[102,169610,169611],{"class":104,"line":130},[102,169612,652],{"emptyLinePlaceholder":651},[102,169614,169615],{"class":104,"line":136},[102,169616,652],{"emptyLinePlaceholder":651},[102,169618,169619],{"class":104,"line":142},[102,169620,169621],{"class":119},"test()\n",[102,169623,169624,169626,169629],{"class":104,"line":148},[102,169625,38280],{"class":187},[102,169627,169628],{"class":119},"(num)  ",[102,169630,169631],{"class":126},"# 报错\n",[48,169633,169635],{"id":169634},"_592-全局变量","5.9.2 全局变量",[14,169637,169638],{},"在函数外部定义的变量，可以在函数内部读取。",[93,169640,169642],{"className":38243,"code":169641,"language":38245,"meta":98,"style":98},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[83,169643,169644,169652,169656,169660,169668,169674,169678,169682],{"__ignoreMap":98},[102,169645,169646,169648,169650],{"class":104,"line":105},[102,169647,154401],{"class":119},[102,169649,260],{"class":108},[102,169651,157218],{"class":278},[102,169653,169654],{"class":104,"line":116},[102,169655,652],{"emptyLinePlaceholder":651},[102,169657,169658],{"class":104,"line":123},[102,169659,652],{"emptyLinePlaceholder":651},[102,169661,169662,169664,169666],{"class":104,"line":130},[102,169663,39812],{"class":108},[102,169665,168861],{"class":112},[102,169667,39818],{"class":119},[102,169669,169670,169672],{"class":104,"line":136},[102,169671,39164],{"class":187},[102,169673,158525],{"class":119},[102,169675,169676],{"class":104,"line":142},[102,169677,652],{"emptyLinePlaceholder":651},[102,169679,169680],{"class":104,"line":148},[102,169681,652],{"emptyLinePlaceholder":651},[102,169683,169684],{"class":104,"line":157},[102,169685,168896],{"class":119},[14,169687,169688,169689,36250],{},"如果要在函数内部修改全局变量，需要 ",[83,169690,169691],{},"global",[93,169693,169695],{"className":38243,"code":169694,"language":38245,"meta":98,"style":98},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[83,169696,169697,169705,169709,169713,169722,169730,169738,169742,169746,169751],{"__ignoreMap":98},[102,169698,169699,169701,169703],{"class":104,"line":105},[102,169700,154556],{"class":119},[102,169702,260],{"class":108},[102,169704,55198],{"class":187},[102,169706,169707],{"class":104,"line":116},[102,169708,652],{"emptyLinePlaceholder":651},[102,169710,169711],{"class":104,"line":123},[102,169712,652],{"emptyLinePlaceholder":651},[102,169714,169715,169717,169720],{"class":104,"line":130},[102,169716,39812],{"class":108},[102,169718,169719],{"class":112}," add_count",[102,169721,39818],{"class":119},[102,169723,169724,169727],{"class":104,"line":136},[102,169725,169726],{"class":108},"    global",[102,169728,169729],{"class":119}," count\n",[102,169731,169732,169734,169736],{"class":104,"line":142},[102,169733,167298],{"class":119},[102,169735,18244],{"class":108},[102,169737,63564],{"class":187},[102,169739,169740],{"class":104,"line":148},[102,169741,652],{"emptyLinePlaceholder":651},[102,169743,169744],{"class":104,"line":157},[102,169745,652],{"emptyLinePlaceholder":651},[102,169747,169748],{"class":104,"line":163},[102,169749,169750],{"class":119},"add_count()\n",[102,169752,169753,169755],{"class":104,"line":175},[102,169754,38280],{"class":187},[102,169756,169757],{"class":119},"(count)\n",[14,169759,169760],{},"不建议大量使用全局变量，项目变大后很难维护。",[43,169762,169764],{"id":169763},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,169766,169767],{},"一个函数中可以调用另一个函数。",[93,169769,169771],{"className":38243,"code":169770,"language":38245,"meta":98,"style":98},"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",[83,169772,169773,169782,169796,169800,169804,169813,169818,169838,169859,169863,169867,169871],{"__ignoreMap":98},[102,169774,169775,169777,169780],{"class":104,"line":105},[102,169776,39812],{"class":108},[102,169778,169779],{"class":112}," print_line",[102,169781,39818],{"class":119},[102,169783,169784,169786,169788,169790,169792,169794],{"class":104,"line":116},[102,169785,39164],{"class":187},[102,169787,380],{"class":119},[102,169789,40348],{"class":278},[102,169791,5159],{"class":108},[102,169793,86530],{"class":187},[102,169795,390],{"class":119},[102,169797,169798],{"class":104,"line":123},[102,169799,652],{"emptyLinePlaceholder":651},[102,169801,169802],{"class":104,"line":130},[102,169803,652],{"emptyLinePlaceholder":651},[102,169805,169806,169808,169811],{"class":104,"line":136},[102,169807,39812],{"class":108},[102,169809,169810],{"class":112}," print_info",[102,169812,157240],{"class":119},[102,169814,169815],{"class":104,"line":142},[102,169816,169817],{"class":119},"    print_line()\n",[102,169819,169820,169822,169824,169826,169828,169830,169832,169834,169836],{"class":104,"line":148},[102,169821,39164],{"class":187},[102,169823,380],{"class":119},[102,169825,9097],{"class":108},[102,169827,164547],{"class":278},[102,169829,9918],{"class":187},[102,169831,87675],{"class":119},[102,169833,9967],{"class":187},[102,169835,9288],{"class":278},[102,169837,390],{"class":119},[102,169839,169840,169842,169844,169846,169849,169851,169853,169855,169857],{"class":104,"line":157},[102,169841,39164],{"class":187},[102,169843,380],{"class":119},[102,169845,9097],{"class":108},[102,169847,169848],{"class":278},"\"年龄:",[102,169850,9918],{"class":187},[102,169852,78086],{"class":119},[102,169854,9967],{"class":187},[102,169856,9288],{"class":278},[102,169858,390],{"class":119},[102,169860,169861],{"class":104,"line":163},[102,169862,169817],{"class":119},[102,169864,169865],{"class":104,"line":175},[102,169866,652],{"emptyLinePlaceholder":651},[102,169868,169869],{"class":104,"line":181},[102,169870,652],{"emptyLinePlaceholder":651},[102,169872,169873,169876,169878,169880,169882],{"class":104,"line":202},[102,169874,169875],{"class":119},"print_info(",[102,169877,157753],{"class":278},[102,169879,2571],{"class":119},[102,169881,6080],{"class":187},[102,169883,390],{"class":119},[14,169885,169886],{},"这种方式可以把小功能组合成大功能。",[43,169888,169890],{"id":169889},"_511-参数检查","5.11 参数检查",[14,169892,169893],{},"函数内部可以检查参数是否合法。",[93,169895,169897],{"className":38243,"code":169896,"language":38245,"meta":98,"style":98},"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",[83,169898,169899,169908,169920,169926,169936,169940,169944,169961,169965,169977,169988,169994],{"__ignoreMap":98},[102,169900,169901,169903,169906],{"class":104,"line":105},[102,169902,39812],{"class":108},[102,169904,169905],{"class":112}," divide",[102,169907,158958],{"class":119},[102,169909,169910,169912,169914,169916,169918],{"class":104,"line":116},[102,169911,2343],{"class":108},[102,169913,19623],{"class":119},[102,169915,1876],{"class":108},[102,169917,866],{"class":187},[102,169919,12552],{"class":119},[102,169921,169922,169924],{"class":104,"line":123},[102,169923,184],{"class":108},[102,169925,160037],{"class":187},[102,169927,169928,169930,169932,169934],{"class":104,"line":130},[102,169929,863],{"class":108},[102,169931,19610],{"class":119},[102,169933,9611],{"class":108},[102,169935,158969],{"class":119},[102,169937,169938],{"class":104,"line":136},[102,169939,652],{"emptyLinePlaceholder":651},[102,169941,169942],{"class":104,"line":142},[102,169943,652],{"emptyLinePlaceholder":651},[102,169945,169946,169948,169950,169953,169955,169957,169959],{"class":104,"line":148},[102,169947,169171],{"class":119},[102,169949,260],{"class":108},[102,169951,169952],{"class":119}," divide(",[102,169954,263],{"class":187},[102,169956,2571],{"class":119},[102,169958,8423],{"class":187},[102,169960,390],{"class":119},[102,169962,169963],{"class":104,"line":157},[102,169964,652],{"emptyLinePlaceholder":651},[102,169966,169967,169969,169971,169973,169975],{"class":104,"line":163},[102,169968,10407],{"class":108},[102,169970,169417],{"class":119},[102,169972,46792],{"class":108},[102,169974,46798],{"class":187},[102,169976,12552],{"class":119},[102,169978,169979,169981,169983,169986],{"class":104,"line":175},[102,169980,39164],{"class":187},[102,169982,380],{"class":119},[102,169984,169985],{"class":278},"\"除数不能为0\"",[102,169987,390],{"class":119},[102,169989,169990,169992],{"class":104,"line":181},[102,169991,10562],{"class":108},[102,169993,12552],{"class":119},[102,169995,169996,169998],{"class":104,"line":202},[102,169997,39164],{"class":187},[102,169999,84450],{"class":119},[43,170001,170003],{"id":170002},"_512-类型提示","5.12 类型提示",[14,170005,170006],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[93,170008,170010],{"className":38243,"code":170009,"language":38245,"meta":98,"style":98},"def add(a: int, b: int) -> int:\n    return a + b\n",[83,170011,170012,170035],{"__ignoreMap":98},[102,170013,170014,170016,170018,170021,170023,170026,170028,170031,170033],{"class":104,"line":105},[102,170015,39812],{"class":108},[102,170017,14015],{"class":112},[102,170019,170020],{"class":119},"(a: ",[102,170022,217],{"class":187},[102,170024,170025],{"class":119},", b: ",[102,170027,217],{"class":187},[102,170029,170030],{"class":119},") -> ",[102,170032,217],{"class":187},[102,170034,12552],{"class":119},[102,170036,170037,170039,170041,170043],{"class":104,"line":116},[102,170038,863],{"class":108},[102,170040,19610],{"class":119},[102,170042,1702],{"class":108},[102,170044,158969],{"class":119},[14,170046,170047],{},"字符串参数：",[93,170049,170051],{"className":38243,"code":170050,"language":38245,"meta":98,"style":98},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[83,170052,170053,170070],{"__ignoreMap":98},[102,170054,170055,170057,170059,170062,170064,170066,170068],{"class":104,"line":105},[102,170056,39812],{"class":108},[102,170058,168861],{"class":112},[102,170060,170061],{"class":119},"(name: ",[102,170063,10185],{"class":187},[102,170065,170030],{"class":119},[102,170067,103551],{"class":187},[102,170069,12552],{"class":119},[102,170071,170072,170074,170076,170078,170080,170082,170084,170086,170088],{"class":104,"line":116},[102,170073,39164],{"class":187},[102,170075,380],{"class":119},[102,170077,9097],{"class":108},[102,170079,164919],{"class":278},[102,170081,9918],{"class":187},[102,170083,87675],{"class":119},[102,170085,9967],{"class":187},[102,170087,9288],{"class":278},[102,170089,390],{"class":119},[14,170091,170092],{},"列表参数：",[93,170094,170096],{"className":38243,"code":170095,"language":38245,"meta":98,"style":98},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[83,170097,170098,170117,170125,170137,170146],{"__ignoreMap":98},[102,170099,170100,170102,170105,170108,170110,170113,170115],{"class":104,"line":105},[102,170101,39812],{"class":108},[102,170103,170104],{"class":112}," get_total",[102,170106,170107],{"class":119},"(numbers: list[",[102,170109,217],{"class":187},[102,170111,170112],{"class":119},"]) -> ",[102,170114,217],{"class":187},[102,170116,12552],{"class":119},[102,170118,170119,170121,170123],{"class":104,"line":116},[102,170120,167172],{"class":119},[102,170122,260],{"class":108},[102,170124,55198],{"class":187},[102,170126,170127,170129,170132,170134],{"class":104,"line":123},[102,170128,12016],{"class":108},[102,170130,170131],{"class":119}," number ",[102,170133,33908],{"class":108},[102,170135,170136],{"class":119}," numbers:\n",[102,170138,170139,170141,170143],{"class":104,"line":130},[102,170140,167847],{"class":119},[102,170142,18244],{"class":108},[102,170144,170145],{"class":119}," number\n",[102,170147,170148,170150],{"class":104,"line":136},[102,170149,863],{"class":108},[102,170151,170152],{"class":119}," total\n",[14,170154,170155],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[43,170157,170159],{"id":170158},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[93,170161,170163],{"className":38243,"code":170162,"language":38245,"meta":98,"style":98},"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",[83,170164,170165,170175,170179,170183,170191,170202,170212,170222,170232,170242,170246,170250,170259,170281,170285,170289,170298,170304,170324,170336,170347,170351,170360,170371,170376,170380,170384,170393,170399,170418,170430,170440,170444,170455,170465,170469,170477,170488,170492,170496,170500,170508,170513,170527,170531,170543,170548,170560,170565,170577,170582,170594,170604,170608,170614],{"__ignoreMap":98},[102,170166,170167,170170,170172],{"class":104,"line":105},[102,170168,170169],{"class":119},"balance ",[102,170171,260],{"class":108},[102,170173,170174],{"class":187}," 1000\n",[102,170176,170177],{"class":104,"line":116},[102,170178,652],{"emptyLinePlaceholder":651},[102,170180,170181],{"class":104,"line":123},[102,170182,652],{"emptyLinePlaceholder":651},[102,170184,170185,170187,170189],{"class":104,"line":130},[102,170186,39812],{"class":108},[102,170188,159898],{"class":112},[102,170190,39818],{"class":119},[102,170192,170193,170195,170197,170200],{"class":104,"line":136},[102,170194,39164],{"class":187},[102,170196,380],{"class":119},[102,170198,170199],{"class":278},"\"====== ATM ======\"",[102,170201,390],{"class":119},[102,170203,170204,170206,170208,170210],{"class":104,"line":142},[102,170205,39164],{"class":187},[102,170207,380],{"class":119},[102,170209,168513],{"class":278},[102,170211,390],{"class":119},[102,170213,170214,170216,170218,170220],{"class":104,"line":148},[102,170215,39164],{"class":187},[102,170217,380],{"class":119},[102,170219,168524],{"class":278},[102,170221,390],{"class":119},[102,170223,170224,170226,170228,170230],{"class":104,"line":157},[102,170225,39164],{"class":187},[102,170227,380],{"class":119},[102,170229,168535],{"class":278},[102,170231,390],{"class":119},[102,170233,170234,170236,170238,170240],{"class":104,"line":163},[102,170235,39164],{"class":187},[102,170237,380],{"class":119},[102,170239,168546],{"class":278},[102,170241,390],{"class":119},[102,170243,170244],{"class":104,"line":175},[102,170245,652],{"emptyLinePlaceholder":651},[102,170247,170248],{"class":104,"line":181},[102,170249,652],{"emptyLinePlaceholder":651},[102,170251,170252,170254,170257],{"class":104,"line":202},[102,170253,39812],{"class":108},[102,170255,170256],{"class":112}," show_balance",[102,170258,39818],{"class":119},[102,170260,170261,170263,170265,170267,170270,170272,170275,170277,170279],{"class":104,"line":208},[102,170262,39164],{"class":187},[102,170264,380],{"class":119},[102,170266,9097],{"class":108},[102,170268,170269],{"class":278},"\"当前余额:",[102,170271,9918],{"class":187},[102,170273,170274],{"class":119},"balance",[102,170276,9967],{"class":187},[102,170278,164877],{"class":278},[102,170280,390],{"class":119},[102,170282,170283],{"class":104,"line":214},[102,170284,652],{"emptyLinePlaceholder":651},[102,170286,170287],{"class":104,"line":225},[102,170288,652],{"emptyLinePlaceholder":651},[102,170290,170291,170293,170296],{"class":104,"line":230},[102,170292,39812],{"class":108},[102,170294,170295],{"class":112}," save_money",[102,170297,39818],{"class":119},[102,170299,170300,170302],{"class":104,"line":236},[102,170301,169726],{"class":108},[102,170303,157964],{"class":119},[102,170305,170306,170309,170311,170313,170315,170317,170319,170322],{"class":104,"line":242},[102,170307,170308],{"class":119},"    money ",[102,170310,260],{"class":108},[102,170312,117662],{"class":187},[102,170314,380],{"class":119},[102,170316,61686],{"class":187},[102,170318,380],{"class":119},[102,170320,170321],{"class":278},"\"请输入存款金额:\"",[102,170323,38362],{"class":119},[102,170325,170326,170328,170330,170332,170334],{"class":104,"line":248},[102,170327,2343],{"class":108},[102,170329,158007],{"class":119},[102,170331,10461],{"class":108},[102,170333,866],{"class":187},[102,170335,12552],{"class":119},[102,170337,170338,170340,170342,170345],{"class":104,"line":254},[102,170339,40316],{"class":187},[102,170341,380],{"class":119},[102,170343,170344],{"class":278},"\"金额必须大于0\"",[102,170346,390],{"class":119},[102,170348,170349],{"class":104,"line":269},[102,170350,160226],{"class":108},[102,170352,170353,170356,170358],{"class":104,"line":298},[102,170354,170355],{"class":119},"    balance ",[102,170357,18244],{"class":108},[102,170359,158040],{"class":119},[102,170361,170362,170364,170366,170369],{"class":104,"line":502},[102,170363,39164],{"class":187},[102,170365,380],{"class":119},[102,170367,170368],{"class":278},"\"存款成功\"",[102,170370,390],{"class":119},[102,170372,170373],{"class":104,"line":507},[102,170374,170375],{"class":119},"    show_balance()\n",[102,170377,170378],{"class":104,"line":512},[102,170379,652],{"emptyLinePlaceholder":651},[102,170381,170382],{"class":104,"line":521},[102,170383,652],{"emptyLinePlaceholder":651},[102,170385,170386,170388,170391],{"class":104,"line":526},[102,170387,39812],{"class":108},[102,170389,170390],{"class":112}," withdraw_money",[102,170392,39818],{"class":119},[102,170394,170395,170397],{"class":104,"line":532},[102,170396,169726],{"class":108},[102,170398,157964],{"class":119},[102,170400,170401,170403,170405,170407,170409,170411,170413,170416],{"class":104,"line":538},[102,170402,170308],{"class":119},[102,170404,260],{"class":108},[102,170406,117662],{"class":187},[102,170408,380],{"class":119},[102,170410,61686],{"class":187},[102,170412,380],{"class":119},[102,170414,170415],{"class":278},"\"请输入取款金额:\"",[102,170417,38362],{"class":119},[102,170419,170420,170422,170424,170426,170428],{"class":104,"line":555},[102,170421,2343],{"class":108},[102,170423,158007],{"class":119},[102,170425,10461],{"class":108},[102,170427,866],{"class":187},[102,170429,12552],{"class":119},[102,170431,170432,170434,170436,170438],{"class":104,"line":570},[102,170433,40316],{"class":187},[102,170435,380],{"class":119},[102,170437,170344],{"class":278},[102,170439,390],{"class":119},[102,170441,170442],{"class":104,"line":581},[102,170443,160226],{"class":108},[102,170445,170446,170448,170450,170452],{"class":104,"line":819},[102,170447,2343],{"class":108},[102,170449,158007],{"class":119},[102,170451,1219],{"class":108},[102,170453,170454],{"class":119}," balance:\n",[102,170456,170457,170459,170461,170463],{"class":104,"line":828},[102,170458,40316],{"class":187},[102,170460,380],{"class":119},[102,170462,158102],{"class":278},[102,170464,390],{"class":119},[102,170466,170467],{"class":104,"line":837},[102,170468,160226],{"class":108},[102,170470,170471,170473,170475],{"class":104,"line":842},[102,170472,170355],{"class":119},[102,170474,158117],{"class":108},[102,170476,158040],{"class":119},[102,170478,170479,170481,170483,170486],{"class":104,"line":855},[102,170480,39164],{"class":187},[102,170482,380],{"class":119},[102,170484,170485],{"class":278},"\"取款成功\"",[102,170487,390],{"class":119},[102,170489,170490],{"class":104,"line":860},[102,170491,170375],{"class":119},[102,170493,170494],{"class":104,"line":871},[102,170495,652],{"emptyLinePlaceholder":651},[102,170497,170498],{"class":104,"line":1359},[102,170499,652],{"emptyLinePlaceholder":651},[102,170501,170502,170504,170506],{"class":104,"line":1368},[102,170503,116528],{"class":108},[102,170505,103157],{"class":187},[102,170507,12552],{"class":119},[102,170509,170510],{"class":104,"line":1373},[102,170511,170512],{"class":119},"    show_menu()\n",[102,170514,170515,170517,170519,170521,170523,170525],{"class":104,"line":1378},[102,170516,168557],{"class":119},[102,170518,260],{"class":108},[102,170520,68470],{"class":187},[102,170522,380],{"class":119},[102,170524,160938],{"class":278},[102,170526,390],{"class":119},[102,170528,170529],{"class":104,"line":1384},[102,170530,652],{"emptyLinePlaceholder":651},[102,170532,170533,170535,170537,170539,170541],{"class":104,"line":1398},[102,170534,2343],{"class":108},[102,170536,160951],{"class":119},[102,170538,1876],{"class":108},[102,170540,160956],{"class":278},[102,170542,12552],{"class":119},[102,170544,170545],{"class":104,"line":1424},[102,170546,170547],{"class":119},"        show_balance()\n",[102,170549,170550,170552,170554,170556,170558],{"class":104,"line":1429},[102,170551,47158],{"class":108},[102,170553,160951],{"class":119},[102,170555,1876],{"class":108},[102,170557,160975],{"class":278},[102,170559,12552],{"class":119},[102,170561,170562],{"class":104,"line":1435},[102,170563,170564],{"class":119},"        save_money()\n",[102,170566,170567,170569,170571,170573,170575],{"class":104,"line":1450},[102,170568,47158],{"class":108},[102,170570,160951],{"class":119},[102,170572,1876],{"class":108},[102,170574,160993],{"class":278},[102,170576,12552],{"class":119},[102,170578,170579],{"class":104,"line":1473},[102,170580,170581],{"class":119},"        withdraw_money()\n",[102,170583,170584,170586,170588,170590,170592],{"class":104,"line":1478},[102,170585,47158],{"class":108},[102,170587,160951],{"class":119},[102,170589,1876],{"class":108},[102,170591,161047],{"class":278},[102,170593,12552],{"class":119},[102,170595,170596,170598,170600,170602],{"class":104,"line":1484},[102,170597,40316],{"class":187},[102,170599,380],{"class":119},[102,170601,161058],{"class":278},[102,170603,390],{"class":119},[102,170605,170606],{"class":104,"line":1499},[102,170607,39492],{"class":108},[102,170609,170610,170612],{"class":104,"line":1508},[102,170611,165887],{"class":108},[102,170613,12552],{"class":119},[102,170615,170616,170618,170620,170622],{"class":104,"line":1513},[102,170617,40316],{"class":187},[102,170619,380],{"class":119},[102,170621,161079],{"class":278},[102,170623,390],{"class":119},[14,170625,170626],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[43,170628,170630],{"id":170629},"_514-易错点","5.14 易错点",[87,170632,170633,170636,170639,170644,170649,170652],{},[62,170634,170635],{},"函数定义后必须调用才会执行。",[62,170637,170638],{},"函数名后面有括号才是调用。",[62,170640,170641,170643],{},[83,170642,2607],{}," 后面的代码不会执行。",[62,170645,170646,170647,36250],{},"没有返回值的函数默认返回 ",[83,170648,103551],{},[62,170650,170651],{},"局部变量不能在函数外部访问。",[62,170653,170654,170655,170657],{},"不要滥用 ",[83,170656,169691],{},"，更好的方式是让函数返回新值。",[14,170659,170660,170661,170663],{},"例如不用 ",[83,170662,169691],{}," 改写存款：",[93,170665,170667],{"className":38243,"code":170666,"language":38245,"meta":98,"style":98},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[83,170668,170669,170678,170689,170693,170697,170705,170718],{"__ignoreMap":98},[102,170670,170671,170673,170675],{"class":104,"line":105},[102,170672,39812],{"class":108},[102,170674,170295],{"class":112},[102,170676,170677],{"class":119},"(balance, money):\n",[102,170679,170680,170682,170685,170687],{"class":104,"line":116},[102,170681,863],{"class":108},[102,170683,170684],{"class":119}," balance ",[102,170686,1702],{"class":108},[102,170688,158040],{"class":119},[102,170690,170691],{"class":104,"line":123},[102,170692,652],{"emptyLinePlaceholder":651},[102,170694,170695],{"class":104,"line":130},[102,170696,652],{"emptyLinePlaceholder":651},[102,170698,170699,170701,170703],{"class":104,"line":136},[102,170700,170169],{"class":119},[102,170702,260],{"class":108},[102,170704,170174],{"class":187},[102,170706,170707,170709,170711,170714,170716],{"class":104,"line":142},[102,170708,170169],{"class":119},[102,170710,260],{"class":108},[102,170712,170713],{"class":119}," save_money(balance, ",[102,170715,7866],{"class":187},[102,170717,390],{"class":119},[102,170719,170720,170722],{"class":104,"line":148},[102,170721,38280],{"class":187},[102,170723,170724],{"class":119},"(balance)\n",[43,170726,170728],{"id":170727},"_515-本章练习","5.15 本章练习",[87,170730,170731,170738,170744,170750,170756],{},[62,170732,170733,170734,170737],{},"定义函数 ",[83,170735,170736],{},"print_student(name, age)","，输出学生信息。",[62,170739,170733,170740,170743],{},[83,170741,170742],{},"get_max(a, b, c)","，返回三个数中的最大值。",[62,170745,170733,170746,170749],{},[83,170747,170748],{},"is_even(num)","，判断一个数是否为偶数。",[62,170751,170733,170752,170755],{},[83,170753,170754],{},"calculate_bmi(weight, height)","，返回 BMI。",[62,170757,170758],{},"把第 4 章的菜单程序拆分成多个函数。",[8955,170760,170761],{},"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":98,"searchDepth":116,"depth":116,"links":170763},[170764,170765,170766,170767,170768,170769,170770,170771,170772,170776,170777,170778,170779,170780,170781],{"id":168784,"depth":116,"text":168785},{"id":168825,"depth":116,"text":168826},{"id":168915,"depth":116,"text":168916},{"id":168996,"depth":116,"text":168997},{"id":169129,"depth":116,"text":169130},{"id":169251,"depth":116,"text":169252},{"id":169373,"depth":116,"text":169374},{"id":169450,"depth":116,"text":169451},{"id":169572,"depth":116,"text":169573,"children":170773},[170774,170775],{"id":169576,"depth":123,"text":169577},{"id":169634,"depth":123,"text":169635},{"id":169763,"depth":116,"text":169764},{"id":169889,"depth":116,"text":169890},{"id":170002,"depth":116,"text":170003},{"id":170158,"depth":116,"text":170159},{"id":170629,"depth":116,"text":170630},{"id":170727,"depth":116,"text":170728},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":168776,"description":31240},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":170788,"title":170789,"body":170790,"description":31240,"extension":8978,"meta":173834,"navigation":651,"path":173835,"seo":173836,"stem":173837,"__hash__":173838},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":170791,"toc":173815},[170792,170795,170799,170802,170805,170909,170912,170916,170919,170999,171002,171006,171009,171069,171072,171108,171111,171126,171130,171203,171206,171261,171264,171334,171337,171421,171431,171489,171493,171538,171541,171567,171570,171676,171680,171683,171725,171728,171792,171795,171799,171802,171863,171866,171896,171899,171937,171941,171944,171953,171956,172080,172083,172124,172128,172131,172142,172182,172185,172200,172205,172208,172275,172278,172368,172372,172375,172423,172426,172453,172455,172485,172488,172508,172511,172542,172545,172578,172582,172585,172609,172612,172636,172639,172663,172667,172670,172800,172803,172883,172886,172961,172965,172968,173018,173021,173063,173066,173090,173092,173116,173119,173174,173177,173243,173247,173250,173253,173291,173294,173347,173350,173396,173399,173432,173435,173439,173758,173762,173791,173795,173812],[10,170793,170789],{"id":170794},"_6-数据容器",[43,170796,170798],{"id":170797},"_61-什么是数据容器","6.1 什么是数据容器",[14,170800,170801],{},"数据容器用于一次保存多个数据。",[14,170803,170804],{},"常见容器：",[9177,170806,170807,170824],{},[9180,170808,170809],{},[9183,170810,170811,170813,170816,170819,170822],{},[9186,170812,33636],{},[9186,170814,170815],{},"是否有序",[9186,170817,170818],{},"是否可变",[9186,170820,170821],{},"是否允许重复",[9186,170823,35357],{},[9223,170825,170826,170844,170860,170875,170892],{},[9183,170827,170828,170831,170834,170837,170840],{},[9228,170829,170830],{},"list列表",[9228,170832,170833],{},"有序",[9228,170835,170836],{},"可变",[9228,170838,170839],{},"允许",[9228,170841,170842],{},[83,170843,163122],{},[9183,170845,170846,170849,170851,170854,170856],{},[9228,170847,170848],{},"tuple元组",[9228,170850,170833],{},[9228,170852,170853],{},"不可变",[9228,170855,170839],{},[9228,170857,170858],{},[83,170859,163135],{},[9183,170861,170862,170865,170867,170869,170871],{},[9228,170863,170864],{},"str字符串",[9228,170866,170833],{},[9228,170868,170853],{},[9228,170870,170839],{},[9228,170872,170873],{},[83,170874,163745],{},[9183,170876,170877,170880,170883,170885,170888],{},[9228,170878,170879],{},"set集合",[9228,170881,170882],{},"无序",[9228,170884,170836],{},[9228,170886,170887],{},"不允许",[9228,170889,170890],{},[83,170891,163160],{},[9183,170893,170894,170897,170899,170901,170904],{},[9228,170895,170896],{},"dict字典",[9228,170898,170833],{},[9228,170900,170836],{},[9228,170902,170903],{},"key不允许重复",[9228,170905,170906],{},[83,170907,170908],{},"{\"name\": \"小明\"}",[14,170910,170911],{},"Python 3.7 之后，字典保持插入顺序。",[43,170913,170915],{"id":170914},"_62-列表list","6.2 列表list",[14,170917,170918],{},"列表用于保存一组有顺序的数据。",[93,170920,170922],{"className":38243,"code":170921,"language":38245,"meta":98,"style":98},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[83,170923,170924,170944,170969,170990],{"__ignoreMap":98},[102,170925,170926,170928,170930,170932,170934,170936,170938,170940,170942],{"class":104,"line":105},[102,170927,168245],{"class":119},[102,170929,260],{"class":108},[102,170931,60091],{"class":119},[102,170933,157753],{"class":278},[102,170935,2571],{"class":119},[102,170937,158801],{"class":278},[102,170939,2571],{"class":119},[102,170941,167596],{"class":278},[102,170943,41111],{"class":119},[102,170945,170946,170949,170951,170953,170955,170957,170959,170961,170963,170965,170967],{"class":104,"line":116},[102,170947,170948],{"class":119},"numbers ",[102,170950,260],{"class":108},[102,170952,60091],{"class":119},[102,170954,7039],{"class":187},[102,170956,2571],{"class":119},[102,170958,7044],{"class":187},[102,170960,2571],{"class":119},[102,170962,7049],{"class":187},[102,170964,2571],{"class":119},[102,170966,9329],{"class":187},[102,170968,41111],{"class":119},[102,170970,170971,170974,170976,170978,170980,170982,170984,170986,170988],{"class":104,"line":123},[102,170972,170973],{"class":119},"mixed ",[102,170975,260],{"class":108},[102,170977,60091],{"class":119},[102,170979,157753],{"class":278},[102,170981,2571],{"class":119},[102,170983,6080],{"class":187},[102,170985,2571],{"class":119},[102,170987,39341],{"class":187},[102,170989,41111],{"class":119},[102,170991,170992,170995,170997],{"class":104,"line":130},[102,170993,170994],{"class":119},"empty ",[102,170996,260],{"class":108},[102,170998,59703],{"class":119},[14,171000,171001],{},"推荐一个列表中保存同类数据，代码更清晰。",[43,171003,171005],{"id":171004},"_63-列表索引","6.3 列表索引",[14,171007,171008],{},"正向索引从 0 开始：",[93,171010,171012],{"className":38243,"code":171011,"language":38245,"meta":98,"style":98},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[83,171013,171014,171034,171038,171049,171059],{"__ignoreMap":98},[102,171015,171016,171018,171020,171022,171024,171026,171028,171030,171032],{"class":104,"line":105},[102,171017,168245],{"class":119},[102,171019,260],{"class":108},[102,171021,60091],{"class":119},[102,171023,157753],{"class":278},[102,171025,2571],{"class":119},[102,171027,158801],{"class":278},[102,171029,2571],{"class":119},[102,171031,167596],{"class":278},[102,171033,41111],{"class":119},[102,171035,171036],{"class":104,"line":116},[102,171037,652],{"emptyLinePlaceholder":651},[102,171039,171040,171042,171045,171047],{"class":104,"line":123},[102,171041,38280],{"class":187},[102,171043,171044],{"class":119},"(names[",[102,171046,8423],{"class":187},[102,171048,13466],{"class":119},[102,171050,171051,171053,171055,171057],{"class":104,"line":130},[102,171052,38280],{"class":187},[102,171054,171044],{"class":119},[102,171056,7039],{"class":187},[102,171058,13466],{"class":119},[102,171060,171061,171063,171065,171067],{"class":104,"line":136},[102,171062,38280],{"class":187},[102,171064,171044],{"class":119},[102,171066,7044],{"class":187},[102,171068,13466],{"class":119},[14,171070,171071],{},"反向索引从 -1 开始：",[93,171073,171075],{"className":38243,"code":171074,"language":38245,"meta":98,"style":98},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[83,171076,171077,171093],{"__ignoreMap":98},[102,171078,171079,171081,171083,171085,171087,171090],{"class":104,"line":105},[102,171080,38280],{"class":187},[102,171082,171044],{"class":119},[102,171084,2833],{"class":108},[102,171086,7039],{"class":187},[102,171088,171089],{"class":119},"])  ",[102,171091,171092],{"class":126},"# 小刚\n",[102,171094,171095,171097,171099,171101,171103,171105],{"class":104,"line":116},[102,171096,38280],{"class":187},[102,171098,171044],{"class":119},[102,171100,2833],{"class":108},[102,171102,7044],{"class":187},[102,171104,171089],{"class":119},[102,171106,171107],{"class":126},"# 小红\n",[14,171109,171110],{},"索引越界会报错：",[93,171112,171114],{"className":38243,"code":171113,"language":38245,"meta":98,"style":98},"print(names[3])\n",[83,171115,171116],{"__ignoreMap":98},[102,171117,171118,171120,171122,171124],{"class":104,"line":105},[102,171119,38280],{"class":187},[102,171121,171044],{"class":119},[102,171123,7049],{"class":187},[102,171125,13466],{"class":119},[43,171127,171129],{"id":171128},"_64-列表常用方法","6.4 列表常用方法",[93,171131,171133],{"className":38243,"code":171132,"language":38245,"meta":98,"style":98},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[83,171134,171135,171151,171155,171164,171178,171192,171196],{"__ignoreMap":98},[102,171136,171137,171139,171141,171143,171145,171147,171149],{"class":104,"line":105},[102,171138,168245],{"class":119},[102,171140,260],{"class":108},[102,171142,60091],{"class":119},[102,171144,157753],{"class":278},[102,171146,2571],{"class":119},[102,171148,158801],{"class":278},[102,171150,41111],{"class":119},[102,171152,171153],{"class":104,"line":116},[102,171154,652],{"emptyLinePlaceholder":651},[102,171156,171157,171160,171162],{"class":104,"line":123},[102,171158,171159],{"class":119},"names.append(",[102,171161,167596],{"class":278},[102,171163,390],{"class":119},[102,171165,171166,171169,171171,171173,171176],{"class":104,"line":130},[102,171167,171168],{"class":119},"names.insert(",[102,171170,7039],{"class":187},[102,171172,2571],{"class":119},[102,171174,171175],{"class":278},"\"小李\"",[102,171177,390],{"class":119},[102,171179,171180,171183,171185,171187,171190],{"class":104,"line":136},[102,171181,171182],{"class":119},"names.extend([",[102,171184,17453],{"class":278},[102,171186,2571],{"class":119},[102,171188,171189],{"class":278},"\"小赵\"",[102,171191,13466],{"class":119},[102,171193,171194],{"class":104,"line":142},[102,171195,652],{"emptyLinePlaceholder":651},[102,171197,171198,171200],{"class":104,"line":148},[102,171199,38280],{"class":187},[102,171201,171202],{"class":119},"(names)\n",[14,171204,171205],{},"删除元素：",[93,171207,171209],{"className":38243,"code":171208,"language":38245,"meta":98,"style":98},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[83,171210,171211,171220,171230,171244,171256],{"__ignoreMap":98},[102,171212,171213,171216,171218],{"class":104,"line":105},[102,171214,171215],{"class":119},"names.remove(",[102,171217,158801],{"class":278},[102,171219,390],{"class":119},[102,171221,171222,171225,171227],{"class":104,"line":116},[102,171223,171224],{"class":119},"last ",[102,171226,260],{"class":108},[102,171228,171229],{"class":119}," names.pop()\n",[102,171231,171232,171235,171237,171240,171242],{"class":104,"line":123},[102,171233,171234],{"class":119},"first ",[102,171236,260],{"class":108},[102,171238,171239],{"class":119}," names.pop(",[102,171241,8423],{"class":187},[102,171243,390],{"class":119},[102,171245,171246,171249,171252,171254],{"class":104,"line":130},[102,171247,171248],{"class":108},"del",[102,171250,171251],{"class":119}," names[",[102,171253,8423],{"class":187},[102,171255,41111],{"class":119},[102,171257,171258],{"class":104,"line":136},[102,171259,171260],{"class":119},"names.clear()\n",[14,171262,171263],{},"查询和统计：",[93,171265,171267],{"className":38243,"code":171266,"language":38245,"meta":98,"style":98},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[83,171268,171269,171297,171301,171312,171323],{"__ignoreMap":98},[102,171270,171271,171273,171275,171277,171279,171281,171283,171285,171287,171289,171291,171293,171295],{"class":104,"line":105},[102,171272,170948],{"class":119},[102,171274,260],{"class":108},[102,171276,60091],{"class":119},[102,171278,7039],{"class":187},[102,171280,2571],{"class":119},[102,171282,7044],{"class":187},[102,171284,2571],{"class":119},[102,171286,7049],{"class":187},[102,171288,2571],{"class":119},[102,171290,7044],{"class":187},[102,171292,2571],{"class":119},[102,171294,9329],{"class":187},[102,171296,41111],{"class":119},[102,171298,171299],{"class":104,"line":116},[102,171300,652],{"emptyLinePlaceholder":651},[102,171302,171303,171305,171308,171310],{"class":104,"line":123},[102,171304,38280],{"class":187},[102,171306,171307],{"class":119},"(numbers.index(",[102,171309,7049],{"class":187},[102,171311,38362],{"class":119},[102,171313,171314,171316,171319,171321],{"class":104,"line":130},[102,171315,38280],{"class":187},[102,171317,171318],{"class":119},"(numbers.count(",[102,171320,7044],{"class":187},[102,171322,38362],{"class":119},[102,171324,171325,171327,171329,171331],{"class":104,"line":136},[102,171326,38280],{"class":187},[102,171328,380],{"class":119},[102,171330,16145],{"class":187},[102,171332,171333],{"class":119},"(numbers))\n",[14,171335,171336],{},"排序：",[93,171338,171340],{"className":38243,"code":171339,"language":38245,"meta":98,"style":98},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[83,171341,171342,171366,171370,171375,171382,171386,171400,171406,171410,171415],{"__ignoreMap":98},[102,171343,171344,171346,171348,171350,171352,171354,171356,171358,171360,171362,171364],{"class":104,"line":105},[102,171345,170948],{"class":119},[102,171347,260],{"class":108},[102,171349,60091],{"class":119},[102,171351,7049],{"class":187},[102,171353,2571],{"class":119},[102,171355,7039],{"class":187},[102,171357,2571],{"class":119},[102,171359,9354],{"class":187},[102,171361,2571],{"class":119},[102,171363,7044],{"class":187},[102,171365,41111],{"class":119},[102,171367,171368],{"class":104,"line":116},[102,171369,652],{"emptyLinePlaceholder":651},[102,171371,171372],{"class":104,"line":123},[102,171373,171374],{"class":119},"numbers.sort()\n",[102,171376,171377,171379],{"class":104,"line":130},[102,171378,38280],{"class":187},[102,171380,171381],{"class":119},"(numbers)\n",[102,171383,171384],{"class":104,"line":136},[102,171385,652],{"emptyLinePlaceholder":651},[102,171387,171388,171391,171394,171396,171398],{"class":104,"line":142},[102,171389,171390],{"class":119},"numbers.sort(",[102,171392,171393],{"class":386},"reverse",[102,171395,260],{"class":108},[102,171397,39341],{"class":187},[102,171399,390],{"class":119},[102,171401,171402,171404],{"class":104,"line":148},[102,171403,38280],{"class":187},[102,171405,171381],{"class":119},[102,171407,171408],{"class":104,"line":157},[102,171409,652],{"emptyLinePlaceholder":651},[102,171411,171412],{"class":104,"line":163},[102,171413,171414],{"class":119},"numbers.reverse()\n",[102,171416,171417,171419],{"class":104,"line":175},[102,171418,38280],{"class":187},[102,171420,171381],{"class":119},[14,171422,171423,171426,171427,171430],{},[83,171424,171425],{},"sort()"," 会修改原列表，",[83,171428,171429],{},"sorted()"," 返回新列表。",[93,171432,171434],{"className":38243,"code":171433,"language":38245,"meta":98,"style":98},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[83,171435,171436,171460,171472,171476,171482],{"__ignoreMap":98},[102,171437,171438,171440,171442,171444,171446,171448,171450,171452,171454,171456,171458],{"class":104,"line":105},[102,171439,170948],{"class":119},[102,171441,260],{"class":108},[102,171443,60091],{"class":119},[102,171445,7049],{"class":187},[102,171447,2571],{"class":119},[102,171449,7039],{"class":187},[102,171451,2571],{"class":119},[102,171453,9354],{"class":187},[102,171455,2571],{"class":119},[102,171457,7044],{"class":187},[102,171459,41111],{"class":119},[102,171461,171462,171465,171467,171470],{"class":104,"line":116},[102,171463,171464],{"class":119},"new_numbers ",[102,171466,260],{"class":108},[102,171468,171469],{"class":187}," sorted",[102,171471,171381],{"class":119},[102,171473,171474],{"class":104,"line":123},[102,171475,652],{"emptyLinePlaceholder":651},[102,171477,171478,171480],{"class":104,"line":130},[102,171479,38280],{"class":187},[102,171481,171381],{"class":119},[102,171483,171484,171486],{"class":104,"line":136},[102,171485,38280],{"class":187},[102,171487,171488],{"class":119},"(new_numbers)\n",[43,171490,171492],{"id":171491},"_65-列表遍历","6.5 列表遍历",[93,171494,171496],{"className":38243,"code":171495,"language":38245,"meta":98,"style":98},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[83,171497,171498,171518,171522,171532],{"__ignoreMap":98},[102,171499,171500,171502,171504,171506,171508,171510,171512,171514,171516],{"class":104,"line":105},[102,171501,168245],{"class":119},[102,171503,260],{"class":108},[102,171505,60091],{"class":119},[102,171507,157753],{"class":278},[102,171509,2571],{"class":119},[102,171511,158801],{"class":278},[102,171513,2571],{"class":119},[102,171515,167596],{"class":278},[102,171517,41111],{"class":119},[102,171519,171520],{"class":104,"line":116},[102,171521,652],{"emptyLinePlaceholder":651},[102,171523,171524,171526,171528,171530],{"class":104,"line":123},[102,171525,11841],{"class":108},[102,171527,168281],{"class":119},[102,171529,33908],{"class":108},[102,171531,168286],{"class":119},[102,171533,171534,171536],{"class":104,"line":130},[102,171535,39164],{"class":187},[102,171537,158525],{"class":119},[14,171539,171540],{},"需要索引时：",[93,171542,171544],{"className":38243,"code":171543,"language":38245,"meta":98,"style":98},"for index, name in enumerate(names):\n    print(index, name)\n",[83,171545,171546,171560],{"__ignoreMap":98},[102,171547,171548,171550,171553,171555,171557],{"class":104,"line":105},[102,171549,11841],{"class":108},[102,171551,171552],{"class":119}," index, name ",[102,171554,33908],{"class":108},[102,171556,39471],{"class":187},[102,171558,171559],{"class":119},"(names):\n",[102,171561,171562,171564],{"class":104,"line":116},[102,171563,39164],{"class":187},[102,171565,171566],{"class":119},"(index, name)\n",[14,171568,171569],{},"统计总分：",[93,171571,171573],{"className":38243,"code":171572,"language":38245,"meta":98,"style":98},"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",[83,171574,171575,171600,171608,171612,171623,171631,171635,171652],{"__ignoreMap":98},[102,171576,171577,171580,171582,171584,171586,171588,171590,171592,171594,171596,171598],{"class":104,"line":105},[102,171578,171579],{"class":119},"scores ",[102,171581,260],{"class":108},[102,171583,60091],{"class":119},[102,171585,9884],{"class":187},[102,171587,2571],{"class":119},[102,171589,9760],{"class":187},[102,171591,2571],{"class":119},[102,171593,9291],{"class":187},[102,171595,2571],{"class":119},[102,171597,9588],{"class":187},[102,171599,41111],{"class":119},[102,171601,171602,171604,171606],{"class":104,"line":116},[102,171603,165125],{"class":119},[102,171605,260],{"class":108},[102,171607,55198],{"class":187},[102,171609,171610],{"class":104,"line":123},[102,171611,652],{"emptyLinePlaceholder":651},[102,171613,171614,171616,171618,171620],{"class":104,"line":130},[102,171615,11841],{"class":108},[102,171617,165648],{"class":119},[102,171619,33908],{"class":108},[102,171621,171622],{"class":119}," scores:\n",[102,171624,171625,171627,171629],{"class":104,"line":136},[102,171626,167172],{"class":119},[102,171628,18244],{"class":108},[102,171630,10452],{"class":119},[102,171632,171633],{"class":104,"line":142},[102,171634,652],{"emptyLinePlaceholder":651},[102,171636,171637,171640,171642,171645,171647,171649],{"class":104,"line":148},[102,171638,171639],{"class":119},"avg ",[102,171641,260],{"class":108},[102,171643,171644],{"class":119}," total ",[102,171646,9611],{"class":108},[102,171648,16118],{"class":187},[102,171650,171651],{"class":119},"(scores)\n",[102,171653,171654,171656,171658,171660,171663,171665,171668,171670,171672,171674],{"class":104,"line":157},[102,171655,38280],{"class":187},[102,171657,380],{"class":119},[102,171659,9097],{"class":108},[102,171661,171662],{"class":278},"\"平均分:",[102,171664,9918],{"class":187},[102,171666,171667],{"class":119},"avg",[102,171669,165024],{"class":108},[102,171671,9967],{"class":187},[102,171673,9288],{"class":278},[102,171675,390],{"class":119},[43,171677,171679],{"id":171678},"_66-元组tuple","6.6 元组tuple",[14,171681,171682],{},"元组和列表类似，但不可修改。",[93,171684,171686],{"className":38243,"code":171685,"language":38245,"meta":98,"style":98},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[83,171687,171688,171705],{"__ignoreMap":98},[102,171689,171690,171693,171695,171697,171699,171701,171703],{"class":104,"line":105},[102,171691,171692],{"class":119},"point ",[102,171694,260],{"class":108},[102,171696,2432],{"class":119},[102,171698,263],{"class":187},[102,171700,2571],{"class":119},[102,171702,5016],{"class":187},[102,171704,390],{"class":119},[102,171706,171707,171709,171711,171713,171715,171717,171719,171721,171723],{"class":104,"line":116},[102,171708,124179],{"class":119},[102,171710,260],{"class":108},[102,171712,2432],{"class":119},[102,171714,157753],{"class":278},[102,171716,2571],{"class":119},[102,171718,6080],{"class":187},[102,171720,2571],{"class":119},[102,171722,77134],{"class":278},[102,171724,390],{"class":119},[14,171726,171727],{},"单元素元组必须加逗号：",[93,171729,171731],{"className":38243,"code":171730,"language":38245,"meta":98,"style":98},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[83,171732,171733,171747,171760,171764,171778],{"__ignoreMap":98},[102,171734,171735,171738,171740,171742,171744],{"class":104,"line":105},[102,171736,171737],{"class":119},"t1 ",[102,171739,260],{"class":108},[102,171741,2432],{"class":119},[102,171743,263],{"class":187},[102,171745,171746],{"class":119},",)\n",[102,171748,171749,171752,171754,171756,171758],{"class":104,"line":116},[102,171750,171751],{"class":119},"t2 ",[102,171753,260],{"class":108},[102,171755,2432],{"class":119},[102,171757,263],{"class":187},[102,171759,390],{"class":119},[102,171761,171762],{"class":104,"line":123},[102,171763,652],{"emptyLinePlaceholder":651},[102,171765,171766,171768,171770,171772,171775],{"class":104,"line":130},[102,171767,38280],{"class":187},[102,171769,380],{"class":119},[102,171771,110972],{"class":187},[102,171773,171774],{"class":119},"(t1))  ",[102,171776,171777],{"class":126},"# tuple\n",[102,171779,171780,171782,171784,171786,171789],{"class":104,"line":136},[102,171781,38280],{"class":187},[102,171783,380],{"class":119},[102,171785,110972],{"class":187},[102,171787,171788],{"class":119},"(t2))  ",[102,171790,171791],{"class":126},"# int\n",[14,171793,171794],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[43,171796,171798],{"id":171797},"_67-字符串str","6.7 字符串str",[14,171800,171801],{},"字符串也是序列，可以索引、切片和遍历。",[93,171803,171805],{"className":38243,"code":171804,"language":38245,"meta":98,"style":98},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[83,171806,171807,171815,171819,171830,171842,171846,171857],{"__ignoreMap":98},[102,171808,171809,171811,171813],{"class":104,"line":105},[102,171810,164309],{"class":119},[102,171812,260],{"class":108},[102,171814,167546],{"class":278},[102,171816,171817],{"class":104,"line":116},[102,171818,652],{"emptyLinePlaceholder":651},[102,171820,171821,171823,171826,171828],{"class":104,"line":123},[102,171822,38280],{"class":187},[102,171824,171825],{"class":119},"(text[",[102,171827,8423],{"class":187},[102,171829,13466],{"class":119},[102,171831,171832,171834,171836,171838,171840],{"class":104,"line":130},[102,171833,38280],{"class":187},[102,171835,171825],{"class":119},[102,171837,2833],{"class":108},[102,171839,7039],{"class":187},[102,171841,13466],{"class":119},[102,171843,171844],{"class":104,"line":136},[102,171845,652],{"emptyLinePlaceholder":651},[102,171847,171848,171850,171852,171854],{"class":104,"line":142},[102,171849,11841],{"class":108},[102,171851,167557],{"class":119},[102,171853,33908],{"class":108},[102,171855,171856],{"class":119}," text:\n",[102,171858,171859,171861],{"class":104,"line":148},[102,171860,39164],{"class":187},[102,171862,167568],{"class":119},[14,171864,171865],{},"字符串不可变：",[93,171867,171869],{"className":38243,"code":171868,"language":38245,"meta":98,"style":98},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[83,171870,171871,171879],{"__ignoreMap":98},[102,171872,171873,171875,171877],{"class":104,"line":105},[102,171874,164309],{"class":119},[102,171876,260],{"class":108},[102,171878,167546],{"class":278},[102,171880,171881,171884,171886,171888,171890,171893],{"class":104,"line":116},[102,171882,171883],{"class":119},"text[",[102,171885,8423],{"class":187},[102,171887,13252],{"class":119},[102,171889,260],{"class":108},[102,171891,171892],{"class":278}," \"P\"",[102,171894,171895],{"class":126},"  # 报错\n",[14,171897,171898],{},"如果要得到新字符串：",[93,171900,171902],{"className":38243,"code":171901,"language":38245,"meta":98,"style":98},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[83,171903,171904,171912,171930],{"__ignoreMap":98},[102,171905,171906,171908,171910],{"class":104,"line":105},[102,171907,164309],{"class":119},[102,171909,260],{"class":108},[102,171911,167546],{"class":278},[102,171913,171914,171916,171918,171920,171922,171925,171927],{"class":104,"line":116},[102,171915,164309],{"class":119},[102,171917,260],{"class":108},[102,171919,171892],{"class":278},[102,171921,53431],{"class":108},[102,171923,171924],{"class":119}," text[",[102,171926,7039],{"class":187},[102,171928,171929],{"class":119},":]\n",[102,171931,171932,171934],{"class":104,"line":123},[102,171933,38280],{"class":187},[102,171935,171936],{"class":119},"(text)\n",[43,171938,171940],{"id":171939},"_68-切片","6.8 切片",[14,171942,171943],{},"切片用于从序列中取一部分。",[93,171945,171947],{"className":38243,"code":171946,"language":38245,"meta":98,"style":98},"序列[开始:结束:步长]\n",[83,171948,171949],{"__ignoreMap":98},[102,171950,171951],{"class":104,"line":105},[102,171952,171946],{"class":119},[14,171954,171955],{},"结束位置不包含。",[93,171957,171959],{"className":38243,"code":171958,"language":38245,"meta":98,"style":98},"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",[83,171960,171961,171998,172002,172021,172036,172050,172064],{"__ignoreMap":98},[102,171962,171963,171966,171968,171970,171972,171974,171976,171978,171980,171982,171984,171986,171988,171990,171992,171994,171996],{"class":104,"line":105},[102,171964,171965],{"class":119},"nums ",[102,171967,260],{"class":108},[102,171969,60091],{"class":119},[102,171971,8423],{"class":187},[102,171973,2571],{"class":119},[102,171975,7039],{"class":187},[102,171977,2571],{"class":119},[102,171979,7044],{"class":187},[102,171981,2571],{"class":119},[102,171983,7049],{"class":187},[102,171985,2571],{"class":119},[102,171987,9329],{"class":187},[102,171989,2571],{"class":119},[102,171991,9354],{"class":187},[102,171993,2571],{"class":119},[102,171995,9379],{"class":187},[102,171997,41111],{"class":119},[102,171999,172000],{"class":104,"line":116},[102,172001,652],{"emptyLinePlaceholder":651},[102,172003,172004,172006,172009,172011,172013,172015,172018],{"class":104,"line":123},[102,172005,38280],{"class":187},[102,172007,172008],{"class":119},"(nums[",[102,172010,7039],{"class":187},[102,172012,9881],{"class":119},[102,172014,9329],{"class":187},[102,172016,172017],{"class":119},"])    ",[102,172019,172020],{"class":126},"# [1, 2, 3]\n",[102,172022,172023,172025,172028,172030,172033],{"class":104,"line":130},[102,172024,38280],{"class":187},[102,172026,172027],{"class":119},"(nums[:",[102,172029,7049],{"class":187},[102,172031,172032],{"class":119},"])     ",[102,172034,172035],{"class":126},"# [0, 1, 2]\n",[102,172037,172038,172040,172042,172044,172047],{"class":104,"line":136},[102,172039,38280],{"class":187},[102,172041,172008],{"class":119},[102,172043,7049],{"class":187},[102,172045,172046],{"class":119},":])     ",[102,172048,172049],{"class":126},"# [3, 4, 5, 6]\n",[102,172051,172052,172054,172057,172059,172061],{"class":104,"line":142},[102,172053,38280],{"class":187},[102,172055,172056],{"class":119},"(nums[::",[102,172058,7044],{"class":187},[102,172060,172017],{"class":119},[102,172062,172063],{"class":126},"# [0, 2, 4, 6]\n",[102,172065,172066,172068,172070,172072,172074,172077],{"class":104,"line":148},[102,172067,38280],{"class":187},[102,172069,172056],{"class":119},[102,172071,2833],{"class":108},[102,172073,7039],{"class":187},[102,172075,172076],{"class":119},"])   ",[102,172078,172079],{"class":126},"# 反转\n",[14,172081,172082],{},"字符串切片：",[93,172084,172086],{"className":38243,"code":172085,"language":38245,"meta":98,"style":98},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[83,172087,172088,172097,172111],{"__ignoreMap":98},[102,172089,172090,172092,172094],{"class":104,"line":105},[102,172091,164309],{"class":119},[102,172093,260],{"class":108},[102,172095,172096],{"class":278}," \"abcdef\"\n",[102,172098,172099,172101,172103,172105,172107,172109],{"class":104,"line":116},[102,172100,38280],{"class":187},[102,172102,171825],{"class":119},[102,172104,7039],{"class":187},[102,172106,9881],{"class":119},[102,172108,9329],{"class":187},[102,172110,13466],{"class":119},[102,172112,172113,172115,172118,172120,172122],{"class":104,"line":123},[102,172114,38280],{"class":187},[102,172116,172117],{"class":119},"(text[::",[102,172119,2833],{"class":108},[102,172121,7039],{"class":187},[102,172123,13466],{"class":119},[43,172125,172127],{"id":172126},"_69-集合set","6.9 集合set",[14,172129,172130],{},"集合特点：",[87,172132,172133,172136,172139],{},[62,172134,172135],{},"无序。",[62,172137,172138],{},"元素不重复。",[62,172140,172141],{},"可以做交集、并集、差集。",[93,172143,172145],{"className":38243,"code":172144,"language":38245,"meta":98,"style":98},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[83,172146,172147,172175],{"__ignoreMap":98},[102,172148,172149,172151,172153,172155,172157,172159,172161,172163,172165,172167,172169,172171,172173],{"class":104,"line":105},[102,172150,171965],{"class":119},[102,172152,260],{"class":108},[102,172154,13257],{"class":119},[102,172156,7039],{"class":187},[102,172158,2571],{"class":119},[102,172160,7044],{"class":187},[102,172162,2571],{"class":119},[102,172164,7049],{"class":187},[102,172166,2571],{"class":119},[102,172168,7049],{"class":187},[102,172170,2571],{"class":119},[102,172172,9329],{"class":187},[102,172174,301],{"class":119},[102,172176,172177,172179],{"class":104,"line":116},[102,172178,38280],{"class":187},[102,172180,172181],{"class":119},"(nums)\n",[14,172183,172184],{},"创建空集合：",[93,172186,172188],{"className":38243,"code":172187,"language":38245,"meta":98,"style":98},"s = set()\n",[83,172189,172190],{"__ignoreMap":98},[102,172191,172192,172194,172196,172198],{"class":104,"line":105},[102,172193,19322],{"class":119},[102,172195,260],{"class":108},[102,172197,127587],{"class":187},[102,172199,172],{"class":119},[14,172201,7501,172202,172204],{},[83,172203,40324],{}," 是空字典，不是空集合。",[14,172206,172207],{},"集合常用操作：",[93,172209,172211],{"className":38243,"code":172210,"language":38245,"meta":98,"style":98},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[83,172212,172213,172233,172237,172246,172255,172264],{"__ignoreMap":98},[102,172214,172215,172217,172219,172221,172223,172225,172227,172229,172231],{"class":104,"line":105},[102,172216,19322],{"class":119},[102,172218,260],{"class":108},[102,172220,13257],{"class":119},[102,172222,7039],{"class":187},[102,172224,2571],{"class":119},[102,172226,7044],{"class":187},[102,172228,2571],{"class":119},[102,172230,7049],{"class":187},[102,172232,301],{"class":119},[102,172234,172235],{"class":104,"line":116},[102,172236,652],{"emptyLinePlaceholder":651},[102,172238,172239,172242,172244],{"class":104,"line":123},[102,172240,172241],{"class":119},"s.add(",[102,172243,9329],{"class":187},[102,172245,390],{"class":119},[102,172247,172248,172251,172253],{"class":104,"line":130},[102,172249,172250],{"class":119},"s.remove(",[102,172252,7044],{"class":187},[102,172254,390],{"class":119},[102,172256,172257,172260,172262],{"class":104,"line":136},[102,172258,172259],{"class":119},"s.discard(",[102,172261,263],{"class":187},[102,172263,390],{"class":119},[102,172265,172266,172268,172270,172272],{"class":104,"line":142},[102,172267,38280],{"class":187},[102,172269,380],{"class":119},[102,172271,16145],{"class":187},[102,172273,172274],{"class":119},"(s))\n",[14,172276,172277],{},"交并差：",[93,172279,172281],{"className":38243,"code":172280,"language":38245,"meta":98,"style":98},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[83,172282,172283,172303,172323,172327,172342,172355],{"__ignoreMap":98},[102,172284,172285,172287,172289,172291,172293,172295,172297,172299,172301],{"class":104,"line":105},[102,172286,19660],{"class":119},[102,172288,260],{"class":108},[102,172290,13257],{"class":119},[102,172292,7039],{"class":187},[102,172294,2571],{"class":119},[102,172296,7044],{"class":187},[102,172298,2571],{"class":119},[102,172300,7049],{"class":187},[102,172302,301],{"class":119},[102,172304,172305,172307,172309,172311,172313,172315,172317,172319,172321],{"class":104,"line":116},[102,172306,19686],{"class":119},[102,172308,260],{"class":108},[102,172310,13257],{"class":119},[102,172312,7049],{"class":187},[102,172314,2571],{"class":119},[102,172316,9329],{"class":187},[102,172318,2571],{"class":119},[102,172320,9354],{"class":187},[102,172322,301],{"class":119},[102,172324,172325],{"class":104,"line":123},[102,172326,652],{"emptyLinePlaceholder":651},[102,172328,172329,172331,172334,172336,172339],{"class":104,"line":130},[102,172330,38280],{"class":187},[102,172332,172333],{"class":119},"(a ",[102,172335,5164],{"class":108},[102,172337,172338],{"class":119}," b)  ",[102,172340,172341],{"class":126},"# 交集\n",[102,172343,172344,172346,172348,172350,172352],{"class":104,"line":136},[102,172345,38280],{"class":187},[102,172347,172333],{"class":119},[102,172349,9942],{"class":108},[102,172351,172338],{"class":119},[102,172353,172354],{"class":126},"# 并集\n",[102,172356,172357,172359,172361,172363,172365],{"class":104,"line":142},[102,172358,38280],{"class":187},[102,172360,172333],{"class":119},[102,172362,2833],{"class":108},[102,172364,172338],{"class":119},[102,172366,172367],{"class":126},"# 差集\n",[43,172369,172371],{"id":172370},"_610-字典dict","6.10 字典dict",[14,172373,172374],{},"字典通过 key-value 保存数据。",[93,172376,172378],{"className":38243,"code":172377,"language":38245,"meta":98,"style":98},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[83,172379,172380,172388,172398,172409,172419],{"__ignoreMap":98},[102,172381,172382,172384,172386],{"class":104,"line":105},[102,172383,157346],{"class":119},[102,172385,260],{"class":108},[102,172387,1077],{"class":119},[102,172389,172390,172392,172394,172396],{"class":104,"line":116},[102,172391,154885],{"class":278},[102,172393,59302],{"class":119},[102,172395,157753],{"class":278},[102,172397,39331],{"class":119},[102,172399,172400,172403,172405,172407],{"class":104,"line":123},[102,172401,172402],{"class":278},"    \"age\"",[102,172404,59302],{"class":119},[102,172406,6080],{"class":187},[102,172408,39331],{"class":119},[102,172410,172411,172414,172416],{"class":104,"line":130},[102,172412,172413],{"class":278},"    \"score\"",[102,172415,59302],{"class":119},[102,172417,172418],{"class":187},"95\n",[102,172420,172421],{"class":104,"line":136},[102,172422,301],{"class":119},[14,172424,172425],{},"获取值：",[93,172427,172429],{"className":38243,"code":172428,"language":38245,"meta":98,"style":98},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[83,172430,172431,172442],{"__ignoreMap":98},[102,172432,172433,172435,172438,172440],{"class":104,"line":105},[102,172434,38280],{"class":187},[102,172436,172437],{"class":119},"(student[",[102,172439,70544],{"class":278},[102,172441,13466],{"class":119},[102,172443,172444,172446,172449,172451],{"class":104,"line":116},[102,172445,38280],{"class":187},[102,172447,172448],{"class":119},"(student.get(",[102,172450,70544],{"class":278},[102,172452,38362],{"class":119},[14,172454,890],{},[93,172456,172458],{"className":38243,"code":172457,"language":38245,"meta":98,"style":98},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[83,172459,172460,172473],{"__ignoreMap":98},[102,172461,172462,172464,172467,172470],{"class":104,"line":105},[102,172463,160724],{"class":119},[102,172465,172466],{"class":278},"\"address\"",[102,172468,172469],{"class":119},"]     ",[102,172471,172472],{"class":126},"# key不存在会报错\n",[102,172474,172475,172478,172480,172482],{"class":104,"line":116},[102,172476,172477],{"class":119},"student.get(",[102,172479,172466],{"class":278},[102,172481,22445],{"class":119},[102,172483,172484],{"class":126},"# key不存在返回None\n",[14,172486,172487],{},"设置默认值：",[93,172489,172491],{"className":38243,"code":172490,"language":38245,"meta":98,"style":98},"print(student.get(\"address\", \"未知\"))\n",[83,172492,172493],{"__ignoreMap":98},[102,172494,172495,172497,172499,172501,172503,172506],{"class":104,"line":105},[102,172496,38280],{"class":187},[102,172498,172448],{"class":119},[102,172500,172466],{"class":278},[102,172502,2571],{"class":119},[102,172504,172505],{"class":278},"\"未知\"",[102,172507,38362],{"class":119},[14,172509,172510],{},"新增和修改：",[93,172512,172514],{"className":38243,"code":172513,"language":38245,"meta":98,"style":98},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[83,172515,172516,172529],{"__ignoreMap":98},[102,172517,172518,172520,172522,172524,172526],{"class":104,"line":105},[102,172519,160724],{"class":119},[102,172521,76989],{"class":278},[102,172523,13252],{"class":119},[102,172525,260],{"class":108},[102,172527,172528],{"class":187}," 19\n",[102,172530,172531,172533,172535,172537,172539],{"class":104,"line":116},[102,172532,160724],{"class":119},[102,172534,172466],{"class":278},[102,172536,13252],{"class":119},[102,172538,260],{"class":108},[102,172540,172541],{"class":278}," \"北京\"\n",[14,172543,172544],{},"删除：",[93,172546,172548],{"className":38243,"code":172547,"language":38245,"meta":98,"style":98},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[83,172549,172550,172563,172573],{"__ignoreMap":98},[102,172551,172552,172554,172556,172559,172561],{"class":104,"line":105},[102,172553,163223],{"class":119},[102,172555,260],{"class":108},[102,172557,172558],{"class":119}," student.pop(",[102,172560,159337],{"class":278},[102,172562,390],{"class":119},[102,172564,172565,172567,172569,172571],{"class":104,"line":116},[102,172566,171248],{"class":108},[102,172568,160014],{"class":119},[102,172570,76989],{"class":278},[102,172572,41111],{"class":119},[102,172574,172575],{"class":104,"line":123},[102,172576,172577],{"class":119},"student.clear()\n",[43,172579,172581],{"id":172580},"_611-字典遍历","6.11 字典遍历",[14,172583,172584],{},"遍历 key：",[93,172586,172588],{"className":38243,"code":172587,"language":38245,"meta":98,"style":98},"for key in student:\n    print(key, student[key])\n",[83,172589,172590,172602],{"__ignoreMap":98},[102,172591,172592,172594,172597,172599],{"class":104,"line":105},[102,172593,11841],{"class":108},[102,172595,172596],{"class":119}," key ",[102,172598,33908],{"class":108},[102,172600,172601],{"class":119}," student:\n",[102,172603,172604,172606],{"class":104,"line":116},[102,172605,39164],{"class":187},[102,172607,172608],{"class":119},"(key, student[key])\n",[14,172610,172611],{},"遍历 value：",[93,172613,172615],{"className":38243,"code":172614,"language":38245,"meta":98,"style":98},"for value in student.values():\n    print(value)\n",[83,172616,172617,172629],{"__ignoreMap":98},[102,172618,172619,172621,172624,172626],{"class":104,"line":105},[102,172620,11841],{"class":108},[102,172622,172623],{"class":119}," value ",[102,172625,33908],{"class":108},[102,172627,172628],{"class":119}," student.values():\n",[102,172630,172631,172633],{"class":104,"line":116},[102,172632,39164],{"class":187},[102,172634,172635],{"class":119},"(value)\n",[14,172637,172638],{},"遍历 key 和 value：",[93,172640,172642],{"className":38243,"code":172641,"language":38245,"meta":98,"style":98},"for key, value in student.items():\n    print(key, value)\n",[83,172643,172644,172656],{"__ignoreMap":98},[102,172645,172646,172648,172651,172653],{"class":104,"line":105},[102,172647,11841],{"class":108},[102,172649,172650],{"class":119}," key, value ",[102,172652,33908],{"class":108},[102,172654,172655],{"class":119}," student.items():\n",[102,172657,172658,172660],{"class":104,"line":116},[102,172659,39164],{"class":187},[102,172661,172662],{"class":119},"(key, value)\n",[43,172664,172666],{"id":172665},"_612-嵌套容器","6.12 嵌套容器",[14,172668,172669],{},"列表中保存字典，是项目中最常见的结构之一。",[93,172671,172673],{"className":38243,"code":172672,"language":38245,"meta":98,"style":98},"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",[83,172674,172675,172683,172711,172739,172767,172771,172775,172785],{"__ignoreMap":98},[102,172676,172677,172679,172681],{"class":104,"line":105},[102,172678,167581],{"class":119},[102,172680,260],{"class":108},[102,172682,63312],{"class":119},[102,172684,172685,172687,172689,172691,172693,172695,172697,172699,172701,172703,172705,172707,172709],{"class":104,"line":116},[102,172686,156250],{"class":119},[102,172688,70544],{"class":278},[102,172690,59302],{"class":119},[102,172692,157753],{"class":278},[102,172694,2571],{"class":119},[102,172696,76989],{"class":278},[102,172698,59302],{"class":119},[102,172700,6080],{"class":187},[102,172702,2571],{"class":119},[102,172704,159337],{"class":278},[102,172706,59302],{"class":119},[102,172708,10009],{"class":187},[102,172710,13739],{"class":119},[102,172712,172713,172715,172717,172719,172721,172723,172725,172727,172729,172731,172733,172735,172737],{"class":104,"line":123},[102,172714,156250],{"class":119},[102,172716,70544],{"class":278},[102,172718,59302],{"class":119},[102,172720,158801],{"class":278},[102,172722,2571],{"class":119},[102,172724,76989],{"class":278},[102,172726,59302],{"class":119},[102,172728,9652],{"class":187},[102,172730,2571],{"class":119},[102,172732,159337],{"class":278},[102,172734,59302],{"class":119},[102,172736,9834],{"class":187},[102,172738,13739],{"class":119},[102,172740,172741,172743,172745,172747,172749,172751,172753,172755,172757,172759,172761,172763,172765],{"class":104,"line":130},[102,172742,156250],{"class":119},[102,172744,70544],{"class":278},[102,172746,59302],{"class":119},[102,172748,167596],{"class":278},[102,172750,2571],{"class":119},[102,172752,76989],{"class":278},[102,172754,59302],{"class":119},[102,172756,9700],{"class":187},[102,172758,2571],{"class":119},[102,172760,159337],{"class":278},[102,172762,59302],{"class":119},[102,172764,9439],{"class":187},[102,172766,13739],{"class":119},[102,172768,172769],{"class":104,"line":136},[102,172770,41111],{"class":119},[102,172772,172773],{"class":104,"line":142},[102,172774,652],{"emptyLinePlaceholder":651},[102,172776,172777,172779,172781,172783],{"class":104,"line":148},[102,172778,11841],{"class":108},[102,172780,160002],{"class":119},[102,172782,33908],{"class":108},[102,172784,160007],{"class":119},[102,172786,172787,172789,172791,172793,172796,172798],{"class":104,"line":157},[102,172788,39164],{"class":187},[102,172790,172437],{"class":119},[102,172792,70544],{"class":278},[102,172794,172795],{"class":119},"], student[",[102,172797,159337],{"class":278},[102,172799,13466],{"class":119},[14,172801,172802],{},"统计平均分：",[93,172804,172806],{"className":38243,"code":172805,"language":38245,"meta":98,"style":98},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[83,172807,172808,172816,172820,172830,172842,172846,172861],{"__ignoreMap":98},[102,172809,172810,172812,172814],{"class":104,"line":105},[102,172811,165125],{"class":119},[102,172813,260],{"class":108},[102,172815,55198],{"class":187},[102,172817,172818],{"class":104,"line":116},[102,172819,652],{"emptyLinePlaceholder":651},[102,172821,172822,172824,172826,172828],{"class":104,"line":123},[102,172823,11841],{"class":108},[102,172825,160002],{"class":119},[102,172827,33908],{"class":108},[102,172829,160007],{"class":119},[102,172831,172832,172834,172836,172838,172840],{"class":104,"line":130},[102,172833,167172],{"class":119},[102,172835,18244],{"class":108},[102,172837,160014],{"class":119},[102,172839,159337],{"class":278},[102,172841,41111],{"class":119},[102,172843,172844],{"class":104,"line":136},[102,172845,652],{"emptyLinePlaceholder":651},[102,172847,172848,172850,172852,172854,172856,172858],{"class":104,"line":142},[102,172849,171639],{"class":119},[102,172851,260],{"class":108},[102,172853,171644],{"class":119},[102,172855,9611],{"class":108},[102,172857,16118],{"class":187},[102,172859,172860],{"class":119},"(students)\n",[102,172862,172863,172865,172867,172869,172871,172873,172875,172877,172879,172881],{"class":104,"line":148},[102,172864,38280],{"class":187},[102,172866,380],{"class":119},[102,172868,9097],{"class":108},[102,172870,171662],{"class":278},[102,172872,9918],{"class":187},[102,172874,171667],{"class":119},[102,172876,165024],{"class":108},[102,172878,9967],{"class":187},[102,172880,9288],{"class":278},[102,172882,390],{"class":119},[14,172884,172885],{},"查找学生：",[93,172887,172889],{"className":38243,"code":172888,"language":38245,"meta":98,"style":98},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[83,172890,172891,172906,172910,172920,172934,172940,172944,172950],{"__ignoreMap":98},[102,172892,172893,172895,172897,172899,172901,172904],{"class":104,"line":105},[102,172894,119443],{"class":119},[102,172896,260],{"class":108},[102,172898,68470],{"class":187},[102,172900,380],{"class":119},[102,172902,172903],{"class":278},"\"请输入学生姓名:\"",[102,172905,390],{"class":119},[102,172907,172908],{"class":104,"line":116},[102,172909,652],{"emptyLinePlaceholder":651},[102,172911,172912,172914,172916,172918],{"class":104,"line":123},[102,172913,11841],{"class":108},[102,172915,160002],{"class":119},[102,172917,33908],{"class":108},[102,172919,160007],{"class":119},[102,172921,172922,172924,172926,172928,172930,172932],{"class":104,"line":130},[102,172923,2343],{"class":108},[102,172925,160014],{"class":119},[102,172927,70544],{"class":278},[102,172929,13252],{"class":119},[102,172931,1876],{"class":108},[102,172933,168297],{"class":119},[102,172935,172936,172938],{"class":104,"line":136},[102,172937,40316],{"class":187},[102,172939,157907],{"class":119},[102,172941,172942],{"class":104,"line":142},[102,172943,39492],{"class":108},[102,172945,172946,172948],{"class":104,"line":148},[102,172947,10562],{"class":108},[102,172949,12552],{"class":119},[102,172951,172952,172954,172956,172959],{"class":104,"line":157},[102,172953,39164],{"class":187},[102,172955,380],{"class":119},[102,172957,172958],{"class":278},"\"没有找到\"",[102,172960,390],{"class":119},[43,172962,172964],{"id":172963},"_613-容器通用操作","6.13 容器通用操作",[14,172966,172967],{},"长度：",[93,172969,172971],{"className":38243,"code":172970,"language":38245,"meta":98,"style":98},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[83,172972,172973,172992,173002],{"__ignoreMap":98},[102,172974,172975,172977,172980,172982,172984,172986,172988,172990],{"class":104,"line":105},[102,172976,16145],{"class":187},[102,172978,172979],{"class":119},"([",[102,172981,7039],{"class":187},[102,172983,2571],{"class":119},[102,172985,7044],{"class":187},[102,172987,2571],{"class":119},[102,172989,7049],{"class":187},[102,172991,13466],{"class":119},[102,172993,172994,172996,172998,173000],{"class":104,"line":116},[102,172995,16145],{"class":187},[102,172997,380],{"class":119},[102,172999,163745],{"class":278},[102,173001,390],{"class":119},[102,173003,173004,173006,173009,173011,173013,173015],{"class":104,"line":123},[102,173005,16145],{"class":187},[102,173007,173008],{"class":119},"({",[102,173010,70544],{"class":278},[102,173012,59302],{"class":119},[102,173014,157753],{"class":278},[102,173016,173017],{"class":119},"})\n",[14,173019,173020],{},"最大最小：",[93,173022,173024],{"className":38243,"code":173023,"language":38245,"meta":98,"style":98},"max([1, 2, 3])\nmin([1, 2, 3])\n",[83,173025,173026,173044],{"__ignoreMap":98},[102,173027,173028,173030,173032,173034,173036,173038,173040,173042],{"class":104,"line":105},[102,173029,14811],{"class":187},[102,173031,172979],{"class":119},[102,173033,7039],{"class":187},[102,173035,2571],{"class":119},[102,173037,7044],{"class":187},[102,173039,2571],{"class":119},[102,173041,7049],{"class":187},[102,173043,13466],{"class":119},[102,173045,173046,173049,173051,173053,173055,173057,173059,173061],{"class":104,"line":116},[102,173047,173048],{"class":187},"min",[102,173050,172979],{"class":119},[102,173052,7039],{"class":187},[102,173054,2571],{"class":119},[102,173056,7044],{"class":187},[102,173058,2571],{"class":119},[102,173060,7049],{"class":187},[102,173062,13466],{"class":119},[14,173064,173065],{},"求和：",[93,173067,173069],{"className":38243,"code":173068,"language":38245,"meta":98,"style":98},"sum([1, 2, 3])\n",[83,173070,173071],{"__ignoreMap":98},[102,173072,173073,173076,173078,173080,173082,173084,173086,173088],{"class":104,"line":105},[102,173074,173075],{"class":187},"sum",[102,173077,172979],{"class":119},[102,173079,7039],{"class":187},[102,173081,2571],{"class":119},[102,173083,7044],{"class":187},[102,173085,2571],{"class":119},[102,173087,7049],{"class":187},[102,173089,13466],{"class":119},[14,173091,171336],{},[93,173093,173095],{"className":38243,"code":173094,"language":38245,"meta":98,"style":98},"sorted([3, 1, 2])\n",[83,173096,173097],{"__ignoreMap":98},[102,173098,173099,173102,173104,173106,173108,173110,173112,173114],{"class":104,"line":105},[102,173100,173101],{"class":187},"sorted",[102,173103,172979],{"class":119},[102,173105,7049],{"class":187},[102,173107,2571],{"class":119},[102,173109,7039],{"class":187},[102,173111,2571],{"class":119},[102,173113,7044],{"class":187},[102,173115,13466],{"class":119},[14,173117,173118],{},"类型转换：",[93,173120,173122],{"className":38243,"code":173121,"language":38245,"meta":98,"style":98},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[83,173123,173124,173134,173152],{"__ignoreMap":98},[102,173125,173126,173128,173130,173132],{"class":104,"line":105},[102,173127,161935],{"class":187},[102,173129,380],{"class":119},[102,173131,163745],{"class":278},[102,173133,390],{"class":119},[102,173135,173136,173138,173140,173142,173144,173146,173148,173150],{"class":104,"line":116},[102,173137,163130],{"class":187},[102,173139,172979],{"class":119},[102,173141,7039],{"class":187},[102,173143,2571],{"class":119},[102,173145,7044],{"class":187},[102,173147,2571],{"class":119},[102,173149,7049],{"class":187},[102,173151,13466],{"class":119},[102,173153,173154,173156,173158,173160,173162,173164,173166,173168,173170,173172],{"class":104,"line":123},[102,173155,163155],{"class":187},[102,173157,172979],{"class":119},[102,173159,7039],{"class":187},[102,173161,2571],{"class":119},[102,173163,7039],{"class":187},[102,173165,2571],{"class":119},[102,173167,7044],{"class":187},[102,173169,2571],{"class":119},[102,173171,7049],{"class":187},[102,173173,13466],{"class":119},[14,173175,173176],{},"成员判断：",[93,173178,173180],{"className":38243,"code":173179,"language":38245,"meta":98,"style":98},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[83,173181,173182,173199,173223],{"__ignoreMap":98},[102,173183,173184,173186,173188,173191,173194,173197],{"class":104,"line":105},[102,173185,38280],{"class":187},[102,173187,380],{"class":119},[102,173189,173190],{"class":278},"\"a\"",[102,173192,173193],{"class":108}," in",[102,173195,173196],{"class":278}," \"abc\"",[102,173198,390],{"class":119},[102,173200,173201,173203,173205,173207,173209,173211,173213,173215,173217,173219,173221],{"class":104,"line":116},[102,173202,38280],{"class":187},[102,173204,380],{"class":119},[102,173206,7039],{"class":187},[102,173208,173193],{"class":108},[102,173210,60091],{"class":119},[102,173212,7039],{"class":187},[102,173214,2571],{"class":119},[102,173216,7044],{"class":187},[102,173218,2571],{"class":119},[102,173220,7049],{"class":187},[102,173222,13466],{"class":119},[102,173224,173225,173227,173229,173231,173233,173235,173237,173239,173241],{"class":104,"line":123},[102,173226,38280],{"class":187},[102,173228,380],{"class":119},[102,173230,70544],{"class":278},[102,173232,173193],{"class":108},[102,173234,13257],{"class":119},[102,173236,70544],{"class":278},[102,173238,59302],{"class":119},[102,173240,157753],{"class":278},[102,173242,173017],{"class":119},[43,173244,173246],{"id":173245},"_614-推导式","6.14 推导式",[14,173248,173249],{},"推导式用于快速生成容器。",[14,173251,173252],{},"列表推导式：",[93,173254,173256],{"className":38243,"code":173255,"language":38245,"meta":98,"style":98},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[83,173257,173258,173285],{"__ignoreMap":98},[102,173259,173260,173262,173264,173267,173269,173271,173273,173275,173277,173279,173281,173283],{"class":104,"line":105},[102,173261,171965],{"class":119},[102,173263,260],{"class":108},[102,173265,173266],{"class":119}," [i ",[102,173268,11841],{"class":108},[102,173270,18205],{"class":119},[102,173272,33908],{"class":108},[102,173274,40308],{"class":187},[102,173276,380],{"class":119},[102,173278,7039],{"class":187},[102,173280,2571],{"class":119},[102,173282,9379],{"class":187},[102,173284,105165],{"class":119},[102,173286,173287,173289],{"class":104,"line":116},[102,173288,38280],{"class":187},[102,173290,172181],{"class":119},[14,173292,173293],{},"带条件：",[93,173295,173297],{"className":38243,"code":173296,"language":38245,"meta":98,"style":98},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[83,173298,173299,173340],{"__ignoreMap":98},[102,173300,173301,173304,173306,173308,173310,173312,173314,173316,173318,173320,173322,173324,173326,173328,173330,173332,173334,173336,173338],{"class":104,"line":105},[102,173302,173303],{"class":119},"even_nums ",[102,173305,260],{"class":108},[102,173307,173266],{"class":119},[102,173309,11841],{"class":108},[102,173311,18205],{"class":119},[102,173313,33908],{"class":108},[102,173315,40308],{"class":187},[102,173317,380],{"class":119},[102,173319,7039],{"class":187},[102,173321,2571],{"class":119},[102,173323,9372],{"class":187},[102,173325,22445],{"class":119},[102,173327,10407],{"class":108},[102,173329,18205],{"class":119},[102,173331,9363],{"class":108},[102,173333,188],{"class":187},[102,173335,109424],{"class":108},[102,173337,866],{"class":187},[102,173339,41111],{"class":119},[102,173341,173342,173344],{"class":104,"line":116},[102,173343,38280],{"class":187},[102,173345,173346],{"class":119},"(even_nums)\n",[14,173348,173349],{},"字典推导式：",[93,173351,173353],{"className":38243,"code":173352,"language":38245,"meta":98,"style":98},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[83,173354,173355,173389],{"__ignoreMap":98},[102,173356,173357,173360,173362,173365,173367,173369,173372,173374,173376,173378,173380,173382,173384,173386],{"class":104,"line":105},[102,173358,173359],{"class":119},"squares ",[102,173361,260],{"class":108},[102,173363,173364],{"class":119}," {i: i ",[102,173366,19403],{"class":108},[102,173368,188],{"class":187},[102,173370,173371],{"class":108}," for",[102,173373,18205],{"class":119},[102,173375,33908],{"class":108},[102,173377,40308],{"class":187},[102,173379,380],{"class":119},[102,173381,7039],{"class":187},[102,173383,2571],{"class":119},[102,173385,9379],{"class":187},[102,173387,173388],{"class":119},")}\n",[102,173390,173391,173393],{"class":104,"line":116},[102,173392,38280],{"class":187},[102,173394,173395],{"class":119},"(squares)\n",[14,173397,173398],{},"集合推导式：",[93,173400,173402],{"className":38243,"code":173401,"language":38245,"meta":98,"style":98},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[83,173403,173404,173425],{"__ignoreMap":98},[102,173405,173406,173409,173411,173414,173416,173418,173420,173423],{"class":104,"line":105},[102,173407,173408],{"class":119},"chars ",[102,173410,260],{"class":108},[102,173412,173413],{"class":119}," {ch ",[102,173415,11841],{"class":108},[102,173417,167557],{"class":119},[102,173419,33908],{"class":108},[102,173421,173422],{"class":278}," \"hello\"",[102,173424,301],{"class":119},[102,173426,173427,173429],{"class":104,"line":116},[102,173428,38280],{"class":187},[102,173430,173431],{"class":119},"(chars)\n",[14,173433,173434],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[43,173436,173438],{"id":173437},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[93,173440,173442],{"className":38243,"code":173441,"language":38245,"meta":98,"style":98},"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",[83,173443,173444,173452,173472,173492,173512,173532,173536,173540,173548,173562,173571,173575,173585,173597,173601,173621,173630,173634,173650,173655,173659,173673,173677,173699,173735],{"__ignoreMap":98},[102,173445,173446,173448,173450],{"class":104,"line":105},[102,173447,167581],{"class":119},[102,173449,260],{"class":108},[102,173451,63312],{"class":119},[102,173453,173454,173456,173458,173460,173462,173464,173466,173468,173470],{"class":104,"line":116},[102,173455,156250],{"class":119},[102,173457,70544],{"class":278},[102,173459,59302],{"class":119},[102,173461,157753],{"class":278},[102,173463,2571],{"class":119},[102,173465,159337],{"class":278},[102,173467,59302],{"class":119},[102,173469,10009],{"class":187},[102,173471,13739],{"class":119},[102,173473,173474,173476,173478,173480,173482,173484,173486,173488,173490],{"class":104,"line":123},[102,173475,156250],{"class":119},[102,173477,70544],{"class":278},[102,173479,59302],{"class":119},[102,173481,158801],{"class":278},[102,173483,2571],{"class":119},[102,173485,159337],{"class":278},[102,173487,59302],{"class":119},[102,173489,9834],{"class":187},[102,173491,13739],{"class":119},[102,173493,173494,173496,173498,173500,173502,173504,173506,173508,173510],{"class":104,"line":130},[102,173495,156250],{"class":119},[102,173497,70544],{"class":278},[102,173499,59302],{"class":119},[102,173501,167596],{"class":278},[102,173503,2571],{"class":119},[102,173505,159337],{"class":278},[102,173507,59302],{"class":119},[102,173509,9439],{"class":187},[102,173511,13739],{"class":119},[102,173513,173514,173516,173518,173520,173522,173524,173526,173528,173530],{"class":104,"line":136},[102,173515,156250],{"class":119},[102,173517,70544],{"class":278},[102,173519,59302],{"class":119},[102,173521,171175],{"class":278},[102,173523,2571],{"class":119},[102,173525,159337],{"class":278},[102,173527,59302],{"class":119},[102,173529,9904],{"class":187},[102,173531,13739],{"class":119},[102,173533,173534],{"class":104,"line":142},[102,173535,41111],{"class":119},[102,173537,173538],{"class":104,"line":148},[102,173539,652],{"emptyLinePlaceholder":651},[102,173541,173542,173544,173546],{"class":104,"line":157},[102,173543,165125],{"class":119},[102,173545,260],{"class":108},[102,173547,55198],{"class":187},[102,173549,173550,173553,173555,173558,173560],{"class":104,"line":163},[102,173551,173552],{"class":119},"max_student ",[102,173554,260],{"class":108},[102,173556,173557],{"class":119}," students[",[102,173559,8423],{"class":187},[102,173561,41111],{"class":119},[102,173563,173564,173567,173569],{"class":104,"line":175},[102,173565,173566],{"class":119},"passed ",[102,173568,260],{"class":108},[102,173570,59703],{"class":119},[102,173572,173573],{"class":104,"line":181},[102,173574,652],{"emptyLinePlaceholder":651},[102,173576,173577,173579,173581,173583],{"class":104,"line":202},[102,173578,11841],{"class":108},[102,173580,160002],{"class":119},[102,173582,33908],{"class":108},[102,173584,160007],{"class":119},[102,173586,173587,173589,173591,173593,173595],{"class":104,"line":208},[102,173588,167172],{"class":119},[102,173590,18244],{"class":108},[102,173592,160014],{"class":119},[102,173594,159337],{"class":278},[102,173596,41111],{"class":119},[102,173598,173599],{"class":104,"line":214},[102,173600,652],{"emptyLinePlaceholder":651},[102,173602,173603,173605,173607,173609,173611,173613,173616,173618],{"class":104,"line":225},[102,173604,2343],{"class":108},[102,173606,160014],{"class":119},[102,173608,159337],{"class":278},[102,173610,13252],{"class":119},[102,173612,1219],{"class":108},[102,173614,173615],{"class":119}," max_student[",[102,173617,159337],{"class":278},[102,173619,173620],{"class":119},"]:\n",[102,173622,173623,173626,173628],{"class":104,"line":230},[102,173624,173625],{"class":119},"        max_student ",[102,173627,260],{"class":108},[102,173629,160030],{"class":119},[102,173631,173632],{"class":104,"line":236},[102,173633,652],{"emptyLinePlaceholder":651},[102,173635,173636,173638,173640,173642,173644,173646,173648],{"class":104,"line":242},[102,173637,2343],{"class":108},[102,173639,160014],{"class":119},[102,173641,159337],{"class":278},[102,173643,13252],{"class":119},[102,173645,10571],{"class":108},[102,173647,165702],{"class":187},[102,173649,12552],{"class":119},[102,173651,173652],{"class":104,"line":248},[102,173653,173654],{"class":119},"        passed.append(student)\n",[102,173656,173657],{"class":104,"line":254},[102,173658,652],{"emptyLinePlaceholder":651},[102,173660,173661,173663,173665,173667,173669,173671],{"class":104,"line":269},[102,173662,171639],{"class":119},[102,173664,260],{"class":108},[102,173666,171644],{"class":119},[102,173668,9611],{"class":108},[102,173670,16118],{"class":187},[102,173672,172860],{"class":119},[102,173674,173675],{"class":104,"line":298},[102,173676,652],{"emptyLinePlaceholder":651},[102,173678,173679,173681,173683,173685,173687,173689,173691,173693,173695,173697],{"class":104,"line":502},[102,173680,38280],{"class":187},[102,173682,380],{"class":119},[102,173684,9097],{"class":108},[102,173686,171662],{"class":278},[102,173688,9918],{"class":187},[102,173690,171667],{"class":119},[102,173692,165024],{"class":108},[102,173694,9967],{"class":187},[102,173696,9288],{"class":278},[102,173698,390],{"class":119},[102,173700,173701,173703,173705,173707,173710,173712,173715,173717,173719,173721,173723,173725,173727,173729,173731,173733],{"class":104,"line":507},[102,173702,38280],{"class":187},[102,173704,380],{"class":119},[102,173706,9097],{"class":108},[102,173708,173709],{"class":278},"\"最高分学生:",[102,173711,9918],{"class":187},[102,173713,173714],{"class":119},"max_student[",[102,173716,160747],{"class":278},[102,173718,9961],{"class":119},[102,173720,9967],{"class":187},[102,173722,13257],{"class":187},[102,173724,173714],{"class":119},[102,173726,160785],{"class":278},[102,173728,9961],{"class":119},[102,173730,9967],{"class":187},[102,173732,9288],{"class":278},[102,173734,390],{"class":119},[102,173736,173737,173739,173741,173743,173746,173749,173752,173754,173756],{"class":104,"line":512},[102,173738,38280],{"class":187},[102,173740,380],{"class":119},[102,173742,9097],{"class":108},[102,173744,173745],{"class":278},"\"及格人数:",[102,173747,173748],{"class":187},"{len",[102,173750,173751],{"class":119},"(passed)",[102,173753,9967],{"class":187},[102,173755,9288],{"class":278},[102,173757,390],{"class":119},[43,173759,173761],{"id":173760},"_616-易错点","6.16 易错点",[87,173763,173764,173767,173770,173773,173779,173788],{},[62,173765,173766],{},"列表可变，元组和字符串不可变。",[62,173768,173769],{},"切片结束位置不包含。",[62,173771,173772],{},"字典通过 key 取值，不是通过索引。",[62,173774,173775,173776,36250],{},"空集合要用 ",[83,173777,173778],{},"set()",[62,173780,112231,173781,173784,173785,36250],{},[83,173782,173783],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[83,173786,173787],{},"get()",[62,173789,173790],{},"嵌套容器要先看清楚每一层是什么类型。",[43,173792,173794],{"id":173793},"_617-本章练习","6.17 本章练习",[87,173796,173797,173800,173803,173806,173809],{},[62,173798,173799],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[62,173801,173802],{},"输入一句话，统计每个字符出现次数。",[62,173804,173805],{},"使用集合去除列表中的重复元素。",[62,173807,173808],{},"使用字典保存一个学生的信息，并实现修改成绩。",[62,173810,173811],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[8955,173813,173814],{},"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":98,"searchDepth":116,"depth":116,"links":173816},[173817,173818,173819,173820,173821,173822,173823,173824,173825,173826,173827,173828,173829,173830,173831,173832,173833],{"id":170797,"depth":116,"text":170798},{"id":170914,"depth":116,"text":170915},{"id":171004,"depth":116,"text":171005},{"id":171128,"depth":116,"text":171129},{"id":171491,"depth":116,"text":171492},{"id":171678,"depth":116,"text":171679},{"id":171797,"depth":116,"text":171798},{"id":171939,"depth":116,"text":171940},{"id":172126,"depth":116,"text":172127},{"id":172370,"depth":116,"text":172371},{"id":172580,"depth":116,"text":172581},{"id":172665,"depth":116,"text":172666},{"id":172963,"depth":116,"text":172964},{"id":173245,"depth":116,"text":173246},{"id":173437,"depth":116,"text":173438},{"id":173760,"depth":116,"text":173761},{"id":173793,"depth":116,"text":173794},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":170789,"description":31240},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":173840,"title":173841,"body":173842,"description":31240,"extension":8978,"meta":176014,"navigation":651,"path":176015,"seo":176016,"stem":176017,"__hash__":176018},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":173843,"toc":175989},[173844,173847,173851,173854,173934,173937,173958,173961,173965,173968,174030,174033,174050,174054,174057,174102,174104,174112,174116,174119,174201,174204,174207,174232,174235,174258,174262,174265,174267,174329,174332,174334,174385,174389,174393,174399,174504,174508,174514,174585,174589,174592,174660,174663,174743,174747,174753,174789,174792,174795,174905,174911,174915,174918,174990,174993,174997,175001,175006,175068,175072,175077,175145,175149,175154,175270,175274,175277,175357,175360,175364,175367,175471,175473,175488,175491,175495,175633,175641,175645,175647,175658,175660,175918,175922,175954,175958,175986],[10,173845,173841],{"id":173846},"_7-函数进阶",[43,173848,173850],{"id":173849},"_71-多返回值","7.1 多返回值",[14,173852,173853],{},"Python 函数可以返回多个值，本质上返回的是元组。",[93,173855,173857],{"className":38243,"code":173856,"language":38245,"meta":98,"style":98},"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",[83,173858,173859,173868,173876,173884,173893,173900,173904,173908,173917,173923],{"__ignoreMap":98},[102,173860,173861,173863,173866],{"class":104,"line":105},[102,173862,39812],{"class":108},[102,173864,173865],{"class":112}," get_info",[102,173867,39818],{"class":119},[102,173869,173870,173872,173874],{"class":104,"line":116},[102,173871,160235],{"class":119},[102,173873,260],{"class":108},[102,173875,157218],{"class":278},[102,173877,173878,173880,173882],{"class":104,"line":123},[102,173879,160251],{"class":119},[102,173881,260],{"class":108},[102,173883,154416],{"class":187},[102,173885,173886,173888,173890],{"class":104,"line":130},[102,173887,160266],{"class":119},[102,173889,260],{"class":108},[102,173891,173892],{"class":187}," 95\n",[102,173894,173895,173897],{"class":104,"line":136},[102,173896,863],{"class":108},[102,173898,173899],{"class":119}," name, age, score\n",[102,173901,173902],{"class":104,"line":142},[102,173903,652],{"emptyLinePlaceholder":651},[102,173905,173906],{"class":104,"line":148},[102,173907,652],{"emptyLinePlaceholder":651},[102,173909,173910,173912,173914],{"class":104,"line":157},[102,173911,169171],{"class":119},[102,173913,260],{"class":108},[102,173915,173916],{"class":119}," get_info()\n",[102,173918,173919,173921],{"class":104,"line":163},[102,173920,38280],{"class":187},[102,173922,84450],{"class":119},[102,173924,173925,173927,173929,173931],{"class":104,"line":175},[102,173926,38280],{"class":187},[102,173928,380],{"class":119},[102,173930,110972],{"class":187},[102,173932,173933],{"class":119},"(result))\n",[14,173935,173936],{},"可以直接解包：",[93,173938,173940],{"className":38243,"code":173939,"language":38245,"meta":98,"style":98},"name, age, score = get_info()\nprint(name, age, score)\n",[83,173941,173942,173951],{"__ignoreMap":98},[102,173943,173944,173947,173949],{"class":104,"line":105},[102,173945,173946],{"class":119},"name, age, score ",[102,173948,260],{"class":108},[102,173950,173916],{"class":119},[102,173952,173953,173955],{"class":104,"line":116},[102,173954,38280],{"class":187},[102,173956,173957],{"class":119},"(name, age, score)\n",[14,173959,173960],{},"返回多个值适合函数需要同时给出多个结果时使用。",[43,173962,173964],{"id":173963},"_72-位置参数","7.2 位置参数",[14,173966,173967],{},"位置参数按顺序传递。",[93,173969,173971],{"className":38243,"code":173970,"language":38245,"meta":98,"style":98},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[83,173972,173973,173981,174009,174013,174017],{"__ignoreMap":98},[102,173974,173975,173977,173979],{"class":104,"line":105},[102,173976,39812],{"class":108},[102,173978,157237],{"class":112},[102,173980,157240],{"class":119},[102,173982,173983,173985,173987,173989,173991,173993,173995,173997,173999,174001,174003,174005,174007],{"class":104,"line":116},[102,173984,39164],{"class":187},[102,173986,380],{"class":119},[102,173988,9097],{"class":108},[102,173990,157251],{"class":278},[102,173992,9918],{"class":187},[102,173994,87675],{"class":119},[102,173996,9967],{"class":187},[102,173998,157260],{"class":278},[102,174000,9918],{"class":187},[102,174002,78086],{"class":119},[102,174004,9967],{"class":187},[102,174006,157269],{"class":278},[102,174008,390],{"class":119},[102,174010,174011],{"class":104,"line":123},[102,174012,652],{"emptyLinePlaceholder":651},[102,174014,174015],{"class":104,"line":130},[102,174016,652],{"emptyLinePlaceholder":651},[102,174018,174019,174022,174024,174026,174028],{"class":104,"line":136},[102,174020,174021],{"class":119},"introduce(",[102,174023,157753],{"class":278},[102,174025,2571],{"class":119},[102,174027,6080],{"class":187},[102,174029,390],{"class":119},[14,174031,174032],{},"顺序错了就会得到错误含义：",[93,174034,174036],{"className":38243,"code":174035,"language":38245,"meta":98,"style":98},"introduce(18, \"小明\")\n",[83,174037,174038],{"__ignoreMap":98},[102,174039,174040,174042,174044,174046,174048],{"class":104,"line":105},[102,174041,174021],{"class":119},[102,174043,6080],{"class":187},[102,174045,2571],{"class":119},[102,174047,157753],{"class":278},[102,174049,390],{"class":119},[43,174051,174053],{"id":174052},"_73-关键字参数","7.3 关键字参数",[14,174055,174056],{},"关键字参数按参数名传递。",[93,174058,174060],{"className":38243,"code":174059,"language":38245,"meta":98,"style":98},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[83,174061,174062,174082],{"__ignoreMap":98},[102,174063,174064,174066,174068,174070,174072,174074,174076,174078,174080],{"class":104,"line":105},[102,174065,174021],{"class":119},[102,174067,87675],{"class":386},[102,174069,260],{"class":108},[102,174071,157753],{"class":278},[102,174073,2571],{"class":119},[102,174075,78086],{"class":386},[102,174077,260],{"class":108},[102,174079,6080],{"class":187},[102,174081,390],{"class":119},[102,174083,174084,174086,174088,174090,174092,174094,174096,174098,174100],{"class":104,"line":116},[102,174085,174021],{"class":119},[102,174087,78086],{"class":386},[102,174089,260],{"class":108},[102,174091,6080],{"class":187},[102,174093,2571],{"class":119},[102,174095,87675],{"class":386},[102,174097,260],{"class":108},[102,174099,157753],{"class":278},[102,174101,390],{"class":119},[14,174103,125799],{},[87,174105,174106,174109],{},[62,174107,174108],{},"顺序不容易错。",[62,174110,174111],{},"调用时可读性更强。",[43,174113,174115],{"id":174114},"_74-默认参数","7.4 默认参数",[14,174117,174118],{},"默认参数给参数设置默认值。",[93,174120,174122],{"className":38243,"code":174121,"language":38245,"meta":98,"style":98},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[83,174123,174124,174140,174170,174174,174178,174188],{"__ignoreMap":98},[102,174125,174126,174128,174130,174133,174135,174138],{"class":104,"line":105},[102,174127,39812],{"class":108},[102,174129,129958],{"class":112},[102,174131,174132],{"class":119},"(host, port",[102,174134,260],{"class":108},[102,174136,174137],{"class":187},"3306",[102,174139,38651],{"class":119},[102,174141,174142,174144,174146,174148,174151,174153,174155,174157,174159,174161,174164,174166,174168],{"class":104,"line":116},[102,174143,39164],{"class":187},[102,174145,380],{"class":119},[102,174147,9097],{"class":108},[102,174149,174150],{"class":278},"\"连接",[102,174152,9918],{"class":187},[102,174154,35260],{"class":119},[102,174156,9967],{"class":187},[102,174158,9881],{"class":278},[102,174160,9918],{"class":187},[102,174162,174163],{"class":119},"port",[102,174165,9967],{"class":187},[102,174167,9288],{"class":278},[102,174169,390],{"class":119},[102,174171,174172],{"class":104,"line":123},[102,174173,652],{"emptyLinePlaceholder":651},[102,174175,174176],{"class":104,"line":130},[102,174177,652],{"emptyLinePlaceholder":651},[102,174179,174180,174183,174186],{"class":104,"line":136},[102,174181,174182],{"class":119},"connect(",[102,174184,174185],{"class":278},"\"localhost\"",[102,174187,390],{"class":119},[102,174189,174190,174192,174194,174196,174199],{"class":104,"line":142},[102,174191,174182],{"class":119},[102,174193,174185],{"class":278},[102,174195,2571],{"class":119},[102,174197,174198],{"class":187},"6379",[102,174200,390],{"class":119},[14,174202,174203],{},"注意：默认参数必须放在非默认参数后面。",[14,174205,174206],{},"错误：",[93,174208,174210],{"className":38243,"code":174209,"language":38245,"meta":98,"style":98},"def connect(port=3306, host):\n    pass\n",[83,174211,174212,174228],{"__ignoreMap":98},[102,174213,174214,174216,174218,174221,174223,174225],{"class":104,"line":105},[102,174215,39812],{"class":108},[102,174217,129958],{"class":112},[102,174219,174220],{"class":119},"(port",[102,174222,260],{"class":108},[102,174224,174137],{"class":187},[102,174226,174227],{"class":119},", host):\n",[102,174229,174230],{"class":104,"line":116},[102,174231,157402],{"class":108},[14,174233,174234],{},"正确：",[93,174236,174238],{"className":38243,"code":174237,"language":38245,"meta":98,"style":98},"def connect(host, port=3306):\n    pass\n",[83,174239,174240,174254],{"__ignoreMap":98},[102,174241,174242,174244,174246,174248,174250,174252],{"class":104,"line":105},[102,174243,39812],{"class":108},[102,174245,129958],{"class":112},[102,174247,174132],{"class":119},[102,174249,260],{"class":108},[102,174251,174137],{"class":187},[102,174253,38651],{"class":119},[102,174255,174256],{"class":104,"line":116},[102,174257,157402],{"class":108},[43,174259,174261],{"id":174260},"_75-默认参数的坑","7.5 默认参数的坑",[14,174263,174264],{},"不要使用可变对象作为默认参数。",[14,174266,165488],{},[93,174268,174270],{"className":38243,"code":174269,"language":38245,"meta":98,"style":98},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[83,174271,174272,174287,174292,174299,174303,174307,174318],{"__ignoreMap":98},[102,174273,174274,174276,174279,174282,174284],{"class":104,"line":105},[102,174275,39812],{"class":108},[102,174277,174278],{"class":112}," add_item",[102,174280,174281],{"class":119},"(item, items",[102,174283,260],{"class":108},[102,174285,174286],{"class":119},"[]):\n",[102,174288,174289],{"class":104,"line":116},[102,174290,174291],{"class":119},"    items.append(item)\n",[102,174293,174294,174296],{"class":104,"line":123},[102,174295,863],{"class":108},[102,174297,174298],{"class":119}," items\n",[102,174300,174301],{"class":104,"line":130},[102,174302,652],{"emptyLinePlaceholder":651},[102,174304,174305],{"class":104,"line":136},[102,174306,652],{"emptyLinePlaceholder":651},[102,174308,174309,174311,174314,174316],{"class":104,"line":142},[102,174310,38280],{"class":187},[102,174312,174313],{"class":119},"(add_item(",[102,174315,173190],{"class":278},[102,174317,38362],{"class":119},[102,174319,174320,174322,174324,174327],{"class":104,"line":148},[102,174321,38280],{"class":187},[102,174323,174313],{"class":119},[102,174325,174326],{"class":278},"\"b\"",[102,174328,38362],{"class":119},[14,174330,174331],{},"第二次调用会复用第一次的列表。",[14,174333,163753],{},[93,174335,174337],{"className":38243,"code":174336,"language":38245,"meta":98,"style":98},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[83,174338,174339,174353,174366,174375,174379],{"__ignoreMap":98},[102,174340,174341,174343,174345,174347,174349,174351],{"class":104,"line":105},[102,174342,39812],{"class":108},[102,174344,174278],{"class":112},[102,174346,174281],{"class":119},[102,174348,260],{"class":108},[102,174350,103551],{"class":187},[102,174352,38651],{"class":119},[102,174354,174355,174357,174360,174362,174364],{"class":104,"line":116},[102,174356,2343],{"class":108},[102,174358,174359],{"class":119}," items ",[102,174361,46792],{"class":108},[102,174363,46798],{"class":187},[102,174365,12552],{"class":119},[102,174367,174368,174371,174373],{"class":104,"line":123},[102,174369,174370],{"class":119},"        items ",[102,174372,260],{"class":108},[102,174374,59703],{"class":119},[102,174376,174377],{"class":104,"line":130},[102,174378,174291],{"class":119},[102,174380,174381,174383],{"class":104,"line":136},[102,174382,863],{"class":108},[102,174384,174298],{"class":119},[43,174386,174388],{"id":174387},"_76-不定长参数","7.6 不定长参数",[48,174390,174392],{"id":174391},"_761-args","7.6.1 *args",[14,174394,174395,174398],{},[83,174396,174397],{},"*args"," 接收任意数量的位置参数，得到元组。",[93,174400,174402],{"className":38243,"code":174401,"language":38245,"meta":98,"style":98},"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",[83,174403,174404,174417,174425,174436,174445,174451,174455,174459,174478],{"__ignoreMap":98},[102,174405,174406,174408,174410,174412,174414],{"class":104,"line":105},[102,174407,39812],{"class":108},[102,174409,14015],{"class":112},[102,174411,380],{"class":119},[102,174413,191],{"class":108},[102,174415,174416],{"class":119},"args):\n",[102,174418,174419,174421,174423],{"class":104,"line":116},[102,174420,167172],{"class":119},[102,174422,260],{"class":108},[102,174424,55198],{"class":187},[102,174426,174427,174429,174431,174433],{"class":104,"line":123},[102,174428,12016],{"class":108},[102,174430,164045],{"class":119},[102,174432,33908],{"class":108},[102,174434,174435],{"class":119}," args:\n",[102,174437,174438,174440,174442],{"class":104,"line":130},[102,174439,167847],{"class":119},[102,174441,18244],{"class":108},[102,174443,174444],{"class":119}," num\n",[102,174446,174447,174449],{"class":104,"line":136},[102,174448,863],{"class":108},[102,174450,170152],{"class":119},[102,174452,174453],{"class":104,"line":142},[102,174454,652],{"emptyLinePlaceholder":651},[102,174456,174457],{"class":104,"line":148},[102,174458,652],{"emptyLinePlaceholder":651},[102,174460,174461,174463,174466,174468,174470,174472,174474,174476],{"class":104,"line":157},[102,174462,38280],{"class":187},[102,174464,174465],{"class":119},"(add(",[102,174467,7039],{"class":187},[102,174469,2571],{"class":119},[102,174471,7044],{"class":187},[102,174473,2571],{"class":119},[102,174475,7049],{"class":187},[102,174477,38362],{"class":119},[102,174479,174480,174482,174484,174486,174488,174490,174492,174494,174496,174498,174500,174502],{"class":104,"line":163},[102,174481,38280],{"class":187},[102,174483,174465],{"class":119},[102,174485,7039],{"class":187},[102,174487,2571],{"class":119},[102,174489,7044],{"class":187},[102,174491,2571],{"class":119},[102,174493,7049],{"class":187},[102,174495,2571],{"class":119},[102,174497,9329],{"class":187},[102,174499,2571],{"class":119},[102,174501,9354],{"class":187},[102,174503,38362],{"class":119},[48,174505,174507],{"id":174506},"_762-kwargs","7.6.2 **kwargs",[14,174509,174510,174513],{},[83,174511,174512],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[93,174515,174517],{"className":38243,"code":174516,"language":38245,"meta":98,"style":98},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[83,174518,174519,174532,174543,174549,174553,174557],{"__ignoreMap":98},[102,174520,174521,174523,174525,174527,174529],{"class":104,"line":105},[102,174522,39812],{"class":108},[102,174524,169810],{"class":112},[102,174526,380],{"class":119},[102,174528,19403],{"class":108},[102,174530,174531],{"class":119},"kwargs):\n",[102,174533,174534,174536,174538,174540],{"class":104,"line":116},[102,174535,12016],{"class":108},[102,174537,172650],{"class":119},[102,174539,33908],{"class":108},[102,174541,174542],{"class":119}," kwargs.items():\n",[102,174544,174545,174547],{"class":104,"line":123},[102,174546,40316],{"class":187},[102,174548,172662],{"class":119},[102,174550,174551],{"class":104,"line":130},[102,174552,652],{"emptyLinePlaceholder":651},[102,174554,174555],{"class":104,"line":136},[102,174556,652],{"emptyLinePlaceholder":651},[102,174558,174559,174561,174563,174565,174567,174569,174571,174573,174575,174577,174579,174581,174583],{"class":104,"line":142},[102,174560,169875],{"class":119},[102,174562,87675],{"class":386},[102,174564,260],{"class":108},[102,174566,157753],{"class":278},[102,174568,2571],{"class":119},[102,174570,78086],{"class":386},[102,174572,260],{"class":108},[102,174574,6080],{"class":187},[102,174576,2571],{"class":119},[102,174578,78137],{"class":386},[102,174580,260],{"class":108},[102,174582,77134],{"class":278},[102,174584,390],{"class":119},[43,174586,174588],{"id":174587},"_77-参数解包","7.7 参数解包",[14,174590,174591],{},"列表或元组解包为位置参数：",[93,174593,174595],{"className":38243,"code":174594,"language":38245,"meta":98,"style":98},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[83,174596,174597,174606,174621,174625,174629,174649],{"__ignoreMap":98},[102,174598,174599,174601,174603],{"class":104,"line":105},[102,174600,39812],{"class":108},[102,174602,14015],{"class":112},[102,174604,174605],{"class":119},"(a, b, c):\n",[102,174607,174608,174610,174612,174614,174616,174618],{"class":104,"line":116},[102,174609,863],{"class":108},[102,174611,19610],{"class":119},[102,174613,1702],{"class":108},[102,174615,19623],{"class":119},[102,174617,1702],{"class":108},[102,174619,174620],{"class":119}," c\n",[102,174622,174623],{"class":104,"line":123},[102,174624,652],{"emptyLinePlaceholder":651},[102,174626,174627],{"class":104,"line":130},[102,174628,652],{"emptyLinePlaceholder":651},[102,174630,174631,174633,174635,174637,174639,174641,174643,174645,174647],{"class":104,"line":136},[102,174632,171965],{"class":119},[102,174634,260],{"class":108},[102,174636,60091],{"class":119},[102,174638,7039],{"class":187},[102,174640,2571],{"class":119},[102,174642,7044],{"class":187},[102,174644,2571],{"class":119},[102,174646,7049],{"class":187},[102,174648,41111],{"class":119},[102,174650,174651,174653,174655,174657],{"class":104,"line":142},[102,174652,38280],{"class":187},[102,174654,174465],{"class":119},[102,174656,191],{"class":108},[102,174658,174659],{"class":119},"nums))\n",[14,174661,174662],{},"字典解包为关键字参数：",[93,174664,174666],{"className":38243,"code":174665,"language":38245,"meta":98,"style":98},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[83,174667,174668,174676,174702,174706,174710,174734],{"__ignoreMap":98},[102,174669,174670,174672,174674],{"class":104,"line":105},[102,174671,39812],{"class":108},[102,174673,157237],{"class":112},[102,174675,157240],{"class":119},[102,174677,174678,174680,174682,174684,174686,174688,174690,174692,174694,174696,174698,174700],{"class":104,"line":116},[102,174679,39164],{"class":187},[102,174681,380],{"class":119},[102,174683,9097],{"class":108},[102,174685,9288],{"class":278},[102,174687,9918],{"class":187},[102,174689,87675],{"class":119},[102,174691,9967],{"class":187},[102,174693,13257],{"class":187},[102,174695,78086],{"class":119},[102,174697,9967],{"class":187},[102,174699,9288],{"class":278},[102,174701,390],{"class":119},[102,174703,174704],{"class":104,"line":123},[102,174705,652],{"emptyLinePlaceholder":651},[102,174707,174708],{"class":104,"line":130},[102,174709,652],{"emptyLinePlaceholder":651},[102,174711,174712,174714,174716,174718,174720,174722,174724,174726,174728,174730,174732],{"class":104,"line":136},[102,174713,124179],{"class":119},[102,174715,260],{"class":108},[102,174717,13257],{"class":119},[102,174719,70544],{"class":278},[102,174721,59302],{"class":119},[102,174723,157753],{"class":278},[102,174725,2571],{"class":119},[102,174727,76989],{"class":278},[102,174729,59302],{"class":119},[102,174731,6080],{"class":187},[102,174733,301],{"class":119},[102,174735,174736,174738,174740],{"class":104,"line":142},[102,174737,174021],{"class":119},[102,174739,19403],{"class":108},[102,174741,174742],{"class":119},"info)\n",[43,174744,174746],{"id":174745},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,174748,174749,174752],{},[83,174750,174751],{},"lambda"," 用于定义简单匿名函数。",[93,174754,174756],{"className":38243,"code":174755,"language":38245,"meta":98,"style":98},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[83,174757,174758,174775],{"__ignoreMap":98},[102,174759,174760,174763,174765,174768,174771,174773],{"class":104,"line":105},[102,174761,174762],{"class":119},"add ",[102,174764,260],{"class":108},[102,174766,174767],{"class":108}," lambda",[102,174769,174770],{"class":119}," a, b: a ",[102,174772,1702],{"class":108},[102,174774,158969],{"class":119},[102,174776,174777,174779,174781,174783,174785,174787],{"class":104,"line":116},[102,174778,38280],{"class":187},[102,174780,174465],{"class":119},[102,174782,7039],{"class":187},[102,174784,2571],{"class":119},[102,174786,7044],{"class":187},[102,174788,38362],{"class":119},[14,174790,174791],{},"常和排序、过滤等函数一起使用。",[14,174793,174794],{},"按分数排序：",[93,174796,174798],{"className":38243,"code":174797,"language":38245,"meta":98,"style":98},"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",[83,174799,174800,174808,174828,174848,174868,174872,174876,174899],{"__ignoreMap":98},[102,174801,174802,174804,174806],{"class":104,"line":105},[102,174803,167581],{"class":119},[102,174805,260],{"class":108},[102,174807,63312],{"class":119},[102,174809,174810,174812,174814,174816,174818,174820,174822,174824,174826],{"class":104,"line":116},[102,174811,156250],{"class":119},[102,174813,70544],{"class":278},[102,174815,59302],{"class":119},[102,174817,157753],{"class":278},[102,174819,2571],{"class":119},[102,174821,159337],{"class":278},[102,174823,59302],{"class":119},[102,174825,10009],{"class":187},[102,174827,13739],{"class":119},[102,174829,174830,174832,174834,174836,174838,174840,174842,174844,174846],{"class":104,"line":123},[102,174831,156250],{"class":119},[102,174833,70544],{"class":278},[102,174835,59302],{"class":119},[102,174837,158801],{"class":278},[102,174839,2571],{"class":119},[102,174841,159337],{"class":278},[102,174843,59302],{"class":119},[102,174845,9834],{"class":187},[102,174847,13739],{"class":119},[102,174849,174850,174852,174854,174856,174858,174860,174862,174864,174866],{"class":104,"line":130},[102,174851,156250],{"class":119},[102,174853,70544],{"class":278},[102,174855,59302],{"class":119},[102,174857,167596],{"class":278},[102,174859,2571],{"class":119},[102,174861,159337],{"class":278},[102,174863,59302],{"class":119},[102,174865,9439],{"class":187},[102,174867,13739],{"class":119},[102,174869,174870],{"class":104,"line":136},[102,174871,41111],{"class":119},[102,174873,174874],{"class":104,"line":142},[102,174875,652],{"emptyLinePlaceholder":651},[102,174877,174878,174881,174883,174885,174887,174889,174891,174893,174895,174897],{"class":104,"line":148},[102,174879,174880],{"class":119},"students.sort(",[102,174882,161811],{"class":386},[102,174884,161814],{"class":108},[102,174886,161817],{"class":119},[102,174888,159337],{"class":278},[102,174890,120067],{"class":119},[102,174892,171393],{"class":386},[102,174894,260],{"class":108},[102,174896,39341],{"class":187},[102,174898,390],{"class":119},[102,174900,174901,174903],{"class":104,"line":157},[102,174902,38280],{"class":187},[102,174904,172860],{"class":119},[14,174906,174907,174908,174910],{},"如果逻辑复杂，不要硬写 ",[83,174909,174751],{},"，定义普通函数更清晰。",[43,174912,174914],{"id":174913},"_79-函数作为参数","7.9 函数作为参数",[14,174916,174917],{},"函数可以作为参数传给另一个函数。",[93,174919,174921],{"className":38243,"code":174920,"language":38245,"meta":98,"style":98},"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",[83,174922,174923,174931,174941,174945,174949,174959,174966,174970,174974],{"__ignoreMap":98},[102,174924,174925,174927,174929],{"class":104,"line":105},[102,174926,39812],{"class":108},[102,174928,14015],{"class":112},[102,174930,158958],{"class":119},[102,174932,174933,174935,174937,174939],{"class":104,"line":116},[102,174934,863],{"class":108},[102,174936,19610],{"class":119},[102,174938,1702],{"class":108},[102,174940,158969],{"class":119},[102,174942,174943],{"class":104,"line":123},[102,174944,652],{"emptyLinePlaceholder":651},[102,174946,174947],{"class":104,"line":130},[102,174948,652],{"emptyLinePlaceholder":651},[102,174950,174951,174953,174956],{"class":104,"line":136},[102,174952,39812],{"class":108},[102,174954,174955],{"class":112}," calculate",[102,174957,174958],{"class":119},"(a, b, func):\n",[102,174960,174961,174963],{"class":104,"line":142},[102,174962,863],{"class":108},[102,174964,174965],{"class":119}," func(a, b)\n",[102,174967,174968],{"class":104,"line":148},[102,174969,652],{"emptyLinePlaceholder":651},[102,174971,174972],{"class":104,"line":157},[102,174973,652],{"emptyLinePlaceholder":651},[102,174975,174976,174978,174981,174983,174985,174987],{"class":104,"line":163},[102,174977,38280],{"class":187},[102,174979,174980],{"class":119},"(calculate(",[102,174982,263],{"class":187},[102,174984,2571],{"class":119},[102,174986,5016],{"class":187},[102,174988,174989],{"class":119},", add))\n",[14,174991,174992],{},"这种思想在排序、回调、框架中经常出现。",[43,174994,174996],{"id":174995},"_710-mapfiltersorted","7.10 map、filter、sorted",[48,174998,175000],{"id":174999},"_7101-map","7.10.1 map",[14,175002,175003,175005],{},[83,175004,81909],{}," 对每个元素执行函数。",[93,175007,175009],{"className":38243,"code":175008,"language":38245,"meta":98,"style":98},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[83,175010,175011,175035,175058],{"__ignoreMap":98},[102,175012,175013,175015,175017,175019,175021,175023,175025,175027,175029,175031,175033],{"class":104,"line":105},[102,175014,171965],{"class":119},[102,175016,260],{"class":108},[102,175018,60091],{"class":119},[102,175020,7039],{"class":187},[102,175022,2571],{"class":119},[102,175024,7044],{"class":187},[102,175026,2571],{"class":119},[102,175028,7049],{"class":187},[102,175030,2571],{"class":119},[102,175032,9329],{"class":187},[102,175034,41111],{"class":119},[102,175036,175037,175039,175041,175044,175046,175048,175051,175053,175055],{"class":104,"line":116},[102,175038,169171],{"class":119},[102,175040,260],{"class":108},[102,175042,175043],{"class":187}," map",[102,175045,380],{"class":119},[102,175047,174751],{"class":108},[102,175049,175050],{"class":119}," x: x ",[102,175052,191],{"class":108},[102,175054,188],{"class":187},[102,175056,175057],{"class":119},", nums)\n",[102,175059,175060,175062,175064,175066],{"class":104,"line":123},[102,175061,38280],{"class":187},[102,175063,380],{"class":119},[102,175065,161935],{"class":187},[102,175067,173933],{"class":119},[48,175069,175071],{"id":175070},"_7102-filter","7.10.2 filter",[14,175073,175074,175076],{},[83,175075,87916],{}," 保留满足条件的元素。",[93,175078,175080],{"className":38243,"code":175079,"language":38245,"meta":98,"style":98},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[83,175081,175082,175110,175135],{"__ignoreMap":98},[102,175083,175084,175086,175088,175090,175092,175094,175096,175098,175100,175102,175104,175106,175108],{"class":104,"line":105},[102,175085,171965],{"class":119},[102,175087,260],{"class":108},[102,175089,60091],{"class":119},[102,175091,7039],{"class":187},[102,175093,2571],{"class":119},[102,175095,7044],{"class":187},[102,175097,2571],{"class":119},[102,175099,7049],{"class":187},[102,175101,2571],{"class":119},[102,175103,9329],{"class":187},[102,175105,2571],{"class":119},[102,175107,9354],{"class":187},[102,175109,41111],{"class":119},[102,175111,175112,175114,175116,175119,175121,175123,175125,175127,175129,175131,175133],{"class":104,"line":116},[102,175113,169171],{"class":119},[102,175115,260],{"class":108},[102,175117,175118],{"class":187}," filter",[102,175120,380],{"class":119},[102,175122,174751],{"class":108},[102,175124,175050],{"class":119},[102,175126,9363],{"class":108},[102,175128,188],{"class":187},[102,175130,109424],{"class":108},[102,175132,866],{"class":187},[102,175134,175057],{"class":119},[102,175136,175137,175139,175141,175143],{"class":104,"line":123},[102,175138,38280],{"class":187},[102,175140,380],{"class":119},[102,175142,161935],{"class":187},[102,175144,173933],{"class":119},[48,175146,175148],{"id":175147},"_7103-sorted","7.10.3 sorted",[14,175150,175151,175153],{},[83,175152,173101],{}," 返回排序后的新列表。",[93,175155,175157],{"className":38243,"code":175156,"language":38245,"meta":98,"style":98},"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",[83,175158,175159,175167,175187,175207,175227,175231,175235,175264],{"__ignoreMap":98},[102,175160,175161,175163,175165],{"class":104,"line":105},[102,175162,167581],{"class":119},[102,175164,260],{"class":108},[102,175166,63312],{"class":119},[102,175168,175169,175171,175173,175175,175177,175179,175181,175183,175185],{"class":104,"line":116},[102,175170,156250],{"class":119},[102,175172,70544],{"class":278},[102,175174,59302],{"class":119},[102,175176,157753],{"class":278},[102,175178,2571],{"class":119},[102,175180,159337],{"class":278},[102,175182,59302],{"class":119},[102,175184,10009],{"class":187},[102,175186,13739],{"class":119},[102,175188,175189,175191,175193,175195,175197,175199,175201,175203,175205],{"class":104,"line":123},[102,175190,156250],{"class":119},[102,175192,70544],{"class":278},[102,175194,59302],{"class":119},[102,175196,158801],{"class":278},[102,175198,2571],{"class":119},[102,175200,159337],{"class":278},[102,175202,59302],{"class":119},[102,175204,9834],{"class":187},[102,175206,13739],{"class":119},[102,175208,175209,175211,175213,175215,175217,175219,175221,175223,175225],{"class":104,"line":130},[102,175210,156250],{"class":119},[102,175212,70544],{"class":278},[102,175214,59302],{"class":119},[102,175216,167596],{"class":278},[102,175218,2571],{"class":119},[102,175220,159337],{"class":278},[102,175222,59302],{"class":119},[102,175224,9439],{"class":187},[102,175226,13739],{"class":119},[102,175228,175229],{"class":104,"line":136},[102,175230,41111],{"class":119},[102,175232,175233],{"class":104,"line":142},[102,175234,652],{"emptyLinePlaceholder":651},[102,175236,175237,175239,175241,175243,175246,175248,175250,175252,175254,175256,175258,175260,175262],{"class":104,"line":148},[102,175238,169171],{"class":119},[102,175240,260],{"class":108},[102,175242,171469],{"class":187},[102,175244,175245],{"class":119},"(students, ",[102,175247,161811],{"class":386},[102,175249,161814],{"class":108},[102,175251,161817],{"class":119},[102,175253,159337],{"class":278},[102,175255,120067],{"class":119},[102,175257,171393],{"class":386},[102,175259,260],{"class":108},[102,175261,39341],{"class":187},[102,175263,390],{"class":119},[102,175265,175266,175268],{"class":104,"line":157},[102,175267,38280],{"class":187},[102,175269,84450],{"class":119},[43,175271,175273],{"id":175272},"_711-闭包入门","7.11 闭包入门",[14,175275,175276],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[93,175278,175280],{"className":38243,"code":175279,"language":38245,"meta":98,"style":98},"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",[83,175281,175282,175292,175302,175313,175317,175324,175328,175332,175346],{"__ignoreMap":98},[102,175283,175284,175286,175289],{"class":104,"line":105},[102,175285,39812],{"class":108},[102,175287,175288],{"class":112}," outer",[102,175290,175291],{"class":119},"(base):\n",[102,175293,175294,175296,175299],{"class":104,"line":116},[102,175295,38666],{"class":108},[102,175297,175298],{"class":112}," inner",[102,175300,175301],{"class":119},"(num):\n",[102,175303,175304,175306,175309,175311],{"class":104,"line":123},[102,175305,184],{"class":108},[102,175307,175308],{"class":119}," base ",[102,175310,1702],{"class":108},[102,175312,174444],{"class":119},[102,175314,175315],{"class":104,"line":130},[102,175316,652],{"emptyLinePlaceholder":651},[102,175318,175319,175321],{"class":104,"line":136},[102,175320,863],{"class":108},[102,175322,175323],{"class":119}," inner\n",[102,175325,175326],{"class":104,"line":142},[102,175327,652],{"emptyLinePlaceholder":651},[102,175329,175330],{"class":104,"line":148},[102,175331,652],{"emptyLinePlaceholder":651},[102,175333,175334,175337,175339,175342,175344],{"class":104,"line":157},[102,175335,175336],{"class":119},"add_10 ",[102,175338,260],{"class":108},[102,175340,175341],{"class":119}," outer(",[102,175343,263],{"class":187},[102,175345,390],{"class":119},[102,175347,175348,175350,175353,175355],{"class":104,"line":163},[102,175349,38280],{"class":187},[102,175351,175352],{"class":119},"(add_10(",[102,175354,9354],{"class":187},[102,175356,38362],{"class":119},[14,175358,175359],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[43,175361,175363],{"id":175362},"_712-装饰器入门","7.12 装饰器入门",[14,175365,175366],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[93,175368,175370],{"className":38243,"code":175369,"language":38245,"meta":98,"style":98},"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",[83,175371,175372,175381,175390,175401,175406,175417,175421,175428,175432,175436,175441,175449,175459,175463,175467],{"__ignoreMap":98},[102,175373,175374,175376,175378],{"class":104,"line":105},[102,175375,39812],{"class":108},[102,175377,95056],{"class":112},[102,175379,175380],{"class":119},"(func):\n",[102,175382,175383,175385,175388],{"class":104,"line":116},[102,175384,38666],{"class":108},[102,175386,175387],{"class":112}," wrapper",[102,175389,39818],{"class":119},[102,175391,175392,175394,175396,175399],{"class":104,"line":123},[102,175393,40316],{"class":187},[102,175395,380],{"class":119},[102,175397,175398],{"class":278},"\"函数开始执行\"",[102,175400,390],{"class":119},[102,175402,175403],{"class":104,"line":130},[102,175404,175405],{"class":119},"        func()\n",[102,175407,175408,175410,175412,175415],{"class":104,"line":136},[102,175409,40316],{"class":187},[102,175411,380],{"class":119},[102,175413,175414],{"class":278},"\"函数执行结束\"",[102,175416,390],{"class":119},[102,175418,175419],{"class":104,"line":142},[102,175420,652],{"emptyLinePlaceholder":651},[102,175422,175423,175425],{"class":104,"line":148},[102,175424,863],{"class":108},[102,175426,175427],{"class":119}," wrapper\n",[102,175429,175430],{"class":104,"line":157},[102,175431,652],{"emptyLinePlaceholder":651},[102,175433,175434],{"class":104,"line":163},[102,175435,652],{"emptyLinePlaceholder":651},[102,175437,175438],{"class":104,"line":175},[102,175439,175440],{"class":112},"@log\n",[102,175442,175443,175445,175447],{"class":104,"line":181},[102,175444,39812],{"class":108},[102,175446,168861],{"class":112},[102,175448,39818],{"class":119},[102,175450,175451,175453,175455,175457],{"class":104,"line":202},[102,175452,39164],{"class":187},[102,175454,380],{"class":119},[102,175456,14642],{"class":278},[102,175458,390],{"class":119},[102,175460,175461],{"class":104,"line":208},[102,175462,652],{"emptyLinePlaceholder":651},[102,175464,175465],{"class":104,"line":214},[102,175466,652],{"emptyLinePlaceholder":651},[102,175468,175469],{"class":104,"line":225},[102,175470,168896],{"class":119},[14,175472,166139],{},[93,175474,175476],{"className":38243,"code":175475,"language":38245,"meta":98,"style":98},"say_hello = log(say_hello)\n",[83,175477,175478],{"__ignoreMap":98},[102,175479,175480,175483,175485],{"class":104,"line":105},[102,175481,175482],{"class":119},"say_hello ",[102,175484,260],{"class":108},[102,175486,175487],{"class":119}," log(say_hello)\n",[14,175489,175490],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[43,175492,175494],{"id":175493},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[93,175496,175498],{"className":38243,"code":175497,"language":38245,"meta":98,"style":98},"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",[83,175499,175500,175508,175525,175535,175554,175564,175571,175575,175581,175585,175589,175593,175601,175611,175615,175619],{"__ignoreMap":98},[102,175501,175502,175504,175506],{"class":104,"line":105},[102,175503,39812],{"class":108},[102,175505,95056],{"class":112},[102,175507,175380],{"class":119},[102,175509,175510,175512,175514,175516,175518,175521,175523],{"class":104,"line":116},[102,175511,38666],{"class":108},[102,175513,175387],{"class":112},[102,175515,380],{"class":119},[102,175517,191],{"class":108},[102,175519,175520],{"class":119},"args, ",[102,175522,19403],{"class":108},[102,175524,174531],{"class":119},[102,175526,175527,175529,175531,175533],{"class":104,"line":123},[102,175528,40316],{"class":187},[102,175530,380],{"class":119},[102,175532,175398],{"class":278},[102,175534,390],{"class":119},[102,175536,175537,175540,175542,175545,175547,175549,175551],{"class":104,"line":130},[102,175538,175539],{"class":119},"        result ",[102,175541,260],{"class":108},[102,175543,175544],{"class":119}," func(",[102,175546,191],{"class":108},[102,175548,175520],{"class":119},[102,175550,19403],{"class":108},[102,175552,175553],{"class":119},"kwargs)\n",[102,175555,175556,175558,175560,175562],{"class":104,"line":136},[102,175557,40316],{"class":187},[102,175559,380],{"class":119},[102,175561,175414],{"class":278},[102,175563,390],{"class":119},[102,175565,175566,175568],{"class":104,"line":142},[102,175567,184],{"class":108},[102,175569,175570],{"class":119}," result\n",[102,175572,175573],{"class":104,"line":148},[102,175574,652],{"emptyLinePlaceholder":651},[102,175576,175577,175579],{"class":104,"line":157},[102,175578,863],{"class":108},[102,175580,175427],{"class":119},[102,175582,175583],{"class":104,"line":163},[102,175584,652],{"emptyLinePlaceholder":651},[102,175586,175587],{"class":104,"line":175},[102,175588,652],{"emptyLinePlaceholder":651},[102,175590,175591],{"class":104,"line":181},[102,175592,175440],{"class":112},[102,175594,175595,175597,175599],{"class":104,"line":202},[102,175596,39812],{"class":108},[102,175598,14015],{"class":112},[102,175600,158958],{"class":119},[102,175602,175603,175605,175607,175609],{"class":104,"line":208},[102,175604,863],{"class":108},[102,175606,19610],{"class":119},[102,175608,1702],{"class":108},[102,175610,158969],{"class":119},[102,175612,175613],{"class":104,"line":214},[102,175614,652],{"emptyLinePlaceholder":651},[102,175616,175617],{"class":104,"line":225},[102,175618,652],{"emptyLinePlaceholder":651},[102,175620,175621,175623,175625,175627,175629,175631],{"class":104,"line":230},[102,175622,38280],{"class":187},[102,175624,174465],{"class":119},[102,175626,263],{"class":187},[102,175628,2571],{"class":119},[102,175630,5016],{"class":187},[102,175632,38362],{"class":119},[14,175634,175635,175636,108883,175638,175640],{},"这个写法使用 ",[83,175637,174397],{},[83,175639,174512],{}," 接收原函数的所有参数。",[43,175642,175644],{"id":175643},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,175646,131157],{},[87,175648,175649,175652,175655],{},[62,175650,175651],{},"给定一组学生数据。",[62,175653,175654],{},"封装函数，根据传入规则筛选学生。",[62,175656,175657],{},"筛选及格、优秀、未成年学生。",[14,175659,18778],{},[93,175661,175663],{"className":38243,"code":175662,"language":38245,"meta":98,"style":98},"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",[83,175664,175665,175673,175701,175729,175757,175761,175765,175769,175779,175787,175797,175804,175809,175815,175819,175823,175847,175870,175893,175897,175904,175911],{"__ignoreMap":98},[102,175666,175667,175669,175671],{"class":104,"line":105},[102,175668,167581],{"class":119},[102,175670,260],{"class":108},[102,175672,63312],{"class":119},[102,175674,175675,175677,175679,175681,175683,175685,175687,175689,175691,175693,175695,175697,175699],{"class":104,"line":116},[102,175676,156250],{"class":119},[102,175678,70544],{"class":278},[102,175680,59302],{"class":119},[102,175682,157753],{"class":278},[102,175684,2571],{"class":119},[102,175686,76989],{"class":278},[102,175688,59302],{"class":119},[102,175690,6080],{"class":187},[102,175692,2571],{"class":119},[102,175694,159337],{"class":278},[102,175696,59302],{"class":119},[102,175698,10009],{"class":187},[102,175700,13739],{"class":119},[102,175702,175703,175705,175707,175709,175711,175713,175715,175717,175719,175721,175723,175725,175727],{"class":104,"line":123},[102,175704,156250],{"class":119},[102,175706,70544],{"class":278},[102,175708,59302],{"class":119},[102,175710,158801],{"class":278},[102,175712,2571],{"class":119},[102,175714,76989],{"class":278},[102,175716,59302],{"class":119},[102,175718,9652],{"class":187},[102,175720,2571],{"class":119},[102,175722,159337],{"class":278},[102,175724,59302],{"class":119},[102,175726,9834],{"class":187},[102,175728,13739],{"class":119},[102,175730,175731,175733,175735,175737,175739,175741,175743,175745,175747,175749,175751,175753,175755],{"class":104,"line":130},[102,175732,156250],{"class":119},[102,175734,70544],{"class":278},[102,175736,59302],{"class":119},[102,175738,167596],{"class":278},[102,175740,2571],{"class":119},[102,175742,76989],{"class":278},[102,175744,59302],{"class":119},[102,175746,9700],{"class":187},[102,175748,2571],{"class":119},[102,175750,159337],{"class":278},[102,175752,59302],{"class":119},[102,175754,9904],{"class":187},[102,175756,13739],{"class":119},[102,175758,175759],{"class":104,"line":136},[102,175760,41111],{"class":119},[102,175762,175763],{"class":104,"line":142},[102,175764,652],{"emptyLinePlaceholder":651},[102,175766,175767],{"class":104,"line":148},[102,175768,652],{"emptyLinePlaceholder":651},[102,175770,175771,175773,175776],{"class":104,"line":157},[102,175772,39812],{"class":108},[102,175774,175775],{"class":112}," filter_students",[102,175777,175778],{"class":119},"(students, condition):\n",[102,175780,175781,175783,175785],{"class":104,"line":163},[102,175782,169088],{"class":119},[102,175784,260],{"class":108},[102,175786,59703],{"class":119},[102,175788,175789,175791,175793,175795],{"class":104,"line":175},[102,175790,12016],{"class":108},[102,175792,160002],{"class":119},[102,175794,33908],{"class":108},[102,175796,160007],{"class":119},[102,175798,175799,175801],{"class":104,"line":181},[102,175800,1202],{"class":108},[102,175802,175803],{"class":119}," condition(student):\n",[102,175805,175806],{"class":104,"line":202},[102,175807,175808],{"class":119},"            result.append(student)\n",[102,175810,175811,175813],{"class":104,"line":208},[102,175812,863],{"class":108},[102,175814,175570],{"class":119},[102,175816,175817],{"class":104,"line":214},[102,175818,652],{"emptyLinePlaceholder":651},[102,175820,175821],{"class":104,"line":225},[102,175822,652],{"emptyLinePlaceholder":651},[102,175824,175825,175827,175829,175832,175834,175837,175839,175841,175843,175845],{"class":104,"line":230},[102,175826,173566],{"class":119},[102,175828,260],{"class":108},[102,175830,175831],{"class":119}," filter_students(students, ",[102,175833,174751],{"class":108},[102,175835,175836],{"class":119}," s: s[",[102,175838,159337],{"class":278},[102,175840,13252],{"class":119},[102,175842,10571],{"class":108},[102,175844,165702],{"class":187},[102,175846,390],{"class":119},[102,175848,175849,175852,175854,175856,175858,175860,175862,175864,175866,175868],{"class":104,"line":236},[102,175850,175851],{"class":119},"excellent ",[102,175853,260],{"class":108},[102,175855,175831],{"class":119},[102,175857,174751],{"class":108},[102,175859,175836],{"class":119},[102,175861,159337],{"class":278},[102,175863,13252],{"class":119},[102,175865,10571],{"class":108},[102,175867,165653],{"class":187},[102,175869,390],{"class":119},[102,175871,175872,175875,175877,175879,175881,175883,175885,175887,175889,175891],{"class":104,"line":242},[102,175873,175874],{"class":119},"under_age ",[102,175876,260],{"class":108},[102,175878,175831],{"class":119},[102,175880,174751],{"class":108},[102,175882,175836],{"class":119},[102,175884,76989],{"class":278},[102,175886,13252],{"class":119},[102,175888,1208],{"class":108},[102,175890,164150],{"class":187},[102,175892,390],{"class":119},[102,175894,175895],{"class":104,"line":248},[102,175896,652],{"emptyLinePlaceholder":651},[102,175898,175899,175901],{"class":104,"line":254},[102,175900,38280],{"class":187},[102,175902,175903],{"class":119},"(passed)\n",[102,175905,175906,175908],{"class":104,"line":269},[102,175907,38280],{"class":187},[102,175909,175910],{"class":119},"(excellent)\n",[102,175912,175913,175915],{"class":104,"line":298},[102,175914,38280],{"class":187},[102,175916,175917],{"class":119},"(under_age)\n",[43,175919,175921],{"id":175920},"_715-易错点","7.15 易错点",[87,175923,175924,175927,175935,175940,175951],{},[62,175925,175926],{},"默认参数不要写可变对象。",[62,175928,175929,175931,175932,175934],{},[83,175930,174397],{}," 是元组，",[83,175933,174512],{}," 是字典。",[62,175936,175937,175939],{},[83,175938,174751],{}," 只适合简单表达式。",[62,175941,175942,108883,175944,175946,175947,175950],{},[83,175943,81909],{},[83,175945,87916],{}," 的结果是迭代器，常用 ",[83,175948,175949],{},"list()"," 转换查看。",[62,175952,175953],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[43,175955,175957],{"id":175956},"_716-本章练习","7.16 本章练习",[87,175959,175960,175967,175973,175978,175983],{},[62,175961,175962,175963,175966],{},"写函数 ",[83,175964,175965],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[62,175968,175962,175969,175972],{},[83,175970,175971],{},"print_user(**kwargs)","，输出用户所有字段。",[62,175974,112231,175975,175977],{},[83,175976,174751],{}," 对学生列表按年龄排序。",[62,175979,112231,175980,175982],{},[83,175981,87916],{}," 找出成绩不及格的学生。",[62,175984,175985],{},"写一个装饰器，统计函数执行前后的提示信息。",[8955,175987,175988],{},"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":98,"searchDepth":116,"depth":116,"links":175990},[175991,175992,175993,175994,175995,175996,176000,176001,176002,176003,176008,176009,176010,176011,176012,176013],{"id":173849,"depth":116,"text":173850},{"id":173963,"depth":116,"text":173964},{"id":174052,"depth":116,"text":174053},{"id":174114,"depth":116,"text":174115},{"id":174260,"depth":116,"text":174261},{"id":174387,"depth":116,"text":174388,"children":175997},[175998,175999],{"id":174391,"depth":123,"text":174392},{"id":174506,"depth":123,"text":174507},{"id":174587,"depth":116,"text":174588},{"id":174745,"depth":116,"text":174746},{"id":174913,"depth":116,"text":174914},{"id":174995,"depth":116,"text":174996,"children":176004},[176005,176006,176007],{"id":174999,"depth":123,"text":175000},{"id":175070,"depth":123,"text":175071},{"id":175147,"depth":123,"text":175148},{"id":175272,"depth":116,"text":175273},{"id":175362,"depth":116,"text":175363},{"id":175493,"depth":116,"text":175494},{"id":175643,"depth":116,"text":175644},{"id":175920,"depth":116,"text":175921},{"id":175956,"depth":116,"text":175957},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":173841,"description":31240},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":176020,"title":176021,"body":176022,"description":31240,"extension":8978,"meta":178541,"navigation":651,"path":178542,"seo":178543,"stem":178544,"__hash__":178545},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":176023,"toc":178516},[176024,176027,176031,176034,176037,176068,176072,176076,176079,176106,176110,176113,176164,176167,176182,176185,176220,176224,176226,176250,176253,176313,176317,176321,176324,176381,176384,176404,176408,176411,176474,176478,176481,176537,176544,176568,176572,176575,176638,176642,176647,176698,176701,176705,176710,176777,176780,176862,176866,176871,176922,176925,176929,176932,176935,176943,176946,176992,176995,177041,177045,177051,177095,177098,177144,177147,177187,177190,177251,177255,177258,177348,177351,177493,177496,177563,177567,177570,177573,177714,177717,177795,177798,177974,177978,177980,177991,177993,178192,178196,178440,178444,178478,178482,178513],[10,176025,176021],{"id":176026},"_8-文件操作",[43,176028,176030],{"id":176029},"_81-文件操作的意义","8.1 文件操作的意义",[14,176032,176033],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,176035,176036],{},"常见文件类型：",[87,176038,176039,176045,176051,176057,176063],{},[62,176040,176041,176044],{},[83,176042,176043],{},".txt","：普通文本。",[62,176046,176047,176050],{},[83,176048,176049],{},".csv","：表格文本。",[62,176052,176053,176056],{},[83,176054,176055],{},".json","：结构化数据。",[62,176058,176059,176062],{},[83,176060,176061],{},".log","：日志文件。",[62,176064,176065,176067],{},[83,176066,154217],{},"：Python 源代码。",[43,176069,176071],{"id":176070},"_82-路径","8.2 路径",[48,176073,176075],{"id":176074},"_821-相对路径","8.2.1 相对路径",[14,176077,176078],{},"相对当前运行目录：",[93,176080,176082],{"className":38243,"code":176081,"language":38245,"meta":98,"style":98},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[83,176083,176084],{"__ignoreMap":98},[102,176085,176086,176088,176090,176092,176094,176096,176098,176100,176102,176104],{"class":104,"line":105},[102,176087,94780],{"class":187},[102,176089,380],{"class":119},[102,176091,154661],{"class":278},[102,176093,2571],{"class":119},[102,176095,154666],{"class":278},[102,176097,2571],{"class":119},[102,176099,154671],{"class":386},[102,176101,260],{"class":108},[102,176103,154676],{"class":278},[102,176105,390],{"class":119},[48,176107,176109],{"id":176108},"_822-绝对路径","8.2.2 绝对路径",[14,176111,176112],{},"从根目录或盘符开始：",[93,176114,176116],{"className":38243,"code":176115,"language":38245,"meta":98,"style":98},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[83,176117,176118,176141],{"__ignoreMap":98},[102,176119,176120,176122,176124,176127,176129,176131,176133,176135,176137,176139],{"class":104,"line":105},[102,176121,94780],{"class":187},[102,176123,380],{"class":119},[102,176125,176126],{"class":278},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[102,176128,2571],{"class":119},[102,176130,154666],{"class":278},[102,176132,2571],{"class":119},[102,176134,154671],{"class":386},[102,176136,260],{"class":108},[102,176138,154676],{"class":278},[102,176140,390],{"class":119},[102,176142,176143,176145,176147,176150,176152,176154,176156,176158,176160,176162],{"class":104,"line":116},[102,176144,94780],{"class":187},[102,176146,380],{"class":119},[102,176148,176149],{"class":278},"\"D:\u002Fdata\u002Fdata.txt\"",[102,176151,2571],{"class":119},[102,176153,154666],{"class":278},[102,176155,2571],{"class":119},[102,176157,154671],{"class":386},[102,176159,260],{"class":108},[102,176161,154676],{"class":278},[102,176163,390],{"class":119},[14,176165,176166],{},"Windows 路径建议写成：",[93,176168,176170],{"className":38243,"code":176169,"language":38245,"meta":98,"style":98},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[83,176171,176172],{"__ignoreMap":98},[102,176173,176174,176177,176179],{"class":104,"line":105},[102,176175,176176],{"class":119},"path ",[102,176178,260],{"class":108},[102,176180,176181],{"class":278}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,176183,176184],{},"或原始字符串：",[93,176186,176188],{"className":38243,"code":176187,"language":38245,"meta":98,"style":98},"path = r\"D:\\data\\data.txt\"\n",[83,176189,176190],{"__ignoreMap":98},[102,176191,176192,176194,176196,176198,176200,176203,176206,176209,176211,176213,176215,176218],{"class":104,"line":105},[102,176193,176176],{"class":119},[102,176195,260],{"class":108},[102,176197,2682],{"class":108},[102,176199,9288],{"class":278},[102,176201,176202],{"class":55842},"D:",[102,176204,176205],{"class":187},"\\d",[102,176207,176208],{"class":55842},"ata",[102,176210,176205],{"class":187},[102,176212,176208],{"class":55842},[102,176214,9585],{"class":187},[102,176216,176217],{"class":55842},"txt",[102,176219,32998],{"class":278},[43,176221,176223],{"id":176222},"_83-open函数","8.3 open函数",[14,176225,80],{},[93,176227,176229],{"className":38243,"code":176228,"language":38245,"meta":98,"style":98},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[83,176230,176231],{"__ignoreMap":98},[102,176232,176233,176235,176237,176239,176242,176244,176246,176248],{"class":104,"line":105},[102,176234,53219],{"class":386},[102,176236,22296],{"class":108},[102,176238,154656],{"class":187},[102,176240,176241],{"class":119},"(文件路径, 打开模式, ",[102,176243,154671],{"class":386},[102,176245,260],{"class":108},[102,176247,154676],{"class":278},[102,176249,390],{"class":119},[14,176251,176252],{},"常见模式：",[9177,176254,176255,176264],{},[9180,176256,176257],{},[9183,176258,176259,176262],{},[9186,176260,176261],{},"模式",[9186,176263,33734],{},[9223,176265,176266,176275,176284,176293,176303],{},[9183,176267,176268,176272],{},[9228,176269,176270],{},[83,176271,9695],{},[9228,176273,176274],{},"只读，文件不存在会报错",[9183,176276,176277,176281],{},[9228,176278,176279],{},[83,176280,2142],{},[9228,176282,176283],{},"只写，文件不存在会创建，存在会清空",[9183,176285,176286,176290],{},[9228,176287,176288],{},[83,176289,9275],{},[9228,176291,176292],{},"追加，文件不存在会创建",[9183,176294,176295,176300],{},[9228,176296,176297],{},[83,176298,176299],{},"rb",[9228,176301,176302],{},"二进制只读",[9183,176304,176305,176310],{},[9228,176306,176307],{},[83,176308,176309],{},"wb",[9228,176311,176312],{},"二进制只写",[43,176314,176316],{"id":176315},"_84-读取文件","8.4 读取文件",[48,176318,176320],{"id":176319},"_841-read","8.4.1 read",[14,176322,176323],{},"一次读取全部内容：",[93,176325,176327],{"className":38243,"code":176326,"language":38245,"meta":98,"style":98},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[83,176328,176329,176355,176367,176374],{"__ignoreMap":98},[102,176330,176331,176333,176335,176337,176339,176341,176343,176345,176347,176349,176351,176353],{"class":104,"line":105},[102,176332,53219],{"class":386},[102,176334,22296],{"class":108},[102,176336,154656],{"class":187},[102,176338,380],{"class":119},[102,176340,154661],{"class":278},[102,176342,2571],{"class":119},[102,176344,154666],{"class":278},[102,176346,2571],{"class":119},[102,176348,154671],{"class":386},[102,176350,260],{"class":108},[102,176352,154676],{"class":278},[102,176354,390],{"class":119},[102,176356,176357,176360,176362,176364],{"class":104,"line":116},[102,176358,176359],{"class":119},"content ",[102,176361,260],{"class":108},[102,176363,156018],{"class":386},[102,176365,176366],{"class":119},".read()\n",[102,176368,176369,176371],{"class":104,"line":123},[102,176370,38280],{"class":187},[102,176372,176373],{"class":119},"(content)\n",[102,176375,176376,176378],{"class":104,"line":130},[102,176377,53219],{"class":386},[102,176379,176380],{"class":119},".close()\n",[14,176382,176383],{},"可以指定读取字符数：",[93,176385,176387],{"className":38243,"code":176386,"language":38245,"meta":98,"style":98},"content = file.read(10)\n",[83,176388,176389],{"__ignoreMap":98},[102,176390,176391,176393,176395,176397,176400,176402],{"class":104,"line":105},[102,176392,176359],{"class":119},[102,176394,260],{"class":108},[102,176396,156018],{"class":386},[102,176398,176399],{"class":119},".read(",[102,176401,263],{"class":187},[102,176403,390],{"class":119},[48,176405,176407],{"id":176406},"_842-readline","8.4.2 readline",[14,176409,176410],{},"一次读取一行：",[93,176412,176414],{"className":38243,"code":176413,"language":38245,"meta":98,"style":98},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[83,176415,176416,176442,176446,176457,176464,176468],{"__ignoreMap":98},[102,176417,176418,176420,176422,176424,176426,176428,176430,176432,176434,176436,176438,176440],{"class":104,"line":105},[102,176419,53219],{"class":386},[102,176421,22296],{"class":108},[102,176423,154656],{"class":187},[102,176425,380],{"class":119},[102,176427,154661],{"class":278},[102,176429,2571],{"class":119},[102,176431,154666],{"class":278},[102,176433,2571],{"class":119},[102,176435,154671],{"class":386},[102,176437,260],{"class":108},[102,176439,154676],{"class":278},[102,176441,390],{"class":119},[102,176443,176444],{"class":104,"line":116},[102,176445,652],{"emptyLinePlaceholder":651},[102,176447,176448,176450,176452,176454],{"class":104,"line":123},[102,176449,155117],{"class":119},[102,176451,260],{"class":108},[102,176453,156018],{"class":386},[102,176455,176456],{"class":119},".readline()\n",[102,176458,176459,176461],{"class":104,"line":130},[102,176460,38280],{"class":187},[102,176462,176463],{"class":119},"(line)\n",[102,176465,176466],{"class":104,"line":136},[102,176467,652],{"emptyLinePlaceholder":651},[102,176469,176470,176472],{"class":104,"line":142},[102,176471,53219],{"class":386},[102,176473,176380],{"class":119},[48,176475,176477],{"id":176476},"_843-readlines","8.4.3 readlines",[14,176479,176480],{},"读取所有行，返回列表：",[93,176482,176484],{"className":38243,"code":176483,"language":38245,"meta":98,"style":98},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[83,176485,176486,176512,176524,176531],{"__ignoreMap":98},[102,176487,176488,176490,176492,176494,176496,176498,176500,176502,176504,176506,176508,176510],{"class":104,"line":105},[102,176489,53219],{"class":386},[102,176491,22296],{"class":108},[102,176493,154656],{"class":187},[102,176495,380],{"class":119},[102,176497,154661],{"class":278},[102,176499,2571],{"class":119},[102,176501,154666],{"class":278},[102,176503,2571],{"class":119},[102,176505,154671],{"class":386},[102,176507,260],{"class":108},[102,176509,154676],{"class":278},[102,176511,390],{"class":119},[102,176513,176514,176517,176519,176521],{"class":104,"line":116},[102,176515,176516],{"class":119},"lines ",[102,176518,260],{"class":108},[102,176520,156018],{"class":386},[102,176522,176523],{"class":119},".readlines()\n",[102,176525,176526,176528],{"class":104,"line":123},[102,176527,38280],{"class":187},[102,176529,176530],{"class":119},"(lines)\n",[102,176532,176533,176535],{"class":104,"line":130},[102,176534,53219],{"class":386},[102,176536,176380],{"class":119},[14,176538,176539,176540,176543],{},"每一行通常带有换行符，可以用 ",[83,176541,176542],{},"strip()"," 去掉：",[93,176545,176547],{"className":38243,"code":176546,"language":38245,"meta":98,"style":98},"for line in lines:\n    print(line.strip())\n",[83,176548,176549,176561],{"__ignoreMap":98},[102,176550,176551,176553,176556,176558],{"class":104,"line":105},[102,176552,11841],{"class":108},[102,176554,176555],{"class":119}," line ",[102,176557,33908],{"class":108},[102,176559,176560],{"class":119}," lines:\n",[102,176562,176563,176565],{"class":104,"line":116},[102,176564,39164],{"class":187},[102,176566,176567],{"class":119},"(line.strip())\n",[48,176569,176571],{"id":176570},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,176573,176574],{},"推荐读取大文件时使用：",[93,176576,176578],{"className":38243,"code":176577,"language":38245,"meta":98,"style":98},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[83,176579,176580,176606,176610,176622,176628,176632],{"__ignoreMap":98},[102,176581,176582,176584,176586,176588,176590,176592,176594,176596,176598,176600,176602,176604],{"class":104,"line":105},[102,176583,53219],{"class":386},[102,176585,22296],{"class":108},[102,176587,154656],{"class":187},[102,176589,380],{"class":119},[102,176591,154661],{"class":278},[102,176593,2571],{"class":119},[102,176595,154666],{"class":278},[102,176597,2571],{"class":119},[102,176599,154671],{"class":386},[102,176601,260],{"class":108},[102,176603,154676],{"class":278},[102,176605,390],{"class":119},[102,176607,176608],{"class":104,"line":116},[102,176609,652],{"emptyLinePlaceholder":651},[102,176611,176612,176614,176616,176618,176620],{"class":104,"line":123},[102,176613,11841],{"class":108},[102,176615,176555],{"class":119},[102,176617,33908],{"class":108},[102,176619,156018],{"class":386},[102,176621,12552],{"class":119},[102,176623,176624,176626],{"class":104,"line":130},[102,176625,39164],{"class":187},[102,176627,176567],{"class":119},[102,176629,176630],{"class":104,"line":136},[102,176631,652],{"emptyLinePlaceholder":651},[102,176633,176634,176636],{"class":104,"line":142},[102,176635,53219],{"class":386},[102,176637,176380],{"class":119},[43,176639,176641],{"id":176640},"_85-with语句","8.5 with语句",[14,176643,176644,176646],{},[83,176645,115698],{}," 会自动关闭文件，推荐使用。",[93,176648,176650],{"className":38243,"code":176649,"language":38245,"meta":98,"style":98},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[83,176651,176652,176682,176692],{"__ignoreMap":98},[102,176653,176654,176656,176658,176660,176662,176664,176666,176668,176670,176672,176674,176676,176678,176680],{"class":104,"line":105},[102,176655,115698],{"class":108},[102,176657,154656],{"class":187},[102,176659,380],{"class":119},[102,176661,154661],{"class":278},[102,176663,2571],{"class":119},[102,176665,154666],{"class":278},[102,176667,2571],{"class":119},[102,176669,154671],{"class":386},[102,176671,260],{"class":108},[102,176673,154676],{"class":278},[102,176675,22445],{"class":119},[102,176677,39248],{"class":108},[102,176679,156018],{"class":386},[102,176681,12552],{"class":119},[102,176683,176684,176686,176688,176690],{"class":104,"line":116},[102,176685,154688],{"class":119},[102,176687,260],{"class":108},[102,176689,156018],{"class":386},[102,176691,176366],{"class":119},[102,176693,176694,176696],{"class":104,"line":123},[102,176695,39164],{"class":187},[102,176697,176373],{"class":119},[14,176699,176700],{},"等价于打开文件、读取、最后关闭，但更安全。",[43,176702,176704],{"id":176703},"_86-写入文件","8.6 写入文件",[14,176706,176707,176709],{},[83,176708,2142],{}," 模式会清空原文件。",[93,176711,176713],{"className":38243,"code":176712,"language":38245,"meta":98,"style":98},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[83,176714,176715,176745,176762],{"__ignoreMap":98},[102,176716,176717,176719,176721,176723,176725,176727,176729,176731,176733,176735,176737,176739,176741,176743],{"class":104,"line":105},[102,176718,115698],{"class":108},[102,176720,154656],{"class":187},[102,176722,380],{"class":119},[102,176724,154661],{"class":278},[102,176726,2571],{"class":119},[102,176728,159841],{"class":278},[102,176730,2571],{"class":119},[102,176732,154671],{"class":386},[102,176734,260],{"class":108},[102,176736,154676],{"class":278},[102,176738,22445],{"class":119},[102,176740,39248],{"class":108},[102,176742,156018],{"class":386},[102,176744,12552],{"class":119},[102,176746,176747,176750,176753,176756,176758,176760],{"class":104,"line":116},[102,176748,176749],{"class":386},"    file",[102,176751,176752],{"class":119},".write(",[102,176754,176755],{"class":278},"\"hello",[102,176757,164390],{"class":187},[102,176759,9288],{"class":278},[102,176761,390],{"class":119},[102,176763,176764,176766,176768,176771,176773,176775],{"class":104,"line":123},[102,176765,176749],{"class":386},[102,176767,176752],{"class":119},[102,176769,176770],{"class":278},"\"python",[102,176772,164390],{"class":187},[102,176774,9288],{"class":278},[102,176776,390],{"class":119},[14,176778,176779],{},"写入多行：",[93,176781,176783],{"className":38243,"code":176782,"language":38245,"meta":98,"style":98},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[83,176784,176785,176820,176824,176855],{"__ignoreMap":98},[102,176786,176787,176789,176791,176793,176796,176798,176800,176802,176805,176807,176809,176811,176814,176816,176818],{"class":104,"line":105},[102,176788,176516],{"class":119},[102,176790,260],{"class":108},[102,176792,60091],{"class":119},[102,176794,176795],{"class":278},"\"小明,18",[102,176797,164390],{"class":187},[102,176799,9288],{"class":278},[102,176801,2571],{"class":119},[102,176803,176804],{"class":278},"\"小红,17",[102,176806,164390],{"class":187},[102,176808,9288],{"class":278},[102,176810,2571],{"class":119},[102,176812,176813],{"class":278},"\"小刚,19",[102,176815,164390],{"class":187},[102,176817,9288],{"class":278},[102,176819,41111],{"class":119},[102,176821,176822],{"class":104,"line":116},[102,176823,652],{"emptyLinePlaceholder":651},[102,176825,176826,176828,176830,176832,176835,176837,176839,176841,176843,176845,176847,176849,176851,176853],{"class":104,"line":123},[102,176827,115698],{"class":108},[102,176829,154656],{"class":187},[102,176831,380],{"class":119},[102,176833,176834],{"class":278},"\"students.txt\"",[102,176836,2571],{"class":119},[102,176838,159841],{"class":278},[102,176840,2571],{"class":119},[102,176842,154671],{"class":386},[102,176844,260],{"class":108},[102,176846,154676],{"class":278},[102,176848,22445],{"class":119},[102,176850,39248],{"class":108},[102,176852,156018],{"class":386},[102,176854,12552],{"class":119},[102,176856,176857,176859],{"class":104,"line":130},[102,176858,176749],{"class":386},[102,176860,176861],{"class":119},".writelines(lines)\n",[43,176863,176865],{"id":176864},"_87-追加文件","8.7 追加文件",[14,176867,176868,176870],{},[83,176869,9275],{}," 模式不会清空原内容，而是在末尾追加。",[93,176872,176874],{"className":38243,"code":176873,"language":38245,"meta":98,"style":98},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[83,176875,176876,176907],{"__ignoreMap":98},[102,176877,176878,176880,176882,176884,176887,176889,176891,176893,176895,176897,176899,176901,176903,176905],{"class":104,"line":105},[102,176879,115698],{"class":108},[102,176881,154656],{"class":187},[102,176883,380],{"class":119},[102,176885,176886],{"class":278},"\"log.txt\"",[102,176888,2571],{"class":119},[102,176890,173190],{"class":278},[102,176892,2571],{"class":119},[102,176894,154671],{"class":386},[102,176896,260],{"class":108},[102,176898,154676],{"class":278},[102,176900,22445],{"class":119},[102,176902,39248],{"class":108},[102,176904,156018],{"class":386},[102,176906,12552],{"class":119},[102,176908,176909,176911,176913,176916,176918,176920],{"class":104,"line":116},[102,176910,176749],{"class":386},[102,176912,176752],{"class":119},[102,176914,176915],{"class":278},"\"程序启动",[102,176917,164390],{"class":187},[102,176919,9288],{"class":278},[102,176921,390],{"class":119},[14,176923,176924],{},"日志类文件常用追加模式。",[43,176926,176928],{"id":176927},"_88-文件编码","8.8 文件编码",[14,176930,176931],{},"编码决定文字如何保存为字节。",[14,176933,176934],{},"常见编码：",[87,176936,176937,176940],{},[62,176938,176939],{},"UTF-8：推荐。",[62,176941,176942],{},"GBK：部分 Windows 中文文件常见。",[14,176944,176945],{},"读取文件乱码时，可以尝试：",[93,176947,176949],{"className":38243,"code":176948,"language":38245,"meta":98,"style":98},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[83,176950,176951,176982],{"__ignoreMap":98},[102,176952,176953,176955,176957,176959,176961,176963,176965,176967,176969,176971,176974,176976,176978,176980],{"class":104,"line":105},[102,176954,115698],{"class":108},[102,176956,154656],{"class":187},[102,176958,380],{"class":119},[102,176960,154661],{"class":278},[102,176962,2571],{"class":119},[102,176964,154666],{"class":278},[102,176966,2571],{"class":119},[102,176968,154671],{"class":386},[102,176970,260],{"class":108},[102,176972,176973],{"class":278},"\"gbk\"",[102,176975,22445],{"class":119},[102,176977,39248],{"class":108},[102,176979,156018],{"class":386},[102,176981,12552],{"class":119},[102,176983,176984,176986,176988,176990],{"class":104,"line":116},[102,176985,154688],{"class":119},[102,176987,260],{"class":108},[102,176989,156018],{"class":386},[102,176991,176366],{"class":119},[14,176993,176994],{},"写文件时建议统一 UTF-8：",[93,176996,176998],{"className":38243,"code":176997,"language":38245,"meta":98,"style":98},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[83,176999,177000,177030],{"__ignoreMap":98},[102,177001,177002,177004,177006,177008,177010,177012,177014,177016,177018,177020,177022,177024,177026,177028],{"class":104,"line":105},[102,177003,115698],{"class":108},[102,177005,154656],{"class":187},[102,177007,380],{"class":119},[102,177009,154661],{"class":278},[102,177011,2571],{"class":119},[102,177013,159841],{"class":278},[102,177015,2571],{"class":119},[102,177017,154671],{"class":386},[102,177019,260],{"class":108},[102,177021,154676],{"class":278},[102,177023,22445],{"class":119},[102,177025,39248],{"class":108},[102,177027,156018],{"class":386},[102,177029,12552],{"class":119},[102,177031,177032,177034,177036,177039],{"class":104,"line":116},[102,177033,176749],{"class":386},[102,177035,176752],{"class":119},[102,177037,177038],{"class":278},"\"中文内容\"",[102,177040,390],{"class":119},[43,177042,177044],{"id":177043},"_89-pathlib","8.9 pathlib",[14,177046,177047,177050],{},[83,177048,177049],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[93,177052,177054],{"className":38243,"code":177053,"language":38245,"meta":98,"style":98},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[83,177055,177056,177066,177070,177088],{"__ignoreMap":98},[102,177057,177058,177060,177062,177064],{"class":104,"line":105},[102,177059,38602],{"class":108},[102,177061,116176],{"class":119},[102,177063,38257],{"class":108},[102,177065,116181],{"class":119},[102,177067,177068],{"class":104,"line":116},[102,177069,652],{"emptyLinePlaceholder":651},[102,177071,177072,177074,177076,177078,177081,177083,177085],{"class":104,"line":123},[102,177073,176176],{"class":119},[102,177075,260],{"class":108},[102,177077,116410],{"class":119},[102,177079,177080],{"class":278},"\"data\"",[102,177082,22445],{"class":119},[102,177084,9611],{"class":108},[102,177086,177087],{"class":278}," \"students.txt\"\n",[102,177089,177090,177092],{"class":104,"line":130},[102,177091,38280],{"class":187},[102,177093,177094],{"class":119},"(path)\n",[14,177096,177097],{},"创建目录：",[93,177099,177101],{"className":38243,"code":177100,"language":38245,"meta":98,"style":98},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[83,177102,177103,177113,177117,177130],{"__ignoreMap":98},[102,177104,177105,177107,177109,177111],{"class":104,"line":105},[102,177106,38602],{"class":108},[102,177108,116176],{"class":119},[102,177110,38257],{"class":108},[102,177112,116181],{"class":119},[102,177114,177115],{"class":104,"line":116},[102,177116,652],{"emptyLinePlaceholder":651},[102,177118,177119,177122,177124,177126,177128],{"class":104,"line":123},[102,177120,177121],{"class":119},"data_dir ",[102,177123,260],{"class":108},[102,177125,116410],{"class":119},[102,177127,177080],{"class":278},[102,177129,390],{"class":119},[102,177131,177132,177135,177138,177140,177142],{"class":104,"line":130},[102,177133,177134],{"class":119},"data_dir.mkdir(",[102,177136,177137],{"class":386},"exist_ok",[102,177139,260],{"class":108},[102,177141,39341],{"class":187},[102,177143,390],{"class":119},[14,177145,177146],{},"判断文件是否存在：",[93,177148,177150],{"className":38243,"code":177149,"language":38245,"meta":98,"style":98},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[83,177151,177152,177165,177169,177176],{"__ignoreMap":98},[102,177153,177154,177156,177158,177160,177163],{"class":104,"line":105},[102,177155,176176],{"class":119},[102,177157,260],{"class":108},[102,177159,116410],{"class":119},[102,177161,177162],{"class":278},"\"data\u002Fstudents.txt\"",[102,177164,390],{"class":119},[102,177166,177167],{"class":104,"line":116},[102,177168,652],{"emptyLinePlaceholder":651},[102,177170,177171,177173],{"class":104,"line":123},[102,177172,10407],{"class":108},[102,177174,177175],{"class":119}," path.exists():\n",[102,177177,177178,177180,177182,177185],{"class":104,"line":130},[102,177179,39164],{"class":187},[102,177181,380],{"class":119},[102,177183,177184],{"class":278},"\"文件存在\"",[102,177186,390],{"class":119},[14,177188,177189],{},"读写文本：",[93,177191,177193],{"className":38243,"code":177192,"language":38245,"meta":98,"style":98},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[83,177194,177195,177207,177211,177228,177245],{"__ignoreMap":98},[102,177196,177197,177199,177201,177203,177205],{"class":104,"line":105},[102,177198,176176],{"class":119},[102,177200,260],{"class":108},[102,177202,116410],{"class":119},[102,177204,154661],{"class":278},[102,177206,390],{"class":119},[102,177208,177209],{"class":104,"line":116},[102,177210,652],{"emptyLinePlaceholder":651},[102,177212,177213,177216,177218,177220,177222,177224,177226],{"class":104,"line":123},[102,177214,177215],{"class":119},"path.write_text(",[102,177217,153741],{"class":278},[102,177219,2571],{"class":119},[102,177221,154671],{"class":386},[102,177223,260],{"class":108},[102,177225,154676],{"class":278},[102,177227,390],{"class":119},[102,177229,177230,177232,177234,177237,177239,177241,177243],{"class":104,"line":130},[102,177231,176359],{"class":119},[102,177233,260],{"class":108},[102,177235,177236],{"class":119}," path.read_text(",[102,177238,154671],{"class":386},[102,177240,260],{"class":108},[102,177242,154676],{"class":278},[102,177244,390],{"class":119},[102,177246,177247,177249],{"class":104,"line":136},[102,177248,38280],{"class":187},[102,177250,176373],{"class":119},[43,177252,177254],{"id":177253},"_810-json文件","8.10 JSON文件",[14,177256,177257],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[93,177259,177261],{"className":38243,"code":177260,"language":38245,"meta":98,"style":98},"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",[83,177262,177263,177269,177273,177281,177291,177301,177309,177313,177317,177342],{"__ignoreMap":98},[102,177264,177265,177267],{"class":104,"line":105},[102,177266,38257],{"class":108},[102,177268,154956],{"class":119},[102,177270,177271],{"class":104,"line":116},[102,177272,652],{"emptyLinePlaceholder":651},[102,177274,177275,177277,177279],{"class":104,"line":123},[102,177276,157346],{"class":119},[102,177278,260],{"class":108},[102,177280,1077],{"class":119},[102,177282,177283,177285,177287,177289],{"class":104,"line":130},[102,177284,154885],{"class":278},[102,177286,59302],{"class":119},[102,177288,157753],{"class":278},[102,177290,39331],{"class":119},[102,177292,177293,177295,177297,177299],{"class":104,"line":136},[102,177294,172402],{"class":278},[102,177296,59302],{"class":119},[102,177298,6080],{"class":187},[102,177300,39331],{"class":119},[102,177302,177303,177305,177307],{"class":104,"line":142},[102,177304,172413],{"class":278},[102,177306,59302],{"class":119},[102,177308,172418],{"class":187},[102,177310,177311],{"class":104,"line":148},[102,177312,301],{"class":119},[102,177314,177315],{"class":104,"line":157},[102,177316,652],{"emptyLinePlaceholder":651},[102,177318,177319,177321,177323,177326,177328,177330,177332,177334,177336,177338,177340],{"class":104,"line":163},[102,177320,164309],{"class":119},[102,177322,260],{"class":108},[102,177324,177325],{"class":119}," json.dumps(student, ",[102,177327,155002],{"class":386},[102,177329,260],{"class":108},[102,177331,41852],{"class":187},[102,177333,2571],{"class":119},[102,177335,159877],{"class":386},[102,177337,260],{"class":108},[102,177339,7044],{"class":187},[102,177341,390],{"class":119},[102,177343,177344,177346],{"class":104,"line":175},[102,177345,38280],{"class":187},[102,177347,171936],{"class":119},[14,177349,177350],{},"写入 JSON 文件：",[93,177352,177354],{"className":38243,"code":177353,"language":38245,"meta":98,"style":98},"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",[83,177355,177356,177362,177366,177374,177402,177430,177434,177438,177468],{"__ignoreMap":98},[102,177357,177358,177360],{"class":104,"line":105},[102,177359,38257],{"class":108},[102,177361,154956],{"class":119},[102,177363,177364],{"class":104,"line":116},[102,177365,652],{"emptyLinePlaceholder":651},[102,177367,177368,177370,177372],{"class":104,"line":123},[102,177369,167581],{"class":119},[102,177371,260],{"class":108},[102,177373,63312],{"class":119},[102,177375,177376,177378,177380,177382,177384,177386,177388,177390,177392,177394,177396,177398,177400],{"class":104,"line":130},[102,177377,156250],{"class":119},[102,177379,70544],{"class":278},[102,177381,59302],{"class":119},[102,177383,157753],{"class":278},[102,177385,2571],{"class":119},[102,177387,76989],{"class":278},[102,177389,59302],{"class":119},[102,177391,6080],{"class":187},[102,177393,2571],{"class":119},[102,177395,159337],{"class":278},[102,177397,59302],{"class":119},[102,177399,10009],{"class":187},[102,177401,13739],{"class":119},[102,177403,177404,177406,177408,177410,177412,177414,177416,177418,177420,177422,177424,177426,177428],{"class":104,"line":136},[102,177405,156250],{"class":119},[102,177407,70544],{"class":278},[102,177409,59302],{"class":119},[102,177411,158801],{"class":278},[102,177413,2571],{"class":119},[102,177415,76989],{"class":278},[102,177417,59302],{"class":119},[102,177419,9652],{"class":187},[102,177421,2571],{"class":119},[102,177423,159337],{"class":278},[102,177425,59302],{"class":119},[102,177427,9834],{"class":187},[102,177429,13739],{"class":119},[102,177431,177432],{"class":104,"line":142},[102,177433,41111],{"class":119},[102,177435,177436],{"class":104,"line":148},[102,177437,652],{"emptyLinePlaceholder":651},[102,177439,177440,177442,177444,177446,177448,177450,177452,177454,177456,177458,177460,177462,177464,177466],{"class":104,"line":157},[102,177441,115698],{"class":108},[102,177443,154656],{"class":187},[102,177445,380],{"class":119},[102,177447,159696],{"class":278},[102,177449,2571],{"class":119},[102,177451,159841],{"class":278},[102,177453,2571],{"class":119},[102,177455,154671],{"class":386},[102,177457,260],{"class":108},[102,177459,154676],{"class":278},[102,177461,22445],{"class":119},[102,177463,39248],{"class":108},[102,177465,156018],{"class":386},[102,177467,12552],{"class":119},[102,177469,177470,177473,177475,177477,177479,177481,177483,177485,177487,177489,177491],{"class":104,"line":163},[102,177471,177472],{"class":119},"    json.dump(students, ",[102,177474,53219],{"class":386},[102,177476,2571],{"class":119},[102,177478,155002],{"class":386},[102,177480,260],{"class":108},[102,177482,41852],{"class":187},[102,177484,2571],{"class":119},[102,177486,159877],{"class":386},[102,177488,260],{"class":108},[102,177490,7044],{"class":187},[102,177492,390],{"class":119},[14,177494,177495],{},"读取 JSON 文件：",[93,177497,177499],{"className":38243,"code":177498,"language":38245,"meta":98,"style":98},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[83,177500,177501,177507,177511,177541,177553,177557],{"__ignoreMap":98},[102,177502,177503,177505],{"class":104,"line":105},[102,177504,38257],{"class":108},[102,177506,154956],{"class":119},[102,177508,177509],{"class":104,"line":116},[102,177510,652],{"emptyLinePlaceholder":651},[102,177512,177513,177515,177517,177519,177521,177523,177525,177527,177529,177531,177533,177535,177537,177539],{"class":104,"line":123},[102,177514,115698],{"class":108},[102,177516,154656],{"class":187},[102,177518,380],{"class":119},[102,177520,159696],{"class":278},[102,177522,2571],{"class":119},[102,177524,154666],{"class":278},[102,177526,2571],{"class":119},[102,177528,154671],{"class":386},[102,177530,260],{"class":108},[102,177532,154676],{"class":278},[102,177534,22445],{"class":119},[102,177536,39248],{"class":108},[102,177538,156018],{"class":386},[102,177540,12552],{"class":119},[102,177542,177543,177545,177547,177549,177551],{"class":104,"line":130},[102,177544,160902],{"class":119},[102,177546,260],{"class":108},[102,177548,156029],{"class":119},[102,177550,53219],{"class":386},[102,177552,390],{"class":119},[102,177554,177555],{"class":104,"line":136},[102,177556,652],{"emptyLinePlaceholder":651},[102,177558,177559,177561],{"class":104,"line":142},[102,177560,38280],{"class":187},[102,177562,172860],{"class":119},[43,177564,177566],{"id":177565},"_811-csv文件","8.11 CSV文件",[14,177568,177569],{},"CSV 是逗号分隔值，常用于表格数据。",[14,177571,177572],{},"写入 CSV：",[93,177574,177576],{"className":38243,"code":177575,"language":38245,"meta":98,"style":98},"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",[83,177577,177578,177585,177589,177597,177615,177631,177647,177651,177655,177695,177709],{"__ignoreMap":98},[102,177579,177580,177582],{"class":104,"line":105},[102,177581,38257],{"class":108},[102,177583,177584],{"class":119}," csv\n",[102,177586,177587],{"class":104,"line":116},[102,177588,652],{"emptyLinePlaceholder":651},[102,177590,177591,177593,177595],{"class":104,"line":123},[102,177592,167581],{"class":119},[102,177594,260],{"class":108},[102,177596,63312],{"class":119},[102,177598,177599,177602,177604,177606,177608,177610,177613],{"class":104,"line":130},[102,177600,177601],{"class":119},"    [",[102,177603,80964],{"class":278},[102,177605,2571],{"class":119},[102,177607,80997],{"class":278},[102,177609,2571],{"class":119},[102,177611,177612],{"class":278},"\"成绩\"",[102,177614,95701],{"class":119},[102,177616,177617,177619,177621,177623,177625,177627,177629],{"class":104,"line":136},[102,177618,177601],{"class":119},[102,177620,157753],{"class":278},[102,177622,2571],{"class":119},[102,177624,6080],{"class":187},[102,177626,2571],{"class":119},[102,177628,10009],{"class":187},[102,177630,95701],{"class":119},[102,177632,177633,177635,177637,177639,177641,177643,177645],{"class":104,"line":142},[102,177634,177601],{"class":119},[102,177636,158801],{"class":278},[102,177638,2571],{"class":119},[102,177640,9652],{"class":187},[102,177642,2571],{"class":119},[102,177644,9834],{"class":187},[102,177646,95701],{"class":119},[102,177648,177649],{"class":104,"line":148},[102,177650,41111],{"class":119},[102,177652,177653],{"class":104,"line":157},[102,177654,652],{"emptyLinePlaceholder":651},[102,177656,177657,177659,177661,177663,177666,177668,177670,177672,177674,177676,177678,177680,177683,177685,177687,177689,177691,177693],{"class":104,"line":163},[102,177658,115698],{"class":108},[102,177660,154656],{"class":187},[102,177662,380],{"class":119},[102,177664,177665],{"class":278},"\"students.csv\"",[102,177667,2571],{"class":119},[102,177669,159841],{"class":278},[102,177671,2571],{"class":119},[102,177673,154671],{"class":386},[102,177675,260],{"class":108},[102,177677,154676],{"class":278},[102,177679,2571],{"class":119},[102,177681,177682],{"class":386},"newline",[102,177684,260],{"class":108},[102,177686,16439],{"class":278},[102,177688,22445],{"class":119},[102,177690,39248],{"class":108},[102,177692,156018],{"class":386},[102,177694,12552],{"class":119},[102,177696,177697,177700,177702,177705,177707],{"class":104,"line":175},[102,177698,177699],{"class":119},"    writer ",[102,177701,260],{"class":108},[102,177703,177704],{"class":119}," csv.writer(",[102,177706,53219],{"class":386},[102,177708,390],{"class":119},[102,177710,177711],{"class":104,"line":181},[102,177712,177713],{"class":119},"    writer.writerows(students)\n",[14,177715,177716],{},"读取 CSV：",[93,177718,177720],{"className":38243,"code":177719,"language":38245,"meta":98,"style":98},"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",[83,177721,177722,177728,177732,177762,177776,177788],{"__ignoreMap":98},[102,177723,177724,177726],{"class":104,"line":105},[102,177725,38257],{"class":108},[102,177727,177584],{"class":119},[102,177729,177730],{"class":104,"line":116},[102,177731,652],{"emptyLinePlaceholder":651},[102,177733,177734,177736,177738,177740,177742,177744,177746,177748,177750,177752,177754,177756,177758,177760],{"class":104,"line":123},[102,177735,115698],{"class":108},[102,177737,154656],{"class":187},[102,177739,380],{"class":119},[102,177741,177665],{"class":278},[102,177743,2571],{"class":119},[102,177745,154666],{"class":278},[102,177747,2571],{"class":119},[102,177749,154671],{"class":386},[102,177751,260],{"class":108},[102,177753,154676],{"class":278},[102,177755,22445],{"class":119},[102,177757,39248],{"class":108},[102,177759,156018],{"class":386},[102,177761,12552],{"class":119},[102,177763,177764,177767,177769,177772,177774],{"class":104,"line":130},[102,177765,177766],{"class":119},"    reader ",[102,177768,260],{"class":108},[102,177770,177771],{"class":119}," csv.reader(",[102,177773,53219],{"class":386},[102,177775,390],{"class":119},[102,177777,177778,177780,177783,177785],{"class":104,"line":136},[102,177779,12016],{"class":108},[102,177781,177782],{"class":119}," row ",[102,177784,33908],{"class":108},[102,177786,177787],{"class":119}," reader:\n",[102,177789,177790,177792],{"class":104,"line":142},[102,177791,40316],{"class":187},[102,177793,177794],{"class":119},"(row)\n",[14,177796,177797],{},"使用字典写入：",[93,177799,177801],{"className":38243,"code":177800,"language":38245,"meta":98,"style":98},"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",[83,177802,177803,177809,177813,177821,177849,177877,177881,177885,177923,177944,177965,177970],{"__ignoreMap":98},[102,177804,177805,177807],{"class":104,"line":105},[102,177806,38257],{"class":108},[102,177808,177584],{"class":119},[102,177810,177811],{"class":104,"line":116},[102,177812,652],{"emptyLinePlaceholder":651},[102,177814,177815,177817,177819],{"class":104,"line":123},[102,177816,167581],{"class":119},[102,177818,260],{"class":108},[102,177820,63312],{"class":119},[102,177822,177823,177825,177827,177829,177831,177833,177835,177837,177839,177841,177843,177845,177847],{"class":104,"line":130},[102,177824,156250],{"class":119},[102,177826,70544],{"class":278},[102,177828,59302],{"class":119},[102,177830,157753],{"class":278},[102,177832,2571],{"class":119},[102,177834,76989],{"class":278},[102,177836,59302],{"class":119},[102,177838,6080],{"class":187},[102,177840,2571],{"class":119},[102,177842,159337],{"class":278},[102,177844,59302],{"class":119},[102,177846,10009],{"class":187},[102,177848,13739],{"class":119},[102,177850,177851,177853,177855,177857,177859,177861,177863,177865,177867,177869,177871,177873,177875],{"class":104,"line":136},[102,177852,156250],{"class":119},[102,177854,70544],{"class":278},[102,177856,59302],{"class":119},[102,177858,158801],{"class":278},[102,177860,2571],{"class":119},[102,177862,76989],{"class":278},[102,177864,59302],{"class":119},[102,177866,9652],{"class":187},[102,177868,2571],{"class":119},[102,177870,159337],{"class":278},[102,177872,59302],{"class":119},[102,177874,9834],{"class":187},[102,177876,13739],{"class":119},[102,177878,177879],{"class":104,"line":142},[102,177880,41111],{"class":119},[102,177882,177883],{"class":104,"line":148},[102,177884,652],{"emptyLinePlaceholder":651},[102,177886,177887,177889,177891,177893,177895,177897,177899,177901,177903,177905,177907,177909,177911,177913,177915,177917,177919,177921],{"class":104,"line":157},[102,177888,115698],{"class":108},[102,177890,154656],{"class":187},[102,177892,380],{"class":119},[102,177894,177665],{"class":278},[102,177896,2571],{"class":119},[102,177898,159841],{"class":278},[102,177900,2571],{"class":119},[102,177902,154671],{"class":386},[102,177904,260],{"class":108},[102,177906,154676],{"class":278},[102,177908,2571],{"class":119},[102,177910,177682],{"class":386},[102,177912,260],{"class":108},[102,177914,16439],{"class":278},[102,177916,22445],{"class":119},[102,177918,39248],{"class":108},[102,177920,156018],{"class":386},[102,177922,12552],{"class":119},[102,177924,177925,177928,177930,177932,177934,177936,177938,177940,177942],{"class":104,"line":163},[102,177926,177927],{"class":119},"    fieldnames ",[102,177929,260],{"class":108},[102,177931,60091],{"class":119},[102,177933,70544],{"class":278},[102,177935,2571],{"class":119},[102,177937,76989],{"class":278},[102,177939,2571],{"class":119},[102,177941,159337],{"class":278},[102,177943,41111],{"class":119},[102,177945,177946,177948,177950,177953,177955,177957,177960,177962],{"class":104,"line":175},[102,177947,177699],{"class":119},[102,177949,260],{"class":108},[102,177951,177952],{"class":119}," csv.DictWriter(",[102,177954,53219],{"class":386},[102,177956,2571],{"class":119},[102,177958,177959],{"class":386},"fieldnames",[102,177961,260],{"class":108},[102,177963,177964],{"class":119},"fieldnames)\n",[102,177966,177967],{"class":104,"line":181},[102,177968,177969],{"class":119},"    writer.writeheader()\n",[102,177971,177972],{"class":104,"line":202},[102,177973,177713],{"class":119},[43,177975,177977],{"id":177976},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,177979,131157],{},[87,177981,177982,177985,177988],{},[62,177983,177984],{},"读取文本文件。",[62,177986,177987],{},"统计每个单词出现次数。",[62,177989,177990],{},"输出出现次数最多的前 10 个单词。",[14,177992,18778],{},[93,177994,177996],{"className":38243,"code":177995,"language":38245,"meta":98,"style":98},"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",[83,177997,177998,178008,178012,178025,178041,178045,178055,178064,178068,178080,178100,178109,178113,178131,178135,178165,178169,178185],{"__ignoreMap":98},[102,177999,178000,178002,178004,178006],{"class":104,"line":105},[102,178001,38602],{"class":108},[102,178003,116176],{"class":119},[102,178005,38257],{"class":108},[102,178007,116181],{"class":119},[102,178009,178010],{"class":104,"line":116},[102,178011,652],{"emptyLinePlaceholder":651},[102,178013,178014,178016,178018,178020,178023],{"class":104,"line":123},[102,178015,176176],{"class":119},[102,178017,260],{"class":108},[102,178019,116410],{"class":119},[102,178021,178022],{"class":278},"\"article.txt\"",[102,178024,390],{"class":119},[102,178026,178027,178029,178031,178033,178035,178037,178039],{"class":104,"line":130},[102,178028,176359],{"class":119},[102,178030,260],{"class":108},[102,178032,177236],{"class":119},[102,178034,154671],{"class":386},[102,178036,260],{"class":108},[102,178038,154676],{"class":278},[102,178040,390],{"class":119},[102,178042,178043],{"class":104,"line":136},[102,178044,652],{"emptyLinePlaceholder":651},[102,178046,178047,178050,178052],{"class":104,"line":142},[102,178048,178049],{"class":119},"words ",[102,178051,260],{"class":108},[102,178053,178054],{"class":119}," content.lower().split()\n",[102,178056,178057,178060,178062],{"class":104,"line":148},[102,178058,178059],{"class":119},"counter ",[102,178061,260],{"class":108},[102,178063,95733],{"class":119},[102,178065,178066],{"class":104,"line":157},[102,178067,652],{"emptyLinePlaceholder":651},[102,178069,178070,178072,178075,178077],{"class":104,"line":163},[102,178071,11841],{"class":108},[102,178073,178074],{"class":119}," word ",[102,178076,33908],{"class":108},[102,178078,178079],{"class":119}," words:\n",[102,178081,178082,178085,178087,178090,178093,178095,178098],{"class":104,"line":175},[102,178083,178084],{"class":119},"    word ",[102,178086,260],{"class":108},[102,178088,178089],{"class":119}," word.strip(",[102,178091,178092],{"class":278},"\".,!?;:",[102,178094,164360],{"class":187},[102,178096,178097],{"class":278},"'()[]\"",[102,178099,390],{"class":119},[102,178101,178102,178104,178106],{"class":104,"line":181},[102,178103,2343],{"class":108},[102,178105,46795],{"class":108},[102,178107,178108],{"class":119}," word:\n",[102,178110,178111],{"class":104,"line":202},[102,178112,156377],{"class":108},[102,178114,178115,178118,178120,178123,178125,178127,178129],{"class":104,"line":208},[102,178116,178117],{"class":119},"    counter[word] ",[102,178119,260],{"class":108},[102,178121,178122],{"class":119}," counter.get(word, ",[102,178124,8423],{"class":187},[102,178126,22445],{"class":119},[102,178128,1702],{"class":108},[102,178130,63564],{"class":187},[102,178132,178133],{"class":104,"line":214},[102,178134,652],{"emptyLinePlaceholder":651},[102,178136,178137,178140,178142,178144,178147,178149,178151,178153,178155,178157,178159,178161,178163],{"class":104,"line":225},[102,178138,178139],{"class":119},"items ",[102,178141,260],{"class":108},[102,178143,171469],{"class":187},[102,178145,178146],{"class":119},"(counter.items(), ",[102,178148,161811],{"class":386},[102,178150,161814],{"class":108},[102,178152,161817],{"class":119},[102,178154,7039],{"class":187},[102,178156,120067],{"class":119},[102,178158,171393],{"class":386},[102,178160,260],{"class":108},[102,178162,39341],{"class":187},[102,178164,390],{"class":119},[102,178166,178167],{"class":104,"line":230},[102,178168,652],{"emptyLinePlaceholder":651},[102,178170,178171,178173,178176,178178,178181,178183],{"class":104,"line":236},[102,178172,11841],{"class":108},[102,178174,178175],{"class":119}," word, count ",[102,178177,33908],{"class":108},[102,178179,178180],{"class":119}," items[:",[102,178182,263],{"class":187},[102,178184,173620],{"class":119},[102,178186,178187,178189],{"class":104,"line":242},[102,178188,39164],{"class":187},[102,178190,178191],{"class":119},"(word, count)\n",[43,178193,178195],{"id":178194},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[93,178197,178199],{"className":38243,"code":178198,"language":38245,"meta":98,"style":98},"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",[83,178200,178201,178207,178217,178221,178233,178237,178241,178249,178259,178265,178269,178299,178309,178313,178317,178325,178355,178379,178383,178387,178395,178424,178429],{"__ignoreMap":98},[102,178202,178203,178205],{"class":104,"line":105},[102,178204,38257],{"class":108},[102,178206,154956],{"class":119},[102,178208,178209,178211,178213,178215],{"class":104,"line":116},[102,178210,38602],{"class":108},[102,178212,116176],{"class":119},[102,178214,38257],{"class":108},[102,178216,116181],{"class":119},[102,178218,178219],{"class":104,"line":123},[102,178220,652],{"emptyLinePlaceholder":651},[102,178222,178223,178225,178227,178229,178231],{"class":104,"line":130},[102,178224,159689],{"class":187},[102,178226,22296],{"class":108},[102,178228,116410],{"class":119},[102,178230,159696],{"class":278},[102,178232,390],{"class":119},[102,178234,178235],{"class":104,"line":136},[102,178236,652],{"emptyLinePlaceholder":651},[102,178238,178239],{"class":104,"line":142},[102,178240,652],{"emptyLinePlaceholder":651},[102,178242,178243,178245,178247],{"class":104,"line":148},[102,178244,39812],{"class":108},[102,178246,159713],{"class":112},[102,178248,39818],{"class":119},[102,178250,178251,178253,178255,178257],{"class":104,"line":157},[102,178252,2343],{"class":108},[102,178254,46795],{"class":108},[102,178256,159724],{"class":187},[102,178258,159727],{"class":119},[102,178260,178261,178263],{"class":104,"line":163},[102,178262,184],{"class":108},[102,178264,59703],{"class":119},[102,178266,178267],{"class":104,"line":175},[102,178268,652],{"emptyLinePlaceholder":651},[102,178270,178271,178273,178275,178277,178279,178281,178283,178285,178287,178289,178291,178293,178295,178297],{"class":104,"line":181},[102,178272,42043],{"class":108},[102,178274,154656],{"class":187},[102,178276,380],{"class":119},[102,178278,159689],{"class":187},[102,178280,2571],{"class":119},[102,178282,154666],{"class":278},[102,178284,2571],{"class":119},[102,178286,154671],{"class":386},[102,178288,260],{"class":108},[102,178290,154676],{"class":278},[102,178292,22445],{"class":119},[102,178294,39248],{"class":108},[102,178296,156018],{"class":386},[102,178298,12552],{"class":119},[102,178300,178301,178303,178305,178307],{"class":104,"line":202},[102,178302,184],{"class":108},[102,178304,156029],{"class":119},[102,178306,53219],{"class":386},[102,178308,390],{"class":119},[102,178310,178311],{"class":104,"line":208},[102,178312,652],{"emptyLinePlaceholder":651},[102,178314,178315],{"class":104,"line":214},[102,178316,652],{"emptyLinePlaceholder":651},[102,178318,178319,178321,178323],{"class":104,"line":225},[102,178320,39812],{"class":108},[102,178322,159823],{"class":112},[102,178324,159826],{"class":119},[102,178326,178327,178329,178331,178333,178335,178337,178339,178341,178343,178345,178347,178349,178351,178353],{"class":104,"line":230},[102,178328,42043],{"class":108},[102,178330,154656],{"class":187},[102,178332,380],{"class":119},[102,178334,159689],{"class":187},[102,178336,2571],{"class":119},[102,178338,159841],{"class":278},[102,178340,2571],{"class":119},[102,178342,154671],{"class":386},[102,178344,260],{"class":108},[102,178346,154676],{"class":278},[102,178348,22445],{"class":119},[102,178350,39248],{"class":108},[102,178352,156018],{"class":386},[102,178354,12552],{"class":119},[102,178356,178357,178359,178361,178363,178365,178367,178369,178371,178373,178375,178377],{"class":104,"line":236},[102,178358,159862],{"class":119},[102,178360,53219],{"class":386},[102,178362,2571],{"class":119},[102,178364,155002],{"class":386},[102,178366,260],{"class":108},[102,178368,41852],{"class":187},[102,178370,2571],{"class":119},[102,178372,159877],{"class":386},[102,178374,260],{"class":108},[102,178376,7044],{"class":187},[102,178378,390],{"class":119},[102,178380,178381],{"class":104,"line":242},[102,178382,652],{"emptyLinePlaceholder":651},[102,178384,178385],{"class":104,"line":248},[102,178386,652],{"emptyLinePlaceholder":651},[102,178388,178389,178391,178393],{"class":104,"line":254},[102,178390,167581],{"class":119},[102,178392,260],{"class":108},[102,178394,160907],{"class":119},[102,178396,178397,178400,178402,178404,178406,178408,178410,178412,178414,178416,178418,178420,178422],{"class":104,"line":269},[102,178398,178399],{"class":119},"students.append({",[102,178401,70544],{"class":278},[102,178403,59302],{"class":119},[102,178405,157753],{"class":278},[102,178407,2571],{"class":119},[102,178409,76989],{"class":278},[102,178411,59302],{"class":119},[102,178413,6080],{"class":187},[102,178415,2571],{"class":119},[102,178417,159337],{"class":278},[102,178419,59302],{"class":119},[102,178421,10009],{"class":187},[102,178423,173017],{"class":119},[102,178425,178426],{"class":104,"line":298},[102,178427,178428],{"class":119},"save_students(students)\n",[102,178430,178431,178433,178435,178438],{"class":104,"line":502},[102,178432,38280],{"class":187},[102,178434,380],{"class":119},[102,178436,178437],{"class":278},"\"保存成功\"",[102,178439,390],{"class":119},[43,178441,178443],{"id":178442},"_814-易错点","8.14 易错点",[87,178445,178446,178450,178456,178461,178468,178475],{},[62,178447,178448,176709],{},[83,178449,2142],{},[62,178451,178452,178453,36250],{},"读写中文要指定 ",[83,178454,178455],{},"encoding=\"utf-8\"",[62,178457,178458,178459,36250],{},"打开文件后要关闭，推荐使用 ",[83,178460,115698],{},[62,178462,178463,178464,178467],{},"读取大文件不要直接 ",[83,178465,178466],{},"read()"," 全部内容。",[62,178469,178470,178471,178474],{},"Windows 写 CSV 时建议加 ",[83,178472,178473],{},"newline=\"\"","，避免空行。",[62,178476,178477],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[43,178479,178481],{"id":178480},"_815-本章练习","8.15 本章练习",[87,178483,178484,178491,178496,178499,178502],{},[62,178485,178486,178487,178490],{},"写入一个 ",[83,178488,178489],{},"students.txt","，每行保存一个学生姓名。",[62,178492,112220,178493,178495],{},[83,178494,178489],{}," 并输出所有学生。",[62,178497,178498],{},"把学生列表保存为 JSON 文件。",[62,178500,178501],{},"从 JSON 文件读取学生数据，计算平均分。",[62,178503,178504,178505,178508,178509,178512],{},"写一个日志函数 ",[83,178506,178507],{},"write_log(message)","，每次调用向 ",[83,178510,178511],{},"app.log"," 追加一行。",[8955,178514,178515],{},"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":98,"searchDepth":116,"depth":116,"links":178517},[178518,178519,178523,178524,178530,178531,178532,178533,178534,178535,178536,178537,178538,178539,178540],{"id":176029,"depth":116,"text":176030},{"id":176070,"depth":116,"text":176071,"children":178520},[178521,178522],{"id":176074,"depth":123,"text":176075},{"id":176108,"depth":123,"text":176109},{"id":176222,"depth":116,"text":176223},{"id":176315,"depth":116,"text":176316,"children":178525},[178526,178527,178528,178529],{"id":176319,"depth":123,"text":176320},{"id":176406,"depth":123,"text":176407},{"id":176476,"depth":123,"text":176477},{"id":176570,"depth":123,"text":176571},{"id":176640,"depth":116,"text":176641},{"id":176703,"depth":116,"text":176704},{"id":176864,"depth":116,"text":176865},{"id":176927,"depth":116,"text":176928},{"id":177043,"depth":116,"text":177044},{"id":177253,"depth":116,"text":177254},{"id":177565,"depth":116,"text":177566},{"id":177976,"depth":116,"text":177977},{"id":178194,"depth":116,"text":178195},{"id":178442,"depth":116,"text":178443},{"id":178480,"depth":116,"text":178481},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":176021,"description":31240},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":178547,"title":178548,"body":178549,"description":31240,"extension":8978,"meta":180735,"navigation":651,"path":180736,"seo":180737,"stem":180738,"__hash__":180739},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":178550,"toc":180702},[178551,178554,178558,178561,178564,178656,178658,178677,178682,178686,178689,178692,178721,178728,178731,178735,178738,178767,178769,178821,178827,178880,178884,178982,178985,179052,179056,179113,179115,179121,179125,179130,179136,179227,179232,179236,179239,179317,179320,179358,179362,179480,179483,179487,179490,179535,179538,179542,179547,179553,179603,179606,179637,179641,179645,179675,179679,179714,179718,179753,179793,179797,179813,179816,179820,179824,179903,179907,179948,179952,180007,180011,180045,180049,180079,180088,180095,180101,180158,180161,180169,180172,180176,180183,180186,180192,180195,180212,180217,180221,180227,180240,180243,180280,180283,180294,180297,180311,180314,180328,180332,180339,180372,180375,180377,180383,180386,180390,180392,180398,180403,180576,180580,180643,180647,180671,180675,180699],[10,178552,178548],{"id":178553},"_9-异常模块与包",[43,178555,178557],{"id":178556},"_91-什么是异常","9.1 什么是异常",[14,178559,178560],{},"异常是程序运行过程中出现的错误。",[14,178562,178563],{},"常见异常：",[9177,178565,178566,178575],{},[9180,178567,178568],{},[9183,178569,178570,178573],{},[9186,178571,178572],{},"异常",[9186,178574,33734],{},[9223,178576,178577,178587,178597,178606,178616,178626,178636,178646],{},[9183,178578,178579,178584],{},[9228,178580,178581],{},[83,178582,178583],{},"NameError",[9228,178585,178586],{},"使用了未定义变量",[9183,178588,178589,178594],{},[9228,178590,178591],{},[83,178592,178593],{},"TypeError",[9228,178595,178596],{},"类型不匹配",[9183,178598,178599,178603],{},[9228,178600,178601],{},[83,178602,162699],{},[9228,178604,178605],{},"值不合法",[9183,178607,178608,178613],{},[9228,178609,178610],{},[83,178611,178612],{},"IndexError",[9228,178614,178615],{},"列表索引越界",[9183,178617,178618,178623],{},[9228,178619,178620],{},[83,178621,178622],{},"KeyError",[9228,178624,178625],{},"字典 key 不存在",[9183,178627,178628,178633],{},[9228,178629,178630],{},[83,178631,178632],{},"FileNotFoundError",[9228,178634,178635],{},"文件不存在",[9183,178637,178638,178643],{},[9228,178639,178640],{},[83,178641,178642],{},"ZeroDivisionError",[9228,178644,178645],{},"除数为 0",[9183,178647,178648,178653],{},[9228,178649,178650],{},[83,178651,178652],{},"ImportError",[9228,178654,178655],{},"导入失败",[14,178657,619],{},[93,178659,178661],{"className":38243,"code":178660,"language":38245,"meta":98,"style":98},"num = int(\"abc\")\n",[83,178662,178663],{"__ignoreMap":98},[102,178664,178665,178667,178669,178671,178673,178675],{"class":104,"line":105},[102,178666,163652],{"class":119},[102,178668,260],{"class":108},[102,178670,6392],{"class":187},[102,178672,380],{"class":119},[102,178674,163745],{"class":278},[102,178676,390],{"class":119},[14,178678,178679,178680,36250],{},"会触发 ",[83,178681,162699],{},[43,178683,178685],{"id":178684},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,178687,178688],{},"如果不处理异常，程序会直接终止。",[14,178690,178691],{},"例如用户输入年龄：",[93,178693,178695],{"className":38243,"code":178694,"language":38245,"meta":98,"style":98},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[83,178696,178697,178715],{"__ignoreMap":98},[102,178698,178699,178701,178703,178705,178707,178709,178711,178713],{"class":104,"line":105},[102,178700,154411],{"class":119},[102,178702,260],{"class":108},[102,178704,6392],{"class":187},[102,178706,380],{"class":119},[102,178708,61686],{"class":187},[102,178710,380],{"class":119},[102,178712,160259],{"class":278},[102,178714,38362],{"class":119},[102,178716,178717,178719],{"class":104,"line":116},[102,178718,38280],{"class":187},[102,178720,163626],{"class":119},[14,178722,178723,178724,178727],{},"用户输入 ",[83,178725,178726],{},"abc","，程序就会报错退出。",[14,178729,178730],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[43,178732,178734],{"id":178733},"_93-try-except","9.3 try except",[14,178736,178737],{},"基础语法：",[93,178739,178741],{"className":38243,"code":178740,"language":38245,"meta":98,"style":98},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[83,178742,178743,178750,178755,178762],{"__ignoreMap":98},[102,178744,178745,178748],{"class":104,"line":105},[102,178746,178747],{"class":108},"try",[102,178749,12552],{"class":119},[102,178751,178752],{"class":104,"line":116},[102,178753,178754],{"class":119},"    可能出错的代码\n",[102,178756,178757,178760],{"class":104,"line":123},[102,178758,178759],{"class":108},"except",[102,178761,12552],{"class":119},[102,178763,178764],{"class":104,"line":130},[102,178765,178766],{"class":119},"    出错后的处理代码\n",[14,178768,619],{},[93,178770,178772],{"className":38243,"code":178771,"language":38245,"meta":98,"style":98},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[83,178773,178774,178780,178798,178804,178810],{"__ignoreMap":98},[102,178775,178776,178778],{"class":104,"line":105},[102,178777,178747],{"class":108},[102,178779,12552],{"class":119},[102,178781,178782,178784,178786,178788,178790,178792,178794,178796],{"class":104,"line":116},[102,178783,160251],{"class":119},[102,178785,260],{"class":108},[102,178787,6392],{"class":187},[102,178789,380],{"class":119},[102,178791,61686],{"class":187},[102,178793,380],{"class":119},[102,178795,160259],{"class":278},[102,178797,38362],{"class":119},[102,178799,178800,178802],{"class":104,"line":123},[102,178801,39164],{"class":187},[102,178803,163626],{"class":119},[102,178805,178806,178808],{"class":104,"line":130},[102,178807,178759],{"class":108},[102,178809,12552],{"class":119},[102,178811,178812,178814,178816,178819],{"class":104,"line":136},[102,178813,39164],{"class":187},[102,178815,380],{"class":119},[102,178817,178818],{"class":278},"\"年龄必须是数字\"",[102,178820,390],{"class":119},[14,178822,178823,178824,178826],{},"不建议裸写 ",[83,178825,178759],{},"，最好指定异常类型。",[93,178828,178830],{"className":38243,"code":178829,"language":38245,"meta":98,"style":98},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[83,178831,178832,178838,178856,178862,178870],{"__ignoreMap":98},[102,178833,178834,178836],{"class":104,"line":105},[102,178835,178747],{"class":108},[102,178837,12552],{"class":119},[102,178839,178840,178842,178844,178846,178848,178850,178852,178854],{"class":104,"line":116},[102,178841,160251],{"class":119},[102,178843,260],{"class":108},[102,178845,6392],{"class":187},[102,178847,380],{"class":119},[102,178849,61686],{"class":187},[102,178851,380],{"class":119},[102,178853,160259],{"class":278},[102,178855,38362],{"class":119},[102,178857,178858,178860],{"class":104,"line":123},[102,178859,39164],{"class":187},[102,178861,163626],{"class":119},[102,178863,178864,178866,178868],{"class":104,"line":130},[102,178865,178759],{"class":108},[102,178867,160091],{"class":187},[102,178869,12552],{"class":119},[102,178871,178872,178874,178876,178878],{"class":104,"line":136},[102,178873,39164],{"class":187},[102,178875,380],{"class":119},[102,178877,178818],{"class":278},[102,178879,390],{"class":119},[43,178881,178883],{"id":178882},"_94-捕获多个异常","9.4 捕获多个异常",[93,178885,178887],{"className":38243,"code":178886,"language":38245,"meta":98,"style":98},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[83,178888,178889,178895,178916,178936,178943,178951,178962,178971],{"__ignoreMap":98},[102,178890,178891,178893],{"class":104,"line":105},[102,178892,178747],{"class":108},[102,178894,12552],{"class":119},[102,178896,178897,178900,178902,178904,178906,178908,178910,178912,178914],{"class":104,"line":116},[102,178898,178899],{"class":119},"    nums ",[102,178901,260],{"class":108},[102,178903,60091],{"class":119},[102,178905,7039],{"class":187},[102,178907,2571],{"class":119},[102,178909,7044],{"class":187},[102,178911,2571],{"class":119},[102,178913,7049],{"class":187},[102,178915,41111],{"class":119},[102,178917,178918,178921,178923,178925,178927,178929,178931,178934],{"class":104,"line":123},[102,178919,178920],{"class":119},"    index ",[102,178922,260],{"class":108},[102,178924,6392],{"class":187},[102,178926,380],{"class":119},[102,178928,61686],{"class":187},[102,178930,380],{"class":119},[102,178932,178933],{"class":278},"\"请输入索引:\"",[102,178935,38362],{"class":119},[102,178937,178938,178940],{"class":104,"line":130},[102,178939,39164],{"class":187},[102,178941,178942],{"class":119},"(nums[index])\n",[102,178944,178945,178947,178949],{"class":104,"line":136},[102,178946,178759],{"class":108},[102,178948,160091],{"class":187},[102,178950,12552],{"class":119},[102,178952,178953,178955,178957,178960],{"class":104,"line":142},[102,178954,39164],{"class":187},[102,178956,380],{"class":119},[102,178958,178959],{"class":278},"\"索引必须是整数\"",[102,178961,390],{"class":119},[102,178963,178964,178966,178969],{"class":104,"line":148},[102,178965,178759],{"class":108},[102,178967,178968],{"class":187}," IndexError",[102,178970,12552],{"class":119},[102,178972,178973,178975,178977,178980],{"class":104,"line":157},[102,178974,39164],{"class":187},[102,178976,380],{"class":119},[102,178978,178979],{"class":278},"\"索引越界\"",[102,178981,390],{"class":119},[14,178983,178984],{},"多个异常使用相同处理逻辑：",[93,178986,178988],{"className":38243,"code":178987,"language":38245,"meta":98,"style":98},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[83,178989,178990,178996,179014,179027,179041],{"__ignoreMap":98},[102,178991,178992,178994],{"class":104,"line":105},[102,178993,178747],{"class":108},[102,178995,12552],{"class":119},[102,178997,178998,179000,179002,179004,179006,179008,179010,179012],{"class":104,"line":116},[102,178999,53458],{"class":119},[102,179001,260],{"class":108},[102,179003,6392],{"class":187},[102,179005,380],{"class":119},[102,179007,61686],{"class":187},[102,179009,380],{"class":119},[102,179011,163661],{"class":278},[102,179013,38362],{"class":119},[102,179015,179016,179018,179020,179022,179024],{"class":104,"line":123},[102,179017,39164],{"class":187},[102,179019,380],{"class":119},[102,179021,263],{"class":187},[102,179023,163911],{"class":108},[102,179025,179026],{"class":119}," num)\n",[102,179028,179029,179031,179033,179035,179037,179039],{"class":104,"line":130},[102,179030,178759],{"class":108},[102,179032,2432],{"class":119},[102,179034,162699],{"class":187},[102,179036,2571],{"class":119},[102,179038,178642],{"class":187},[102,179040,38651],{"class":119},[102,179042,179043,179045,179047,179050],{"class":104,"line":136},[102,179044,39164],{"class":187},[102,179046,380],{"class":119},[102,179048,179049],{"class":278},"\"输入不合法\"",[102,179051,390],{"class":119},[43,179053,179055],{"id":179054},"_95-获取异常信息","9.5 获取异常信息",[93,179057,179059],{"className":38243,"code":179058,"language":38245,"meta":98,"style":98},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[83,179060,179061,179067,179081,179092],{"__ignoreMap":98},[102,179062,179063,179065],{"class":104,"line":105},[102,179064,178747],{"class":108},[102,179066,12552],{"class":119},[102,179068,179069,179071,179073,179075,179077,179079],{"class":104,"line":116},[102,179070,53458],{"class":119},[102,179072,260],{"class":108},[102,179074,6392],{"class":187},[102,179076,380],{"class":119},[102,179078,163745],{"class":278},[102,179080,390],{"class":119},[102,179082,179083,179085,179087,179089],{"class":104,"line":123},[102,179084,178759],{"class":108},[102,179086,160091],{"class":187},[102,179088,72469],{"class":108},[102,179090,179091],{"class":119}," e:\n",[102,179093,179094,179096,179098,179100,179103,179105,179107,179109,179111],{"class":104,"line":130},[102,179095,39164],{"class":187},[102,179097,380],{"class":119},[102,179099,9097],{"class":108},[102,179101,179102],{"class":278},"\"出错了:",[102,179104,9918],{"class":187},[102,179106,9116],{"class":119},[102,179108,9967],{"class":187},[102,179110,9288],{"class":278},[102,179112,390],{"class":119},[14,179114,154322],{},[93,179116,179119],{"className":179117,"code":179118,"language":6778,"meta":98},[6776],"出错了:invalid literal for int() with base 10: 'abc'\n",[83,179120,179118],{"__ignoreMap":98},[43,179122,179124],{"id":179123},"_96-else和finally","9.6 else和finally",[14,179126,179127,179129],{},[83,179128,10562],{},"：没有异常时执行。",[14,179131,179132,179135],{},[83,179133,179134],{},"finally","：无论是否异常都会执行。",[93,179137,179139],{"className":38243,"code":179138,"language":38245,"meta":98,"style":98},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[83,179140,179141,179147,179165,179173,179183,179189,179210,179216],{"__ignoreMap":98},[102,179142,179143,179145],{"class":104,"line":105},[102,179144,178747],{"class":108},[102,179146,12552],{"class":119},[102,179148,179149,179151,179153,179155,179157,179159,179161,179163],{"class":104,"line":116},[102,179150,53458],{"class":119},[102,179152,260],{"class":108},[102,179154,6392],{"class":187},[102,179156,380],{"class":119},[102,179158,61686],{"class":187},[102,179160,380],{"class":119},[102,179162,163661],{"class":278},[102,179164,38362],{"class":119},[102,179166,179167,179169,179171],{"class":104,"line":123},[102,179168,178759],{"class":108},[102,179170,160091],{"class":187},[102,179172,12552],{"class":119},[102,179174,179175,179177,179179,179181],{"class":104,"line":130},[102,179176,39164],{"class":187},[102,179178,380],{"class":119},[102,179180,161079],{"class":278},[102,179182,390],{"class":119},[102,179184,179185,179187],{"class":104,"line":136},[102,179186,10562],{"class":108},[102,179188,12552],{"class":119},[102,179190,179191,179193,179195,179197,179200,179202,179204,179206,179208],{"class":104,"line":142},[102,179192,39164],{"class":187},[102,179194,380],{"class":119},[102,179196,9097],{"class":108},[102,179198,179199],{"class":278},"\"输入正确:",[102,179201,9918],{"class":187},[102,179203,10530],{"class":119},[102,179205,9967],{"class":187},[102,179207,9288],{"class":278},[102,179209,390],{"class":119},[102,179211,179212,179214],{"class":104,"line":148},[102,179213,179134],{"class":108},[102,179215,12552],{"class":119},[102,179217,179218,179220,179222,179225],{"class":104,"line":157},[102,179219,39164],{"class":187},[102,179221,380],{"class":119},[102,179223,179224],{"class":278},"\"程序结束\"",[102,179226,390],{"class":119},[14,179228,179229,179231],{},[83,179230,179134],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[43,179233,179235],{"id":179234},"_97-抛出异常","9.7 抛出异常",[14,179237,179238],{},"程序可以主动抛出异常。",[93,179240,179242],{"className":38243,"code":179241,"language":38245,"meta":98,"style":98},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[83,179243,179244,179253,179265,179278,179298,179302,179306],{"__ignoreMap":98},[102,179245,179246,179248,179251],{"class":104,"line":105},[102,179247,39812],{"class":108},[102,179249,179250],{"class":112}," set_age",[102,179252,169280],{"class":119},[102,179254,179255,179257,179259,179261,179263],{"class":104,"line":116},[102,179256,2343],{"class":108},[102,179258,1216],{"class":119},[102,179260,1208],{"class":108},[102,179262,866],{"class":187},[102,179264,12552],{"class":119},[102,179266,179267,179269,179271,179273,179276],{"class":104,"line":123},[102,179268,111297],{"class":108},[102,179270,160091],{"class":187},[102,179272,380],{"class":119},[102,179274,179275],{"class":278},"\"年龄不能为负数\"",[102,179277,390],{"class":119},[102,179279,179280,179282,179284,179286,179288,179290,179292,179294,179296],{"class":104,"line":130},[102,179281,39164],{"class":187},[102,179283,380],{"class":119},[102,179285,9097],{"class":108},[102,179287,169848],{"class":278},[102,179289,9918],{"class":187},[102,179291,78086],{"class":119},[102,179293,9967],{"class":187},[102,179295,9288],{"class":278},[102,179297,390],{"class":119},[102,179299,179300],{"class":104,"line":136},[102,179301,652],{"emptyLinePlaceholder":651},[102,179303,179304],{"class":104,"line":142},[102,179305,652],{"emptyLinePlaceholder":651},[102,179307,179308,179311,179313,179315],{"class":104,"line":148},[102,179309,179310],{"class":119},"set_age(",[102,179312,2833],{"class":108},[102,179314,7039],{"class":187},[102,179316,390],{"class":119},[14,179318,179319],{},"调用者可以捕获：",[93,179321,179323],{"className":38243,"code":179322,"language":38245,"meta":98,"style":98},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[83,179324,179325,179331,179342,179352],{"__ignoreMap":98},[102,179326,179327,179329],{"class":104,"line":105},[102,179328,178747],{"class":108},[102,179330,12552],{"class":119},[102,179332,179333,179336,179338,179340],{"class":104,"line":116},[102,179334,179335],{"class":119},"    set_age(",[102,179337,2833],{"class":108},[102,179339,7039],{"class":187},[102,179341,390],{"class":119},[102,179343,179344,179346,179348,179350],{"class":104,"line":123},[102,179345,178759],{"class":108},[102,179347,160091],{"class":187},[102,179349,72469],{"class":108},[102,179351,179091],{"class":119},[102,179353,179354,179356],{"class":104,"line":130},[102,179355,39164],{"class":187},[102,179357,74864],{"class":119},[43,179359,179361],{"id":179360},"_98-自定义异常","9.8 自定义异常",[93,179363,179365],{"className":38243,"code":179364,"language":38245,"meta":98,"style":98},"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",[83,179366,179367,179381,179385,179389,179393,179401,179411,179422,179432,179436,179440,179446,179463,179474],{"__ignoreMap":98},[102,179368,179369,179371,179374,179376,179379],{"class":104,"line":105},[102,179370,109],{"class":108},[102,179372,179373],{"class":112}," BalanceNotEnoughError",[102,179375,380],{"class":119},[102,179377,179378],{"class":187},"Exception",[102,179380,38651],{"class":119},[102,179382,179383],{"class":104,"line":116},[102,179384,157402],{"class":108},[102,179386,179387],{"class":104,"line":123},[102,179388,652],{"emptyLinePlaceholder":651},[102,179390,179391],{"class":104,"line":130},[102,179392,652],{"emptyLinePlaceholder":651},[102,179394,179395,179397,179399],{"class":104,"line":136},[102,179396,39812],{"class":108},[102,179398,158051],{"class":112},[102,179400,170677],{"class":119},[102,179402,179403,179405,179407,179409],{"class":104,"line":142},[102,179404,2343],{"class":108},[102,179406,158007],{"class":119},[102,179408,1219],{"class":108},[102,179410,170454],{"class":119},[102,179412,179413,179415,179418,179420],{"class":104,"line":148},[102,179414,111297],{"class":108},[102,179416,179417],{"class":119}," BalanceNotEnoughError(",[102,179419,158102],{"class":278},[102,179421,390],{"class":119},[102,179423,179424,179426,179428,179430],{"class":104,"line":157},[102,179425,863],{"class":108},[102,179427,170684],{"class":119},[102,179429,2833],{"class":108},[102,179431,158040],{"class":119},[102,179433,179434],{"class":104,"line":163},[102,179435,652],{"emptyLinePlaceholder":651},[102,179437,179438],{"class":104,"line":175},[102,179439,652],{"emptyLinePlaceholder":651},[102,179441,179442,179444],{"class":104,"line":181},[102,179443,178747],{"class":108},[102,179445,12552],{"class":119},[102,179447,179448,179450,179452,179455,179457,179459,179461],{"class":104,"line":202},[102,179449,170355],{"class":119},[102,179451,260],{"class":108},[102,179453,179454],{"class":119}," withdraw(",[102,179456,5569],{"class":187},[102,179458,2571],{"class":119},[102,179460,7866],{"class":187},[102,179462,390],{"class":119},[102,179464,179465,179467,179470,179472],{"class":104,"line":208},[102,179466,178759],{"class":108},[102,179468,179469],{"class":119}," BalanceNotEnoughError ",[102,179471,39248],{"class":108},[102,179473,179091],{"class":119},[102,179475,179476,179478],{"class":104,"line":214},[102,179477,39164],{"class":187},[102,179479,74864],{"class":119},[14,179481,179482],{},"入门阶段大多数情况使用内置异常即可。",[43,179484,179486],{"id":179485},"_99-traceback","9.9 traceback",[14,179488,179489],{},"调试时可以输出完整异常堆栈。",[93,179491,179493],{"className":38243,"code":179492,"language":38245,"meta":98,"style":98},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[83,179494,179495,179502,179506,179512,179522,179530],{"__ignoreMap":98},[102,179496,179497,179499],{"class":104,"line":105},[102,179498,38257],{"class":108},[102,179500,179501],{"class":119}," traceback\n",[102,179503,179504],{"class":104,"line":116},[102,179505,652],{"emptyLinePlaceholder":651},[102,179507,179508,179510],{"class":104,"line":123},[102,179509,178747],{"class":108},[102,179511,12552],{"class":119},[102,179513,179514,179516,179518,179520],{"class":104,"line":130},[102,179515,151],{"class":187},[102,179517,380],{"class":119},[102,179519,163745],{"class":278},[102,179521,390],{"class":119},[102,179523,179524,179526,179528],{"class":104,"line":136},[102,179525,178759],{"class":108},[102,179527,160091],{"class":187},[102,179529,12552],{"class":119},[102,179531,179532],{"class":104,"line":142},[102,179533,179534],{"class":119},"    traceback.print_exc()\n",[14,179536,179537],{},"日志系统中常把异常堆栈记录到文件。",[43,179539,179541],{"id":179540},"_910-什么是模块","9.10 什么是模块",[14,179543,179544,179545,133848],{},"模块就是一个 ",[83,179546,154217],{},[14,179548,179549,179550,32483],{},"例如创建 ",[83,179551,179552],{},"my_math.py",[93,179554,179556],{"className":38243,"code":179555,"language":38245,"meta":98,"style":98},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[83,179557,179558,179566,179576,179580,179584,179593],{"__ignoreMap":98},[102,179559,179560,179562,179564],{"class":104,"line":105},[102,179561,39812],{"class":108},[102,179563,14015],{"class":112},[102,179565,158958],{"class":119},[102,179567,179568,179570,179572,179574],{"class":104,"line":116},[102,179569,863],{"class":108},[102,179571,19610],{"class":119},[102,179573,1702],{"class":108},[102,179575,158969],{"class":119},[102,179577,179578],{"class":104,"line":123},[102,179579,652],{"emptyLinePlaceholder":651},[102,179581,179582],{"class":104,"line":130},[102,179583,652],{"emptyLinePlaceholder":651},[102,179585,179586,179588,179591],{"class":104,"line":136},[102,179587,39812],{"class":108},[102,179589,179590],{"class":112}," sub",[102,179592,158958],{"class":119},[102,179594,179595,179597,179599,179601],{"class":104,"line":142},[102,179596,863],{"class":108},[102,179598,19610],{"class":119},[102,179600,2833],{"class":108},[102,179602,158969],{"class":119},[14,179604,179605],{},"在另一个文件中导入：",[93,179607,179609],{"className":38243,"code":179608,"language":38245,"meta":98,"style":98},"import my_math\n\nprint(my_math.add(1, 2))\n",[83,179610,179611,179618,179622],{"__ignoreMap":98},[102,179612,179613,179615],{"class":104,"line":105},[102,179614,38257],{"class":108},[102,179616,179617],{"class":119}," my_math\n",[102,179619,179620],{"class":104,"line":116},[102,179621,652],{"emptyLinePlaceholder":651},[102,179623,179624,179626,179629,179631,179633,179635],{"class":104,"line":123},[102,179625,38280],{"class":187},[102,179627,179628],{"class":119},"(my_math.add(",[102,179630,7039],{"class":187},[102,179632,2571],{"class":119},[102,179634,7044],{"class":187},[102,179636,38362],{"class":119},[43,179638,179640],{"id":179639},"_911-import导入","9.11 import导入",[48,179642,179644],{"id":179643},"_9111-导入模块","9.11.1 导入模块",[93,179646,179648],{"className":38243,"code":179647,"language":38245,"meta":98,"style":98},"import random\n\nprint(random.randint(1, 10))\n",[83,179649,179650,179656,179660],{"__ignoreMap":98},[102,179651,179652,179654],{"class":104,"line":105},[102,179653,38257],{"class":108},[102,179655,53193],{"class":119},[102,179657,179658],{"class":104,"line":116},[102,179659,652],{"emptyLinePlaceholder":651},[102,179661,179662,179664,179667,179669,179671,179673],{"class":104,"line":123},[102,179663,38280],{"class":187},[102,179665,179666],{"class":119},"(random.randint(",[102,179668,7039],{"class":187},[102,179670,2571],{"class":119},[102,179672,263],{"class":187},[102,179674,38362],{"class":119},[48,179676,179678],{"id":179677},"_9112-导入指定内容","9.11.2 导入指定内容",[93,179680,179682],{"className":38243,"code":179681,"language":38245,"meta":98,"style":98},"from random import randint\n\nprint(randint(1, 10))\n",[83,179683,179684,179695,179699],{"__ignoreMap":98},[102,179685,179686,179688,179690,179692],{"class":104,"line":105},[102,179687,38602],{"class":108},[102,179689,65661],{"class":119},[102,179691,38257],{"class":108},[102,179693,179694],{"class":119}," randint\n",[102,179696,179697],{"class":104,"line":116},[102,179698,652],{"emptyLinePlaceholder":651},[102,179700,179701,179703,179706,179708,179710,179712],{"class":104,"line":123},[102,179702,38280],{"class":187},[102,179704,179705],{"class":119},"(randint(",[102,179707,7039],{"class":187},[102,179709,2571],{"class":119},[102,179711,263],{"class":187},[102,179713,38362],{"class":119},[48,179715,179717],{"id":179716},"_9113-起别名","9.11.3 起别名",[93,179719,179721],{"className":38243,"code":179720,"language":38245,"meta":98,"style":98},"import random as rd\n\nprint(rd.randint(1, 10))\n",[83,179722,179723,179734,179738],{"__ignoreMap":98},[102,179724,179725,179727,179729,179731],{"class":104,"line":105},[102,179726,38257],{"class":108},[102,179728,65661],{"class":119},[102,179730,39248],{"class":108},[102,179732,179733],{"class":119}," rd\n",[102,179735,179736],{"class":104,"line":116},[102,179737,652],{"emptyLinePlaceholder":651},[102,179739,179740,179742,179745,179747,179749,179751],{"class":104,"line":123},[102,179741,38280],{"class":187},[102,179743,179744],{"class":119},"(rd.randint(",[102,179746,7039],{"class":187},[102,179748,2571],{"class":119},[102,179750,263],{"class":187},[102,179752,38362],{"class":119},[93,179754,179756],{"className":38243,"code":179755,"language":38245,"meta":98,"style":98},"from random import randint as rint\n\nprint(rint(1, 10))\n",[83,179757,179758,179774,179778],{"__ignoreMap":98},[102,179759,179760,179762,179764,179766,179769,179771],{"class":104,"line":105},[102,179761,38602],{"class":108},[102,179763,65661],{"class":119},[102,179765,38257],{"class":108},[102,179767,179768],{"class":119}," randint ",[102,179770,39248],{"class":108},[102,179772,179773],{"class":119}," rint\n",[102,179775,179776],{"class":104,"line":116},[102,179777,652],{"emptyLinePlaceholder":651},[102,179779,179780,179782,179785,179787,179789,179791],{"class":104,"line":123},[102,179781,38280],{"class":187},[102,179783,179784],{"class":119},"(rint(",[102,179786,7039],{"class":187},[102,179788,2571],{"class":119},[102,179790,263],{"class":187},[102,179792,38362],{"class":119},[48,179794,179796],{"id":179795},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[93,179798,179800],{"className":38243,"code":179799,"language":38245,"meta":98,"style":98},"from random import *\n",[83,179801,179802],{"__ignoreMap":98},[102,179803,179804,179806,179808,179810],{"class":104,"line":105},[102,179805,38602],{"class":108},[102,179807,65661],{"class":119},[102,179809,38257],{"class":108},[102,179811,179812],{"class":108}," *\n",[14,179814,179815],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[43,179817,179819],{"id":179818},"_912-常用内置模块","9.12 常用内置模块",[48,179821,179823],{"id":179822},"_9121-random","9.12.1 random",[93,179825,179827],{"className":38243,"code":179826,"language":38245,"meta":98,"style":98},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[83,179828,179829,179835,179839,179853,179872],{"__ignoreMap":98},[102,179830,179831,179833],{"class":104,"line":105},[102,179832,38257],{"class":108},[102,179834,53193],{"class":119},[102,179836,179837],{"class":104,"line":116},[102,179838,652],{"emptyLinePlaceholder":651},[102,179840,179841,179843,179845,179847,179849,179851],{"class":104,"line":123},[102,179842,38280],{"class":187},[102,179844,179666],{"class":119},[102,179846,7039],{"class":187},[102,179848,2571],{"class":119},[102,179850,263],{"class":187},[102,179852,38362],{"class":119},[102,179854,179855,179857,179860,179862,179864,179866,179868,179870],{"class":104,"line":130},[102,179856,38280],{"class":187},[102,179858,179859],{"class":119},"(random.choice([",[102,179861,157753],{"class":278},[102,179863,2571],{"class":119},[102,179865,158801],{"class":278},[102,179867,2571],{"class":119},[102,179869,167596],{"class":278},[102,179871,41008],{"class":119},[102,179873,179874,179876,179879,179881,179883,179885,179887,179889,179891,179893,179895,179897,179899,179901],{"class":104,"line":136},[102,179875,38280],{"class":187},[102,179877,179878],{"class":119},"(random.sample([",[102,179880,7039],{"class":187},[102,179882,2571],{"class":119},[102,179884,7044],{"class":187},[102,179886,2571],{"class":119},[102,179888,7049],{"class":187},[102,179890,2571],{"class":119},[102,179892,9329],{"class":187},[102,179894,2571],{"class":119},[102,179896,9354],{"class":187},[102,179898,120067],{"class":119},[102,179900,7044],{"class":187},[102,179902,38362],{"class":119},[48,179904,179906],{"id":179905},"_9122-time","9.12.2 time",[93,179908,179910],{"className":38243,"code":179909,"language":38245,"meta":98,"style":98},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[83,179911,179912,179918,179922,179929,179937],{"__ignoreMap":98},[102,179913,179914,179916],{"class":104,"line":105},[102,179915,38257],{"class":108},[102,179917,39694],{"class":119},[102,179919,179920],{"class":104,"line":116},[102,179921,652],{"emptyLinePlaceholder":651},[102,179923,179924,179926],{"class":104,"line":123},[102,179925,38280],{"class":187},[102,179927,179928],{"class":119},"(time.time())\n",[102,179930,179931,179933,179935],{"class":104,"line":130},[102,179932,102936],{"class":119},[102,179934,7039],{"class":187},[102,179936,390],{"class":119},[102,179938,179939,179941,179943,179946],{"class":104,"line":136},[102,179940,38280],{"class":187},[102,179942,380],{"class":119},[102,179944,179945],{"class":278},"\"1秒后执行\"",[102,179947,390],{"class":119},[48,179949,179951],{"id":179950},"_9123-datetime","9.12.3 datetime",[93,179953,179955],{"className":38243,"code":179954,"language":38245,"meta":98,"style":98},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[83,179956,179957,179969,179973,179983,179990],{"__ignoreMap":98},[102,179958,179959,179961,179964,179966],{"class":104,"line":105},[102,179960,38602],{"class":108},[102,179962,179963],{"class":119}," datetime ",[102,179965,38257],{"class":108},[102,179967,179968],{"class":119}," datetime\n",[102,179970,179971],{"class":104,"line":116},[102,179972,652],{"emptyLinePlaceholder":651},[102,179974,179975,179978,179980],{"class":104,"line":123},[102,179976,179977],{"class":119},"now ",[102,179979,260],{"class":108},[102,179981,179982],{"class":119}," datetime.now()\n",[102,179984,179985,179987],{"class":104,"line":130},[102,179986,38280],{"class":187},[102,179988,179989],{"class":119},"(now)\n",[102,179991,179992,179994,179997,180000,180002,180005],{"class":104,"line":136},[102,179993,38280],{"class":187},[102,179995,179996],{"class":119},"(now.strftime(",[102,179998,179999],{"class":278},"\"%Y-%m-",[102,180001,164556],{"class":187},[102,180003,180004],{"class":278}," %H:%M:%S\"",[102,180006,38362],{"class":119},[48,180008,180010],{"id":180009},"_9124-os","9.12.4 os",[93,180012,180014],{"className":38243,"code":180013,"language":38245,"meta":98,"style":98},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[83,180015,180016,180022,180026,180033],{"__ignoreMap":98},[102,180017,180018,180020],{"class":104,"line":105},[102,180019,38257],{"class":108},[102,180021,53170],{"class":119},[102,180023,180024],{"class":104,"line":116},[102,180025,652],{"emptyLinePlaceholder":651},[102,180027,180028,180030],{"class":104,"line":123},[102,180029,38280],{"class":187},[102,180031,180032],{"class":119},"(os.getcwd())\n",[102,180034,180035,180037,180040,180043],{"class":104,"line":130},[102,180036,38280],{"class":187},[102,180038,180039],{"class":119},"(os.listdir(",[102,180041,180042],{"class":278},"\".\"",[102,180044,38362],{"class":119},[48,180046,180048],{"id":180047},"_9125-sys","9.12.5 sys",[93,180050,180052],{"className":38243,"code":180051,"language":38245,"meta":98,"style":98},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[83,180053,180054,180061,180065,180072],{"__ignoreMap":98},[102,180055,180056,180058],{"class":104,"line":105},[102,180057,38257],{"class":108},[102,180059,180060],{"class":119}," sys\n",[102,180062,180063],{"class":104,"line":116},[102,180064,652],{"emptyLinePlaceholder":651},[102,180066,180067,180069],{"class":104,"line":123},[102,180068,38280],{"class":187},[102,180070,180071],{"class":119},"(sys.version)\n",[102,180073,180074,180076],{"class":104,"line":130},[102,180075,38280],{"class":187},[102,180077,180078],{"class":119},"(sys.path)\n",[43,180080,180082,180083,180085,180086,9288],{"id":180081},"_913-if-name-main","9.13 if ",[18,180084,87675],{}," == \"",[18,180087,109923],{},[14,180089,180090,180091,180094],{},"模块被直接运行和被导入时，",[83,180092,180093],{},"__name__"," 的值不同。",[14,180096,180097,180098,32483],{},"创建 ",[83,180099,180100],{},"my_module.py",[93,180102,180104],{"className":38243,"code":180103,"language":38245,"meta":98,"style":98},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[83,180105,180106,180114,180124,180128,180132,180144],{"__ignoreMap":98},[102,180107,180108,180110,180112],{"class":104,"line":105},[102,180109,39812],{"class":108},[102,180111,14015],{"class":112},[102,180113,158958],{"class":119},[102,180115,180116,180118,180120,180122],{"class":104,"line":116},[102,180117,863],{"class":108},[102,180119,19610],{"class":119},[102,180121,1702],{"class":108},[102,180123,158969],{"class":119},[102,180125,180126],{"class":104,"line":123},[102,180127,652],{"emptyLinePlaceholder":651},[102,180129,180130],{"class":104,"line":130},[102,180131,652],{"emptyLinePlaceholder":651},[102,180133,180134,180136,180138,180140,180142],{"class":104,"line":136},[102,180135,10407],{"class":108},[102,180137,39085],{"class":187},[102,180139,109424],{"class":108},[102,180141,109427],{"class":278},[102,180143,12552],{"class":119},[102,180145,180146,180148,180150,180152,180154,180156],{"class":104,"line":142},[102,180147,39164],{"class":187},[102,180149,174465],{"class":119},[102,180151,7039],{"class":187},[102,180153,2571],{"class":119},[102,180155,7044],{"class":187},[102,180157,38362],{"class":119},[14,180159,180160],{},"作用：",[87,180162,180163,180166],{},[62,180164,180165],{},"直接运行该文件时，执行测试代码。",[62,180167,180168],{},"被其他文件导入时，不执行测试代码。",[14,180170,180171],{},"这是写模块时很常用的习惯。",[43,180173,180175],{"id":180174},"_914-包","9.14 包",[14,180177,180178,180179,180182],{},"包是包含 ",[83,180180,180181],{},"__init__.py"," 的目录，用于组织多个模块。",[14,180184,180185],{},"目录结构：",[93,180187,180190],{"className":180188,"code":180189,"language":6778,"meta":98},[6776],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[83,180191,180189],{"__ignoreMap":98},[14,180193,180194],{},"导入：",[93,180196,180198],{"className":38243,"code":180197,"language":38245,"meta":98,"style":98},"from utils.file_utils import read_file\n",[83,180199,180200],{"__ignoreMap":98},[102,180201,180202,180204,180207,180209],{"class":104,"line":105},[102,180203,38602],{"class":108},[102,180205,180206],{"class":119}," utils.file_utils ",[102,180208,38257],{"class":108},[102,180210,180211],{"class":119}," read_file\n",[14,180213,180214,180216],{},[83,180215,180181],{}," 可以为空，也可以写包初始化逻辑。",[43,180218,180220],{"id":180219},"_915-第三方包","9.15 第三方包",[14,180222,180223,180224,180226],{},"第三方包通过 ",[83,180225,31695],{}," 安装。",[93,180228,180230],{"className":31686,"code":180229,"language":31688,"meta":98,"style":98},"pip install requests\n",[83,180231,180232],{"__ignoreMap":98},[102,180233,180234,180236,180238],{"class":104,"line":105},[102,180235,31695],{"class":112},[102,180237,31698],{"class":278},[102,180239,153963],{"class":278},[14,180241,180242],{},"使用：",[93,180244,180246],{"className":38243,"code":180245,"language":38245,"meta":98,"style":98},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[83,180247,180248,180254,180258,180273],{"__ignoreMap":98},[102,180249,180250,180252],{"class":104,"line":105},[102,180251,38257],{"class":108},[102,180253,153963],{"class":119},[102,180255,180256],{"class":104,"line":116},[102,180257,652],{"emptyLinePlaceholder":651},[102,180259,180260,180263,180265,180268,180271],{"class":104,"line":123},[102,180261,180262],{"class":119},"response ",[102,180264,260],{"class":108},[102,180266,180267],{"class":119}," requests.get(",[102,180269,180270],{"class":278},"\"https:\u002F\u002Fwww.example.com\"",[102,180272,390],{"class":119},[102,180274,180275,180277],{"class":104,"line":130},[102,180276,38280],{"class":187},[102,180278,180279],{"class":119},"(response.status_code)\n",[14,180281,180282],{},"查看已安装包：",[93,180284,180286],{"className":31686,"code":180285,"language":31688,"meta":98,"style":98},"pip list\n",[83,180287,180288],{"__ignoreMap":98},[102,180289,180290,180292],{"class":104,"line":105},[102,180291,31695],{"class":112},[102,180293,126820],{"class":278},[14,180295,180296],{},"导出项目依赖：",[93,180298,180299],{"className":31686,"code":154158,"language":31688,"meta":98,"style":98},[83,180300,180301],{"__ignoreMap":98},[102,180302,180303,180305,180307,180309],{"class":104,"line":105},[102,180304,31695],{"class":112},[102,180306,154167],{"class":278},[102,180308,34087],{"class":108},[102,180310,154172],{"class":278},[14,180312,180313],{},"安装项目依赖：",[93,180315,180316],{"className":31686,"code":154178,"language":31688,"meta":98,"style":98},[83,180317,180318],{"__ignoreMap":98},[102,180319,180320,180322,180324,180326],{"class":104,"line":105},[102,180321,31695],{"class":112},[102,180323,31698],{"class":278},[102,180325,127504],{"class":187},[102,180327,154172],{"class":278},[43,180329,180331],{"id":180330},"_916-模块搜索路径","9.16 模块搜索路径",[14,180333,180334,180335,180338],{},"Python 导入模块时会在 ",[83,180336,180337],{},"sys.path"," 中查找。",[93,180340,180342],{"className":38243,"code":180341,"language":38245,"meta":98,"style":98},"import sys\n\nfor path in sys.path:\n    print(path)\n",[83,180343,180344,180350,180354,180366],{"__ignoreMap":98},[102,180345,180346,180348],{"class":104,"line":105},[102,180347,38257],{"class":108},[102,180349,180060],{"class":119},[102,180351,180352],{"class":104,"line":116},[102,180353,652],{"emptyLinePlaceholder":651},[102,180355,180356,180358,180361,180363],{"class":104,"line":123},[102,180357,11841],{"class":108},[102,180359,180360],{"class":119}," path ",[102,180362,33908],{"class":108},[102,180364,180365],{"class":119}," sys.path:\n",[102,180367,180368,180370],{"class":104,"line":130},[102,180369,39164],{"class":187},[102,180371,177094],{"class":119},[14,180373,180374],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,180376,165488],{},[93,180378,180381],{"className":180379,"code":180380,"language":6778,"meta":98},[6776],"random.py\njson.py\ntime.py\n",[83,180382,180380],{"__ignoreMap":98},[14,180384,180385],{},"这些文件名可能导致导入异常。",[43,180387,180389],{"id":180388},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,180391,180185],{},[93,180393,180396],{"className":180394,"code":180395,"language":6778,"meta":98},[6776],"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",[83,180397,180395],{"__ignoreMap":98},[14,180399,180400,32483],{},[83,180401,180402],{},"utils\u002Ffile_utils.py",[93,180404,180406],{"className":38243,"code":180405,"language":38245,"meta":98,"style":98},"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",[83,180407,180408,180414,180424,180428,180432,180442,180452,180460,180466,180470,180497,180507,180511,180515,180525,180551],{"__ignoreMap":98},[102,180409,180410,180412],{"class":104,"line":105},[102,180411,38257],{"class":108},[102,180413,154956],{"class":119},[102,180415,180416,180418,180420,180422],{"class":104,"line":116},[102,180417,38602],{"class":108},[102,180419,116176],{"class":119},[102,180421,38257],{"class":108},[102,180423,116181],{"class":119},[102,180425,180426],{"class":104,"line":123},[102,180427,652],{"emptyLinePlaceholder":651},[102,180429,180430],{"class":104,"line":130},[102,180431,652],{"emptyLinePlaceholder":651},[102,180433,180434,180436,180439],{"class":104,"line":136},[102,180435,39812],{"class":108},[102,180437,180438],{"class":112}," read_json",[102,180440,180441],{"class":119},"(path):\n",[102,180443,180444,180447,180449],{"class":104,"line":142},[102,180445,180446],{"class":119},"    path ",[102,180448,260],{"class":108},[102,180450,180451],{"class":119}," Path(path)\n",[102,180453,180454,180456,180458],{"class":104,"line":148},[102,180455,2343],{"class":108},[102,180457,46795],{"class":108},[102,180459,177175],{"class":119},[102,180461,180462,180464],{"class":104,"line":157},[102,180463,184],{"class":108},[102,180465,59703],{"class":119},[102,180467,180468],{"class":104,"line":163},[102,180469,652],{"emptyLinePlaceholder":651},[102,180471,180472,180474,180476,180479,180481,180483,180485,180487,180489,180491,180493,180495],{"class":104,"line":175},[102,180473,42043],{"class":108},[102,180475,154656],{"class":187},[102,180477,180478],{"class":119},"(path, ",[102,180480,154666],{"class":278},[102,180482,2571],{"class":119},[102,180484,154671],{"class":386},[102,180486,260],{"class":108},[102,180488,154676],{"class":278},[102,180490,22445],{"class":119},[102,180492,39248],{"class":108},[102,180494,156018],{"class":386},[102,180496,12552],{"class":119},[102,180498,180499,180501,180503,180505],{"class":104,"line":181},[102,180500,184],{"class":108},[102,180502,156029],{"class":119},[102,180504,53219],{"class":386},[102,180506,390],{"class":119},[102,180508,180509],{"class":104,"line":202},[102,180510,652],{"emptyLinePlaceholder":651},[102,180512,180513],{"class":104,"line":208},[102,180514,652],{"emptyLinePlaceholder":651},[102,180516,180517,180519,180522],{"class":104,"line":214},[102,180518,39812],{"class":108},[102,180520,180521],{"class":112}," write_json",[102,180523,180524],{"class":119},"(path, data):\n",[102,180526,180527,180529,180531,180533,180535,180537,180539,180541,180543,180545,180547,180549],{"class":104,"line":225},[102,180528,42043],{"class":108},[102,180530,154656],{"class":187},[102,180532,180478],{"class":119},[102,180534,159841],{"class":278},[102,180536,2571],{"class":119},[102,180538,154671],{"class":386},[102,180540,260],{"class":108},[102,180542,154676],{"class":278},[102,180544,22445],{"class":119},[102,180546,39248],{"class":108},[102,180548,156018],{"class":386},[102,180550,12552],{"class":119},[102,180552,180553,180556,180558,180560,180562,180564,180566,180568,180570,180572,180574],{"class":104,"line":230},[102,180554,180555],{"class":119},"        json.dump(data, ",[102,180557,53219],{"class":386},[102,180559,2571],{"class":119},[102,180561,155002],{"class":386},[102,180563,260],{"class":108},[102,180565,41852],{"class":187},[102,180567,2571],{"class":119},[102,180569,159877],{"class":386},[102,180571,260],{"class":108},[102,180573,7044],{"class":187},[102,180575,390],{"class":119},[14,180577,180578,32483],{},[83,180579,162472],{},[93,180581,180583],{"className":38243,"code":180582,"language":38245,"meta":98,"style":98},"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",[83,180584,180585,180596,180600,180613,180633],{"__ignoreMap":98},[102,180586,180587,180589,180591,180593],{"class":104,"line":105},[102,180588,38602],{"class":108},[102,180590,180206],{"class":119},[102,180592,38257],{"class":108},[102,180594,180595],{"class":119}," read_json, write_json\n",[102,180597,180598],{"class":104,"line":116},[102,180599,652],{"emptyLinePlaceholder":651},[102,180601,180602,180604,180606,180609,180611],{"class":104,"line":123},[102,180603,167581],{"class":119},[102,180605,260],{"class":108},[102,180607,180608],{"class":119}," read_json(",[102,180610,159696],{"class":278},[102,180612,390],{"class":119},[102,180614,180615,180617,180619,180621,180623,180625,180627,180629,180631],{"class":104,"line":130},[102,180616,178399],{"class":119},[102,180618,70544],{"class":278},[102,180620,59302],{"class":119},[102,180622,157753],{"class":278},[102,180624,2571],{"class":119},[102,180626,159337],{"class":278},[102,180628,59302],{"class":119},[102,180630,10009],{"class":187},[102,180632,173017],{"class":119},[102,180634,180635,180638,180640],{"class":104,"line":136},[102,180636,180637],{"class":119},"write_json(",[102,180639,159696],{"class":278},[102,180641,180642],{"class":119},", students)\n",[43,180644,180646],{"id":180645},"_918-易错点","9.18 易错点",[87,180648,180649,180652,180657,180662,180665,180668],{},[62,180650,180651],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[62,180653,180654,180655,36250],{},"能指定异常类型就不要裸写 ",[83,180656,178759],{},[62,180658,180659,180661],{},[83,180660,179134],{}," 无论是否出错都会执行。",[62,180663,180664],{},"模块文件名不要和标准库重名。",[62,180666,180667],{},"导入自己写的模块时，要注意运行目录。",[62,180669,180670],{},"第三方包要安装到当前解释器或虚拟环境中。",[43,180672,180674],{"id":180673},"_919-本章练习","9.19 本章练习",[87,180676,180677,180680,180683,180689,180696],{},[62,180678,180679],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[62,180681,180682],{},"写函数读取文件，如果文件不存在则返回空字符串。",[62,180684,180097,180685,180688],{},[83,180686,180687],{},"math_utils.py","，实现加减乘除函数并导入使用。",[62,180690,180691,180692,180695],{},"创建一个 ",[83,180693,180694],{},"utils"," 包，把 JSON 读写函数放进去。",[62,180697,180698],{},"写一个程序，捕获除零异常和输入格式异常。",[8955,180700,180701],{},"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":98,"searchDepth":116,"depth":116,"links":180703},[180704,180705,180706,180707,180708,180709,180710,180711,180712,180713,180714,180720,180727,180729,180730,180731,180732,180733,180734],{"id":178556,"depth":116,"text":178557},{"id":178684,"depth":116,"text":178685},{"id":178733,"depth":116,"text":178734},{"id":178882,"depth":116,"text":178883},{"id":179054,"depth":116,"text":179055},{"id":179123,"depth":116,"text":179124},{"id":179234,"depth":116,"text":179235},{"id":179360,"depth":116,"text":179361},{"id":179485,"depth":116,"text":179486},{"id":179540,"depth":116,"text":179541},{"id":179639,"depth":116,"text":179640,"children":180715},[180716,180717,180718,180719],{"id":179643,"depth":123,"text":179644},{"id":179677,"depth":123,"text":179678},{"id":179716,"depth":123,"text":179717},{"id":179795,"depth":123,"text":179796},{"id":179818,"depth":116,"text":179819,"children":180721},[180722,180723,180724,180725,180726],{"id":179822,"depth":123,"text":179823},{"id":179905,"depth":123,"text":179906},{"id":179950,"depth":123,"text":179951},{"id":180009,"depth":123,"text":180010},{"id":180047,"depth":123,"text":180048},{"id":180081,"depth":116,"text":180728},"9.13 if name == \"main\"",{"id":180174,"depth":116,"text":180175},{"id":180219,"depth":116,"text":180220},{"id":180330,"depth":116,"text":180331},{"id":180388,"depth":116,"text":180389},{"id":180645,"depth":116,"text":180646},{"id":180673,"depth":116,"text":180674},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":178548,"description":31240},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":180741,"title":180742,"body":180743,"description":180906,"extension":8978,"meta":180907,"navigation":651,"path":180908,"seo":180909,"stem":180910,"__hash__":180911},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":180744,"toc":180901},[180745,180748,180751,180754,180765,180767,180841,180844,180847,180850,180853,180856,180859,180862,180865,180868,180871],[10,180746,180742],{"id":180747},"python教程",[14,180749,180750],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,180752,180753],{},"建议学习环境：",[87,180755,180756,180759,180762],{},[62,180757,180758],{},"Python 版本：Python 3.10 及以上。",[62,180760,180761],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[62,180763,180764],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[43,180766,124943],{"id":124943},[87,180768,180769,180775,180781,180787,180793,180799,180805,180811,180817,180823,180829,180835],{},[62,180770,180771],{},[9275,180772,180774],{"href":180773},".\u002Fch1-Python","Python环境与第一个程序",[62,180776,180777],{},[9275,180778,180780],{"href":180779},".\u002Fch2","基础语法、变量与字符串",[62,180782,180783],{},[9275,180784,180786],{"href":180785},".\u002Fch3","判断语句",[62,180788,180789],{},[9275,180790,180792],{"href":180791},".\u002Fch4","循环语句",[62,180794,180795],{},[9275,180796,180798],{"href":180797},".\u002Fch5","函数基础",[62,180800,180801],{},[9275,180802,180804],{"href":180803},".\u002Fch6","数据容器",[62,180806,180807],{},[9275,180808,180810],{"href":180809},".\u002Fch7","函数进阶",[62,180812,180813],{},[9275,180814,180816],{"href":180815},".\u002Fch8","文件操作",[62,180818,180819],{},[9275,180820,180822],{"href":180821},".\u002Fch9","异常、模块与包",[62,180824,180825],{},[9275,180826,180828],{"href":180827},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[62,180830,180831],{},[9275,180832,180834],{"href":180833},".\u002Fch11","面向对象基础",[62,180836,180837],{},[9275,180838,180840],{"href":180839},".\u002Fch12","综合案例与复习路线",[43,180842,180843],{"id":180843},"学习路线",[14,180845,180846],{},"第一阶段：能运行程序。",[14,180848,180849],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,180851,180852],{},"第二阶段：能组织数据。",[14,180854,180855],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,180857,180858],{},"第三阶段：能封装逻辑。",[14,180860,180861],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,180863,180864],{},"第四阶段：能做小项目。",[14,180866,180867],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[43,180869,180870],{"id":180870},"参考资料",[87,180872,180873,180880,180887,180894],{},[62,180874,180875,180876],{},"黑马程序员 Python 入门教程推荐：",[9275,180877,180878],{"href":180878,"rel":180879},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[31729],[62,180881,180882,180883],{},"Python 官方中文教程：",[9275,180884,180885],{"href":180885,"rel":180886},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[31729],[62,180888,180889,180890],{},"Python 标准库文档：",[9275,180891,180892],{"href":180892,"rel":180893},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[31729],[62,180895,180896,180897],{},"pyecharts 文档：",[9275,180898,180899],{"href":180899,"rel":180900},"https:\u002F\u002Fpyecharts.org\u002F",[31729],{"title":98,"searchDepth":116,"depth":116,"links":180902},[180903,180904,180905],{"id":124943,"depth":116,"text":124943},{"id":180843,"depth":116,"text":180843},{"id":180870,"depth":116,"text":180870},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":31242},"\u002Fwiki\u002F2024-10-10-python",{"title":180742,"description":180906},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331386445]