[{"data":1,"prerenderedAt":175697},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2026-05-24-c-xue-xi\u002Fch4-jie-gou-ti":3,"wiki-doc-nav":3159},{"id":4,"title":5,"body":6,"description":16,"extension":3153,"meta":3154,"navigation":122,"path":3155,"seo":3156,"stem":3157,"__hash__":3158},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8,"toc":3144},"minimark",[9,13,17,22,25,28,41,453,456,460,463,470,745,749,752,755,913,917,920,923,1132,1136,1139,1451,1454,1462,1466,1469,1620,1622,1633,1691,1695,1701,2384,2393,2396,2494,2497,3134,3140],[10,11,5],"h1",{"id":12},"_4结构体",[14,15,16],"p",{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[18,19,21],"h2",{"id":20},"_41结构体定义与使用","4.1结构体定义与使用",[14,23,24],{},"语法：struct 结构体名 {结构体成员列表}；",[14,26,27],{},"通过结构体创建变量的方式：",[29,30,31,35,38],"ul",{},[32,33,34],"li",{},"struct 结构体名 变量名",[32,36,37],{},"struct 结构体名 变量名={成员1值，成员2值...}",[32,39,40],{},"定义结构体时顺便创建变量",[42,43,48],"pre",{"className":44,"code":45,"language":46,"meta":47,"style":47},"language-c++ shiki shiki-themes github-light github-dark","#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","c++","",[49,50,51,64,81,89,96,105,111,117,124,130,136,142,151,157,165,171,179,184,189,194,199,204,209,216,221,228,237,249,254,260,266,278,284,298,312,325,331,358,363,369,398,403,409,422,434,447],"code",{"__ignoreMap":47},[52,53,56,60],"span",{"class":54,"line":55},"line",1,[52,57,59],{"class":58},"szBVR","#include",[52,61,63],{"class":62},"sZZnC","\u003Ciostream>\n",[52,65,67,70,73,77],{"class":54,"line":66},2,[52,68,69],{"class":58},"using",[52,71,72],{"class":58}," namespace",[52,74,76],{"class":75},"sScJk"," std",[52,78,80],{"class":79},"sVt8B",";\n",[52,82,84,86],{"class":54,"line":83},3,[52,85,59],{"class":58},[52,87,88],{"class":62},"\u003Cstring>\n",[52,90,92],{"class":54,"line":91},4,[52,93,95],{"class":94},"sJ8bj","\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[52,97,99,102],{"class":54,"line":98},5,[52,100,101],{"class":58},"struct",[52,103,104],{"class":75}," Student\n",[52,106,108],{"class":54,"line":107},6,[52,109,110],{"class":79},"{\n",[52,112,114],{"class":54,"line":113},7,[52,115,116],{"class":94},"    \u002F\u002F成员列表\n",[52,118,120],{"class":54,"line":119},8,[52,121,123],{"emptyLinePlaceholder":122},true,"\n",[52,125,127],{"class":54,"line":126},9,[52,128,129],{"class":94},"    \u002F\u002F姓名\n",[52,131,133],{"class":54,"line":132},10,[52,134,135],{"class":79},"    string name;\n",[52,137,139],{"class":54,"line":138},11,[52,140,141],{"class":94},"    \u002F\u002F年龄\n",[52,143,145,148],{"class":54,"line":144},12,[52,146,147],{"class":58},"    int",[52,149,150],{"class":79}," age;\n",[52,152,154],{"class":54,"line":153},13,[52,155,156],{"class":94},"    \u002F\u002F分数\n",[52,158,160,162],{"class":54,"line":159},14,[52,161,147],{"class":58},[52,163,164],{"class":79}," score;\n",[52,166,168],{"class":54,"line":167},15,[52,169,170],{"class":79},"};\n",[52,172,174,176],{"class":54,"line":173},16,[52,175,101],{"class":58},[52,177,178],{"class":75}," School\n",[52,180,182],{"class":54,"line":181},17,[52,183,110],{"class":79},[52,185,187],{"class":54,"line":186},18,[52,188,116],{"class":94},[52,190,192],{"class":54,"line":191},19,[52,193,123],{"emptyLinePlaceholder":122},[52,195,197],{"class":54,"line":196},20,[52,198,129],{"class":94},[52,200,202],{"class":54,"line":201},21,[52,203,135],{"class":79},[52,205,207],{"class":54,"line":206},22,[52,208,141],{"class":94},[52,210,212,214],{"class":54,"line":211},23,[52,213,147],{"class":58},[52,215,150],{"class":79},[52,217,219],{"class":54,"line":218},24,[52,220,156],{"class":94},[52,222,224,226],{"class":54,"line":223},25,[52,225,147],{"class":58},[52,227,164],{"class":79},[52,229,231,234],{"class":54,"line":230},26,[52,232,233],{"class":79},"} s3;",[52,235,236],{"class":94}," \u002F\u002F创建结构体时就创建了变量\n",[52,238,240,243,246],{"class":54,"line":239},27,[52,241,242],{"class":58},"int",[52,244,245],{"class":75}," main",[52,247,248],{"class":79},"()\n",[52,250,252],{"class":54,"line":251},28,[52,253,110],{"class":79},[52,255,257],{"class":54,"line":256},29,[52,258,259],{"class":94},"    \u002F\u002F2.通过学生类型创建具体学生\n",[52,261,263],{"class":54,"line":262},30,[52,264,265],{"class":94},"    \u002F\u002F2.1 struct Student s1;\n",[52,267,269,272,275],{"class":54,"line":268},31,[52,270,271],{"class":58},"    struct",[52,273,274],{"class":75}," Student",[52,276,277],{"class":79}," s1;\n",[52,279,281],{"class":54,"line":280},32,[52,282,283],{"class":94},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[52,285,287,290,293,296],{"class":54,"line":286},33,[52,288,289],{"class":79},"    s1.name",[52,291,292],{"class":58},"=",[52,294,295],{"class":62},"\"张三\"",[52,297,80],{"class":79},[52,299,301,304,306,310],{"class":54,"line":300},34,[52,302,303],{"class":79},"    s1.age",[52,305,292],{"class":58},[52,307,309],{"class":308},"sj4cs","18",[52,311,80],{"class":79},[52,313,315,318,320,323],{"class":54,"line":314},35,[52,316,317],{"class":79},"    s1.score",[52,319,292],{"class":58},[52,321,322],{"class":308},"66",[52,324,80],{"class":79},[52,326,328],{"class":54,"line":327},36,[52,329,330],{"class":94},"    \u002F\u002F输出结果\n",[52,332,334,337,340,343,345,348,350,353,355],{"class":54,"line":333},37,[52,335,336],{"class":79},"    cout",[52,338,339],{"class":58},"\u003C\u003C",[52,341,342],{"class":79},"s1.name",[52,344,339],{"class":58},[52,346,347],{"class":79},"s1.age",[52,349,339],{"class":58},[52,351,352],{"class":79},"s1.score",[52,354,339],{"class":58},[52,356,357],{"class":79},"endl;\n",[52,359,361],{"class":54,"line":360},38,[52,362,123],{"emptyLinePlaceholder":122},[52,364,366],{"class":54,"line":365},39,[52,367,368],{"class":94},"    \u002F\u002F2.2 struct Student s2={...}\n",[52,370,372,374,376,379,381,384,387,390,392,394,396],{"class":54,"line":371},40,[52,373,271],{"class":58},[52,375,274],{"class":75},[52,377,378],{"class":79}," s2",[52,380,292],{"class":58},[52,382,383],{"class":79},"{",[52,385,386],{"class":62},"\"王五\"",[52,388,389],{"class":79},",",[52,391,309],{"class":308},[52,393,389],{"class":79},[52,395,322],{"class":308},[52,397,170],{"class":79},[52,399,401],{"class":54,"line":400},41,[52,402,123],{"emptyLinePlaceholder":122},[52,404,406],{"class":54,"line":405},42,[52,407,408],{"class":94},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[52,410,412,415,417,420],{"class":54,"line":411},43,[52,413,414],{"class":79},"    s3.name",[52,416,292],{"class":58},[52,418,419],{"class":62},"\"1\"",[52,421,80],{"class":79},[52,423,425,428,430,432],{"class":54,"line":424},44,[52,426,427],{"class":79},"    s3.age",[52,429,292],{"class":58},[52,431,309],{"class":308},[52,433,80],{"class":79},[52,435,437,440,442,445],{"class":54,"line":436},45,[52,438,439],{"class":79},"    s3.score",[52,441,292],{"class":58},[52,443,444],{"class":308},"20",[52,446,80],{"class":79},[52,448,450],{"class":54,"line":449},46,[52,451,452],{"class":79},"}\n",[14,454,455],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[18,457,459],{"id":458},"_42结构体数组","4.2结构体数组",[14,461,462],{},"将自定义的结构体放入到数组中方便维护",[14,464,465,466,469],{},"语法：struct 结构体名 数组名",[52,467,468],{},"元素个数","={ {}，{},...{} };",[42,471,473],{"className":44,"code":472,"language":46,"meta":47,"style":47},"#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",[49,474,475,481,491,497,502,508,512,516,522,528,532,536,544,548,553,571,576,595,612,617,622,640,655,670,675,709,713,737,741],{"__ignoreMap":47},[52,476,477,479],{"class":54,"line":55},[52,478,59],{"class":58},[52,480,63],{"class":62},[52,482,483,485,487,489],{"class":54,"line":66},[52,484,69],{"class":58},[52,486,72],{"class":58},[52,488,76],{"class":75},[52,490,80],{"class":79},[52,492,493,495],{"class":54,"line":83},[52,494,59],{"class":58},[52,496,88],{"class":62},[52,498,499],{"class":54,"line":91},[52,500,501],{"class":94},"\u002F\u002F1.定义结构体\n",[52,503,504,506],{"class":54,"line":98},[52,505,101],{"class":58},[52,507,104],{"class":75},[52,509,510],{"class":54,"line":107},[52,511,110],{"class":79},[52,513,514],{"class":54,"line":113},[52,515,135],{"class":79},[52,517,518,520],{"class":54,"line":119},[52,519,147],{"class":58},[52,521,150],{"class":79},[52,523,524,526],{"class":54,"line":126},[52,525,147],{"class":58},[52,527,164],{"class":79},[52,529,530],{"class":54,"line":132},[52,531,123],{"emptyLinePlaceholder":122},[52,533,534],{"class":54,"line":138},[52,535,170],{"class":79},[52,537,538,540,542],{"class":54,"line":144},[52,539,242],{"class":58},[52,541,245],{"class":75},[52,543,248],{"class":79},[52,545,546],{"class":54,"line":153},[52,547,110],{"class":79},[52,549,550],{"class":54,"line":159},[52,551,552],{"class":94},"    \u002F\u002F2.创建结构体数组\n",[52,554,555,557,559,562,565,568],{"class":54,"line":167},[52,556,271],{"class":58},[52,558,274],{"class":75},[52,560,561],{"class":79}," stuArray[",[52,563,564],{"class":308},"2",[52,566,567],{"class":79},"]",[52,569,570],{"class":58},"=\n",[52,572,573],{"class":54,"line":173},[52,574,575],{"class":79},"    {\n",[52,577,578,581,583,585,587,589,592],{"class":54,"line":181},[52,579,580],{"class":79},"        {",[52,582,295],{"class":62},[52,584,389],{"class":79},[52,586,309],{"class":308},[52,588,389],{"class":79},[52,590,591],{"class":308},"100",[52,593,594],{"class":79},"},\n",[52,596,597,599,601,603,606,608,610],{"class":54,"line":186},[52,598,580],{"class":79},[52,600,419],{"class":62},[52,602,389],{"class":79},[52,604,605],{"class":308},"15",[52,607,389],{"class":79},[52,609,605],{"class":308},[52,611,452],{"class":79},[52,613,614],{"class":54,"line":191},[52,615,616],{"class":79},"    }\n",[52,618,619],{"class":54,"line":196},[52,620,621],{"class":94},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[52,623,624,627,630,633,635,638],{"class":54,"line":201},[52,625,626],{"class":79},"    stuArray[",[52,628,629],{"class":308},"1",[52,631,632],{"class":79},"].name",[52,634,292],{"class":58},[52,636,637],{"class":62},"\"2\"",[52,639,80],{"class":79},[52,641,642,644,646,649,651,653],{"class":54,"line":206},[52,643,626],{"class":79},[52,645,629],{"class":308},[52,647,648],{"class":79},"].age",[52,650,292],{"class":58},[52,652,564],{"class":308},[52,654,80],{"class":79},[52,656,657,659,661,664,666,668],{"class":54,"line":211},[52,658,626],{"class":79},[52,660,629],{"class":308},[52,662,663],{"class":79},"].score",[52,665,292],{"class":58},[52,667,564],{"class":308},[52,669,80],{"class":79},[52,671,672],{"class":54,"line":218},[52,673,674],{"class":94},"    \u002F\u002F4.遍历结构体数组\n",[52,676,677,680,683,685,688,690,693,696,699,701,703,706],{"class":54,"line":223},[52,678,679],{"class":58},"    for",[52,681,682],{"class":79}," (",[52,684,242],{"class":58},[52,686,687],{"class":79}," i",[52,689,292],{"class":58},[52,691,692],{"class":308},"0",[52,694,695],{"class":79},";i",[52,697,698],{"class":58},"\u003C",[52,700,564],{"class":308},[52,702,695],{"class":79},[52,704,705],{"class":58},"++",[52,707,708],{"class":79},")\n",[52,710,711],{"class":54,"line":230},[52,712,575],{"class":79},[52,714,715,718,720,723,725,728,730,733,735],{"class":54,"line":239},[52,716,717],{"class":79},"        cout",[52,719,339],{"class":58},[52,721,722],{"class":79},"stuArray[i].name",[52,724,339],{"class":58},[52,726,727],{"class":79},"stuArray[i].age",[52,729,339],{"class":58},[52,731,732],{"class":79},"stuArray[i].score",[52,734,339],{"class":58},[52,736,357],{"class":79},[52,738,739],{"class":54,"line":251},[52,740,616],{"class":79},[52,742,743],{"class":54,"line":256},[52,744,452],{"class":79},[18,746,748],{"id":747},"_43结构体指针","4.3结构体指针",[14,750,751],{},"作用：通过指针访问结构体中的成员",[14,753,754],{},"利用操作符->可以通过结构体指针访问结构体属性",[42,756,758],{"className":44,"code":757,"language":46,"meta":47,"style":47},"#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",[49,759,760,766,776,782,786,792,796,800,806,812,816,824,828,833,859,864,881,886,909],{"__ignoreMap":47},[52,761,762,764],{"class":54,"line":55},[52,763,59],{"class":58},[52,765,63],{"class":62},[52,767,768,770,772,774],{"class":54,"line":66},[52,769,69],{"class":58},[52,771,72],{"class":58},[52,773,76],{"class":75},[52,775,80],{"class":79},[52,777,778,780],{"class":54,"line":83},[52,779,59],{"class":58},[52,781,88],{"class":62},[52,783,784],{"class":54,"line":91},[52,785,501],{"class":94},[52,787,788,790],{"class":54,"line":98},[52,789,101],{"class":58},[52,791,104],{"class":75},[52,793,794],{"class":54,"line":107},[52,795,110],{"class":79},[52,797,798],{"class":54,"line":113},[52,799,135],{"class":79},[52,801,802,804],{"class":54,"line":119},[52,803,147],{"class":58},[52,805,150],{"class":79},[52,807,808,810],{"class":54,"line":126},[52,809,147],{"class":58},[52,811,164],{"class":79},[52,813,814],{"class":54,"line":132},[52,815,170],{"class":79},[52,817,818,820,822],{"class":54,"line":138},[52,819,242],{"class":58},[52,821,245],{"class":75},[52,823,248],{"class":79},[52,825,826],{"class":54,"line":144},[52,827,110],{"class":79},[52,829,830],{"class":54,"line":153},[52,831,832],{"class":94},"    \u002F\u002F创建学生结构体变量\n",[52,834,835,837,839,842,844,846,848,850,852,854,857],{"class":54,"line":159},[52,836,271],{"class":58},[52,838,274],{"class":75},[52,840,841],{"class":79}," s",[52,843,292],{"class":58},[52,845,383],{"class":79},[52,847,295],{"class":62},[52,849,389],{"class":79},[52,851,309],{"class":308},[52,853,389],{"class":79},[52,855,856],{"class":308},"200",[52,858,170],{"class":79},[52,860,861],{"class":54,"line":167},[52,862,863],{"class":94},"    \u002F\u002F通过指针指向结构体变量\n",[52,865,866,868,870,873,875,878],{"class":54,"line":173},[52,867,271],{"class":58},[52,869,274],{"class":75},[52,871,872],{"class":58}," *",[52,874,14],{"class":79},[52,876,877],{"class":58},"=&",[52,879,880],{"class":79},"s\n",[52,882,883],{"class":54,"line":181},[52,884,885],{"class":94},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[52,887,888,890,892,895,897,900,902,905,907],{"class":54,"line":186},[52,889,336],{"class":79},[52,891,339],{"class":58},[52,893,894],{"class":79},"p->name",[52,896,339],{"class":58},[52,898,899],{"class":79},"p->age",[52,901,339],{"class":58},[52,903,904],{"class":79},"p->score",[52,906,339],{"class":58},[52,908,357],{"class":79},[52,910,911],{"class":54,"line":191},[52,912,452],{"class":79},[18,914,916],{"id":915},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,918,919],{},"作用：结构体中的成员可以是另一个结构体",[14,921,922],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[42,924,926],{"className":44,"code":925,"language":46,"meta":47,"style":47},"#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",[49,927,928,934,944,950,955,964,968,972,978,984,988,993,1000,1004,1011,1015,1021,1026,1030,1039,1043,1048,1053,1058,1069,1081,1092,1105,1116,1128],{"__ignoreMap":47},[52,929,930,932],{"class":54,"line":55},[52,931,59],{"class":58},[52,933,63],{"class":62},[52,935,936,938,940,942],{"class":54,"line":66},[52,937,69],{"class":58},[52,939,72],{"class":58},[52,941,76],{"class":75},[52,943,80],{"class":79},[52,945,946,948],{"class":54,"line":83},[52,947,59],{"class":58},[52,949,88],{"class":62},[52,951,952],{"class":54,"line":91},[52,953,954],{"class":94},"\u002F\u002F定义学生结构体\n",[52,956,957,959,961],{"class":54,"line":98},[52,958,101],{"class":58},[52,960,274],{"class":75},[52,962,963],{"class":79}," \n",[52,965,966],{"class":54,"line":107},[52,967,110],{"class":79},[52,969,970],{"class":54,"line":113},[52,971,135],{"class":79},[52,973,974,976],{"class":54,"line":119},[52,975,147],{"class":58},[52,977,150],{"class":79},[52,979,980,982],{"class":54,"line":126},[52,981,147],{"class":58},[52,983,164],{"class":79},[52,985,986],{"class":54,"line":132},[52,987,452],{"class":79},[52,989,990],{"class":54,"line":138},[52,991,992],{"class":94},"\u002F\u002F定义老师结构体\n",[52,994,995,997],{"class":54,"line":144},[52,996,101],{"class":58},[52,998,999],{"class":75}," Teacher\n",[52,1001,1002],{"class":54,"line":153},[52,1003,110],{"class":79},[52,1005,1006,1008],{"class":54,"line":159},[52,1007,147],{"class":58},[52,1009,1010],{"class":79}," id;\n",[52,1012,1013],{"class":54,"line":167},[52,1014,135],{"class":79},[52,1016,1017,1019],{"class":54,"line":173},[52,1018,147],{"class":58},[52,1020,150],{"class":79},[52,1022,1023],{"class":54,"line":181},[52,1024,1025],{"class":79},"    Student stu;\n",[52,1027,1028],{"class":54,"line":186},[52,1029,452],{"class":79},[52,1031,1032,1034,1036],{"class":54,"line":191},[52,1033,242],{"class":58},[52,1035,245],{"class":75},[52,1037,1038],{"class":79},"() \n",[52,1040,1041],{"class":54,"line":196},[52,1042,110],{"class":79},[52,1044,1045],{"class":54,"line":201},[52,1046,1047],{"class":94},"    \u002F\u002F结构体嵌套结构体\n",[52,1049,1050],{"class":54,"line":206},[52,1051,1052],{"class":94},"    \u002F\u002F创建老师\n",[52,1054,1055],{"class":54,"line":211},[52,1056,1057],{"class":79},"    Teacher t;\n",[52,1059,1060,1063,1065,1067],{"class":54,"line":218},[52,1061,1062],{"class":79},"    t.id",[52,1064,292],{"class":58},[52,1066,591],{"class":308},[52,1068,80],{"class":79},[52,1070,1071,1074,1076,1079],{"class":54,"line":223},[52,1072,1073],{"class":79},"    t.name",[52,1075,292],{"class":58},[52,1077,1078],{"class":62},"\"老王\"",[52,1080,80],{"class":79},[52,1082,1083,1086,1088,1090],{"class":54,"line":230},[52,1084,1085],{"class":79},"    t.age",[52,1087,292],{"class":58},[52,1089,309],{"class":308},[52,1091,80],{"class":79},[52,1093,1094,1097,1099,1102],{"class":54,"line":239},[52,1095,1096],{"class":79},"    t.stu.name",[52,1098,292],{"class":58},[52,1100,1101],{"class":62},"\"小王\"",[52,1103,1104],{"class":79},"；\n",[52,1106,1107,1110,1112,1114],{"class":54,"line":251},[52,1108,1109],{"class":79},"    t.stu.age",[52,1111,292],{"class":58},[52,1113,444],{"class":308},[52,1115,80],{"class":79},[52,1117,1118,1121,1123,1126],{"class":54,"line":256},[52,1119,1120],{"class":79},"    t.stu.score",[52,1122,292],{"class":58},[52,1124,1125],{"class":308},"6",[52,1127,80],{"class":79},[52,1129,1130],{"class":54,"line":262},[52,1131,452],{"class":79},[18,1133,1135],{"id":1134},"_45结构体做函数参数","4.5结构体做函数参数",[14,1137,1138],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[42,1140,1142],{"className":44,"code":1141,"language":46,"meta":47,"style":47},"#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",[49,1143,1144,1150,1160,1166,1172,1176,1180,1186,1192,1196,1201,1206,1226,1230,1265,1269,1274,1294,1298,1329,1333,1341,1345,1354,1366,1378,1390,1403,1411,1424,1437,1447],{"__ignoreMap":47},[52,1145,1146,1148],{"class":54,"line":55},[52,1147,59],{"class":58},[52,1149,63],{"class":62},[52,1151,1152,1154,1156,1158],{"class":54,"line":66},[52,1153,69],{"class":58},[52,1155,72],{"class":58},[52,1157,76],{"class":75},[52,1159,80],{"class":79},[52,1161,1162,1164],{"class":54,"line":83},[52,1163,59],{"class":58},[52,1165,88],{"class":62},[52,1167,1168,1170],{"class":54,"line":91},[52,1169,101],{"class":58},[52,1171,104],{"class":75},[52,1173,1174],{"class":54,"line":98},[52,1175,110],{"class":79},[52,1177,1178],{"class":54,"line":107},[52,1179,135],{"class":79},[52,1181,1182,1184],{"class":54,"line":113},[52,1183,147],{"class":58},[52,1185,150],{"class":79},[52,1187,1188,1190],{"class":54,"line":119},[52,1189,147],{"class":58},[52,1191,164],{"class":79},[52,1193,1194],{"class":54,"line":126},[52,1195,170],{"class":79},[52,1197,1198],{"class":54,"line":132},[52,1199,1200],{"class":94},"\u002F\u002F打印学生信息的函数\n",[52,1202,1203],{"class":54,"line":138},[52,1204,1205],{"class":94},"\u002F\u002F值传递\n",[52,1207,1208,1211,1214,1217,1219,1221,1224],{"class":54,"line":144},[52,1209,1210],{"class":58},"void",[52,1212,1213],{"class":75}," printStudent1",[52,1215,1216],{"class":79},"(",[52,1218,101],{"class":58},[52,1220,274],{"class":75},[52,1222,841],{"class":1223},"s4XuR",[52,1225,708],{"class":79},[52,1227,1228],{"class":54,"line":153},[52,1229,110],{"class":79},[52,1231,1232,1235,1237,1240,1242,1245,1248,1251,1253,1255,1257,1260,1262],{"class":54,"line":159},[52,1233,1234],{"class":79},"    cout ",[52,1236,339],{"class":58},[52,1238,1239],{"class":79}," s.name ",[52,1241,339],{"class":58},[52,1243,1244],{"class":62}," \" \"",[52,1246,1247],{"class":58}," \u003C\u003C",[52,1249,1250],{"class":79}," s.age ",[52,1252,339],{"class":58},[52,1254,1244],{"class":62},[52,1256,1247],{"class":58},[52,1258,1259],{"class":79}," s.score ",[52,1261,339],{"class":58},[52,1263,1264],{"class":79}," endl;\n",[52,1266,1267],{"class":54,"line":167},[52,1268,452],{"class":79},[52,1270,1271],{"class":54,"line":173},[52,1272,1273],{"class":94},"\u002F\u002F地址传递\n",[52,1275,1276,1278,1281,1283,1285,1287,1289,1292],{"class":54,"line":181},[52,1277,1210],{"class":58},[52,1279,1280],{"class":75}," printStudent2",[52,1282,1216],{"class":79},[52,1284,101],{"class":58},[52,1286,274],{"class":75},[52,1288,872],{"class":58},[52,1290,1291],{"class":1223},"s",[52,1293,708],{"class":79},[52,1295,1296],{"class":54,"line":186},[52,1297,110],{"class":79},[52,1299,1300,1302,1304,1307,1309,1311,1313,1316,1318,1320,1322,1325,1327],{"class":54,"line":191},[52,1301,1234],{"class":79},[52,1303,339],{"class":58},[52,1305,1306],{"class":79}," s->name ",[52,1308,339],{"class":58},[52,1310,1244],{"class":62},[52,1312,1247],{"class":58},[52,1314,1315],{"class":79}," s->age ",[52,1317,339],{"class":58},[52,1319,1244],{"class":62},[52,1321,1247],{"class":58},[52,1323,1324],{"class":79}," s->score ",[52,1326,339],{"class":58},[52,1328,1264],{"class":79},[52,1330,1331],{"class":54,"line":196},[52,1332,452],{"class":79},[52,1334,1335,1337,1339],{"class":54,"line":201},[52,1336,242],{"class":58},[52,1338,245],{"class":75},[52,1340,248],{"class":79},[52,1342,1343],{"class":54,"line":206},[52,1344,110],{"class":79},[52,1346,1347,1349,1351],{"class":54,"line":211},[52,1348,271],{"class":58},[52,1350,274],{"class":75},[52,1352,1353],{"class":79}," s;\n",[52,1355,1356,1359,1361,1364],{"class":54,"line":218},[52,1357,1358],{"class":79},"    s.name ",[52,1360,292],{"class":58},[52,1362,1363],{"class":62}," \"张三\"",[52,1365,80],{"class":79},[52,1367,1368,1371,1373,1376],{"class":54,"line":223},[52,1369,1370],{"class":79},"    s.age ",[52,1372,292],{"class":58},[52,1374,1375],{"class":308}," 20",[52,1377,80],{"class":79},[52,1379,1380,1383,1385,1388],{"class":54,"line":230},[52,1381,1382],{"class":79},"    s.score ",[52,1384,292],{"class":58},[52,1386,1387],{"class":308}," 85",[52,1389,80],{"class":79},[52,1391,1392,1394,1396,1399,1401],{"class":54,"line":239},[52,1393,336],{"class":79},[52,1395,339],{"class":58},[52,1397,1398],{"class":62},"\"值传递:\"",[52,1400,339],{"class":58},[52,1402,357],{"class":79},[52,1404,1405,1408],{"class":54,"line":251},[52,1406,1407],{"class":75},"    printStudent1",[52,1409,1410],{"class":79},"(s);\n",[52,1412,1413,1415,1417,1420,1422],{"class":54,"line":256},[52,1414,336],{"class":79},[52,1416,339],{"class":58},[52,1418,1419],{"class":62},"\"地址传递:\"",[52,1421,339],{"class":58},[52,1423,357],{"class":79},[52,1425,1426,1429,1431,1434],{"class":54,"line":262},[52,1427,1428],{"class":75},"    printStudent2",[52,1430,1216],{"class":79},[52,1432,1433],{"class":58},"&",[52,1435,1436],{"class":79},"s); \n",[52,1438,1439,1442,1445],{"class":54,"line":268},[52,1440,1441],{"class":58},"    return",[52,1443,1444],{"class":308}," 0",[52,1446,80],{"class":79},[52,1448,1449],{"class":54,"line":280},[52,1450,452],{"class":79},[14,1452,1453],{},"注意：",[29,1455,1456,1459],{},[32,1457,1458],{},"1.先定义结构体，不要在函数中写结构体的定义",[32,1460,1461],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[18,1463,1465],{"id":1464},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,1467,1468],{},"用const防止误操作",[42,1470,1472],{"className":44,"code":1471,"language":46,"meta":47,"style":47},"#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",[49,1473,1474,1480,1490,1496,1501,1505,1509,1515,1521,1525,1541,1545,1568,1572,1580,1584,1605,1612,1616],{"__ignoreMap":47},[52,1475,1476,1478],{"class":54,"line":55},[52,1477,59],{"class":58},[52,1479,63],{"class":62},[52,1481,1482,1484,1486,1488],{"class":54,"line":66},[52,1483,69],{"class":58},[52,1485,72],{"class":58},[52,1487,76],{"class":75},[52,1489,80],{"class":79},[52,1491,1492,1494],{"class":54,"line":83},[52,1493,59],{"class":58},[52,1495,88],{"class":62},[52,1497,1498],{"class":54,"line":91},[52,1499,1500],{"class":79},"sctuct Student\n",[52,1502,1503],{"class":54,"line":98},[52,1504,110],{"class":79},[52,1506,1507],{"class":54,"line":107},[52,1508,135],{"class":79},[52,1510,1511,1513],{"class":54,"line":113},[52,1512,147],{"class":58},[52,1514,150],{"class":79},[52,1516,1517,1519],{"class":54,"line":119},[52,1518,147],{"class":58},[52,1520,164],{"class":79},[52,1522,1523],{"class":54,"line":126},[52,1524,170],{"class":79},[52,1526,1527,1529,1532,1534,1537,1539],{"class":54,"line":132},[52,1528,1210],{"class":58},[52,1530,1531],{"class":75}," printStudents",[52,1533,1216],{"class":79},[52,1535,1536],{"class":75},"student",[52,1538,841],{"class":1223},[52,1540,708],{"class":79},[52,1542,1543],{"class":54,"line":138},[52,1544,110],{"class":79},[52,1546,1547,1549,1551,1554,1556,1559,1561,1564,1566],{"class":54,"line":144},[52,1548,336],{"class":79},[52,1550,339],{"class":58},[52,1552,1553],{"class":79},"s.name",[52,1555,339],{"class":58},[52,1557,1558],{"class":79},"s.age",[52,1560,339],{"class":58},[52,1562,1563],{"class":79},"s.score",[52,1565,339],{"class":58},[52,1567,357],{"class":79},[52,1569,1570],{"class":54,"line":153},[52,1571,452],{"class":79},[52,1573,1574,1576,1578],{"class":54,"line":159},[52,1575,242],{"class":58},[52,1577,245],{"class":75},[52,1579,1038],{"class":79},[52,1581,1582],{"class":54,"line":167},[52,1583,110],{"class":79},[52,1585,1586,1589,1591,1593,1595,1597,1599,1601,1603],{"class":54,"line":173},[52,1587,1588],{"class":79},"    Student s",[52,1590,292],{"class":58},[52,1592,383],{"class":79},[52,1594,295],{"class":62},[52,1596,389],{"class":79},[52,1598,309],{"class":308},[52,1600,389],{"class":79},[52,1602,309],{"class":308},[52,1604,170],{"class":79},[52,1606,1607,1610],{"class":54,"line":181},[52,1608,1609],{"class":75},"    printStudent",[52,1611,1410],{"class":79},[52,1613,1614],{"class":54,"line":186},[52,1615,123],{"emptyLinePlaceholder":122},[52,1617,1618],{"class":54,"line":191},[52,1619,452],{"class":79},[14,1621,1453],{},[29,1623,1624,1627,1630],{},[32,1625,1626],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[32,1628,1629],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[32,1631,1632],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[42,1634,1636],{"className":44,"code":1635,"language":46,"meta":47,"style":47},"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",[49,1637,1638,1658,1662,1667,1687],{"__ignoreMap":47},[52,1639,1640,1642,1644,1646,1649,1652,1654,1656],{"class":54,"line":55},[52,1641,1210],{"class":58},[52,1643,1531],{"class":75},[52,1645,1216],{"class":79},[52,1647,1648],{"class":58},"const",[52,1650,1651],{"class":75}," student",[52,1653,872],{"class":58},[52,1655,1291],{"class":1223},[52,1657,708],{"class":79},[52,1659,1660],{"class":54,"line":66},[52,1661,110],{"class":79},[52,1663,1664],{"class":54,"line":83},[52,1665,1666],{"class":94},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[52,1668,1669,1671,1673,1675,1677,1679,1681,1683,1685],{"class":54,"line":91},[52,1670,336],{"class":79},[52,1672,339],{"class":58},[52,1674,1553],{"class":79},[52,1676,339],{"class":58},[52,1678,1558],{"class":79},[52,1680,339],{"class":58},[52,1682,1563],{"class":79},[52,1684,339],{"class":58},[52,1686,357],{"class":79},[52,1688,1689],{"class":54,"line":98},[52,1690,452],{"class":79},[18,1692,1694],{"id":1693},"_47案例","4.7案例",[1696,1697,1698],"ol",{},[32,1699,1700],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[42,1702,1704],{"className":44,"code":1703,"language":46,"meta":47,"style":47},"#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",[49,1705,1706,1712,1722,1728,1735,1739,1745,1749,1754,1760,1766,1770,1774,1780,1784,1789,1794,1809,1813,1818,1845,1849,1861,1888,1892,1904,1914,1918,1923,1954,1959,1971,1980,2014,2025,2035,2040,2044,2048,2053,2077,2081,2105,2109,2128,2154,2158,2184,2207,2231,2236,2241,2246,2255,2260,2266,2295,2301,2316,2322,2351,2360,2366,2374,2379],{"__ignoreMap":47},[52,1707,1708,1710],{"class":54,"line":55},[52,1709,59],{"class":58},[52,1711,63],{"class":62},[52,1713,1714,1716,1718,1720],{"class":54,"line":66},[52,1715,69],{"class":58},[52,1717,72],{"class":58},[52,1719,76],{"class":75},[52,1721,80],{"class":79},[52,1723,1724,1726],{"class":54,"line":83},[52,1725,59],{"class":58},[52,1727,88],{"class":62},[52,1729,1730,1732],{"class":54,"line":91},[52,1731,59],{"class":58},[52,1733,1734],{"class":62},"\u003Cctime>\n",[52,1736,1737],{"class":54,"line":98},[52,1738,954],{"class":94},[52,1740,1741,1743],{"class":54,"line":107},[52,1742,101],{"class":58},[52,1744,104],{"class":75},[52,1746,1747],{"class":54,"line":113},[52,1748,110],{"class":79},[52,1750,1751],{"class":54,"line":119},[52,1752,1753],{"class":79},"    string sName;\n",[52,1755,1756,1758],{"class":54,"line":126},[52,1757,147],{"class":58},[52,1759,150],{"class":79},[52,1761,1762,1764],{"class":54,"line":132},[52,1763,147],{"class":58},[52,1765,164],{"class":79},[52,1767,1768],{"class":54,"line":138},[52,1769,170],{"class":79},[52,1771,1772],{"class":54,"line":144},[52,1773,992],{"class":94},[52,1775,1776,1778],{"class":54,"line":153},[52,1777,101],{"class":58},[52,1779,999],{"class":75},[52,1781,1782],{"class":54,"line":159},[52,1783,110],{"class":79},[52,1785,1786],{"class":54,"line":167},[52,1787,1788],{"class":79},"    string tName;\n",[52,1790,1791],{"class":54,"line":173},[52,1792,1793],{"class":94},"    \u002F\u002F学生数组\n",[52,1795,1796,1798,1800,1803,1806],{"class":54,"line":181},[52,1797,271],{"class":58},[52,1799,274],{"class":75},[52,1801,1802],{"class":79}," sArray[",[52,1804,1805],{"class":308},"5",[52,1807,1808],{"class":79},"];\n",[52,1810,1811],{"class":54,"line":186},[52,1812,170],{"class":79},[52,1814,1815],{"class":54,"line":191},[52,1816,1817],{"class":94},"\u002F\u002F给老师和学生赋值的函数\n",[52,1819,1820,1822,1825,1827,1829,1832,1835,1838,1840,1843],{"class":54,"line":196},[52,1821,1210],{"class":58},[52,1823,1824],{"class":75}," allocateSpace",[52,1826,1216],{"class":79},[52,1828,101],{"class":58},[52,1830,1831],{"class":75}," Teacher",[52,1833,1834],{"class":1223}," tArray",[52,1836,1837],{"class":79},"[],",[52,1839,242],{"class":58},[52,1841,1842],{"class":1223}," len",[52,1844,708],{"class":79},[52,1846,1847],{"class":54,"line":201},[52,1848,110],{"class":79},[52,1850,1851,1854,1856,1859],{"class":54,"line":206},[52,1852,1853],{"class":79},"    string nameSeed",[52,1855,292],{"class":58},[52,1857,1858],{"class":62},"\"ABCDE\"",[52,1860,80],{"class":79},[52,1862,1863,1865,1867,1869,1872,1874,1876,1879,1881,1884,1886],{"class":54,"line":211},[52,1864,679],{"class":58},[52,1866,682],{"class":79},[52,1868,242],{"class":58},[52,1870,1871],{"class":79}," i ",[52,1873,292],{"class":58},[52,1875,1444],{"class":308},[52,1877,1878],{"class":79},"; i ",[52,1880,698],{"class":58},[52,1882,1883],{"class":79}," len; i",[52,1885,705],{"class":58},[52,1887,708],{"class":79},[52,1889,1890],{"class":54,"line":218},[52,1891,575],{"class":79},[52,1893,1894,1897,1899,1902],{"class":54,"line":223},[52,1895,1896],{"class":79},"        tArray[i].tName ",[52,1898,292],{"class":58},[52,1900,1901],{"class":62}," \"Teacher_\"",[52,1903,80],{"class":79},[52,1905,1906,1908,1911],{"class":54,"line":230},[52,1907,1896],{"class":79},[52,1909,1910],{"class":58},"+=",[52,1912,1913],{"class":79},"nameSeed[i];\n",[52,1915,1916],{"class":54,"line":239},[52,1917,123],{"emptyLinePlaceholder":122},[52,1919,1920],{"class":54,"line":251},[52,1921,1922],{"class":94},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[52,1924,1925,1928,1930,1932,1935,1937,1939,1942,1944,1947,1950,1952],{"class":54,"line":256},[52,1926,1927],{"class":58},"        for",[52,1929,682],{"class":79},[52,1931,242],{"class":58},[52,1933,1934],{"class":79}," j ",[52,1936,292],{"class":58},[52,1938,1444],{"class":308},[52,1940,1941],{"class":79},"; j ",[52,1943,698],{"class":58},[52,1945,1946],{"class":308}," 5",[52,1948,1949],{"class":79},"; j",[52,1951,705],{"class":58},[52,1953,708],{"class":79},[52,1955,1956],{"class":54,"line":262},[52,1957,1958],{"class":79},"        {\n",[52,1960,1961,1964,1966,1969],{"class":54,"line":268},[52,1962,1963],{"class":79},"            tArray[i].sArray[j].sName ",[52,1965,292],{"class":58},[52,1967,1968],{"class":62}," \"Student_\"",[52,1970,80],{"class":79},[52,1972,1973,1975,1977],{"class":54,"line":280},[52,1974,1963],{"class":79},[52,1976,1910],{"class":58},[52,1978,1979],{"class":79}," nameSeed[j];\n",[52,1981,1982,1985,1988,1990,1993,1996,1999,2002,2005,2008,2011],{"class":54,"line":286},[52,1983,1984],{"class":58},"            int",[52,1986,1987],{"class":79}," random",[52,1989,292],{"class":58},[52,1991,1992],{"class":75},"rand",[52,1994,1995],{"class":79},"()",[52,1997,1998],{"class":58},"%",[52,2000,2001],{"class":308},"60",[52,2003,2004],{"class":58},"+",[52,2006,2007],{"class":308},"40",[52,2009,2010],{"class":79},";",[52,2012,2013],{"class":94},"\u002F\u002F40~99\n",[52,2015,2016,2019,2021,2023],{"class":54,"line":300},[52,2017,2018],{"class":79},"            tArray[i].sArray[j].age ",[52,2020,292],{"class":58},[52,2022,1375],{"class":308},[52,2024,80],{"class":79},[52,2026,2027,2030,2032],{"class":54,"line":314},[52,2028,2029],{"class":79},"            tArray[i].sArray[j].score ",[52,2031,292],{"class":58},[52,2033,2034],{"class":79}," random;\n",[52,2036,2037],{"class":54,"line":327},[52,2038,2039],{"class":79},"        }\n",[52,2041,2042],{"class":54,"line":333},[52,2043,616],{"class":79},[52,2045,2046],{"class":54,"line":360},[52,2047,452],{"class":79},[52,2049,2050],{"class":54,"line":365},[52,2051,2052],{"class":94},"\u002F\u002F打印所有信息的函数\n",[52,2054,2055,2057,2060,2062,2064,2066,2068,2071,2073,2075],{"class":54,"line":371},[52,2056,1210],{"class":58},[52,2058,2059],{"class":75}," printInfo",[52,2061,1216],{"class":79},[52,2063,101],{"class":58},[52,2065,1831],{"class":75},[52,2067,1834],{"class":1223},[52,2069,2070],{"class":79},"[], ",[52,2072,242],{"class":58},[52,2074,1842],{"class":1223},[52,2076,708],{"class":79},[52,2078,2079],{"class":54,"line":400},[52,2080,110],{"class":79},[52,2082,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103],{"class":54,"line":405},[52,2084,679],{"class":58},[52,2086,682],{"class":79},[52,2088,242],{"class":58},[52,2090,1871],{"class":79},[52,2092,292],{"class":58},[52,2094,1444],{"class":308},[52,2096,1878],{"class":79},[52,2098,698],{"class":58},[52,2100,1883],{"class":79},[52,2102,705],{"class":58},[52,2104,708],{"class":79},[52,2106,2107],{"class":54,"line":411},[52,2108,575],{"class":79},[52,2110,2111,2114,2116,2119,2121,2124,2126],{"class":54,"line":424},[52,2112,2113],{"class":79},"        cout ",[52,2115,339],{"class":58},[52,2117,2118],{"class":62}," \"Teacher: \"",[52,2120,1247],{"class":58},[52,2122,2123],{"class":79}," tArray[i].tName ",[52,2125,339],{"class":58},[52,2127,1264],{"class":79},[52,2129,2130,2132,2134,2136,2138,2140,2142,2144,2146,2148,2150,2152],{"class":54,"line":436},[52,2131,1927],{"class":58},[52,2133,682],{"class":79},[52,2135,242],{"class":58},[52,2137,1934],{"class":79},[52,2139,292],{"class":58},[52,2141,1444],{"class":308},[52,2143,1941],{"class":79},[52,2145,698],{"class":58},[52,2147,1946],{"class":308},[52,2149,1949],{"class":79},[52,2151,705],{"class":58},[52,2153,708],{"class":79},[52,2155,2156],{"class":54,"line":449},[52,2157,1958],{"class":79},[52,2159,2161,2164,2166,2169,2172,2175,2177,2180,2182],{"class":54,"line":2160},47,[52,2162,2163],{"class":79},"            cout ",[52,2165,339],{"class":58},[52,2167,2168],{"class":62}," \"",[52,2170,2171],{"class":308},"\\t",[52,2173,2174],{"class":62},"Student: \"",[52,2176,1247],{"class":58},[52,2178,2179],{"class":79}," tArray[i].sArray[j].sName",[52,2181,339],{"class":58},[52,2183,357],{"class":79},[52,2185,2187,2189,2191,2193,2195,2198,2200,2203,2205],{"class":54,"line":2186},48,[52,2188,2163],{"class":79},[52,2190,339],{"class":58},[52,2192,2168],{"class":62},[52,2194,2171],{"class":308},[52,2196,2197],{"class":62},"Age: \"",[52,2199,1247],{"class":58},[52,2201,2202],{"class":79}," tArray[i].sArray[j].age ",[52,2204,339],{"class":58},[52,2206,1264],{"class":79},[52,2208,2210,2212,2214,2216,2218,2221,2223,2226,2228],{"class":54,"line":2209},49,[52,2211,2163],{"class":79},[52,2213,339],{"class":58},[52,2215,2168],{"class":62},[52,2217,2171],{"class":308},[52,2219,2220],{"class":62},"Score: \"",[52,2222,1247],{"class":58},[52,2224,2225],{"class":79}," tArray[i].sArray[j].score ",[52,2227,339],{"class":58},[52,2229,2230],{"class":79}," endl;   \n",[52,2232,2234],{"class":54,"line":2233},50,[52,2235,2039],{"class":79},[52,2237,2239],{"class":54,"line":2238},51,[52,2240,616],{"class":79},[52,2242,2244],{"class":54,"line":2243},52,[52,2245,452],{"class":79},[52,2247,2249,2251,2253],{"class":54,"line":2248},53,[52,2250,242],{"class":58},[52,2252,245],{"class":75},[52,2254,248],{"class":79},[52,2256,2258],{"class":54,"line":2257},54,[52,2259,110],{"class":79},[52,2261,2263],{"class":54,"line":2262},55,[52,2264,2265],{"class":94},"    \u002F\u002F随机数种子\n",[52,2267,2269,2272,2275,2278,2281,2284,2287,2289,2292],{"class":54,"line":2268},56,[52,2270,2271],{"class":75},"    srand",[52,2273,2274],{"class":79},"((",[52,2276,2277],{"class":58},"unsigned",[52,2279,2280],{"class":58}," int",[52,2282,2283],{"class":79},")",[52,2285,2286],{"class":75},"time",[52,2288,1216],{"class":79},[52,2290,2291],{"class":308},"NULL",[52,2293,2294],{"class":79},"));\n",[52,2296,2298],{"class":54,"line":2297},57,[52,2299,2300],{"class":94},"    \u002F\u002F1.创建3名老师的数组\n",[52,2302,2304,2306,2308,2311,2314],{"class":54,"line":2303},58,[52,2305,271],{"class":58},[52,2307,1831],{"class":75},[52,2309,2310],{"class":79}," tArray[",[52,2312,2313],{"class":308},"3",[52,2315,1808],{"class":79},[52,2317,2319],{"class":54,"line":2318},59,[52,2320,2321],{"class":94},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[52,2323,2325,2327,2330,2332,2335,2338,2341,2343,2346,2348],{"class":54,"line":2324},60,[52,2326,147],{"class":58},[52,2328,2329],{"class":79}," len ",[52,2331,292],{"class":58},[52,2333,2334],{"class":58}," sizeof",[52,2336,2337],{"class":79},"(tArray) ",[52,2339,2340],{"class":58},"\u002F",[52,2342,2334],{"class":58},[52,2344,2345],{"class":79},"(tArray[",[52,2347,692],{"class":308},[52,2349,2350],{"class":79},"]);\n",[52,2352,2354,2357],{"class":54,"line":2353},61,[52,2355,2356],{"class":75},"    allocateSpace",[52,2358,2359],{"class":79},"(tArray, len);\n",[52,2361,2363],{"class":54,"line":2362},62,[52,2364,2365],{"class":94},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[52,2367,2369,2372],{"class":54,"line":2368},63,[52,2370,2371],{"class":75},"    printInfo",[52,2373,2359],{"class":79},[52,2375,2377],{"class":54,"line":2376},64,[52,2378,123],{"emptyLinePlaceholder":122},[52,2380,2382],{"class":54,"line":2381},65,[52,2383,452],{"class":79},[1696,2385,2386],{"start":66},[32,2387,2388,2392],{},[2389,2390,2391],"strong",{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,2394,2395],{},"五名英雄信息如下：",[42,2397,2401],{"className":2398,"code":2399,"language":2400,"meta":47,"style":47},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[49,2402,2403,2422,2440,2457,2475],{"__ignoreMap":47},[52,2404,2405,2407,2410,2412,2415,2417,2420],{"class":54,"line":55},[52,2406,580],{"class":79},[52,2408,2409],{"class":62},"\"刘备\"",[52,2411,389],{"class":79},[52,2413,2414],{"class":308},"23",[52,2416,389],{"class":79},[52,2418,2419],{"class":62},"\"男\"",[52,2421,594],{"class":79},[52,2423,2424,2426,2429,2431,2434,2436,2438],{"class":54,"line":66},[52,2425,580],{"class":79},[52,2427,2428],{"class":62},"\"关羽\"",[52,2430,389],{"class":79},[52,2432,2433],{"class":308},"22",[52,2435,389],{"class":79},[52,2437,2419],{"class":62},[52,2439,594],{"class":79},[52,2441,2442,2444,2447,2449,2451,2453,2455],{"class":54,"line":83},[52,2443,580],{"class":79},[52,2445,2446],{"class":62},"\"张飞\"",[52,2448,389],{"class":79},[52,2450,444],{"class":308},[52,2452,389],{"class":79},[52,2454,2419],{"class":62},[52,2456,594],{"class":79},[52,2458,2459,2461,2464,2466,2469,2471,2473],{"class":54,"line":91},[52,2460,580],{"class":79},[52,2462,2463],{"class":62},"\"赵云\"",[52,2465,389],{"class":79},[52,2467,2468],{"class":308},"21",[52,2470,389],{"class":79},[52,2472,2419],{"class":62},[52,2474,594],{"class":79},[52,2476,2477,2479,2482,2484,2487,2489,2492],{"class":54,"line":98},[52,2478,580],{"class":79},[52,2480,2481],{"class":62},"\"貂蝉\"",[52,2483,389],{"class":79},[52,2485,2486],{"class":308},"19",[52,2488,389],{"class":79},[52,2490,2491],{"class":62},"\"女\"",[52,2493,594],{"class":79},[14,2495,2496],{},"代码：",[42,2498,2500],{"className":44,"code":2499,"language":46,"meta":47,"style":47},"#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",[49,2501,2502,2508,2518,2524,2531,2535,2539,2545,2550,2554,2559,2583,2587,2612,2616,2654,2659,2690,2695,2711,2738,2759,2764,2769,2773,2777,2782,2804,2808,2832,2836,2899,2903,2907,2915,2919,2924,2935,2939,2955,2971,2987,3003,3019,3024,3046,3069,3074,3087,3094,3099,3106,3111,3124,3130],{"__ignoreMap":47},[52,2503,2504,2506],{"class":54,"line":55},[52,2505,59],{"class":58},[52,2507,63],{"class":62},[52,2509,2510,2512,2514,2516],{"class":54,"line":66},[52,2511,69],{"class":58},[52,2513,72],{"class":58},[52,2515,76],{"class":75},[52,2517,80],{"class":79},[52,2519,2520,2522],{"class":54,"line":83},[52,2521,59],{"class":58},[52,2523,88],{"class":62},[52,2525,2526,2528],{"class":54,"line":91},[52,2527,101],{"class":58},[52,2529,2530],{"class":75}," Sanguo\n",[52,2532,2533],{"class":54,"line":98},[52,2534,110],{"class":79},[52,2536,2537],{"class":54,"line":107},[52,2538,135],{"class":79},[52,2540,2541,2543],{"class":54,"line":113},[52,2542,147],{"class":58},[52,2544,150],{"class":79},[52,2546,2547],{"class":54,"line":119},[52,2548,2549],{"class":79},"    string gender;\n",[52,2551,2552],{"class":54,"line":126},[52,2553,170],{"class":79},[52,2555,2556],{"class":54,"line":132},[52,2557,2558],{"class":94},"\u002F\u002F定义排序函数\n",[52,2560,2561,2563,2566,2568,2571,2573,2575,2577,2579,2581],{"class":54,"line":138},[52,2562,1210],{"class":58},[52,2564,2565],{"class":75}," bubbleSort",[52,2567,1216],{"class":79},[52,2569,2570],{"class":75},"Sanguo",[52,2572,872],{"class":58},[52,2574,1291],{"class":1223},[52,2576,389],{"class":79},[52,2578,242],{"class":58},[52,2580,1842],{"class":1223},[52,2582,708],{"class":79},[52,2584,2585],{"class":54,"line":144},[52,2586,110],{"class":79},[52,2588,2589,2591,2593,2595,2597,2599,2601,2603,2605,2608,2610],{"class":54,"line":153},[52,2590,679],{"class":58},[52,2592,1216],{"class":79},[52,2594,242],{"class":58},[52,2596,687],{"class":79},[52,2598,292],{"class":58},[52,2600,692],{"class":308},[52,2602,695],{"class":79},[52,2604,698],{"class":58},[52,2606,2607],{"class":79},"len;i",[52,2609,705],{"class":58},[52,2611,708],{"class":79},[52,2613,2614],{"class":54,"line":159},[52,2615,575],{"class":79},[52,2617,2618,2621,2623,2625,2628,2630,2632,2635,2637,2640,2643,2645,2647,2650,2652],{"class":54,"line":167},[52,2619,2620],{"class":58},"     for",[52,2622,682],{"class":79},[52,2624,242],{"class":58},[52,2626,2627],{"class":79}," j",[52,2629,292],{"class":58},[52,2631,692],{"class":308},[52,2633,2634],{"class":79},";j",[52,2636,698],{"class":58},[52,2638,2639],{"class":79},"len",[52,2641,2642],{"class":58},"-",[52,2644,629],{"class":308},[52,2646,2642],{"class":58},[52,2648,2649],{"class":79},"i;j",[52,2651,705],{"class":58},[52,2653,708],{"class":79},[52,2655,2656],{"class":54,"line":173},[52,2657,2658],{"class":79},"     {\n",[52,2660,2661,2664,2667,2669,2672,2675,2678,2680,2683,2685,2687],{"class":54,"line":181},[52,2662,2663],{"class":58},"         if",[52,2665,2666],{"class":79}," ((s",[52,2668,2004],{"class":58},[52,2670,2671],{"class":79},"j)->age ",[52,2673,2674],{"class":58},">",[52,2676,2677],{"class":79}," (s",[52,2679,2004],{"class":58},[52,2681,2682],{"class":79},"j",[52,2684,2004],{"class":58},[52,2686,629],{"class":308},[52,2688,2689],{"class":79},")->age)\n",[52,2691,2692],{"class":54,"line":186},[52,2693,2694],{"class":79},"         {\n",[52,2696,2697,2700,2703,2706,2708],{"class":54,"line":191},[52,2698,2699],{"class":79},"             Sanguo temp",[52,2701,2702],{"class":58},"=*",[52,2704,2705],{"class":79},"(s",[52,2707,2004],{"class":58},[52,2709,2710],{"class":79},"j);\n",[52,2712,2713,2716,2718,2720,2723,2725,2727,2729,2731,2733,2735],{"class":54,"line":196},[52,2714,2715],{"class":58},"             *",[52,2717,2705],{"class":79},[52,2719,2004],{"class":58},[52,2721,2722],{"class":79},"j)",[52,2724,2702],{"class":58},[52,2726,2705],{"class":79},[52,2728,2004],{"class":58},[52,2730,2682],{"class":79},[52,2732,2004],{"class":58},[52,2734,629],{"class":308},[52,2736,2737],{"class":79},");\n",[52,2739,2740,2742,2744,2746,2748,2750,2752,2754,2756],{"class":54,"line":201},[52,2741,2715],{"class":58},[52,2743,2705],{"class":79},[52,2745,2004],{"class":58},[52,2747,2682],{"class":79},[52,2749,2004],{"class":58},[52,2751,629],{"class":308},[52,2753,2283],{"class":79},[52,2755,292],{"class":58},[52,2757,2758],{"class":79},"temp;\n",[52,2760,2761],{"class":54,"line":206},[52,2762,2763],{"class":79},"         }\n",[52,2765,2766],{"class":54,"line":211},[52,2767,2768],{"class":79},"     }\n",[52,2770,2771],{"class":54,"line":218},[52,2772,616],{"class":79},[52,2774,2775],{"class":54,"line":223},[52,2776,452],{"class":79},[52,2778,2779],{"class":54,"line":230},[52,2780,2781],{"class":94},"\u002F\u002F定义打印函数\n",[52,2783,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802],{"class":54,"line":239},[52,2785,1210],{"class":58},[52,2787,2059],{"class":75},[52,2789,1216],{"class":79},[52,2791,2570],{"class":75},[52,2793,872],{"class":58},[52,2795,1291],{"class":1223},[52,2797,389],{"class":79},[52,2799,242],{"class":58},[52,2801,1842],{"class":1223},[52,2803,708],{"class":79},[52,2805,2806],{"class":54,"line":251},[52,2807,110],{"class":79},[52,2809,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830],{"class":54,"line":256},[52,2811,679],{"class":58},[52,2813,682],{"class":79},[52,2815,242],{"class":58},[52,2817,687],{"class":79},[52,2819,292],{"class":58},[52,2821,692],{"class":308},[52,2823,695],{"class":79},[52,2825,698],{"class":58},[52,2827,2607],{"class":79},[52,2829,705],{"class":58},[52,2831,708],{"class":79},[52,2833,2834],{"class":54,"line":262},[52,2835,575],{"class":79},[52,2837,2838,2840,2842,2845,2847,2850,2852,2854,2856,2859,2861,2863,2865,2868,2870,2872,2874,2877,2879,2881,2883,2886,2888,2890,2892,2895,2897],{"class":54,"line":268},[52,2839,717],{"class":79},[52,2841,339],{"class":58},[52,2843,2844],{"class":62},"\"",[52,2846,2171],{"class":308},[52,2848,2849],{"class":62},"姓名：\"",[52,2851,339],{"class":58},[52,2853,2705],{"class":79},[52,2855,2004],{"class":58},[52,2857,2858],{"class":79},"i)->name",[52,2860,339],{"class":58},[52,2862,2844],{"class":62},[52,2864,2171],{"class":308},[52,2866,2867],{"class":62},"年龄：\"",[52,2869,339],{"class":58},[52,2871,2705],{"class":79},[52,2873,2004],{"class":58},[52,2875,2876],{"class":79},"i)->age",[52,2878,339],{"class":58},[52,2880,2844],{"class":62},[52,2882,2171],{"class":308},[52,2884,2885],{"class":62},"性别：\"",[52,2887,339],{"class":58},[52,2889,2705],{"class":79},[52,2891,2004],{"class":58},[52,2893,2894],{"class":79},"i)->gender",[52,2896,339],{"class":58},[52,2898,357],{"class":79},[52,2900,2901],{"class":54,"line":280},[52,2902,616],{"class":79},[52,2904,2905],{"class":54,"line":286},[52,2906,452],{"class":79},[52,2908,2909,2911,2913],{"class":54,"line":300},[52,2910,242],{"class":58},[52,2912,245],{"class":75},[52,2914,248],{"class":79},[52,2916,2917],{"class":54,"line":314},[52,2918,110],{"class":79},[52,2920,2921],{"class":54,"line":327},[52,2922,2923],{"class":94},"    \u002F\u002F定义结构体变量\n",[52,2925,2926,2929,2931,2933],{"class":54,"line":333},[52,2927,2928],{"class":79},"    Sanguo s1[",[52,2930,1805],{"class":308},[52,2932,567],{"class":79},[52,2934,570],{"class":58},[52,2936,2937],{"class":54,"line":360},[52,2938,575],{"class":79},[52,2940,2941,2943,2945,2947,2949,2951,2953],{"class":54,"line":365},[52,2942,580],{"class":79},[52,2944,2409],{"class":62},[52,2946,389],{"class":79},[52,2948,2414],{"class":308},[52,2950,389],{"class":79},[52,2952,2419],{"class":62},[52,2954,594],{"class":79},[52,2956,2957,2959,2961,2963,2965,2967,2969],{"class":54,"line":371},[52,2958,580],{"class":79},[52,2960,2428],{"class":62},[52,2962,389],{"class":79},[52,2964,2433],{"class":308},[52,2966,389],{"class":79},[52,2968,2419],{"class":62},[52,2970,594],{"class":79},[52,2972,2973,2975,2977,2979,2981,2983,2985],{"class":54,"line":400},[52,2974,580],{"class":79},[52,2976,2446],{"class":62},[52,2978,389],{"class":79},[52,2980,444],{"class":308},[52,2982,389],{"class":79},[52,2984,2419],{"class":62},[52,2986,594],{"class":79},[52,2988,2989,2991,2993,2995,2997,2999,3001],{"class":54,"line":405},[52,2990,580],{"class":79},[52,2992,2463],{"class":62},[52,2994,389],{"class":79},[52,2996,2468],{"class":308},[52,2998,389],{"class":79},[52,3000,2419],{"class":62},[52,3002,594],{"class":79},[52,3004,3005,3007,3009,3011,3013,3015,3017],{"class":54,"line":411},[52,3006,580],{"class":79},[52,3008,2481],{"class":62},[52,3010,389],{"class":79},[52,3012,2486],{"class":308},[52,3014,389],{"class":79},[52,3016,2491],{"class":62},[52,3018,594],{"class":79},[52,3020,3021],{"class":54,"line":424},[52,3022,3023],{"class":79},"    };\n",[52,3025,3026,3028,3030,3033,3036,3039,3042,3044],{"class":54,"line":436},[52,3027,147],{"class":58},[52,3029,1842],{"class":79},[52,3031,3032],{"class":58},"=sizeof",[52,3034,3035],{"class":79},"(s1)",[52,3037,3038],{"class":58},"\u002Fsizeof",[52,3040,3041],{"class":79},"(s1[",[52,3043,692],{"class":308},[52,3045,2350],{"class":79},[52,3047,3048,3051,3054,3057,3059,3062,3065,3067],{"class":54,"line":449},[52,3049,3050],{"class":79},"    Sanguo ",[52,3052,3053],{"class":58},"*",[52,3055,3056],{"class":79},"s ",[52,3058,292],{"class":58},[52,3060,3061],{"class":58}," &",[52,3063,3064],{"class":79},"s1[",[52,3066,692],{"class":308},[52,3068,1808],{"class":79},[52,3070,3071],{"class":54,"line":2160},[52,3072,3073],{"class":94},"    \u002F\u002F排序前：\n",[52,3075,3076,3078,3080,3083,3085],{"class":54,"line":2186},[52,3077,1234],{"class":79},[52,3079,339],{"class":58},[52,3081,3082],{"class":62}," \"排序前：\"",[52,3084,1247],{"class":58},[52,3086,1264],{"class":79},[52,3088,3089,3091],{"class":54,"line":2209},[52,3090,2371],{"class":75},[52,3092,3093],{"class":79},"(s,len);\n",[52,3095,3096],{"class":54,"line":2233},[52,3097,3098],{"class":94},"    \u002F\u002F调用排序函数\n",[52,3100,3101,3104],{"class":54,"line":2238},[52,3102,3103],{"class":75},"    bubbleSort",[52,3105,3093],{"class":79},[52,3107,3108],{"class":54,"line":2243},[52,3109,3110],{"class":94},"    \u002F\u002F排序后\n",[52,3112,3113,3115,3117,3120,3122],{"class":54,"line":2248},[52,3114,1234],{"class":79},[52,3116,339],{"class":58},[52,3118,3119],{"class":62}," \"排序后：\"",[52,3121,1247],{"class":58},[52,3123,1264],{"class":79},[52,3125,3126,3128],{"class":54,"line":2257},[52,3127,2371],{"class":75},[52,3129,3093],{"class":79},[52,3131,3132],{"class":54,"line":2262},[52,3133,452],{"class":79},[14,3135,3136,3137,3139],{},"注意：使用指针时直接用传首地址**&s",[52,3138,692],{},"**",[3141,3142,3143],"style",{},"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":47,"searchDepth":66,"depth":66,"links":3145},[3146,3147,3148,3149,3150,3151,3152],{"id":20,"depth":66,"text":21},{"id":458,"depth":66,"text":459},{"id":747,"depth":66,"text":748},{"id":915,"depth":66,"text":916},{"id":1134,"depth":66,"text":1135},{"id":1464,"depth":66,"text":1465},{"id":1693,"depth":66,"text":1694},"md",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":5,"description":16},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",[3160,8129,9234,10645,13327,14678,16167,17256,26019,26032,26631,26657,26781,27022,27087,27105,27118,27165,27289,27458,27657,27837,28042,28178,28273,28310,28323,28633,29374,30082,30103,31123,32754,32905,32918,32930,33231,53043,53058,53075,53108,55980,79328,95473,95494,95607,95728,96498,97161,97522,97560,97666,97766,97809,97835,97896,99550,99651,99676,100167,100667,101747,102030,102772,103274,103286,105302,106966,108469,110167,112084,114003,116025,119495,119927,120390,121139,124083,124431,124453,124809,128116,128128,128531,128554,128701,128868,129073,129374,129931,130588,132519,134117,134766,136260,137691,138926,140620,142372,144782,144898,145833,146044,146929,148164,148392,148405,149560,151972,154340,157661,160138,161782,163559,165572,168624,170804,173331,175525],{"id":3161,"title":3162,"body":3163,"description":47,"extension":3153,"meta":8124,"navigation":122,"path":8125,"seo":8126,"stem":8127,"__hash__":8128},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":3164,"toc":8096},[3165,3168,3172,3175,3179,3190,3194,3199,3202,3205,3208,3211,3214,3237,3241,3244,3247,3250,3253,3300,3304,3322,3324,3338,3341,3349,3352,4184,4191,4207,4211,4294,4298,4304,4389,4393,4431,4435,4498,4502,4506,4513,4524,4528,4533,4537,4542,4546,4551,4555,4559,4564,4810,4815,4953,4958,5203,5206,5214,5218,5223,5325,5328,5615,5624,5723,5726,5729,5732,5735,5995,6000,6138,6141,6319,6322,6446,6449,6600,6604,6609,6612,6623,6631,6634,6739,6743,6747,6752,6802,6807,6812,6835,6840,6893,6896,6901,7075,7080,7362,7367,7763,7767,7772,7829,7834,7842,7845,7981,7984,8093],[10,3166,3162],{"id":3167},"_1基础入门",[18,3169,3171],{"id":3170},"_11注释","1.1注释",[14,3173,3174],{},"\u002F\u002F或者\u002F* *\u002F",[18,3176,3178],{"id":3177},"_12命名","1.2命名",[1696,3180,3181,3184,3187],{},[32,3182,3183],{},"字母数字下划线",[32,3185,3186],{},"开头必须是字母或_",[32,3188,3189],{},"不能使用关键词",[18,3191,3193],{"id":3192},"_13数据类型","1.3数据类型",[3195,3196,3198],"h3",{"id":3197},"_131整形","1.3.1整形",[14,3200,3201],{},"short 短整形 2",[14,3203,3204],{},"int 整形 4",[14,3206,3207],{},"long 长整形 win4 linux32位4 linux64位8",[14,3209,3210],{},"long long 长长整形 8",[14,3212,3213],{},"利用sizeof可以求数据类型占用的内存空间大小",[42,3215,3217],{"className":44,"code":3216,"language":46,"meta":47,"style":47},"sizeof(int)\nsizeof(num)\n",[49,3218,3219,3230],{"__ignoreMap":47},[52,3220,3221,3224,3226,3228],{"class":54,"line":55},[52,3222,3223],{"class":58},"sizeof",[52,3225,1216],{"class":79},[52,3227,242],{"class":58},[52,3229,708],{"class":79},[52,3231,3232,3234],{"class":54,"line":66},[52,3233,3223],{"class":58},[52,3235,3236],{"class":79},"(num)\n",[3195,3238,3240],{"id":3239},"_132浮点型","1.3.2浮点型",[14,3242,3243],{},"float 单精度 4节 7位有效数字",[14,3245,3246],{},"double 双精度 8节 15-16有效数字",[14,3248,3249],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,3251,3252],{},"注意点：",[42,3254,3256],{"className":44,"code":3255,"language":46,"meta":47,"style":47},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[49,3257,3258,3279],{"__ignoreMap":47},[52,3259,3260,3263,3266,3268,3271,3274,3276],{"class":54,"line":55},[52,3261,3262],{"class":58},"float",[52,3264,3265],{"class":79}," f1",[52,3267,292],{"class":58},[52,3269,3270],{"class":308},"3.14",[52,3272,3273],{"class":58},"f",[52,3275,2010],{"class":79},[52,3277,3278],{"class":94}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[52,3280,3281,3283,3286,3288,3290,3293,3295,3297],{"class":54,"line":66},[52,3282,3262],{"class":58},[52,3284,3285],{"class":79}," f2",[52,3287,292],{"class":58},[52,3289,2313],{"class":308},[52,3291,3292],{"class":58},"e",[52,3294,564],{"class":308},[52,3296,2010],{"class":79},[52,3298,3299],{"class":94}," \u002F\u002F科学记数法\n",[3195,3301,3303],{"id":3302},"_133字符型","1.3.3字符型",[42,3305,3307],{"className":44,"code":3306,"language":46,"meta":47,"style":47},"char ch='a'\n",[49,3308,3309],{"__ignoreMap":47},[52,3310,3311,3314,3317,3319],{"class":54,"line":55},[52,3312,3313],{"class":58},"char",[52,3315,3316],{"class":79}," ch",[52,3318,292],{"class":58},[52,3320,3321],{"class":62},"'a'\n",[14,3323,3252],{},[1696,3325,3326,3329,3332,3335],{},[32,3327,3328],{},"在显示字符型变量时，只能单引号，双引号x",[32,3330,3331],{},"单引号内只能一个字符，不能字符串",[32,3333,3334],{},"c和c++字符型变量只占用一个字符",[32,3336,3337],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,3339,3340],{},"ASCII码大致由以下两部分组成：",[1696,3342,3343,3346],{},[32,3344,3345],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[32,3347,3348],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,3350,3351],{},"ASCII码表格：",[3353,3354,3355,3398],"table",{},[3356,3357,3358],"thead",{},[3359,3360,3361,3368,3373,3377,3382,3386,3390,3394],"tr",{},[3362,3363,3364,3367],"th",{},[2389,3365,3366],{},"ASCII","值",[3362,3369,3370],{},[2389,3371,3372],{},"控制字符",[3362,3374,3375,3367],{},[2389,3376,3366],{},[3362,3378,3379],{},[2389,3380,3381],{},"字符",[3362,3383,3384,3367],{},[2389,3385,3366],{},[3362,3387,3388],{},[2389,3389,3381],{},[3362,3391,3392,3367],{},[2389,3393,3366],{},[3362,3395,3396],{},[2389,3397,3381],{},[3399,3400,3401,3427,3452,3475,3500,3525,3548,3571,3596,3620,3645,3669,3694,3719,3744,3770,3794,3818,3843,3867,3890,3914,3938,3962,3986,4011,4036,4062,4086,4109,4133,4158],"tbody",{},[3359,3402,3403,3406,3409,3412,3415,3418,3421,3424],{},[3404,3405,692],"td",{},[3404,3407,3408],{},"NUT",[3404,3410,3411],{},"32",[3404,3413,3414],{},"(space)",[3404,3416,3417],{},"64",[3404,3419,3420],{},"@",[3404,3422,3423],{},"96",[3404,3425,3426],{},"、",[3359,3428,3429,3431,3434,3437,3440,3443,3446,3449],{},[3404,3430,629],{},[3404,3432,3433],{},"SOH",[3404,3435,3436],{},"33",[3404,3438,3439],{},"!",[3404,3441,3442],{},"65",[3404,3444,3445],{},"A",[3404,3447,3448],{},"97",[3404,3450,3451],{},"a",[3359,3453,3454,3456,3459,3462,3464,3466,3469,3472],{},[3404,3455,564],{},[3404,3457,3458],{},"STX",[3404,3460,3461],{},"34",[3404,3463,2844],{},[3404,3465,322],{},[3404,3467,3468],{},"B",[3404,3470,3471],{},"98",[3404,3473,3474],{},"b",[3359,3476,3477,3479,3482,3485,3488,3491,3494,3497],{},[3404,3478,2313],{},[3404,3480,3481],{},"ETX",[3404,3483,3484],{},"35",[3404,3486,3487],{},"#",[3404,3489,3490],{},"67",[3404,3492,3493],{},"C",[3404,3495,3496],{},"99",[3404,3498,3499],{},"c",[3359,3501,3502,3505,3508,3511,3514,3517,3520,3522],{},[3404,3503,3504],{},"4",[3404,3506,3507],{},"EOT",[3404,3509,3510],{},"36",[3404,3512,3513],{},"$",[3404,3515,3516],{},"68",[3404,3518,3519],{},"D",[3404,3521,591],{},[3404,3523,3524],{},"d",[3359,3526,3527,3529,3532,3535,3537,3540,3543,3546],{},[3404,3528,1805],{},[3404,3530,3531],{},"ENQ",[3404,3533,3534],{},"37",[3404,3536,1998],{},[3404,3538,3539],{},"69",[3404,3541,3542],{},"E",[3404,3544,3545],{},"101",[3404,3547,3292],{},[3359,3549,3550,3552,3555,3558,3560,3563,3566,3569],{},[3404,3551,1125],{},[3404,3553,3554],{},"ACK",[3404,3556,3557],{},"38",[3404,3559,1433],{},[3404,3561,3562],{},"70",[3404,3564,3565],{},"F",[3404,3567,3568],{},"102",[3404,3570,3273],{},[3359,3572,3573,3576,3579,3582,3584,3587,3590,3593],{},[3404,3574,3575],{},"7",[3404,3577,3578],{},"BEL",[3404,3580,3581],{},"39",[3404,3583,389],{},[3404,3585,3586],{},"71",[3404,3588,3589],{},"G",[3404,3591,3592],{},"103",[3404,3594,3595],{},"g",[3359,3597,3598,3601,3604,3606,3608,3611,3614,3617],{},[3404,3599,3600],{},"8",[3404,3602,3603],{},"BS",[3404,3605,2007],{},[3404,3607,1216],{},[3404,3609,3610],{},"72",[3404,3612,3613],{},"H",[3404,3615,3616],{},"104",[3404,3618,3619],{},"h",[3359,3621,3622,3625,3628,3631,3633,3636,3639,3642],{},[3404,3623,3624],{},"9",[3404,3626,3627],{},"HT",[3404,3629,3630],{},"41",[3404,3632,2283],{},[3404,3634,3635],{},"73",[3404,3637,3638],{},"I",[3404,3640,3641],{},"105",[3404,3643,3644],{},"i",[3359,3646,3647,3650,3653,3656,3658,3661,3664,3667],{},[3404,3648,3649],{},"10",[3404,3651,3652],{},"LF",[3404,3654,3655],{},"42",[3404,3657,3053],{},[3404,3659,3660],{},"74",[3404,3662,3663],{},"J",[3404,3665,3666],{},"106",[3404,3668,2682],{},[3359,3670,3671,3674,3677,3680,3682,3685,3688,3691],{},[3404,3672,3673],{},"11",[3404,3675,3676],{},"VT",[3404,3678,3679],{},"43",[3404,3681,2004],{},[3404,3683,3684],{},"75",[3404,3686,3687],{},"K",[3404,3689,3690],{},"107",[3404,3692,3693],{},"k",[3359,3695,3696,3699,3702,3705,3707,3710,3713,3716],{},[3404,3697,3698],{},"12",[3404,3700,3701],{},"FF",[3404,3703,3704],{},"44",[3404,3706,389],{},[3404,3708,3709],{},"76",[3404,3711,3712],{},"L",[3404,3714,3715],{},"108",[3404,3717,3718],{},"l",[3359,3720,3721,3724,3727,3730,3732,3735,3738,3741],{},[3404,3722,3723],{},"13",[3404,3725,3726],{},"CR",[3404,3728,3729],{},"45",[3404,3731,2642],{},[3404,3733,3734],{},"77",[3404,3736,3737],{},"M",[3404,3739,3740],{},"109",[3404,3742,3743],{},"m",[3359,3745,3746,3749,3752,3755,3758,3761,3764,3767],{},[3404,3747,3748],{},"14",[3404,3750,3751],{},"SO",[3404,3753,3754],{},"46",[3404,3756,3757],{},".",[3404,3759,3760],{},"78",[3404,3762,3763],{},"N",[3404,3765,3766],{},"110",[3404,3768,3769],{},"n",[3359,3771,3772,3774,3777,3780,3782,3785,3788,3791],{},[3404,3773,605],{},[3404,3775,3776],{},"SI",[3404,3778,3779],{},"47",[3404,3781,2340],{},[3404,3783,3784],{},"79",[3404,3786,3787],{},"O",[3404,3789,3790],{},"111",[3404,3792,3793],{},"o",[3359,3795,3796,3799,3802,3805,3807,3810,3813,3816],{},[3404,3797,3798],{},"16",[3404,3800,3801],{},"DLE",[3404,3803,3804],{},"48",[3404,3806,692],{},[3404,3808,3809],{},"80",[3404,3811,3812],{},"P",[3404,3814,3815],{},"112",[3404,3817,14],{},[3359,3819,3820,3823,3826,3829,3831,3834,3837,3840],{},[3404,3821,3822],{},"17",[3404,3824,3825],{},"DCI",[3404,3827,3828],{},"49",[3404,3830,629],{},[3404,3832,3833],{},"81",[3404,3835,3836],{},"Q",[3404,3838,3839],{},"113",[3404,3841,3842],{},"q",[3359,3844,3845,3847,3850,3853,3855,3858,3861,3864],{},[3404,3846,309],{},[3404,3848,3849],{},"DC2",[3404,3851,3852],{},"50",[3404,3854,564],{},[3404,3856,3857],{},"82",[3404,3859,3860],{},"R",[3404,3862,3863],{},"114",[3404,3865,3866],{},"r",[3359,3868,3869,3871,3874,3877,3879,3882,3885,3888],{},[3404,3870,2486],{},[3404,3872,3873],{},"DC3",[3404,3875,3876],{},"51",[3404,3878,2313],{},[3404,3880,3881],{},"83",[3404,3883,3884],{},"S",[3404,3886,3887],{},"115",[3404,3889,1291],{},[3359,3891,3892,3894,3897,3900,3902,3905,3908,3911],{},[3404,3893,444],{},[3404,3895,3896],{},"DC4",[3404,3898,3899],{},"52",[3404,3901,3504],{},[3404,3903,3904],{},"84",[3404,3906,3907],{},"T",[3404,3909,3910],{},"116",[3404,3912,3913],{},"t",[3359,3915,3916,3918,3921,3924,3926,3929,3932,3935],{},[3404,3917,2468],{},[3404,3919,3920],{},"NAK",[3404,3922,3923],{},"53",[3404,3925,1805],{},[3404,3927,3928],{},"85",[3404,3930,3931],{},"U",[3404,3933,3934],{},"117",[3404,3936,3937],{},"u",[3359,3939,3940,3942,3945,3948,3950,3953,3956,3959],{},[3404,3941,2433],{},[3404,3943,3944],{},"SYN",[3404,3946,3947],{},"54",[3404,3949,1125],{},[3404,3951,3952],{},"86",[3404,3954,3955],{},"V",[3404,3957,3958],{},"118",[3404,3960,3961],{},"v",[3359,3963,3964,3966,3969,3972,3974,3977,3980,3983],{},[3404,3965,2414],{},[3404,3967,3968],{},"TB",[3404,3970,3971],{},"55",[3404,3973,3575],{},[3404,3975,3976],{},"87",[3404,3978,3979],{},"W",[3404,3981,3982],{},"119",[3404,3984,3985],{},"w",[3359,3987,3988,3991,3994,3997,3999,4002,4005,4008],{},[3404,3989,3990],{},"24",[3404,3992,3993],{},"CAN",[3404,3995,3996],{},"56",[3404,3998,3600],{},[3404,4000,4001],{},"88",[3404,4003,4004],{},"X",[3404,4006,4007],{},"120",[3404,4009,4010],{},"x",[3359,4012,4013,4016,4019,4022,4024,4027,4030,4033],{},[3404,4014,4015],{},"25",[3404,4017,4018],{},"EM",[3404,4020,4021],{},"57",[3404,4023,3624],{},[3404,4025,4026],{},"89",[3404,4028,4029],{},"Y",[3404,4031,4032],{},"121",[3404,4034,4035],{},"y",[3359,4037,4038,4041,4044,4047,4050,4053,4056,4059],{},[3404,4039,4040],{},"26",[3404,4042,4043],{},"SUB",[3404,4045,4046],{},"58",[3404,4048,4049],{},":",[3404,4051,4052],{},"90",[3404,4054,4055],{},"Z",[3404,4057,4058],{},"122",[3404,4060,4061],{},"z",[3359,4063,4064,4067,4070,4073,4075,4078,4081,4084],{},[3404,4065,4066],{},"27",[3404,4068,4069],{},"ESC",[3404,4071,4072],{},"59",[3404,4074,2010],{},[3404,4076,4077],{},"91",[3404,4079,4080],{},"[",[3404,4082,4083],{},"123",[3404,4085,383],{},[3359,4087,4088,4091,4094,4096,4098,4101,4103,4106],{},[3404,4089,4090],{},"28",[3404,4092,4093],{},"FS",[3404,4095,2001],{},[3404,4097,698],{},[3404,4099,4100],{},"92",[3404,4102,2340],{},[3404,4104,4105],{},"124",[3404,4107,4108],{},"|",[3359,4110,4111,4114,4117,4120,4122,4125,4127,4130],{},[3404,4112,4113],{},"29",[3404,4115,4116],{},"GS",[3404,4118,4119],{},"61",[3404,4121,292],{},[3404,4123,4124],{},"93",[3404,4126,567],{},[3404,4128,4129],{},"125",[3404,4131,4132],{},"}",[3359,4134,4135,4138,4141,4144,4146,4149,4152,4155],{},[3404,4136,4137],{},"30",[3404,4139,4140],{},"RS",[3404,4142,4143],{},"62",[3404,4145,2674],{},[3404,4147,4148],{},"94",[3404,4150,4151],{},"^",[3404,4153,4154],{},"126",[3404,4156,4157],{},"`",[3359,4159,4160,4163,4166,4169,4172,4175,4178,4181],{},[3404,4161,4162],{},"31",[3404,4164,4165],{},"US",[3404,4167,4168],{},"63",[3404,4170,4171],{},"?",[3404,4173,4174],{},"95",[3404,4176,4177],{},"_",[3404,4179,4180],{},"127",[3404,4182,4183],{},"DEL",[14,4185,4186,4187,4190],{},"ASCII 码大致由以下",[2389,4188,4189],{},"两部分组","成：",[29,4192,4193,4200],{},[32,4194,4195,4196,4199],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2389,4197,4198],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[32,4201,4202,4203,4206],{},"ASCII 打印字符：数字 ",[2389,4204,4205],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[3195,4208,4210],{"id":4209},"_134转义字符","1.3.4转义字符",[42,4212,4214],{"className":44,"code":4213,"language":46,"meta":47,"style":47},"\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",[49,4215,4216,4221,4236,4249,4254,4267,4272],{"__ignoreMap":47},[52,4217,4218],{"class":54,"line":55},[52,4219,4220],{"class":94},"\u002F\u002F换行符\n",[52,4222,4223,4226,4228,4231,4233],{"class":54,"line":66},[52,4224,4225],{"class":79},"cout ",[52,4227,339],{"class":58},[52,4229,4230],{"class":62},"\"hello world\u002Fn\"",[52,4232,2010],{"class":79},[52,4234,4235],{"class":94}," \u002F\u002F就等同于如下：\n",[52,4237,4238,4240,4242,4245,4247],{"class":54,"line":83},[52,4239,4225],{"class":79},[52,4241,339],{"class":58},[52,4243,4244],{"class":62},"\"hello world\"",[52,4246,339],{"class":58},[52,4248,357],{"class":79},[52,4250,4251],{"class":54,"line":91},[52,4252,4253],{"class":94},"\u002F\u002F反斜杠\n",[52,4255,4256,4258,4260,4263,4265],{"class":54,"line":98},[52,4257,4225],{"class":79},[52,4259,339],{"class":58},[52,4261,4262],{"class":62},"\"\u002F\u002F\"",[52,4264,339],{"class":58},[52,4266,357],{"class":79},[52,4268,4269],{"class":54,"line":107},[52,4270,4271],{"class":94},"\u002F\u002F水平制表符\n",[52,4273,4274,4276,4278,4281,4283,4286,4288,4291],{"class":54,"line":113},[52,4275,4225],{"class":79},[52,4277,339],{"class":58},[52,4279,4280],{"class":62},"\"aaaa",[52,4282,2171],{"class":308},[52,4284,4285],{"class":62},"helloworld\"",[52,4287,339],{"class":58},[52,4289,4290],{"class":79},"endl;",[52,4292,4293],{"class":94}," \u002F\u002F输出窗口时有对齐效果\n",[3195,4295,4297],{"id":4296},"_135字符串型","1.3.5字符串型",[14,4299,4300,4301,4303],{},"char 变量名",[52,4302],{},"=\"字符串值\"",[42,4305,4307],{"className":44,"code":4306,"language":46,"meta":47,"style":47},"\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",[49,4308,4309,4314,4319,4324,4329,4342,4355,4360,4365,4376],{"__ignoreMap":47},[52,4310,4311],{"class":54,"line":55},[52,4312,4313],{"class":94},"\u002F\u002Fc风格字符串\n",[52,4315,4316],{"class":54,"line":66},[52,4317,4318],{"class":94},"\u002F\u002F注意事项：\n",[52,4320,4321],{"class":54,"line":83},[52,4322,4323],{"class":94},"\u002F\u002F1.char字符串名[]\n",[52,4325,4326],{"class":54,"line":91},[52,4327,4328],{"class":94},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[52,4330,4331,4333,4336,4338,4340],{"class":54,"line":98},[52,4332,3313],{"class":58},[52,4334,4335],{"class":79}," str[]",[52,4337,292],{"class":58},[52,4339,4244],{"class":62},[52,4341,80],{"class":79},[52,4343,4344,4346,4348,4351,4353],{"class":54,"line":107},[52,4345,4225],{"class":79},[52,4347,339],{"class":58},[52,4349,4350],{"class":79},"str",[52,4352,339],{"class":58},[52,4354,357],{"class":79},[52,4356,4357],{"class":54,"line":113},[52,4358,4359],{"class":94},"\u002F\u002Fc++风格字符串\n",[52,4361,4362],{"class":54,"line":119},[52,4363,4364],{"class":94},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[52,4366,4367,4370,4372,4374],{"class":54,"line":126},[52,4368,4369],{"class":79},"string str2",[52,4371,292],{"class":58},[52,4373,4244],{"class":62},[52,4375,80],{"class":79},[52,4377,4378,4380,4382,4385,4387],{"class":54,"line":132},[52,4379,4225],{"class":79},[52,4381,339],{"class":58},[52,4383,4384],{"class":79},"str2",[52,4386,339],{"class":58},[52,4388,357],{"class":79},[3195,4390,4392],{"id":4391},"_136布尔类型bool","1.3.6布尔类型bool",[42,4394,4396],{"className":44,"code":4395,"language":46,"meta":47,"style":47},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[49,4397,4398,4413],{"__ignoreMap":47},[52,4399,4400,4403,4406,4408,4411],{"class":54,"line":55},[52,4401,4402],{"class":58},"bool",[52,4404,4405],{"class":79}," flag",[52,4407,292],{"class":58},[52,4409,4410],{"class":308},"true",[52,4412,80],{"class":79},[52,4414,4415,4418,4421,4424,4426,4428],{"class":54,"line":66},[52,4416,4417],{"class":79},"cout",[52,4419,4420],{"class":58},"\u003C\u003Csizeof",[52,4422,4423],{"class":79},"(flag)",[52,4425,339],{"class":58},[52,4427,4290],{"class":79},[52,4429,4430],{"class":94}," \u002F\u002F查看布尔占内存空间\n",[18,4432,4434],{"id":4433},"_14键盘输入cin","1.4键盘输入cin",[42,4436,4438],{"className":44,"code":4437,"language":46,"meta":47,"style":47},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[49,4439,4440,4453,4470,4481],{"__ignoreMap":47},[52,4441,4442,4444,4447,4449,4451],{"class":54,"line":55},[52,4443,242],{"class":58},[52,4445,4446],{"class":79}," a",[52,4448,292],{"class":58},[52,4450,692],{"class":308},[52,4452,80],{"class":79},[52,4454,4455,4457,4459,4462,4464,4466,4468],{"class":54,"line":66},[52,4456,4417],{"class":79},[52,4458,339],{"class":58},[52,4460,4461],{"class":62},"\"请给整型变量a赋值\"",[52,4463,339],{"class":58},[52,4465,3451],{"class":79},[52,4467,339],{"class":58},[52,4469,357],{"class":79},[52,4471,4472,4475,4478],{"class":54,"line":83},[52,4473,4474],{"class":79},"cin ",[52,4476,4477],{"class":58},">>",[52,4479,4480],{"class":79}," a;\n",[52,4482,4483,4485,4487,4490,4492,4494,4496],{"class":54,"line":91},[52,4484,4225],{"class":79},[52,4486,339],{"class":58},[52,4488,4489],{"class":62}," \"整型变量a=\"",[52,4491,1247],{"class":58},[52,4493,3451],{"class":79},[52,4495,339],{"class":58},[52,4497,357],{"class":79},[18,4499,4501],{"id":4500},"_15运算符","1.5运算符",[3195,4503,4505],{"id":4504},"_151算术运算符","1.5.1算术运算符",[14,4507,4508,4512],{},[4509,4510],"img",{"alt":47,"src":4511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[1696,4514,4515,4518,4521],{},[32,4516,4517],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[32,4519,4520],{},"两个小数不可以做取模运算",[32,4522,4523],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[3195,4525,4527],{"id":4526},"_152赋值运算符","1.5.2赋值运算符",[14,4529,4530],{},[4509,4531],{"alt":47,"src":4532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[3195,4534,4536],{"id":4535},"_153比较运算符","1.5.3比较运算符",[14,4538,4539],{},[4509,4540],{"alt":47,"src":4541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[3195,4543,4545],{"id":4544},"_154逻辑运算符","1.5.4逻辑运算符",[14,4547,4548],{},[4509,4549],{"alt":47,"src":4550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[18,4552,4554],{"id":4553},"_16程序流程结构","1.6程序流程结构",[3195,4556,4558],{"id":4557},"_161选择结构","1.6.1选择结构",[1696,4560,4561],{},[32,4562,4563],{},"if语句\n单行、多行、多条件if语句",[42,4565,4567],{"className":44,"code":4566,"language":46,"meta":47,"style":47},"\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",[49,4568,4569,4574,4589,4593,4606,4610,4615,4624,4637,4641,4654,4658,4663,4667,4680,4684,4689,4708,4712,4725,4729,4756,4760,4776,4780,4784,4788,4801,4805],{"__ignoreMap":47},[52,4570,4571],{"class":54,"line":55},[52,4572,4573],{"class":94},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[52,4575,4576,4579,4582,4584,4587],{"class":54,"line":66},[52,4577,4578],{"class":58},"if",[52,4580,4581],{"class":79},"(score",[52,4583,2674],{"class":58},[52,4585,4586],{"class":308},"600",[52,4588,708],{"class":79},[52,4590,4591],{"class":54,"line":83},[52,4592,110],{"class":79},[52,4594,4595,4597,4599,4602,4604],{"class":54,"line":91},[52,4596,336],{"class":79},[52,4598,339],{"class":58},[52,4600,4601],{"class":62},"'这是单行if语句'",[52,4603,339],{"class":58},[52,4605,357],{"class":79},[52,4607,4608],{"class":54,"line":98},[52,4609,452],{"class":79},[52,4611,4612],{"class":54,"line":107},[52,4613,4614],{"class":94},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[52,4616,4617,4619,4621],{"class":54,"line":113},[52,4618,4474],{"class":79},[52,4620,4477],{"class":58},[52,4622,4623],{"class":79}," score\n",[52,4625,4626,4628,4630,4633,4635],{"class":54,"line":119},[52,4627,4578],{"class":58},[52,4629,4581],{"class":79},[52,4631,4632],{"class":58},"\u003C=",[52,4634,4586],{"class":308},[52,4636,708],{"class":79},[52,4638,4639],{"class":54,"line":126},[52,4640,110],{"class":79},[52,4642,4643,4645,4647,4650,4652],{"class":54,"line":132},[52,4644,336],{"class":79},[52,4646,4477],{"class":58},[52,4648,4649],{"class":62},"\"小于等于600\"",[52,4651,339],{"class":58},[52,4653,357],{"class":79},[52,4655,4656],{"class":54,"line":138},[52,4657,452],{"class":79},[52,4659,4660],{"class":54,"line":144},[52,4661,4662],{"class":58},"else\n",[52,4664,4665],{"class":54,"line":153},[52,4666,110],{"class":79},[52,4668,4669,4671,4673,4676,4678],{"class":54,"line":159},[52,4670,336],{"class":79},[52,4672,4477],{"class":58},[52,4674,4675],{"class":62},"\"大于600\"",[52,4677,4477],{"class":58},[52,4679,357],{"class":79},[52,4681,4682],{"class":54,"line":167},[52,4683,452],{"class":79},[52,4685,4686],{"class":54,"line":173},[52,4687,4688],{"class":94},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[52,4690,4691,4693,4695,4697,4699,4702,4704,4706],{"class":54,"line":181},[52,4692,4578],{"class":58},[52,4694,682],{"class":79},[52,4696,692],{"class":308},[52,4698,698],{"class":58},[52,4700,4701],{"class":79},"num",[52,4703,698],{"class":58},[52,4705,591],{"class":308},[52,4707,708],{"class":79},[52,4709,4710],{"class":54,"line":186},[52,4711,110],{"class":79},[52,4713,4714,4716,4718,4721,4723],{"class":54,"line":191},[52,4715,336],{"class":79},[52,4717,339],{"class":58},[52,4719,4720],{"class":62},"\"小于100\"",[52,4722,339],{"class":58},[52,4724,357],{"class":79},[52,4726,4727],{"class":54,"line":196},[52,4728,452],{"class":79},[52,4730,4731,4734,4737,4740,4743,4745,4748,4750,4752,4754],{"class":54,"line":201},[52,4732,4733],{"class":58},"else",[52,4735,4736],{"class":58}," if",[52,4738,4739],{"class":79}," (nmu",[52,4741,4742],{"class":58},">=",[52,4744,591],{"class":308},[52,4746,4747],{"class":58},"&&",[52,4749,4701],{"class":79},[52,4751,698],{"class":58},[52,4753,856],{"class":308},[52,4755,708],{"class":79},[52,4757,4758],{"class":54,"line":206},[52,4759,110],{"class":79},[52,4761,4762,4764,4766,4769,4771,4773],{"class":54,"line":211},[52,4763,336],{"class":79},[52,4765,339],{"class":58},[52,4767,4768],{"class":62},"\"不小于100且小于200\"",[52,4770,339],{"class":58},[52,4772,4290],{"class":79},[52,4774,4775],{"class":94}," \u002F\u002F可以无限else if,python中是elif：\n",[52,4777,4778],{"class":54,"line":218},[52,4779,452],{"class":79},[52,4781,4782],{"class":54,"line":223},[52,4783,4662],{"class":58},[52,4785,4786],{"class":54,"line":230},[52,4787,110],{"class":79},[52,4789,4790,4792,4794,4797,4799],{"class":54,"line":239},[52,4791,336],{"class":79},[52,4793,339],{"class":58},[52,4795,4796],{"class":62},"\"不小于200\"",[52,4798,339],{"class":58},[52,4800,357],{"class":79},[52,4802,4803],{"class":54,"line":251},[52,4804,452],{"class":79},[52,4806,4807],{"class":54,"line":256},[52,4808,4809],{"class":94},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[1696,4811,4812],{"start":66},[32,4813,4814],{},"三目运算符",[42,4816,4818],{"className":44,"code":4817,"language":46,"meta":47,"style":47},"\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",[49,4819,4820,4825,4830,4856,4878,4895,4900,4923,4938],{"__ignoreMap":47},[52,4821,4822],{"class":54,"line":55},[52,4823,4824],{"class":94},"\u002F\u002F创建三个变量a,b,c\n",[52,4826,4827],{"class":54,"line":66},[52,4828,4829],{"class":94},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[52,4831,4832,4834,4836,4838,4840,4843,4845,4847,4850,4852,4854],{"class":54,"line":83},[52,4833,242],{"class":58},[52,4835,4446],{"class":79},[52,4837,292],{"class":58},[52,4839,444],{"class":308},[52,4841,4842],{"class":79},",b",[52,4844,292],{"class":58},[52,4846,3649],{"class":308},[52,4848,4849],{"class":79},",c",[52,4851,292],{"class":58},[52,4853,692],{"class":308},[52,4855,80],{"class":79},[52,4857,4858,4860,4862,4865,4867,4869,4871,4873,4875],{"class":54,"line":91},[52,4859,3499],{"class":79},[52,4861,292],{"class":58},[52,4863,4864],{"class":79},"(a",[52,4866,2674],{"class":58},[52,4868,3474],{"class":79},[52,4870,4171],{"class":58},[52,4872,3451],{"class":79},[52,4874,4049],{"class":58},[52,4876,4877],{"class":79},"b)\n",[52,4879,4880,4882,4884,4887,4889,4891,4893],{"class":54,"line":98},[52,4881,4417],{"class":79},[52,4883,339],{"class":58},[52,4885,4886],{"class":62},"\"c=\"",[52,4888,339],{"class":58},[52,4890,3499],{"class":79},[52,4892,339],{"class":58},[52,4894,357],{"class":79},[52,4896,4897],{"class":54,"line":107},[52,4898,4899],{"class":94},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[52,4901,4902,4904,4906,4908,4910,4912,4914,4917,4919,4921],{"class":54,"line":113},[52,4903,4864],{"class":79},[52,4905,2674],{"class":58},[52,4907,3474],{"class":79},[52,4909,4171],{"class":58},[52,4911,3451],{"class":79},[52,4913,4049],{"class":58},[52,4915,4916],{"class":79},"b)",[52,4918,292],{"class":58},[52,4920,591],{"class":308},[52,4922,80],{"class":79},[52,4924,4925,4927,4929,4931,4933,4935],{"class":54,"line":119},[52,4926,4417],{"class":79},[52,4928,339],{"class":58},[52,4930,3451],{"class":79},[52,4932,339],{"class":58},[52,4934,4290],{"class":79},[52,4936,4937],{"class":94}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[52,4939,4940,4942,4944,4946,4948,4950],{"class":54,"line":126},[52,4941,4417],{"class":79},[52,4943,339],{"class":58},[52,4945,3474],{"class":79},[52,4947,339],{"class":58},[52,4949,4290],{"class":79},[52,4951,4952],{"class":94}," \u002F\u002F10   a>b,b还是原值\n",[1696,4954,4955],{"start":83},[32,4956,4957],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[42,4959,4961],{"className":44,"code":4960,"language":46,"meta":47,"style":47},"\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",[49,4962,4963,4968,4974,4984,4992,4996,5009,5022,5032,5040,5044,5069,5090,5112,5133,5155,5175,5195,5199],{"__ignoreMap":47},[52,4964,4965],{"class":54,"line":55},[52,4966,4967],{"class":94},"\u002F\u002F案例-电影打分\n",[52,4969,4970,4972],{"class":54,"line":66},[52,4971,59],{"class":58},[52,4973,63],{"class":62},[52,4975,4976,4978,4980,4982],{"class":54,"line":83},[52,4977,69],{"class":58},[52,4979,72],{"class":58},[52,4981,76],{"class":75},[52,4983,80],{"class":79},[52,4985,4986,4988,4990],{"class":54,"line":91},[52,4987,242],{"class":58},[52,4989,245],{"class":75},[52,4991,248],{"class":79},[52,4993,4994],{"class":54,"line":98},[52,4995,110],{"class":79},[52,4997,4998,5000,5003,5005,5007],{"class":54,"line":107},[52,4999,147],{"class":58},[52,5001,5002],{"class":79}," score",[52,5004,292],{"class":58},[52,5006,692],{"class":308},[52,5008,80],{"class":79},[52,5010,5011,5013,5015,5018,5020],{"class":54,"line":113},[52,5012,336],{"class":79},[52,5014,339],{"class":58},[52,5016,5017],{"class":62},"\"电影打分：\"",[52,5019,339],{"class":58},[52,5021,357],{"class":79},[52,5023,5024,5027,5029],{"class":54,"line":119},[52,5025,5026],{"class":79},"    cin",[52,5028,4477],{"class":58},[52,5030,5031],{"class":79},"score;\n",[52,5033,5034,5037],{"class":54,"line":126},[52,5035,5036],{"class":58},"    switch",[52,5038,5039],{"class":79},"(score)\n",[52,5041,5042],{"class":54,"line":132},[52,5043,575],{"class":79},[52,5045,5046,5049,5052,5055,5057,5060,5062,5064,5067],{"class":54,"line":138},[52,5047,5048],{"class":58},"        case",[52,5050,5051],{"class":308}," 10",[52,5053,5054],{"class":79},":cout",[52,5056,339],{"class":58},[52,5058,5059],{"class":62},"\"经典\"",[52,5061,339],{"class":58},[52,5063,4290],{"class":79},[52,5065,5066],{"class":58},"break",[52,5068,80],{"class":79},[52,5070,5071,5073,5076,5078,5080,5082,5084,5086,5088],{"class":54,"line":144},[52,5072,5048],{"class":58},[52,5074,5075],{"class":308}," 9",[52,5077,5054],{"class":79},[52,5079,339],{"class":58},[52,5081,5059],{"class":62},[52,5083,339],{"class":58},[52,5085,4290],{"class":79},[52,5087,5066],{"class":58},[52,5089,80],{"class":79},[52,5091,5092,5094,5097,5099,5101,5104,5106,5108,5110],{"class":54,"line":153},[52,5093,5048],{"class":58},[52,5095,5096],{"class":308}," 8",[52,5098,5054],{"class":79},[52,5100,339],{"class":58},[52,5102,5103],{"class":62},"\"非常好\"",[52,5105,339],{"class":58},[52,5107,4290],{"class":79},[52,5109,5066],{"class":58},[52,5111,80],{"class":79},[52,5113,5114,5116,5119,5121,5123,5125,5127,5129,5131],{"class":54,"line":159},[52,5115,5048],{"class":58},[52,5117,5118],{"class":308}," 7",[52,5120,5054],{"class":79},[52,5122,339],{"class":58},[52,5124,5103],{"class":62},[52,5126,339],{"class":58},[52,5128,4290],{"class":79},[52,5130,5066],{"class":58},[52,5132,80],{"class":79},[52,5134,5135,5137,5140,5142,5144,5147,5149,5151,5153],{"class":54,"line":167},[52,5136,5048],{"class":58},[52,5138,5139],{"class":308}," 6",[52,5141,5054],{"class":79},[52,5143,339],{"class":58},[52,5145,5146],{"class":62},"\"一般\"",[52,5148,339],{"class":58},[52,5150,4290],{"class":79},[52,5152,5066],{"class":58},[52,5154,80],{"class":79},[52,5156,5157,5159,5161,5163,5165,5167,5169,5171,5173],{"class":54,"line":173},[52,5158,5048],{"class":58},[52,5160,1946],{"class":308},[52,5162,5054],{"class":79},[52,5164,339],{"class":58},[52,5166,5146],{"class":62},[52,5168,339],{"class":58},[52,5170,4290],{"class":79},[52,5172,5066],{"class":58},[52,5174,80],{"class":79},[52,5176,5177,5180,5182,5184,5187,5189,5191,5193],{"class":54,"line":181},[52,5178,5179],{"class":58},"        default",[52,5181,5054],{"class":79},[52,5183,339],{"class":58},[52,5185,5186],{"class":62},"\"烂片\"",[52,5188,339],{"class":58},[52,5190,4290],{"class":79},[52,5192,5066],{"class":58},[52,5194,80],{"class":79},[52,5196,5197],{"class":54,"line":186},[52,5198,616],{"class":79},[52,5200,5201],{"class":54,"line":191},[52,5202,452],{"class":79},[14,5204,5205],{},"if和switch区别：",[29,5207,5208,5211],{},[32,5209,5210],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[32,5212,5213],{},"switch优点：结构清晰，执行效率高",[3195,5215,5217],{"id":5216},"_162循环结构","1.6.2循环结构",[1696,5219,5220],{},[32,5221,5222],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[42,5224,5226],{"className":44,"code":5225,"language":46,"meta":47,"style":47},"\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",[49,5227,5228,5233,5241,5245,5258,5272,5276,5296,5305,5309,5321],{"__ignoreMap":47},[52,5229,5230],{"class":54,"line":55},[52,5231,5232],{"class":94},"\u002F\u002F打印0-9数字\n",[52,5234,5235,5237,5239],{"class":54,"line":66},[52,5236,242],{"class":58},[52,5238,245],{"class":75},[52,5240,248],{"class":79},[52,5242,5243],{"class":54,"line":83},[52,5244,110],{"class":79},[52,5246,5247,5249,5252,5254,5256],{"class":54,"line":91},[52,5248,147],{"class":58},[52,5250,5251],{"class":79}," num",[52,5253,292],{"class":58},[52,5255,692],{"class":308},[52,5257,80],{"class":79},[52,5259,5260,5263,5266,5268,5270],{"class":54,"line":98},[52,5261,5262],{"class":58},"    while",[52,5264,5265],{"class":79},"(num",[52,5267,698],{"class":58},[52,5269,3649],{"class":308},[52,5271,708],{"class":79},[52,5273,5274],{"class":54,"line":107},[52,5275,575],{"class":79},[52,5277,5278,5281,5284,5286,5288,5290,5293],{"class":54,"line":113},[52,5279,5280],{"class":75},"       std",[52,5282,5283],{"class":79},"::cout",[52,5285,339],{"class":58},[52,5287,4701],{"class":79},[52,5289,339],{"class":58},[52,5291,5292],{"class":75},"std",[52,5294,5295],{"class":79},"::endl;\n",[52,5297,5298,5301,5303],{"class":54,"line":119},[52,5299,5300],{"class":79},"        num",[52,5302,705],{"class":58},[52,5304,80],{"class":79},[52,5306,5307],{"class":54,"line":126},[52,5308,616],{"class":79},[52,5310,5311,5314,5316,5319],{"class":54,"line":132},[52,5312,5313],{"class":75},"    system",[52,5315,1216],{"class":79},[52,5317,5318],{"class":62},"\"pause\"",[52,5320,708],{"class":79},[52,5322,5323],{"class":54,"line":138},[52,5324,452],{"class":79},[14,5326,5327],{},"注意：写好循环条件，避免死循环情况",[42,5329,5331],{"className":44,"code":5330,"language":46,"meta":47,"style":47},"\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",[49,5332,5333,5338,5345,5352,5362,5370,5374,5379,5399,5403,5408,5416,5441,5446,5451,5464,5474,5478,5488,5493,5506,5510,5524,5528,5543,5547,5560,5564,5569,5573,5586,5593,5597,5602,5607,5611],{"__ignoreMap":47},[52,5334,5335],{"class":54,"line":55},[52,5336,5337],{"class":94},"\u002F\u002F循环结构-猜数字\n",[52,5339,5340,5342],{"class":54,"line":66},[52,5341,59],{"class":58},[52,5343,5344],{"class":62}," \u003Ciostream>\n",[52,5346,5347,5349],{"class":54,"line":83},[52,5348,59],{"class":58},[52,5350,5351],{"class":62}," \u003Cctime>\n",[52,5353,5354,5356,5358,5360],{"class":54,"line":91},[52,5355,69],{"class":58},[52,5357,72],{"class":58},[52,5359,76],{"class":75},[52,5361,80],{"class":79},[52,5363,5364,5366,5368],{"class":54,"line":98},[52,5365,242],{"class":58},[52,5367,245],{"class":75},[52,5369,248],{"class":79},[52,5371,5372],{"class":54,"line":107},[52,5373,110],{"class":79},[52,5375,5376],{"class":54,"line":113},[52,5377,5378],{"class":94},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[52,5380,5381,5383,5385,5387,5389,5391,5393,5395,5397],{"class":54,"line":119},[52,5382,2271],{"class":75},[52,5384,2274],{"class":79},[52,5386,2277],{"class":58},[52,5388,2280],{"class":58},[52,5390,2283],{"class":79},[52,5392,2286],{"class":75},[52,5394,1216],{"class":79},[52,5396,2291],{"class":308},[52,5398,2294],{"class":79},[52,5400,5401],{"class":54,"line":126},[52,5402,123],{"emptyLinePlaceholder":122},[52,5404,5405],{"class":54,"line":132},[52,5406,5407],{"class":94},"    \u002F\u002F1.系统生成随机数\n",[52,5409,5410,5413],{"class":54,"line":138},[52,5411,5412],{"class":94},"    \u002F\u002Frand()%100",[52,5414,5415],{"class":94}," \u002F\u002F生成0-99的随机数\n",[52,5417,5418,5420,5422,5424,5426,5428,5430,5432,5434,5436,5438],{"class":54,"line":144},[52,5419,147],{"class":58},[52,5421,5251],{"class":79},[52,5423,292],{"class":58},[52,5425,1992],{"class":75},[52,5427,1995],{"class":79},[52,5429,1998],{"class":58},[52,5431,591],{"class":308},[52,5433,2004],{"class":58},[52,5435,629],{"class":308},[52,5437,2010],{"class":79},[52,5439,5440],{"class":94}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[52,5442,5443],{"class":54,"line":153},[52,5444,5445],{"class":94},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[52,5447,5448],{"class":54,"line":159},[52,5449,5450],{"class":94},"    \u002F\u002F2.玩家猜测\n",[52,5452,5453,5455,5458,5460,5462],{"class":54,"line":167},[52,5454,147],{"class":58},[52,5456,5457],{"class":79}," val",[52,5459,292],{"class":58},[52,5461,692],{"class":308},[52,5463,80],{"class":79},[52,5465,5466,5468,5470,5472],{"class":54,"line":173},[52,5467,5262],{"class":58},[52,5469,682],{"class":79},[52,5471,629],{"class":308},[52,5473,708],{"class":79},[52,5475,5476],{"class":54,"line":181},[52,5477,575],{"class":79},[52,5479,5480,5483,5485],{"class":54,"line":186},[52,5481,5482],{"class":79},"        cin",[52,5484,4477],{"class":58},[52,5486,5487],{"class":79},"val;\n",[52,5489,5490],{"class":54,"line":191},[52,5491,5492],{"class":94},"        \u002F\u002F3.判断玩家猜测\n",[52,5494,5495,5498,5501,5503],{"class":54,"line":196},[52,5496,5497],{"class":58},"        if",[52,5499,5500],{"class":79},"(val",[52,5502,698],{"class":58},[52,5504,5505],{"class":79},"num) \n",[52,5507,5508],{"class":54,"line":201},[52,5509,1958],{"class":79},[52,5511,5512,5515,5517,5520,5522],{"class":54,"line":206},[52,5513,5514],{"class":79},"            cout",[52,5516,339],{"class":58},[52,5518,5519],{"class":62},"\"猜小了！\"",[52,5521,339],{"class":58},[52,5523,357],{"class":79},[52,5525,5526],{"class":54,"line":211},[52,5527,2039],{"class":79},[52,5529,5530,5533,5535,5538,5540],{"class":54,"line":218},[52,5531,5532],{"class":58},"        else",[52,5534,4736],{"class":58},[52,5536,5537],{"class":79}," (val",[52,5539,2674],{"class":58},[52,5541,5542],{"class":79},"num)\n",[52,5544,5545],{"class":54,"line":223},[52,5546,1958],{"class":79},[52,5548,5549,5551,5553,5556,5558],{"class":54,"line":230},[52,5550,5514],{"class":79},[52,5552,339],{"class":58},[52,5554,5555],{"class":62},"\"猜大了！\"",[52,5557,339],{"class":58},[52,5559,357],{"class":79},[52,5561,5562],{"class":54,"line":239},[52,5563,2039],{"class":79},[52,5565,5566],{"class":54,"line":251},[52,5567,5568],{"class":58},"        else\n",[52,5570,5571],{"class":54,"line":256},[52,5572,1958],{"class":79},[52,5574,5575,5577,5579,5582,5584],{"class":54,"line":262},[52,5576,5514],{"class":79},[52,5578,339],{"class":58},[52,5580,5581],{"class":62},"\"猜对了！\"",[52,5583,339],{"class":58},[52,5585,357],{"class":79},[52,5587,5588,5591],{"class":54,"line":268},[52,5589,5590],{"class":58},"            break",[52,5592,80],{"class":79},[52,5594,5595],{"class":54,"line":280},[52,5596,2039],{"class":79},[52,5598,5599],{"class":54,"line":286},[52,5600,5601],{"class":94},"        \u002F\u002F猜对 退出游戏\n",[52,5603,5604],{"class":54,"line":300},[52,5605,5606],{"class":94},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[52,5608,5609],{"class":54,"line":314},[52,5610,616],{"class":79},[52,5612,5613],{"class":54,"line":327},[52,5614,452],{"class":79},[1696,5616,5617],{"start":66},[32,5618,5619,5620,5623],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2389,5621,5622],{},"do...while会先执行一次循环语句","，在判断循环语句",[42,5625,5627],{"className":44,"code":5626,"language":46,"meta":47,"style":47},"\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",[49,5628,5629,5634,5642,5646,5658,5665,5669,5686,5693,5697,5709,5719],{"__ignoreMap":47},[52,5630,5631],{"class":54,"line":55},[52,5632,5633],{"class":94},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[52,5635,5636,5638,5640],{"class":54,"line":66},[52,5637,242],{"class":58},[52,5639,245],{"class":75},[52,5641,248],{"class":79},[52,5643,5644],{"class":54,"line":83},[52,5645,110],{"class":79},[52,5647,5648,5650,5652,5654,5656],{"class":54,"line":91},[52,5649,147],{"class":58},[52,5651,5251],{"class":79},[52,5653,292],{"class":58},[52,5655,692],{"class":308},[52,5657,80],{"class":79},[52,5659,5660,5663],{"class":54,"line":98},[52,5661,5662],{"class":58},"    do",[52,5664,963],{"class":79},[52,5666,5667],{"class":54,"line":107},[52,5668,575],{"class":79},[52,5670,5671,5674,5676,5678,5680,5682,5684],{"class":54,"line":113},[52,5672,5673],{"class":75},"        std",[52,5675,5283],{"class":79},[52,5677,339],{"class":58},[52,5679,4701],{"class":79},[52,5681,339],{"class":58},[52,5683,5292],{"class":75},[52,5685,5295],{"class":79},[52,5687,5688,5690],{"class":54,"line":119},[52,5689,5300],{"class":79},[52,5691,5692],{"class":58},"++\n",[52,5694,5695],{"class":54,"line":126},[52,5696,616],{"class":79},[52,5698,5699,5701,5703,5705,5707],{"class":54,"line":132},[52,5700,5262],{"class":58},[52,5702,5265],{"class":79},[52,5704,698],{"class":58},[52,5706,3649],{"class":308},[52,5708,2737],{"class":79},[52,5710,5711,5713,5715,5717],{"class":54,"line":138},[52,5712,5313],{"class":75},[52,5714,1216],{"class":79},[52,5716,5318],{"class":62},[52,5718,2737],{"class":79},[52,5720,5721],{"class":54,"line":144},[52,5722,452],{"class":79},[14,5724,5725],{},"案例-水仙花数",[14,5727,5728],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,5730,5731],{},"例如：1^3+5^3+3^3=153",[14,5733,5734],{},"请用do...while语句，求出所有3位数的水仙花数",[42,5736,5738],{"className":44,"code":5737,"language":46,"meta":47,"style":47},"#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",[49,5739,5740,5746,5756,5764,5768,5773,5785,5791,5795,5800,5816,5832,5848,5863,5882,5897,5945,5949,5961,5965,5973,5977,5991],{"__ignoreMap":47},[52,5741,5742,5744],{"class":54,"line":55},[52,5743,59],{"class":58},[52,5745,5344],{"class":62},[52,5747,5748,5750,5752,5754],{"class":54,"line":66},[52,5749,69],{"class":58},[52,5751,72],{"class":58},[52,5753,76],{"class":75},[52,5755,80],{"class":79},[52,5757,5758,5760,5762],{"class":54,"line":83},[52,5759,242],{"class":58},[52,5761,245],{"class":75},[52,5763,248],{"class":79},[52,5765,5766],{"class":54,"line":91},[52,5767,110],{"class":79},[52,5769,5770],{"class":54,"line":98},[52,5771,5772],{"class":94},"    \u002F\u002F1.先打印所有三位数字\n",[52,5774,5775,5777,5779,5781,5783],{"class":54,"line":107},[52,5776,147],{"class":58},[52,5778,5251],{"class":79},[52,5780,292],{"class":58},[52,5782,591],{"class":308},[52,5784,80],{"class":79},[52,5786,5787,5789],{"class":54,"line":113},[52,5788,5662],{"class":58},[52,5790,963],{"class":79},[52,5792,5793],{"class":54,"line":119},[52,5794,575],{"class":79},[52,5796,5797],{"class":54,"line":126},[52,5798,5799],{"class":94},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[52,5801,5802,5805,5807,5809,5811,5813],{"class":54,"line":132},[52,5803,5804],{"class":58},"        int",[52,5806,4446],{"class":79},[52,5808,292],{"class":58},[52,5810,692],{"class":308},[52,5812,2010],{"class":79},[52,5814,5815],{"class":94}," \u002F\u002F个位\n",[52,5817,5818,5820,5823,5825,5827,5829],{"class":54,"line":138},[52,5819,5804],{"class":58},[52,5821,5822],{"class":79}," b",[52,5824,292],{"class":58},[52,5826,692],{"class":308},[52,5828,2010],{"class":79},[52,5830,5831],{"class":94}," \u002F\u002F十位\n",[52,5833,5834,5836,5839,5841,5843,5845],{"class":54,"line":144},[52,5835,5804],{"class":58},[52,5837,5838],{"class":79}," c",[52,5840,292],{"class":58},[52,5842,692],{"class":308},[52,5844,2010],{"class":79},[52,5846,5847],{"class":94}," \u002F\u002F百位\n",[52,5849,5850,5853,5855,5857,5859,5861],{"class":54,"line":153},[52,5851,5852],{"class":79},"        a",[52,5854,292],{"class":58},[52,5856,4701],{"class":79},[52,5858,1998],{"class":58},[52,5860,3649],{"class":308},[52,5862,80],{"class":79},[52,5864,5865,5868,5870,5872,5874,5876,5878,5880],{"class":54,"line":159},[52,5866,5867],{"class":79},"        b",[52,5869,292],{"class":58},[52,5871,4701],{"class":79},[52,5873,2340],{"class":58},[52,5875,3649],{"class":308},[52,5877,1998],{"class":58},[52,5879,3649],{"class":308},[52,5881,80],{"class":79},[52,5883,5884,5887,5889,5891,5893,5895],{"class":54,"line":167},[52,5885,5886],{"class":79},"        c",[52,5888,292],{"class":58},[52,5890,4701],{"class":79},[52,5892,2340],{"class":58},[52,5894,591],{"class":308},[52,5896,80],{"class":79},[52,5898,5899,5901,5903,5905,5907,5909,5911,5913,5915,5917,5919,5921,5923,5925,5927,5929,5931,5933,5936,5939,5942],{"class":54,"line":173},[52,5900,5497],{"class":58},[52,5902,4864],{"class":79},[52,5904,3053],{"class":58},[52,5906,3451],{"class":79},[52,5908,3053],{"class":58},[52,5910,3451],{"class":79},[52,5912,2004],{"class":58},[52,5914,3474],{"class":79},[52,5916,3053],{"class":58},[52,5918,3474],{"class":79},[52,5920,3053],{"class":58},[52,5922,3474],{"class":79},[52,5924,2004],{"class":58},[52,5926,3499],{"class":79},[52,5928,3053],{"class":58},[52,5930,3499],{"class":79},[52,5932,3053],{"class":58},[52,5934,5935],{"class":79},"c ",[52,5937,5938],{"class":58},"==",[52,5940,5941],{"class":79}," num)",[52,5943,5944],{"class":94}," \u002F\u002F如果是水仙花数，才打印\n",[52,5946,5947],{"class":54,"line":181},[52,5948,1958],{"class":79},[52,5950,5951,5953,5955,5957,5959],{"class":54,"line":186},[52,5952,5514],{"class":79},[52,5954,339],{"class":58},[52,5956,4701],{"class":79},[52,5958,339],{"class":58},[52,5960,357],{"class":79},[52,5962,5963],{"class":54,"line":191},[52,5964,2039],{"class":79},[52,5966,5967,5969,5971],{"class":54,"line":196},[52,5968,5300],{"class":79},[52,5970,705],{"class":58},[52,5972,80],{"class":79},[52,5974,5975],{"class":54,"line":201},[52,5976,616],{"class":79},[52,5978,5979,5981,5984,5986,5989],{"class":54,"line":206},[52,5980,5262],{"class":58},[52,5982,5983],{"class":79}," (num ",[52,5985,698],{"class":58},[52,5987,5988],{"class":308}," 1000",[52,5990,2737],{"class":79},[52,5992,5993],{"class":54,"line":211},[52,5994,452],{"class":79},[1696,5996,5997],{"start":83},[32,5998,5999],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[42,6001,6003],{"className":44,"code":6002,"language":46,"meta":47,"style":47},"\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",[49,6004,6005,6010,6037,6041,6053,6057,6062,6073,6080,6084,6098,6102,6109,6113,6125,6134],{"__ignoreMap":47},[52,6006,6007],{"class":54,"line":55},[52,6008,6009],{"class":94},"\u002F\u002F从数字0-9打印\n",[52,6011,6012,6015,6017,6019,6021,6023,6025,6027,6029,6031,6033,6035],{"class":54,"line":66},[52,6013,6014],{"class":58},"for",[52,6016,1216],{"class":79},[52,6018,242],{"class":58},[52,6020,687],{"class":79},[52,6022,292],{"class":58},[52,6024,692],{"class":308},[52,6026,695],{"class":79},[52,6028,698],{"class":58},[52,6030,3649],{"class":308},[52,6032,695],{"class":79},[52,6034,705],{"class":58},[52,6036,708],{"class":79},[52,6038,6039],{"class":54,"line":83},[52,6040,110],{"class":79},[52,6042,6043,6045,6047,6049,6051],{"class":54,"line":91},[52,6044,336],{"class":79},[52,6046,339],{"class":58},[52,6048,3644],{"class":79},[52,6050,339],{"class":58},[52,6052,357],{"class":79},[52,6054,6055],{"class":54,"line":98},[52,6056,452],{"class":79},[52,6058,6059],{"class":54,"line":107},[52,6060,6061],{"class":94},"\u002F\u002F上式可以进行拆分\n",[52,6063,6064,6066,6068,6070],{"class":54,"line":113},[52,6065,242],{"class":58},[52,6067,687],{"class":79},[52,6069,292],{"class":58},[52,6071,6072],{"class":308},"0\n",[52,6074,6075,6077],{"class":54,"line":119},[52,6076,6014],{"class":58},[52,6078,6079],{"class":79},"(;;;)\n",[52,6081,6082],{"class":54,"line":126},[52,6083,110],{"class":79},[52,6085,6086,6089,6092,6094,6096],{"class":54,"line":132},[52,6087,6088],{"class":58},"    if",[52,6090,6091],{"class":79},"(i",[52,6093,4742],{"class":58},[52,6095,3649],{"class":308},[52,6097,708],{"class":79},[52,6099,6100],{"class":54,"line":138},[52,6101,575],{"class":79},[52,6103,6104,6107],{"class":54,"line":144},[52,6105,6106],{"class":58},"        break",[52,6108,80],{"class":79},[52,6110,6111],{"class":54,"line":153},[52,6112,616],{"class":79},[52,6114,6115,6117,6119,6121,6123],{"class":54,"line":159},[52,6116,336],{"class":79},[52,6118,339],{"class":58},[52,6120,3644],{"class":79},[52,6122,339],{"class":58},[52,6124,357],{"class":79},[52,6126,6127,6130,6132],{"class":54,"line":167},[52,6128,6129],{"class":79},"    i",[52,6131,705],{"class":58},[52,6133,80],{"class":79},[52,6135,6136],{"class":54,"line":173},[52,6137,452],{"class":79},[14,6139,6140],{},"小练习",[42,6142,6144],{"className":44,"code":6143,"language":46,"meta":47,"style":47},"#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",[49,6145,6146,6152,6162,6170,6174,6179,6184,6211,6215,6220,6225,6266,6270,6283,6287,6291,6295,6307,6311,6315],{"__ignoreMap":47},[52,6147,6148,6150],{"class":54,"line":55},[52,6149,59],{"class":58},[52,6151,63],{"class":62},[52,6153,6154,6156,6158,6160],{"class":54,"line":66},[52,6155,69],{"class":58},[52,6157,72],{"class":58},[52,6159,76],{"class":75},[52,6161,80],{"class":79},[52,6163,6164,6166,6168],{"class":54,"line":83},[52,6165,242],{"class":58},[52,6167,245],{"class":75},[52,6169,248],{"class":79},[52,6171,6172],{"class":54,"line":91},[52,6173,110],{"class":79},[52,6175,6176],{"class":54,"line":98},[52,6177,6178],{"class":94},"    \u002F\u002F敲桌子案例\n",[52,6180,6181],{"class":54,"line":107},[52,6182,6183],{"class":94},"    \u002F\u002F1.先输出1-100的数字\n",[52,6185,6186,6188,6190,6192,6194,6196,6198,6201,6203,6205,6207,6209],{"class":54,"line":113},[52,6187,679],{"class":58},[52,6189,1216],{"class":79},[52,6191,242],{"class":58},[52,6193,687],{"class":79},[52,6195,292],{"class":58},[52,6197,629],{"class":308},[52,6199,6200],{"class":79},"; i",[52,6202,4632],{"class":58},[52,6204,591],{"class":308},[52,6206,6200],{"class":79},[52,6208,705],{"class":58},[52,6210,708],{"class":79},[52,6212,6213],{"class":54,"line":119},[52,6214,575],{"class":79},[52,6216,6217],{"class":54,"line":126},[52,6218,6219],{"class":94},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[52,6221,6222],{"class":54,"line":132},[52,6223,6224],{"class":94},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[52,6226,6227,6229,6231,6233,6235,6237,6239,6242,6244,6246,6248,6250,6252,6254,6256,6258,6260,6262,6264],{"class":54,"line":138},[52,6228,5497],{"class":58},[52,6230,6091],{"class":79},[52,6232,1998],{"class":58},[52,6234,3575],{"class":308},[52,6236,5938],{"class":58},[52,6238,692],{"class":308},[52,6240,6241],{"class":58}," ||",[52,6243,687],{"class":79},[52,6245,1998],{"class":58},[52,6247,3649],{"class":308},[52,6249,5938],{"class":58},[52,6251,3575],{"class":308},[52,6253,6241],{"class":58},[52,6255,687],{"class":79},[52,6257,2340],{"class":58},[52,6259,3649],{"class":308},[52,6261,5938],{"class":58},[52,6263,3575],{"class":308},[52,6265,708],{"class":79},[52,6267,6268],{"class":54,"line":144},[52,6269,1958],{"class":79},[52,6271,6272,6274,6276,6279,6281],{"class":54,"line":153},[52,6273,5514],{"class":79},[52,6275,339],{"class":58},[52,6277,6278],{"class":62},"\"敲桌子\"",[52,6280,339],{"class":58},[52,6282,357],{"class":79},[52,6284,6285],{"class":54,"line":159},[52,6286,2039],{"class":79},[52,6288,6289],{"class":54,"line":167},[52,6290,5568],{"class":58},[52,6292,6293],{"class":54,"line":173},[52,6294,1958],{"class":79},[52,6296,6297,6299,6301,6303,6305],{"class":54,"line":181},[52,6298,5514],{"class":79},[52,6300,339],{"class":58},[52,6302,3644],{"class":79},[52,6304,339],{"class":58},[52,6306,357],{"class":79},[52,6308,6309],{"class":54,"line":186},[52,6310,2039],{"class":79},[52,6312,6313],{"class":54,"line":191},[52,6314,616],{"class":79},[52,6316,6317],{"class":54,"line":196},[52,6318,452],{"class":79},[14,6320,6321],{},"嵌套实现星图",[42,6323,6325],{"className":44,"code":6324,"language":46,"meta":47,"style":47},"#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",[49,6326,6327,6333,6343,6351,6355,6381,6385,6411,6415,6426,6430,6438,6442],{"__ignoreMap":47},[52,6328,6329,6331],{"class":54,"line":55},[52,6330,59],{"class":58},[52,6332,63],{"class":62},[52,6334,6335,6337,6339,6341],{"class":54,"line":66},[52,6336,69],{"class":58},[52,6338,72],{"class":58},[52,6340,76],{"class":75},[52,6342,80],{"class":79},[52,6344,6345,6347,6349],{"class":54,"line":83},[52,6346,242],{"class":58},[52,6348,245],{"class":75},[52,6350,248],{"class":79},[52,6352,6353],{"class":54,"line":91},[52,6354,110],{"class":79},[52,6356,6357,6359,6361,6363,6365,6367,6369,6371,6373,6375,6377,6379],{"class":54,"line":98},[52,6358,679],{"class":58},[52,6360,682],{"class":79},[52,6362,242],{"class":58},[52,6364,687],{"class":79},[52,6366,292],{"class":58},[52,6368,692],{"class":308},[52,6370,695],{"class":79},[52,6372,698],{"class":58},[52,6374,3649],{"class":308},[52,6376,695],{"class":79},[52,6378,705],{"class":58},[52,6380,708],{"class":79},[52,6382,6383],{"class":54,"line":107},[52,6384,575],{"class":79},[52,6386,6387,6389,6391,6393,6395,6397,6399,6401,6403,6405,6407,6409],{"class":54,"line":113},[52,6388,1927],{"class":58},[52,6390,682],{"class":79},[52,6392,242],{"class":58},[52,6394,2627],{"class":79},[52,6396,292],{"class":58},[52,6398,692],{"class":308},[52,6400,2634],{"class":79},[52,6402,698],{"class":58},[52,6404,3649],{"class":308},[52,6406,2634],{"class":79},[52,6408,705],{"class":58},[52,6410,708],{"class":79},[52,6412,6413],{"class":54,"line":119},[52,6414,1958],{"class":79},[52,6416,6417,6419,6421,6424],{"class":54,"line":126},[52,6418,5514],{"class":79},[52,6420,339],{"class":58},[52,6422,6423],{"class":62},"\"*\"",[52,6425,80],{"class":79},[52,6427,6428],{"class":54,"line":132},[52,6429,2039],{"class":79},[52,6431,6432,6434,6436],{"class":54,"line":138},[52,6433,717],{"class":79},[52,6435,339],{"class":58},[52,6437,357],{"class":79},[52,6439,6440],{"class":54,"line":144},[52,6441,616],{"class":79},[52,6443,6444],{"class":54,"line":153},[52,6445,452],{"class":79},[14,6447,6448],{},"乘法口诀表",[42,6450,6452],{"className":44,"code":6451,"language":46,"meta":47,"style":47},"#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",[49,6453,6454,6460,6470,6478,6482,6508,6512,6536,6540,6580,6584,6592,6596],{"__ignoreMap":47},[52,6455,6456,6458],{"class":54,"line":55},[52,6457,59],{"class":58},[52,6459,5344],{"class":62},[52,6461,6462,6464,6466,6468],{"class":54,"line":66},[52,6463,69],{"class":58},[52,6465,72],{"class":58},[52,6467,76],{"class":75},[52,6469,80],{"class":79},[52,6471,6472,6474,6476],{"class":54,"line":83},[52,6473,242],{"class":58},[52,6475,245],{"class":75},[52,6477,248],{"class":79},[52,6479,6480],{"class":54,"line":91},[52,6481,110],{"class":79},[52,6483,6484,6486,6488,6490,6492,6494,6496,6498,6500,6502,6504,6506],{"class":54,"line":98},[52,6485,679],{"class":58},[52,6487,1216],{"class":79},[52,6489,242],{"class":58},[52,6491,687],{"class":79},[52,6493,292],{"class":58},[52,6495,629],{"class":308},[52,6497,695],{"class":79},[52,6499,698],{"class":58},[52,6501,3649],{"class":308},[52,6503,695],{"class":79},[52,6505,705],{"class":58},[52,6507,708],{"class":79},[52,6509,6510],{"class":54,"line":107},[52,6511,575],{"class":79},[52,6513,6514,6516,6518,6520,6522,6524,6526,6528,6530,6532,6534],{"class":54,"line":113},[52,6515,1927],{"class":58},[52,6517,1216],{"class":79},[52,6519,242],{"class":58},[52,6521,2627],{"class":79},[52,6523,292],{"class":58},[52,6525,629],{"class":308},[52,6527,2634],{"class":79},[52,6529,4632],{"class":58},[52,6531,2649],{"class":79},[52,6533,705],{"class":58},[52,6535,708],{"class":79},[52,6537,6538],{"class":54,"line":119},[52,6539,1958],{"class":79},[52,6541,6542,6544,6546,6548,6550,6552,6554,6556,6558,6561,6563,6565,6567,6569,6571,6574,6576,6578],{"class":54,"line":126},[52,6543,5514],{"class":79},[52,6545,339],{"class":58},[52,6547,2682],{"class":79},[52,6549,339],{"class":58},[52,6551,6423],{"class":62},[52,6553,339],{"class":58},[52,6555,3644],{"class":79},[52,6557,339],{"class":58},[52,6559,6560],{"class":62},"\"=\"",[52,6562,339],{"class":58},[52,6564,3644],{"class":79},[52,6566,3053],{"class":58},[52,6568,2682],{"class":79},[52,6570,339],{"class":58},[52,6572,6573],{"class":62},"'",[52,6575,2171],{"class":308},[52,6577,6573],{"class":62},[52,6579,80],{"class":79},[52,6581,6582],{"class":54,"line":132},[52,6583,2039],{"class":79},[52,6585,6586,6588,6590],{"class":54,"line":138},[52,6587,717],{"class":79},[52,6589,339],{"class":58},[52,6591,357],{"class":79},[52,6593,6594],{"class":54,"line":144},[52,6595,616],{"class":79},[52,6597,6598],{"class":54,"line":153},[52,6599,452],{"class":79},[3195,6601,6603],{"id":6602},"_163跳出语句","1.6.3跳出语句",[1696,6605,6606],{},[32,6607,6608],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,6610,6611],{},"break使用时机：",[29,6613,6614,6617,6620],{},[32,6615,6616],{},"出现在switch条件语句中，作用是终止case并跳出switch",[32,6618,6619],{},"出现在循环结构中，作用是跳出当前的循环结构",[32,6621,6622],{},"出现在嵌套循环中，跳出最近的内层循环语句",[1696,6624,6625,6628],{"start":66},[32,6626,6627],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[32,6629,6630],{},"goto语句\n语法：goto 标记;",[14,6632,6633],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[42,6635,6637],{"className":44,"code":6636,"language":46,"meta":47,"style":47},"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",[49,6638,6639,6647,6651,6663,6673,6685,6698,6711,6719,6735],{"__ignoreMap":47},[52,6640,6641,6643,6645],{"class":54,"line":55},[52,6642,242],{"class":58},[52,6644,245],{"class":75},[52,6646,248],{"class":79},[52,6648,6649],{"class":54,"line":66},[52,6650,110],{"class":79},[52,6652,6653,6655,6657,6659,6661],{"class":54,"line":83},[52,6654,336],{"class":79},[52,6656,339],{"class":58},[52,6658,419],{"class":62},[52,6660,339],{"class":58},[52,6662,357],{"class":79},[52,6664,6665,6668,6671],{"class":54,"line":91},[52,6666,6667],{"class":58},"    goto",[52,6669,6670],{"class":75}," FLAG",[52,6672,80],{"class":79},[52,6674,6675,6677,6679,6681,6683],{"class":54,"line":98},[52,6676,336],{"class":79},[52,6678,339],{"class":58},[52,6680,637],{"class":62},[52,6682,339],{"class":58},[52,6684,357],{"class":79},[52,6686,6687,6689,6691,6694,6696],{"class":54,"line":107},[52,6688,336],{"class":79},[52,6690,339],{"class":58},[52,6692,6693],{"class":62},"\"3\"",[52,6695,339],{"class":58},[52,6697,357],{"class":79},[52,6699,6700,6702,6704,6707,6709],{"class":54,"line":113},[52,6701,336],{"class":79},[52,6703,339],{"class":58},[52,6705,6706],{"class":62},"\"4\"",[52,6708,339],{"class":58},[52,6710,357],{"class":79},[52,6712,6713,6716],{"class":54,"line":119},[52,6714,6715],{"class":75},"    FLAG",[52,6717,6718],{"class":79},":\n",[52,6720,6721,6723,6725,6728,6730,6732],{"class":54,"line":126},[52,6722,336],{"class":79},[52,6724,339],{"class":58},[52,6726,6727],{"class":62},"\"5\"",[52,6729,339],{"class":58},[52,6731,4290],{"class":79},[52,6733,6734],{"class":94},"\u002F\u002F跳过了2,3,4,直接到5\n",[52,6736,6737],{"class":54,"line":132},[52,6738,452],{"class":79},[18,6740,6742],{"id":6741},"_17数组","1.7数组",[3195,6744,6746],{"id":6745},"_171一维数组","1.7.1一维数组",[1696,6748,6749],{},[32,6750,6751],{},"一维数组定义方式",[3353,6753,6754,6764],{},[3356,6755,6756],{},[3359,6757,6758,6761],{},[3362,6759,6760],{},"方式",[3362,6762,6763],{},"注意事项",[3399,6765,6766,6780,6790],{},[3359,6767,6768,6774],{},[3404,6769,6770,6771,2010],{},"数据类型 数组名",[52,6772,6773],{},"数组长度",[3404,6775,6776,6777,6779],{},"这种方式是先定义再arr",[52,6778,3644],{},"赋值",[3359,6781,6782,6787],{},[3404,6783,6770,6784,6786],{},[52,6785,6773],{},"={值1,值2....};",[3404,6788,6789],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[3359,6791,6792,6796],{},[3404,6793,6770,6794,6786],{},[52,6795],{},[3404,6797,6798,6799,6801],{},"int arr",[52,6800],{},";这是不正确的，按照这样的方式定义必须有初始长度",[1696,6803,6804],{"start":66},[32,6805,6806],{},"一维数组数组名\n用途：",[29,6808,6809],{},[32,6810,6811],{},"1.可以统计整个数组在内存中的长度：",[42,6813,6815],{"className":44,"code":6814,"language":46,"meta":47,"style":47},"sizeof(arr);\nsizeof(arr[0]);\n",[49,6816,6817,6824],{"__ignoreMap":47},[52,6818,6819,6821],{"class":54,"line":55},[52,6820,3223],{"class":58},[52,6822,6823],{"class":79},"(arr);\n",[52,6825,6826,6828,6831,6833],{"class":54,"line":66},[52,6827,3223],{"class":58},[52,6829,6830],{"class":79},"(arr[",[52,6832,692],{"class":308},[52,6834,2350],{"class":79},[29,6836,6837],{},[32,6838,6839],{},"2.可以获取数组在内存中的首地址:",[42,6841,6843],{"className":44,"code":6842,"language":46,"meta":47,"style":47},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[49,6844,6845,6850,6863,6868],{"__ignoreMap":47},[52,6846,6847],{"class":54,"line":55},[52,6848,6849],{"class":94},"\u002F\u002F查看16进制的首地址\n",[52,6851,6852,6854,6856,6859,6861],{"class":54,"line":66},[52,6853,4417],{"class":79},[52,6855,339],{"class":58},[52,6857,6858],{"class":79},"arr",[52,6860,339],{"class":58},[52,6862,357],{"class":79},[52,6864,6865],{"class":54,"line":83},[52,6866,6867],{"class":94},"\u002F\u002F看10进制数\n",[52,6869,6870,6872,6874,6876,6878,6880,6882,6885,6887,6889,6891],{"class":54,"line":91},[52,6871,4417],{"class":79},[52,6873,339],{"class":58},[52,6875,1216],{"class":79},[52,6877,242],{"class":58},[52,6879,2283],{"class":79},[52,6881,1433],{"class":58},[52,6883,6884],{"class":79},"arr[",[52,6886,692],{"class":308},[52,6888,567],{"class":79},[52,6890,339],{"class":58},[52,6892,357],{"class":79},[14,6894,6895],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[29,6897,6898],{},[32,6899,6900],{},"1️⃣五只小猪称体重",[42,6902,6904],{"className":44,"code":6903,"language":46,"meta":47,"style":47},"#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",[49,6905,6906,6912,6922,6930,6934,6973,6986,7012,7016,7028,7032,7042,7046,7050,7063,7071],{"__ignoreMap":47},[52,6907,6908,6910],{"class":54,"line":55},[52,6909,59],{"class":58},[52,6911,63],{"class":62},[52,6913,6914,6916,6918,6920],{"class":54,"line":66},[52,6915,69],{"class":58},[52,6917,72],{"class":58},[52,6919,76],{"class":75},[52,6921,80],{"class":79},[52,6923,6924,6926,6928],{"class":54,"line":83},[52,6925,242],{"class":58},[52,6927,245],{"class":75},[52,6929,248],{"class":79},[52,6931,6932],{"class":54,"line":91},[52,6933,110],{"class":79},[52,6935,6936,6938,6941,6943,6945,6947,6949,6952,6954,6957,6959,6961,6963,6966,6968,6971],{"class":54,"line":98},[52,6937,147],{"class":58},[52,6939,6940],{"class":79}," arr[",[52,6942,1805],{"class":308},[52,6944,567],{"class":79},[52,6946,292],{"class":58},[52,6948,383],{"class":79},[52,6950,6951],{"class":308},"300",[52,6953,389],{"class":79},[52,6955,6956],{"class":308},"350",[52,6958,389],{"class":79},[52,6960,856],{"class":308},[52,6962,389],{"class":79},[52,6964,6965],{"class":308},"400",[52,6967,389],{"class":79},[52,6969,6970],{"class":308},"250",[52,6972,170],{"class":79},[52,6974,6975,6977,6980,6982,6984],{"class":54,"line":107},[52,6976,147],{"class":58},[52,6978,6979],{"class":79}," tmp",[52,6981,292],{"class":58},[52,6983,692],{"class":308},[52,6985,80],{"class":79},[52,6987,6988,6990,6992,6994,6996,6998,7000,7002,7004,7006,7008,7010],{"class":54,"line":113},[52,6989,679],{"class":58},[52,6991,682],{"class":79},[52,6993,242],{"class":58},[52,6995,687],{"class":79},[52,6997,292],{"class":58},[52,6999,692],{"class":308},[52,7001,695],{"class":79},[52,7003,698],{"class":58},[52,7005,1805],{"class":308},[52,7007,695],{"class":79},[52,7009,705],{"class":58},[52,7011,708],{"class":79},[52,7013,7014],{"class":54,"line":119},[52,7015,575],{"class":79},[52,7017,7018,7020,7023,7025],{"class":54,"line":126},[52,7019,5497],{"class":58},[52,7021,7022],{"class":79},"(tmp",[52,7024,698],{"class":58},[52,7026,7027],{"class":79},"arr[i])\n",[52,7029,7030],{"class":54,"line":132},[52,7031,1958],{"class":79},[52,7033,7034,7037,7039],{"class":54,"line":138},[52,7035,7036],{"class":79},"            tmp",[52,7038,292],{"class":58},[52,7040,7041],{"class":79},"arr[i];\n",[52,7043,7044],{"class":54,"line":144},[52,7045,2039],{"class":79},[52,7047,7048],{"class":54,"line":153},[52,7049,616],{"class":79},[52,7051,7052,7054,7056,7059,7061],{"class":54,"line":159},[52,7053,336],{"class":79},[52,7055,339],{"class":58},[52,7057,7058],{"class":79},"tmp",[52,7060,339],{"class":58},[52,7062,357],{"class":79},[52,7064,7065,7067,7069],{"class":54,"line":167},[52,7066,1441],{"class":58},[52,7068,1444],{"class":308},[52,7070,80],{"class":79},[52,7072,7073],{"class":54,"line":173},[52,7074,452],{"class":79},[29,7076,7077],{},[32,7078,7079],{},"2️⃣数组元素逆置",[42,7081,7083],{"className":44,"code":7082,"language":46,"meta":47,"style":47},"\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",[49,7084,7085,7090,7096,7106,7114,7118,7153,7169,7199,7212,7217,7222,7234,7244,7253,7258,7267,7277,7282,7287,7314,7318,7334,7338,7349,7358],{"__ignoreMap":47},[52,7086,7087],{"class":54,"line":55},[52,7088,7089],{"class":94},"\u002F\u002F元素逆置\n",[52,7091,7092,7094],{"class":54,"line":66},[52,7093,59],{"class":58},[52,7095,63],{"class":62},[52,7097,7098,7100,7102,7104],{"class":54,"line":83},[52,7099,69],{"class":58},[52,7101,72],{"class":58},[52,7103,76],{"class":75},[52,7105,80],{"class":79},[52,7107,7108,7110,7112],{"class":54,"line":91},[52,7109,242],{"class":58},[52,7111,245],{"class":75},[52,7113,248],{"class":79},[52,7115,7116],{"class":54,"line":98},[52,7117,110],{"class":79},[52,7119,7120,7123,7125,7127,7129,7131,7133,7135,7137,7139,7141,7143,7145,7147,7149,7151],{"class":54,"line":107},[52,7121,7122],{"class":58},"   int",[52,7124,6940],{"class":79},[52,7126,1805],{"class":308},[52,7128,567],{"class":79},[52,7130,292],{"class":58},[52,7132,383],{"class":79},[52,7134,629],{"class":308},[52,7136,389],{"class":79},[52,7138,564],{"class":308},[52,7140,389],{"class":79},[52,7142,2313],{"class":308},[52,7144,389],{"class":79},[52,7146,3504],{"class":308},[52,7148,389],{"class":79},[52,7150,1805],{"class":308},[52,7152,170],{"class":79},[52,7154,7155,7157,7160,7162,7164,7166],{"class":54,"line":113},[52,7156,7122],{"class":58},[52,7158,7159],{"class":79}," start",[52,7161,292],{"class":58},[52,7163,692],{"class":308},[52,7165,2010],{"class":79},[52,7167,7168],{"class":94},"\u002F\u002F起始下标\n",[52,7170,7171,7173,7176,7178,7181,7183,7185,7187,7190,7192,7194,7196],{"class":54,"line":119},[52,7172,7122],{"class":58},[52,7174,7175],{"class":79}," end",[52,7177,3032],{"class":58},[52,7179,7180],{"class":79},"(arr)",[52,7182,3038],{"class":58},[52,7184,6830],{"class":79},[52,7186,692],{"class":308},[52,7188,7189],{"class":79},"])",[52,7191,2642],{"class":58},[52,7193,629],{"class":308},[52,7195,2010],{"class":79},[52,7197,7198],{"class":94},"\u002F\u002F结束下标\n",[52,7200,7201,7204,7207,7209],{"class":54,"line":126},[52,7202,7203],{"class":58},"   while",[52,7205,7206],{"class":79}," (start",[52,7208,698],{"class":58},[52,7210,7211],{"class":79},"end)\n",[52,7213,7214],{"class":54,"line":132},[52,7215,7216],{"class":79},"   {\n",[52,7218,7219],{"class":54,"line":138},[52,7220,7221],{"class":94},"    \u002F\u002F实现元素互换代码\n",[52,7223,7224,7226,7229,7231],{"class":54,"line":144},[52,7225,147],{"class":58},[52,7227,7228],{"class":79}," temp",[52,7230,292],{"class":58},[52,7232,7233],{"class":79},"arr[start];\n",[52,7235,7236,7239,7241],{"class":54,"line":153},[52,7237,7238],{"class":79},"    arr[start]",[52,7240,292],{"class":58},[52,7242,7243],{"class":79},"arr[end];\n",[52,7245,7246,7249,7251],{"class":54,"line":159},[52,7247,7248],{"class":79},"    arr[end]",[52,7250,292],{"class":58},[52,7252,2758],{"class":79},[52,7254,7255],{"class":54,"line":167},[52,7256,7257],{"class":94},"    \u002F\u002F下标更新\n",[52,7259,7260,7263,7265],{"class":54,"line":173},[52,7261,7262],{"class":79},"    start",[52,7264,705],{"class":58},[52,7266,80],{"class":79},[52,7268,7269,7272,7275],{"class":54,"line":181},[52,7270,7271],{"class":79},"    end",[52,7273,7274],{"class":58},"--",[52,7276,80],{"class":79},[52,7278,7279],{"class":54,"line":186},[52,7280,7281],{"class":79},"   }\n",[52,7283,7284],{"class":54,"line":191},[52,7285,7286],{"class":94},"   \u002F\u002F输出逆置后的数组\n",[52,7288,7289,7292,7294,7296,7298,7300,7302,7304,7306,7308,7310,7312],{"class":54,"line":196},[52,7290,7291],{"class":58},"   for",[52,7293,682],{"class":79},[52,7295,242],{"class":58},[52,7297,687],{"class":79},[52,7299,292],{"class":58},[52,7301,692],{"class":308},[52,7303,695],{"class":79},[52,7305,698],{"class":58},[52,7307,1805],{"class":308},[52,7309,695],{"class":79},[52,7311,705],{"class":58},[52,7313,708],{"class":79},[52,7315,7316],{"class":54,"line":201},[52,7317,7216],{"class":79},[52,7319,7320,7322,7324,7327,7329,7332],{"class":54,"line":206},[52,7321,336],{"class":79},[52,7323,339],{"class":58},[52,7325,7326],{"class":79},"arr[i]",[52,7328,339],{"class":58},[52,7330,7331],{"class":62},"\" \"",[52,7333,80],{"class":79},[52,7335,7336],{"class":54,"line":211},[52,7337,7281],{"class":79},[52,7339,7340,7343,7345,7347],{"class":54,"line":218},[52,7341,7342],{"class":75},"   system",[52,7344,1216],{"class":79},[52,7346,5318],{"class":62},[52,7348,2737],{"class":79},[52,7350,7351,7354,7356],{"class":54,"line":223},[52,7352,7353],{"class":58},"   return",[52,7355,1444],{"class":308},[52,7357,80],{"class":79},[52,7359,7360],{"class":54,"line":230},[52,7361,452],{"class":79},[29,7363,7364],{},[32,7365,7366],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[42,7368,7370],{"className":44,"code":7369,"language":46,"meta":47,"style":47},"\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",[49,7371,7372,7377,7383,7393,7401,7405,7457,7470,7496,7500,7514,7518,7523,7528,7558,7562,7567,7601,7605,7610,7630,7635,7647,7662,7677,7682,7686,7690,7703,7729,7733,7747,7751,7759],{"__ignoreMap":47},[52,7373,7374],{"class":54,"line":55},[52,7375,7376],{"class":94},"\u002F\u002F冒泡排序,升序\n",[52,7378,7379,7381],{"class":54,"line":66},[52,7380,59],{"class":58},[52,7382,63],{"class":62},[52,7384,7385,7387,7389,7391],{"class":54,"line":83},[52,7386,69],{"class":58},[52,7388,72],{"class":58},[52,7390,76],{"class":75},[52,7392,80],{"class":79},[52,7394,7395,7397,7399],{"class":54,"line":91},[52,7396,242],{"class":58},[52,7398,245],{"class":75},[52,7400,248],{"class":79},[52,7402,7403],{"class":54,"line":98},[52,7404,110],{"class":79},[52,7406,7407,7409,7411,7413,7416,7418,7421,7423,7425,7427,7429,7431,7433,7435,7437,7439,7441,7443,7445,7447,7449,7451,7453,7455],{"class":54,"line":107},[52,7408,147],{"class":58},[52,7410,6940],{"class":79},[52,7412,3624],{"class":308},[52,7414,7415],{"class":79},"] ",[52,7417,292],{"class":58},[52,7419,7420],{"class":79}," {",[52,7422,3504],{"class":308},[52,7424,389],{"class":79},[52,7426,564],{"class":308},[52,7428,389],{"class":79},[52,7430,3600],{"class":308},[52,7432,389],{"class":79},[52,7434,692],{"class":308},[52,7436,389],{"class":79},[52,7438,1805],{"class":308},[52,7440,389],{"class":79},[52,7442,3575],{"class":308},[52,7444,389],{"class":79},[52,7446,629],{"class":308},[52,7448,389],{"class":79},[52,7450,2313],{"class":308},[52,7452,389],{"class":79},[52,7454,3624],{"class":308},[52,7456,170],{"class":79},[52,7458,7459,7461,7463,7466,7468],{"class":54,"line":113},[52,7460,336],{"class":79},[52,7462,339],{"class":58},[52,7464,7465],{"class":62},"\"排序前：\"",[52,7467,339],{"class":58},[52,7469,357],{"class":79},[52,7471,7472,7474,7476,7478,7480,7482,7484,7486,7488,7490,7492,7494],{"class":54,"line":119},[52,7473,679],{"class":58},[52,7475,682],{"class":79},[52,7477,242],{"class":58},[52,7479,687],{"class":79},[52,7481,292],{"class":58},[52,7483,692],{"class":308},[52,7485,695],{"class":79},[52,7487,698],{"class":58},[52,7489,3624],{"class":308},[52,7491,695],{"class":79},[52,7493,705],{"class":58},[52,7495,708],{"class":79},[52,7497,7498],{"class":54,"line":126},[52,7499,575],{"class":79},[52,7501,7502,7504,7506,7508,7510,7512],{"class":54,"line":132},[52,7503,717],{"class":79},[52,7505,339],{"class":58},[52,7507,7326],{"class":79},[52,7509,339],{"class":58},[52,7511,7331],{"class":62},[52,7513,80],{"class":79},[52,7515,7516],{"class":54,"line":138},[52,7517,616],{"class":79},[52,7519,7520],{"class":54,"line":144},[52,7521,7522],{"class":94},"    \u002F\u002F开始冒泡排序\n",[52,7524,7525],{"class":54,"line":153},[52,7526,7527],{"class":94},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[52,7529,7530,7532,7534,7536,7538,7540,7542,7544,7546,7548,7550,7552,7554,7556],{"class":54,"line":159},[52,7531,679],{"class":58},[52,7533,682],{"class":79},[52,7535,242],{"class":58},[52,7537,687],{"class":79},[52,7539,292],{"class":58},[52,7541,692],{"class":308},[52,7543,695],{"class":79},[52,7545,698],{"class":58},[52,7547,3624],{"class":308},[52,7549,2642],{"class":58},[52,7551,629],{"class":308},[52,7553,695],{"class":79},[52,7555,705],{"class":58},[52,7557,708],{"class":79},[52,7559,7560],{"class":54,"line":167},[52,7561,575],{"class":79},[52,7563,7564],{"class":54,"line":173},[52,7565,7566],{"class":94},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[52,7568,7569,7571,7573,7575,7577,7579,7581,7583,7585,7587,7589,7591,7593,7595,7597,7599],{"class":54,"line":181},[52,7570,1927],{"class":58},[52,7572,682],{"class":79},[52,7574,242],{"class":58},[52,7576,2627],{"class":79},[52,7578,292],{"class":58},[52,7580,692],{"class":308},[52,7582,2634],{"class":79},[52,7584,698],{"class":58},[52,7586,3624],{"class":308},[52,7588,2642],{"class":58},[52,7590,3644],{"class":79},[52,7592,2642],{"class":58},[52,7594,629],{"class":308},[52,7596,2634],{"class":79},[52,7598,705],{"class":58},[52,7600,708],{"class":79},[52,7602,7603],{"class":54,"line":186},[52,7604,1958],{"class":79},[52,7606,7607],{"class":54,"line":191},[52,7608,7609],{"class":94},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[52,7611,7612,7615,7618,7620,7623,7625,7627],{"class":54,"line":196},[52,7613,7614],{"class":58},"            if",[52,7616,7617],{"class":79},"(arr[j]",[52,7619,2674],{"class":58},[52,7621,7622],{"class":79},"arr[j",[52,7624,2004],{"class":58},[52,7626,629],{"class":308},[52,7628,7629],{"class":79},"])\n",[52,7631,7632],{"class":54,"line":201},[52,7633,7634],{"class":79},"            {\n",[52,7636,7637,7640,7642,7644],{"class":54,"line":206},[52,7638,7639],{"class":58},"                int",[52,7641,7228],{"class":79},[52,7643,292],{"class":58},[52,7645,7646],{"class":79},"arr[j];\n",[52,7648,7649,7652,7654,7656,7658,7660],{"class":54,"line":211},[52,7650,7651],{"class":79},"                arr[j]",[52,7653,292],{"class":58},[52,7655,7622],{"class":79},[52,7657,2004],{"class":58},[52,7659,629],{"class":308},[52,7661,1808],{"class":79},[52,7663,7664,7667,7669,7671,7673,7675],{"class":54,"line":218},[52,7665,7666],{"class":79},"                arr[j",[52,7668,2004],{"class":58},[52,7670,629],{"class":308},[52,7672,567],{"class":79},[52,7674,292],{"class":58},[52,7676,2758],{"class":79},[52,7678,7679],{"class":54,"line":223},[52,7680,7681],{"class":79},"            }\n",[52,7683,7684],{"class":54,"line":230},[52,7685,2039],{"class":79},[52,7687,7688],{"class":54,"line":239},[52,7689,616],{"class":79},[52,7691,7692,7694,7696,7699,7701],{"class":54,"line":251},[52,7693,336],{"class":79},[52,7695,339],{"class":58},[52,7697,7698],{"class":62},"\"排序后：\"",[52,7700,339],{"class":58},[52,7702,357],{"class":79},[52,7704,7705,7707,7709,7711,7713,7715,7717,7719,7721,7723,7725,7727],{"class":54,"line":256},[52,7706,679],{"class":58},[52,7708,682],{"class":79},[52,7710,242],{"class":58},[52,7712,687],{"class":79},[52,7714,292],{"class":58},[52,7716,692],{"class":308},[52,7718,695],{"class":79},[52,7720,698],{"class":58},[52,7722,3624],{"class":308},[52,7724,695],{"class":79},[52,7726,705],{"class":58},[52,7728,708],{"class":79},[52,7730,7731],{"class":54,"line":262},[52,7732,575],{"class":79},[52,7734,7735,7737,7739,7741,7743,7745],{"class":54,"line":268},[52,7736,717],{"class":79},[52,7738,339],{"class":58},[52,7740,7326],{"class":79},[52,7742,339],{"class":58},[52,7744,7331],{"class":62},[52,7746,80],{"class":79},[52,7748,7749],{"class":54,"line":280},[52,7750,616],{"class":79},[52,7752,7753,7755,7757],{"class":54,"line":286},[52,7754,1441],{"class":58},[52,7756,1444],{"class":308},[52,7758,80],{"class":79},[52,7760,7761],{"class":54,"line":300},[52,7762,452],{"class":79},[3195,7764,7766],{"id":7765},"_172二维数组","1.7.2二维数组",[1696,7768,7769],{},[32,7770,7771],{},"二维数组的四种定义方式",[3353,7773,7774,7783],{},[3356,7775,7776],{},[3359,7777,7778,7781],{},[3362,7779,7780],{},"序号",[3362,7782,6760],{},[3399,7784,7785,7795,7804,7813,7822],{},[3359,7786,7787,7789],{},[3404,7788,629],{},[3404,7790,7791,7792,2010],{},"数据类型 数组名[行数]",[52,7793,7794],{},"列数",[3359,7796,7797,7799],{},[3404,7798,564],{},[3404,7800,7791,7801,7803],{},[52,7802,7794],{},"={ {数据1,数据2}，{数据3，数据4}... }",[3359,7805,7806,7808],{},[3404,7807,2313],{},[3404,7809,7791,7810,7812],{},[52,7811,7794],{},"={数据1,数据2,数据3...}",[3359,7814,7815,7817],{},[3404,7816,3504],{},[3404,7818,7819,7820,7812],{},"数据类型 数组名[]",[52,7821,7794],{},[3359,7823,7824,7827],{},[3404,7825,7826],{},"注意：不能只省略列数",[3404,7828],{},[1696,7830,7831],{"start":66},[32,7832,7833],{},"二维数组数组名",[29,7835,7836,7839],{},[32,7837,7838],{},"1.查看二维数组所占内存空间",[32,7840,7841],{},"2.获取二维数组首地址",[14,7843,7844],{},"已知二维数组，求二维数组的行数与列数",[42,7846,7848],{"className":44,"code":7847,"language":46,"meta":47,"style":47},"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",[49,7849,7850,7858,7862,7879,7883,7899,7915,7919,7944,7977],{"__ignoreMap":47},[52,7851,7852,7854,7856],{"class":54,"line":55},[52,7853,242],{"class":58},[52,7855,245],{"class":75},[52,7857,248],{"class":79},[52,7859,7860],{"class":54,"line":66},[52,7861,110],{"class":79},[52,7863,7864,7866,7868,7870,7873,7875,7877],{"class":54,"line":83},[52,7865,147],{"class":58},[52,7867,6940],{"class":79},[52,7869,564],{"class":308},[52,7871,7872],{"class":79},"][",[52,7874,2313],{"class":308},[52,7876,567],{"class":79},[52,7878,570],{"class":58},[52,7880,7881],{"class":54,"line":91},[52,7882,575],{"class":79},[52,7884,7885,7887,7889,7891,7893,7895,7897],{"class":54,"line":98},[52,7886,580],{"class":79},[52,7888,629],{"class":308},[52,7890,389],{"class":79},[52,7892,564],{"class":308},[52,7894,389],{"class":79},[52,7896,2313],{"class":308},[52,7898,594],{"class":79},[52,7900,7901,7903,7905,7907,7909,7911,7913],{"class":54,"line":107},[52,7902,580],{"class":79},[52,7904,3504],{"class":308},[52,7906,389],{"class":79},[52,7908,1805],{"class":308},[52,7910,389],{"class":79},[52,7912,1125],{"class":308},[52,7914,452],{"class":79},[52,7916,7917],{"class":54,"line":113},[52,7918,3023],{"class":79},[52,7920,7921,7923,7925,7928,7930,7932,7934,7936,7938,7940,7942],{"class":54,"line":119},[52,7922,336],{"class":79},[52,7924,339],{"class":58},[52,7926,7927],{"class":62},"\"二维数组的行数\"",[52,7929,4420],{"class":58},[52,7931,7180],{"class":79},[52,7933,3038],{"class":58},[52,7935,6830],{"class":79},[52,7937,692],{"class":308},[52,7939,7189],{"class":79},[52,7941,339],{"class":58},[52,7943,357],{"class":79},[52,7945,7946,7948,7950,7953,7955,7957,7959,7961,7963,7965,7967,7969,7971,7973,7975],{"class":54,"line":126},[52,7947,336],{"class":79},[52,7949,339],{"class":58},[52,7951,7952],{"class":62},"\"二维数组的列数\"",[52,7954,4420],{"class":58},[52,7956,6830],{"class":79},[52,7958,692],{"class":308},[52,7960,7189],{"class":79},[52,7962,3038],{"class":58},[52,7964,6830],{"class":79},[52,7966,692],{"class":308},[52,7968,7872],{"class":79},[52,7970,692],{"class":308},[52,7972,7189],{"class":79},[52,7974,339],{"class":58},[52,7976,357],{"class":79},[52,7978,7979],{"class":54,"line":132},[52,7980,452],{"class":79},[14,7982,7983],{},"查看二维数组首地址",[42,7985,7987],{"className":44,"code":7986,"language":46,"meta":47,"style":47},"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",[49,7988,7989,8006,8032,8057],{"__ignoreMap":47},[52,7990,7991,7993,7995,7998,8000,8002,8004],{"class":54,"line":55},[52,7992,4417],{"class":79},[52,7994,339],{"class":58},[52,7996,7997],{"class":62},"\"二维数组首地址：\"",[52,7999,339],{"class":58},[52,8001,6858],{"class":79},[52,8003,339],{"class":58},[52,8005,357],{"class":79},[52,8007,8008,8010,8012,8015,8017,8019,8021,8024,8026,8028,8030],{"class":54,"line":66},[52,8009,4417],{"class":79},[52,8011,339],{"class":58},[52,8013,8014],{"class":62},"\"二维数组第一行的首地址：\"",[52,8016,339],{"class":58},[52,8018,1216],{"class":79},[52,8020,242],{"class":58},[52,8022,8023],{"class":79},")arr[",[52,8025,692],{"class":308},[52,8027,567],{"class":79},[52,8029,339],{"class":58},[52,8031,357],{"class":79},[52,8033,8034,8036,8038,8041,8043,8045,8047,8049,8051,8053,8055],{"class":54,"line":83},[52,8035,4417],{"class":79},[52,8037,339],{"class":58},[52,8039,8040],{"class":62},"\"二维数组第二行的首地址：\"",[52,8042,339],{"class":58},[52,8044,1216],{"class":79},[52,8046,242],{"class":58},[52,8048,8023],{"class":79},[52,8050,629],{"class":308},[52,8052,567],{"class":79},[52,8054,339],{"class":58},[52,8056,357],{"class":79},[52,8058,8059,8061,8063,8066,8068,8070,8072,8074,8076,8078,8080,8082,8084,8086,8088,8090],{"class":54,"line":91},[52,8060,4417],{"class":79},[52,8062,339],{"class":58},[52,8064,8065],{"class":62},"\"二维数组第一个元素的首地址:\"",[52,8067,339],{"class":58},[52,8069,1216],{"class":79},[52,8071,242],{"class":58},[52,8073,2283],{"class":79},[52,8075,1433],{"class":58},[52,8077,6884],{"class":79},[52,8079,692],{"class":308},[52,8081,7872],{"class":79},[52,8083,692],{"class":308},[52,8085,567],{"class":79},[52,8087,339],{"class":58},[52,8089,4290],{"class":79},[52,8091,8092],{"class":94},"\u002F\u002F对于数，要加取址符\n",[3141,8094,8095],{},"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":47,"searchDepth":66,"depth":66,"links":8097},[8098,8099,8100,8108,8109,8115,8120],{"id":3170,"depth":66,"text":3171},{"id":3177,"depth":66,"text":3178},{"id":3192,"depth":66,"text":3193,"children":8101},[8102,8103,8104,8105,8106,8107],{"id":3197,"depth":83,"text":3198},{"id":3239,"depth":83,"text":3240},{"id":3302,"depth":83,"text":3303},{"id":4209,"depth":83,"text":4210},{"id":4296,"depth":83,"text":4297},{"id":4391,"depth":83,"text":4392},{"id":4433,"depth":66,"text":4434},{"id":4500,"depth":66,"text":4501,"children":8110},[8111,8112,8113,8114],{"id":4504,"depth":83,"text":4505},{"id":4526,"depth":83,"text":4527},{"id":4535,"depth":83,"text":4536},{"id":4544,"depth":83,"text":4545},{"id":4553,"depth":66,"text":4554,"children":8116},[8117,8118,8119],{"id":4557,"depth":83,"text":4558},{"id":5216,"depth":83,"text":5217},{"id":6602,"depth":83,"text":6603},{"id":6741,"depth":66,"text":6742,"children":8121},[8122,8123],{"id":6745,"depth":83,"text":6746},{"id":7765,"depth":83,"text":7766},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":3162,"description":47},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":8130,"title":8131,"body":8132,"description":47,"extension":3153,"meta":9229,"navigation":122,"path":9230,"seo":9231,"stem":9232,"__hash__":9233},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":8133,"toc":9221},[8134,8137,8141,8149,8157,8160,8225,8229,8232,8308,8312,8315,8318,8321,8533,8537,8542,8606,8611,8678,8683,8774,8777,8882,8886,8889,8895,9038,9042,9045,9059,9062,9107,9110,9218],[10,8135,8131],{"id":8136},"_2函数",[18,8138,8140],{"id":8139},"_21函数概述","2.1函数概述",[1696,8142,8143,8146],{},[32,8144,8145],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[32,8147,8148],{},"语法：",[42,8150,8155],{"className":8151,"code":8153,"language":8154,"meta":47},[8152],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[49,8156,8153],{"__ignoreMap":47},[14,8158,8159],{},"小案例",[42,8161,8163],{"className":44,"code":8162,"language":46,"meta":47,"style":47},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[49,8164,8165,8170,8193,8197,8214,8221],{"__ignoreMap":47},[52,8166,8167],{"class":54,"line":55},[52,8168,8169],{"class":94},"\u002F\u002Fnum1,num2形参\n",[52,8171,8172,8174,8177,8179,8181,8184,8186,8188,8191],{"class":54,"line":66},[52,8173,242],{"class":58},[52,8175,8176],{"class":75}," add",[52,8178,1216],{"class":79},[52,8180,242],{"class":58},[52,8182,8183],{"class":1223}," num1",[52,8185,389],{"class":79},[52,8187,242],{"class":58},[52,8189,8190],{"class":1223}," num2",[52,8192,708],{"class":79},[52,8194,8195],{"class":54,"line":83},[52,8196,110],{"class":79},[52,8198,8199,8201,8204,8206,8209,8211],{"class":54,"line":91},[52,8200,147],{"class":58},[52,8202,8203],{"class":79}," sum",[52,8205,292],{"class":58},[52,8207,8208],{"class":79},"num1",[52,8210,2004],{"class":58},[52,8212,8213],{"class":79},"num2;\n",[52,8215,8216,8218],{"class":54,"line":98},[52,8217,1441],{"class":58},[52,8219,8220],{"class":79}," sum;\n",[52,8222,8223],{"class":54,"line":107},[52,8224,452],{"class":79},[18,8226,8228],{"id":8227},"_22函数调用","2.2函数调用",[14,8230,8231],{},"调用刚刚写的求和函数",[42,8233,8235],{"className":44,"code":8234,"language":46,"meta":47,"style":47},"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",[49,8236,8237,8245,8249,8254,8266,8278,8287,8292,8304],{"__ignoreMap":47},[52,8238,8239,8241,8243],{"class":54,"line":55},[52,8240,242],{"class":58},[52,8242,245],{"class":75},[52,8244,248],{"class":79},[52,8246,8247],{"class":54,"line":66},[52,8248,110],{"class":79},[52,8250,8251],{"class":54,"line":83},[52,8252,8253],{"class":94},"    \u002F\u002Fa,b实参\n",[52,8255,8256,8258,8260,8262,8264],{"class":54,"line":91},[52,8257,147],{"class":58},[52,8259,4446],{"class":79},[52,8261,292],{"class":58},[52,8263,692],{"class":308},[52,8265,80],{"class":79},[52,8267,8268,8270,8272,8274,8276],{"class":54,"line":98},[52,8269,147],{"class":58},[52,8271,5822],{"class":79},[52,8273,292],{"class":58},[52,8275,692],{"class":308},[52,8277,80],{"class":79},[52,8279,8280,8282,8284],{"class":54,"line":107},[52,8281,5026],{"class":79},[52,8283,4477],{"class":58},[52,8285,8286],{"class":79},"a,b;\n",[52,8288,8289],{"class":54,"line":113},[52,8290,8291],{"class":94},"    \u002F\u002F调用函数时，实参值传给了形参\n",[52,8293,8294,8296,8298,8301],{"class":54,"line":119},[52,8295,336],{"class":79},[52,8297,339],{"class":58},[52,8299,8300],{"class":75},"add",[52,8302,8303],{"class":79},"(a,b);\n",[52,8305,8306],{"class":54,"line":126},[52,8307,452],{"class":79},[18,8309,8311],{"id":8310},"_23值传递","2.3值传递",[14,8313,8314],{},"值传递就是函数调用时实参将数值传给形参",[14,8316,8317],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,8319,8320],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[42,8322,8324],{"className":44,"code":8323,"language":46,"meta":47,"style":47},"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",[49,8325,8326,8347,8351,8364,8381,8399,8410,8419,8428,8441,8457,8473,8482,8486,8494,8498,8510,8522,8529],{"__ignoreMap":47},[52,8327,8328,8330,8333,8335,8337,8339,8341,8343,8345],{"class":54,"line":55},[52,8329,1210],{"class":58},[52,8331,8332],{"class":75}," swap",[52,8334,1216],{"class":79},[52,8336,242],{"class":58},[52,8338,8183],{"class":1223},[52,8340,389],{"class":79},[52,8342,242],{"class":58},[52,8344,8190],{"class":1223},[52,8346,708],{"class":79},[52,8348,8349],{"class":54,"line":66},[52,8350,110],{"class":79},[52,8352,8353,8355,8357,8360,8362],{"class":54,"line":83},[52,8354,336],{"class":79},[52,8356,339],{"class":58},[52,8358,8359],{"class":62},"\"交换前：\"",[52,8361,339],{"class":58},[52,8363,357],{"class":79},[52,8365,8366,8368,8370,8373,8375,8377,8379],{"class":54,"line":91},[52,8367,336],{"class":79},[52,8369,339],{"class":58},[52,8371,8372],{"class":62},"\"num1=\"",[52,8374,339],{"class":58},[52,8376,8208],{"class":79},[52,8378,339],{"class":58},[52,8380,357],{"class":79},[52,8382,8383,8385,8387,8390,8392,8395,8397],{"class":54,"line":98},[52,8384,336],{"class":79},[52,8386,339],{"class":58},[52,8388,8389],{"class":62},"\"num2=\"",[52,8391,339],{"class":58},[52,8393,8394],{"class":79},"num2",[52,8396,339],{"class":58},[52,8398,357],{"class":79},[52,8400,8401,8403,8405,8407],{"class":54,"line":107},[52,8402,147],{"class":58},[52,8404,7228],{"class":79},[52,8406,292],{"class":58},[52,8408,8409],{"class":79},"num1;\n",[52,8411,8412,8415,8417],{"class":54,"line":113},[52,8413,8414],{"class":79},"    num1",[52,8416,292],{"class":58},[52,8418,8213],{"class":79},[52,8420,8421,8424,8426],{"class":54,"line":119},[52,8422,8423],{"class":79},"    num2",[52,8425,292],{"class":58},[52,8427,2758],{"class":79},[52,8429,8430,8432,8434,8437,8439],{"class":54,"line":126},[52,8431,336],{"class":79},[52,8433,339],{"class":58},[52,8435,8436],{"class":62},"\"交换后：\"",[52,8438,339],{"class":58},[52,8440,357],{"class":79},[52,8442,8443,8445,8447,8449,8451,8453,8455],{"class":54,"line":132},[52,8444,336],{"class":79},[52,8446,339],{"class":58},[52,8448,8372],{"class":62},[52,8450,339],{"class":58},[52,8452,8208],{"class":79},[52,8454,339],{"class":58},[52,8456,357],{"class":79},[52,8458,8459,8461,8463,8465,8467,8469,8471],{"class":54,"line":138},[52,8460,336],{"class":79},[52,8462,339],{"class":58},[52,8464,8389],{"class":62},[52,8466,339],{"class":58},[52,8468,8394],{"class":79},[52,8470,339],{"class":58},[52,8472,357],{"class":79},[52,8474,8475,8477,8479],{"class":54,"line":144},[52,8476,1441],{"class":58},[52,8478,2010],{"class":79},[52,8480,8481],{"class":94},"\u002F\u002F或者不写\n",[52,8483,8484],{"class":54,"line":153},[52,8485,452],{"class":79},[52,8487,8488,8490,8492],{"class":54,"line":159},[52,8489,242],{"class":58},[52,8491,245],{"class":75},[52,8493,248],{"class":79},[52,8495,8496],{"class":54,"line":167},[52,8497,110],{"class":79},[52,8499,8500,8502,8504,8506,8508],{"class":54,"line":173},[52,8501,147],{"class":58},[52,8503,4446],{"class":79},[52,8505,292],{"class":58},[52,8507,3649],{"class":308},[52,8509,80],{"class":79},[52,8511,8512,8514,8516,8518,8520],{"class":54,"line":181},[52,8513,147],{"class":58},[52,8515,5822],{"class":79},[52,8517,292],{"class":58},[52,8519,444],{"class":308},[52,8521,80],{"class":79},[52,8523,8524,8527],{"class":54,"line":186},[52,8525,8526],{"class":75},"    swap",[52,8528,8303],{"class":79},[52,8530,8531],{"class":54,"line":191},[52,8532,452],{"class":79},[18,8534,8536],{"id":8535},"_24函数的常见形式","2.4函数的常见形式",[1696,8538,8539],{},[32,8540,8541],{},"无参无返",[42,8543,8545],{"className":44,"code":8544,"language":46,"meta":47,"style":47},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[49,8546,8547,8556,8560,8573,8577,8585,8589,8594,8602],{"__ignoreMap":47},[52,8548,8549,8551,8554],{"class":54,"line":55},[52,8550,1210],{"class":58},[52,8552,8553],{"class":75}," test01",[52,8555,248],{"class":79},[52,8557,8558],{"class":54,"line":66},[52,8559,110],{"class":79},[52,8561,8562,8564,8566,8569,8571],{"class":54,"line":83},[52,8563,336],{"class":79},[52,8565,339],{"class":58},[52,8567,8568],{"class":62},"\"你好\"",[52,8570,339],{"class":58},[52,8572,357],{"class":79},[52,8574,8575],{"class":54,"line":91},[52,8576,452],{"class":79},[52,8578,8579,8581,8583],{"class":54,"line":98},[52,8580,242],{"class":58},[52,8582,245],{"class":75},[52,8584,248],{"class":79},[52,8586,8587],{"class":54,"line":107},[52,8588,110],{"class":79},[52,8590,8591],{"class":54,"line":113},[52,8592,8593],{"class":94},"    \u002F\u002F函数调用\n",[52,8595,8596,8599],{"class":54,"line":119},[52,8597,8598],{"class":75},"    test01",[52,8600,8601],{"class":79},"();\n",[52,8603,8604],{"class":54,"line":126},[52,8605,452],{"class":79},[1696,8607,8608],{"start":66},[32,8609,8610],{},"有参无返",[42,8612,8614],{"className":44,"code":8613,"language":46,"meta":47,"style":47},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[49,8615,8616,8631,8635,8647,8651,8659,8663,8674],{"__ignoreMap":47},[52,8617,8618,8620,8623,8625,8627,8629],{"class":54,"line":55},[52,8619,1210],{"class":58},[52,8621,8622],{"class":75}," test02",[52,8624,1216],{"class":79},[52,8626,242],{"class":58},[52,8628,4446],{"class":1223},[52,8630,708],{"class":79},[52,8632,8633],{"class":54,"line":66},[52,8634,110],{"class":79},[52,8636,8637,8639,8641,8643,8645],{"class":54,"line":83},[52,8638,336],{"class":79},[52,8640,339],{"class":58},[52,8642,8568],{"class":62},[52,8644,339],{"class":58},[52,8646,357],{"class":79},[52,8648,8649],{"class":54,"line":91},[52,8650,452],{"class":79},[52,8652,8653,8655,8657],{"class":54,"line":98},[52,8654,242],{"class":58},[52,8656,245],{"class":75},[52,8658,248],{"class":79},[52,8660,8661],{"class":54,"line":107},[52,8662,110],{"class":79},[52,8664,8665,8668,8670,8672],{"class":54,"line":113},[52,8666,8667],{"class":75},"    test02",[52,8669,1216],{"class":79},[52,8671,591],{"class":308},[52,8673,2737],{"class":79},[52,8675,8676],{"class":54,"line":119},[52,8677,452],{"class":79},[1696,8679,8680],{"start":83},[32,8681,8682],{},"无参有返",[42,8684,8686],{"className":44,"code":8685,"language":46,"meta":47,"style":47},"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",[49,8687,8688,8697,8701,8713,8722,8726,8734,8738,8751,8770],{"__ignoreMap":47},[52,8689,8690,8692,8695],{"class":54,"line":55},[52,8691,242],{"class":58},[52,8693,8694],{"class":75}," test03",[52,8696,248],{"class":79},[52,8698,8699],{"class":54,"line":66},[52,8700,110],{"class":79},[52,8702,8703,8705,8707,8709,8711],{"class":54,"line":83},[52,8704,336],{"class":79},[52,8706,339],{"class":58},[52,8708,8568],{"class":62},[52,8710,339],{"class":58},[52,8712,357],{"class":79},[52,8714,8715,8717,8720],{"class":54,"line":91},[52,8716,1441],{"class":58},[52,8718,8719],{"class":308}," 100",[52,8721,80],{"class":79},[52,8723,8724],{"class":54,"line":98},[52,8725,452],{"class":79},[52,8727,8728,8730,8732],{"class":54,"line":107},[52,8729,242],{"class":58},[52,8731,245],{"class":75},[52,8733,248],{"class":79},[52,8735,8736],{"class":54,"line":113},[52,8737,110],{"class":79},[52,8739,8740,8742,8744,8746,8749],{"class":54,"line":119},[52,8741,147],{"class":58},[52,8743,8183],{"class":79},[52,8745,292],{"class":58},[52,8747,8748],{"class":75},"test03",[52,8750,8601],{"class":79},[52,8752,8753,8755,8757,8759,8761,8763,8765,8767],{"class":54,"line":126},[52,8754,336],{"class":79},[52,8756,339],{"class":58},[52,8758,8372],{"class":62},[52,8760,339],{"class":58},[52,8762,8208],{"class":79},[52,8764,339],{"class":58},[52,8766,4290],{"class":79},[52,8768,8769],{"class":94}," \u002F\u002F100\n",[52,8771,8772],{"class":54,"line":132},[52,8773,452],{"class":79},[14,8775,8776],{},"4.有参有返",[42,8778,8780],{"className":44,"code":8779,"language":46,"meta":47,"style":47},"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",[49,8781,8782,8797,8801,8814,8820,8824,8833,8837,8849,8863,8878],{"__ignoreMap":47},[52,8783,8784,8786,8789,8791,8793,8795],{"class":54,"line":55},[52,8785,242],{"class":58},[52,8787,8788],{"class":75}," test04",[52,8790,1216],{"class":79},[52,8792,242],{"class":58},[52,8794,4446],{"class":1223},[52,8796,708],{"class":79},[52,8798,8799],{"class":54,"line":66},[52,8800,110],{"class":79},[52,8802,8803,8805,8807,8810,8812],{"class":54,"line":83},[52,8804,336],{"class":79},[52,8806,339],{"class":58},[52,8808,8809],{"class":62},"\"hello\"",[52,8811,339],{"class":58},[52,8813,357],{"class":79},[52,8815,8816,8818],{"class":54,"line":91},[52,8817,1441],{"class":58},[52,8819,4480],{"class":79},[52,8821,8822],{"class":54,"line":98},[52,8823,452],{"class":79},[52,8825,8826,8828,8831],{"class":54,"line":107},[52,8827,242],{"class":58},[52,8829,8830],{"class":75}," mian",[52,8832,248],{"class":79},[52,8834,8835],{"class":54,"line":113},[52,8836,110],{"class":79},[52,8838,8839,8841,8843,8845,8847],{"class":54,"line":119},[52,8840,147],{"class":58},[52,8842,5822],{"class":79},[52,8844,292],{"class":58},[52,8846,629],{"class":308},[52,8848,80],{"class":79},[52,8850,8851,8853,8855,8857,8860],{"class":54,"line":126},[52,8852,147],{"class":58},[52,8854,5838],{"class":79},[52,8856,292],{"class":58},[52,8858,8859],{"class":75},"test04",[52,8861,8862],{"class":79},"(b);\n",[52,8864,8865,8867,8869,8871,8873,8875],{"class":54,"line":132},[52,8866,336],{"class":79},[52,8868,339],{"class":58},[52,8870,3499],{"class":79},[52,8872,339],{"class":58},[52,8874,4290],{"class":79},[52,8876,8877],{"class":94}," \u002F\u002F1\n",[52,8879,8880],{"class":54,"line":138},[52,8881,452],{"class":79},[18,8883,8885],{"id":8884},"_25函数的声明","2.5函数的声明",[14,8887,8888],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,8890,8891,8892],{},"函数的",[2389,8893,8894],{},"声明可以多次，但是函数的定义只能有一次",[42,8896,8898],{"className":44,"code":8897,"language":46,"meta":47,"style":47},"\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",[49,8899,8900,8905,8910,8935,8943,8947,8959,8971,8987,8991,9011,9015,9034],{"__ignoreMap":47},[52,8901,8902],{"class":54,"line":55},[52,8903,8904],{"class":94},"\u002F\u002F函数声明\n",[52,8906,8907],{"class":54,"line":66},[52,8908,8909],{"class":94},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[52,8911,8912,8914,8917,8919,8921,8923,8925,8927,8929,8932],{"class":54,"line":83},[52,8913,242],{"class":58},[52,8915,8916],{"class":75}," max",[52,8918,1216],{"class":79},[52,8920,242],{"class":58},[52,8922,4446],{"class":1223},[52,8924,389],{"class":79},[52,8926,242],{"class":58},[52,8928,5822],{"class":1223},[52,8930,8931],{"class":79},");",[52,8933,8934],{"class":94},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[52,8936,8937,8939,8941],{"class":54,"line":91},[52,8938,242],{"class":58},[52,8940,245],{"class":75},[52,8942,1038],{"class":79},[52,8944,8945],{"class":54,"line":98},[52,8946,110],{"class":79},[52,8948,8949,8951,8953,8955,8957],{"class":54,"line":107},[52,8950,147],{"class":58},[52,8952,4446],{"class":79},[52,8954,292],{"class":58},[52,8956,3649],{"class":308},[52,8958,80],{"class":79},[52,8960,8961,8963,8965,8967,8969],{"class":54,"line":113},[52,8962,147],{"class":58},[52,8964,5822],{"class":79},[52,8966,292],{"class":58},[52,8968,444],{"class":308},[52,8970,80],{"class":79},[52,8972,8973,8975,8977,8980,8983,8985],{"class":54,"line":119},[52,8974,336],{"class":79},[52,8976,339],{"class":58},[52,8978,8979],{"class":75},"max",[52,8981,8982],{"class":79},"(a,b)",[52,8984,339],{"class":58},[52,8986,357],{"class":79},[52,8988,8989],{"class":54,"line":126},[52,8990,452],{"class":79},[52,8992,8993,8995,8997,8999,9001,9003,9005,9007,9009],{"class":54,"line":132},[52,8994,242],{"class":58},[52,8996,8916],{"class":75},[52,8998,1216],{"class":79},[52,9000,242],{"class":58},[52,9002,4446],{"class":1223},[52,9004,389],{"class":79},[52,9006,242],{"class":58},[52,9008,5822],{"class":1223},[52,9010,708],{"class":79},[52,9012,9013],{"class":54,"line":138},[52,9014,110],{"class":79},[52,9016,9017,9019,9021,9023,9025,9027,9029,9031],{"class":54,"line":144},[52,9018,1441],{"class":58},[52,9020,4446],{"class":79},[52,9022,2674],{"class":58},[52,9024,3474],{"class":79},[52,9026,4171],{"class":58},[52,9028,3451],{"class":79},[52,9030,4049],{"class":58},[52,9032,9033],{"class":79},"b;\n",[52,9035,9036],{"class":54,"line":153},[52,9037,452],{"class":79},[18,9039,9041],{"id":9040},"_26函数的分文件编写","2.6函数的分文件编写",[14,9043,9044],{},"4个步骤：",[29,9046,9047,9050,9053,9056],{},[32,9048,9049],{},"1.创建后缀名为.h的头文件",[32,9051,9052],{},"2.创建后缀名为.cpp的源文件",[32,9054,9055],{},"3.在头文件中写函数的定义",[32,9057,9058],{},"4.在源文件中写函数的定义\n示例：",[14,9060,9061],{},"头文件：swap.h",[42,9063,9065],{"className":44,"code":9064,"language":46,"meta":47,"style":47},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[49,9066,9067,9073,9083,9087],{"__ignoreMap":47},[52,9068,9069,9071],{"class":54,"line":55},[52,9070,59],{"class":58},[52,9072,63],{"class":62},[52,9074,9075,9077,9079,9081],{"class":54,"line":66},[52,9076,69],{"class":58},[52,9078,72],{"class":58},[52,9080,76],{"class":75},[52,9082,80],{"class":79},[52,9084,9085],{"class":54,"line":83},[52,9086,8904],{"class":94},[52,9088,9089,9091,9093,9095,9097,9099,9101,9103,9105],{"class":54,"line":91},[52,9090,1210],{"class":58},[52,9092,8332],{"class":75},[52,9094,1216],{"class":79},[52,9096,242],{"class":58},[52,9098,4446],{"class":1223},[52,9100,389],{"class":79},[52,9102,242],{"class":58},[52,9104,5822],{"class":1223},[52,9106,2737],{"class":79},[14,9108,9109],{},"源文件：swap.cpp",[42,9111,9113],{"className":44,"code":9112,"language":46,"meta":47,"style":47},"#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",[49,9114,9115,9122,9127,9147,9151,9162,9171,9180,9197,9214],{"__ignoreMap":47},[52,9116,9117,9119],{"class":54,"line":55},[52,9118,59],{"class":58},[52,9120,9121],{"class":62}," \"swap.h\"\n",[52,9123,9124],{"class":54,"line":66},[52,9125,9126],{"class":94},"\u002F\u002F函数的定义\n",[52,9128,9129,9131,9133,9135,9137,9139,9141,9143,9145],{"class":54,"line":83},[52,9130,1210],{"class":58},[52,9132,8332],{"class":75},[52,9134,1216],{"class":79},[52,9136,242],{"class":58},[52,9138,4446],{"class":1223},[52,9140,389],{"class":79},[52,9142,242],{"class":58},[52,9144,5822],{"class":1223},[52,9146,708],{"class":79},[52,9148,9149],{"class":54,"line":91},[52,9150,110],{"class":79},[52,9152,9153,9155,9157,9159],{"class":54,"line":98},[52,9154,147],{"class":58},[52,9156,7228],{"class":79},[52,9158,292],{"class":58},[52,9160,9161],{"class":79},"a;\n",[52,9163,9164,9167,9169],{"class":54,"line":107},[52,9165,9166],{"class":79},"    a",[52,9168,292],{"class":58},[52,9170,9033],{"class":79},[52,9172,9173,9176,9178],{"class":54,"line":113},[52,9174,9175],{"class":79},"    b",[52,9177,292],{"class":58},[52,9179,2758],{"class":79},[52,9181,9182,9184,9186,9189,9191,9193,9195],{"class":54,"line":119},[52,9183,336],{"class":79},[52,9185,339],{"class":58},[52,9187,9188],{"class":62},"\"a=\"",[52,9190,339],{"class":58},[52,9192,3451],{"class":79},[52,9194,339],{"class":58},[52,9196,357],{"class":79},[52,9198,9199,9201,9203,9206,9208,9210,9212],{"class":54,"line":126},[52,9200,336],{"class":79},[52,9202,339],{"class":58},[52,9204,9205],{"class":62},"\"b=\"",[52,9207,339],{"class":58},[52,9209,3474],{"class":79},[52,9211,339],{"class":58},[52,9213,357],{"class":79},[52,9215,9216],{"class":54,"line":132},[52,9217,452],{"class":79},[3141,9219,9220],{},"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":47,"searchDepth":66,"depth":66,"links":9222},[9223,9224,9225,9226,9227,9228],{"id":8139,"depth":66,"text":8140},{"id":8227,"depth":66,"text":8228},{"id":8310,"depth":66,"text":8311},{"id":8535,"depth":66,"text":8536},{"id":8884,"depth":66,"text":8885},{"id":9040,"depth":66,"text":9041},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":8131,"description":47},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":9235,"title":9236,"body":9237,"description":9244,"extension":3153,"meta":10640,"navigation":122,"path":10641,"seo":10642,"stem":10643,"__hash__":10644},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":9238,"toc":10630},[9239,9242,9245,9249,9410,9414,9417,9420,9423,9426,9564,9568,9571,9574,9577,9642,9646,9651,9718,9721,9725,9728,9739,9744,9763,9766,9771,9790,9793,9797,9816,9819,9823,10058,10062,10065,10068,10071,10232,10235,10239,10242,10248,10627],[10,9240,9236],{"id":9241},"_3指针",[14,9243,9244],{},"通过指针保存一个地址，指针就是个地址",[18,9246,9248],{"id":9247},"_31定义指针","3.1定义指针",[42,9250,9252],{"className":44,"code":9251,"language":46,"meta":47,"style":47},"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",[49,9253,9254,9262,9266,9271,9283,9288,9296,9305,9323,9343,9347,9352,9357,9362,9376,9392,9406],{"__ignoreMap":47},[52,9255,9256,9258,9260],{"class":54,"line":55},[52,9257,242],{"class":58},[52,9259,245],{"class":75},[52,9261,248],{"class":79},[52,9263,9264],{"class":54,"line":66},[52,9265,110],{"class":79},[52,9267,9268],{"class":54,"line":83},[52,9269,9270],{"class":94},"    \u002F\u002F1.定义指针\n",[52,9272,9273,9275,9277,9279,9281],{"class":54,"line":91},[52,9274,147],{"class":58},[52,9276,4446],{"class":79},[52,9278,292],{"class":58},[52,9280,3649],{"class":308},[52,9282,80],{"class":79},[52,9284,9285],{"class":54,"line":98},[52,9286,9287],{"class":94},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[52,9289,9290,9293],{"class":54,"line":107},[52,9291,9292],{"class":58},"    int*",[52,9294,9295],{"class":79},"p;\n",[52,9297,9298,9301,9303],{"class":54,"line":113},[52,9299,9300],{"class":79},"    p",[52,9302,877],{"class":58},[52,9304,9161],{"class":79},[52,9306,9307,9309,9311,9314,9317,9319,9321],{"class":54,"line":119},[52,9308,336],{"class":79},[52,9310,339],{"class":58},[52,9312,9313],{"class":62},"\"a的地址为：\"",[52,9315,9316],{"class":58},"\u003C\u003C&",[52,9318,3451],{"class":79},[52,9320,339],{"class":58},[52,9322,357],{"class":79},[52,9324,9325,9327,9329,9332,9334,9336,9338,9340],{"class":54,"line":126},[52,9326,336],{"class":79},[52,9328,339],{"class":58},[52,9330,9331],{"class":62},"\"指针p为：\"",[52,9333,339],{"class":58},[52,9335,14],{"class":79},[52,9337,339],{"class":58},[52,9339,4290],{"class":79},[52,9341,9342],{"class":94},"\u002F\u002F指针p表示的就是a的地址\n",[52,9344,9345],{"class":54,"line":132},[52,9346,123],{"emptyLinePlaceholder":122},[52,9348,9349],{"class":54,"line":138},[52,9350,9351],{"class":94},"    \u002F\u002F2.使用指针\n",[52,9353,9354],{"class":54,"line":144},[52,9355,9356],{"class":94},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[52,9358,9359],{"class":54,"line":153},[52,9360,9361],{"class":94},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[52,9363,9364,9367,9369,9371,9374],{"class":54,"line":159},[52,9365,9366],{"class":58},"    *",[52,9368,14],{"class":79},[52,9370,292],{"class":58},[52,9372,9373],{"class":308},"1000",[52,9375,80],{"class":79},[52,9377,9378,9380,9383,9385,9387,9389],{"class":54,"line":167},[52,9379,336],{"class":79},[52,9381,9382],{"class":58},"\u003C\u003C*",[52,9384,14],{"class":79},[52,9386,339],{"class":58},[52,9388,4290],{"class":79},[52,9390,9391],{"class":94},"\u002F\u002F1000\n",[52,9393,9394,9396,9398,9400,9402,9404],{"class":54,"line":173},[52,9395,336],{"class":79},[52,9397,339],{"class":58},[52,9399,3451],{"class":79},[52,9401,339],{"class":58},[52,9403,4290],{"class":79},[52,9405,9391],{"class":94},[52,9407,9408],{"class":54,"line":181},[52,9409,452],{"class":79},[18,9411,9413],{"id":9412},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,9415,9416],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,9418,9419],{},"在32位操作系统下：占用4个字节空间",[14,9421,9422],{},"在64位操作系统下：占用8个字节空间",[14,9424,9425],{},"上方是不管啥数据类型的",[42,9427,9429],{"className":44,"code":9428,"language":46,"meta":47,"style":47},"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",[49,9430,9431,9439,9443,9448,9460,9465,9470,9475,9487,9508,9534,9560],{"__ignoreMap":47},[52,9432,9433,9435,9437],{"class":54,"line":55},[52,9434,242],{"class":58},[52,9436,245],{"class":75},[52,9438,248],{"class":79},[52,9440,9441],{"class":54,"line":66},[52,9442,110],{"class":79},[52,9444,9445],{"class":54,"line":83},[52,9446,9447],{"class":94},"    \u002F\u002F指针所占内存空间\n",[52,9449,9450,9452,9454,9456,9458],{"class":54,"line":91},[52,9451,147],{"class":58},[52,9453,4446],{"class":79},[52,9455,292],{"class":58},[52,9457,3649],{"class":308},[52,9459,80],{"class":79},[52,9461,9462],{"class":54,"line":98},[52,9463,9464],{"class":94},"    \u002F\u002Fint *p;\n",[52,9466,9467],{"class":54,"line":107},[52,9468,9469],{"class":94},"    \u002F\u002Fp=&a;\n",[52,9471,9472],{"class":54,"line":113},[52,9473,9474],{"class":94},"    \u002F\u002F上述可以写为以下：\n",[52,9476,9477,9479,9481,9483,9485],{"class":54,"line":119},[52,9478,147],{"class":58},[52,9480,872],{"class":58},[52,9482,14],{"class":79},[52,9484,877],{"class":58},[52,9486,9161],{"class":79},[52,9488,9489,9491,9493,9496,9498,9501,9503,9505],{"class":54,"line":126},[52,9490,1234],{"class":79},[52,9492,339],{"class":58},[52,9494,9495],{"class":62},"\"sizeof(int *)\"",[52,9497,4420],{"class":58},[52,9499,9500],{"class":79},"(p)",[52,9502,339],{"class":58},[52,9504,4290],{"class":79},[52,9506,9507],{"class":94},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[52,9509,9510,9512,9514,9516,9518,9520,9522,9524,9526,9528,9531],{"class":54,"line":132},[52,9511,1234],{"class":79},[52,9513,339],{"class":58},[52,9515,9495],{"class":62},[52,9517,4420],{"class":58},[52,9519,1216],{"class":79},[52,9521,242],{"class":58},[52,9523,872],{"class":58},[52,9525,2283],{"class":79},[52,9527,339],{"class":58},[52,9529,9530],{"class":79},"endl",[52,9532,9533],{"class":94},"  \u002F\u002F4字节(32位的话)\n",[52,9535,9536,9538,9540,9543,9545,9547,9549,9551,9553,9555,9557],{"class":54,"line":138},[52,9537,1234],{"class":79},[52,9539,339],{"class":58},[52,9541,9542],{"class":62},"\"sizeof(char *)\"",[52,9544,4420],{"class":58},[52,9546,1216],{"class":79},[52,9548,3313],{"class":58},[52,9550,872],{"class":58},[52,9552,2283],{"class":79},[52,9554,339],{"class":58},[52,9556,4290],{"class":79},[52,9558,9559],{"class":94}," \u002F\u002F4字节(32位的话)\n",[52,9561,9562],{"class":54,"line":144},[52,9563,452],{"class":79},[18,9565,9567],{"id":9566},"_33空指针","3.3空指针",[14,9569,9570],{},"空指针：指针变量指向内存中编号为0的空间",[14,9572,9573],{},"用途：初始化指针变量",[14,9575,9576],{},"注意：空指针指向的内存是不可以访问的",[42,9578,9580],{"className":44,"code":9579,"language":46,"meta":47,"style":47},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[49,9581,9582,9590,9594,9599,9613,9618,9633,9638],{"__ignoreMap":47},[52,9583,9584,9586,9588],{"class":54,"line":55},[52,9585,242],{"class":58},[52,9587,245],{"class":75},[52,9589,248],{"class":79},[52,9591,9592],{"class":54,"line":66},[52,9593,110],{"class":79},[52,9595,9596],{"class":54,"line":83},[52,9597,9598],{"class":94},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[52,9600,9601,9603,9605,9607,9609,9611],{"class":54,"line":91},[52,9602,147],{"class":58},[52,9604,872],{"class":58},[52,9606,14],{"class":79},[52,9608,292],{"class":58},[52,9610,2291],{"class":308},[52,9612,80],{"class":79},[52,9614,9615],{"class":54,"line":98},[52,9616,9617],{"class":94},"    \u002F\u002F2.空指针不能进行访问\n",[52,9619,9620,9622,9624,9626,9628,9630],{"class":54,"line":107},[52,9621,9366],{"class":58},[52,9623,14],{"class":79},[52,9625,292],{"class":58},[52,9627,591],{"class":308},[52,9629,2010],{"class":79},[52,9631,9632],{"class":94},"\u002F\u002F直接报错，压根不能访问\n",[52,9634,9635],{"class":54,"line":113},[52,9636,9637],{"class":94},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[52,9639,9640],{"class":54,"line":119},[52,9641,452],{"class":79},[18,9643,9645],{"id":9644},"_34野指针","3.4野指针",[14,9647,9648],{},[2389,9649,9650],{},"指针变量指向非法的内存空间",[42,9652,9654],{"className":44,"code":9653,"language":46,"meta":47,"style":47},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[49,9655,9656,9664,9668,9697,9702,9714],{"__ignoreMap":47},[52,9657,9658,9660,9662],{"class":54,"line":55},[52,9659,242],{"class":58},[52,9661,245],{"class":75},[52,9663,248],{"class":79},[52,9665,9666],{"class":54,"line":66},[52,9667,110],{"class":79},[52,9669,9670,9672,9674,9676,9678,9680,9682,9684,9686,9689,9692,9694],{"class":54,"line":83},[52,9671,147],{"class":58},[52,9673,872],{"class":58},[52,9675,14],{"class":79},[52,9677,292],{"class":58},[52,9679,1216],{"class":79},[52,9681,242],{"class":58},[52,9683,872],{"class":58},[52,9685,2283],{"class":79},[52,9687,9688],{"class":58},"0x",[52,9690,9691],{"class":308},"1100",[52,9693,2010],{"class":79},[52,9695,9696],{"class":94}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[52,9698,9699],{"class":54,"line":91},[52,9700,9701],{"class":94},"    \u002F\u002F访问野指针报错\n",[52,9703,9704,9706,9708,9710,9712],{"class":54,"line":98},[52,9705,336],{"class":79},[52,9707,9382],{"class":58},[52,9709,14],{"class":79},[52,9711,339],{"class":58},[52,9713,357],{"class":79},[52,9715,9716],{"class":54,"line":107},[52,9717,452],{"class":79},[14,9719,9720],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[18,9722,9724],{"id":9723},"_35const修饰指针","3.5const修饰指针",[14,9726,9727],{},"三种情况：",[29,9729,9730,9733,9736],{},[32,9731,9732],{},"const修饰指针 常量指针",[32,9734,9735],{},"const修饰常量 指针常量",[32,9737,9738],{},"const即修饰指针，又修饰常量",[1696,9740,9741],{},[32,9742,9743],{},"常量指针",[42,9745,9747],{"className":44,"code":9746,"language":46,"meta":47,"style":47},"const int *p=&a;\n",[49,9748,9749],{"__ignoreMap":47},[52,9750,9751,9753,9755,9757,9759,9761],{"class":54,"line":55},[52,9752,1648],{"class":58},[52,9754,2280],{"class":58},[52,9756,872],{"class":58},[52,9758,14],{"class":79},[52,9760,877],{"class":58},[52,9762,9161],{"class":79},[14,9764,9765],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[1696,9767,9768],{"start":66},[32,9769,9770],{},"指针常量",[42,9772,9774],{"className":44,"code":9773,"language":46,"meta":47,"style":47},"int *const p=&a;\n",[49,9775,9776],{"__ignoreMap":47},[52,9777,9778,9780,9783,9786,9788],{"class":54,"line":55},[52,9779,242],{"class":58},[52,9781,9782],{"class":58}," *const",[52,9784,9785],{"class":79}," p",[52,9787,877],{"class":58},[52,9789,9161],{"class":79},[14,9791,9792],{},"指针的指向不可以改，指针指向的值可以改",[1696,9794,9795],{"start":83},[32,9796,9738],{},[42,9798,9800],{"className":44,"code":9799,"language":46,"meta":47,"style":47},"const int *const p=&a;\n",[49,9801,9802],{"__ignoreMap":47},[52,9803,9804,9806,9808,9810,9812,9814],{"class":54,"line":55},[52,9805,1648],{"class":58},[52,9807,2280],{"class":58},[52,9809,9782],{"class":58},[52,9811,9785],{"class":79},[52,9813,877],{"class":58},[52,9815,9161],{"class":79},[14,9817,9818],{},"指针的指向和指针指向的值都不可以改变",[18,9820,9822],{"id":9821},"_36指针和数组","3.6指针和数组",[42,9824,9826],{"className":44,"code":9825,"language":46,"meta":47,"style":47},"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",[49,9827,9828,9836,9840,9845,9899,9920,9936,9952,9963,9980,9985,9999,10025,10029,10041,10050,10054],{"__ignoreMap":47},[52,9829,9830,9832,9834],{"class":54,"line":55},[52,9831,242],{"class":58},[52,9833,245],{"class":75},[52,9835,248],{"class":79},[52,9837,9838],{"class":54,"line":66},[52,9839,110],{"class":79},[52,9841,9842],{"class":54,"line":83},[52,9843,9844],{"class":94},"    \u002F\u002F利用指针访问数组中的元素\n",[52,9846,9847,9849,9851,9853,9855,9857,9859,9861,9863,9865,9867,9869,9871,9873,9875,9877,9879,9881,9883,9885,9887,9889,9891,9893,9895,9897],{"class":54,"line":91},[52,9848,147],{"class":58},[52,9850,6940],{"class":79},[52,9852,3649],{"class":308},[52,9854,567],{"class":79},[52,9856,292],{"class":58},[52,9858,383],{"class":79},[52,9860,629],{"class":308},[52,9862,389],{"class":79},[52,9864,564],{"class":308},[52,9866,389],{"class":79},[52,9868,2313],{"class":308},[52,9870,389],{"class":79},[52,9872,3504],{"class":308},[52,9874,389],{"class":79},[52,9876,1805],{"class":308},[52,9878,389],{"class":79},[52,9880,1125],{"class":308},[52,9882,389],{"class":79},[52,9884,3575],{"class":308},[52,9886,389],{"class":79},[52,9888,3600],{"class":308},[52,9890,389],{"class":79},[52,9892,3624],{"class":308},[52,9894,389],{"class":79},[52,9896,3649],{"class":308},[52,9898,170],{"class":79},[52,9900,9901,9903,9905,9908,9910,9912,9914,9916,9918],{"class":54,"line":98},[52,9902,336],{"class":79},[52,9904,339],{"class":58},[52,9906,9907],{"class":62},"\"数组的第一个元素为：\"",[52,9909,339],{"class":58},[52,9911,6884],{"class":79},[52,9913,692],{"class":308},[52,9915,567],{"class":79},[52,9917,339],{"class":58},[52,9919,357],{"class":79},[52,9921,9922,9924,9926,9928,9930,9933],{"class":54,"line":107},[52,9923,147],{"class":58},[52,9925,872],{"class":58},[52,9927,14],{"class":79},[52,9929,292],{"class":58},[52,9931,9932],{"class":79},"arr;",[52,9934,9935],{"class":94},"\u002F\u002F注意数才要加取地址符号&\n",[52,9937,9938,9940,9942,9944,9946,9948,9950],{"class":54,"line":113},[52,9939,336],{"class":79},[52,9941,339],{"class":58},[52,9943,9907],{"class":62},[52,9945,9382],{"class":58},[52,9947,14],{"class":79},[52,9949,339],{"class":58},[52,9951,357],{"class":79},[52,9953,9954,9956,9958,9960],{"class":54,"line":119},[52,9955,9300],{"class":79},[52,9957,705],{"class":58},[52,9959,2010],{"class":79},[52,9961,9962],{"class":94}," \u002F\u002F让指针向后偏移4个字节\n",[52,9964,9965,9967,9969,9972,9974,9976,9978],{"class":54,"line":126},[52,9966,336],{"class":79},[52,9968,339],{"class":58},[52,9970,9971],{"class":62},"\"数组的第二个元素为：\"",[52,9973,9382],{"class":58},[52,9975,14],{"class":79},[52,9977,339],{"class":58},[52,9979,357],{"class":79},[52,9981,9982],{"class":54,"line":132},[52,9983,9984],{"class":94},"    \u002F\u002F利用指针遍历数组\n",[52,9986,9987,9989,9991,9994,9996],{"class":54,"line":138},[52,9988,147],{"class":58},[52,9990,872],{"class":58},[52,9992,9993],{"class":79},"p2",[52,9995,292],{"class":58},[52,9997,9998],{"class":79},"arr;\n",[52,10000,10001,10003,10005,10007,10009,10011,10013,10015,10017,10019,10021,10023],{"class":54,"line":144},[52,10002,679],{"class":58},[52,10004,682],{"class":79},[52,10006,242],{"class":58},[52,10008,687],{"class":79},[52,10010,292],{"class":58},[52,10012,692],{"class":308},[52,10014,695],{"class":79},[52,10016,698],{"class":58},[52,10018,3649],{"class":308},[52,10020,695],{"class":79},[52,10022,705],{"class":58},[52,10024,708],{"class":79},[52,10026,10027],{"class":54,"line":153},[52,10028,575],{"class":79},[52,10030,10031,10033,10035,10037,10039],{"class":54,"line":159},[52,10032,717],{"class":79},[52,10034,9382],{"class":58},[52,10036,9993],{"class":79},[52,10038,339],{"class":58},[52,10040,357],{"class":79},[52,10042,10043,10046,10048],{"class":54,"line":167},[52,10044,10045],{"class":79},"        p2",[52,10047,705],{"class":58},[52,10049,80],{"class":79},[52,10051,10052],{"class":54,"line":173},[52,10053,616],{"class":79},[52,10055,10056],{"class":54,"line":181},[52,10057,452],{"class":79},[18,10059,10061],{"id":10060},"_37指针和函数","3.7指针和函数",[14,10063,10064],{},"利用指针做函数参数，可以修改实参的值",[14,10066,10067],{},"值传递：只改变形参，不改变实参",[14,10069,10070],{},"地址传递：",[42,10072,10074],{"className":44,"code":10073,"language":46,"meta":47,"style":47},"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",[49,10075,10076,10101,10105,10116,10127,10137,10141,10149,10153,10165,10177,10182,10198,10213,10228],{"__ignoreMap":47},[52,10077,10078,10080,10082,10084,10086,10088,10091,10093,10095,10097,10099],{"class":54,"line":55},[52,10079,1210],{"class":58},[52,10081,8332],{"class":75},[52,10083,1216],{"class":79},[52,10085,242],{"class":58},[52,10087,872],{"class":58},[52,10089,10090],{"class":1223},"p1",[52,10092,389],{"class":79},[52,10094,242],{"class":58},[52,10096,872],{"class":58},[52,10098,9993],{"class":1223},[52,10100,708],{"class":79},[52,10102,10103],{"class":54,"line":66},[52,10104,110],{"class":79},[52,10106,10107,10109,10111,10113],{"class":54,"line":83},[52,10108,147],{"class":58},[52,10110,7228],{"class":79},[52,10112,2702],{"class":58},[52,10114,10115],{"class":79},"p1;\n",[52,10117,10118,10120,10122,10124],{"class":54,"line":91},[52,10119,9366],{"class":58},[52,10121,10090],{"class":79},[52,10123,2702],{"class":58},[52,10125,10126],{"class":79},"p2;\n",[52,10128,10129,10131,10133,10135],{"class":54,"line":98},[52,10130,9366],{"class":58},[52,10132,9993],{"class":79},[52,10134,292],{"class":58},[52,10136,2758],{"class":79},[52,10138,10139],{"class":54,"line":107},[52,10140,452],{"class":79},[52,10142,10143,10145,10147],{"class":54,"line":113},[52,10144,242],{"class":58},[52,10146,245],{"class":75},[52,10148,248],{"class":79},[52,10150,10151],{"class":54,"line":119},[52,10152,110],{"class":79},[52,10154,10155,10157,10159,10161,10163],{"class":54,"line":126},[52,10156,147],{"class":58},[52,10158,4446],{"class":79},[52,10160,292],{"class":58},[52,10162,3649],{"class":308},[52,10164,80],{"class":79},[52,10166,10167,10169,10171,10173,10175],{"class":54,"line":132},[52,10168,147],{"class":58},[52,10170,5822],{"class":79},[52,10172,292],{"class":58},[52,10174,444],{"class":308},[52,10176,80],{"class":79},[52,10178,10179],{"class":54,"line":138},[52,10180,10181],{"class":94},"    \u002F\u002F地址传递\n",[52,10183,10184,10186,10188,10190,10193,10195],{"class":54,"line":144},[52,10185,8526],{"class":75},[52,10187,1216],{"class":79},[52,10189,1433],{"class":58},[52,10191,10192],{"class":79},"a,",[52,10194,1433],{"class":58},[52,10196,10197],{"class":79},"b);\n",[52,10199,10200,10202,10204,10206,10208,10210],{"class":54,"line":153},[52,10201,336],{"class":79},[52,10203,339],{"class":58},[52,10205,3451],{"class":79},[52,10207,339],{"class":58},[52,10209,4290],{"class":79},[52,10211,10212],{"class":94},"\u002F\u002F20\n",[52,10214,10215,10217,10219,10221,10223,10225],{"class":54,"line":159},[52,10216,336],{"class":79},[52,10218,339],{"class":58},[52,10220,3474],{"class":79},[52,10222,339],{"class":58},[52,10224,4290],{"class":79},[52,10226,10227],{"class":94},"\u002F\u002F10\n",[52,10229,10230],{"class":54,"line":167},[52,10231,452],{"class":79},[14,10233,10234],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[18,10236,10238],{"id":10237},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,10240,10241],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,10243,10244,10245,10247],{},"例如数组：int arr",[52,10246,3649],{},"={4,3,6,9,1,2,10,8,7,5}",[42,10249,10251],{"className":44,"code":10250,"language":46,"meta":47,"style":47},"#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",[49,10252,10253,10259,10269,10291,10295,10325,10329,10363,10367,10385,10389,10400,10415,10430,10434,10438,10442,10446,10450,10458,10462,10467,10521,10533,10545,10550,10557,10561,10566,10591,10595,10610,10619,10623],{"__ignoreMap":47},[52,10254,10255,10257],{"class":54,"line":55},[52,10256,59],{"class":58},[52,10258,63],{"class":62},[52,10260,10261,10263,10265,10267],{"class":54,"line":66},[52,10262,69],{"class":58},[52,10264,72],{"class":58},[52,10266,76],{"class":75},[52,10268,80],{"class":79},[52,10270,10271,10273,10275,10277,10279,10281,10283,10285,10287,10289],{"class":54,"line":83},[52,10272,1210],{"class":58},[52,10274,2565],{"class":75},[52,10276,1216],{"class":79},[52,10278,242],{"class":58},[52,10280,872],{"class":58},[52,10282,14],{"class":1223},[52,10284,389],{"class":79},[52,10286,242],{"class":58},[52,10288,1842],{"class":1223},[52,10290,708],{"class":79},[52,10292,10293],{"class":54,"line":91},[52,10294,110],{"class":79},[52,10296,10297,10299,10301,10303,10305,10307,10309,10311,10313,10315,10317,10319,10321,10323],{"class":54,"line":98},[52,10298,679],{"class":58},[52,10300,1216],{"class":79},[52,10302,242],{"class":58},[52,10304,687],{"class":79},[52,10306,292],{"class":58},[52,10308,692],{"class":308},[52,10310,695],{"class":79},[52,10312,698],{"class":58},[52,10314,2639],{"class":79},[52,10316,2642],{"class":58},[52,10318,629],{"class":308},[52,10320,695],{"class":79},[52,10322,705],{"class":58},[52,10324,708],{"class":79},[52,10326,10327],{"class":54,"line":107},[52,10328,575],{"class":79},[52,10330,10331,10333,10335,10337,10339,10341,10343,10345,10347,10349,10351,10353,10355,10357,10359,10361],{"class":54,"line":113},[52,10332,1927],{"class":58},[52,10334,1216],{"class":79},[52,10336,242],{"class":58},[52,10338,2627],{"class":79},[52,10340,292],{"class":58},[52,10342,692],{"class":308},[52,10344,2634],{"class":79},[52,10346,698],{"class":58},[52,10348,2639],{"class":79},[52,10350,2642],{"class":58},[52,10352,3644],{"class":79},[52,10354,2642],{"class":58},[52,10356,629],{"class":308},[52,10358,2634],{"class":79},[52,10360,705],{"class":58},[52,10362,708],{"class":79},[52,10364,10365],{"class":54,"line":119},[52,10366,1958],{"class":79},[52,10368,10369,10371,10374,10376,10379,10381,10383],{"class":54,"line":126},[52,10370,7614],{"class":58},[52,10372,10373],{"class":79},"(p[j]",[52,10375,2674],{"class":58},[52,10377,10378],{"class":79},"p[j",[52,10380,2004],{"class":58},[52,10382,629],{"class":308},[52,10384,7629],{"class":79},[52,10386,10387],{"class":54,"line":132},[52,10388,7634],{"class":79},[52,10390,10391,10393,10395,10397],{"class":54,"line":138},[52,10392,7639],{"class":58},[52,10394,7228],{"class":79},[52,10396,292],{"class":58},[52,10398,10399],{"class":79},"p[j];\n",[52,10401,10402,10405,10407,10409,10411,10413],{"class":54,"line":144},[52,10403,10404],{"class":79},"                p[j]",[52,10406,292],{"class":58},[52,10408,10378],{"class":79},[52,10410,2004],{"class":58},[52,10412,629],{"class":308},[52,10414,1808],{"class":79},[52,10416,10417,10420,10422,10424,10426,10428],{"class":54,"line":153},[52,10418,10419],{"class":79},"                p[j",[52,10421,2004],{"class":58},[52,10423,629],{"class":308},[52,10425,567],{"class":79},[52,10427,292],{"class":58},[52,10429,2758],{"class":79},[52,10431,10432],{"class":54,"line":159},[52,10433,7681],{"class":79},[52,10435,10436],{"class":54,"line":167},[52,10437,2039],{"class":79},[52,10439,10440],{"class":54,"line":173},[52,10441,616],{"class":79},[52,10443,10444],{"class":54,"line":181},[52,10445,452],{"class":79},[52,10447,10448],{"class":54,"line":186},[52,10449,123],{"emptyLinePlaceholder":122},[52,10451,10452,10454,10456],{"class":54,"line":191},[52,10453,242],{"class":58},[52,10455,245],{"class":75},[52,10457,248],{"class":79},[52,10459,10460],{"class":54,"line":196},[52,10461,110],{"class":79},[52,10463,10464],{"class":54,"line":201},[52,10465,10466],{"class":94},"    \u002F\u002F 1.创建数组\n",[52,10468,10469,10471,10473,10475,10477,10479,10481,10483,10485,10487,10489,10491,10493,10495,10497,10499,10501,10503,10505,10507,10509,10511,10513,10515,10517,10519],{"class":54,"line":206},[52,10470,147],{"class":58},[52,10472,6940],{"class":79},[52,10474,3649],{"class":308},[52,10476,567],{"class":79},[52,10478,292],{"class":58},[52,10480,383],{"class":79},[52,10482,3504],{"class":308},[52,10484,389],{"class":79},[52,10486,2313],{"class":308},[52,10488,389],{"class":79},[52,10490,1125],{"class":308},[52,10492,389],{"class":79},[52,10494,3624],{"class":308},[52,10496,389],{"class":79},[52,10498,629],{"class":308},[52,10500,389],{"class":79},[52,10502,564],{"class":308},[52,10504,389],{"class":79},[52,10506,3649],{"class":308},[52,10508,389],{"class":79},[52,10510,3600],{"class":308},[52,10512,389],{"class":79},[52,10514,3575],{"class":308},[52,10516,389],{"class":79},[52,10518,1805],{"class":308},[52,10520,170],{"class":79},[52,10522,10523,10525,10527,10529,10531],{"class":54,"line":211},[52,10524,147],{"class":58},[52,10526,1842],{"class":79},[52,10528,292],{"class":58},[52,10530,3649],{"class":308},[52,10532,80],{"class":79},[52,10534,10535,10537,10539,10541,10543],{"class":54,"line":218},[52,10536,147],{"class":58},[52,10538,872],{"class":58},[52,10540,14],{"class":79},[52,10542,292],{"class":58},[52,10544,9998],{"class":79},[52,10546,10547],{"class":54,"line":223},[52,10548,10549],{"class":94},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[52,10551,10552,10554],{"class":54,"line":230},[52,10553,3103],{"class":75},[52,10555,10556],{"class":79},"(p,len);\n",[52,10558,10559],{"class":54,"line":239},[52,10560,123],{"emptyLinePlaceholder":122},[52,10562,10563],{"class":54,"line":251},[52,10564,10565],{"class":94},"    \u002F\u002F 3.打印排序后的数组\n",[52,10567,10568,10570,10572,10574,10576,10578,10580,10582,10584,10587,10589],{"class":54,"line":256},[52,10569,679],{"class":58},[52,10571,682],{"class":79},[52,10573,242],{"class":58},[52,10575,687],{"class":79},[52,10577,292],{"class":58},[52,10579,692],{"class":308},[52,10581,6200],{"class":79},[52,10583,698],{"class":58},[52,10585,10586],{"class":79},"len; i",[52,10588,705],{"class":58},[52,10590,708],{"class":79},[52,10592,10593],{"class":54,"line":262},[52,10594,575],{"class":79},[52,10596,10597,10599,10601,10603,10605,10608],{"class":54,"line":268},[52,10598,717],{"class":79},[52,10600,9382],{"class":58},[52,10602,14],{"class":79},[52,10604,339],{"class":58},[52,10606,10607],{"class":62},"\"\"",[52,10609,80],{"class":79},[52,10611,10612,10615,10617],{"class":54,"line":280},[52,10613,10614],{"class":79},"        p",[52,10616,705],{"class":58},[52,10618,80],{"class":79},[52,10620,10621],{"class":54,"line":286},[52,10622,616],{"class":79},[52,10624,10625],{"class":54,"line":300},[52,10626,452],{"class":79},[3141,10628,10629],{},"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":47,"searchDepth":66,"depth":66,"links":10631},[10632,10633,10634,10635,10636,10637,10638,10639],{"id":9247,"depth":66,"text":9248},{"id":9412,"depth":66,"text":9413},{"id":9566,"depth":66,"text":9567},{"id":9644,"depth":66,"text":9645},{"id":9723,"depth":66,"text":9724},{"id":9821,"depth":66,"text":9822},{"id":10060,"depth":66,"text":10061},{"id":10237,"depth":66,"text":10238},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":9236,"description":9244},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":4,"title":5,"body":10646,"description":16,"extension":3153,"meta":13325,"navigation":122,"path":3155,"seo":13326,"stem":3157,"__hash__":3158},{"type":7,"value":10647,"toc":13316},[10648,10650,10652,10654,10656,10658,10666,10958,10960,10962,10964,10968,11210,11212,11214,11216,11362,11364,11366,11368,11556,11558,11560,11836,11838,11844,11846,11848,11990,11992,12000,12054,12056,12060,12638,12644,12646,12730,12732,13310,13314],[10,10649,5],{"id":12},[14,10651,16],{},[18,10653,21],{"id":20},[14,10655,24],{},[14,10657,27],{},[29,10659,10660,10662,10664],{},[32,10661,34],{},[32,10663,37],{},[32,10665,40],{},[42,10667,10668],{"className":44,"code":45,"language":46,"meta":47,"style":47},[49,10669,10670,10676,10686,10692,10696,10702,10706,10710,10714,10718,10722,10726,10732,10736,10742,10746,10752,10756,10760,10764,10768,10772,10776,10782,10786,10792,10798,10806,10810,10814,10818,10826,10830,10840,10850,10860,10864,10884,10888,10892,10916,10920,10924,10934,10944,10954],{"__ignoreMap":47},[52,10671,10672,10674],{"class":54,"line":55},[52,10673,59],{"class":58},[52,10675,63],{"class":62},[52,10677,10678,10680,10682,10684],{"class":54,"line":66},[52,10679,69],{"class":58},[52,10681,72],{"class":58},[52,10683,76],{"class":75},[52,10685,80],{"class":79},[52,10687,10688,10690],{"class":54,"line":83},[52,10689,59],{"class":58},[52,10691,88],{"class":62},[52,10693,10694],{"class":54,"line":91},[52,10695,95],{"class":94},[52,10697,10698,10700],{"class":54,"line":98},[52,10699,101],{"class":58},[52,10701,104],{"class":75},[52,10703,10704],{"class":54,"line":107},[52,10705,110],{"class":79},[52,10707,10708],{"class":54,"line":113},[52,10709,116],{"class":94},[52,10711,10712],{"class":54,"line":119},[52,10713,123],{"emptyLinePlaceholder":122},[52,10715,10716],{"class":54,"line":126},[52,10717,129],{"class":94},[52,10719,10720],{"class":54,"line":132},[52,10721,135],{"class":79},[52,10723,10724],{"class":54,"line":138},[52,10725,141],{"class":94},[52,10727,10728,10730],{"class":54,"line":144},[52,10729,147],{"class":58},[52,10731,150],{"class":79},[52,10733,10734],{"class":54,"line":153},[52,10735,156],{"class":94},[52,10737,10738,10740],{"class":54,"line":159},[52,10739,147],{"class":58},[52,10741,164],{"class":79},[52,10743,10744],{"class":54,"line":167},[52,10745,170],{"class":79},[52,10747,10748,10750],{"class":54,"line":173},[52,10749,101],{"class":58},[52,10751,178],{"class":75},[52,10753,10754],{"class":54,"line":181},[52,10755,110],{"class":79},[52,10757,10758],{"class":54,"line":186},[52,10759,116],{"class":94},[52,10761,10762],{"class":54,"line":191},[52,10763,123],{"emptyLinePlaceholder":122},[52,10765,10766],{"class":54,"line":196},[52,10767,129],{"class":94},[52,10769,10770],{"class":54,"line":201},[52,10771,135],{"class":79},[52,10773,10774],{"class":54,"line":206},[52,10775,141],{"class":94},[52,10777,10778,10780],{"class":54,"line":211},[52,10779,147],{"class":58},[52,10781,150],{"class":79},[52,10783,10784],{"class":54,"line":218},[52,10785,156],{"class":94},[52,10787,10788,10790],{"class":54,"line":223},[52,10789,147],{"class":58},[52,10791,164],{"class":79},[52,10793,10794,10796],{"class":54,"line":230},[52,10795,233],{"class":79},[52,10797,236],{"class":94},[52,10799,10800,10802,10804],{"class":54,"line":239},[52,10801,242],{"class":58},[52,10803,245],{"class":75},[52,10805,248],{"class":79},[52,10807,10808],{"class":54,"line":251},[52,10809,110],{"class":79},[52,10811,10812],{"class":54,"line":256},[52,10813,259],{"class":94},[52,10815,10816],{"class":54,"line":262},[52,10817,265],{"class":94},[52,10819,10820,10822,10824],{"class":54,"line":268},[52,10821,271],{"class":58},[52,10823,274],{"class":75},[52,10825,277],{"class":79},[52,10827,10828],{"class":54,"line":280},[52,10829,283],{"class":94},[52,10831,10832,10834,10836,10838],{"class":54,"line":286},[52,10833,289],{"class":79},[52,10835,292],{"class":58},[52,10837,295],{"class":62},[52,10839,80],{"class":79},[52,10841,10842,10844,10846,10848],{"class":54,"line":300},[52,10843,303],{"class":79},[52,10845,292],{"class":58},[52,10847,309],{"class":308},[52,10849,80],{"class":79},[52,10851,10852,10854,10856,10858],{"class":54,"line":314},[52,10853,317],{"class":79},[52,10855,292],{"class":58},[52,10857,322],{"class":308},[52,10859,80],{"class":79},[52,10861,10862],{"class":54,"line":327},[52,10863,330],{"class":94},[52,10865,10866,10868,10870,10872,10874,10876,10878,10880,10882],{"class":54,"line":333},[52,10867,336],{"class":79},[52,10869,339],{"class":58},[52,10871,342],{"class":79},[52,10873,339],{"class":58},[52,10875,347],{"class":79},[52,10877,339],{"class":58},[52,10879,352],{"class":79},[52,10881,339],{"class":58},[52,10883,357],{"class":79},[52,10885,10886],{"class":54,"line":360},[52,10887,123],{"emptyLinePlaceholder":122},[52,10889,10890],{"class":54,"line":365},[52,10891,368],{"class":94},[52,10893,10894,10896,10898,10900,10902,10904,10906,10908,10910,10912,10914],{"class":54,"line":371},[52,10895,271],{"class":58},[52,10897,274],{"class":75},[52,10899,378],{"class":79},[52,10901,292],{"class":58},[52,10903,383],{"class":79},[52,10905,386],{"class":62},[52,10907,389],{"class":79},[52,10909,309],{"class":308},[52,10911,389],{"class":79},[52,10913,322],{"class":308},[52,10915,170],{"class":79},[52,10917,10918],{"class":54,"line":400},[52,10919,123],{"emptyLinePlaceholder":122},[52,10921,10922],{"class":54,"line":405},[52,10923,408],{"class":94},[52,10925,10926,10928,10930,10932],{"class":54,"line":411},[52,10927,414],{"class":79},[52,10929,292],{"class":58},[52,10931,419],{"class":62},[52,10933,80],{"class":79},[52,10935,10936,10938,10940,10942],{"class":54,"line":424},[52,10937,427],{"class":79},[52,10939,292],{"class":58},[52,10941,309],{"class":308},[52,10943,80],{"class":79},[52,10945,10946,10948,10950,10952],{"class":54,"line":436},[52,10947,439],{"class":79},[52,10949,292],{"class":58},[52,10951,444],{"class":308},[52,10953,80],{"class":79},[52,10955,10956],{"class":54,"line":449},[52,10957,452],{"class":79},[14,10959,455],{},[18,10961,459],{"id":458},[14,10963,462],{},[14,10965,465,10966,469],{},[52,10967,468],{},[42,10969,10970],{"className":44,"code":472,"language":46,"meta":47,"style":47},[49,10971,10972,10978,10988,10994,10998,11004,11008,11012,11018,11024,11028,11032,11040,11044,11048,11062,11066,11082,11098,11102,11106,11120,11134,11148,11152,11178,11182,11202,11206],{"__ignoreMap":47},[52,10973,10974,10976],{"class":54,"line":55},[52,10975,59],{"class":58},[52,10977,63],{"class":62},[52,10979,10980,10982,10984,10986],{"class":54,"line":66},[52,10981,69],{"class":58},[52,10983,72],{"class":58},[52,10985,76],{"class":75},[52,10987,80],{"class":79},[52,10989,10990,10992],{"class":54,"line":83},[52,10991,59],{"class":58},[52,10993,88],{"class":62},[52,10995,10996],{"class":54,"line":91},[52,10997,501],{"class":94},[52,10999,11000,11002],{"class":54,"line":98},[52,11001,101],{"class":58},[52,11003,104],{"class":75},[52,11005,11006],{"class":54,"line":107},[52,11007,110],{"class":79},[52,11009,11010],{"class":54,"line":113},[52,11011,135],{"class":79},[52,11013,11014,11016],{"class":54,"line":119},[52,11015,147],{"class":58},[52,11017,150],{"class":79},[52,11019,11020,11022],{"class":54,"line":126},[52,11021,147],{"class":58},[52,11023,164],{"class":79},[52,11025,11026],{"class":54,"line":132},[52,11027,123],{"emptyLinePlaceholder":122},[52,11029,11030],{"class":54,"line":138},[52,11031,170],{"class":79},[52,11033,11034,11036,11038],{"class":54,"line":144},[52,11035,242],{"class":58},[52,11037,245],{"class":75},[52,11039,248],{"class":79},[52,11041,11042],{"class":54,"line":153},[52,11043,110],{"class":79},[52,11045,11046],{"class":54,"line":159},[52,11047,552],{"class":94},[52,11049,11050,11052,11054,11056,11058,11060],{"class":54,"line":167},[52,11051,271],{"class":58},[52,11053,274],{"class":75},[52,11055,561],{"class":79},[52,11057,564],{"class":308},[52,11059,567],{"class":79},[52,11061,570],{"class":58},[52,11063,11064],{"class":54,"line":173},[52,11065,575],{"class":79},[52,11067,11068,11070,11072,11074,11076,11078,11080],{"class":54,"line":181},[52,11069,580],{"class":79},[52,11071,295],{"class":62},[52,11073,389],{"class":79},[52,11075,309],{"class":308},[52,11077,389],{"class":79},[52,11079,591],{"class":308},[52,11081,594],{"class":79},[52,11083,11084,11086,11088,11090,11092,11094,11096],{"class":54,"line":186},[52,11085,580],{"class":79},[52,11087,419],{"class":62},[52,11089,389],{"class":79},[52,11091,605],{"class":308},[52,11093,389],{"class":79},[52,11095,605],{"class":308},[52,11097,452],{"class":79},[52,11099,11100],{"class":54,"line":191},[52,11101,616],{"class":79},[52,11103,11104],{"class":54,"line":196},[52,11105,621],{"class":94},[52,11107,11108,11110,11112,11114,11116,11118],{"class":54,"line":201},[52,11109,626],{"class":79},[52,11111,629],{"class":308},[52,11113,632],{"class":79},[52,11115,292],{"class":58},[52,11117,637],{"class":62},[52,11119,80],{"class":79},[52,11121,11122,11124,11126,11128,11130,11132],{"class":54,"line":206},[52,11123,626],{"class":79},[52,11125,629],{"class":308},[52,11127,648],{"class":79},[52,11129,292],{"class":58},[52,11131,564],{"class":308},[52,11133,80],{"class":79},[52,11135,11136,11138,11140,11142,11144,11146],{"class":54,"line":211},[52,11137,626],{"class":79},[52,11139,629],{"class":308},[52,11141,663],{"class":79},[52,11143,292],{"class":58},[52,11145,564],{"class":308},[52,11147,80],{"class":79},[52,11149,11150],{"class":54,"line":218},[52,11151,674],{"class":94},[52,11153,11154,11156,11158,11160,11162,11164,11166,11168,11170,11172,11174,11176],{"class":54,"line":223},[52,11155,679],{"class":58},[52,11157,682],{"class":79},[52,11159,242],{"class":58},[52,11161,687],{"class":79},[52,11163,292],{"class":58},[52,11165,692],{"class":308},[52,11167,695],{"class":79},[52,11169,698],{"class":58},[52,11171,564],{"class":308},[52,11173,695],{"class":79},[52,11175,705],{"class":58},[52,11177,708],{"class":79},[52,11179,11180],{"class":54,"line":230},[52,11181,575],{"class":79},[52,11183,11184,11186,11188,11190,11192,11194,11196,11198,11200],{"class":54,"line":239},[52,11185,717],{"class":79},[52,11187,339],{"class":58},[52,11189,722],{"class":79},[52,11191,339],{"class":58},[52,11193,727],{"class":79},[52,11195,339],{"class":58},[52,11197,732],{"class":79},[52,11199,339],{"class":58},[52,11201,357],{"class":79},[52,11203,11204],{"class":54,"line":251},[52,11205,616],{"class":79},[52,11207,11208],{"class":54,"line":256},[52,11209,452],{"class":79},[18,11211,748],{"id":747},[14,11213,751],{},[14,11215,754],{},[42,11217,11218],{"className":44,"code":757,"language":46,"meta":47,"style":47},[49,11219,11220,11226,11236,11242,11246,11252,11256,11260,11266,11272,11276,11284,11288,11292,11316,11320,11334,11338,11358],{"__ignoreMap":47},[52,11221,11222,11224],{"class":54,"line":55},[52,11223,59],{"class":58},[52,11225,63],{"class":62},[52,11227,11228,11230,11232,11234],{"class":54,"line":66},[52,11229,69],{"class":58},[52,11231,72],{"class":58},[52,11233,76],{"class":75},[52,11235,80],{"class":79},[52,11237,11238,11240],{"class":54,"line":83},[52,11239,59],{"class":58},[52,11241,88],{"class":62},[52,11243,11244],{"class":54,"line":91},[52,11245,501],{"class":94},[52,11247,11248,11250],{"class":54,"line":98},[52,11249,101],{"class":58},[52,11251,104],{"class":75},[52,11253,11254],{"class":54,"line":107},[52,11255,110],{"class":79},[52,11257,11258],{"class":54,"line":113},[52,11259,135],{"class":79},[52,11261,11262,11264],{"class":54,"line":119},[52,11263,147],{"class":58},[52,11265,150],{"class":79},[52,11267,11268,11270],{"class":54,"line":126},[52,11269,147],{"class":58},[52,11271,164],{"class":79},[52,11273,11274],{"class":54,"line":132},[52,11275,170],{"class":79},[52,11277,11278,11280,11282],{"class":54,"line":138},[52,11279,242],{"class":58},[52,11281,245],{"class":75},[52,11283,248],{"class":79},[52,11285,11286],{"class":54,"line":144},[52,11287,110],{"class":79},[52,11289,11290],{"class":54,"line":153},[52,11291,832],{"class":94},[52,11293,11294,11296,11298,11300,11302,11304,11306,11308,11310,11312,11314],{"class":54,"line":159},[52,11295,271],{"class":58},[52,11297,274],{"class":75},[52,11299,841],{"class":79},[52,11301,292],{"class":58},[52,11303,383],{"class":79},[52,11305,295],{"class":62},[52,11307,389],{"class":79},[52,11309,309],{"class":308},[52,11311,389],{"class":79},[52,11313,856],{"class":308},[52,11315,170],{"class":79},[52,11317,11318],{"class":54,"line":167},[52,11319,863],{"class":94},[52,11321,11322,11324,11326,11328,11330,11332],{"class":54,"line":173},[52,11323,271],{"class":58},[52,11325,274],{"class":75},[52,11327,872],{"class":58},[52,11329,14],{"class":79},[52,11331,877],{"class":58},[52,11333,880],{"class":79},[52,11335,11336],{"class":54,"line":181},[52,11337,885],{"class":94},[52,11339,11340,11342,11344,11346,11348,11350,11352,11354,11356],{"class":54,"line":186},[52,11341,336],{"class":79},[52,11343,339],{"class":58},[52,11345,894],{"class":79},[52,11347,339],{"class":58},[52,11349,899],{"class":79},[52,11351,339],{"class":58},[52,11353,904],{"class":79},[52,11355,339],{"class":58},[52,11357,357],{"class":79},[52,11359,11360],{"class":54,"line":191},[52,11361,452],{"class":79},[18,11363,916],{"id":915},[14,11365,919],{},[14,11367,922],{},[42,11369,11370],{"className":44,"code":925,"language":46,"meta":47,"style":47},[49,11371,11372,11378,11388,11394,11398,11406,11410,11414,11420,11426,11430,11434,11440,11444,11450,11454,11460,11464,11468,11476,11480,11484,11488,11492,11502,11512,11522,11532,11542,11552],{"__ignoreMap":47},[52,11373,11374,11376],{"class":54,"line":55},[52,11375,59],{"class":58},[52,11377,63],{"class":62},[52,11379,11380,11382,11384,11386],{"class":54,"line":66},[52,11381,69],{"class":58},[52,11383,72],{"class":58},[52,11385,76],{"class":75},[52,11387,80],{"class":79},[52,11389,11390,11392],{"class":54,"line":83},[52,11391,59],{"class":58},[52,11393,88],{"class":62},[52,11395,11396],{"class":54,"line":91},[52,11397,954],{"class":94},[52,11399,11400,11402,11404],{"class":54,"line":98},[52,11401,101],{"class":58},[52,11403,274],{"class":75},[52,11405,963],{"class":79},[52,11407,11408],{"class":54,"line":107},[52,11409,110],{"class":79},[52,11411,11412],{"class":54,"line":113},[52,11413,135],{"class":79},[52,11415,11416,11418],{"class":54,"line":119},[52,11417,147],{"class":58},[52,11419,150],{"class":79},[52,11421,11422,11424],{"class":54,"line":126},[52,11423,147],{"class":58},[52,11425,164],{"class":79},[52,11427,11428],{"class":54,"line":132},[52,11429,452],{"class":79},[52,11431,11432],{"class":54,"line":138},[52,11433,992],{"class":94},[52,11435,11436,11438],{"class":54,"line":144},[52,11437,101],{"class":58},[52,11439,999],{"class":75},[52,11441,11442],{"class":54,"line":153},[52,11443,110],{"class":79},[52,11445,11446,11448],{"class":54,"line":159},[52,11447,147],{"class":58},[52,11449,1010],{"class":79},[52,11451,11452],{"class":54,"line":167},[52,11453,135],{"class":79},[52,11455,11456,11458],{"class":54,"line":173},[52,11457,147],{"class":58},[52,11459,150],{"class":79},[52,11461,11462],{"class":54,"line":181},[52,11463,1025],{"class":79},[52,11465,11466],{"class":54,"line":186},[52,11467,452],{"class":79},[52,11469,11470,11472,11474],{"class":54,"line":191},[52,11471,242],{"class":58},[52,11473,245],{"class":75},[52,11475,1038],{"class":79},[52,11477,11478],{"class":54,"line":196},[52,11479,110],{"class":79},[52,11481,11482],{"class":54,"line":201},[52,11483,1047],{"class":94},[52,11485,11486],{"class":54,"line":206},[52,11487,1052],{"class":94},[52,11489,11490],{"class":54,"line":211},[52,11491,1057],{"class":79},[52,11493,11494,11496,11498,11500],{"class":54,"line":218},[52,11495,1062],{"class":79},[52,11497,292],{"class":58},[52,11499,591],{"class":308},[52,11501,80],{"class":79},[52,11503,11504,11506,11508,11510],{"class":54,"line":223},[52,11505,1073],{"class":79},[52,11507,292],{"class":58},[52,11509,1078],{"class":62},[52,11511,80],{"class":79},[52,11513,11514,11516,11518,11520],{"class":54,"line":230},[52,11515,1085],{"class":79},[52,11517,292],{"class":58},[52,11519,309],{"class":308},[52,11521,80],{"class":79},[52,11523,11524,11526,11528,11530],{"class":54,"line":239},[52,11525,1096],{"class":79},[52,11527,292],{"class":58},[52,11529,1101],{"class":62},[52,11531,1104],{"class":79},[52,11533,11534,11536,11538,11540],{"class":54,"line":251},[52,11535,1109],{"class":79},[52,11537,292],{"class":58},[52,11539,444],{"class":308},[52,11541,80],{"class":79},[52,11543,11544,11546,11548,11550],{"class":54,"line":256},[52,11545,1120],{"class":79},[52,11547,292],{"class":58},[52,11549,1125],{"class":308},[52,11551,80],{"class":79},[52,11553,11554],{"class":54,"line":262},[52,11555,452],{"class":79},[18,11557,1135],{"id":1134},[14,11559,1138],{},[42,11561,11562],{"className":44,"code":1141,"language":46,"meta":47,"style":47},[49,11563,11564,11570,11580,11586,11592,11596,11600,11606,11612,11616,11620,11624,11640,11644,11672,11676,11680,11698,11702,11730,11734,11742,11746,11754,11764,11774,11784,11796,11802,11814,11824,11832],{"__ignoreMap":47},[52,11565,11566,11568],{"class":54,"line":55},[52,11567,59],{"class":58},[52,11569,63],{"class":62},[52,11571,11572,11574,11576,11578],{"class":54,"line":66},[52,11573,69],{"class":58},[52,11575,72],{"class":58},[52,11577,76],{"class":75},[52,11579,80],{"class":79},[52,11581,11582,11584],{"class":54,"line":83},[52,11583,59],{"class":58},[52,11585,88],{"class":62},[52,11587,11588,11590],{"class":54,"line":91},[52,11589,101],{"class":58},[52,11591,104],{"class":75},[52,11593,11594],{"class":54,"line":98},[52,11595,110],{"class":79},[52,11597,11598],{"class":54,"line":107},[52,11599,135],{"class":79},[52,11601,11602,11604],{"class":54,"line":113},[52,11603,147],{"class":58},[52,11605,150],{"class":79},[52,11607,11608,11610],{"class":54,"line":119},[52,11609,147],{"class":58},[52,11611,164],{"class":79},[52,11613,11614],{"class":54,"line":126},[52,11615,170],{"class":79},[52,11617,11618],{"class":54,"line":132},[52,11619,1200],{"class":94},[52,11621,11622],{"class":54,"line":138},[52,11623,1205],{"class":94},[52,11625,11626,11628,11630,11632,11634,11636,11638],{"class":54,"line":144},[52,11627,1210],{"class":58},[52,11629,1213],{"class":75},[52,11631,1216],{"class":79},[52,11633,101],{"class":58},[52,11635,274],{"class":75},[52,11637,841],{"class":1223},[52,11639,708],{"class":79},[52,11641,11642],{"class":54,"line":153},[52,11643,110],{"class":79},[52,11645,11646,11648,11650,11652,11654,11656,11658,11660,11662,11664,11666,11668,11670],{"class":54,"line":159},[52,11647,1234],{"class":79},[52,11649,339],{"class":58},[52,11651,1239],{"class":79},[52,11653,339],{"class":58},[52,11655,1244],{"class":62},[52,11657,1247],{"class":58},[52,11659,1250],{"class":79},[52,11661,339],{"class":58},[52,11663,1244],{"class":62},[52,11665,1247],{"class":58},[52,11667,1259],{"class":79},[52,11669,339],{"class":58},[52,11671,1264],{"class":79},[52,11673,11674],{"class":54,"line":167},[52,11675,452],{"class":79},[52,11677,11678],{"class":54,"line":173},[52,11679,1273],{"class":94},[52,11681,11682,11684,11686,11688,11690,11692,11694,11696],{"class":54,"line":181},[52,11683,1210],{"class":58},[52,11685,1280],{"class":75},[52,11687,1216],{"class":79},[52,11689,101],{"class":58},[52,11691,274],{"class":75},[52,11693,872],{"class":58},[52,11695,1291],{"class":1223},[52,11697,708],{"class":79},[52,11699,11700],{"class":54,"line":186},[52,11701,110],{"class":79},[52,11703,11704,11706,11708,11710,11712,11714,11716,11718,11720,11722,11724,11726,11728],{"class":54,"line":191},[52,11705,1234],{"class":79},[52,11707,339],{"class":58},[52,11709,1306],{"class":79},[52,11711,339],{"class":58},[52,11713,1244],{"class":62},[52,11715,1247],{"class":58},[52,11717,1315],{"class":79},[52,11719,339],{"class":58},[52,11721,1244],{"class":62},[52,11723,1247],{"class":58},[52,11725,1324],{"class":79},[52,11727,339],{"class":58},[52,11729,1264],{"class":79},[52,11731,11732],{"class":54,"line":196},[52,11733,452],{"class":79},[52,11735,11736,11738,11740],{"class":54,"line":201},[52,11737,242],{"class":58},[52,11739,245],{"class":75},[52,11741,248],{"class":79},[52,11743,11744],{"class":54,"line":206},[52,11745,110],{"class":79},[52,11747,11748,11750,11752],{"class":54,"line":211},[52,11749,271],{"class":58},[52,11751,274],{"class":75},[52,11753,1353],{"class":79},[52,11755,11756,11758,11760,11762],{"class":54,"line":218},[52,11757,1358],{"class":79},[52,11759,292],{"class":58},[52,11761,1363],{"class":62},[52,11763,80],{"class":79},[52,11765,11766,11768,11770,11772],{"class":54,"line":223},[52,11767,1370],{"class":79},[52,11769,292],{"class":58},[52,11771,1375],{"class":308},[52,11773,80],{"class":79},[52,11775,11776,11778,11780,11782],{"class":54,"line":230},[52,11777,1382],{"class":79},[52,11779,292],{"class":58},[52,11781,1387],{"class":308},[52,11783,80],{"class":79},[52,11785,11786,11788,11790,11792,11794],{"class":54,"line":239},[52,11787,336],{"class":79},[52,11789,339],{"class":58},[52,11791,1398],{"class":62},[52,11793,339],{"class":58},[52,11795,357],{"class":79},[52,11797,11798,11800],{"class":54,"line":251},[52,11799,1407],{"class":75},[52,11801,1410],{"class":79},[52,11803,11804,11806,11808,11810,11812],{"class":54,"line":256},[52,11805,336],{"class":79},[52,11807,339],{"class":58},[52,11809,1419],{"class":62},[52,11811,339],{"class":58},[52,11813,357],{"class":79},[52,11815,11816,11818,11820,11822],{"class":54,"line":262},[52,11817,1428],{"class":75},[52,11819,1216],{"class":79},[52,11821,1433],{"class":58},[52,11823,1436],{"class":79},[52,11825,11826,11828,11830],{"class":54,"line":268},[52,11827,1441],{"class":58},[52,11829,1444],{"class":308},[52,11831,80],{"class":79},[52,11833,11834],{"class":54,"line":280},[52,11835,452],{"class":79},[14,11837,1453],{},[29,11839,11840,11842],{},[32,11841,1458],{},[32,11843,1461],{},[18,11845,1465],{"id":1464},[14,11847,1468],{},[42,11849,11850],{"className":44,"code":1471,"language":46,"meta":47,"style":47},[49,11851,11852,11858,11868,11874,11878,11882,11886,11892,11898,11902,11916,11920,11940,11944,11952,11956,11976,11982,11986],{"__ignoreMap":47},[52,11853,11854,11856],{"class":54,"line":55},[52,11855,59],{"class":58},[52,11857,63],{"class":62},[52,11859,11860,11862,11864,11866],{"class":54,"line":66},[52,11861,69],{"class":58},[52,11863,72],{"class":58},[52,11865,76],{"class":75},[52,11867,80],{"class":79},[52,11869,11870,11872],{"class":54,"line":83},[52,11871,59],{"class":58},[52,11873,88],{"class":62},[52,11875,11876],{"class":54,"line":91},[52,11877,1500],{"class":79},[52,11879,11880],{"class":54,"line":98},[52,11881,110],{"class":79},[52,11883,11884],{"class":54,"line":107},[52,11885,135],{"class":79},[52,11887,11888,11890],{"class":54,"line":113},[52,11889,147],{"class":58},[52,11891,150],{"class":79},[52,11893,11894,11896],{"class":54,"line":119},[52,11895,147],{"class":58},[52,11897,164],{"class":79},[52,11899,11900],{"class":54,"line":126},[52,11901,170],{"class":79},[52,11903,11904,11906,11908,11910,11912,11914],{"class":54,"line":132},[52,11905,1210],{"class":58},[52,11907,1531],{"class":75},[52,11909,1216],{"class":79},[52,11911,1536],{"class":75},[52,11913,841],{"class":1223},[52,11915,708],{"class":79},[52,11917,11918],{"class":54,"line":138},[52,11919,110],{"class":79},[52,11921,11922,11924,11926,11928,11930,11932,11934,11936,11938],{"class":54,"line":144},[52,11923,336],{"class":79},[52,11925,339],{"class":58},[52,11927,1553],{"class":79},[52,11929,339],{"class":58},[52,11931,1558],{"class":79},[52,11933,339],{"class":58},[52,11935,1563],{"class":79},[52,11937,339],{"class":58},[52,11939,357],{"class":79},[52,11941,11942],{"class":54,"line":153},[52,11943,452],{"class":79},[52,11945,11946,11948,11950],{"class":54,"line":159},[52,11947,242],{"class":58},[52,11949,245],{"class":75},[52,11951,1038],{"class":79},[52,11953,11954],{"class":54,"line":167},[52,11955,110],{"class":79},[52,11957,11958,11960,11962,11964,11966,11968,11970,11972,11974],{"class":54,"line":173},[52,11959,1588],{"class":79},[52,11961,292],{"class":58},[52,11963,383],{"class":79},[52,11965,295],{"class":62},[52,11967,389],{"class":79},[52,11969,309],{"class":308},[52,11971,389],{"class":79},[52,11973,309],{"class":308},[52,11975,170],{"class":79},[52,11977,11978,11980],{"class":54,"line":181},[52,11979,1609],{"class":75},[52,11981,1410],{"class":79},[52,11983,11984],{"class":54,"line":186},[52,11985,123],{"emptyLinePlaceholder":122},[52,11987,11988],{"class":54,"line":191},[52,11989,452],{"class":79},[14,11991,1453],{},[29,11993,11994,11996,11998],{},[32,11995,1626],{},[32,11997,1629],{},[32,11999,1632],{},[42,12001,12002],{"className":44,"code":1635,"language":46,"meta":47,"style":47},[49,12003,12004,12022,12026,12030,12050],{"__ignoreMap":47},[52,12005,12006,12008,12010,12012,12014,12016,12018,12020],{"class":54,"line":55},[52,12007,1210],{"class":58},[52,12009,1531],{"class":75},[52,12011,1216],{"class":79},[52,12013,1648],{"class":58},[52,12015,1651],{"class":75},[52,12017,872],{"class":58},[52,12019,1291],{"class":1223},[52,12021,708],{"class":79},[52,12023,12024],{"class":54,"line":66},[52,12025,110],{"class":79},[52,12027,12028],{"class":54,"line":83},[52,12029,1666],{"class":94},[52,12031,12032,12034,12036,12038,12040,12042,12044,12046,12048],{"class":54,"line":91},[52,12033,336],{"class":79},[52,12035,339],{"class":58},[52,12037,1553],{"class":79},[52,12039,339],{"class":58},[52,12041,1558],{"class":79},[52,12043,339],{"class":58},[52,12045,1563],{"class":79},[52,12047,339],{"class":58},[52,12049,357],{"class":79},[52,12051,12052],{"class":54,"line":98},[52,12053,452],{"class":79},[18,12055,1694],{"id":1693},[1696,12057,12058],{},[32,12059,1700],{},[42,12061,12062],{"className":44,"code":1703,"language":46,"meta":47,"style":47},[49,12063,12064,12070,12080,12086,12092,12096,12102,12106,12110,12116,12122,12126,12130,12136,12140,12144,12148,12160,12164,12168,12190,12194,12204,12228,12232,12242,12250,12254,12258,12284,12288,12298,12306,12330,12340,12348,12352,12356,12360,12364,12386,12390,12414,12418,12434,12460,12464,12484,12504,12524,12528,12532,12536,12544,12548,12552,12572,12576,12588,12592,12614,12620,12624,12630,12634],{"__ignoreMap":47},[52,12065,12066,12068],{"class":54,"line":55},[52,12067,59],{"class":58},[52,12069,63],{"class":62},[52,12071,12072,12074,12076,12078],{"class":54,"line":66},[52,12073,69],{"class":58},[52,12075,72],{"class":58},[52,12077,76],{"class":75},[52,12079,80],{"class":79},[52,12081,12082,12084],{"class":54,"line":83},[52,12083,59],{"class":58},[52,12085,88],{"class":62},[52,12087,12088,12090],{"class":54,"line":91},[52,12089,59],{"class":58},[52,12091,1734],{"class":62},[52,12093,12094],{"class":54,"line":98},[52,12095,954],{"class":94},[52,12097,12098,12100],{"class":54,"line":107},[52,12099,101],{"class":58},[52,12101,104],{"class":75},[52,12103,12104],{"class":54,"line":113},[52,12105,110],{"class":79},[52,12107,12108],{"class":54,"line":119},[52,12109,1753],{"class":79},[52,12111,12112,12114],{"class":54,"line":126},[52,12113,147],{"class":58},[52,12115,150],{"class":79},[52,12117,12118,12120],{"class":54,"line":132},[52,12119,147],{"class":58},[52,12121,164],{"class":79},[52,12123,12124],{"class":54,"line":138},[52,12125,170],{"class":79},[52,12127,12128],{"class":54,"line":144},[52,12129,992],{"class":94},[52,12131,12132,12134],{"class":54,"line":153},[52,12133,101],{"class":58},[52,12135,999],{"class":75},[52,12137,12138],{"class":54,"line":159},[52,12139,110],{"class":79},[52,12141,12142],{"class":54,"line":167},[52,12143,1788],{"class":79},[52,12145,12146],{"class":54,"line":173},[52,12147,1793],{"class":94},[52,12149,12150,12152,12154,12156,12158],{"class":54,"line":181},[52,12151,271],{"class":58},[52,12153,274],{"class":75},[52,12155,1802],{"class":79},[52,12157,1805],{"class":308},[52,12159,1808],{"class":79},[52,12161,12162],{"class":54,"line":186},[52,12163,170],{"class":79},[52,12165,12166],{"class":54,"line":191},[52,12167,1817],{"class":94},[52,12169,12170,12172,12174,12176,12178,12180,12182,12184,12186,12188],{"class":54,"line":196},[52,12171,1210],{"class":58},[52,12173,1824],{"class":75},[52,12175,1216],{"class":79},[52,12177,101],{"class":58},[52,12179,1831],{"class":75},[52,12181,1834],{"class":1223},[52,12183,1837],{"class":79},[52,12185,242],{"class":58},[52,12187,1842],{"class":1223},[52,12189,708],{"class":79},[52,12191,12192],{"class":54,"line":201},[52,12193,110],{"class":79},[52,12195,12196,12198,12200,12202],{"class":54,"line":206},[52,12197,1853],{"class":79},[52,12199,292],{"class":58},[52,12201,1858],{"class":62},[52,12203,80],{"class":79},[52,12205,12206,12208,12210,12212,12214,12216,12218,12220,12222,12224,12226],{"class":54,"line":211},[52,12207,679],{"class":58},[52,12209,682],{"class":79},[52,12211,242],{"class":58},[52,12213,1871],{"class":79},[52,12215,292],{"class":58},[52,12217,1444],{"class":308},[52,12219,1878],{"class":79},[52,12221,698],{"class":58},[52,12223,1883],{"class":79},[52,12225,705],{"class":58},[52,12227,708],{"class":79},[52,12229,12230],{"class":54,"line":218},[52,12231,575],{"class":79},[52,12233,12234,12236,12238,12240],{"class":54,"line":223},[52,12235,1896],{"class":79},[52,12237,292],{"class":58},[52,12239,1901],{"class":62},[52,12241,80],{"class":79},[52,12243,12244,12246,12248],{"class":54,"line":230},[52,12245,1896],{"class":79},[52,12247,1910],{"class":58},[52,12249,1913],{"class":79},[52,12251,12252],{"class":54,"line":239},[52,12253,123],{"emptyLinePlaceholder":122},[52,12255,12256],{"class":54,"line":251},[52,12257,1922],{"class":94},[52,12259,12260,12262,12264,12266,12268,12270,12272,12274,12276,12278,12280,12282],{"class":54,"line":256},[52,12261,1927],{"class":58},[52,12263,682],{"class":79},[52,12265,242],{"class":58},[52,12267,1934],{"class":79},[52,12269,292],{"class":58},[52,12271,1444],{"class":308},[52,12273,1941],{"class":79},[52,12275,698],{"class":58},[52,12277,1946],{"class":308},[52,12279,1949],{"class":79},[52,12281,705],{"class":58},[52,12283,708],{"class":79},[52,12285,12286],{"class":54,"line":262},[52,12287,1958],{"class":79},[52,12289,12290,12292,12294,12296],{"class":54,"line":268},[52,12291,1963],{"class":79},[52,12293,292],{"class":58},[52,12295,1968],{"class":62},[52,12297,80],{"class":79},[52,12299,12300,12302,12304],{"class":54,"line":280},[52,12301,1963],{"class":79},[52,12303,1910],{"class":58},[52,12305,1979],{"class":79},[52,12307,12308,12310,12312,12314,12316,12318,12320,12322,12324,12326,12328],{"class":54,"line":286},[52,12309,1984],{"class":58},[52,12311,1987],{"class":79},[52,12313,292],{"class":58},[52,12315,1992],{"class":75},[52,12317,1995],{"class":79},[52,12319,1998],{"class":58},[52,12321,2001],{"class":308},[52,12323,2004],{"class":58},[52,12325,2007],{"class":308},[52,12327,2010],{"class":79},[52,12329,2013],{"class":94},[52,12331,12332,12334,12336,12338],{"class":54,"line":300},[52,12333,2018],{"class":79},[52,12335,292],{"class":58},[52,12337,1375],{"class":308},[52,12339,80],{"class":79},[52,12341,12342,12344,12346],{"class":54,"line":314},[52,12343,2029],{"class":79},[52,12345,292],{"class":58},[52,12347,2034],{"class":79},[52,12349,12350],{"class":54,"line":327},[52,12351,2039],{"class":79},[52,12353,12354],{"class":54,"line":333},[52,12355,616],{"class":79},[52,12357,12358],{"class":54,"line":360},[52,12359,452],{"class":79},[52,12361,12362],{"class":54,"line":365},[52,12363,2052],{"class":94},[52,12365,12366,12368,12370,12372,12374,12376,12378,12380,12382,12384],{"class":54,"line":371},[52,12367,1210],{"class":58},[52,12369,2059],{"class":75},[52,12371,1216],{"class":79},[52,12373,101],{"class":58},[52,12375,1831],{"class":75},[52,12377,1834],{"class":1223},[52,12379,2070],{"class":79},[52,12381,242],{"class":58},[52,12383,1842],{"class":1223},[52,12385,708],{"class":79},[52,12387,12388],{"class":54,"line":400},[52,12389,110],{"class":79},[52,12391,12392,12394,12396,12398,12400,12402,12404,12406,12408,12410,12412],{"class":54,"line":405},[52,12393,679],{"class":58},[52,12395,682],{"class":79},[52,12397,242],{"class":58},[52,12399,1871],{"class":79},[52,12401,292],{"class":58},[52,12403,1444],{"class":308},[52,12405,1878],{"class":79},[52,12407,698],{"class":58},[52,12409,1883],{"class":79},[52,12411,705],{"class":58},[52,12413,708],{"class":79},[52,12415,12416],{"class":54,"line":411},[52,12417,575],{"class":79},[52,12419,12420,12422,12424,12426,12428,12430,12432],{"class":54,"line":424},[52,12421,2113],{"class":79},[52,12423,339],{"class":58},[52,12425,2118],{"class":62},[52,12427,1247],{"class":58},[52,12429,2123],{"class":79},[52,12431,339],{"class":58},[52,12433,1264],{"class":79},[52,12435,12436,12438,12440,12442,12444,12446,12448,12450,12452,12454,12456,12458],{"class":54,"line":436},[52,12437,1927],{"class":58},[52,12439,682],{"class":79},[52,12441,242],{"class":58},[52,12443,1934],{"class":79},[52,12445,292],{"class":58},[52,12447,1444],{"class":308},[52,12449,1941],{"class":79},[52,12451,698],{"class":58},[52,12453,1946],{"class":308},[52,12455,1949],{"class":79},[52,12457,705],{"class":58},[52,12459,708],{"class":79},[52,12461,12462],{"class":54,"line":449},[52,12463,1958],{"class":79},[52,12465,12466,12468,12470,12472,12474,12476,12478,12480,12482],{"class":54,"line":2160},[52,12467,2163],{"class":79},[52,12469,339],{"class":58},[52,12471,2168],{"class":62},[52,12473,2171],{"class":308},[52,12475,2174],{"class":62},[52,12477,1247],{"class":58},[52,12479,2179],{"class":79},[52,12481,339],{"class":58},[52,12483,357],{"class":79},[52,12485,12486,12488,12490,12492,12494,12496,12498,12500,12502],{"class":54,"line":2186},[52,12487,2163],{"class":79},[52,12489,339],{"class":58},[52,12491,2168],{"class":62},[52,12493,2171],{"class":308},[52,12495,2197],{"class":62},[52,12497,1247],{"class":58},[52,12499,2202],{"class":79},[52,12501,339],{"class":58},[52,12503,1264],{"class":79},[52,12505,12506,12508,12510,12512,12514,12516,12518,12520,12522],{"class":54,"line":2209},[52,12507,2163],{"class":79},[52,12509,339],{"class":58},[52,12511,2168],{"class":62},[52,12513,2171],{"class":308},[52,12515,2220],{"class":62},[52,12517,1247],{"class":58},[52,12519,2225],{"class":79},[52,12521,339],{"class":58},[52,12523,2230],{"class":79},[52,12525,12526],{"class":54,"line":2233},[52,12527,2039],{"class":79},[52,12529,12530],{"class":54,"line":2238},[52,12531,616],{"class":79},[52,12533,12534],{"class":54,"line":2243},[52,12535,452],{"class":79},[52,12537,12538,12540,12542],{"class":54,"line":2248},[52,12539,242],{"class":58},[52,12541,245],{"class":75},[52,12543,248],{"class":79},[52,12545,12546],{"class":54,"line":2257},[52,12547,110],{"class":79},[52,12549,12550],{"class":54,"line":2262},[52,12551,2265],{"class":94},[52,12553,12554,12556,12558,12560,12562,12564,12566,12568,12570],{"class":54,"line":2268},[52,12555,2271],{"class":75},[52,12557,2274],{"class":79},[52,12559,2277],{"class":58},[52,12561,2280],{"class":58},[52,12563,2283],{"class":79},[52,12565,2286],{"class":75},[52,12567,1216],{"class":79},[52,12569,2291],{"class":308},[52,12571,2294],{"class":79},[52,12573,12574],{"class":54,"line":2297},[52,12575,2300],{"class":94},[52,12577,12578,12580,12582,12584,12586],{"class":54,"line":2303},[52,12579,271],{"class":58},[52,12581,1831],{"class":75},[52,12583,2310],{"class":79},[52,12585,2313],{"class":308},[52,12587,1808],{"class":79},[52,12589,12590],{"class":54,"line":2318},[52,12591,2321],{"class":94},[52,12593,12594,12596,12598,12600,12602,12604,12606,12608,12610,12612],{"class":54,"line":2324},[52,12595,147],{"class":58},[52,12597,2329],{"class":79},[52,12599,292],{"class":58},[52,12601,2334],{"class":58},[52,12603,2337],{"class":79},[52,12605,2340],{"class":58},[52,12607,2334],{"class":58},[52,12609,2345],{"class":79},[52,12611,692],{"class":308},[52,12613,2350],{"class":79},[52,12615,12616,12618],{"class":54,"line":2353},[52,12617,2356],{"class":75},[52,12619,2359],{"class":79},[52,12621,12622],{"class":54,"line":2362},[52,12623,2365],{"class":94},[52,12625,12626,12628],{"class":54,"line":2368},[52,12627,2371],{"class":75},[52,12629,2359],{"class":79},[52,12631,12632],{"class":54,"line":2376},[52,12633,123],{"emptyLinePlaceholder":122},[52,12635,12636],{"class":54,"line":2381},[52,12637,452],{"class":79},[1696,12639,12640],{"start":66},[32,12641,12642,2392],{},[2389,12643,2391],{},[14,12645,2395],{},[42,12647,12648],{"className":2398,"code":2399,"language":2400,"meta":47,"style":47},[49,12649,12650,12666,12682,12698,12714],{"__ignoreMap":47},[52,12651,12652,12654,12656,12658,12660,12662,12664],{"class":54,"line":55},[52,12653,580],{"class":79},[52,12655,2409],{"class":62},[52,12657,389],{"class":79},[52,12659,2414],{"class":308},[52,12661,389],{"class":79},[52,12663,2419],{"class":62},[52,12665,594],{"class":79},[52,12667,12668,12670,12672,12674,12676,12678,12680],{"class":54,"line":66},[52,12669,580],{"class":79},[52,12671,2428],{"class":62},[52,12673,389],{"class":79},[52,12675,2433],{"class":308},[52,12677,389],{"class":79},[52,12679,2419],{"class":62},[52,12681,594],{"class":79},[52,12683,12684,12686,12688,12690,12692,12694,12696],{"class":54,"line":83},[52,12685,580],{"class":79},[52,12687,2446],{"class":62},[52,12689,389],{"class":79},[52,12691,444],{"class":308},[52,12693,389],{"class":79},[52,12695,2419],{"class":62},[52,12697,594],{"class":79},[52,12699,12700,12702,12704,12706,12708,12710,12712],{"class":54,"line":91},[52,12701,580],{"class":79},[52,12703,2463],{"class":62},[52,12705,389],{"class":79},[52,12707,2468],{"class":308},[52,12709,389],{"class":79},[52,12711,2419],{"class":62},[52,12713,594],{"class":79},[52,12715,12716,12718,12720,12722,12724,12726,12728],{"class":54,"line":98},[52,12717,580],{"class":79},[52,12719,2481],{"class":62},[52,12721,389],{"class":79},[52,12723,2486],{"class":308},[52,12725,389],{"class":79},[52,12727,2491],{"class":62},[52,12729,594],{"class":79},[14,12731,2496],{},[42,12733,12734],{"className":44,"code":2499,"language":46,"meta":47,"style":47},[49,12735,12736,12742,12752,12758,12764,12768,12772,12778,12782,12786,12790,12812,12816,12840,12844,12876,12880,12904,12908,12920,12944,12964,12968,12972,12976,12980,12984,13006,13010,13034,13038,13094,13098,13102,13110,13114,13118,13128,13132,13148,13164,13180,13196,13212,13216,13234,13252,13256,13268,13274,13278,13284,13288,13300,13306],{"__ignoreMap":47},[52,12737,12738,12740],{"class":54,"line":55},[52,12739,59],{"class":58},[52,12741,63],{"class":62},[52,12743,12744,12746,12748,12750],{"class":54,"line":66},[52,12745,69],{"class":58},[52,12747,72],{"class":58},[52,12749,76],{"class":75},[52,12751,80],{"class":79},[52,12753,12754,12756],{"class":54,"line":83},[52,12755,59],{"class":58},[52,12757,88],{"class":62},[52,12759,12760,12762],{"class":54,"line":91},[52,12761,101],{"class":58},[52,12763,2530],{"class":75},[52,12765,12766],{"class":54,"line":98},[52,12767,110],{"class":79},[52,12769,12770],{"class":54,"line":107},[52,12771,135],{"class":79},[52,12773,12774,12776],{"class":54,"line":113},[52,12775,147],{"class":58},[52,12777,150],{"class":79},[52,12779,12780],{"class":54,"line":119},[52,12781,2549],{"class":79},[52,12783,12784],{"class":54,"line":126},[52,12785,170],{"class":79},[52,12787,12788],{"class":54,"line":132},[52,12789,2558],{"class":94},[52,12791,12792,12794,12796,12798,12800,12802,12804,12806,12808,12810],{"class":54,"line":138},[52,12793,1210],{"class":58},[52,12795,2565],{"class":75},[52,12797,1216],{"class":79},[52,12799,2570],{"class":75},[52,12801,872],{"class":58},[52,12803,1291],{"class":1223},[52,12805,389],{"class":79},[52,12807,242],{"class":58},[52,12809,1842],{"class":1223},[52,12811,708],{"class":79},[52,12813,12814],{"class":54,"line":144},[52,12815,110],{"class":79},[52,12817,12818,12820,12822,12824,12826,12828,12830,12832,12834,12836,12838],{"class":54,"line":153},[52,12819,679],{"class":58},[52,12821,1216],{"class":79},[52,12823,242],{"class":58},[52,12825,687],{"class":79},[52,12827,292],{"class":58},[52,12829,692],{"class":308},[52,12831,695],{"class":79},[52,12833,698],{"class":58},[52,12835,2607],{"class":79},[52,12837,705],{"class":58},[52,12839,708],{"class":79},[52,12841,12842],{"class":54,"line":159},[52,12843,575],{"class":79},[52,12845,12846,12848,12850,12852,12854,12856,12858,12860,12862,12864,12866,12868,12870,12872,12874],{"class":54,"line":167},[52,12847,2620],{"class":58},[52,12849,682],{"class":79},[52,12851,242],{"class":58},[52,12853,2627],{"class":79},[52,12855,292],{"class":58},[52,12857,692],{"class":308},[52,12859,2634],{"class":79},[52,12861,698],{"class":58},[52,12863,2639],{"class":79},[52,12865,2642],{"class":58},[52,12867,629],{"class":308},[52,12869,2642],{"class":58},[52,12871,2649],{"class":79},[52,12873,705],{"class":58},[52,12875,708],{"class":79},[52,12877,12878],{"class":54,"line":173},[52,12879,2658],{"class":79},[52,12881,12882,12884,12886,12888,12890,12892,12894,12896,12898,12900,12902],{"class":54,"line":181},[52,12883,2663],{"class":58},[52,12885,2666],{"class":79},[52,12887,2004],{"class":58},[52,12889,2671],{"class":79},[52,12891,2674],{"class":58},[52,12893,2677],{"class":79},[52,12895,2004],{"class":58},[52,12897,2682],{"class":79},[52,12899,2004],{"class":58},[52,12901,629],{"class":308},[52,12903,2689],{"class":79},[52,12905,12906],{"class":54,"line":186},[52,12907,2694],{"class":79},[52,12909,12910,12912,12914,12916,12918],{"class":54,"line":191},[52,12911,2699],{"class":79},[52,12913,2702],{"class":58},[52,12915,2705],{"class":79},[52,12917,2004],{"class":58},[52,12919,2710],{"class":79},[52,12921,12922,12924,12926,12928,12930,12932,12934,12936,12938,12940,12942],{"class":54,"line":196},[52,12923,2715],{"class":58},[52,12925,2705],{"class":79},[52,12927,2004],{"class":58},[52,12929,2722],{"class":79},[52,12931,2702],{"class":58},[52,12933,2705],{"class":79},[52,12935,2004],{"class":58},[52,12937,2682],{"class":79},[52,12939,2004],{"class":58},[52,12941,629],{"class":308},[52,12943,2737],{"class":79},[52,12945,12946,12948,12950,12952,12954,12956,12958,12960,12962],{"class":54,"line":201},[52,12947,2715],{"class":58},[52,12949,2705],{"class":79},[52,12951,2004],{"class":58},[52,12953,2682],{"class":79},[52,12955,2004],{"class":58},[52,12957,629],{"class":308},[52,12959,2283],{"class":79},[52,12961,292],{"class":58},[52,12963,2758],{"class":79},[52,12965,12966],{"class":54,"line":206},[52,12967,2763],{"class":79},[52,12969,12970],{"class":54,"line":211},[52,12971,2768],{"class":79},[52,12973,12974],{"class":54,"line":218},[52,12975,616],{"class":79},[52,12977,12978],{"class":54,"line":223},[52,12979,452],{"class":79},[52,12981,12982],{"class":54,"line":230},[52,12983,2781],{"class":94},[52,12985,12986,12988,12990,12992,12994,12996,12998,13000,13002,13004],{"class":54,"line":239},[52,12987,1210],{"class":58},[52,12989,2059],{"class":75},[52,12991,1216],{"class":79},[52,12993,2570],{"class":75},[52,12995,872],{"class":58},[52,12997,1291],{"class":1223},[52,12999,389],{"class":79},[52,13001,242],{"class":58},[52,13003,1842],{"class":1223},[52,13005,708],{"class":79},[52,13007,13008],{"class":54,"line":251},[52,13009,110],{"class":79},[52,13011,13012,13014,13016,13018,13020,13022,13024,13026,13028,13030,13032],{"class":54,"line":256},[52,13013,679],{"class":58},[52,13015,682],{"class":79},[52,13017,242],{"class":58},[52,13019,687],{"class":79},[52,13021,292],{"class":58},[52,13023,692],{"class":308},[52,13025,695],{"class":79},[52,13027,698],{"class":58},[52,13029,2607],{"class":79},[52,13031,705],{"class":58},[52,13033,708],{"class":79},[52,13035,13036],{"class":54,"line":262},[52,13037,575],{"class":79},[52,13039,13040,13042,13044,13046,13048,13050,13052,13054,13056,13058,13060,13062,13064,13066,13068,13070,13072,13074,13076,13078,13080,13082,13084,13086,13088,13090,13092],{"class":54,"line":268},[52,13041,717],{"class":79},[52,13043,339],{"class":58},[52,13045,2844],{"class":62},[52,13047,2171],{"class":308},[52,13049,2849],{"class":62},[52,13051,339],{"class":58},[52,13053,2705],{"class":79},[52,13055,2004],{"class":58},[52,13057,2858],{"class":79},[52,13059,339],{"class":58},[52,13061,2844],{"class":62},[52,13063,2171],{"class":308},[52,13065,2867],{"class":62},[52,13067,339],{"class":58},[52,13069,2705],{"class":79},[52,13071,2004],{"class":58},[52,13073,2876],{"class":79},[52,13075,339],{"class":58},[52,13077,2844],{"class":62},[52,13079,2171],{"class":308},[52,13081,2885],{"class":62},[52,13083,339],{"class":58},[52,13085,2705],{"class":79},[52,13087,2004],{"class":58},[52,13089,2894],{"class":79},[52,13091,339],{"class":58},[52,13093,357],{"class":79},[52,13095,13096],{"class":54,"line":280},[52,13097,616],{"class":79},[52,13099,13100],{"class":54,"line":286},[52,13101,452],{"class":79},[52,13103,13104,13106,13108],{"class":54,"line":300},[52,13105,242],{"class":58},[52,13107,245],{"class":75},[52,13109,248],{"class":79},[52,13111,13112],{"class":54,"line":314},[52,13113,110],{"class":79},[52,13115,13116],{"class":54,"line":327},[52,13117,2923],{"class":94},[52,13119,13120,13122,13124,13126],{"class":54,"line":333},[52,13121,2928],{"class":79},[52,13123,1805],{"class":308},[52,13125,567],{"class":79},[52,13127,570],{"class":58},[52,13129,13130],{"class":54,"line":360},[52,13131,575],{"class":79},[52,13133,13134,13136,13138,13140,13142,13144,13146],{"class":54,"line":365},[52,13135,580],{"class":79},[52,13137,2409],{"class":62},[52,13139,389],{"class":79},[52,13141,2414],{"class":308},[52,13143,389],{"class":79},[52,13145,2419],{"class":62},[52,13147,594],{"class":79},[52,13149,13150,13152,13154,13156,13158,13160,13162],{"class":54,"line":371},[52,13151,580],{"class":79},[52,13153,2428],{"class":62},[52,13155,389],{"class":79},[52,13157,2433],{"class":308},[52,13159,389],{"class":79},[52,13161,2419],{"class":62},[52,13163,594],{"class":79},[52,13165,13166,13168,13170,13172,13174,13176,13178],{"class":54,"line":400},[52,13167,580],{"class":79},[52,13169,2446],{"class":62},[52,13171,389],{"class":79},[52,13173,444],{"class":308},[52,13175,389],{"class":79},[52,13177,2419],{"class":62},[52,13179,594],{"class":79},[52,13181,13182,13184,13186,13188,13190,13192,13194],{"class":54,"line":405},[52,13183,580],{"class":79},[52,13185,2463],{"class":62},[52,13187,389],{"class":79},[52,13189,2468],{"class":308},[52,13191,389],{"class":79},[52,13193,2419],{"class":62},[52,13195,594],{"class":79},[52,13197,13198,13200,13202,13204,13206,13208,13210],{"class":54,"line":411},[52,13199,580],{"class":79},[52,13201,2481],{"class":62},[52,13203,389],{"class":79},[52,13205,2486],{"class":308},[52,13207,389],{"class":79},[52,13209,2491],{"class":62},[52,13211,594],{"class":79},[52,13213,13214],{"class":54,"line":424},[52,13215,3023],{"class":79},[52,13217,13218,13220,13222,13224,13226,13228,13230,13232],{"class":54,"line":436},[52,13219,147],{"class":58},[52,13221,1842],{"class":79},[52,13223,3032],{"class":58},[52,13225,3035],{"class":79},[52,13227,3038],{"class":58},[52,13229,3041],{"class":79},[52,13231,692],{"class":308},[52,13233,2350],{"class":79},[52,13235,13236,13238,13240,13242,13244,13246,13248,13250],{"class":54,"line":449},[52,13237,3050],{"class":79},[52,13239,3053],{"class":58},[52,13241,3056],{"class":79},[52,13243,292],{"class":58},[52,13245,3061],{"class":58},[52,13247,3064],{"class":79},[52,13249,692],{"class":308},[52,13251,1808],{"class":79},[52,13253,13254],{"class":54,"line":2160},[52,13255,3073],{"class":94},[52,13257,13258,13260,13262,13264,13266],{"class":54,"line":2186},[52,13259,1234],{"class":79},[52,13261,339],{"class":58},[52,13263,3082],{"class":62},[52,13265,1247],{"class":58},[52,13267,1264],{"class":79},[52,13269,13270,13272],{"class":54,"line":2209},[52,13271,2371],{"class":75},[52,13273,3093],{"class":79},[52,13275,13276],{"class":54,"line":2233},[52,13277,3098],{"class":94},[52,13279,13280,13282],{"class":54,"line":2238},[52,13281,3103],{"class":75},[52,13283,3093],{"class":79},[52,13285,13286],{"class":54,"line":2243},[52,13287,3110],{"class":94},[52,13289,13290,13292,13294,13296,13298],{"class":54,"line":2248},[52,13291,1234],{"class":79},[52,13293,339],{"class":58},[52,13295,3119],{"class":62},[52,13297,1247],{"class":58},[52,13299,1264],{"class":79},[52,13301,13302,13304],{"class":54,"line":2257},[52,13303,2371],{"class":75},[52,13305,3093],{"class":79},[52,13307,13308],{"class":54,"line":2262},[52,13309,452],{"class":79},[14,13311,3136,13312,3139],{},[52,13313,692],{},[3141,13315,3143],{},{"title":47,"searchDepth":66,"depth":66,"links":13317},[13318,13319,13320,13321,13322,13323,13324],{"id":20,"depth":66,"text":21},{"id":458,"depth":66,"text":459},{"id":747,"depth":66,"text":748},{"id":915,"depth":66,"text":916},{"id":1134,"depth":66,"text":1135},{"id":1464,"depth":66,"text":1465},{"id":1693,"depth":66,"text":1694},{},{"title":5,"description":16},{"id":13328,"title":13329,"body":13330,"description":47,"extension":3153,"meta":14673,"navigation":122,"path":14674,"seo":14675,"stem":14676,"__hash__":14677},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":13331,"toc":14667},[13332,13335,13339,13345,13359,13364,13367,13371,13378,13384,13387,13394,13400,13405,13408,13411,13414,13978,13981,13995,13999,14004,14020,14160,14163,14169,14172,14177,14185,14293,14296,14301,14304,14309,14312,14318,14321,14664],[10,13333,13329],{"id":13334},"_5程序内存模型",[18,13336,13338],{"id":13337},"_51内存分区模型","5.1内存分区模型",[14,13340,13341,13342],{},"C++程序在执行时，将内存大方向划分为",[2389,13343,13344],{},"4个区域",[29,13346,13347,13350,13353,13356],{},[32,13348,13349],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[32,13351,13352],{},"全局区：存放全局变量和静态变量以及常量",[32,13354,13355],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[32,13357,13358],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,13360,13361],{},[2389,13362,13363],{},"内存四区意义：",[14,13365,13366],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[3195,13368,13370],{"id":13369},"_511程序运行前","5.1.1程序运行前",[14,13372,13373,13374,13377],{},"​\t在程序编译后，生成了exe可执行程序，",[2389,13375,13376],{},"未执行该程序前","分为两个区域",[14,13379,13380,13381],{},"​\t",[2389,13382,13383],{},"代码区：",[14,13385,13386],{},"​\t\t存放 CPU 执行的机器指令",[14,13388,13389,13390,13393],{},"​\t\t代码区是",[2389,13391,13392],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,13395,13389,13396,13399],{},[2389,13397,13398],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,13401,13380,13402],{},[2389,13403,13404],{},"全局区：",[14,13406,13407],{},"​\t\t全局变量和静态变量存放在此.",[14,13409,13410],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,13412,13413],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[42,13415,13417],{"className":44,"code":13416,"language":46,"meta":47,"style":47},"\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",[49,13418,13419,13424,13437,13450,13454,13459,13474,13489,13493,13502,13506,13511,13524,13537,13541,13546,13572,13598,13602,13629,13655,13659,13664,13680,13695,13699,13725,13751,13755,13780,13805,13809,13835,13861,13865,13881,13896,13922,13948,13952,13962,13966,13974],{"__ignoreMap":47},[52,13420,13421],{"class":54,"line":55},[52,13422,13423],{"class":94},"\u002F\u002F全局变量\n",[52,13425,13426,13428,13431,13433,13435],{"class":54,"line":66},[52,13427,242],{"class":58},[52,13429,13430],{"class":79}," g_a ",[52,13432,292],{"class":58},[52,13434,5051],{"class":308},[52,13436,80],{"class":79},[52,13438,13439,13441,13444,13446,13448],{"class":54,"line":83},[52,13440,242],{"class":58},[52,13442,13443],{"class":79}," g_b ",[52,13445,292],{"class":58},[52,13447,5051],{"class":308},[52,13449,80],{"class":79},[52,13451,13452],{"class":54,"line":91},[52,13453,123],{"emptyLinePlaceholder":122},[52,13455,13456],{"class":54,"line":98},[52,13457,13458],{"class":94},"\u002F\u002F全局常量\n",[52,13460,13461,13463,13465,13468,13470,13472],{"class":54,"line":107},[52,13462,1648],{"class":58},[52,13464,2280],{"class":58},[52,13466,13467],{"class":79}," c_g_a ",[52,13469,292],{"class":58},[52,13471,5051],{"class":308},[52,13473,80],{"class":79},[52,13475,13476,13478,13480,13483,13485,13487],{"class":54,"line":113},[52,13477,1648],{"class":58},[52,13479,2280],{"class":58},[52,13481,13482],{"class":79}," c_g_b ",[52,13484,292],{"class":58},[52,13486,5051],{"class":308},[52,13488,80],{"class":79},[52,13490,13491],{"class":54,"line":119},[52,13492,123],{"emptyLinePlaceholder":122},[52,13494,13495,13497,13499],{"class":54,"line":126},[52,13496,242],{"class":58},[52,13498,245],{"class":75},[52,13500,13501],{"class":79},"() {\n",[52,13503,13504],{"class":54,"line":132},[52,13505,123],{"emptyLinePlaceholder":122},[52,13507,13508],{"class":54,"line":138},[52,13509,13510],{"class":94},"    \u002F\u002F局部变量\n",[52,13512,13513,13515,13518,13520,13522],{"class":54,"line":144},[52,13514,147],{"class":58},[52,13516,13517],{"class":79}," a ",[52,13519,292],{"class":58},[52,13521,5051],{"class":308},[52,13523,80],{"class":79},[52,13525,13526,13528,13531,13533,13535],{"class":54,"line":153},[52,13527,147],{"class":58},[52,13529,13530],{"class":79}," b ",[52,13532,292],{"class":58},[52,13534,5051],{"class":308},[52,13536,80],{"class":79},[52,13538,13539],{"class":54,"line":159},[52,13540,123],{"emptyLinePlaceholder":122},[52,13542,13543],{"class":54,"line":167},[52,13544,13545],{"class":94},"    \u002F\u002F打印地址\n",[52,13547,13548,13550,13552,13555,13557,13559,13561,13563,13565,13568,13570],{"class":54,"line":173},[52,13549,1234],{"class":79},[52,13551,339],{"class":58},[52,13553,13554],{"class":62}," \"局部变量a地址为： \"",[52,13556,1247],{"class":58},[52,13558,682],{"class":79},[52,13560,242],{"class":58},[52,13562,2283],{"class":79},[52,13564,1433],{"class":58},[52,13566,13567],{"class":79},"a ",[52,13569,339],{"class":58},[52,13571,1264],{"class":79},[52,13573,13574,13576,13578,13581,13583,13585,13587,13589,13591,13594,13596],{"class":54,"line":181},[52,13575,1234],{"class":79},[52,13577,339],{"class":58},[52,13579,13580],{"class":62}," \"局部变量b地址为： \"",[52,13582,1247],{"class":58},[52,13584,682],{"class":79},[52,13586,242],{"class":58},[52,13588,2283],{"class":79},[52,13590,1433],{"class":58},[52,13592,13593],{"class":79},"b ",[52,13595,339],{"class":58},[52,13597,1264],{"class":79},[52,13599,13600],{"class":54,"line":186},[52,13601,123],{"emptyLinePlaceholder":122},[52,13603,13604,13606,13608,13611,13613,13616,13618,13620,13622,13625,13627],{"class":54,"line":191},[52,13605,1234],{"class":79},[52,13607,339],{"class":58},[52,13609,13610],{"class":62}," \"全局变量g_a地址为： \"",[52,13612,1247],{"class":58},[52,13614,13615],{"class":79},"  (",[52,13617,242],{"class":58},[52,13619,2283],{"class":79},[52,13621,1433],{"class":58},[52,13623,13624],{"class":79},"g_a ",[52,13626,339],{"class":58},[52,13628,1264],{"class":79},[52,13630,13631,13633,13635,13638,13640,13642,13644,13646,13648,13651,13653],{"class":54,"line":196},[52,13632,1234],{"class":79},[52,13634,339],{"class":58},[52,13636,13637],{"class":62}," \"全局变量g_b地址为： \"",[52,13639,1247],{"class":58},[52,13641,13615],{"class":79},[52,13643,242],{"class":58},[52,13645,2283],{"class":79},[52,13647,1433],{"class":58},[52,13649,13650],{"class":79},"g_b ",[52,13652,339],{"class":58},[52,13654,1264],{"class":79},[52,13656,13657],{"class":54,"line":201},[52,13658,123],{"emptyLinePlaceholder":122},[52,13660,13661],{"class":54,"line":206},[52,13662,13663],{"class":94},"    \u002F\u002F静态变量\n",[52,13665,13666,13669,13671,13674,13676,13678],{"class":54,"line":211},[52,13667,13668],{"class":58},"    static",[52,13670,2280],{"class":58},[52,13672,13673],{"class":79}," s_a ",[52,13675,292],{"class":58},[52,13677,5051],{"class":308},[52,13679,80],{"class":79},[52,13681,13682,13684,13686,13689,13691,13693],{"class":54,"line":218},[52,13683,13668],{"class":58},[52,13685,2280],{"class":58},[52,13687,13688],{"class":79}," s_b ",[52,13690,292],{"class":58},[52,13692,5051],{"class":308},[52,13694,80],{"class":79},[52,13696,13697],{"class":54,"line":223},[52,13698,123],{"emptyLinePlaceholder":122},[52,13700,13701,13703,13705,13708,13710,13712,13714,13716,13718,13721,13723],{"class":54,"line":230},[52,13702,1234],{"class":79},[52,13704,339],{"class":58},[52,13706,13707],{"class":62}," \"静态变量s_a地址为： \"",[52,13709,1247],{"class":58},[52,13711,682],{"class":79},[52,13713,242],{"class":58},[52,13715,2283],{"class":79},[52,13717,1433],{"class":58},[52,13719,13720],{"class":79},"s_a ",[52,13722,339],{"class":58},[52,13724,1264],{"class":79},[52,13726,13727,13729,13731,13734,13736,13738,13740,13742,13744,13747,13749],{"class":54,"line":239},[52,13728,1234],{"class":79},[52,13730,339],{"class":58},[52,13732,13733],{"class":62}," \"静态变量s_b地址为： \"",[52,13735,1247],{"class":58},[52,13737,682],{"class":79},[52,13739,242],{"class":58},[52,13741,2283],{"class":79},[52,13743,1433],{"class":58},[52,13745,13746],{"class":79},"s_b ",[52,13748,339],{"class":58},[52,13750,1264],{"class":79},[52,13752,13753],{"class":54,"line":251},[52,13754,123],{"emptyLinePlaceholder":122},[52,13756,13757,13759,13761,13764,13766,13768,13770,13772,13774,13776,13778],{"class":54,"line":256},[52,13758,1234],{"class":79},[52,13760,339],{"class":58},[52,13762,13763],{"class":62}," \"字符串常量地址为： \"",[52,13765,1247],{"class":58},[52,13767,682],{"class":79},[52,13769,242],{"class":58},[52,13771,2283],{"class":79},[52,13773,1433],{"class":58},[52,13775,4244],{"class":62},[52,13777,1247],{"class":58},[52,13779,1264],{"class":79},[52,13781,13782,13784,13786,13788,13790,13792,13794,13796,13798,13801,13803],{"class":54,"line":262},[52,13783,1234],{"class":79},[52,13785,339],{"class":58},[52,13787,13763],{"class":62},[52,13789,1247],{"class":58},[52,13791,682],{"class":79},[52,13793,242],{"class":58},[52,13795,2283],{"class":79},[52,13797,1433],{"class":58},[52,13799,13800],{"class":62},"\"hello world1\"",[52,13802,1247],{"class":58},[52,13804,1264],{"class":79},[52,13806,13807],{"class":54,"line":268},[52,13808,123],{"emptyLinePlaceholder":122},[52,13810,13811,13813,13815,13818,13820,13822,13824,13826,13828,13831,13833],{"class":54,"line":280},[52,13812,1234],{"class":79},[52,13814,339],{"class":58},[52,13816,13817],{"class":62}," \"全局常量c_g_a地址为： \"",[52,13819,1247],{"class":58},[52,13821,682],{"class":79},[52,13823,242],{"class":58},[52,13825,2283],{"class":79},[52,13827,1433],{"class":58},[52,13829,13830],{"class":79},"c_g_a ",[52,13832,339],{"class":58},[52,13834,1264],{"class":79},[52,13836,13837,13839,13841,13844,13846,13848,13850,13852,13854,13857,13859],{"class":54,"line":286},[52,13838,1234],{"class":79},[52,13840,339],{"class":58},[52,13842,13843],{"class":62}," \"全局常量c_g_b地址为： \"",[52,13845,1247],{"class":58},[52,13847,682],{"class":79},[52,13849,242],{"class":58},[52,13851,2283],{"class":79},[52,13853,1433],{"class":58},[52,13855,13856],{"class":79},"c_g_b ",[52,13858,339],{"class":58},[52,13860,1264],{"class":79},[52,13862,13863],{"class":54,"line":300},[52,13864,123],{"emptyLinePlaceholder":122},[52,13866,13867,13870,13872,13875,13877,13879],{"class":54,"line":314},[52,13868,13869],{"class":58},"    const",[52,13871,2280],{"class":58},[52,13873,13874],{"class":79}," c_l_a ",[52,13876,292],{"class":58},[52,13878,5051],{"class":308},[52,13880,80],{"class":79},[52,13882,13883,13885,13887,13890,13892,13894],{"class":54,"line":327},[52,13884,13869],{"class":58},[52,13886,2280],{"class":58},[52,13888,13889],{"class":79}," c_l_b ",[52,13891,292],{"class":58},[52,13893,5051],{"class":308},[52,13895,80],{"class":79},[52,13897,13898,13900,13902,13905,13907,13909,13911,13913,13915,13918,13920],{"class":54,"line":333},[52,13899,1234],{"class":79},[52,13901,339],{"class":58},[52,13903,13904],{"class":62}," \"局部常量c_l_a地址为： \"",[52,13906,1247],{"class":58},[52,13908,682],{"class":79},[52,13910,242],{"class":58},[52,13912,2283],{"class":79},[52,13914,1433],{"class":58},[52,13916,13917],{"class":79},"c_l_a ",[52,13919,339],{"class":58},[52,13921,1264],{"class":79},[52,13923,13924,13926,13928,13931,13933,13935,13937,13939,13941,13944,13946],{"class":54,"line":360},[52,13925,1234],{"class":79},[52,13927,339],{"class":58},[52,13929,13930],{"class":62}," \"局部常量c_l_b地址为： \"",[52,13932,1247],{"class":58},[52,13934,682],{"class":79},[52,13936,242],{"class":58},[52,13938,2283],{"class":79},[52,13940,1433],{"class":58},[52,13942,13943],{"class":79},"c_l_b ",[52,13945,339],{"class":58},[52,13947,1264],{"class":79},[52,13949,13950],{"class":54,"line":365},[52,13951,123],{"emptyLinePlaceholder":122},[52,13953,13954,13956,13958,13960],{"class":54,"line":371},[52,13955,5313],{"class":75},[52,13957,1216],{"class":79},[52,13959,5318],{"class":62},[52,13961,2737],{"class":79},[52,13963,13964],{"class":54,"line":400},[52,13965,123],{"emptyLinePlaceholder":122},[52,13967,13968,13970,13972],{"class":54,"line":405},[52,13969,1441],{"class":58},[52,13971,1444],{"class":308},[52,13973,80],{"class":79},[52,13975,13976],{"class":54,"line":411},[52,13977,452],{"class":79},[14,13979,13980],{},"总结：",[29,13982,13983,13986,13989,13992],{},[32,13984,13985],{},"c++中程序运行前分为全局区和代码区",[32,13987,13988],{},"代码区特点是共享和只读",[32,13990,13991],{},"全局区中存放全局变量、静态变量、常量",[32,13993,13994],{},"常量区中存放const修饰的全局常量和字符串常量",[3195,13996,13998],{"id":13997},"_512程序运行后","5.1.2程序运行后",[1696,14000,14001],{},[32,14002,14003],{},"栈区：",[29,14005,14006,14013],{},[32,14007,14008,14009,14012],{},"由编译器自动分配释放, 存放",[2389,14010,14011],{},"函数的参数值,局部变量","等",[32,14014,14015,14016,14019],{},"注意事项：",[2389,14017,14018],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[42,14021,14023],{"className":44,"code":14022,"language":46,"meta":47,"style":47},"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",[49,14024,14025,14036,14040,14055,14067,14071,14075,14083,14088,14103,14121,14138,14148,14156],{"__ignoreMap":47},[52,14026,14027,14029,14031,14034],{"class":54,"line":55},[52,14028,242],{"class":58},[52,14030,872],{"class":58},[52,14032,14033],{"class":75}," func",[52,14035,248],{"class":79},[52,14037,14038],{"class":54,"line":66},[52,14039,110],{"class":79},[52,14041,14042,14044,14046,14048,14050,14052],{"class":54,"line":83},[52,14043,147],{"class":58},[52,14045,13517],{"class":79},[52,14047,292],{"class":58},[52,14049,5051],{"class":308},[52,14051,2010],{"class":79},[52,14053,14054],{"class":94}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[52,14056,14057,14059,14061,14064],{"class":54,"line":91},[52,14058,1441],{"class":58},[52,14060,3061],{"class":58},[52,14062,14063],{"class":79},"a;",[52,14065,14066],{"class":94}," \u002F\u002F放回局部变量的地址\n",[52,14068,14069],{"class":54,"line":98},[52,14070,452],{"class":79},[52,14072,14073],{"class":54,"line":107},[52,14074,123],{"emptyLinePlaceholder":122},[52,14076,14077,14079,14081],{"class":54,"line":113},[52,14078,242],{"class":58},[52,14080,245],{"class":75},[52,14082,13501],{"class":79},[52,14084,14085],{"class":54,"line":119},[52,14086,14087],{"class":94},"    \u002F\u002F接受func的返回值\n",[52,14089,14090,14092,14094,14097,14099,14101],{"class":54,"line":126},[52,14091,147],{"class":58},[52,14093,872],{"class":58},[52,14095,14096],{"class":79},"p ",[52,14098,292],{"class":58},[52,14100,14033],{"class":75},[52,14102,8601],{"class":79},[52,14104,14105,14107,14109,14111,14113,14115,14118],{"class":54,"line":132},[52,14106,1234],{"class":79},[52,14108,339],{"class":58},[52,14110,872],{"class":58},[52,14112,14096],{"class":79},[52,14114,339],{"class":58},[52,14116,14117],{"class":79}," endl;",[52,14119,14120],{"class":94}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[52,14122,14123,14125,14127,14129,14131,14133,14135],{"class":54,"line":138},[52,14124,1234],{"class":79},[52,14126,339],{"class":58},[52,14128,872],{"class":58},[52,14130,14096],{"class":79},[52,14132,339],{"class":58},[52,14134,14117],{"class":79},[52,14136,14137],{"class":94}," \u002F\u002F第二次这个数据不再保留\n",[52,14139,14140,14142,14144,14146],{"class":54,"line":144},[52,14141,5313],{"class":75},[52,14143,1216],{"class":79},[52,14145,5318],{"class":62},[52,14147,2737],{"class":79},[52,14149,14150,14152,14154],{"class":54,"line":153},[52,14151,1441],{"class":58},[52,14153,1444],{"class":308},[52,14155,80],{"class":79},[52,14157,14158],{"class":54,"line":159},[52,14159,452],{"class":79},[14,14161,14162],{},"输出结果：",[14,14164,14165],{},[4509,14166],{"alt":14167,"src":14168},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,14170,14171],{},"总结：不要返回局部变量的地址",[1696,14173,14174],{"start":66},[32,14175,14176],{},"堆区",[29,14178,14179,14182],{},[32,14180,14181],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[32,14183,14184],{},"在c++中主要利用new在堆区开辟内存",[42,14186,14188],{"className":44,"code":14187,"language":46,"meta":47,"style":47},"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",[49,14189,14190,14205,14209,14214,14235,14242,14246,14254,14258,14263,14277,14289],{"__ignoreMap":47},[52,14191,14192,14194,14197,14200,14202],{"class":54,"line":55},[52,14193,242],{"class":58},[52,14195,14196],{"class":58},"  *",[52,14198,14199],{"class":75},"func",[52,14201,1995],{"class":79},[52,14203,14204],{"class":94},"  \u002F\u002F函数返回指针\n",[52,14206,14207],{"class":54,"line":66},[52,14208,110],{"class":79},[52,14210,14211],{"class":54,"line":83},[52,14212,14213],{"class":94},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[52,14215,14216,14218,14220,14222,14224,14227,14229,14231,14233],{"class":54,"line":91},[52,14217,7122],{"class":58},[52,14219,872],{"class":58},[52,14221,14],{"class":79},[52,14223,292],{"class":58},[52,14225,14226],{"class":58}," new",[52,14228,2280],{"class":58},[52,14230,1216],{"class":79},[52,14232,3649],{"class":308},[52,14234,2737],{"class":79},[52,14236,14237,14239],{"class":54,"line":98},[52,14238,7353],{"class":58},[52,14240,14241],{"class":79}," p;\n",[52,14243,14244],{"class":54,"line":107},[52,14245,452],{"class":79},[52,14247,14248,14250,14252],{"class":54,"line":113},[52,14249,242],{"class":58},[52,14251,245],{"class":75},[52,14253,248],{"class":79},[52,14255,14256],{"class":54,"line":119},[52,14257,110],{"class":79},[52,14259,14260],{"class":54,"line":126},[52,14261,14262],{"class":94},"    \u002F\u002F在堆区开辟数据\n",[52,14264,14265,14267,14269,14271,14273,14275],{"class":54,"line":132},[52,14266,147],{"class":58},[52,14268,872],{"class":58},[52,14270,14],{"class":79},[52,14272,292],{"class":58},[52,14274,14199],{"class":75},[52,14276,8601],{"class":79},[52,14278,14279,14281,14283,14285,14287],{"class":54,"line":138},[52,14280,336],{"class":79},[52,14282,9382],{"class":58},[52,14284,14],{"class":79},[52,14286,339],{"class":58},[52,14288,357],{"class":79},[52,14290,14291],{"class":54,"line":144},[52,14292,452],{"class":79},[14,14294,14295],{},"图片展示：",[14,14297,14298],{},[4509,14299],{"alt":14167,"src":14300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,14302,14303],{},"堆区内存由程序员管生死！！！",[1696,14305,14306],{"start":83},[32,14307,14308],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,14310,14311],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,14313,14314,14315],{},"​语法：",[49,14316,14317],{}," new 数据类型",[14,14319,14320],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[42,14322,14324],{"className":44,"code":14323,"language":46,"meta":47,"style":47},"\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",[49,14325,14326,14331,14341,14345,14350,14355,14377,14381,14389,14393,14407,14419,14431,14443,14448,14453,14464,14468,14473,14481,14485,14490,14512,14538,14542,14560,14564,14590,14594,14606,14610,14615,14620,14628,14632,14636,14644,14648,14654,14660],{"__ignoreMap":47},[52,14327,14328],{"class":54,"line":55},[52,14329,14330],{"class":94},"\u002F\u002F1.new的基本语法\n",[52,14332,14333,14335,14337,14339],{"class":54,"line":66},[52,14334,242],{"class":58},[52,14336,872],{"class":58},[52,14338,14199],{"class":75},[52,14340,248],{"class":79},[52,14342,14343],{"class":54,"line":83},[52,14344,110],{"class":79},[52,14346,14347],{"class":54,"line":91},[52,14348,14349],{"class":94},"    \u002F\u002F在堆区创建整型数据\n",[52,14351,14352],{"class":54,"line":98},[52,14353,14354],{"class":94},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[52,14356,14357,14359,14361,14363,14366,14368,14370,14372,14374],{"class":54,"line":107},[52,14358,147],{"class":58},[52,14360,872],{"class":58},[52,14362,14],{"class":79},[52,14364,14365],{"class":58},"=new",[52,14367,2280],{"class":58},[52,14369,1216],{"class":79},[52,14371,3649],{"class":308},[52,14373,8931],{"class":79},[52,14375,14376],{"class":94},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[52,14378,14379],{"class":54,"line":113},[52,14380,452],{"class":79},[52,14382,14383,14385,14387],{"class":54,"line":119},[52,14384,1210],{"class":58},[52,14386,8553],{"class":75},[52,14388,248],{"class":79},[52,14390,14391],{"class":54,"line":126},[52,14392,110],{"class":79},[52,14394,14395,14397,14399,14401,14403,14405],{"class":54,"line":132},[52,14396,147],{"class":58},[52,14398,872],{"class":58},[52,14400,14],{"class":79},[52,14402,292],{"class":58},[52,14404,14199],{"class":75},[52,14406,8601],{"class":79},[52,14408,14409,14411,14413,14415,14417],{"class":54,"line":138},[52,14410,336],{"class":79},[52,14412,9382],{"class":58},[52,14414,14],{"class":79},[52,14416,339],{"class":58},[52,14418,357],{"class":79},[52,14420,14421,14423,14425,14427,14429],{"class":54,"line":144},[52,14422,336],{"class":79},[52,14424,9382],{"class":58},[52,14426,14],{"class":79},[52,14428,339],{"class":58},[52,14430,357],{"class":79},[52,14432,14433,14435,14437,14439,14441],{"class":54,"line":153},[52,14434,336],{"class":79},[52,14436,9382],{"class":58},[52,14438,14],{"class":79},[52,14440,339],{"class":58},[52,14442,357],{"class":79},[52,14444,14445],{"class":54,"line":159},[52,14446,14447],{"class":94},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[52,14449,14450],{"class":54,"line":167},[52,14451,14452],{"class":94},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[52,14454,14455,14458,14461],{"class":54,"line":173},[52,14456,14457],{"class":58},"    delete",[52,14459,14460],{"class":79}," p;",[52,14462,14463],{"class":94},"\u002F\u002F删除这块地址\n",[52,14465,14466],{"class":54,"line":181},[52,14467,452],{"class":79},[52,14469,14470],{"class":54,"line":186},[52,14471,14472],{"class":94},"\u002F\u002F2.在堆区利用new开辟数组\n",[52,14474,14475,14477,14479],{"class":54,"line":191},[52,14476,1210],{"class":58},[52,14478,8622],{"class":75},[52,14480,248],{"class":79},[52,14482,14483],{"class":54,"line":196},[52,14484,110],{"class":79},[52,14486,14487],{"class":54,"line":201},[52,14488,14489],{"class":94},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[52,14491,14492,14494,14496,14498,14500,14502,14504,14506,14509],{"class":54,"line":206},[52,14493,147],{"class":58},[52,14495,872],{"class":58},[52,14497,6858],{"class":79},[52,14499,14365],{"class":58},[52,14501,2280],{"class":58},[52,14503,4080],{"class":79},[52,14505,3649],{"class":308},[52,14507,14508],{"class":79},"];",[52,14510,14511],{"class":94},"\u002F\u002F10代表数组有10个元素\n",[52,14513,14514,14516,14518,14520,14522,14524,14526,14528,14530,14532,14534,14536],{"class":54,"line":211},[52,14515,679],{"class":58},[52,14517,682],{"class":79},[52,14519,242],{"class":58},[52,14521,687],{"class":79},[52,14523,292],{"class":58},[52,14525,692],{"class":308},[52,14527,695],{"class":79},[52,14529,698],{"class":58},[52,14531,3649],{"class":308},[52,14533,695],{"class":79},[52,14535,705],{"class":58},[52,14537,708],{"class":79},[52,14539,14540],{"class":54,"line":218},[52,14541,575],{"class":79},[52,14543,14544,14547,14549,14551,14553,14555,14557],{"class":54,"line":223},[52,14545,14546],{"class":79},"        arr[i]",[52,14548,292],{"class":58},[52,14550,3644],{"class":79},[52,14552,2004],{"class":58},[52,14554,591],{"class":308},[52,14556,2010],{"class":79},[52,14558,14559],{"class":94},"\u002F\u002F给10个元素赋值100～109\n",[52,14561,14562],{"class":54,"line":230},[52,14563,616],{"class":79},[52,14565,14566,14568,14570,14572,14574,14576,14578,14580,14582,14584,14586,14588],{"class":54,"line":239},[52,14567,679],{"class":58},[52,14569,682],{"class":79},[52,14571,242],{"class":58},[52,14573,687],{"class":79},[52,14575,292],{"class":58},[52,14577,692],{"class":308},[52,14579,695],{"class":79},[52,14581,698],{"class":58},[52,14583,3649],{"class":308},[52,14585,695],{"class":79},[52,14587,705],{"class":58},[52,14589,708],{"class":79},[52,14591,14592],{"class":54,"line":251},[52,14593,575],{"class":79},[52,14595,14596,14598,14600,14602,14604],{"class":54,"line":256},[52,14597,717],{"class":79},[52,14599,339],{"class":58},[52,14601,7326],{"class":79},[52,14603,339],{"class":58},[52,14605,357],{"class":79},[52,14607,14608],{"class":54,"line":262},[52,14609,616],{"class":79},[52,14611,14612],{"class":54,"line":268},[52,14613,14614],{"class":94},"    \u002F\u002F释放堆区数组\n",[52,14616,14617],{"class":54,"line":280},[52,14618,14619],{"class":94},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[52,14621,14622,14625],{"class":54,"line":286},[52,14623,14624],{"class":58},"    delete[]",[52,14626,14627],{"class":79}," arr;\n",[52,14629,14630],{"class":54,"line":300},[52,14631,452],{"class":79},[52,14633,14634],{"class":54,"line":314},[52,14635,123],{"emptyLinePlaceholder":122},[52,14637,14638,14640,14642],{"class":54,"line":327},[52,14639,242],{"class":58},[52,14641,245],{"class":75},[52,14643,248],{"class":79},[52,14645,14646],{"class":54,"line":333},[52,14647,110],{"class":79},[52,14649,14650,14652],{"class":54,"line":360},[52,14651,8598],{"class":75},[52,14653,8601],{"class":79},[52,14655,14656,14658],{"class":54,"line":365},[52,14657,8667],{"class":75},[52,14659,8601],{"class":79},[52,14661,14662],{"class":54,"line":371},[52,14663,452],{"class":79},[3141,14665,14666],{},"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":47,"searchDepth":66,"depth":66,"links":14668},[14669],{"id":13337,"depth":66,"text":13338,"children":14670},[14671,14672],{"id":13369,"depth":83,"text":13370},{"id":13997,"depth":83,"text":13998},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":13329,"description":47},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14679,"title":14680,"body":14681,"description":47,"extension":3153,"meta":16162,"navigation":122,"path":16163,"seo":16164,"stem":16165,"__hash__":16166},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14682,"toc":16154},[14683,14686,14690,14693,14696,14865,14869,14874,14891,14896,15048,15052,15055,15058,15452,15456,15459,15464,15467,15779,15783,15789,15949,15951,15959,15963,15966,15973,16151],[10,14684,14680],{"id":14685},"_6引用",[18,14687,14689],{"id":14688},"_61引用基本用法","6.1引用基本用法",[14,14691,14692],{},"引用的本质：给变量起别名",[14,14694,14695],{},"语法：数据类型 &别名=原名",[42,14697,14699],{"className":44,"code":14698,"language":46,"meta":47,"style":47},"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",[49,14700,14701,14709,14713,14725,14737,14741,14760,14779,14783,14794,14798,14817,14835,14839,14849,14853,14861],{"__ignoreMap":47},[52,14702,14703,14705,14707],{"class":54,"line":55},[52,14704,242],{"class":58},[52,14706,245],{"class":75},[52,14708,13501],{"class":79},[52,14710,14711],{"class":54,"line":66},[52,14712,123],{"emptyLinePlaceholder":122},[52,14714,14715,14717,14719,14721,14723],{"class":54,"line":83},[52,14716,147],{"class":58},[52,14718,13517],{"class":79},[52,14720,292],{"class":58},[52,14722,5051],{"class":308},[52,14724,80],{"class":79},[52,14726,14727,14729,14731,14733,14735],{"class":54,"line":91},[52,14728,147],{"class":58},[52,14730,3061],{"class":58},[52,14732,13593],{"class":79},[52,14734,292],{"class":58},[52,14736,4480],{"class":79},[52,14738,14739],{"class":54,"line":98},[52,14740,123],{"emptyLinePlaceholder":122},[52,14742,14743,14745,14747,14750,14752,14754,14756,14758],{"class":54,"line":107},[52,14744,1234],{"class":79},[52,14746,339],{"class":58},[52,14748,14749],{"class":62}," \"a = \"",[52,14751,1247],{"class":58},[52,14753,13517],{"class":79},[52,14755,339],{"class":58},[52,14757,14117],{"class":79},[52,14759,10227],{"class":94},[52,14761,14762,14764,14766,14769,14771,14773,14775,14777],{"class":54,"line":113},[52,14763,1234],{"class":79},[52,14765,339],{"class":58},[52,14767,14768],{"class":62}," \"b = \"",[52,14770,1247],{"class":58},[52,14772,13530],{"class":79},[52,14774,339],{"class":58},[52,14776,14117],{"class":79},[52,14778,10227],{"class":94},[52,14780,14781],{"class":54,"line":119},[52,14782,123],{"emptyLinePlaceholder":122},[52,14784,14785,14788,14790,14792],{"class":54,"line":126},[52,14786,14787],{"class":79},"    b ",[52,14789,292],{"class":58},[52,14791,8719],{"class":308},[52,14793,80],{"class":79},[52,14795,14796],{"class":54,"line":132},[52,14797,123],{"emptyLinePlaceholder":122},[52,14799,14800,14802,14804,14806,14808,14810,14812,14814],{"class":54,"line":138},[52,14801,1234],{"class":79},[52,14803,339],{"class":58},[52,14805,14749],{"class":62},[52,14807,1247],{"class":58},[52,14809,13517],{"class":79},[52,14811,339],{"class":58},[52,14813,14117],{"class":79},[52,14815,14816],{"class":94},"\u002F\u002F100\n",[52,14818,14819,14821,14823,14825,14827,14829,14831,14833],{"class":54,"line":144},[52,14820,1234],{"class":79},[52,14822,339],{"class":58},[52,14824,14768],{"class":62},[52,14826,1247],{"class":58},[52,14828,13530],{"class":79},[52,14830,339],{"class":58},[52,14832,14117],{"class":79},[52,14834,14816],{"class":94},[52,14836,14837],{"class":54,"line":153},[52,14838,123],{"emptyLinePlaceholder":122},[52,14840,14841,14843,14845,14847],{"class":54,"line":159},[52,14842,5313],{"class":75},[52,14844,1216],{"class":79},[52,14846,5318],{"class":62},[52,14848,2737],{"class":79},[52,14850,14851],{"class":54,"line":167},[52,14852,123],{"emptyLinePlaceholder":122},[52,14854,14855,14857,14859],{"class":54,"line":173},[52,14856,1441],{"class":58},[52,14858,1444],{"class":308},[52,14860,80],{"class":79},[52,14862,14863],{"class":54,"line":181},[52,14864,452],{"class":79},[18,14866,14868],{"id":14867},"_62引用的注意事项","6.2引用的注意事项",[1696,14870,14871],{},[32,14872,14873],{},"引用必须要初始化",[42,14875,14877],{"className":44,"code":14876,"language":46,"meta":47,"style":47},"int &b;\u002F\u002F非常错误！\n",[49,14878,14879],{"__ignoreMap":47},[52,14880,14881,14883,14885,14888],{"class":54,"line":55},[52,14882,242],{"class":58},[52,14884,3061],{"class":58},[52,14886,14887],{"class":79},"b;",[52,14889,14890],{"class":94},"\u002F\u002F非常错误！\n",[1696,14892,14893],{"start":66},[32,14894,14895],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[42,14897,14899],{"className":44,"code":14898,"language":46,"meta":47,"style":47},"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",[49,14900,14901,14909,14921,14933,14941,14957,14970,14988,15006,15026,15036,15044],{"__ignoreMap":47},[52,14902,14903,14905,14907],{"class":54,"line":55},[52,14904,242],{"class":58},[52,14906,245],{"class":75},[52,14908,13501],{"class":79},[52,14910,14911,14913,14915,14917,14919],{"class":54,"line":66},[52,14912,147],{"class":58},[52,14914,13517],{"class":79},[52,14916,292],{"class":58},[52,14918,5051],{"class":308},[52,14920,80],{"class":79},[52,14922,14923,14925,14927,14929,14931],{"class":54,"line":83},[52,14924,147],{"class":58},[52,14926,13530],{"class":79},[52,14928,292],{"class":58},[52,14930,1375],{"class":308},[52,14932,80],{"class":79},[52,14934,14935,14938],{"class":54,"line":91},[52,14936,14937],{"class":94},"    \u002F\u002Fint &c;",[52,14939,14940],{"class":94}," \u002F\u002F错误，引用必须初始化\n",[52,14942,14943,14945,14947,14949,14951,14954],{"class":54,"line":98},[52,14944,147],{"class":58},[52,14946,3061],{"class":58},[52,14948,5935],{"class":79},[52,14950,292],{"class":58},[52,14952,14953],{"class":79}," a;",[52,14955,14956],{"class":94}," \u002F\u002F一旦初始化后，就不可以更改\n",[52,14958,14959,14962,14964,14967],{"class":54,"line":107},[52,14960,14961],{"class":79},"    c ",[52,14963,292],{"class":58},[52,14965,14966],{"class":79}," b;",[52,14968,14969],{"class":94}," \u002F\u002F这是赋值操作，不是更改引用\n",[52,14971,14972,14974,14976,14978,14980,14982,14984,14986],{"class":54,"line":113},[52,14973,1234],{"class":79},[52,14975,339],{"class":58},[52,14977,14749],{"class":62},[52,14979,1247],{"class":58},[52,14981,13517],{"class":79},[52,14983,339],{"class":58},[52,14985,14117],{"class":79},[52,14987,10212],{"class":94},[52,14989,14990,14992,14994,14996,14998,15000,15002,15004],{"class":54,"line":119},[52,14991,1234],{"class":79},[52,14993,339],{"class":58},[52,14995,14768],{"class":62},[52,14997,1247],{"class":58},[52,14999,13530],{"class":79},[52,15001,339],{"class":58},[52,15003,14117],{"class":79},[52,15005,10212],{"class":94},[52,15007,15008,15010,15012,15015,15017,15020,15022,15024],{"class":54,"line":126},[52,15009,1234],{"class":79},[52,15011,339],{"class":58},[52,15013,15014],{"class":62}," \"c = \"",[52,15016,1247],{"class":58},[52,15018,15019],{"class":79}," c ",[52,15021,339],{"class":58},[52,15023,14117],{"class":79},[52,15025,10212],{"class":94},[52,15027,15028,15030,15032,15034],{"class":54,"line":132},[52,15029,5313],{"class":75},[52,15031,1216],{"class":79},[52,15033,5318],{"class":62},[52,15035,2737],{"class":79},[52,15037,15038,15040,15042],{"class":54,"line":138},[52,15039,1441],{"class":58},[52,15041,1444],{"class":308},[52,15043,80],{"class":79},[52,15045,15046],{"class":54,"line":144},[52,15047,452],{"class":79},[18,15049,15051],{"id":15050},"_63引用做函数参数","6.3引用做函数参数",[14,15053,15054],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,15056,15057],{},"优点：可以简化指针修改实参",[42,15059,15061],{"className":44,"code":15060,"language":46,"meta":47,"style":47},"\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",[49,15062,15063,15068,15091,15102,15112,15121,15125,15129,15134,15156,15168,15180,15190,15194,15198,15203,15225,15235,15243,15251,15255,15259,15267,15271,15283,15295,15299,15310,15336,15340,15360,15384,15388,15398,15422,15426,15436,15440,15448],{"__ignoreMap":47},[52,15064,15065],{"class":54,"line":55},[52,15066,15067],{"class":94},"\u002F\u002F1. 值传递\n",[52,15069,15070,15072,15075,15077,15079,15081,15084,15086,15088],{"class":54,"line":66},[52,15071,1210],{"class":58},[52,15073,15074],{"class":75}," mySwap01",[52,15076,1216],{"class":79},[52,15078,242],{"class":58},[52,15080,4446],{"class":1223},[52,15082,15083],{"class":79},", ",[52,15085,242],{"class":58},[52,15087,5822],{"class":1223},[52,15089,15090],{"class":79},") {\n",[52,15092,15093,15095,15098,15100],{"class":54,"line":83},[52,15094,147],{"class":58},[52,15096,15097],{"class":79}," temp ",[52,15099,292],{"class":58},[52,15101,4480],{"class":79},[52,15103,15104,15107,15109],{"class":54,"line":91},[52,15105,15106],{"class":79},"    a ",[52,15108,292],{"class":58},[52,15110,15111],{"class":79}," b;\n",[52,15113,15114,15116,15118],{"class":54,"line":98},[52,15115,14787],{"class":79},[52,15117,292],{"class":58},[52,15119,15120],{"class":79}," temp;\n",[52,15122,15123],{"class":54,"line":107},[52,15124,452],{"class":79},[52,15126,15127],{"class":54,"line":113},[52,15128,123],{"emptyLinePlaceholder":122},[52,15130,15131],{"class":54,"line":119},[52,15132,15133],{"class":94},"\u002F\u002F2. 地址传递\n",[52,15135,15136,15138,15141,15143,15146,15148,15150,15152,15154],{"class":54,"line":126},[52,15137,1210],{"class":58},[52,15139,15140],{"class":75}," mySwap02",[52,15142,1216],{"class":79},[52,15144,15145],{"class":58},"int*",[52,15147,4446],{"class":1223},[52,15149,15083],{"class":79},[52,15151,15145],{"class":58},[52,15153,5822],{"class":1223},[52,15155,15090],{"class":79},[52,15157,15158,15160,15162,15164,15166],{"class":54,"line":132},[52,15159,147],{"class":58},[52,15161,15097],{"class":79},[52,15163,292],{"class":58},[52,15165,872],{"class":58},[52,15167,9161],{"class":79},[52,15169,15170,15172,15174,15176,15178],{"class":54,"line":138},[52,15171,9366],{"class":58},[52,15173,13567],{"class":79},[52,15175,292],{"class":58},[52,15177,872],{"class":58},[52,15179,9033],{"class":79},[52,15181,15182,15184,15186,15188],{"class":54,"line":144},[52,15183,9366],{"class":58},[52,15185,13593],{"class":79},[52,15187,292],{"class":58},[52,15189,15120],{"class":79},[52,15191,15192],{"class":54,"line":153},[52,15193,452],{"class":79},[52,15195,15196],{"class":54,"line":159},[52,15197,123],{"emptyLinePlaceholder":122},[52,15199,15200],{"class":54,"line":167},[52,15201,15202],{"class":94},"\u002F\u002F3. 引用传递\n",[52,15204,15205,15207,15210,15212,15215,15217,15219,15221,15223],{"class":54,"line":173},[52,15206,1210],{"class":58},[52,15208,15209],{"class":75}," mySwap03",[52,15211,1216],{"class":79},[52,15213,15214],{"class":58},"int&",[52,15216,4446],{"class":1223},[52,15218,15083],{"class":79},[52,15220,15214],{"class":58},[52,15222,5822],{"class":1223},[52,15224,15090],{"class":79},[52,15226,15227,15229,15231,15233],{"class":54,"line":181},[52,15228,147],{"class":58},[52,15230,15097],{"class":79},[52,15232,292],{"class":58},[52,15234,4480],{"class":79},[52,15236,15237,15239,15241],{"class":54,"line":186},[52,15238,15106],{"class":79},[52,15240,292],{"class":58},[52,15242,15111],{"class":79},[52,15244,15245,15247,15249],{"class":54,"line":191},[52,15246,14787],{"class":79},[52,15248,292],{"class":58},[52,15250,15120],{"class":79},[52,15252,15253],{"class":54,"line":196},[52,15254,452],{"class":79},[52,15256,15257],{"class":54,"line":201},[52,15258,123],{"emptyLinePlaceholder":122},[52,15260,15261,15263,15265],{"class":54,"line":206},[52,15262,242],{"class":58},[52,15264,245],{"class":75},[52,15266,13501],{"class":79},[52,15268,15269],{"class":54,"line":211},[52,15270,123],{"emptyLinePlaceholder":122},[52,15272,15273,15275,15277,15279,15281],{"class":54,"line":218},[52,15274,147],{"class":58},[52,15276,13517],{"class":79},[52,15278,292],{"class":58},[52,15280,5051],{"class":308},[52,15282,80],{"class":79},[52,15284,15285,15287,15289,15291,15293],{"class":54,"line":223},[52,15286,147],{"class":58},[52,15288,13530],{"class":79},[52,15290,292],{"class":58},[52,15292,1375],{"class":308},[52,15294,80],{"class":79},[52,15296,15297],{"class":54,"line":230},[52,15298,123],{"emptyLinePlaceholder":122},[52,15300,15301,15304,15307],{"class":54,"line":239},[52,15302,15303],{"class":75},"    mySwap01",[52,15305,15306],{"class":79},"(a, b);",[52,15308,15309],{"class":94},"\u002F\u002F值传递，形参不会修饰实参\n",[52,15311,15312,15314,15316,15319,15321,15323,15325,15328,15330,15332,15334],{"class":54,"line":251},[52,15313,1234],{"class":79},[52,15315,339],{"class":58},[52,15317,15318],{"class":62}," \"a:\"",[52,15320,1247],{"class":58},[52,15322,13517],{"class":79},[52,15324,339],{"class":58},[52,15326,15327],{"class":62}," \" b:\"",[52,15329,1247],{"class":58},[52,15331,13530],{"class":79},[52,15333,339],{"class":58},[52,15335,1264],{"class":79},[52,15337,15338],{"class":54,"line":256},[52,15339,123],{"emptyLinePlaceholder":122},[52,15341,15342,15345,15347,15349,15352,15354,15357],{"class":54,"line":262},[52,15343,15344],{"class":75},"    mySwap02",[52,15346,1216],{"class":79},[52,15348,1433],{"class":58},[52,15350,15351],{"class":79},"a, ",[52,15353,1433],{"class":58},[52,15355,15356],{"class":79},"b);",[52,15358,15359],{"class":94},"\u002F\u002F地址传递，形参会修饰实参\n",[52,15361,15362,15364,15366,15368,15370,15372,15374,15376,15378,15380,15382],{"class":54,"line":268},[52,15363,1234],{"class":79},[52,15365,339],{"class":58},[52,15367,15318],{"class":62},[52,15369,1247],{"class":58},[52,15371,13517],{"class":79},[52,15373,339],{"class":58},[52,15375,15327],{"class":62},[52,15377,1247],{"class":58},[52,15379,13530],{"class":79},[52,15381,339],{"class":58},[52,15383,1264],{"class":79},[52,15385,15386],{"class":54,"line":280},[52,15387,123],{"emptyLinePlaceholder":122},[52,15389,15390,15393,15395],{"class":54,"line":286},[52,15391,15392],{"class":75},"    mySwap03",[52,15394,15306],{"class":79},[52,15396,15397],{"class":94},"\u002F\u002F引用传递，形参会修饰实参\n",[52,15399,15400,15402,15404,15406,15408,15410,15412,15414,15416,15418,15420],{"class":54,"line":300},[52,15401,1234],{"class":79},[52,15403,339],{"class":58},[52,15405,15318],{"class":62},[52,15407,1247],{"class":58},[52,15409,13517],{"class":79},[52,15411,339],{"class":58},[52,15413,15327],{"class":62},[52,15415,1247],{"class":58},[52,15417,13530],{"class":79},[52,15419,339],{"class":58},[52,15421,1264],{"class":79},[52,15423,15424],{"class":54,"line":314},[52,15425,123],{"emptyLinePlaceholder":122},[52,15427,15428,15430,15432,15434],{"class":54,"line":327},[52,15429,5313],{"class":75},[52,15431,1216],{"class":79},[52,15433,5318],{"class":62},[52,15435,2737],{"class":79},[52,15437,15438],{"class":54,"line":333},[52,15439,123],{"emptyLinePlaceholder":122},[52,15441,15442,15444,15446],{"class":54,"line":360},[52,15443,1441],{"class":58},[52,15445,1444],{"class":308},[52,15447,80],{"class":79},[52,15449,15450],{"class":54,"line":365},[52,15451,452],{"class":79},[18,15453,15455],{"id":15454},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,15457,15458],{},"作用：引用是可以作为函数的返回值存在的",[14,15460,1453,15461],{},[2389,15462,15463],{},"不要返回局部变量引用",[14,15465,15466],{},"用法：函数调用作为左值",[42,15468,15470],{"className":2398,"code":15469,"language":2400,"meta":47,"style":47},"\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",[49,15471,15472,15477,15485,15500,15506,15510,15514,15519,15527,15544,15550,15554,15558,15566,15570,15575,15589,15609,15628,15632,15637,15650,15670,15688,15692,15708,15712,15731,15749,15753,15763,15767,15775],{"__ignoreMap":47},[52,15473,15474],{"class":54,"line":55},[52,15475,15476],{"class":94},"\u002F\u002F返回局部变量引用\n",[52,15478,15479,15481,15483],{"class":54,"line":66},[52,15480,15214],{"class":58},[52,15482,8553],{"class":75},[52,15484,13501],{"class":79},[52,15486,15487,15489,15491,15493,15495,15497],{"class":54,"line":83},[52,15488,147],{"class":58},[52,15490,13517],{"class":79},[52,15492,292],{"class":58},[52,15494,5051],{"class":308},[52,15496,2010],{"class":79},[52,15498,15499],{"class":94}," \u002F\u002F局部变量\n",[52,15501,15502,15504],{"class":54,"line":91},[52,15503,1441],{"class":58},[52,15505,4480],{"class":79},[52,15507,15508],{"class":54,"line":98},[52,15509,452],{"class":79},[52,15511,15512],{"class":54,"line":107},[52,15513,123],{"emptyLinePlaceholder":122},[52,15515,15516],{"class":54,"line":113},[52,15517,15518],{"class":94},"\u002F\u002F返回静态变量引用\n",[52,15520,15521,15523,15525],{"class":54,"line":119},[52,15522,15214],{"class":58},[52,15524,8622],{"class":75},[52,15526,13501],{"class":79},[52,15528,15529,15531,15533,15535,15537,15539,15541],{"class":54,"line":126},[52,15530,13668],{"class":58},[52,15532,2280],{"class":58},[52,15534,13517],{"class":79},[52,15536,292],{"class":58},[52,15538,1375],{"class":308},[52,15540,2010],{"class":79},[52,15542,15543],{"class":94},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[52,15545,15546,15548],{"class":54,"line":132},[52,15547,1441],{"class":58},[52,15549,4480],{"class":79},[52,15551,15552],{"class":54,"line":138},[52,15553,452],{"class":79},[52,15555,15556],{"class":54,"line":144},[52,15557,123],{"emptyLinePlaceholder":122},[52,15559,15560,15562,15564],{"class":54,"line":153},[52,15561,242],{"class":58},[52,15563,245],{"class":75},[52,15565,13501],{"class":79},[52,15567,15568],{"class":54,"line":159},[52,15569,123],{"emptyLinePlaceholder":122},[52,15571,15572],{"class":54,"line":167},[52,15573,15574],{"class":94},"    \u002F\u002F不能返回局部变量的引用\n",[52,15576,15577,15580,15583,15585,15587],{"class":54,"line":173},[52,15578,15579],{"class":58},"    int&",[52,15581,15582],{"class":79}," ref ",[52,15584,292],{"class":58},[52,15586,8553],{"class":75},[52,15588,8601],{"class":79},[52,15590,15591,15593,15595,15598,15600,15602,15604,15606],{"class":54,"line":181},[52,15592,1234],{"class":79},[52,15594,339],{"class":58},[52,15596,15597],{"class":62}," \"ref = \"",[52,15599,1247],{"class":58},[52,15601,15582],{"class":79},[52,15603,339],{"class":58},[52,15605,14117],{"class":79},[52,15607,15608],{"class":94},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[52,15610,15611,15613,15615,15617,15619,15621,15623,15625],{"class":54,"line":186},[52,15612,1234],{"class":79},[52,15614,339],{"class":58},[52,15616,15597],{"class":62},[52,15618,1247],{"class":58},[52,15620,15582],{"class":79},[52,15622,339],{"class":58},[52,15624,14117],{"class":79},[52,15626,15627],{"class":94},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[52,15629,15630],{"class":54,"line":191},[52,15631,123],{"emptyLinePlaceholder":122},[52,15633,15634],{"class":54,"line":196},[52,15635,15636],{"class":94},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[52,15638,15639,15641,15644,15646,15648],{"class":54,"line":201},[52,15640,15579],{"class":58},[52,15642,15643],{"class":79}," ref2 ",[52,15645,292],{"class":58},[52,15647,8622],{"class":75},[52,15649,8601],{"class":79},[52,15651,15652,15654,15656,15659,15661,15663,15665,15667],{"class":54,"line":206},[52,15653,1234],{"class":79},[52,15655,339],{"class":58},[52,15657,15658],{"class":62}," \"ref2 = \"",[52,15660,1247],{"class":58},[52,15662,15643],{"class":79},[52,15664,339],{"class":58},[52,15666,14117],{"class":79},[52,15668,15669],{"class":94}," \u002F\u002F20\n",[52,15671,15672,15674,15676,15678,15680,15682,15684,15686],{"class":54,"line":211},[52,15673,1234],{"class":79},[52,15675,339],{"class":58},[52,15677,15658],{"class":62},[52,15679,1247],{"class":58},[52,15681,15643],{"class":79},[52,15683,339],{"class":58},[52,15685,14117],{"class":79},[52,15687,15669],{"class":94},[52,15689,15690],{"class":54,"line":218},[52,15691,123],{"emptyLinePlaceholder":122},[52,15693,15694,15696,15699,15701,15703,15705],{"class":54,"line":223},[52,15695,8667],{"class":75},[52,15697,15698],{"class":79},"() ",[52,15700,292],{"class":58},[52,15702,5988],{"class":308},[52,15704,2010],{"class":79},[52,15706,15707],{"class":94},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[52,15709,15710],{"class":54,"line":230},[52,15711,123],{"emptyLinePlaceholder":122},[52,15713,15714,15716,15718,15720,15722,15724,15726,15728],{"class":54,"line":239},[52,15715,1234],{"class":79},[52,15717,339],{"class":58},[52,15719,15658],{"class":62},[52,15721,1247],{"class":58},[52,15723,15643],{"class":79},[52,15725,339],{"class":58},[52,15727,14117],{"class":79},[52,15729,15730],{"class":94}," \u002F\u002F1000\n",[52,15732,15733,15735,15737,15739,15741,15743,15745,15747],{"class":54,"line":251},[52,15734,1234],{"class":79},[52,15736,339],{"class":58},[52,15738,15658],{"class":62},[52,15740,1247],{"class":58},[52,15742,15643],{"class":79},[52,15744,339],{"class":58},[52,15746,14117],{"class":79},[52,15748,15730],{"class":94},[52,15750,15751],{"class":54,"line":256},[52,15752,123],{"emptyLinePlaceholder":122},[52,15754,15755,15757,15759,15761],{"class":54,"line":262},[52,15756,5313],{"class":75},[52,15758,1216],{"class":79},[52,15760,5318],{"class":62},[52,15762,2737],{"class":79},[52,15764,15765],{"class":54,"line":268},[52,15766,123],{"emptyLinePlaceholder":122},[52,15768,15769,15771,15773],{"class":54,"line":280},[52,15770,1441],{"class":58},[52,15772,1444],{"class":308},[52,15774,80],{"class":79},[52,15776,15777],{"class":54,"line":286},[52,15778,452],{"class":79},[18,15780,15782],{"id":15781},"_65引用的本质","6.5引用的本质",[14,15784,15785,15786],{},"本质：",[2389,15787,15788],{},"引用的本质在c++内部实现是一个指针常量.",[42,15790,15792],{"className":44,"code":15791,"language":46,"meta":47,"style":47},"\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",[49,15793,15794,15799,15815,15829,15833,15842,15854,15859,15864,15875,15888,15892,15908,15925,15929,15937,15945],{"__ignoreMap":47},[52,15795,15796],{"class":54,"line":55},[52,15797,15798],{"class":94},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[52,15800,15801,15803,15805,15807,15809,15812],{"class":54,"line":66},[52,15802,1210],{"class":58},[52,15804,14033],{"class":75},[52,15806,1216],{"class":79},[52,15808,15214],{"class":58},[52,15810,15811],{"class":1223}," ref",[52,15813,15814],{"class":79},"){\n",[52,15816,15817,15820,15822,15824,15826],{"class":54,"line":83},[52,15818,15819],{"class":79},"    ref ",[52,15821,292],{"class":58},[52,15823,8719],{"class":308},[52,15825,2010],{"class":79},[52,15827,15828],{"class":94}," \u002F\u002F ref是引用，转换为*ref = 100\n",[52,15830,15831],{"class":54,"line":91},[52,15832,452],{"class":79},[52,15834,15835,15837,15839],{"class":54,"line":98},[52,15836,242],{"class":58},[52,15838,245],{"class":75},[52,15840,15841],{"class":79},"(){\n",[52,15843,15844,15846,15848,15850,15852],{"class":54,"line":107},[52,15845,147],{"class":58},[52,15847,13517],{"class":79},[52,15849,292],{"class":58},[52,15851,5051],{"class":308},[52,15853,80],{"class":79},[52,15855,15856],{"class":54,"line":113},[52,15857,15858],{"class":79},"    \n",[52,15860,15861],{"class":54,"line":119},[52,15862,15863],{"class":94},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[52,15865,15866,15868,15870,15872],{"class":54,"line":126},[52,15867,15579],{"class":58},[52,15869,15582],{"class":79},[52,15871,292],{"class":58},[52,15873,15874],{"class":79}," a; \n",[52,15876,15877,15879,15881,15883,15885],{"class":54,"line":132},[52,15878,15819],{"class":79},[52,15880,292],{"class":58},[52,15882,1375],{"class":308},[52,15884,2010],{"class":79},[52,15886,15887],{"class":94}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[52,15889,15890],{"class":54,"line":138},[52,15891,15858],{"class":79},[52,15893,15894,15896,15898,15900,15902,15904,15906],{"class":54,"line":144},[52,15895,1234],{"class":79},[52,15897,339],{"class":58},[52,15899,15318],{"class":62},[52,15901,1247],{"class":58},[52,15903,13517],{"class":79},[52,15905,339],{"class":58},[52,15907,1264],{"class":79},[52,15909,15910,15912,15914,15917,15919,15921,15923],{"class":54,"line":153},[52,15911,1234],{"class":79},[52,15913,339],{"class":58},[52,15915,15916],{"class":62}," \"ref:\"",[52,15918,1247],{"class":58},[52,15920,15582],{"class":79},[52,15922,339],{"class":58},[52,15924,1264],{"class":79},[52,15926,15927],{"class":54,"line":159},[52,15928,15858],{"class":79},[52,15930,15931,15934],{"class":54,"line":167},[52,15932,15933],{"class":75},"    func",[52,15935,15936],{"class":79},"(a);\n",[52,15938,15939,15941,15943],{"class":54,"line":173},[52,15940,1441],{"class":58},[52,15942,1444],{"class":308},[52,15944,80],{"class":79},[52,15946,15947],{"class":54,"line":181},[52,15948,452],{"class":79},[14,15950,13980],{},[1696,15952,15953,15956],{},[32,15954,15955],{},"引用的本质，就是一个指针常量",[32,15957,15958],{},"引用一旦初始化，就不可以发生改变",[18,15960,15962],{"id":15961},"_66常量引用","6.6常量引用",[14,15964,15965],{},"作用：常量引用主要用来修饰形参",[14,15967,15968,15969,15972],{},"在函数形参列表中，可以加",[2389,15970,15971],{},"const修饰形参","，防止形参改变实参",[42,15974,15976],{"className":44,"code":15975,"language":46,"meta":47,"style":47},"\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",[49,15977,15978,15983,15988,16007,16012,16025,16029,16033,16041,16045,16050,16055,16069,16073,16081,16093,16097,16102,16114,16121,16125,16135,16139,16147],{"__ignoreMap":47},[52,15979,15980],{"class":54,"line":55},[52,15981,15982],{"class":94},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[52,15984,15985],{"class":54,"line":66},[52,15986,15987],{"class":94},"\u002F\u002F加上const就不能修改实参的\n",[52,15989,15990,15992,15995,15997,15999,16002,16005],{"class":54,"line":83},[52,15991,1210],{"class":58},[52,15993,15994],{"class":75}," showValue",[52,15996,1216],{"class":79},[52,15998,1648],{"class":58},[52,16000,16001],{"class":58}," int&",[52,16003,16004],{"class":1223}," v",[52,16006,15090],{"class":79},[52,16008,16009],{"class":54,"line":91},[52,16010,16011],{"class":94},"    \u002F\u002Fv += 100;\n",[52,16013,16014,16016,16018,16021,16023],{"class":54,"line":98},[52,16015,1234],{"class":79},[52,16017,339],{"class":58},[52,16019,16020],{"class":79}," v ",[52,16022,339],{"class":58},[52,16024,1264],{"class":79},[52,16026,16027],{"class":54,"line":107},[52,16028,452],{"class":79},[52,16030,16031],{"class":54,"line":113},[52,16032,123],{"emptyLinePlaceholder":122},[52,16034,16035,16037,16039],{"class":54,"line":119},[52,16036,242],{"class":58},[52,16038,245],{"class":75},[52,16040,13501],{"class":79},[52,16042,16043],{"class":54,"line":126},[52,16044,123],{"emptyLinePlaceholder":122},[52,16046,16047],{"class":54,"line":132},[52,16048,16049],{"class":94},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[52,16051,16052],{"class":54,"line":138},[52,16053,16054],{"class":94},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[52,16056,16057,16059,16061,16063,16065,16067],{"class":54,"line":144},[52,16058,13869],{"class":58},[52,16060,16001],{"class":58},[52,16062,15582],{"class":79},[52,16064,292],{"class":58},[52,16066,5051],{"class":308},[52,16068,80],{"class":79},[52,16070,16071],{"class":54,"line":153},[52,16072,123],{"emptyLinePlaceholder":122},[52,16074,16075,16078],{"class":54,"line":159},[52,16076,16077],{"class":94},"    \u002F\u002Fref = 100;",[52,16079,16080],{"class":94},"  \u002F\u002F加入const后不可以修改变量\n",[52,16082,16083,16085,16087,16089,16091],{"class":54,"line":167},[52,16084,1234],{"class":79},[52,16086,339],{"class":58},[52,16088,15582],{"class":79},[52,16090,339],{"class":58},[52,16092,1264],{"class":79},[52,16094,16095],{"class":54,"line":173},[52,16096,123],{"emptyLinePlaceholder":122},[52,16098,16099],{"class":54,"line":181},[52,16100,16101],{"class":94},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[52,16103,16104,16106,16108,16110,16112],{"class":54,"line":186},[52,16105,147],{"class":58},[52,16107,13517],{"class":79},[52,16109,292],{"class":58},[52,16111,5051],{"class":308},[52,16113,80],{"class":79},[52,16115,16116,16119],{"class":54,"line":191},[52,16117,16118],{"class":75},"    showValue",[52,16120,15936],{"class":79},[52,16122,16123],{"class":54,"line":196},[52,16124,123],{"emptyLinePlaceholder":122},[52,16126,16127,16129,16131,16133],{"class":54,"line":201},[52,16128,5313],{"class":75},[52,16130,1216],{"class":79},[52,16132,5318],{"class":62},[52,16134,2737],{"class":79},[52,16136,16137],{"class":54,"line":206},[52,16138,123],{"emptyLinePlaceholder":122},[52,16140,16141,16143,16145],{"class":54,"line":211},[52,16142,1441],{"class":58},[52,16144,1444],{"class":308},[52,16146,80],{"class":79},[52,16148,16149],{"class":54,"line":218},[52,16150,452],{"class":79},[3141,16152,16153],{},"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":47,"searchDepth":66,"depth":66,"links":16155},[16156,16157,16158,16159,16160,16161],{"id":14688,"depth":66,"text":14689},{"id":14867,"depth":66,"text":14868},{"id":15050,"depth":66,"text":15051},{"id":15454,"depth":66,"text":15455},{"id":15781,"depth":66,"text":15782},{"id":15961,"depth":66,"text":15962},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14680,"description":47},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":16168,"title":16169,"body":16170,"description":47,"extension":3153,"meta":17251,"navigation":122,"path":17252,"seo":17253,"stem":17254,"__hash__":17255},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":16171,"toc":17243},[16172,16175,16179,16182,16187,16419,16421,16432,16436,16439,16447,16551,16554,16558,16561,16565,16568,16573,16595,16601,16928,16931,16935,16943,17240],[10,16173,16169],{"id":16174},"_7函数高级部分",[18,16176,16178],{"id":16177},"_71函数默认参数","7.1函数默认参数",[14,16180,16181],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,16183,8148,16184],{},[49,16185,16186],{}," 返回值类型  函数名 （参数= 默认值）{}",[42,16188,16190],{"className":44,"code":16189,"language":46,"meta":47,"style":47},"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",[49,16191,16192,16227,16242,16246,16250,16255,16260,16289,16309,16319,16323,16327,16335,16339,16367,16389,16393,16403,16407,16415],{"__ignoreMap":47},[52,16193,16194,16196,16198,16200,16202,16204,16206,16208,16210,16213,16215,16217,16219,16221,16223,16225],{"class":54,"line":55},[52,16195,242],{"class":58},[52,16197,14033],{"class":75},[52,16199,1216],{"class":79},[52,16201,242],{"class":58},[52,16203,4446],{"class":1223},[52,16205,15083],{"class":79},[52,16207,242],{"class":58},[52,16209,5822],{"class":1223},[52,16211,16212],{"class":58}," =",[52,16214,5051],{"class":308},[52,16216,15083],{"class":79},[52,16218,242],{"class":58},[52,16220,5838],{"class":1223},[52,16222,16212],{"class":58},[52,16224,5051],{"class":308},[52,16226,15090],{"class":79},[52,16228,16229,16231,16233,16235,16237,16239],{"class":54,"line":66},[52,16230,1441],{"class":58},[52,16232,13517],{"class":79},[52,16234,2004],{"class":58},[52,16236,13530],{"class":79},[52,16238,2004],{"class":58},[52,16240,16241],{"class":79}," c;\n",[52,16243,16244],{"class":54,"line":83},[52,16245,452],{"class":79},[52,16247,16248],{"class":54,"line":91},[52,16249,123],{"emptyLinePlaceholder":122},[52,16251,16252],{"class":54,"line":98},[52,16253,16254],{"class":94},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[52,16256,16257],{"class":54,"line":107},[52,16258,16259],{"class":94},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[52,16261,16262,16264,16267,16269,16271,16273,16275,16277,16279,16281,16283,16285,16287],{"class":54,"line":113},[52,16263,242],{"class":58},[52,16265,16266],{"class":75}," func2",[52,16268,1216],{"class":79},[52,16270,242],{"class":58},[52,16272,4446],{"class":1223},[52,16274,16212],{"class":58},[52,16276,5051],{"class":308},[52,16278,15083],{"class":79},[52,16280,242],{"class":58},[52,16282,5822],{"class":1223},[52,16284,16212],{"class":58},[52,16286,5051],{"class":308},[52,16288,2737],{"class":79},[52,16290,16291,16293,16295,16297,16299,16301,16303,16305,16307],{"class":54,"line":119},[52,16292,242],{"class":58},[52,16294,16266],{"class":75},[52,16296,1216],{"class":79},[52,16298,242],{"class":58},[52,16300,4446],{"class":1223},[52,16302,15083],{"class":79},[52,16304,242],{"class":58},[52,16306,5822],{"class":1223},[52,16308,15090],{"class":79},[52,16310,16311,16313,16315,16317],{"class":54,"line":126},[52,16312,1441],{"class":58},[52,16314,13517],{"class":79},[52,16316,2004],{"class":58},[52,16318,15111],{"class":79},[52,16320,16321],{"class":54,"line":132},[52,16322,452],{"class":79},[52,16324,16325],{"class":54,"line":138},[52,16326,123],{"emptyLinePlaceholder":122},[52,16328,16329,16331,16333],{"class":54,"line":144},[52,16330,242],{"class":58},[52,16332,245],{"class":75},[52,16334,13501],{"class":79},[52,16336,16337],{"class":54,"line":153},[52,16338,123],{"emptyLinePlaceholder":122},[52,16340,16341,16343,16345,16348,16350,16352,16354,16356,16358,16360,16363,16365],{"class":54,"line":159},[52,16342,1234],{"class":79},[52,16344,339],{"class":58},[52,16346,16347],{"class":62}," \"ret = \"",[52,16349,1247],{"class":58},[52,16351,14033],{"class":75},[52,16353,1216],{"class":79},[52,16355,444],{"class":308},[52,16357,15083],{"class":79},[52,16359,444],{"class":308},[52,16361,16362],{"class":79},") ",[52,16364,339],{"class":58},[52,16366,1264],{"class":79},[52,16368,16369,16371,16373,16375,16377,16379,16381,16383,16385,16387],{"class":54,"line":167},[52,16370,1234],{"class":79},[52,16372,339],{"class":58},[52,16374,16347],{"class":62},[52,16376,1247],{"class":58},[52,16378,14033],{"class":75},[52,16380,1216],{"class":79},[52,16382,591],{"class":308},[52,16384,16362],{"class":79},[52,16386,339],{"class":58},[52,16388,1264],{"class":79},[52,16390,16391],{"class":54,"line":173},[52,16392,123],{"emptyLinePlaceholder":122},[52,16394,16395,16397,16399,16401],{"class":54,"line":181},[52,16396,5313],{"class":75},[52,16398,1216],{"class":79},[52,16400,5318],{"class":62},[52,16402,2737],{"class":79},[52,16404,16405],{"class":54,"line":186},[52,16406,123],{"emptyLinePlaceholder":122},[52,16408,16409,16411,16413],{"class":54,"line":191},[52,16410,1441],{"class":58},[52,16412,1444],{"class":308},[52,16414,80],{"class":79},[52,16416,16417],{"class":54,"line":196},[52,16418,452],{"class":79},[14,16420,13980],{},[1696,16422,16423,16426,16429],{},[32,16424,16425],{},"我传就用我；没传就用你",[32,16427,16428],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[32,16430,16431],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[18,16433,16435],{"id":16434},"_72函数的占位参数","7.2函数的占位参数",[14,16437,16438],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,16440,16441,16443,16444],{},[2389,16442,8148],{}," ",[49,16445,16446],{},"返回值类型 函数名 (数据类型){}",[42,16448,16450],{"className":44,"code":16449,"language":46,"meta":47,"style":47},"\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",[49,16451,16452,16457,16475,16488,16492,16500,16504,16521,16525,16535,16539,16547],{"__ignoreMap":47},[52,16453,16454],{"class":54,"line":55},[52,16455,16456],{"class":94},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[52,16458,16459,16461,16463,16465,16467,16469,16471,16473],{"class":54,"line":66},[52,16460,1210],{"class":58},[52,16462,14033],{"class":75},[52,16464,1216],{"class":79},[52,16466,242],{"class":58},[52,16468,4446],{"class":1223},[52,16470,15083],{"class":79},[52,16472,242],{"class":58},[52,16474,15090],{"class":79},[52,16476,16477,16479,16481,16484,16486],{"class":54,"line":83},[52,16478,1234],{"class":79},[52,16480,339],{"class":58},[52,16482,16483],{"class":62}," \"this is func\"",[52,16485,1247],{"class":58},[52,16487,1264],{"class":79},[52,16489,16490],{"class":54,"line":91},[52,16491,452],{"class":79},[52,16493,16494,16496,16498],{"class":54,"line":98},[52,16495,242],{"class":58},[52,16497,245],{"class":75},[52,16499,13501],{"class":79},[52,16501,16502],{"class":54,"line":107},[52,16503,123],{"emptyLinePlaceholder":122},[52,16505,16506,16508,16510,16512,16514,16516,16518],{"class":54,"line":113},[52,16507,15933],{"class":75},[52,16509,1216],{"class":79},[52,16511,3649],{"class":308},[52,16513,389],{"class":79},[52,16515,3649],{"class":308},[52,16517,8931],{"class":79},[52,16519,16520],{"class":94}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[52,16522,16523],{"class":54,"line":119},[52,16524,123],{"emptyLinePlaceholder":122},[52,16526,16527,16529,16531,16533],{"class":54,"line":126},[52,16528,5313],{"class":75},[52,16530,1216],{"class":79},[52,16532,5318],{"class":62},[52,16534,2737],{"class":79},[52,16536,16537],{"class":54,"line":132},[52,16538,123],{"emptyLinePlaceholder":122},[52,16540,16541,16543,16545],{"class":54,"line":138},[52,16542,1441],{"class":58},[52,16544,1444],{"class":308},[52,16546,80],{"class":79},[52,16548,16549],{"class":54,"line":144},[52,16550,452],{"class":79},[14,16552,16553],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[18,16555,16557],{"id":16556},"_73函数重载","7.3函数重载",[14,16559,16560],{},"意思是函数名是可以相同的",[3195,16562,16564],{"id":16563},"_731基本语法","7.3.1基本语法",[14,16566,16567],{},"作用：函数名可以相同，提高复用性",[14,16569,16570],{},[2389,16571,16572],{},"函数重载满足条件：",[29,16574,16575,16578,16581],{},[32,16576,16577],{},"同一个作用域下",[32,16579,16580],{},"函数名称相同",[32,16582,16583,16584,16587,16588,16591,16592],{},"函数参数",[2389,16585,16586],{},"类型不同","  或者 ",[2389,16589,16590],{},"个数不同"," 或者 ",[2389,16593,16594],{},"顺序不同",[14,16596,16597,16600],{},[2389,16598,16599],{},"注意:","  函数的返回值不可以作为函数重载的条件",[42,16602,16604],{"className":2398,"code":16603,"language":2400,"meta":47,"style":47},"\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",[49,16605,16606,16611,16619,16623,16636,16640,16654,16658,16671,16675,16690,16694,16707,16711,16732,16736,16749,16753,16773,16777,16790,16794,16798,16803,16808,16813,16818,16823,16827,16831,16839,16843,16849,16859,16869,16883,16898,16902,16912,16916,16924],{"__ignoreMap":47},[52,16607,16608],{"class":54,"line":55},[52,16609,16610],{"class":94},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[52,16612,16613,16615,16617],{"class":54,"line":66},[52,16614,1210],{"class":58},[52,16616,14033],{"class":75},[52,16618,248],{"class":79},[52,16620,16621],{"class":54,"line":83},[52,16622,110],{"class":79},[52,16624,16625,16627,16629,16632,16634],{"class":54,"line":91},[52,16626,1234],{"class":79},[52,16628,339],{"class":58},[52,16630,16631],{"class":62}," \"func 的调用！\"",[52,16633,1247],{"class":58},[52,16635,1264],{"class":79},[52,16637,16638],{"class":54,"line":98},[52,16639,452],{"class":79},[52,16641,16642,16644,16646,16648,16650,16652],{"class":54,"line":107},[52,16643,1210],{"class":58},[52,16645,14033],{"class":75},[52,16647,1216],{"class":79},[52,16649,242],{"class":58},[52,16651,4446],{"class":1223},[52,16653,708],{"class":79},[52,16655,16656],{"class":54,"line":113},[52,16657,110],{"class":79},[52,16659,16660,16662,16664,16667,16669],{"class":54,"line":119},[52,16661,1234],{"class":79},[52,16663,339],{"class":58},[52,16665,16666],{"class":62}," \"func (int a) 的调用！\"",[52,16668,1247],{"class":58},[52,16670,1264],{"class":79},[52,16672,16673],{"class":54,"line":126},[52,16674,452],{"class":79},[52,16676,16677,16679,16681,16683,16686,16688],{"class":54,"line":132},[52,16678,1210],{"class":58},[52,16680,14033],{"class":75},[52,16682,1216],{"class":79},[52,16684,16685],{"class":58},"double",[52,16687,4446],{"class":1223},[52,16689,708],{"class":79},[52,16691,16692],{"class":54,"line":138},[52,16693,110],{"class":79},[52,16695,16696,16698,16700,16703,16705],{"class":54,"line":144},[52,16697,1234],{"class":79},[52,16699,339],{"class":58},[52,16701,16702],{"class":62}," \"func (double a)的调用！\"",[52,16704,1247],{"class":58},[52,16706,1264],{"class":79},[52,16708,16709],{"class":54,"line":153},[52,16710,452],{"class":79},[52,16712,16713,16715,16717,16719,16721,16723,16726,16728,16730],{"class":54,"line":159},[52,16714,1210],{"class":58},[52,16716,14033],{"class":75},[52,16718,1216],{"class":79},[52,16720,242],{"class":58},[52,16722,4446],{"class":1223},[52,16724,16725],{"class":79}," ,",[52,16727,16685],{"class":58},[52,16729,5822],{"class":1223},[52,16731,708],{"class":79},[52,16733,16734],{"class":54,"line":167},[52,16735,110],{"class":79},[52,16737,16738,16740,16742,16745,16747],{"class":54,"line":173},[52,16739,1234],{"class":79},[52,16741,339],{"class":58},[52,16743,16744],{"class":62}," \"func (int a ,double b) 的调用！\"",[52,16746,1247],{"class":58},[52,16748,1264],{"class":79},[52,16750,16751],{"class":54,"line":181},[52,16752,452],{"class":79},[52,16754,16755,16757,16759,16761,16763,16765,16767,16769,16771],{"class":54,"line":186},[52,16756,1210],{"class":58},[52,16758,14033],{"class":75},[52,16760,1216],{"class":79},[52,16762,16685],{"class":58},[52,16764,4446],{"class":1223},[52,16766,16725],{"class":79},[52,16768,242],{"class":58},[52,16770,5822],{"class":1223},[52,16772,708],{"class":79},[52,16774,16775],{"class":54,"line":191},[52,16776,110],{"class":79},[52,16778,16779,16781,16783,16786,16788],{"class":54,"line":196},[52,16780,1234],{"class":79},[52,16782,339],{"class":58},[52,16784,16785],{"class":62}," \"func (double a ,int b)的调用！\"",[52,16787,1247],{"class":58},[52,16789,1264],{"class":79},[52,16791,16792],{"class":54,"line":201},[52,16793,452],{"class":79},[52,16795,16796],{"class":54,"line":206},[52,16797,123],{"emptyLinePlaceholder":122},[52,16799,16800],{"class":54,"line":211},[52,16801,16802],{"class":94},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[52,16804,16805],{"class":54,"line":218},[52,16806,16807],{"class":94},"\u002F\u002Fint func(double a, int b)\n",[52,16809,16810],{"class":54,"line":223},[52,16811,16812],{"class":94},"\u002F\u002F{\n",[52,16814,16815],{"class":54,"line":230},[52,16816,16817],{"class":94},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[52,16819,16820],{"class":54,"line":239},[52,16821,16822],{"class":94},"\u002F\u002F}\n",[52,16824,16825],{"class":54,"line":251},[52,16826,123],{"emptyLinePlaceholder":122},[52,16828,16829],{"class":54,"line":256},[52,16830,123],{"emptyLinePlaceholder":122},[52,16832,16833,16835,16837],{"class":54,"line":262},[52,16834,242],{"class":58},[52,16836,245],{"class":75},[52,16838,13501],{"class":79},[52,16840,16841],{"class":54,"line":268},[52,16842,123],{"emptyLinePlaceholder":122},[52,16844,16845,16847],{"class":54,"line":280},[52,16846,15933],{"class":75},[52,16848,8601],{"class":79},[52,16850,16851,16853,16855,16857],{"class":54,"line":286},[52,16852,15933],{"class":75},[52,16854,1216],{"class":79},[52,16856,3649],{"class":308},[52,16858,2737],{"class":79},[52,16860,16861,16863,16865,16867],{"class":54,"line":300},[52,16862,15933],{"class":75},[52,16864,1216],{"class":79},[52,16866,3270],{"class":308},[52,16868,2737],{"class":79},[52,16870,16871,16873,16875,16877,16879,16881],{"class":54,"line":314},[52,16872,15933],{"class":75},[52,16874,1216],{"class":79},[52,16876,3649],{"class":308},[52,16878,389],{"class":79},[52,16880,3270],{"class":308},[52,16882,2737],{"class":79},[52,16884,16885,16887,16889,16891,16894,16896],{"class":54,"line":327},[52,16886,15933],{"class":75},[52,16888,1216],{"class":79},[52,16890,3270],{"class":308},[52,16892,16893],{"class":79}," , ",[52,16895,3649],{"class":308},[52,16897,2737],{"class":79},[52,16899,16900],{"class":54,"line":333},[52,16901,15858],{"class":79},[52,16903,16904,16906,16908,16910],{"class":54,"line":360},[52,16905,5313],{"class":75},[52,16907,1216],{"class":79},[52,16909,5318],{"class":62},[52,16911,2737],{"class":79},[52,16913,16914],{"class":54,"line":365},[52,16915,123],{"emptyLinePlaceholder":122},[52,16917,16918,16920,16922],{"class":54,"line":371},[52,16919,1441],{"class":58},[52,16921,1444],{"class":308},[52,16923,80],{"class":79},[52,16925,16926],{"class":54,"line":400},[52,16927,452],{"class":79},[14,16929,16930],{},"重点：函数返回值不可以作为函数重载条件！",[3195,16932,16934],{"id":16933},"_732注意事项","7.3.2注意事项",[29,16936,16937,16940],{},[32,16938,16939],{},"引用作为重载条件!!!",[32,16941,16942],{},"函数重载碰到函数默认参数",[42,16944,16946],{"className":44,"code":16945,"language":46,"meta":47,"style":47},"\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",[49,16947,16948,16953,16958,16962,16978,16982,16995,16999,17003,17021,17025,17038,17042,17046,17050,17055,17059,17083,17087,17100,17104,17108,17122,17126,17139,17143,17147,17155,17159,17171,17181,17194,17198,17202,17210,17214,17224,17228,17236],{"__ignoreMap":47},[52,16949,16950],{"class":54,"line":55},[52,16951,16952],{"class":94},"\u002F\u002F函数重载注意事项\n",[52,16954,16955],{"class":54,"line":66},[52,16956,16957],{"class":94},"\u002F\u002F1、引用作为重载条件\n",[52,16959,16960],{"class":54,"line":83},[52,16961,123],{"emptyLinePlaceholder":122},[52,16963,16964,16966,16968,16970,16972,16974,16976],{"class":54,"line":91},[52,16965,1210],{"class":58},[52,16967,14033],{"class":75},[52,16969,1216],{"class":79},[52,16971,242],{"class":58},[52,16973,3061],{"class":58},[52,16975,3451],{"class":1223},[52,16977,708],{"class":79},[52,16979,16980],{"class":54,"line":98},[52,16981,110],{"class":79},[52,16983,16984,16986,16988,16991,16993],{"class":54,"line":107},[52,16985,1234],{"class":79},[52,16987,339],{"class":58},[52,16989,16990],{"class":62}," \"func (int &a) 调用 \"",[52,16992,1247],{"class":58},[52,16994,1264],{"class":79},[52,16996,16997],{"class":54,"line":113},[52,16998,452],{"class":79},[52,17000,17001],{"class":54,"line":119},[52,17002,123],{"emptyLinePlaceholder":122},[52,17004,17005,17007,17009,17011,17013,17015,17017,17019],{"class":54,"line":126},[52,17006,1210],{"class":58},[52,17008,14033],{"class":75},[52,17010,1216],{"class":79},[52,17012,1648],{"class":58},[52,17014,2280],{"class":58},[52,17016,3061],{"class":58},[52,17018,3451],{"class":1223},[52,17020,708],{"class":79},[52,17022,17023],{"class":54,"line":132},[52,17024,110],{"class":79},[52,17026,17027,17029,17031,17034,17036],{"class":54,"line":138},[52,17028,1234],{"class":79},[52,17030,339],{"class":58},[52,17032,17033],{"class":62}," \"func (const int &a) 调用 \"",[52,17035,1247],{"class":58},[52,17037,1264],{"class":79},[52,17039,17040],{"class":54,"line":144},[52,17041,452],{"class":79},[52,17043,17044],{"class":54,"line":153},[52,17045,123],{"emptyLinePlaceholder":122},[52,17047,17048],{"class":54,"line":159},[52,17049,123],{"emptyLinePlaceholder":122},[52,17051,17052],{"class":54,"line":167},[52,17053,17054],{"class":94},"\u002F\u002F2、函数重载碰到函数默认参数\n",[52,17056,17057],{"class":54,"line":173},[52,17058,123],{"emptyLinePlaceholder":122},[52,17060,17061,17063,17065,17067,17069,17071,17073,17075,17077,17079,17081],{"class":54,"line":181},[52,17062,1210],{"class":58},[52,17064,16266],{"class":75},[52,17066,1216],{"class":79},[52,17068,242],{"class":58},[52,17070,4446],{"class":1223},[52,17072,15083],{"class":79},[52,17074,242],{"class":58},[52,17076,5822],{"class":1223},[52,17078,16212],{"class":58},[52,17080,5051],{"class":308},[52,17082,708],{"class":79},[52,17084,17085],{"class":54,"line":186},[52,17086,110],{"class":79},[52,17088,17089,17091,17093,17096,17098],{"class":54,"line":191},[52,17090,1234],{"class":79},[52,17092,339],{"class":58},[52,17094,17095],{"class":62}," \"func2(int a, int b = 10) 调用\"",[52,17097,1247],{"class":58},[52,17099,1264],{"class":79},[52,17101,17102],{"class":54,"line":196},[52,17103,452],{"class":79},[52,17105,17106],{"class":54,"line":201},[52,17107,123],{"emptyLinePlaceholder":122},[52,17109,17110,17112,17114,17116,17118,17120],{"class":54,"line":206},[52,17111,1210],{"class":58},[52,17113,16266],{"class":75},[52,17115,1216],{"class":79},[52,17117,242],{"class":58},[52,17119,4446],{"class":1223},[52,17121,708],{"class":79},[52,17123,17124],{"class":54,"line":211},[52,17125,110],{"class":79},[52,17127,17128,17130,17132,17135,17137],{"class":54,"line":218},[52,17129,1234],{"class":79},[52,17131,339],{"class":58},[52,17133,17134],{"class":62}," \"func2(int a) 调用\"",[52,17136,1247],{"class":58},[52,17138,1264],{"class":79},[52,17140,17141],{"class":54,"line":223},[52,17142,452],{"class":79},[52,17144,17145],{"class":54,"line":230},[52,17146,123],{"emptyLinePlaceholder":122},[52,17148,17149,17151,17153],{"class":54,"line":239},[52,17150,242],{"class":58},[52,17152,245],{"class":75},[52,17154,13501],{"class":79},[52,17156,17157],{"class":54,"line":251},[52,17158,15858],{"class":79},[52,17160,17161,17163,17165,17167,17169],{"class":54,"line":256},[52,17162,147],{"class":58},[52,17164,13517],{"class":79},[52,17166,292],{"class":58},[52,17168,5051],{"class":308},[52,17170,80],{"class":79},[52,17172,17173,17175,17178],{"class":54,"line":262},[52,17174,15933],{"class":75},[52,17176,17177],{"class":79},"(a);",[52,17179,17180],{"class":94}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[52,17182,17183,17185,17187,17189,17191],{"class":54,"line":268},[52,17184,15933],{"class":75},[52,17186,1216],{"class":79},[52,17188,3649],{"class":308},[52,17190,8931],{"class":79},[52,17192,17193],{"class":94},"\u002F\u002F调用有const   10是个常量\n",[52,17195,17196],{"class":54,"line":280},[52,17197,123],{"emptyLinePlaceholder":122},[52,17199,17200],{"class":54,"line":286},[52,17201,123],{"emptyLinePlaceholder":122},[52,17203,17204,17207],{"class":54,"line":300},[52,17205,17206],{"class":94},"    \u002F\u002Ffunc2(10);",[52,17208,17209],{"class":94}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[52,17211,17212],{"class":54,"line":314},[52,17213,123],{"emptyLinePlaceholder":122},[52,17215,17216,17218,17220,17222],{"class":54,"line":327},[52,17217,5313],{"class":75},[52,17219,1216],{"class":79},[52,17221,5318],{"class":62},[52,17223,2737],{"class":79},[52,17225,17226],{"class":54,"line":333},[52,17227,123],{"emptyLinePlaceholder":122},[52,17229,17230,17232,17234],{"class":54,"line":360},[52,17231,1441],{"class":58},[52,17233,1444],{"class":308},[52,17235,80],{"class":79},[52,17237,17238],{"class":54,"line":365},[52,17239,452],{"class":79},[3141,17241,17242],{},"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":47,"searchDepth":66,"depth":66,"links":17244},[17245,17246,17247],{"id":16177,"depth":66,"text":16178},{"id":16434,"depth":66,"text":16435},{"id":16556,"depth":66,"text":16557,"children":17248},[17249,17250],{"id":16563,"depth":83,"text":16564},{"id":16933,"depth":83,"text":16934},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":16169,"description":47},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":17257,"title":17258,"body":17259,"description":26013,"extension":3153,"meta":26014,"navigation":122,"path":26015,"seo":26016,"stem":26017,"__hash__":26018},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":17260,"toc":25994},[17261,17264,17270,17277,17282,17285,17288,17291,17295,17299,17302,17305,17313,17318,17321,17328,17333,17492,17495,17748,17751,17754,17757,17762,17765,17768,17779,17784,18020,18024,18034,18037,18045,18192,18196,18199,18202,18206,18651,18655,18663,18671,19583,19590,19595,20223,20226,20229,20232,20351,20354,20441,20444,20570,20573,20667,20670,21023,21027,21035,21039,21046,21049,21052,21063,21069,21074,21086,21094,21114,21122,21139,21325,21328,21332,21335,21338,21341,21344,21347,21350,21353,21813,21819,21823,21826,21837,22424,22427,22916,22920,22923,22926,22929,22932,22935,22943,23339,23343,23346,23349,23796,23799,23802,23807,23810,23815,23818,23822,23825,23827,23833,23836,24142,24152,24193,24197,24200,24202,24235,24238,24545,24547,24562,24565,24588,24597,24603,24606,24610,24613,24616,24621,24632,24637,24645,24650,24780,24783,24786,24961,24966,25178,25182,25185,25299,25304,25543,25547,25551,25554,25557,25562,25667,25670,25673,25676,25680,25791,25794,25797,25802,25854,25857,25860,25865,25911,25914,25919,25987,25989,25992],[10,17262,17258],{"id":17263},"_8类和对象",[14,17265,17266,17267],{},"C++面向对象的三大特性为",[2389,17268,17269],{},"封装、继承、多态",[14,17271,17272,17273,17276],{},"C++认为",[2389,17274,17275],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,17278,17279],{},[2389,17280,17281],{},"例如：",[14,17283,17284],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,17286,17287],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,17289,17290],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[18,17292,17294],{"id":17293},"_81封装","8.1封装",[3195,17296,17298],{"id":17297},"_811封装的意义","8.1.1封装的意义",[14,17300,17301],{},"封装是C++面向对象三大特性之一",[14,17303,17304],{},"封装的意义：",[29,17306,17307,17310],{},[32,17308,17309],{},"将属性和行为作为一个整体，表现生活中的事物",[32,17311,17312],{},"将属性和行为加以权限控制",[14,17314,17315],{},[2389,17316,17317],{},"封装意义一：",[14,17319,17320],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,17322,17323,16443,17325],{},[2389,17324,8148],{},[49,17326,17327],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[1696,17329,17330],{},[32,17331,17332],{},"**示例1：**设计一个圆类，求圆的周长",[42,17334,17336],{"className":44,"code":17335,"language":46,"meta":47,"style":47},"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",[49,17337,17338,17346,17350,17355,17360,17365,17370,17377,17382,17392,17396,17414,17418,17422,17430,17434,17439,17444,17449,17454,17465,17488],{"__ignoreMap":47},[52,17339,17340,17343],{"class":54,"line":55},[52,17341,17342],{"class":58},"class",[52,17344,17345],{"class":75}," Circle\n",[52,17347,17348],{"class":54,"line":66},[52,17349,110],{"class":79},[52,17351,17352],{"class":54,"line":83},[52,17353,17354],{"class":94},"    \u002F\u002F访问权限\n",[52,17356,17357],{"class":54,"line":91},[52,17358,17359],{"class":94},"    \u002F\u002F公共权限\n",[52,17361,17362],{"class":54,"line":98},[52,17363,17364],{"class":58},"public:\n",[52,17366,17367],{"class":54,"line":107},[52,17368,17369],{"class":94},"    \u002F\u002F属性\n",[52,17371,17372,17374],{"class":54,"line":113},[52,17373,147],{"class":58},[52,17375,17376],{"class":79}," m_r;\n",[52,17378,17379],{"class":54,"line":119},[52,17380,17381],{"class":94},"    \u002F\u002F行为\n",[52,17383,17384,17387,17390],{"class":54,"line":126},[52,17385,17386],{"class":58},"    double",[52,17388,17389],{"class":75}," calculateZC",[52,17391,248],{"class":79},[52,17393,17394],{"class":54,"line":132},[52,17395,575],{"class":79},[52,17397,17398,17401,17404,17406,17409,17411],{"class":54,"line":138},[52,17399,17400],{"class":58},"        return",[52,17402,17403],{"class":308}," 2",[52,17405,3053],{"class":58},[52,17407,17408],{"class":79},"PI",[52,17410,3053],{"class":58},[52,17412,17413],{"class":79},"m_r;\n",[52,17415,17416],{"class":54,"line":144},[52,17417,616],{"class":79},[52,17419,17420],{"class":54,"line":153},[52,17421,170],{"class":79},[52,17423,17424,17426,17428],{"class":54,"line":159},[52,17425,242],{"class":58},[52,17427,245],{"class":75},[52,17429,248],{"class":79},[52,17431,17432],{"class":54,"line":167},[52,17433,110],{"class":79},[52,17435,17436],{"class":54,"line":173},[52,17437,17438],{"class":94},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[52,17440,17441],{"class":54,"line":181},[52,17442,17443],{"class":94},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[52,17445,17446],{"class":54,"line":186},[52,17447,17448],{"class":79},"    Circle c1;\n",[52,17450,17451],{"class":54,"line":191},[52,17452,17453],{"class":94},"    \u002F\u002F给圆对象 的属性进行赋值\n",[52,17455,17456,17459,17461,17463],{"class":54,"line":196},[52,17457,17458],{"class":79},"    c1.m_r",[52,17460,292],{"class":58},[52,17462,3649],{"class":308},[52,17464,80],{"class":79},[52,17466,17467,17469,17471,17474,17476,17479,17482,17484,17486],{"class":54,"line":201},[52,17468,336],{"class":79},[52,17470,339],{"class":58},[52,17472,17473],{"class":62},"\"圆的周长\"",[52,17475,339],{"class":58},[52,17477,17478],{"class":79},"c1.",[52,17480,17481],{"class":75},"calculateZC",[52,17483,1995],{"class":79},[52,17485,339],{"class":58},[52,17487,357],{"class":79},[52,17489,17490],{"class":54,"line":206},[52,17491,452],{"class":79},[14,17493,17494],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[42,17496,17498],{"className":44,"code":17497,"language":46,"meta":47,"style":47},"#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",[49,17499,17500,17506,17516,17522,17528,17532,17536,17541,17548,17553,17571,17575,17585,17589,17594,17610,17614,17624,17628,17633,17641,17645,17677,17681,17685,17693,17697,17702,17707,17721,17735,17744],{"__ignoreMap":47},[52,17501,17502,17504],{"class":54,"line":55},[52,17503,59],{"class":58},[52,17505,63],{"class":62},[52,17507,17508,17510,17512,17514],{"class":54,"line":66},[52,17509,69],{"class":58},[52,17511,72],{"class":58},[52,17513,76],{"class":75},[52,17515,80],{"class":79},[52,17517,17518,17520],{"class":54,"line":83},[52,17519,59],{"class":58},[52,17521,88],{"class":62},[52,17523,17524,17526],{"class":54,"line":91},[52,17525,17342],{"class":58},[52,17527,104],{"class":75},[52,17529,17530],{"class":54,"line":98},[52,17531,110],{"class":79},[52,17533,17534],{"class":54,"line":107},[52,17535,17364],{"class":58},[52,17537,17538],{"class":54,"line":113},[52,17539,17540],{"class":79},"    string m_name;\n",[52,17542,17543,17545],{"class":54,"line":119},[52,17544,147],{"class":58},[52,17546,17547],{"class":79}," m_id;\n",[52,17549,17550],{"class":54,"line":126},[52,17551,17552],{"class":94},"    \u002F\u002F赋值姓名\n",[52,17554,17555,17558,17561,17563,17566,17569],{"class":54,"line":132},[52,17556,17557],{"class":58},"    void",[52,17559,17560],{"class":75}," setName",[52,17562,1216],{"class":79},[52,17564,17565],{"class":75},"string",[52,17567,17568],{"class":1223}," name",[52,17570,708],{"class":79},[52,17572,17573],{"class":54,"line":138},[52,17574,575],{"class":79},[52,17576,17577,17580,17582],{"class":54,"line":144},[52,17578,17579],{"class":79},"        m_name",[52,17581,292],{"class":58},[52,17583,17584],{"class":79},"name;\n",[52,17586,17587],{"class":54,"line":153},[52,17588,616],{"class":79},[52,17590,17591],{"class":54,"line":159},[52,17592,17593],{"class":94},"    \u002F\u002F赋值学号\n",[52,17595,17596,17598,17601,17603,17605,17608],{"class":54,"line":167},[52,17597,17557],{"class":58},[52,17599,17600],{"class":75}," setId",[52,17602,1216],{"class":79},[52,17604,242],{"class":58},[52,17606,17607],{"class":1223}," id",[52,17609,708],{"class":79},[52,17611,17612],{"class":54,"line":173},[52,17613,575],{"class":79},[52,17615,17616,17619,17621],{"class":54,"line":181},[52,17617,17618],{"class":79},"        m_id",[52,17620,292],{"class":58},[52,17622,17623],{"class":79},"id;\n",[52,17625,17626],{"class":54,"line":186},[52,17627,616],{"class":79},[52,17629,17630],{"class":54,"line":191},[52,17631,17632],{"class":94},"    \u002F\u002F打印学生信息\n",[52,17634,17635,17637,17639],{"class":54,"line":196},[52,17636,17557],{"class":58},[52,17638,2059],{"class":75},[52,17640,248],{"class":79},[52,17642,17643],{"class":54,"line":201},[52,17644,575],{"class":79},[52,17646,17647,17649,17651,17654,17656,17659,17661,17663,17665,17668,17670,17673,17675],{"class":54,"line":206},[52,17648,717],{"class":79},[52,17650,339],{"class":58},[52,17652,17653],{"class":62},"\"姓名：\"",[52,17655,339],{"class":58},[52,17657,17658],{"class":79},"m_name",[52,17660,339],{"class":58},[52,17662,7331],{"class":62},[52,17664,339],{"class":58},[52,17666,17667],{"class":62},"\"学号：\"",[52,17669,339],{"class":58},[52,17671,17672],{"class":79},"m_id",[52,17674,339],{"class":58},[52,17676,357],{"class":79},[52,17678,17679],{"class":54,"line":211},[52,17680,616],{"class":79},[52,17682,17683],{"class":54,"line":218},[52,17684,170],{"class":79},[52,17686,17687,17689,17691],{"class":54,"line":223},[52,17688,242],{"class":58},[52,17690,245],{"class":75},[52,17692,248],{"class":79},[52,17694,17695],{"class":54,"line":230},[52,17696,110],{"class":79},[52,17698,17699],{"class":54,"line":239},[52,17700,17701],{"class":94},"    \u002F\u002F实例化\n",[52,17703,17704],{"class":54,"line":251},[52,17705,17706],{"class":79},"    Student s1;\n",[52,17708,17709,17712,17715,17717,17719],{"class":54,"line":256},[52,17710,17711],{"class":79},"    s1.",[52,17713,17714],{"class":75},"setName",[52,17716,1216],{"class":79},[52,17718,295],{"class":62},[52,17720,2737],{"class":79},[52,17722,17723,17725,17728,17730,17733],{"class":54,"line":262},[52,17724,17711],{"class":79},[52,17726,17727],{"class":75},"setId",[52,17729,1216],{"class":79},[52,17731,17732],{"class":308},"123456",[52,17734,2737],{"class":79},[52,17736,17737,17739,17742],{"class":54,"line":268},[52,17738,17711],{"class":79},[52,17740,17741],{"class":75},"printInfo",[52,17743,8601],{"class":79},[52,17745,17746],{"class":54,"line":280},[52,17747,452],{"class":79},[14,17749,17750],{},"类中的属性和行为统称为成员",[14,17752,17753],{},"属性：成员属性(成员变量)",[14,17755,17756],{},"方法：成员函数(成员方法)",[14,17758,17759],{},[2389,17760,17761],{},"封装意义二：",[14,17763,17764],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,17766,17767],{},"访问权限有三种：",[1696,17769,17770,17773,17776],{},[32,17771,17772],{},"public        公共权限",[32,17774,17775],{},"protected 保护权限",[32,17777,17778],{},"private      私有权限",[14,17780,17781],{},[2389,17782,17783],{},"示例：",[42,17785,17787],{"className":2398,"code":17786,"language":2400,"meta":47,"style":47},"\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",[49,17788,17789,17794,17799,17804,17809,17813,17820,17824,17829,17833,17838,17842,17847,17852,17857,17861,17866,17871,17878,17882,17886,17894,17898,17909,17921,17933,17937,17941,17945,17953,17957,17962,17974,17982,17990,17994,18004,18008,18016],{"__ignoreMap":47},[52,17790,17791],{"class":54,"line":55},[52,17792,17793],{"class":94},"\u002F\u002F三种权限\n",[52,17795,17796],{"class":54,"line":66},[52,17797,17798],{"class":94},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[52,17800,17801],{"class":54,"line":83},[52,17802,17803],{"class":94},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[52,17805,17806],{"class":54,"line":91},[52,17807,17808],{"class":94},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[52,17810,17811],{"class":54,"line":98},[52,17812,123],{"emptyLinePlaceholder":122},[52,17814,17815,17817],{"class":54,"line":107},[52,17816,17342],{"class":58},[52,17818,17819],{"class":75}," Person\n",[52,17821,17822],{"class":54,"line":113},[52,17823,110],{"class":79},[52,17825,17826],{"class":54,"line":119},[52,17827,17828],{"class":94},"    \u002F\u002F姓名  公共权限\n",[52,17830,17831],{"class":54,"line":126},[52,17832,17364],{"class":58},[52,17834,17835],{"class":54,"line":132},[52,17836,17837],{"class":79},"    string m_Name;\n",[52,17839,17840],{"class":54,"line":138},[52,17841,123],{"emptyLinePlaceholder":122},[52,17843,17844],{"class":54,"line":144},[52,17845,17846],{"class":94},"    \u002F\u002F汽车  保护权限\n",[52,17848,17849],{"class":54,"line":153},[52,17850,17851],{"class":58},"protected:\n",[52,17853,17854],{"class":54,"line":159},[52,17855,17856],{"class":79},"    string m_Car;\n",[52,17858,17859],{"class":54,"line":167},[52,17860,123],{"emptyLinePlaceholder":122},[52,17862,17863],{"class":54,"line":173},[52,17864,17865],{"class":94},"    \u002F\u002F银行卡密码  私有权限\n",[52,17867,17868],{"class":54,"line":181},[52,17869,17870],{"class":58},"private:\n",[52,17872,17873,17875],{"class":54,"line":186},[52,17874,147],{"class":58},[52,17876,17877],{"class":79}," m_Password;\n",[52,17879,17880],{"class":54,"line":191},[52,17881,123],{"emptyLinePlaceholder":122},[52,17883,17884],{"class":54,"line":196},[52,17885,17364],{"class":58},[52,17887,17888,17890,17892],{"class":54,"line":201},[52,17889,17557],{"class":58},[52,17891,14033],{"class":75},[52,17893,248],{"class":79},[52,17895,17896],{"class":54,"line":206},[52,17897,575],{"class":79},[52,17899,17900,17903,17905,17907],{"class":54,"line":211},[52,17901,17902],{"class":79},"        m_Name ",[52,17904,292],{"class":58},[52,17906,1363],{"class":62},[52,17908,80],{"class":79},[52,17910,17911,17914,17916,17919],{"class":54,"line":218},[52,17912,17913],{"class":79},"        m_Car ",[52,17915,292],{"class":58},[52,17917,17918],{"class":62}," \"拖拉机\"",[52,17920,80],{"class":79},[52,17922,17923,17926,17928,17931],{"class":54,"line":223},[52,17924,17925],{"class":79},"        m_Password ",[52,17927,292],{"class":58},[52,17929,17930],{"class":308}," 123456",[52,17932,80],{"class":79},[52,17934,17935],{"class":54,"line":230},[52,17936,616],{"class":79},[52,17938,17939],{"class":54,"line":239},[52,17940,170],{"class":79},[52,17942,17943],{"class":54,"line":251},[52,17944,123],{"emptyLinePlaceholder":122},[52,17946,17947,17949,17951],{"class":54,"line":256},[52,17948,242],{"class":58},[52,17950,245],{"class":75},[52,17952,13501],{"class":79},[52,17954,17955],{"class":54,"line":262},[52,17956,123],{"emptyLinePlaceholder":122},[52,17958,17959],{"class":54,"line":268},[52,17960,17961],{"class":79},"    Person p;\n",[52,17963,17964,17967,17969,17972],{"class":54,"line":280},[52,17965,17966],{"class":79},"    p.m_Name ",[52,17968,292],{"class":58},[52,17970,17971],{"class":62}," \"李四\"",[52,17973,80],{"class":79},[52,17975,17976,17979],{"class":54,"line":286},[52,17977,17978],{"class":94},"    \u002F\u002Fp.m_Car = \"奔驰\";",[52,17980,17981],{"class":94},"  \u002F\u002F保护权限类外访问不到\n",[52,17983,17984,17987],{"class":54,"line":300},[52,17985,17986],{"class":94},"    \u002F\u002Fp.m_Password = 123;",[52,17988,17989],{"class":94}," \u002F\u002F私有权限类外访问不到\n",[52,17991,17992],{"class":54,"line":314},[52,17993,123],{"emptyLinePlaceholder":122},[52,17995,17996,17998,18000,18002],{"class":54,"line":327},[52,17997,5313],{"class":75},[52,17999,1216],{"class":79},[52,18001,5318],{"class":62},[52,18003,2737],{"class":79},[52,18005,18006],{"class":54,"line":333},[52,18007,123],{"emptyLinePlaceholder":122},[52,18009,18010,18012,18014],{"class":54,"line":360},[52,18011,1441],{"class":58},[52,18013,1444],{"class":308},[52,18015,80],{"class":79},[52,18017,18018],{"class":54,"line":365},[52,18019,452],{"class":79},[3195,18021,18023],{"id":18022},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,18025,18026,18027,18030,18031],{},"在C++中 struct和class唯一的",[2389,18028,18029],{},"区别","就在于 ",[2389,18032,18033],{},"默认的访问权限不同",[14,18035,18036],{},"区别：",[29,18038,18039,18042],{},[32,18040,18041],{},"struct 默认权限为公共",[32,18043,18044],{},"class   默认权限为私有",[42,18046,18048],{"className":2398,"code":18047,"language":2400,"meta":47,"style":47},"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",[49,18049,18050,18057,18061,18071,18075,18079,18086,18090,18100,18104,18108,18116,18120,18125,18139,18143,18148,18162,18166,18176,18180,18188],{"__ignoreMap":47},[52,18051,18052,18054],{"class":54,"line":55},[52,18053,17342],{"class":58},[52,18055,18056],{"class":75}," C1\n",[52,18058,18059],{"class":54,"line":66},[52,18060,110],{"class":79},[52,18062,18063,18065,18068],{"class":54,"line":83},[52,18064,147],{"class":58},[52,18066,18067],{"class":79},"  m_A;",[52,18069,18070],{"class":94}," \u002F\u002F默认是私有权限\n",[52,18072,18073],{"class":54,"line":91},[52,18074,170],{"class":79},[52,18076,18077],{"class":54,"line":98},[52,18078,123],{"emptyLinePlaceholder":122},[52,18080,18081,18083],{"class":54,"line":107},[52,18082,101],{"class":58},[52,18084,18085],{"class":75}," C2\n",[52,18087,18088],{"class":54,"line":113},[52,18089,110],{"class":79},[52,18091,18092,18094,18097],{"class":54,"line":119},[52,18093,147],{"class":58},[52,18095,18096],{"class":79}," m_A;",[52,18098,18099],{"class":94},"  \u002F\u002F默认是公共权限\n",[52,18101,18102],{"class":54,"line":126},[52,18103,170],{"class":79},[52,18105,18106],{"class":54,"line":132},[52,18107,123],{"emptyLinePlaceholder":122},[52,18109,18110,18112,18114],{"class":54,"line":138},[52,18111,242],{"class":58},[52,18113,245],{"class":75},[52,18115,13501],{"class":79},[52,18117,18118],{"class":54,"line":144},[52,18119,123],{"emptyLinePlaceholder":122},[52,18121,18122],{"class":54,"line":153},[52,18123,18124],{"class":79},"    C1 c1;\n",[52,18126,18127,18130,18132,18134,18136],{"class":54,"line":159},[52,18128,18129],{"class":79},"    c1.m_A ",[52,18131,292],{"class":58},[52,18133,5051],{"class":308},[52,18135,2010],{"class":79},[52,18137,18138],{"class":94}," \u002F\u002F错误，访问权限是私有\n",[52,18140,18141],{"class":54,"line":167},[52,18142,123],{"emptyLinePlaceholder":122},[52,18144,18145],{"class":54,"line":173},[52,18146,18147],{"class":79},"    C2 c2;\n",[52,18149,18150,18153,18155,18157,18159],{"class":54,"line":181},[52,18151,18152],{"class":79},"    c2.m_A ",[52,18154,292],{"class":58},[52,18156,5051],{"class":308},[52,18158,2010],{"class":79},[52,18160,18161],{"class":94}," \u002F\u002F正确，访问权限是公共\n",[52,18163,18164],{"class":54,"line":186},[52,18165,123],{"emptyLinePlaceholder":122},[52,18167,18168,18170,18172,18174],{"class":54,"line":191},[52,18169,5313],{"class":75},[52,18171,1216],{"class":79},[52,18173,5318],{"class":62},[52,18175,2737],{"class":79},[52,18177,18178],{"class":54,"line":196},[52,18179,123],{"emptyLinePlaceholder":122},[52,18181,18182,18184,18186],{"class":54,"line":201},[52,18183,1441],{"class":58},[52,18185,1444],{"class":308},[52,18187,80],{"class":79},[52,18189,18190],{"class":54,"line":206},[52,18191,452],{"class":79},[3195,18193,18195],{"id":18194},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,18197,18198],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,18200,18201],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,18203,18204],{},[2389,18205,17783],{},[42,18207,18209],{"className":2398,"code":18208,"language":2400,"meta":47,"style":47},"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",[49,18210,18211,18221,18225,18229,18234,18248,18257,18261,18271,18275,18282,18286,18290,18294,18299,18308,18315,18319,18324,18340,18363,18376,18383,18387,18396,18400,18404,18409,18425,18435,18439,18443,18447,18455,18459,18469,18473,18481,18485,18489,18497,18501,18505,18510,18523,18546,18550,18555,18568,18590,18594,18599,18613,18621,18625,18635,18639,18647],{"__ignoreMap":47},[52,18212,18213,18215,18218],{"class":54,"line":55},[52,18214,17342],{"class":58},[52,18216,18217],{"class":75}," Person",[52,18219,18220],{"class":79}," {\n",[52,18222,18223],{"class":54,"line":66},[52,18224,17364],{"class":58},[52,18226,18227],{"class":54,"line":83},[52,18228,123],{"emptyLinePlaceholder":122},[52,18230,18231],{"class":54,"line":91},[52,18232,18233],{"class":94},"    \u002F\u002F姓名设置可读可写\n",[52,18235,18236,18238,18240,18242,18244,18246],{"class":54,"line":98},[52,18237,17557],{"class":58},[52,18239,17560],{"class":75},[52,18241,1216],{"class":79},[52,18243,17565],{"class":75},[52,18245,17568],{"class":1223},[52,18247,15090],{"class":79},[52,18249,18250,18252,18254],{"class":54,"line":107},[52,18251,17902],{"class":79},[52,18253,292],{"class":58},[52,18255,18256],{"class":79}," name;\n",[52,18258,18259],{"class":54,"line":113},[52,18260,616],{"class":79},[52,18262,18263,18266,18269],{"class":54,"line":119},[52,18264,18265],{"class":75},"    string",[52,18267,18268],{"class":75}," getName",[52,18270,248],{"class":79},[52,18272,18273],{"class":54,"line":126},[52,18274,575],{"class":79},[52,18276,18277,18279],{"class":54,"line":132},[52,18278,17400],{"class":58},[52,18280,18281],{"class":79}," m_Name;\n",[52,18283,18284],{"class":54,"line":138},[52,18285,616],{"class":79},[52,18287,18288],{"class":54,"line":144},[52,18289,123],{"emptyLinePlaceholder":122},[52,18291,18292],{"class":54,"line":153},[52,18293,123],{"emptyLinePlaceholder":122},[52,18295,18296],{"class":54,"line":159},[52,18297,18298],{"class":94},"    \u002F\u002F获取年龄 \n",[52,18300,18301,18303,18306],{"class":54,"line":167},[52,18302,147],{"class":58},[52,18304,18305],{"class":75}," getAge",[52,18307,13501],{"class":79},[52,18309,18310,18312],{"class":54,"line":173},[52,18311,17400],{"class":58},[52,18313,18314],{"class":79}," m_Age;\n",[52,18316,18317],{"class":54,"line":181},[52,18318,616],{"class":79},[52,18320,18321],{"class":54,"line":186},[52,18322,18323],{"class":94},"    \u002F\u002F设置年龄\n",[52,18325,18326,18328,18331,18333,18335,18338],{"class":54,"line":191},[52,18327,17557],{"class":58},[52,18329,18330],{"class":75}," setAge",[52,18332,1216],{"class":79},[52,18334,242],{"class":58},[52,18336,18337],{"class":1223}," age",[52,18339,15090],{"class":79},[52,18341,18342,18344,18347,18349,18351,18353,18356,18358,18361],{"class":54,"line":196},[52,18343,5497],{"class":58},[52,18345,18346],{"class":79}," (age ",[52,18348,698],{"class":58},[52,18350,1444],{"class":308},[52,18352,6241],{"class":58},[52,18354,18355],{"class":79}," age ",[52,18357,2674],{"class":58},[52,18359,18360],{"class":308}," 150",[52,18362,15090],{"class":79},[52,18364,18365,18367,18369,18372,18374],{"class":54,"line":201},[52,18366,2163],{"class":79},[52,18368,339],{"class":58},[52,18370,18371],{"class":62}," \"你个老妖精!\"",[52,18373,1247],{"class":58},[52,18375,1264],{"class":79},[52,18377,18378,18381],{"class":54,"line":206},[52,18379,18380],{"class":58},"            return",[52,18382,80],{"class":79},[52,18384,18385],{"class":54,"line":211},[52,18386,2039],{"class":79},[52,18388,18389,18392,18394],{"class":54,"line":218},[52,18390,18391],{"class":79},"        m_Age ",[52,18393,292],{"class":58},[52,18395,150],{"class":79},[52,18397,18398],{"class":54,"line":223},[52,18399,616],{"class":79},[52,18401,18402],{"class":54,"line":230},[52,18403,123],{"emptyLinePlaceholder":122},[52,18405,18406],{"class":54,"line":239},[52,18407,18408],{"class":94},"    \u002F\u002F情人设置为只写\n",[52,18410,18411,18413,18416,18418,18420,18423],{"class":54,"line":251},[52,18412,17557],{"class":58},[52,18414,18415],{"class":75}," setLover",[52,18417,1216],{"class":79},[52,18419,17565],{"class":75},[52,18421,18422],{"class":1223}," lover",[52,18424,15090],{"class":79},[52,18426,18427,18430,18432],{"class":54,"line":256},[52,18428,18429],{"class":79},"        m_Lover ",[52,18431,292],{"class":58},[52,18433,18434],{"class":79}," lover;\n",[52,18436,18437],{"class":54,"line":262},[52,18438,616],{"class":79},[52,18440,18441],{"class":54,"line":268},[52,18442,123],{"emptyLinePlaceholder":122},[52,18444,18445],{"class":54,"line":280},[52,18446,17870],{"class":58},[52,18448,18449,18452],{"class":54,"line":286},[52,18450,18451],{"class":79},"    string m_Name;",[52,18453,18454],{"class":94}," \u002F\u002F可读可写  姓名\n",[52,18456,18457],{"class":54,"line":300},[52,18458,15858],{"class":79},[52,18460,18461,18463,18466],{"class":54,"line":314},[52,18462,147],{"class":58},[52,18464,18465],{"class":79}," m_Age;",[52,18467,18468],{"class":94}," \u002F\u002F只读  年龄\n",[52,18470,18471],{"class":54,"line":327},[52,18472,123],{"emptyLinePlaceholder":122},[52,18474,18475,18478],{"class":54,"line":333},[52,18476,18477],{"class":79},"    string m_Lover;",[52,18479,18480],{"class":94}," \u002F\u002F只写  情人\n",[52,18482,18483],{"class":54,"line":360},[52,18484,170],{"class":79},[52,18486,18487],{"class":54,"line":365},[52,18488,123],{"emptyLinePlaceholder":122},[52,18490,18491,18493,18495],{"class":54,"line":371},[52,18492,242],{"class":58},[52,18494,245],{"class":75},[52,18496,13501],{"class":79},[52,18498,18499],{"class":54,"line":400},[52,18500,123],{"emptyLinePlaceholder":122},[52,18502,18503],{"class":54,"line":405},[52,18504,17961],{"class":79},[52,18506,18507],{"class":54,"line":411},[52,18508,18509],{"class":94},"    \u002F\u002F姓名设置\n",[52,18511,18512,18515,18517,18519,18521],{"class":54,"line":424},[52,18513,18514],{"class":79},"    p.",[52,18516,17714],{"class":75},[52,18518,1216],{"class":79},[52,18520,295],{"class":62},[52,18522,2737],{"class":79},[52,18524,18525,18527,18529,18532,18534,18537,18540,18542,18544],{"class":54,"line":436},[52,18526,1234],{"class":79},[52,18528,339],{"class":58},[52,18530,18531],{"class":62}," \"姓名： \"",[52,18533,1247],{"class":58},[52,18535,18536],{"class":79}," p.",[52,18538,18539],{"class":75},"getName",[52,18541,15698],{"class":79},[52,18543,339],{"class":58},[52,18545,1264],{"class":79},[52,18547,18548],{"class":54,"line":449},[52,18549,123],{"emptyLinePlaceholder":122},[52,18551,18552],{"class":54,"line":2160},[52,18553,18554],{"class":94},"    \u002F\u002F年龄设置\n",[52,18556,18557,18559,18562,18564,18566],{"class":54,"line":2186},[52,18558,18514],{"class":79},[52,18560,18561],{"class":75},"setAge",[52,18563,1216],{"class":79},[52,18565,3852],{"class":308},[52,18567,2737],{"class":79},[52,18569,18570,18572,18574,18577,18579,18581,18584,18586,18588],{"class":54,"line":2209},[52,18571,1234],{"class":79},[52,18573,339],{"class":58},[52,18575,18576],{"class":62}," \"年龄： \"",[52,18578,1247],{"class":58},[52,18580,18536],{"class":79},[52,18582,18583],{"class":75},"getAge",[52,18585,15698],{"class":79},[52,18587,339],{"class":58},[52,18589,1264],{"class":79},[52,18591,18592],{"class":54,"line":2233},[52,18593,123],{"emptyLinePlaceholder":122},[52,18595,18596],{"class":54,"line":2238},[52,18597,18598],{"class":94},"    \u002F\u002F情人设置\n",[52,18600,18601,18603,18606,18608,18611],{"class":54,"line":2243},[52,18602,18514],{"class":79},[52,18604,18605],{"class":75},"setLover",[52,18607,1216],{"class":79},[52,18609,18610],{"class":62},"\"苍井\"",[52,18612,2737],{"class":79},[52,18614,18615,18618],{"class":54,"line":2248},[52,18616,18617],{"class":94},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[52,18619,18620],{"class":94},"  \u002F\u002F只写属性，不可以读取\n",[52,18622,18623],{"class":54,"line":2257},[52,18624,123],{"emptyLinePlaceholder":122},[52,18626,18627,18629,18631,18633],{"class":54,"line":2262},[52,18628,5313],{"class":75},[52,18630,1216],{"class":79},[52,18632,5318],{"class":62},[52,18634,2737],{"class":79},[52,18636,18637],{"class":54,"line":2268},[52,18638,123],{"emptyLinePlaceholder":122},[52,18640,18641,18643,18645],{"class":54,"line":2297},[52,18642,1441],{"class":58},[52,18644,1444],{"class":308},[52,18646,80],{"class":79},[52,18648,18649],{"class":54,"line":2303},[52,18650,452],{"class":79},[3195,18652,18654],{"id":18653},"_814封装案例","8.1.4封装案例",[1696,18656,18657],{},[32,18658,18659,18662],{},[2389,18660,18661],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[29,18664,18665,18668],{},[32,18666,18667],{},"求出立方体的面积和体积",[32,18669,18670],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[42,18672,18674],{"className":44,"code":18673,"language":46,"meta":47,"style":47},"#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",[49,18675,18676,18682,18692,18699,18703,18707,18712,18742,18746,18756,18766,18776,18780,18789,18793,18829,18833,18842,18846,18862,18866,18871,18880,18884,18891,18895,18904,18908,18915,18919,18928,18932,18939,18943,18948,18965,18969,19015,19019,19028,19032,19036,19040,19049,19053,19057,19062,19066,19072,19078,19084,19088,19092,19097,19119,19123,19177,19181,19189,19193,19198,19203,19216,19223,19239,19250,19256,19279,19285,19308,19322,19342,19348,19359,19382,19404,19409,19415,19429,19442,19447,19461,19466,19472,19477,19491,19496,19501,19515,19527,19532,19545,19550,19555,19560,19573,19578],{"__ignoreMap":47},[52,18677,18678,18680],{"class":54,"line":55},[52,18679,59],{"class":58},[52,18681,63],{"class":62},[52,18683,18684,18686,18688,18690],{"class":54,"line":66},[52,18685,69],{"class":58},[52,18687,72],{"class":58},[52,18689,76],{"class":75},[52,18691,80],{"class":79},[52,18693,18694,18696],{"class":54,"line":83},[52,18695,17342],{"class":58},[52,18697,18698],{"class":75}," Cube\n",[52,18700,18701],{"class":54,"line":91},[52,18702,110],{"class":79},[52,18704,18705],{"class":54,"line":98},[52,18706,17364],{"class":58},[52,18708,18709],{"class":54,"line":107},[52,18710,18711],{"class":94},"    \u002F\u002F输入长宽高\n",[52,18713,18714,18716,18719,18721,18723,18726,18728,18730,18733,18735,18737,18740],{"class":54,"line":113},[52,18715,17557],{"class":58},[52,18717,18718],{"class":75}," setLwh",[52,18720,1216],{"class":79},[52,18722,242],{"class":58},[52,18724,18725],{"class":1223}," l",[52,18727,389],{"class":79},[52,18729,242],{"class":58},[52,18731,18732],{"class":1223}," w",[52,18734,389],{"class":79},[52,18736,242],{"class":58},[52,18738,18739],{"class":1223}," h",[52,18741,708],{"class":79},[52,18743,18744],{"class":54,"line":119},[52,18745,575],{"class":79},[52,18747,18748,18751,18753],{"class":54,"line":126},[52,18749,18750],{"class":79},"        m_L",[52,18752,292],{"class":58},[52,18754,18755],{"class":79},"l;\n",[52,18757,18758,18761,18763],{"class":54,"line":132},[52,18759,18760],{"class":79},"        m_W",[52,18762,292],{"class":58},[52,18764,18765],{"class":79},"w;\n",[52,18767,18768,18771,18773],{"class":54,"line":138},[52,18769,18770],{"class":79},"        m_H",[52,18772,292],{"class":58},[52,18774,18775],{"class":79},"h;\n",[52,18777,18778],{"class":54,"line":144},[52,18779,616],{"class":79},[52,18781,18782,18784,18787],{"class":54,"line":153},[52,18783,147],{"class":58},[52,18785,18786],{"class":75}," mianji",[52,18788,248],{"class":79},[52,18790,18791],{"class":54,"line":159},[52,18792,575],{"class":79},[52,18794,18795,18797,18799,18801,18804,18806,18809,18811,18814,18816,18819,18821,18824,18826],{"class":54,"line":167},[52,18796,17400],{"class":58},[52,18798,17403],{"class":308},[52,18800,3053],{"class":58},[52,18802,18803],{"class":79},"(m_L",[52,18805,3053],{"class":58},[52,18807,18808],{"class":79},"m_W ",[52,18810,2004],{"class":58},[52,18812,18813],{"class":79}," m_L",[52,18815,3053],{"class":58},[52,18817,18818],{"class":79},"m_H ",[52,18820,2004],{"class":58},[52,18822,18823],{"class":79}," m_W",[52,18825,3053],{"class":58},[52,18827,18828],{"class":79},"m_H);\n",[52,18830,18831],{"class":54,"line":173},[52,18832,616],{"class":79},[52,18834,18835,18837,18840],{"class":54,"line":181},[52,18836,147],{"class":58},[52,18838,18839],{"class":75}," tiji",[52,18841,248],{"class":79},[52,18843,18844],{"class":54,"line":186},[52,18845,575],{"class":79},[52,18847,18848,18850,18852,18854,18857,18859],{"class":54,"line":191},[52,18849,17400],{"class":58},[52,18851,18813],{"class":79},[52,18853,3053],{"class":58},[52,18855,18856],{"class":79},"m_W",[52,18858,3053],{"class":58},[52,18860,18861],{"class":79},"m_H;\n",[52,18863,18864],{"class":54,"line":196},[52,18865,616],{"class":79},[52,18867,18868],{"class":54,"line":201},[52,18869,18870],{"class":94},"    \u002F\u002F获取长宽高\n",[52,18872,18873,18875,18878],{"class":54,"line":206},[52,18874,147],{"class":58},[52,18876,18877],{"class":75}," getLength",[52,18879,248],{"class":79},[52,18881,18882],{"class":54,"line":211},[52,18883,575],{"class":79},[52,18885,18886,18888],{"class":54,"line":218},[52,18887,17400],{"class":58},[52,18889,18890],{"class":79}," m_L;\n",[52,18892,18893],{"class":54,"line":223},[52,18894,616],{"class":79},[52,18896,18897,18899,18902],{"class":54,"line":230},[52,18898,147],{"class":58},[52,18900,18901],{"class":75}," getWidth",[52,18903,248],{"class":79},[52,18905,18906],{"class":54,"line":239},[52,18907,575],{"class":79},[52,18909,18910,18912],{"class":54,"line":251},[52,18911,17400],{"class":58},[52,18913,18914],{"class":79}," m_W;\n",[52,18916,18917],{"class":54,"line":256},[52,18918,616],{"class":79},[52,18920,18921,18923,18926],{"class":54,"line":262},[52,18922,147],{"class":58},[52,18924,18925],{"class":75}," getHeight",[52,18927,248],{"class":79},[52,18929,18930],{"class":54,"line":268},[52,18931,575],{"class":79},[52,18933,18934,18936],{"class":54,"line":280},[52,18935,17400],{"class":58},[52,18937,18938],{"class":79}," m_H;\n",[52,18940,18941],{"class":54,"line":286},[52,18942,616],{"class":79},[52,18944,18945],{"class":54,"line":300},[52,18946,18947],{"class":94},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[52,18949,18950,18953,18956,18958,18961,18963],{"class":54,"line":314},[52,18951,18952],{"class":58},"    bool",[52,18954,18955],{"class":75}," isEqual",[52,18957,1216],{"class":79},[52,18959,18960],{"class":75},"Cube",[52,18962,5838],{"class":1223},[52,18964,708],{"class":79},[52,18966,18967],{"class":54,"line":327},[52,18968,575],{"class":79},[52,18970,18971,18973,18976,18979,18981,18983,18986,18988,18991,18994,18996,18998,19001,19003,19005,19008,19010,19012],{"class":54,"line":333},[52,18972,5497],{"class":58},[52,18974,18975],{"class":79}," (c.",[52,18977,18978],{"class":75},"getLength",[52,18980,15698],{"class":79},[52,18982,5938],{"class":58},[52,18984,18985],{"class":79}," m_L ",[52,18987,4747],{"class":58},[52,18989,18990],{"class":79}," c.",[52,18992,18993],{"class":75},"getWidth",[52,18995,15698],{"class":79},[52,18997,5938],{"class":58},[52,18999,19000],{"class":79}," m_W ",[52,19002,4747],{"class":58},[52,19004,18990],{"class":79},[52,19006,19007],{"class":75},"getHeight",[52,19009,15698],{"class":79},[52,19011,5938],{"class":58},[52,19013,19014],{"class":79}," m_H)\n",[52,19016,19017],{"class":54,"line":360},[52,19018,1958],{"class":79},[52,19020,19021,19023,19026],{"class":54,"line":365},[52,19022,18380],{"class":58},[52,19024,19025],{"class":308}," true",[52,19027,80],{"class":79},[52,19029,19030],{"class":54,"line":371},[52,19031,2039],{"class":79},[52,19033,19034],{"class":54,"line":400},[52,19035,5568],{"class":58},[52,19037,19038],{"class":54,"line":405},[52,19039,1958],{"class":79},[52,19041,19042,19044,19047],{"class":54,"line":411},[52,19043,18380],{"class":58},[52,19045,19046],{"class":308}," false",[52,19048,80],{"class":79},[52,19050,19051],{"class":54,"line":424},[52,19052,2039],{"class":79},[52,19054,19055],{"class":54,"line":436},[52,19056,616],{"class":79},[52,19058,19059],{"class":54,"line":449},[52,19060,19061],{"class":94},"    \u002F\u002F私有属性\n",[52,19063,19064],{"class":54,"line":2160},[52,19065,17870],{"class":58},[52,19067,19068,19070],{"class":54,"line":2186},[52,19069,147],{"class":58},[52,19071,18890],{"class":79},[52,19073,19074,19076],{"class":54,"line":2209},[52,19075,147],{"class":58},[52,19077,18914],{"class":79},[52,19079,19080,19082],{"class":54,"line":2233},[52,19081,147],{"class":58},[52,19083,18938],{"class":79},[52,19085,19086],{"class":54,"line":2238},[52,19087,123],{"emptyLinePlaceholder":122},[52,19089,19090],{"class":54,"line":2243},[52,19091,170],{"class":79},[52,19093,19094],{"class":54,"line":2248},[52,19095,19096],{"class":94},"\u002F\u002F全局函数判断两个立方体是否相等\n",[52,19098,19099,19101,19103,19105,19107,19110,19112,19114,19117],{"class":54,"line":2257},[52,19100,4402],{"class":58},[52,19102,18955],{"class":75},[52,19104,1216],{"class":79},[52,19106,18960],{"class":75},[52,19108,19109],{"class":1223}," c1",[52,19111,389],{"class":79},[52,19113,18960],{"class":75},[52,19115,19116],{"class":1223}," c2",[52,19118,708],{"class":79},[52,19120,19121],{"class":54,"line":2262},[52,19122,110],{"class":79},[52,19124,19125,19127,19130,19132,19134,19136,19139,19141,19144,19146,19148,19150,19152,19154,19156,19158,19160,19162,19164,19166,19168,19170,19172,19174],{"class":54,"line":2268},[52,19126,1441],{"class":58},[52,19128,19129],{"class":79}," (c1.",[52,19131,18978],{"class":75},[52,19133,15698],{"class":79},[52,19135,5938],{"class":58},[52,19137,19138],{"class":79}," c2.",[52,19140,18978],{"class":75},[52,19142,19143],{"class":79},"()) ",[52,19145,4747],{"class":58},[52,19147,19129],{"class":79},[52,19149,18993],{"class":75},[52,19151,15698],{"class":79},[52,19153,5938],{"class":58},[52,19155,19138],{"class":79},[52,19157,18993],{"class":75},[52,19159,19143],{"class":79},[52,19161,4747],{"class":58},[52,19163,19129],{"class":79},[52,19165,19007],{"class":75},[52,19167,15698],{"class":79},[52,19169,5938],{"class":58},[52,19171,19138],{"class":79},[52,19173,19007],{"class":75},[52,19175,19176],{"class":79},"());\n",[52,19178,19179],{"class":54,"line":2297},[52,19180,452],{"class":79},[52,19182,19183,19185,19187],{"class":54,"line":2303},[52,19184,242],{"class":58},[52,19186,245],{"class":75},[52,19188,248],{"class":79},[52,19190,19191],{"class":54,"line":2318},[52,19192,110],{"class":79},[52,19194,19195],{"class":54,"line":2324},[52,19196,19197],{"class":79},"    Cube c1;\n",[52,19199,19200],{"class":54,"line":2353},[52,19201,19202],{"class":94},"    \u002F\u002F输入立方体的长宽高\n",[52,19204,19205,19207,19209,19212,19214],{"class":54,"line":2362},[52,19206,336],{"class":79},[52,19208,339],{"class":58},[52,19210,19211],{"class":62},"\"请输入第一个立方体的长、宽、高：\"",[52,19213,339],{"class":58},[52,19215,357],{"class":79},[52,19217,19218,19220],{"class":54,"line":2368},[52,19219,147],{"class":58},[52,19221,19222],{"class":79}," l,w,h,l1,w1,h1;\n",[52,19224,19225,19227,19229,19231,19233,19235,19237],{"class":54,"line":2376},[52,19226,5026],{"class":79},[52,19228,4477],{"class":58},[52,19230,3718],{"class":79},[52,19232,4477],{"class":58},[52,19234,3985],{"class":79},[52,19236,4477],{"class":58},[52,19238,18775],{"class":79},[52,19240,19241,19244,19247],{"class":54,"line":2381},[52,19242,19243],{"class":79},"    c1.",[52,19245,19246],{"class":75},"setLwh",[52,19248,19249],{"class":79},"(l,w,h);\n",[52,19251,19253],{"class":54,"line":19252},66,[52,19254,19255],{"class":94},"    \u002F\u002F面积\n",[52,19257,19259,19261,19263,19266,19268,19270,19273,19275,19277],{"class":54,"line":19258},67,[52,19260,336],{"class":79},[52,19262,339],{"class":58},[52,19264,19265],{"class":62},"\"立方体的表面积为：\"",[52,19267,339],{"class":58},[52,19269,17478],{"class":79},[52,19271,19272],{"class":75},"mianji",[52,19274,1995],{"class":79},[52,19276,339],{"class":58},[52,19278,357],{"class":79},[52,19280,19282],{"class":54,"line":19281},68,[52,19283,19284],{"class":94},"    \u002F\u002F体积\n",[52,19286,19288,19290,19292,19295,19297,19299,19302,19304,19306],{"class":54,"line":19287},69,[52,19289,336],{"class":79},[52,19291,339],{"class":58},[52,19293,19294],{"class":62},"\"立方体的体积为：\"",[52,19296,339],{"class":58},[52,19298,17478],{"class":79},[52,19300,19301],{"class":75},"tiji",[52,19303,1995],{"class":79},[52,19305,339],{"class":58},[52,19307,357],{"class":79},[52,19309,19311,19313,19315,19318,19320],{"class":54,"line":19310},70,[52,19312,336],{"class":79},[52,19314,339],{"class":58},[52,19316,19317],{"class":62},"\"请输入第二个立方体的长、宽、高：\"",[52,19319,339],{"class":58},[52,19321,357],{"class":79},[52,19323,19325,19327,19329,19332,19334,19337,19339],{"class":54,"line":19324},71,[52,19326,5026],{"class":79},[52,19328,4477],{"class":58},[52,19330,19331],{"class":79},"l1",[52,19333,4477],{"class":58},[52,19335,19336],{"class":79},"w1",[52,19338,4477],{"class":58},[52,19340,19341],{"class":79},"h1;\n",[52,19343,19345],{"class":54,"line":19344},72,[52,19346,19347],{"class":79},"    Cube c2;\n",[52,19349,19351,19354,19356],{"class":54,"line":19350},73,[52,19352,19353],{"class":79},"    c2.",[52,19355,19246],{"class":75},[52,19357,19358],{"class":79},"(l1,w1,h1);\n",[52,19360,19362,19364,19366,19369,19371,19374,19376,19378,19380],{"class":54,"line":19361},74,[52,19363,336],{"class":79},[52,19365,339],{"class":58},[52,19367,19368],{"class":62},"\"第二个立方体的表面积为：\"",[52,19370,339],{"class":58},[52,19372,19373],{"class":79},"c2.",[52,19375,19272],{"class":75},[52,19377,1995],{"class":79},[52,19379,339],{"class":58},[52,19381,357],{"class":79},[52,19383,19385,19387,19389,19392,19394,19396,19398,19400,19402],{"class":54,"line":19384},75,[52,19386,336],{"class":79},[52,19388,339],{"class":58},[52,19390,19391],{"class":62},"\"第二个立方体的体积为：\"",[52,19393,339],{"class":58},[52,19395,19373],{"class":79},[52,19397,19301],{"class":75},[52,19399,1995],{"class":79},[52,19401,339],{"class":58},[52,19403,357],{"class":79},[52,19405,19407],{"class":54,"line":19406},76,[52,19408,123],{"emptyLinePlaceholder":122},[52,19410,19412],{"class":54,"line":19411},77,[52,19413,19414],{"class":94},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[52,19416,19418,19420,19422,19425,19427],{"class":54,"line":19417},78,[52,19419,336],{"class":79},[52,19421,339],{"class":58},[52,19423,19424],{"class":62},"\"内部函数判断结果：\"",[52,19426,339],{"class":58},[52,19428,357],{"class":79},[52,19430,19432,19434,19436,19439],{"class":54,"line":19431},79,[52,19433,6088],{"class":58},[52,19435,19129],{"class":79},[52,19437,19438],{"class":75},"isEqual",[52,19440,19441],{"class":79},"(c2))\n",[52,19443,19445],{"class":54,"line":19444},80,[52,19446,575],{"class":79},[52,19448,19450,19452,19454,19457,19459],{"class":54,"line":19449},81,[52,19451,717],{"class":79},[52,19453,339],{"class":58},[52,19455,19456],{"class":62},"\"两个立方体相等\"",[52,19458,339],{"class":58},[52,19460,357],{"class":79},[52,19462,19464],{"class":54,"line":19463},82,[52,19465,616],{"class":79},[52,19467,19469],{"class":54,"line":19468},83,[52,19470,19471],{"class":58},"    else\n",[52,19473,19475],{"class":54,"line":19474},84,[52,19476,575],{"class":79},[52,19478,19480,19482,19484,19487,19489],{"class":54,"line":19479},85,[52,19481,717],{"class":79},[52,19483,339],{"class":58},[52,19485,19486],{"class":62},"\"两个立方体不相等\"",[52,19488,339],{"class":58},[52,19490,357],{"class":79},[52,19492,19494],{"class":54,"line":19493},86,[52,19495,616],{"class":79},[52,19497,19499],{"class":54,"line":19498},87,[52,19500,123],{"emptyLinePlaceholder":122},[52,19502,19504,19506,19508,19511,19513],{"class":54,"line":19503},88,[52,19505,336],{"class":79},[52,19507,339],{"class":58},[52,19509,19510],{"class":62},"\"全局函数判断结果：\"",[52,19512,339],{"class":58},[52,19514,357],{"class":79},[52,19516,19518,19520,19522,19524],{"class":54,"line":19517},89,[52,19519,6088],{"class":58},[52,19521,682],{"class":79},[52,19523,19438],{"class":75},[52,19525,19526],{"class":79},"(c1, c2))\n",[52,19528,19530],{"class":54,"line":19529},90,[52,19531,575],{"class":79},[52,19533,19535,19537,19539,19541,19543],{"class":54,"line":19534},91,[52,19536,717],{"class":79},[52,19538,339],{"class":58},[52,19540,19456],{"class":62},[52,19542,339],{"class":58},[52,19544,357],{"class":79},[52,19546,19548],{"class":54,"line":19547},92,[52,19549,616],{"class":79},[52,19551,19553],{"class":54,"line":19552},93,[52,19554,19471],{"class":58},[52,19556,19558],{"class":54,"line":19557},94,[52,19559,575],{"class":79},[52,19561,19563,19565,19567,19569,19571],{"class":54,"line":19562},95,[52,19564,717],{"class":79},[52,19566,339],{"class":58},[52,19568,19486],{"class":62},[52,19570,339],{"class":58},[52,19572,357],{"class":79},[52,19574,19576],{"class":54,"line":19575},96,[52,19577,616],{"class":79},[52,19579,19581],{"class":54,"line":19580},97,[52,19582,452],{"class":79},[1696,19584,19585],{"start":66},[32,19586,19587],{},[2389,19588,19589],{},"练习案例2：点和圆的关系",[29,19591,19592],{},[32,19593,19594],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[42,19596,19598],{"className":44,"code":19597,"language":46,"meta":47,"style":47},"#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",[49,19599,19600,19606,19616,19623,19630,19634,19638,19643,19677,19682,19698,19712,19716,19720,19727,19734,19738,19744,19748,19752,19756,19778,19801,19806,19820,19835,19839,19843,19849,19854,19859,19863,19889,19893,19923,19951,19979,19996,20000,20013,20017,20021,20025,20038,20042,20046,20054,20058,20062,20066,20071,20075,20086,20093,20102,20112,20123,20130,20143,20154,20164,20175,20182,20196,20201,20211,20219],{"__ignoreMap":47},[52,19601,19602,19604],{"class":54,"line":55},[52,19603,59],{"class":58},[52,19605,63],{"class":62},[52,19607,19608,19610,19612,19614],{"class":54,"line":66},[52,19609,69],{"class":58},[52,19611,72],{"class":58},[52,19613,76],{"class":75},[52,19615,80],{"class":79},[52,19617,19618,19620],{"class":54,"line":83},[52,19619,59],{"class":58},[52,19621,19622],{"class":62},"\u003Ccmath>\n",[52,19624,19625,19627],{"class":54,"line":91},[52,19626,17342],{"class":58},[52,19628,19629],{"class":75}," Point\n",[52,19631,19632],{"class":54,"line":98},[52,19633,110],{"class":79},[52,19635,19636],{"class":54,"line":107},[52,19637,17364],{"class":58},[52,19639,19640],{"class":54,"line":113},[52,19641,19642],{"class":94},"    \u002F\u002F赋值\n",[52,19644,19645,19647,19650,19652,19654,19657,19659,19661,19664,19667,19669,19672,19674],{"class":54,"line":119},[52,19646,17557],{"class":58},[52,19648,19649],{"class":75}," setPoint",[52,19651,1216],{"class":79},[52,19653,16685],{"class":58},[52,19655,19656],{"class":1223}," x",[52,19658,15083],{"class":79},[52,19660,16685],{"class":58},[52,19662,19663],{"class":1223}," y",[52,19665,19666],{"class":79},") { m_x ",[52,19668,292],{"class":58},[52,19670,19671],{"class":79}," x; m_y ",[52,19673,292],{"class":58},[52,19675,19676],{"class":79}," y; }\n",[52,19678,19679],{"class":54,"line":126},[52,19680,19681],{"class":94},"    \u002F\u002F获取坐标\n",[52,19683,19684,19686,19689,19692,19695],{"class":54,"line":132},[52,19685,17386],{"class":58},[52,19687,19688],{"class":75}," getX",[52,19690,19691],{"class":79},"() { ",[52,19693,19694],{"class":58},"return",[52,19696,19697],{"class":79}," m_x; }\n",[52,19699,19700,19702,19705,19707,19709],{"class":54,"line":138},[52,19701,17386],{"class":58},[52,19703,19704],{"class":75}," getY",[52,19706,19691],{"class":79},[52,19708,19694],{"class":58},[52,19710,19711],{"class":79}," m_y; }\n",[52,19713,19714],{"class":54,"line":144},[52,19715,123],{"emptyLinePlaceholder":122},[52,19717,19718],{"class":54,"line":153},[52,19719,17870],{"class":58},[52,19721,19722,19724],{"class":54,"line":159},[52,19723,17386],{"class":58},[52,19725,19726],{"class":79}," m_x;\n",[52,19728,19729,19731],{"class":54,"line":167},[52,19730,17386],{"class":58},[52,19732,19733],{"class":79}," m_y;\n",[52,19735,19736],{"class":54,"line":173},[52,19737,170],{"class":79},[52,19739,19740,19742],{"class":54,"line":181},[52,19741,17342],{"class":58},[52,19743,17345],{"class":75},[52,19745,19746],{"class":54,"line":186},[52,19747,110],{"class":79},[52,19749,19750],{"class":54,"line":191},[52,19751,17364],{"class":58},[52,19753,19754],{"class":54,"line":196},[52,19755,19642],{"class":94},[52,19757,19758,19760,19763,19765,19767,19770,19773,19775],{"class":54,"line":201},[52,19759,17557],{"class":58},[52,19761,19762],{"class":75}," setRadius",[52,19764,1216],{"class":79},[52,19766,16685],{"class":58},[52,19768,19769],{"class":1223}," r",[52,19771,19772],{"class":79},") { m_r ",[52,19774,292],{"class":58},[52,19776,19777],{"class":79}," r; }\n",[52,19779,19780,19782,19785,19787,19790,19793,19796,19798],{"class":54,"line":206},[52,19781,17557],{"class":58},[52,19783,19784],{"class":75}," setCenter",[52,19786,1216],{"class":79},[52,19788,19789],{"class":75},"Point",[52,19791,19792],{"class":1223}," center",[52,19794,19795],{"class":79},") { m_center ",[52,19797,292],{"class":58},[52,19799,19800],{"class":79}," center; }\n",[52,19802,19803],{"class":54,"line":211},[52,19804,19805],{"class":94},"    \u002F\u002F获取属性\n",[52,19807,19808,19810,19813,19815,19817],{"class":54,"line":218},[52,19809,17386],{"class":58},[52,19811,19812],{"class":75}," getRadius",[52,19814,19691],{"class":79},[52,19816,19694],{"class":58},[52,19818,19819],{"class":79}," m_r; }\n",[52,19821,19822,19825,19828,19830,19832],{"class":54,"line":223},[52,19823,19824],{"class":75},"    Point",[52,19826,19827],{"class":75}," getCenter",[52,19829,19691],{"class":79},[52,19831,19694],{"class":58},[52,19833,19834],{"class":79}," m_center; }\n",[52,19836,19837],{"class":54,"line":230},[52,19838,123],{"emptyLinePlaceholder":122},[52,19840,19841],{"class":54,"line":239},[52,19842,17870],{"class":58},[52,19844,19845,19847],{"class":54,"line":251},[52,19846,17386],{"class":58},[52,19848,17376],{"class":79},[52,19850,19851],{"class":54,"line":256},[52,19852,19853],{"class":94},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[52,19855,19856],{"class":54,"line":262},[52,19857,19858],{"class":79},"    Point m_center;\n",[52,19860,19861],{"class":54,"line":268},[52,19862,170],{"class":79},[52,19864,19865,19867,19870,19872,19875,19877,19879,19881,19883,19885,19887],{"class":54,"line":280},[52,19866,1210],{"class":58},[52,19868,19869],{"class":75}," isInCircle",[52,19871,1216],{"class":79},[52,19873,19874],{"class":75},"Circle",[52,19876,3061],{"class":58},[52,19878,3499],{"class":1223},[52,19880,389],{"class":79},[52,19882,19789],{"class":75},[52,19884,3061],{"class":58},[52,19886,14],{"class":1223},[52,19888,708],{"class":79},[52,19890,19891],{"class":54,"line":286},[52,19892,110],{"class":79},[52,19894,19895,19897,19900,19902,19904,19907,19910,19913,19915,19917,19919,19921],{"class":54,"line":300},[52,19896,17386],{"class":58},[52,19898,19899],{"class":79}," dx ",[52,19901,292],{"class":58},[52,19903,18990],{"class":79},[52,19905,19906],{"class":75},"getCenter",[52,19908,19909],{"class":79},"().",[52,19911,19912],{"class":75},"getX",[52,19914,15698],{"class":79},[52,19916,2642],{"class":58},[52,19918,18536],{"class":79},[52,19920,19912],{"class":75},[52,19922,8601],{"class":79},[52,19924,19925,19927,19930,19932,19934,19936,19938,19941,19943,19945,19947,19949],{"class":54,"line":314},[52,19926,17386],{"class":58},[52,19928,19929],{"class":79}," dy ",[52,19931,292],{"class":58},[52,19933,18990],{"class":79},[52,19935,19906],{"class":75},[52,19937,19909],{"class":79},[52,19939,19940],{"class":75},"getY",[52,19942,15698],{"class":79},[52,19944,2642],{"class":58},[52,19946,18536],{"class":79},[52,19948,19940],{"class":75},[52,19950,8601],{"class":79},[52,19952,19953,19955,19958,19960,19963,19966,19968,19970,19972,19974,19976],{"class":54,"line":327},[52,19954,17386],{"class":58},[52,19956,19957],{"class":79}," distance ",[52,19959,292],{"class":58},[52,19961,19962],{"class":75}," sqrt",[52,19964,19965],{"class":79},"(dx ",[52,19967,3053],{"class":58},[52,19969,19899],{"class":79},[52,19971,2004],{"class":58},[52,19973,19929],{"class":79},[52,19975,3053],{"class":58},[52,19977,19978],{"class":79}," dy);\n",[52,19980,19981,19983,19986,19988,19990,19993],{"class":54,"line":333},[52,19982,6088],{"class":58},[52,19984,19985],{"class":79}," (distance ",[52,19987,698],{"class":58},[52,19989,18990],{"class":79},[52,19991,19992],{"class":75},"getRadius",[52,19994,19995],{"class":79},"())\n",[52,19997,19998],{"class":54,"line":360},[52,19999,575],{"class":79},[52,20001,20002,20004,20006,20009,20011],{"class":54,"line":365},[52,20003,2113],{"class":79},[52,20005,339],{"class":58},[52,20007,20008],{"class":62}," \"点在圆内\"",[52,20010,1247],{"class":58},[52,20012,1264],{"class":79},[52,20014,20015],{"class":54,"line":371},[52,20016,616],{"class":79},[52,20018,20019],{"class":54,"line":400},[52,20020,19471],{"class":58},[52,20022,20023],{"class":54,"line":405},[52,20024,575],{"class":79},[52,20026,20027,20029,20031,20034,20036],{"class":54,"line":411},[52,20028,2113],{"class":79},[52,20030,339],{"class":58},[52,20032,20033],{"class":62}," \"点在圆外\"",[52,20035,1247],{"class":58},[52,20037,1264],{"class":79},[52,20039,20040],{"class":54,"line":424},[52,20041,616],{"class":79},[52,20043,20044],{"class":54,"line":436},[52,20045,452],{"class":79},[52,20047,20048,20050,20052],{"class":54,"line":449},[52,20049,242],{"class":58},[52,20051,245],{"class":75},[52,20053,248],{"class":79},[52,20055,20056],{"class":54,"line":2160},[52,20057,110],{"class":79},[52,20059,20060],{"class":54,"line":2186},[52,20061,17701],{"class":94},[52,20063,20064],{"class":54,"line":2209},[52,20065,17448],{"class":79},[52,20067,20068],{"class":54,"line":2233},[52,20069,20070],{"class":79},"    Point p1;\n",[52,20072,20073],{"class":54,"line":2238},[52,20074,19642],{"class":94},[52,20076,20077,20079,20081,20084],{"class":54,"line":2243},[52,20078,336],{"class":79},[52,20080,339],{"class":58},[52,20082,20083],{"class":62},"\"请输入圆的半径：\"",[52,20085,80],{"class":79},[52,20087,20088,20090],{"class":54,"line":2248},[52,20089,17386],{"class":58},[52,20091,20092],{"class":79}," r;\n",[52,20094,20095,20097,20099],{"class":54,"line":2257},[52,20096,5026],{"class":79},[52,20098,4477],{"class":58},[52,20100,20101],{"class":79},"r;\n",[52,20103,20104,20106,20109],{"class":54,"line":2262},[52,20105,19243],{"class":79},[52,20107,20108],{"class":75},"setRadius",[52,20110,20111],{"class":79},"(r);\n",[52,20113,20114,20116,20118,20121],{"class":54,"line":2268},[52,20115,336],{"class":79},[52,20117,339],{"class":58},[52,20119,20120],{"class":62},"\"请输入圆心坐标：\"",[52,20122,80],{"class":79},[52,20124,20125,20127],{"class":54,"line":2297},[52,20126,17386],{"class":58},[52,20128,20129],{"class":79}," x, y;\n",[52,20131,20132,20134,20136,20138,20140],{"class":54,"line":2303},[52,20133,5026],{"class":79},[52,20135,4477],{"class":58},[52,20137,4010],{"class":79},[52,20139,4477],{"class":58},[52,20141,20142],{"class":79},"y;\n",[52,20144,20145,20148,20151],{"class":54,"line":2318},[52,20146,20147],{"class":79},"    p1.",[52,20149,20150],{"class":75},"setPoint",[52,20152,20153],{"class":79},"(x, y);\n",[52,20155,20156,20158,20161],{"class":54,"line":2324},[52,20157,19243],{"class":79},[52,20159,20160],{"class":75},"setCenter",[52,20162,20163],{"class":79},"(p1);\n",[52,20165,20166,20168,20170,20173],{"class":54,"line":2353},[52,20167,336],{"class":79},[52,20169,339],{"class":58},[52,20171,20172],{"class":62},"\"请输入测试点坐标：\"",[52,20174,80],{"class":79},[52,20176,20177,20179],{"class":54,"line":2362},[52,20178,17386],{"class":58},[52,20180,20181],{"class":79}," x1, y1;\n",[52,20183,20184,20186,20188,20191,20193],{"class":54,"line":2368},[52,20185,5026],{"class":79},[52,20187,4477],{"class":58},[52,20189,20190],{"class":79},"x1",[52,20192,4477],{"class":58},[52,20194,20195],{"class":79},"y1;\n",[52,20197,20198],{"class":54,"line":2376},[52,20199,20200],{"class":79},"    Point p2;\n",[52,20202,20203,20206,20208],{"class":54,"line":2381},[52,20204,20205],{"class":79},"    p2.",[52,20207,20150],{"class":75},[52,20209,20210],{"class":79},"(x1, y1);\n",[52,20212,20213,20216],{"class":54,"line":19252},[52,20214,20215],{"class":75},"    isInCircle",[52,20217,20218],{"class":79},"(c1, p2);\n",[52,20220,20221],{"class":54,"line":19258},[52,20222,452],{"class":79},[14,20224,20225],{},"在类中可以让另一个类作为本来的成员",[14,20227,20228],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,20230,20231],{},"创建point.h",[42,20233,20235],{"className":44,"code":20234,"language":46,"meta":47,"style":47},"#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",[49,20236,20237,20248,20254,20264,20270,20274,20279,20283,20287,20307,20311,20319,20327,20331,20335,20341,20347],{"__ignoreMap":47},[52,20238,20239,20242,20245],{"class":54,"line":55},[52,20240,20241],{"class":58},"#pragma",[52,20243,20244],{"class":75}," once",[52,20246,20247],{"class":94}," \u002F\u002F防止头文件重复包含\n",[52,20249,20250,20252],{"class":54,"line":66},[52,20251,59],{"class":58},[52,20253,63],{"class":62},[52,20255,20256,20258,20260,20262],{"class":54,"line":83},[52,20257,69],{"class":58},[52,20259,72],{"class":58},[52,20261,76],{"class":75},[52,20263,80],{"class":79},[52,20265,20266,20268],{"class":54,"line":91},[52,20267,17342],{"class":58},[52,20269,19629],{"class":75},[52,20271,20272],{"class":54,"line":98},[52,20273,110],{"class":79},[52,20275,20276],{"class":54,"line":107},[52,20277,20278],{"class":94},"\u002F\u002F做好声明与变量定义就可以\n",[52,20280,20281],{"class":54,"line":113},[52,20282,17364],{"class":58},[52,20284,20285],{"class":54,"line":119},[52,20286,19642],{"class":94},[52,20288,20289,20291,20293,20295,20297,20299,20301,20303,20305],{"class":54,"line":126},[52,20290,17557],{"class":58},[52,20292,19649],{"class":75},[52,20294,1216],{"class":79},[52,20296,16685],{"class":58},[52,20298,19656],{"class":1223},[52,20300,15083],{"class":79},[52,20302,16685],{"class":58},[52,20304,19663],{"class":1223},[52,20306,2737],{"class":79},[52,20308,20309],{"class":54,"line":132},[52,20310,19681],{"class":94},[52,20312,20313,20315,20317],{"class":54,"line":138},[52,20314,17386],{"class":58},[52,20316,19688],{"class":75},[52,20318,8601],{"class":79},[52,20320,20321,20323,20325],{"class":54,"line":144},[52,20322,17386],{"class":58},[52,20324,19704],{"class":75},[52,20326,8601],{"class":79},[52,20328,20329],{"class":54,"line":153},[52,20330,123],{"emptyLinePlaceholder":122},[52,20332,20333],{"class":54,"line":159},[52,20334,17870],{"class":58},[52,20336,20337,20339],{"class":54,"line":167},[52,20338,17386],{"class":58},[52,20340,19726],{"class":79},[52,20342,20343,20345],{"class":54,"line":173},[52,20344,17386],{"class":58},[52,20346,19733],{"class":79},[52,20348,20349],{"class":54,"line":181},[52,20350,170],{"class":79},[14,20352,20353],{},"创建point.cpp",[42,20355,20357],{"className":44,"code":20356,"language":46,"meta":47,"style":47},"#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",[49,20358,20359,20366,20371,20405,20409,20425],{"__ignoreMap":47},[52,20360,20361,20363],{"class":54,"line":55},[52,20362,59],{"class":58},[52,20364,20365],{"class":62},"\u003Cpoint.h>\n",[52,20367,20368],{"class":54,"line":66},[52,20369,20370],{"class":94},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[52,20372,20373,20375,20378,20381,20383,20385,20387,20389,20391,20393,20395,20397,20399,20401,20403],{"class":54,"line":83},[52,20374,17557],{"class":58},[52,20376,20377],{"class":75}," Point",[52,20379,20380],{"class":79},"::",[52,20382,20150],{"class":75},[52,20384,1216],{"class":79},[52,20386,16685],{"class":58},[52,20388,19656],{"class":1223},[52,20390,15083],{"class":79},[52,20392,16685],{"class":58},[52,20394,19663],{"class":1223},[52,20396,19666],{"class":79},[52,20398,292],{"class":58},[52,20400,19671],{"class":79},[52,20402,292],{"class":58},[52,20404,19676],{"class":79},[52,20406,20407],{"class":54,"line":91},[52,20408,19681],{"class":94},[52,20410,20411,20413,20415,20417,20419,20421,20423],{"class":54,"line":98},[52,20412,17386],{"class":58},[52,20414,20377],{"class":75},[52,20416,20380],{"class":79},[52,20418,19912],{"class":75},[52,20420,19691],{"class":79},[52,20422,19694],{"class":58},[52,20424,19697],{"class":79},[52,20426,20427,20429,20431,20433,20435,20437,20439],{"class":54,"line":107},[52,20428,17386],{"class":58},[52,20430,20377],{"class":75},[52,20432,20380],{"class":79},[52,20434,19940],{"class":75},[52,20436,19691],{"class":79},[52,20438,19694],{"class":58},[52,20440,19711],{"class":79},[14,20442,20443],{},"创建circle.h",[42,20445,20447],{"className":44,"code":20446,"language":46,"meta":47,"style":47},"#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",[49,20448,20449,20456,20462,20472,20478,20484,20488,20492,20496,20510,20524,20528,20536,20544,20548,20552,20558,20562,20566],{"__ignoreMap":47},[52,20450,20451,20453],{"class":54,"line":55},[52,20452,20241],{"class":58},[52,20454,20455],{"class":75}," once\n",[52,20457,20458,20460],{"class":54,"line":66},[52,20459,59],{"class":58},[52,20461,63],{"class":62},[52,20463,20464,20466,20468,20470],{"class":54,"line":83},[52,20465,69],{"class":58},[52,20467,72],{"class":58},[52,20469,76],{"class":75},[52,20471,80],{"class":79},[52,20473,20474,20476],{"class":54,"line":91},[52,20475,59],{"class":58},[52,20477,20365],{"class":62},[52,20479,20480,20482],{"class":54,"line":98},[52,20481,17342],{"class":58},[52,20483,17345],{"class":75},[52,20485,20486],{"class":54,"line":107},[52,20487,110],{"class":79},[52,20489,20490],{"class":54,"line":113},[52,20491,17364],{"class":58},[52,20493,20494],{"class":54,"line":119},[52,20495,19642],{"class":94},[52,20497,20498,20500,20502,20504,20506,20508],{"class":54,"line":126},[52,20499,17557],{"class":58},[52,20501,19762],{"class":75},[52,20503,1216],{"class":79},[52,20505,16685],{"class":58},[52,20507,19769],{"class":1223},[52,20509,2737],{"class":79},[52,20511,20512,20514,20516,20518,20520,20522],{"class":54,"line":132},[52,20513,17557],{"class":58},[52,20515,19784],{"class":75},[52,20517,1216],{"class":79},[52,20519,19789],{"class":75},[52,20521,19792],{"class":1223},[52,20523,2737],{"class":79},[52,20525,20526],{"class":54,"line":138},[52,20527,19805],{"class":94},[52,20529,20530,20532,20534],{"class":54,"line":144},[52,20531,17386],{"class":58},[52,20533,19812],{"class":75},[52,20535,8601],{"class":79},[52,20537,20538,20540,20542],{"class":54,"line":153},[52,20539,19824],{"class":75},[52,20541,19827],{"class":75},[52,20543,8601],{"class":79},[52,20545,20546],{"class":54,"line":159},[52,20547,123],{"emptyLinePlaceholder":122},[52,20549,20550],{"class":54,"line":167},[52,20551,17870],{"class":58},[52,20553,20554,20556],{"class":54,"line":173},[52,20555,17386],{"class":58},[52,20557,17376],{"class":79},[52,20559,20560],{"class":54,"line":181},[52,20561,19853],{"class":94},[52,20563,20564],{"class":54,"line":186},[52,20565,19858],{"class":79},[52,20567,20568],{"class":54,"line":191},[52,20569,170],{"class":79},[14,20571,20572],{},"创建circle.cpp",[42,20574,20576],{"className":44,"code":20575,"language":46,"meta":47,"style":47},"#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",[49,20577,20578,20585,20608,20630,20635,20651],{"__ignoreMap":47},[52,20579,20580,20582],{"class":54,"line":55},[52,20581,59],{"class":58},[52,20583,20584],{"class":62},"\u003Ccircle.h>\n",[52,20586,20587,20589,20592,20594,20596,20598,20600,20602,20604,20606],{"class":54,"line":66},[52,20588,1210],{"class":58},[52,20590,20591],{"class":75}," Circle",[52,20593,20380],{"class":79},[52,20595,20108],{"class":75},[52,20597,1216],{"class":79},[52,20599,16685],{"class":58},[52,20601,19769],{"class":1223},[52,20603,19772],{"class":79},[52,20605,292],{"class":58},[52,20607,19777],{"class":79},[52,20609,20610,20612,20614,20616,20618,20620,20622,20624,20626,20628],{"class":54,"line":83},[52,20611,1210],{"class":58},[52,20613,20591],{"class":75},[52,20615,20380],{"class":79},[52,20617,20160],{"class":75},[52,20619,1216],{"class":79},[52,20621,19789],{"class":75},[52,20623,19792],{"class":1223},[52,20625,19795],{"class":79},[52,20627,292],{"class":58},[52,20629,19800],{"class":79},[52,20631,20632],{"class":54,"line":91},[52,20633,20634],{"class":94},"\u002F\u002F获取属性\n",[52,20636,20637,20639,20641,20643,20645,20647,20649],{"class":54,"line":98},[52,20638,16685],{"class":58},[52,20640,20591],{"class":75},[52,20642,20380],{"class":79},[52,20644,19992],{"class":75},[52,20646,19691],{"class":79},[52,20648,19694],{"class":58},[52,20650,19819],{"class":79},[52,20652,20653,20655,20657,20659,20661,20663,20665],{"class":54,"line":107},[52,20654,19789],{"class":75},[52,20656,20591],{"class":75},[52,20658,20380],{"class":79},[52,20660,19906],{"class":75},[52,20662,19691],{"class":79},[52,20664,19694],{"class":58},[52,20666,19834],{"class":79},[14,20668,20669],{},"使用封装的类",[42,20671,20673],{"className":44,"code":20672,"language":46,"meta":47,"style":47},"#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",[49,20674,20675,20681,20691,20697,20703,20727,20731,20757,20783,20807,20821,20825,20837,20841,20845,20849,20861,20865,20869,20877,20881,20885,20889,20893,20897,20907,20913,20921,20929,20939,20945,20957,20965,20973,20983,20989,21001,21005,21013,21019],{"__ignoreMap":47},[52,20676,20677,20679],{"class":54,"line":55},[52,20678,59],{"class":58},[52,20680,63],{"class":62},[52,20682,20683,20685,20687,20689],{"class":54,"line":66},[52,20684,69],{"class":58},[52,20686,72],{"class":58},[52,20688,76],{"class":75},[52,20690,80],{"class":79},[52,20692,20693,20695],{"class":54,"line":83},[52,20694,59],{"class":58},[52,20696,20584],{"class":62},[52,20698,20699,20701],{"class":54,"line":91},[52,20700,59],{"class":58},[52,20702,20365],{"class":62},[52,20704,20705,20707,20709,20711,20713,20715,20717,20719,20721,20723,20725],{"class":54,"line":98},[52,20706,1210],{"class":58},[52,20708,19869],{"class":75},[52,20710,1216],{"class":79},[52,20712,19874],{"class":75},[52,20714,3061],{"class":58},[52,20716,3499],{"class":1223},[52,20718,389],{"class":79},[52,20720,19789],{"class":75},[52,20722,3061],{"class":58},[52,20724,14],{"class":1223},[52,20726,708],{"class":79},[52,20728,20729],{"class":54,"line":107},[52,20730,110],{"class":79},[52,20732,20733,20735,20737,20739,20741,20743,20745,20747,20749,20751,20753,20755],{"class":54,"line":113},[52,20734,17386],{"class":58},[52,20736,19899],{"class":79},[52,20738,292],{"class":58},[52,20740,18990],{"class":79},[52,20742,19906],{"class":75},[52,20744,19909],{"class":79},[52,20746,19912],{"class":75},[52,20748,15698],{"class":79},[52,20750,2642],{"class":58},[52,20752,18536],{"class":79},[52,20754,19912],{"class":75},[52,20756,8601],{"class":79},[52,20758,20759,20761,20763,20765,20767,20769,20771,20773,20775,20777,20779,20781],{"class":54,"line":119},[52,20760,17386],{"class":58},[52,20762,19929],{"class":79},[52,20764,292],{"class":58},[52,20766,18990],{"class":79},[52,20768,19906],{"class":75},[52,20770,19909],{"class":79},[52,20772,19940],{"class":75},[52,20774,15698],{"class":79},[52,20776,2642],{"class":58},[52,20778,18536],{"class":79},[52,20780,19940],{"class":75},[52,20782,8601],{"class":79},[52,20784,20785,20787,20789,20791,20793,20795,20797,20799,20801,20803,20805],{"class":54,"line":126},[52,20786,17386],{"class":58},[52,20788,19957],{"class":79},[52,20790,292],{"class":58},[52,20792,19962],{"class":75},[52,20794,19965],{"class":79},[52,20796,3053],{"class":58},[52,20798,19899],{"class":79},[52,20800,2004],{"class":58},[52,20802,19929],{"class":79},[52,20804,3053],{"class":58},[52,20806,19978],{"class":79},[52,20808,20809,20811,20813,20815,20817,20819],{"class":54,"line":132},[52,20810,6088],{"class":58},[52,20812,19985],{"class":79},[52,20814,698],{"class":58},[52,20816,18990],{"class":79},[52,20818,19992],{"class":75},[52,20820,19995],{"class":79},[52,20822,20823],{"class":54,"line":138},[52,20824,575],{"class":79},[52,20826,20827,20829,20831,20833,20835],{"class":54,"line":144},[52,20828,2113],{"class":79},[52,20830,339],{"class":58},[52,20832,20008],{"class":62},[52,20834,1247],{"class":58},[52,20836,1264],{"class":79},[52,20838,20839],{"class":54,"line":153},[52,20840,616],{"class":79},[52,20842,20843],{"class":54,"line":159},[52,20844,19471],{"class":58},[52,20846,20847],{"class":54,"line":167},[52,20848,575],{"class":79},[52,20850,20851,20853,20855,20857,20859],{"class":54,"line":173},[52,20852,2113],{"class":79},[52,20854,339],{"class":58},[52,20856,20033],{"class":62},[52,20858,1247],{"class":58},[52,20860,1264],{"class":79},[52,20862,20863],{"class":54,"line":181},[52,20864,616],{"class":79},[52,20866,20867],{"class":54,"line":186},[52,20868,452],{"class":79},[52,20870,20871,20873,20875],{"class":54,"line":191},[52,20872,242],{"class":58},[52,20874,245],{"class":75},[52,20876,248],{"class":79},[52,20878,20879],{"class":54,"line":196},[52,20880,110],{"class":79},[52,20882,20883],{"class":54,"line":201},[52,20884,17701],{"class":94},[52,20886,20887],{"class":54,"line":206},[52,20888,17448],{"class":79},[52,20890,20891],{"class":54,"line":211},[52,20892,20070],{"class":79},[52,20894,20895],{"class":54,"line":218},[52,20896,19642],{"class":94},[52,20898,20899,20901,20903,20905],{"class":54,"line":223},[52,20900,336],{"class":79},[52,20902,339],{"class":58},[52,20904,20083],{"class":62},[52,20906,80],{"class":79},[52,20908,20909,20911],{"class":54,"line":230},[52,20910,17386],{"class":58},[52,20912,20092],{"class":79},[52,20914,20915,20917,20919],{"class":54,"line":239},[52,20916,5026],{"class":79},[52,20918,4477],{"class":58},[52,20920,20101],{"class":79},[52,20922,20923,20925,20927],{"class":54,"line":251},[52,20924,19243],{"class":79},[52,20926,20108],{"class":75},[52,20928,20111],{"class":79},[52,20930,20931,20933,20935,20937],{"class":54,"line":256},[52,20932,336],{"class":79},[52,20934,339],{"class":58},[52,20936,20120],{"class":62},[52,20938,80],{"class":79},[52,20940,20941,20943],{"class":54,"line":262},[52,20942,17386],{"class":58},[52,20944,20129],{"class":79},[52,20946,20947,20949,20951,20953,20955],{"class":54,"line":268},[52,20948,5026],{"class":79},[52,20950,4477],{"class":58},[52,20952,4010],{"class":79},[52,20954,4477],{"class":58},[52,20956,20142],{"class":79},[52,20958,20959,20961,20963],{"class":54,"line":280},[52,20960,20147],{"class":79},[52,20962,20150],{"class":75},[52,20964,20153],{"class":79},[52,20966,20967,20969,20971],{"class":54,"line":286},[52,20968,19243],{"class":79},[52,20970,20160],{"class":75},[52,20972,20163],{"class":79},[52,20974,20975,20977,20979,20981],{"class":54,"line":300},[52,20976,336],{"class":79},[52,20978,339],{"class":58},[52,20980,20172],{"class":62},[52,20982,80],{"class":79},[52,20984,20985,20987],{"class":54,"line":314},[52,20986,17386],{"class":58},[52,20988,20181],{"class":79},[52,20990,20991,20993,20995,20997,20999],{"class":54,"line":327},[52,20992,5026],{"class":79},[52,20994,4477],{"class":58},[52,20996,20190],{"class":79},[52,20998,4477],{"class":58},[52,21000,20195],{"class":79},[52,21002,21003],{"class":54,"line":333},[52,21004,20200],{"class":79},[52,21006,21007,21009,21011],{"class":54,"line":360},[52,21008,20205],{"class":79},[52,21010,20150],{"class":75},[52,21012,20210],{"class":79},[52,21014,21015,21017],{"class":54,"line":365},[52,21016,20215],{"class":75},[52,21018,20218],{"class":79},[52,21020,21021],{"class":54,"line":371},[52,21022,452],{"class":79},[18,21024,21026],{"id":21025},"_82对象的初始化清理","8.2对象的初始化清理",[29,21028,21029,21032],{},[32,21030,21031],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[32,21033,21034],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[3195,21036,21038],{"id":21037},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,21040,21041,21042,21045],{},"对象的",[2389,21043,21044],{},"初始化和清理","也是两个非常重要的安全问题",[14,21047,21048],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,21050,21051],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,21053,21054,21055,21058,21059,21062],{},"c++利用了",[2389,21056,21057],{},"构造函数","和",[2389,21060,21061],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,21064,21065,21066],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2389,21067,21068],{},"我们不提供构造和析构，编译器会提供",[14,21070,21071],{},[2389,21072,21073],{},"编译器提供的构造函数和析构函数是空实现。",[29,21075,21076,21079],{},[32,21077,21078],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[32,21080,21081,21082,21085],{},"析构函数：主要作用在于对象",[2389,21083,21084],{},"销毁前","系统自动调用，执行一些清理工作。",[14,21087,21088,21091],{},[2389,21089,21090],{},"构造函数语法：",[49,21092,21093],{},"类名(){}",[1696,21095,21096,21099,21102,21105,21108],{},[32,21097,21098],{},"构造函数，没有返回值也不写void",[32,21100,21101],{},"函数名称与类名相同",[32,21103,21104],{},"构造函数可以有参数，因此可以发生重载",[32,21106,21107],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[32,21109,21110,21111,2283],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[49,21112,21113],{},"Person(){}",[14,21115,21116,16443,21119],{},[2389,21117,21118],{},"析构函数语法：",[49,21120,21121],{},"~类名(){}",[1696,21123,21124,21127,21130,21136],{},[32,21125,21126],{},"析构函数，没有返回值也不写void",[32,21128,21129],{},"函数名称与类名相同,在名称前加上符号  ~",[32,21131,21132,21133],{},"析构函数不可以有参数，因此",[2389,21134,21135],{},"不可以发生重载",[32,21137,21138],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[42,21140,21142],{"className":44,"code":21141,"language":46,"meta":47,"style":47},"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",[49,21143,21144,21150,21154,21158,21163,21170,21174,21187,21191,21196,21203,21207,21220,21224,21228,21232,21236,21244,21248,21256,21260,21264,21272,21276,21281,21285,21292,21296,21309,21313,21321],{"__ignoreMap":47},[52,21145,21146,21148],{"class":54,"line":55},[52,21147,17342],{"class":58},[52,21149,17819],{"class":75},[52,21151,21152],{"class":54,"line":66},[52,21153,110],{"class":79},[52,21155,21156],{"class":54,"line":83},[52,21157,17364],{"class":58},[52,21159,21160],{"class":54,"line":91},[52,21161,21162],{"class":94},"    \u002F\u002F构造函数\n",[52,21164,21165,21168],{"class":54,"line":98},[52,21166,21167],{"class":75},"    Person",[52,21169,248],{"class":79},[52,21171,21172],{"class":54,"line":107},[52,21173,575],{"class":79},[52,21175,21176,21178,21180,21183,21185],{"class":54,"line":113},[52,21177,2113],{"class":79},[52,21179,339],{"class":58},[52,21181,21182],{"class":62}," \"Person的构造函数调用\"",[52,21184,1247],{"class":58},[52,21186,1264],{"class":79},[52,21188,21189],{"class":54,"line":119},[52,21190,616],{"class":79},[52,21192,21193],{"class":54,"line":126},[52,21194,21195],{"class":94},"    \u002F\u002F析构函数\n",[52,21197,21198,21201],{"class":54,"line":132},[52,21199,21200],{"class":75},"    ~Person",[52,21202,248],{"class":79},[52,21204,21205],{"class":54,"line":138},[52,21206,575],{"class":79},[52,21208,21209,21211,21213,21216,21218],{"class":54,"line":144},[52,21210,2113],{"class":79},[52,21212,339],{"class":58},[52,21214,21215],{"class":62}," \"Person的析构函数调用\"",[52,21217,1247],{"class":58},[52,21219,1264],{"class":79},[52,21221,21222],{"class":54,"line":153},[52,21223,616],{"class":79},[52,21225,21226],{"class":54,"line":159},[52,21227,123],{"emptyLinePlaceholder":122},[52,21229,21230],{"class":54,"line":167},[52,21231,170],{"class":79},[52,21233,21234],{"class":54,"line":173},[52,21235,123],{"emptyLinePlaceholder":122},[52,21237,21238,21240,21242],{"class":54,"line":181},[52,21239,1210],{"class":58},[52,21241,8553],{"class":75},[52,21243,248],{"class":79},[52,21245,21246],{"class":54,"line":186},[52,21247,110],{"class":79},[52,21249,21250,21253],{"class":54,"line":191},[52,21251,21252],{"class":79},"    Person p;",[52,21254,21255],{"class":94},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[52,21257,21258],{"class":54,"line":196},[52,21259,452],{"class":79},[52,21261,21262],{"class":54,"line":201},[52,21263,123],{"emptyLinePlaceholder":122},[52,21265,21266,21268,21270],{"class":54,"line":206},[52,21267,242],{"class":58},[52,21269,245],{"class":75},[52,21271,13501],{"class":79},[52,21273,21274],{"class":54,"line":211},[52,21275,15858],{"class":79},[52,21277,21278],{"class":54,"line":218},[52,21279,21280],{"class":94},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[52,21282,21283],{"class":54,"line":223},[52,21284,123],{"emptyLinePlaceholder":122},[52,21286,21287,21289],{"class":54,"line":230},[52,21288,21252],{"class":79},[52,21290,21291],{"class":94},"\u002F\u002F只有构造函数\n",[52,21293,21294],{"class":54,"line":239},[52,21295,123],{"emptyLinePlaceholder":122},[52,21297,21298,21300,21302,21304,21306],{"class":54,"line":251},[52,21299,5313],{"class":75},[52,21301,1216],{"class":79},[52,21303,5318],{"class":62},[52,21305,8931],{"class":79},[52,21307,21308],{"class":94},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[52,21310,21311],{"class":54,"line":256},[52,21312,123],{"emptyLinePlaceholder":122},[52,21314,21315,21317,21319],{"class":54,"line":262},[52,21316,1441],{"class":58},[52,21318,1444],{"class":308},[52,21320,80],{"class":79},[52,21322,21323],{"class":54,"line":268},[52,21324,452],{"class":79},[14,21326,21327],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[3195,21329,21331],{"id":21330},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,21333,21334],{},"两种分类方式：",[14,21336,21337],{},"​\t按参数分为： 有参构造和无参构造",[14,21339,21340],{},"​\t按类型分为： 普通构造和拷贝构造",[14,21342,21343],{},"三种调用方式：",[14,21345,21346],{},"​\t括号法",[14,21348,21349],{},"​\t显示法",[14,21351,21352],{},"​\t隐式转换法",[42,21354,21356],{"className":44,"code":21355,"language":46,"meta":47,"style":47},"#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",[49,21357,21358,21364,21374,21379,21384,21389,21394,21398,21406,21410,21414,21418,21424,21428,21441,21445,21457,21461,21470,21483,21487,21491,21497,21501,21514,21518,21523,21539,21543,21548,21557,21570,21574,21580,21584,21589,21597,21601,21606,21610,21618,21622,21627,21632,21637,21642,21647,21651,21656,21661,21666,21671,21675,21680,21685,21701,21713,21718,21722,21727,21732,21737,21741,21746,21760,21773,21777,21785,21789,21795,21801,21809],{"__ignoreMap":47},[52,21359,21360,21362],{"class":54,"line":55},[52,21361,59],{"class":58},[52,21363,63],{"class":62},[52,21365,21366,21368,21370,21372],{"class":54,"line":66},[52,21367,69],{"class":58},[52,21369,72],{"class":58},[52,21371,76],{"class":75},[52,21373,80],{"class":79},[52,21375,21376],{"class":54,"line":83},[52,21377,21378],{"class":94},"\u002F\u002F1.构造函数的分类及调用\n",[52,21380,21381],{"class":54,"line":91},[52,21382,21383],{"class":94},"\u002F\u002F分类\n",[52,21385,21386],{"class":54,"line":98},[52,21387,21388],{"class":94},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[52,21390,21391],{"class":54,"line":107},[52,21392,21393],{"class":94},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[52,21395,21396],{"class":54,"line":113},[52,21397,123],{"emptyLinePlaceholder":122},[52,21399,21400,21402,21404],{"class":54,"line":119},[52,21401,17342],{"class":58},[52,21403,18217],{"class":75},[52,21405,963],{"class":79},[52,21407,21408],{"class":54,"line":126},[52,21409,110],{"class":79},[52,21411,21412],{"class":54,"line":132},[52,21413,17364],{"class":58},[52,21415,21416],{"class":54,"line":138},[52,21417,21162],{"class":94},[52,21419,21420,21422],{"class":54,"line":144},[52,21421,21167],{"class":75},[52,21423,248],{"class":79},[52,21425,21426],{"class":54,"line":153},[52,21427,575],{"class":79},[52,21429,21430,21432,21434,21437,21439],{"class":54,"line":159},[52,21431,717],{"class":79},[52,21433,339],{"class":58},[52,21435,21436],{"class":62},"\"Person构造函数无参构造\"",[52,21438,339],{"class":58},[52,21440,357],{"class":79},[52,21442,21443],{"class":54,"line":167},[52,21444,616],{"class":79},[52,21446,21447,21449,21451,21453,21455],{"class":54,"line":173},[52,21448,21167],{"class":75},[52,21450,1216],{"class":79},[52,21452,242],{"class":58},[52,21454,4446],{"class":1223},[52,21456,708],{"class":79},[52,21458,21459],{"class":54,"line":181},[52,21460,575],{"class":79},[52,21462,21463,21466,21468],{"class":54,"line":186},[52,21464,21465],{"class":79},"        age",[52,21467,292],{"class":58},[52,21469,9161],{"class":79},[52,21471,21472,21474,21476,21479,21481],{"class":54,"line":191},[52,21473,717],{"class":79},[52,21475,339],{"class":58},[52,21477,21478],{"class":62},"\"Person构造函数有参构造\"",[52,21480,339],{"class":58},[52,21482,357],{"class":79},[52,21484,21485],{"class":54,"line":196},[52,21486,616],{"class":79},[52,21488,21489],{"class":54,"line":201},[52,21490,21195],{"class":94},[52,21492,21493,21495],{"class":54,"line":206},[52,21494,21200],{"class":75},[52,21496,248],{"class":79},[52,21498,21499],{"class":54,"line":211},[52,21500,575],{"class":79},[52,21502,21503,21505,21507,21510,21512],{"class":54,"line":218},[52,21504,717],{"class":79},[52,21506,339],{"class":58},[52,21508,21509],{"class":62},"\"Person析构函数被调用\"",[52,21511,339],{"class":58},[52,21513,357],{"class":79},[52,21515,21516],{"class":54,"line":223},[52,21517,616],{"class":79},[52,21519,21520],{"class":54,"line":230},[52,21521,21522],{"class":94},"    \u002F\u002F拷贝构造函数\n",[52,21524,21525,21527,21529,21531,21533,21535,21537],{"class":54,"line":239},[52,21526,21167],{"class":75},[52,21528,1216],{"class":79},[52,21530,1648],{"class":58},[52,21532,18217],{"class":75},[52,21534,3061],{"class":58},[52,21536,14],{"class":1223},[52,21538,708],{"class":79},[52,21540,21541],{"class":54,"line":251},[52,21542,575],{"class":79},[52,21544,21545],{"class":54,"line":256},[52,21546,21547],{"class":94},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[52,21549,21550,21552,21554],{"class":54,"line":262},[52,21551,21465],{"class":79},[52,21553,292],{"class":58},[52,21555,21556],{"class":79},"p.age;\n",[52,21558,21559,21561,21563,21566,21568],{"class":54,"line":268},[52,21560,717],{"class":79},[52,21562,339],{"class":58},[52,21564,21565],{"class":62},"\"Person拷贝构造函数被调用\"",[52,21567,339],{"class":58},[52,21569,357],{"class":79},[52,21571,21572],{"class":54,"line":280},[52,21573,616],{"class":79},[52,21575,21576,21578],{"class":54,"line":286},[52,21577,147],{"class":58},[52,21579,150],{"class":79},[52,21581,21582],{"class":54,"line":300},[52,21583,170],{"class":79},[52,21585,21586],{"class":54,"line":314},[52,21587,21588],{"class":94},"\u002F\u002F调用\n",[52,21590,21591,21593,21595],{"class":54,"line":327},[52,21592,1210],{"class":58},[52,21594,8553],{"class":75},[52,21596,248],{"class":79},[52,21598,21599],{"class":54,"line":333},[52,21600,110],{"class":79},[52,21602,21603],{"class":54,"line":360},[52,21604,21605],{"class":94},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[52,21607,21608],{"class":54,"line":365},[52,21609,452],{"class":79},[52,21611,21612,21614,21616],{"class":54,"line":371},[52,21613,1210],{"class":58},[52,21615,8622],{"class":75},[52,21617,248],{"class":79},[52,21619,21620],{"class":54,"line":400},[52,21621,110],{"class":79},[52,21623,21624],{"class":54,"line":405},[52,21625,21626],{"class":94},"    \u002F\u002F1.括号法\n",[52,21628,21629],{"class":54,"line":411},[52,21630,21631],{"class":94},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[52,21633,21634],{"class":54,"line":424},[52,21635,21636],{"class":94},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[52,21638,21639],{"class":54,"line":436},[52,21640,21641],{"class":94},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[52,21643,21644],{"class":54,"line":449},[52,21645,21646],{"class":94},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[52,21648,21649],{"class":54,"line":2160},[52,21650,123],{"emptyLinePlaceholder":122},[52,21652,21653],{"class":54,"line":2186},[52,21654,21655],{"class":94},"    \u002F\u002F注意事项\n",[52,21657,21658],{"class":54,"line":2209},[52,21659,21660],{"class":94},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[52,21662,21663],{"class":54,"line":2233},[52,21664,21665],{"class":94},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[52,21667,21668],{"class":54,"line":2238},[52,21669,21670],{"class":94},"    \u002F\u002F Person p4();\n",[52,21672,21673],{"class":54,"line":2243},[52,21674,123],{"emptyLinePlaceholder":122},[52,21676,21677],{"class":54,"line":2248},[52,21678,21679],{"class":94},"    \u002F\u002F2.显示法\n",[52,21681,21682],{"class":54,"line":2257},[52,21683,21684],{"class":79},"    Person p1;\n",[52,21686,21687,21690,21692,21695,21697,21699],{"class":54,"line":2262},[52,21688,21689],{"class":79},"    Person p2",[52,21691,292],{"class":58},[52,21693,21694],{"class":75},"Person",[52,21696,1216],{"class":79},[52,21698,3649],{"class":308},[52,21700,2737],{"class":79},[52,21702,21703,21706,21708,21710],{"class":54,"line":2268},[52,21704,21705],{"class":79},"    Person p3",[52,21707,292],{"class":58},[52,21709,21694],{"class":75},[52,21711,21712],{"class":79},"(p2);\n",[52,21714,21715],{"class":54,"line":2297},[52,21716,21717],{"class":94},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[52,21719,21720],{"class":54,"line":2303},[52,21721,123],{"emptyLinePlaceholder":122},[52,21723,21724],{"class":54,"line":2318},[52,21725,21726],{"class":94},"    \u002F\u002F 注意事项2\n",[52,21728,21729],{"class":54,"line":2324},[52,21730,21731],{"class":94},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[52,21733,21734],{"class":54,"line":2353},[52,21735,21736],{"class":94},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[52,21738,21739],{"class":54,"line":2362},[52,21740,123],{"emptyLinePlaceholder":122},[52,21742,21743],{"class":54,"line":2368},[52,21744,21745],{"class":94},"    \u002F\u002F3.隐士转换法\n",[52,21747,21748,21751,21753,21755,21757],{"class":54,"line":2376},[52,21749,21750],{"class":79},"    Person p4",[52,21752,292],{"class":58},[52,21754,3649],{"class":308},[52,21756,2010],{"class":79},[52,21758,21759],{"class":94},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[52,21761,21762,21765,21767,21770],{"class":54,"line":2381},[52,21763,21764],{"class":79},"    Person p5",[52,21766,292],{"class":58},[52,21768,21769],{"class":79},"p4;",[52,21771,21772],{"class":94}," \u002F\u002F 这里会调用拷贝构造函数\n",[52,21774,21775],{"class":54,"line":19252},[52,21776,452],{"class":79},[52,21778,21779,21781,21783],{"class":54,"line":19258},[52,21780,242],{"class":58},[52,21782,245],{"class":75},[52,21784,248],{"class":79},[52,21786,21787],{"class":54,"line":19281},[52,21788,110],{"class":79},[52,21790,21791,21793],{"class":54,"line":19287},[52,21792,8598],{"class":75},[52,21794,8601],{"class":79},[52,21796,21797,21799],{"class":54,"line":19310},[52,21798,8667],{"class":75},[52,21800,8601],{"class":79},[52,21802,21803,21805,21807],{"class":54,"line":19324},[52,21804,1441],{"class":58},[52,21806,1444],{"class":308},[52,21808,80],{"class":79},[52,21810,21811],{"class":54,"line":19344},[52,21812,452],{"class":79},[14,21814,21815,21818],{},[2389,21816,21817],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[3195,21820,21822],{"id":21821},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,21824,21825],{},"C++中拷贝构造函数调用时机通常有三种情况",[29,21827,21828,21831,21834],{},[32,21829,21830],{},"使用一个已经创建完毕的对象来初始化一个新对象",[32,21832,21833],{},"值传递的方式给函数参数传值",[32,21835,21836],{},"以值方式返回局部对象",[42,21838,21840],{"className":44,"code":21839,"language":46,"meta":47,"style":47},"#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",[49,21841,21842,21848,21858,21862,21867,21871,21876,21881,21886,21892,21896,21900,21906,21910,21923,21927,21932,21944,21948,21956,21969,21973,21977,21993,21997,22006,22019,22023,22029,22033,22045,22049,22055,22059,22063,22071,22075,22088,22096,22114,22118,22123,22128,22143,22147,22160,22164,22172,22176,22180,22188,22192,22197,22206,22210,22214,22239,22249,22253,22261,22265,22276,22301,22305,22309,22313,22321,22325,22330,22335,22342,22347,22352,22357,22362,22366,22371,22375,22380,22384,22389,22394,22398,22402,22407,22412,22420],{"__ignoreMap":47},[52,21843,21844,21846],{"class":54,"line":55},[52,21845,59],{"class":58},[52,21847,63],{"class":62},[52,21849,21850,21852,21854,21856],{"class":54,"line":66},[52,21851,69],{"class":58},[52,21853,72],{"class":58},[52,21855,76],{"class":75},[52,21857,80],{"class":79},[52,21859,21860],{"class":54,"line":83},[52,21861,123],{"emptyLinePlaceholder":122},[52,21863,21864],{"class":54,"line":91},[52,21865,21866],{"class":94},"\u002F\u002F拷贝构造函数调用时机\n",[52,21868,21869],{"class":54,"line":98},[52,21870,123],{"emptyLinePlaceholder":122},[52,21872,21873],{"class":54,"line":107},[52,21874,21875],{"class":94},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[52,21877,21878],{"class":54,"line":113},[52,21879,21880],{"class":94},"\u002F\u002F2.值传递的方式给函数参数传值\n",[52,21882,21883],{"class":54,"line":119},[52,21884,21885],{"class":94},"\u002F\u002F3.以值方式返回局部对象\n",[52,21887,21888,21890],{"class":54,"line":126},[52,21889,17342],{"class":58},[52,21891,17819],{"class":75},[52,21893,21894],{"class":54,"line":132},[52,21895,110],{"class":79},[52,21897,21898],{"class":54,"line":138},[52,21899,17364],{"class":58},[52,21901,21902,21904],{"class":54,"line":144},[52,21903,21167],{"class":75},[52,21905,248],{"class":79},[52,21907,21908],{"class":54,"line":153},[52,21909,575],{"class":79},[52,21911,21912,21914,21916,21919,21921],{"class":54,"line":159},[52,21913,2113],{"class":79},[52,21915,339],{"class":58},[52,21917,21918],{"class":62}," \"Person的默认构造函数调用\"",[52,21920,1247],{"class":58},[52,21922,1264],{"class":79},[52,21924,21925],{"class":54,"line":167},[52,21926,616],{"class":79},[52,21928,21929],{"class":54,"line":173},[52,21930,21931],{"class":94},"    \u002F\u002F有参构造\n",[52,21933,21934,21936,21938,21940,21942],{"class":54,"line":181},[52,21935,21167],{"class":75},[52,21937,1216],{"class":79},[52,21939,242],{"class":58},[52,21941,18337],{"class":1223},[52,21943,708],{"class":79},[52,21945,21946],{"class":54,"line":186},[52,21947,575],{"class":79},[52,21949,21950,21952,21954],{"class":54,"line":191},[52,21951,18391],{"class":79},[52,21953,292],{"class":58},[52,21955,150],{"class":79},[52,21957,21958,21960,21962,21965,21967],{"class":54,"line":196},[52,21959,2113],{"class":79},[52,21961,339],{"class":58},[52,21963,21964],{"class":62}," \"Person的有参构造函数调用\"",[52,21966,1247],{"class":58},[52,21968,1264],{"class":79},[52,21970,21971],{"class":54,"line":201},[52,21972,616],{"class":79},[52,21974,21975],{"class":54,"line":206},[52,21976,21522],{"class":94},[52,21978,21979,21981,21983,21985,21987,21989,21991],{"class":54,"line":211},[52,21980,21167],{"class":75},[52,21982,1216],{"class":79},[52,21984,1648],{"class":58},[52,21986,18217],{"class":75},[52,21988,3061],{"class":58},[52,21990,14],{"class":1223},[52,21992,708],{"class":79},[52,21994,21995],{"class":54,"line":218},[52,21996,575],{"class":79},[52,21998,21999,22001,22003],{"class":54,"line":223},[52,22000,18391],{"class":79},[52,22002,292],{"class":58},[52,22004,22005],{"class":79}," p.m_Age;\n",[52,22007,22008,22010,22012,22015,22017],{"class":54,"line":230},[52,22009,2113],{"class":79},[52,22011,339],{"class":58},[52,22013,22014],{"class":62}," \"Person的拷贝构造函数调用\"",[52,22016,1247],{"class":58},[52,22018,1264],{"class":79},[52,22020,22021],{"class":54,"line":239},[52,22022,616],{"class":79},[52,22024,22025,22027],{"class":54,"line":251},[52,22026,21200],{"class":75},[52,22028,248],{"class":79},[52,22030,22031],{"class":54,"line":256},[52,22032,575],{"class":79},[52,22034,22035,22037,22039,22041,22043],{"class":54,"line":262},[52,22036,2113],{"class":79},[52,22038,339],{"class":58},[52,22040,21215],{"class":62},[52,22042,1247],{"class":58},[52,22044,1264],{"class":79},[52,22046,22047],{"class":54,"line":268},[52,22048,616],{"class":79},[52,22050,22051,22053],{"class":54,"line":280},[52,22052,147],{"class":58},[52,22054,18314],{"class":79},[52,22056,22057],{"class":54,"line":286},[52,22058,170],{"class":79},[52,22060,22061],{"class":54,"line":300},[52,22062,21875],{"class":94},[52,22064,22065,22067,22069],{"class":54,"line":314},[52,22066,1210],{"class":58},[52,22068,8553],{"class":75},[52,22070,248],{"class":79},[52,22072,22073],{"class":54,"line":327},[52,22074,110],{"class":79},[52,22076,22077,22080,22082,22084,22086],{"class":54,"line":333},[52,22078,22079],{"class":79},"    Person ",[52,22081,10090],{"class":75},[52,22083,1216],{"class":79},[52,22085,444],{"class":308},[52,22087,2737],{"class":79},[52,22089,22090,22092,22094],{"class":54,"line":360},[52,22091,22079],{"class":79},[52,22093,9993],{"class":75},[52,22095,20163],{"class":79},[52,22097,22098,22100,22102,22105,22107,22110,22112],{"class":54,"line":365},[52,22099,336],{"class":79},[52,22101,339],{"class":58},[52,22103,22104],{"class":62},"\"P2的年龄为：\"",[52,22106,339],{"class":58},[52,22108,22109],{"class":79},"p2.m_Age",[52,22111,339],{"class":58},[52,22113,357],{"class":79},[52,22115,22116],{"class":54,"line":371},[52,22117,452],{"class":79},[52,22119,22120],{"class":54,"line":400},[52,22121,22122],{"class":94},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[52,22124,22125],{"class":54,"line":405},[52,22126,22127],{"class":94},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[52,22129,22130,22132,22135,22137,22139,22141],{"class":54,"line":411},[52,22131,1210],{"class":58},[52,22133,22134],{"class":75}," doWork",[52,22136,1216],{"class":79},[52,22138,21694],{"class":75},[52,22140,9785],{"class":1223},[52,22142,708],{"class":79},[52,22144,22145],{"class":54,"line":424},[52,22146,110],{"class":79},[52,22148,22149,22151,22153,22156,22158],{"class":54,"line":436},[52,22150,1234],{"class":79},[52,22152,339],{"class":58},[52,22154,22155],{"class":62}," \"doWork函数调用\"",[52,22157,1247],{"class":58},[52,22159,1264],{"class":79},[52,22161,22162],{"class":54,"line":449},[52,22163,452],{"class":79},[52,22165,22166,22168,22170],{"class":54,"line":2160},[52,22167,1210],{"class":58},[52,22169,8622],{"class":75},[52,22171,248],{"class":79},[52,22173,22174],{"class":54,"line":2186},[52,22175,110],{"class":79},[52,22177,22178],{"class":54,"line":2209},[52,22179,17961],{"class":79},[52,22181,22182,22185],{"class":54,"line":2233},[52,22183,22184],{"class":75},"    doWork",[52,22186,22187],{"class":79},"(p);\n",[52,22189,22190],{"class":54,"line":2238},[52,22191,452],{"class":79},[52,22193,22194],{"class":54,"line":2243},[52,22195,22196],{"class":94},"\u002F\u002F 3.以值方式返回局部对象\n",[52,22198,22199,22201,22204],{"class":54,"line":2248},[52,22200,21694],{"class":75},[52,22202,22203],{"class":75}," doWork2",[52,22205,248],{"class":79},[52,22207,22208],{"class":54,"line":2257},[52,22209,110],{"class":79},[52,22211,22212],{"class":54,"line":2262},[52,22213,21684],{"class":79},[52,22215,22216,22218,22220,22222,22224,22226,22228,22230,22232,22234,22236],{"class":54,"line":2268},[52,22217,336],{"class":79},[52,22219,339],{"class":58},[52,22221,1216],{"class":79},[52,22223,242],{"class":58},[52,22225,872],{"class":58},[52,22227,2283],{"class":79},[52,22229,1433],{"class":58},[52,22231,10090],{"class":79},[52,22233,339],{"class":58},[52,22235,4290],{"class":79},[52,22237,22238],{"class":94},"\u002F\u002F打印p1的地址\n",[52,22240,22241,22243,22246],{"class":54,"line":2297},[52,22242,1441],{"class":58},[52,22244,22245],{"class":79}," p1;",[52,22247,22248],{"class":94},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[52,22250,22251],{"class":54,"line":2303},[52,22252,452],{"class":79},[52,22254,22255,22257,22259],{"class":54,"line":2318},[52,22256,1210],{"class":58},[52,22258,8694],{"class":75},[52,22260,248],{"class":79},[52,22262,22263],{"class":54,"line":2324},[52,22264,110],{"class":79},[52,22266,22267,22270,22272,22274],{"class":54,"line":2353},[52,22268,22269],{"class":79},"    Person p ",[52,22271,292],{"class":58},[52,22273,22203],{"class":75},[52,22275,8601],{"class":79},[52,22277,22278,22280,22282,22284,22286,22288,22290,22292,22294,22296,22298],{"class":54,"line":2362},[52,22279,336],{"class":79},[52,22281,339],{"class":58},[52,22283,1216],{"class":79},[52,22285,242],{"class":58},[52,22287,872],{"class":58},[52,22289,2283],{"class":79},[52,22291,1433],{"class":58},[52,22293,14],{"class":79},[52,22295,339],{"class":58},[52,22297,4290],{"class":79},[52,22299,22300],{"class":94},"\u002F\u002F打印p的地址\n",[52,22302,22303],{"class":54,"line":2368},[52,22304,452],{"class":79},[52,22306,22307],{"class":54,"line":2376},[52,22308,123],{"emptyLinePlaceholder":122},[52,22310,22311],{"class":54,"line":2381},[52,22312,123],{"emptyLinePlaceholder":122},[52,22314,22315,22317,22319],{"class":54,"line":19252},[52,22316,242],{"class":58},[52,22318,245],{"class":75},[52,22320,248],{"class":79},[52,22322,22323],{"class":54,"line":19258},[52,22324,110],{"class":79},[52,22326,22327],{"class":54,"line":19281},[52,22328,22329],{"class":94},"    \u002F\u002F test01();\n",[52,22331,22332],{"class":54,"line":19287},[52,22333,22334],{"class":94},"    \u002F\u002F test02();\n",[52,22336,22337,22340],{"class":54,"line":19310},[52,22338,22339],{"class":75},"    test03",[52,22341,8601],{"class":79},[52,22343,22344],{"class":54,"line":19324},[52,22345,22346],{"class":94},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[52,22348,22349],{"class":54,"line":19344},[52,22350,22351],{"class":94},"\u002F\u002F 输出结果如下：\n",[52,22353,22354],{"class":54,"line":19350},[52,22355,22356],{"class":94},"\u002F\u002F Person的默认构造函数调用\n",[52,22358,22359],{"class":54,"line":19361},[52,22360,22361],{"class":94},"\u002F\u002F 0x7fffffffceec\n",[52,22363,22364],{"class":54,"line":19384},[52,22365,22361],{"class":94},[52,22367,22368],{"class":54,"line":19406},[52,22369,22370],{"class":94},"\u002F\u002F Person的析构函数调用\n",[52,22372,22373],{"class":54,"line":19411},[52,22374,123],{"emptyLinePlaceholder":122},[52,22376,22377],{"class":54,"line":19417},[52,22378,22379],{"class":94},"\u002F\u002F 之前的输出结果如下：\n",[52,22381,22382],{"class":54,"line":19431},[52,22383,22356],{"class":94},[52,22385,22386],{"class":54,"line":19444},[52,22387,22388],{"class":94},"\u002F\u002F 地址\n",[52,22390,22391],{"class":54,"line":19449},[52,22392,22393],{"class":94},"\u002F\u002F Person的拷贝构造函数调用\n",[52,22395,22396],{"class":54,"line":19463},[52,22397,22370],{"class":94},[52,22399,22400],{"class":54,"line":19468},[52,22401,22388],{"class":94},[52,22403,22404],{"class":54,"line":19474},[52,22405,22406],{"class":94},"\u002F\u002F (这两次输出的地址也是不同的) \n",[52,22408,22409],{"class":54,"line":19479},[52,22410,22411],{"class":94},"\u002F\u002F Person的析构函数调用     \n",[52,22413,22414,22416,22418],{"class":54,"line":19493},[52,22415,1441],{"class":58},[52,22417,1444],{"class":308},[52,22419,80],{"class":79},[52,22421,22422],{"class":54,"line":19498},[52,22423,452],{"class":79},[14,22425,22426],{},"简化版理解",[42,22428,22430],{"className":44,"code":22429,"language":46,"meta":47,"style":47},"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",[49,22431,22432,22440,22444,22450,22463,22474,22478,22490,22503,22511,22515,22531,22544,22553,22557,22562,22568,22581,22585,22589,22596,22600,22604,22609,22617,22621,22637,22650,22663,22667,22672,22680,22684,22688,22693,22698,22714,22722,22729,22735,22739,22743,22748,22756,22760,22764,22787,22794,22798,22802,22810,22814,22824,22846,22850,22854,22858,22866,22870,22875,22880,22886,22890,22900,22904,22912],{"__ignoreMap":47},[52,22433,22434,22436,22438],{"class":54,"line":55},[52,22435,17342],{"class":58},[52,22437,18217],{"class":75},[52,22439,18220],{"class":79},[52,22441,22442],{"class":54,"line":66},[52,22443,17364],{"class":58},[52,22445,22446,22448],{"class":54,"line":83},[52,22447,21167],{"class":75},[52,22449,13501],{"class":79},[52,22451,22452,22454,22456,22459,22461],{"class":54,"line":91},[52,22453,2113],{"class":79},[52,22455,339],{"class":58},[52,22457,22458],{"class":62}," \"无参构造函数!\"",[52,22460,1247],{"class":58},[52,22462,1264],{"class":79},[52,22464,22465,22468,22470,22472],{"class":54,"line":98},[52,22466,22467],{"class":79},"        mAge ",[52,22469,292],{"class":58},[52,22471,1444],{"class":308},[52,22473,80],{"class":79},[52,22475,22476],{"class":54,"line":107},[52,22477,616],{"class":79},[52,22479,22480,22482,22484,22486,22488],{"class":54,"line":113},[52,22481,21167],{"class":75},[52,22483,1216],{"class":79},[52,22485,242],{"class":58},[52,22487,18337],{"class":1223},[52,22489,15090],{"class":79},[52,22491,22492,22494,22496,22499,22501],{"class":54,"line":119},[52,22493,2113],{"class":79},[52,22495,339],{"class":58},[52,22497,22498],{"class":62}," \"有参构造函数!\"",[52,22500,1247],{"class":58},[52,22502,1264],{"class":79},[52,22504,22505,22507,22509],{"class":54,"line":126},[52,22506,22467],{"class":79},[52,22508,292],{"class":58},[52,22510,150],{"class":79},[52,22512,22513],{"class":54,"line":132},[52,22514,616],{"class":79},[52,22516,22517,22519,22521,22523,22525,22527,22529],{"class":54,"line":138},[52,22518,21167],{"class":75},[52,22520,1216],{"class":79},[52,22522,1648],{"class":58},[52,22524,18217],{"class":75},[52,22526,1433],{"class":58},[52,22528,9785],{"class":1223},[52,22530,15090],{"class":79},[52,22532,22533,22535,22537,22540,22542],{"class":54,"line":144},[52,22534,2113],{"class":79},[52,22536,339],{"class":58},[52,22538,22539],{"class":62}," \"拷贝构造函数!\"",[52,22541,1247],{"class":58},[52,22543,1264],{"class":79},[52,22545,22546,22548,22550],{"class":54,"line":153},[52,22547,22467],{"class":79},[52,22549,292],{"class":58},[52,22551,22552],{"class":79}," p.mAge;\n",[52,22554,22555],{"class":54,"line":159},[52,22556,616],{"class":79},[52,22558,22559],{"class":54,"line":167},[52,22560,22561],{"class":94},"    \u002F\u002F析构函数在释放内存之前调用\n",[52,22563,22564,22566],{"class":54,"line":173},[52,22565,21200],{"class":75},[52,22567,13501],{"class":79},[52,22569,22570,22572,22574,22577,22579],{"class":54,"line":181},[52,22571,2113],{"class":79},[52,22573,339],{"class":58},[52,22575,22576],{"class":62}," \"析构函数!\"",[52,22578,1247],{"class":58},[52,22580,1264],{"class":79},[52,22582,22583],{"class":54,"line":186},[52,22584,616],{"class":79},[52,22586,22587],{"class":54,"line":191},[52,22588,17364],{"class":58},[52,22590,22591,22593],{"class":54,"line":196},[52,22592,147],{"class":58},[52,22594,22595],{"class":79}," mAge;\n",[52,22597,22598],{"class":54,"line":201},[52,22599,170],{"class":79},[52,22601,22602],{"class":54,"line":206},[52,22603,123],{"emptyLinePlaceholder":122},[52,22605,22606],{"class":54,"line":211},[52,22607,22608],{"class":94},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[52,22610,22611,22613,22615],{"class":54,"line":218},[52,22612,1210],{"class":58},[52,22614,8553],{"class":75},[52,22616,13501],{"class":79},[52,22618,22619],{"class":54,"line":223},[52,22620,123],{"emptyLinePlaceholder":122},[52,22622,22623,22625,22628,22630,22632,22634],{"class":54,"line":230},[52,22624,22079],{"class":79},[52,22626,22627],{"class":75},"man",[52,22629,1216],{"class":79},[52,22631,591],{"class":308},[52,22633,8931],{"class":79},[52,22635,22636],{"class":94}," \u002F\u002Fp对象已经创建完毕\n",[52,22638,22639,22641,22644,22647],{"class":54,"line":239},[52,22640,22079],{"class":79},[52,22642,22643],{"class":75},"newman",[52,22645,22646],{"class":79},"(man);",[52,22648,22649],{"class":94}," \u002F\u002F调用拷贝构造函数\n",[52,22651,22652,22655,22657,22660],{"class":54,"line":251},[52,22653,22654],{"class":79},"    Person newman2 ",[52,22656,292],{"class":58},[52,22658,22659],{"class":79}," man;",[52,22661,22662],{"class":94}," \u002F\u002F拷贝构造\n",[52,22664,22665],{"class":54,"line":256},[52,22666,123],{"emptyLinePlaceholder":122},[52,22668,22669],{"class":54,"line":262},[52,22670,22671],{"class":94},"    \u002F\u002FPerson newman3;\n",[52,22673,22674,22677],{"class":54,"line":268},[52,22675,22676],{"class":94},"    \u002F\u002Fnewman3 = man;",[52,22678,22679],{"class":94}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[52,22681,22682],{"class":54,"line":280},[52,22683,452],{"class":79},[52,22685,22686],{"class":54,"line":286},[52,22687,123],{"emptyLinePlaceholder":122},[52,22689,22690],{"class":54,"line":300},[52,22691,22692],{"class":94},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[52,22694,22695],{"class":54,"line":314},[52,22696,22697],{"class":94},"\u002F\u002F相当于Person p1 = p;\n",[52,22699,22700,22702,22704,22706,22708,22711],{"class":54,"line":327},[52,22701,1210],{"class":58},[52,22703,22134],{"class":75},[52,22705,1216],{"class":79},[52,22707,21694],{"class":75},[52,22709,22710],{"class":1223}," p1",[52,22712,22713],{"class":79},") {}\n",[52,22715,22716,22718,22720],{"class":54,"line":333},[52,22717,1210],{"class":58},[52,22719,8622],{"class":75},[52,22721,13501],{"class":79},[52,22723,22724,22726],{"class":54,"line":360},[52,22725,21252],{"class":79},[52,22727,22728],{"class":94}," \u002F\u002F无参构造函数\n",[52,22730,22731,22733],{"class":54,"line":365},[52,22732,22184],{"class":75},[52,22734,22187],{"class":79},[52,22736,22737],{"class":54,"line":371},[52,22738,452],{"class":79},[52,22740,22741],{"class":54,"line":400},[52,22742,123],{"emptyLinePlaceholder":122},[52,22744,22745],{"class":54,"line":405},[52,22746,22747],{"class":94},"\u002F\u002F3. 以值方式返回局部对象\n",[52,22749,22750,22752,22754],{"class":54,"line":411},[52,22751,21694],{"class":75},[52,22753,22203],{"class":75},[52,22755,248],{"class":79},[52,22757,22758],{"class":54,"line":424},[52,22759,110],{"class":79},[52,22761,22762],{"class":54,"line":436},[52,22763,21684],{"class":79},[52,22765,22766,22768,22770,22772,22774,22776,22778,22780,22783,22785],{"class":54,"line":449},[52,22767,1234],{"class":79},[52,22769,339],{"class":58},[52,22771,682],{"class":79},[52,22773,242],{"class":58},[52,22775,872],{"class":58},[52,22777,2283],{"class":79},[52,22779,1433],{"class":58},[52,22781,22782],{"class":79},"p1 ",[52,22784,339],{"class":58},[52,22786,1264],{"class":79},[52,22788,22789,22791],{"class":54,"line":2160},[52,22790,1441],{"class":58},[52,22792,22793],{"class":79}," p1;\n",[52,22795,22796],{"class":54,"line":2186},[52,22797,452],{"class":79},[52,22799,22800],{"class":54,"line":2209},[52,22801,123],{"emptyLinePlaceholder":122},[52,22803,22804,22806,22808],{"class":54,"line":2233},[52,22805,1210],{"class":58},[52,22807,8694],{"class":75},[52,22809,248],{"class":79},[52,22811,22812],{"class":54,"line":2238},[52,22813,110],{"class":79},[52,22815,22816,22818,22820,22822],{"class":54,"line":2243},[52,22817,22269],{"class":79},[52,22819,292],{"class":58},[52,22821,22203],{"class":75},[52,22823,8601],{"class":79},[52,22825,22826,22828,22830,22832,22834,22836,22838,22840,22842,22844],{"class":54,"line":2248},[52,22827,1234],{"class":79},[52,22829,339],{"class":58},[52,22831,682],{"class":79},[52,22833,242],{"class":58},[52,22835,872],{"class":58},[52,22837,2283],{"class":79},[52,22839,1433],{"class":58},[52,22841,14096],{"class":79},[52,22843,339],{"class":58},[52,22845,1264],{"class":79},[52,22847,22848],{"class":54,"line":2257},[52,22849,452],{"class":79},[52,22851,22852],{"class":54,"line":2262},[52,22853,123],{"emptyLinePlaceholder":122},[52,22855,22856],{"class":54,"line":2268},[52,22857,123],{"emptyLinePlaceholder":122},[52,22859,22860,22862,22864],{"class":54,"line":2297},[52,22861,242],{"class":58},[52,22863,245],{"class":75},[52,22865,13501],{"class":79},[52,22867,22868],{"class":54,"line":2303},[52,22869,123],{"emptyLinePlaceholder":122},[52,22871,22872],{"class":54,"line":2318},[52,22873,22874],{"class":94},"    \u002F\u002Ftest01();\n",[52,22876,22877],{"class":54,"line":2324},[52,22878,22879],{"class":94},"    \u002F\u002Ftest02();\n",[52,22881,22882,22884],{"class":54,"line":2353},[52,22883,22339],{"class":75},[52,22885,8601],{"class":79},[52,22887,22888],{"class":54,"line":2362},[52,22889,123],{"emptyLinePlaceholder":122},[52,22891,22892,22894,22896,22898],{"class":54,"line":2368},[52,22893,5313],{"class":75},[52,22895,1216],{"class":79},[52,22897,5318],{"class":62},[52,22899,2737],{"class":79},[52,22901,22902],{"class":54,"line":2376},[52,22903,123],{"emptyLinePlaceholder":122},[52,22905,22906,22908,22910],{"class":54,"line":2381},[52,22907,1441],{"class":58},[52,22909,1444],{"class":308},[52,22911,80],{"class":79},[52,22913,22914],{"class":54,"line":19252},[52,22915,452],{"class":79},[3195,22917,22919],{"id":22918},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,22921,22922],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,22924,22925],{},"1．默认构造函数(无参，函数体为空)",[14,22927,22928],{},"2．默认析构函数(无参，函数体为空)",[14,22930,22931],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,22933,22934],{},"构造函数调用规则如下：",[29,22936,22937,22940],{},[32,22938,22939],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[32,22941,22942],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[42,22944,22946],{"className":44,"code":22945,"language":46,"meta":47,"style":47},"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",[49,22947,22948,22956,22960,22965,22971,22983,22987,22992,23004,23013,23025,23029,23033,23049,23058,23070,23074,23078,23084,23096,23100,23104,23110,23114,23118,23126,23130,23142,23147,23155,23159,23177,23181,23185,23193,23197,23202,23210,23225,23238,23242,23247,23254,23270,23283,23287,23291,23299,23303,23309,23313,23323,23327,23335],{"__ignoreMap":47},[52,22949,22950,22952,22954],{"class":54,"line":55},[52,22951,17342],{"class":58},[52,22953,18217],{"class":75},[52,22955,18220],{"class":79},[52,22957,22958],{"class":54,"line":66},[52,22959,17364],{"class":58},[52,22961,22962],{"class":54,"line":83},[52,22963,22964],{"class":94},"    \u002F\u002F无参（默认）构造函数\n",[52,22966,22967,22969],{"class":54,"line":91},[52,22968,21167],{"class":75},[52,22970,13501],{"class":79},[52,22972,22973,22975,22977,22979,22981],{"class":54,"line":98},[52,22974,2113],{"class":79},[52,22976,339],{"class":58},[52,22978,22458],{"class":62},[52,22980,1247],{"class":58},[52,22982,1264],{"class":79},[52,22984,22985],{"class":54,"line":107},[52,22986,616],{"class":79},[52,22988,22989],{"class":54,"line":113},[52,22990,22991],{"class":94},"    \u002F\u002F有参构造函数\n",[52,22993,22994,22996,22998,23000,23002],{"class":54,"line":119},[52,22995,21167],{"class":75},[52,22997,1216],{"class":79},[52,22999,242],{"class":58},[52,23001,4446],{"class":1223},[52,23003,15090],{"class":79},[52,23005,23006,23009,23011],{"class":54,"line":126},[52,23007,23008],{"class":79},"        age ",[52,23010,292],{"class":58},[52,23012,4480],{"class":79},[52,23014,23015,23017,23019,23021,23023],{"class":54,"line":132},[52,23016,2113],{"class":79},[52,23018,339],{"class":58},[52,23020,22498],{"class":62},[52,23022,1247],{"class":58},[52,23024,1264],{"class":79},[52,23026,23027],{"class":54,"line":138},[52,23028,616],{"class":79},[52,23030,23031],{"class":54,"line":144},[52,23032,21522],{"class":94},[52,23034,23035,23037,23039,23041,23043,23045,23047],{"class":54,"line":153},[52,23036,21167],{"class":75},[52,23038,1216],{"class":79},[52,23040,1648],{"class":58},[52,23042,18217],{"class":75},[52,23044,1433],{"class":58},[52,23046,9785],{"class":1223},[52,23048,15090],{"class":79},[52,23050,23051,23053,23055],{"class":54,"line":159},[52,23052,23008],{"class":79},[52,23054,292],{"class":58},[52,23056,23057],{"class":79}," p.age;\n",[52,23059,23060,23062,23064,23066,23068],{"class":54,"line":167},[52,23061,2113],{"class":79},[52,23063,339],{"class":58},[52,23065,22539],{"class":62},[52,23067,1247],{"class":58},[52,23069,1264],{"class":79},[52,23071,23072],{"class":54,"line":173},[52,23073,616],{"class":79},[52,23075,23076],{"class":54,"line":181},[52,23077,21195],{"class":94},[52,23079,23080,23082],{"class":54,"line":186},[52,23081,21200],{"class":75},[52,23083,13501],{"class":79},[52,23085,23086,23088,23090,23092,23094],{"class":54,"line":191},[52,23087,2113],{"class":79},[52,23089,339],{"class":58},[52,23091,22576],{"class":62},[52,23093,1247],{"class":58},[52,23095,1264],{"class":79},[52,23097,23098],{"class":54,"line":196},[52,23099,616],{"class":79},[52,23101,23102],{"class":54,"line":201},[52,23103,17364],{"class":58},[52,23105,23106,23108],{"class":54,"line":206},[52,23107,147],{"class":58},[52,23109,150],{"class":79},[52,23111,23112],{"class":54,"line":211},[52,23113,170],{"class":79},[52,23115,23116],{"class":54,"line":218},[52,23117,123],{"emptyLinePlaceholder":122},[52,23119,23120,23122,23124],{"class":54,"line":223},[52,23121,1210],{"class":58},[52,23123,8553],{"class":75},[52,23125,248],{"class":79},[52,23127,23128],{"class":54,"line":230},[52,23129,110],{"class":79},[52,23131,23132,23134,23136,23138,23140],{"class":54,"line":239},[52,23133,22079],{"class":79},[52,23135,10090],{"class":75},[52,23137,1216],{"class":79},[52,23139,309],{"class":308},[52,23141,2737],{"class":79},[52,23143,23144],{"class":54,"line":251},[52,23145,23146],{"class":94},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[52,23148,23149,23151,23153],{"class":54,"line":256},[52,23150,22079],{"class":79},[52,23152,9993],{"class":75},[52,23154,20163],{"class":79},[52,23156,23157],{"class":54,"line":262},[52,23158,123],{"emptyLinePlaceholder":122},[52,23160,23161,23163,23165,23168,23170,23173,23175],{"class":54,"line":268},[52,23162,1234],{"class":79},[52,23164,339],{"class":58},[52,23166,23167],{"class":62}," \"p2的年龄为： \"",[52,23169,1247],{"class":58},[52,23171,23172],{"class":79}," p2.age ",[52,23174,339],{"class":58},[52,23176,1264],{"class":79},[52,23178,23179],{"class":54,"line":280},[52,23180,452],{"class":79},[52,23182,23183],{"class":54,"line":286},[52,23184,123],{"emptyLinePlaceholder":122},[52,23186,23187,23189,23191],{"class":54,"line":300},[52,23188,1210],{"class":58},[52,23190,8622],{"class":75},[52,23192,248],{"class":79},[52,23194,23195],{"class":54,"line":314},[52,23196,110],{"class":79},[52,23198,23199],{"class":54,"line":327},[52,23200,23201],{"class":94},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[52,23203,23204,23207],{"class":54,"line":333},[52,23205,23206],{"class":79},"    Person p1;",[52,23208,23209],{"class":94}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[52,23211,23212,23214,23216,23218,23220,23222],{"class":54,"line":360},[52,23213,22079],{"class":79},[52,23215,9993],{"class":75},[52,23217,1216],{"class":79},[52,23219,3649],{"class":308},[52,23221,8931],{"class":79},[52,23223,23224],{"class":94}," \u002F\u002F用户提供的有参\n",[52,23226,23227,23229,23232,23235],{"class":54,"line":365},[52,23228,22079],{"class":79},[52,23230,23231],{"class":75},"p3",[52,23233,23234],{"class":79},"(p2);",[52,23236,23237],{"class":94}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[52,23239,23240],{"class":54,"line":371},[52,23241,123],{"emptyLinePlaceholder":122},[52,23243,23244],{"class":54,"line":400},[52,23245,23246],{"class":94},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[52,23248,23249,23252],{"class":54,"line":405},[52,23250,23251],{"class":79},"    Person p4;",[52,23253,23209],{"class":94},[52,23255,23256,23258,23261,23263,23265,23267],{"class":54,"line":411},[52,23257,22079],{"class":79},[52,23259,23260],{"class":75},"p5",[52,23262,1216],{"class":79},[52,23264,3649],{"class":308},[52,23266,8931],{"class":79},[52,23268,23269],{"class":94}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[52,23271,23272,23274,23277,23280],{"class":54,"line":424},[52,23273,22079],{"class":79},[52,23275,23276],{"class":75},"p6",[52,23278,23279],{"class":79},"(p5);",[52,23281,23282],{"class":94}," \u002F\u002F用户自己提供拷贝构造\n",[52,23284,23285],{"class":54,"line":436},[52,23286,452],{"class":79},[52,23288,23289],{"class":54,"line":449},[52,23290,123],{"emptyLinePlaceholder":122},[52,23292,23293,23295,23297],{"class":54,"line":2160},[52,23294,242],{"class":58},[52,23296,245],{"class":75},[52,23298,13501],{"class":79},[52,23300,23301],{"class":54,"line":2186},[52,23302,123],{"emptyLinePlaceholder":122},[52,23304,23305,23307],{"class":54,"line":2209},[52,23306,8598],{"class":75},[52,23308,8601],{"class":79},[52,23310,23311],{"class":54,"line":2233},[52,23312,123],{"emptyLinePlaceholder":122},[52,23314,23315,23317,23319,23321],{"class":54,"line":2238},[52,23316,5313],{"class":75},[52,23318,1216],{"class":79},[52,23320,5318],{"class":62},[52,23322,2737],{"class":79},[52,23324,23325],{"class":54,"line":2243},[52,23326,123],{"emptyLinePlaceholder":122},[52,23328,23329,23331,23333],{"class":54,"line":2248},[52,23330,1441],{"class":58},[52,23332,1444],{"class":308},[52,23334,80],{"class":79},[52,23336,23337],{"class":54,"line":2257},[52,23338,452],{"class":79},[3195,23340,23342],{"id":23341},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,23344,23345],{},"浅拷贝：简单的赋值拷贝操作",[14,23347,23348],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[42,23350,23352],{"className":44,"code":23351,"language":46,"meta":47,"style":47},"#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",[49,23353,23354,23360,23370,23376,23380,23384,23389,23395,23399,23412,23416,23420,23427,23431,23441,23456,23469,23473,23478,23483,23499,23503,23516,23521,23526,23531,23540,23545,23560,23564,23568,23572,23578,23582,23587,23602,23606,23617,23631,23635,23644,23648,23654,23666,23670,23678,23682,23699,23730,23738,23766,23770,23774,23782,23786,23792],{"__ignoreMap":47},[52,23355,23356,23358],{"class":54,"line":55},[52,23357,59],{"class":58},[52,23359,63],{"class":62},[52,23361,23362,23364,23366,23368],{"class":54,"line":66},[52,23363,69],{"class":58},[52,23365,72],{"class":58},[52,23367,76],{"class":75},[52,23369,80],{"class":79},[52,23371,23372,23374],{"class":54,"line":83},[52,23373,17342],{"class":58},[52,23375,17819],{"class":75},[52,23377,23378],{"class":54,"line":91},[52,23379,110],{"class":79},[52,23381,23382],{"class":54,"line":98},[52,23383,17364],{"class":58},[52,23385,23386],{"class":54,"line":107},[52,23387,23388],{"class":94},"    \u002F\u002F默认构造函数\n",[52,23390,23391,23393],{"class":54,"line":113},[52,23392,21167],{"class":75},[52,23394,248],{"class":79},[52,23396,23397],{"class":54,"line":119},[52,23398,575],{"class":79},[52,23400,23401,23403,23405,23408,23410],{"class":54,"line":126},[52,23402,717],{"class":79},[52,23404,339],{"class":58},[52,23406,23407],{"class":62},"\"默认构造函数\"",[52,23409,339],{"class":58},[52,23411,357],{"class":79},[52,23413,23414],{"class":54,"line":132},[52,23415,616],{"class":79},[52,23417,23418],{"class":54,"line":138},[52,23419,22991],{"class":94},[52,23421,23422,23424],{"class":54,"line":144},[52,23423,21200],{"class":75},[52,23425,23426],{"class":79},"(int age,int height)\n",[52,23428,23429],{"class":54,"line":153},[52,23430,575],{"class":79},[52,23432,23433,23436,23438],{"class":54,"line":159},[52,23434,23435],{"class":79},"        m_Age",[52,23437,292],{"class":58},[52,23439,23440],{"class":79},"age;\n",[52,23442,23443,23446,23448,23450,23453],{"class":54,"line":167},[52,23444,23445],{"class":79},"        m_Height",[52,23447,14365],{"class":58},[52,23449,2280],{"class":58},[52,23451,23452],{"class":79},"(height);",[52,23454,23455],{"class":94},"\u002F\u002F放到堆区\n",[52,23457,23458,23460,23462,23465,23467],{"class":54,"line":173},[52,23459,717],{"class":79},[52,23461,339],{"class":58},[52,23463,23464],{"class":62},"\"有参构造函数\"",[52,23466,339],{"class":58},[52,23468,357],{"class":79},[52,23470,23471],{"class":54,"line":181},[52,23472,616],{"class":79},[52,23474,23475],{"class":54,"line":186},[52,23476,23477],{"class":94},"    \u002F\u002F深拷贝解决上述问题\n",[52,23479,23480],{"class":54,"line":191},[52,23481,23482],{"class":94},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[52,23484,23485,23487,23489,23491,23493,23495,23497],{"class":54,"line":196},[52,23486,21167],{"class":75},[52,23488,1216],{"class":79},[52,23490,1648],{"class":58},[52,23492,18217],{"class":75},[52,23494,3061],{"class":58},[52,23496,14],{"class":1223},[52,23498,708],{"class":79},[52,23500,23501],{"class":54,"line":201},[52,23502,575],{"class":79},[52,23504,23505,23507,23509,23512,23514],{"class":54,"line":206},[52,23506,717],{"class":79},[52,23508,339],{"class":58},[52,23510,23511],{"class":62},"\"拷贝构造函数\"",[52,23513,339],{"class":58},[52,23515,357],{"class":79},[52,23517,23518],{"class":54,"line":211},[52,23519,23520],{"class":94},"        \u002F\u002F编译器默认的写如下注释部分\n",[52,23522,23523],{"class":54,"line":218},[52,23524,23525],{"class":94},"        \u002F\u002Fm_Age=p.m_Age;\n",[52,23527,23528],{"class":54,"line":223},[52,23529,23530],{"class":94},"        \u002F\u002Fm_Height=p.m_Height;\n",[52,23532,23533,23535,23537],{"class":54,"line":230},[52,23534,23435],{"class":79},[52,23536,292],{"class":58},[52,23538,23539],{"class":79},"p.m_Age;\n",[52,23541,23542],{"class":54,"line":239},[52,23543,23544],{"class":94},"        \u002F\u002F深拷贝操作\n",[52,23546,23547,23549,23551,23553,23555,23557],{"class":54,"line":251},[52,23548,23445],{"class":79},[52,23550,14365],{"class":58},[52,23552,2280],{"class":58},[52,23554,1216],{"class":79},[52,23556,3053],{"class":58},[52,23558,23559],{"class":79},"p.m_Height);\n",[52,23561,23562],{"class":54,"line":256},[52,23563,616],{"class":79},[52,23565,23566],{"class":54,"line":262},[52,23567,123],{"emptyLinePlaceholder":122},[52,23569,23570],{"class":54,"line":268},[52,23571,21195],{"class":94},[52,23573,23574,23576],{"class":54,"line":280},[52,23575,21200],{"class":75},[52,23577,248],{"class":79},[52,23579,23580],{"class":54,"line":286},[52,23581,575],{"class":79},[52,23583,23584],{"class":54,"line":300},[52,23585,23586],{"class":94},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[52,23588,23589,23591,23594,23597,23600],{"class":54,"line":314},[52,23590,5497],{"class":58},[52,23592,23593],{"class":79},"(m_Height ",[52,23595,23596],{"class":58},"!=",[52,23598,23599],{"class":308}," NULL",[52,23601,708],{"class":79},[52,23603,23604],{"class":54,"line":327},[52,23605,1958],{"class":79},[52,23607,23608,23611,23614],{"class":54,"line":333},[52,23609,23610],{"class":58},"            delete",[52,23612,23613],{"class":79}," m_Height;",[52,23615,23616],{"class":94}," \u002F\u002F释放堆区内存\n",[52,23618,23619,23622,23624,23626,23628],{"class":54,"line":360},[52,23620,23621],{"class":79},"            m_Height",[52,23623,292],{"class":58},[52,23625,2291],{"class":308},[52,23627,2010],{"class":79},[52,23629,23630],{"class":94}," \u002F\u002F防止野指针\n",[52,23632,23633],{"class":54,"line":365},[52,23634,2039],{"class":79},[52,23636,23637,23639,23641],{"class":54,"line":371},[52,23638,717],{"class":79},[52,23640,339],{"class":58},[52,23642,23643],{"class":62},"\"Person的析构函数调用\"\n",[52,23645,23646],{"class":54,"line":400},[52,23647,616],{"class":79},[52,23649,23650,23652],{"class":54,"line":405},[52,23651,147],{"class":58},[52,23653,18314],{"class":79},[52,23655,23656,23658,23660,23663],{"class":54,"line":411},[52,23657,147],{"class":58},[52,23659,872],{"class":58},[52,23661,23662],{"class":79},"m_Height;",[52,23664,23665],{"class":94}," \u002F\u002F定义一个指针，指向身高\n",[52,23667,23668],{"class":54,"line":424},[52,23669,170],{"class":79},[52,23671,23672,23674,23676],{"class":54,"line":436},[52,23673,1210],{"class":58},[52,23675,8553],{"class":75},[52,23677,248],{"class":79},[52,23679,23680],{"class":54,"line":449},[52,23681,110],{"class":79},[52,23683,23684,23686,23688,23690,23692,23694,23697],{"class":54,"line":2160},[52,23685,22079],{"class":79},[52,23687,10090],{"class":75},[52,23689,1216],{"class":79},[52,23691,309],{"class":308},[52,23693,389],{"class":79},[52,23695,23696],{"class":308},"160",[52,23698,2737],{"class":79},[52,23700,23701,23703,23705,23708,23710,23713,23715,23718,23720,23723,23725,23727],{"class":54,"line":2186},[52,23702,336],{"class":79},[52,23704,339],{"class":58},[52,23706,23707],{"class":62},"\"p1的年龄为:\"",[52,23709,339],{"class":58},[52,23711,23712],{"class":79},"p1.m_Age",[52,23714,339],{"class":58},[52,23716,23717],{"class":62},"\"身高为：\"",[52,23719,9382],{"class":58},[52,23721,23722],{"class":79},"p1.m_Height",[52,23724,339],{"class":58},[52,23726,4290],{"class":79},[52,23728,23729],{"class":94},"  \u002F\u002F18\n",[52,23731,23732,23734,23736],{"class":54,"line":2209},[52,23733,22079],{"class":79},[52,23735,9993],{"class":75},[52,23737,20163],{"class":79},[52,23739,23740,23742,23744,23747,23749,23751,23753,23755,23757,23760,23762,23764],{"class":54,"line":2233},[52,23741,336],{"class":79},[52,23743,339],{"class":58},[52,23745,23746],{"class":62},"\"p2的年龄为：\"",[52,23748,339],{"class":58},[52,23750,22109],{"class":79},[52,23752,339],{"class":58},[52,23754,23717],{"class":62},[52,23756,9382],{"class":58},[52,23758,23759],{"class":79},"p2.m_Height",[52,23761,339],{"class":58},[52,23763,4290],{"class":79},[52,23765,23729],{"class":94},[52,23767,23768],{"class":54,"line":2238},[52,23769,15858],{"class":79},[52,23771,23772],{"class":54,"line":2243},[52,23773,452],{"class":79},[52,23775,23776,23778,23780],{"class":54,"line":2248},[52,23777,242],{"class":58},[52,23779,245],{"class":75},[52,23781,248],{"class":79},[52,23783,23784],{"class":54,"line":2257},[52,23785,110],{"class":79},[52,23787,23788,23790],{"class":54,"line":2262},[52,23789,8598],{"class":75},[52,23791,8601],{"class":79},[52,23793,23794],{"class":54,"line":2268},[52,23795,452],{"class":79},[14,23797,23798],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,23800,23801],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,23803,23804],{},[4509,23805],{"alt":47,"src":23806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,23808,23809],{},"浅拷贝问题要使用深拷贝来解决",[14,23811,23812],{},[4509,23813],{"alt":47,"src":23814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,23816,23817],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[3195,23819,23821],{"id":23820},"_826初始化列表","8.2.6初始化列表",[14,23823,23824],{},"作用：初始化属性",[14,23826,8148],{},[42,23828,23831],{"className":23829,"code":23830,"language":8154},[8152],"构造函数():属性1(值1),属性2(值2).....{}\n",[49,23832,23830],{"__ignoreMap":47},[14,23834,23835],{},"例子",[42,23837,23839],{"className":44,"code":23838,"language":46,"meta":47,"style":47},"#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",[49,23840,23841,23847,23857,23863,23867,23872,23876,23881,23886,23891,23896,23901,23906,23910,23915,23920,23963,23972,23990,24008,24026,24030,24034,24041,24048,24055,24059,24063,24071,24075,24079,24099,24108,24112,24116,24126,24130,24138],{"__ignoreMap":47},[52,23842,23843,23845],{"class":54,"line":55},[52,23844,59],{"class":58},[52,23846,63],{"class":62},[52,23848,23849,23851,23853,23855],{"class":54,"line":66},[52,23850,69],{"class":58},[52,23852,72],{"class":58},[52,23854,76],{"class":75},[52,23856,80],{"class":79},[52,23858,23859,23861],{"class":54,"line":83},[52,23860,17342],{"class":58},[52,23862,17819],{"class":75},[52,23864,23865],{"class":54,"line":91},[52,23866,110],{"class":79},[52,23868,23869],{"class":54,"line":98},[52,23870,23871],{"class":58},"    public:\n",[52,23873,23874],{"class":54,"line":107},[52,23875,123],{"emptyLinePlaceholder":122},[52,23877,23878],{"class":54,"line":113},[52,23879,23880],{"class":94},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[52,23882,23883],{"class":54,"line":119},[52,23884,23885],{"class":94},"    \u002F\u002FPerson(int a, int b, int c) {\n",[52,23887,23888],{"class":54,"line":126},[52,23889,23890],{"class":94},"    \u002F\u002F  m_A = a;\n",[52,23892,23893],{"class":54,"line":132},[52,23894,23895],{"class":94},"    \u002F\u002F  m_B = b;\n",[52,23897,23898],{"class":54,"line":138},[52,23899,23900],{"class":94},"    \u002F\u002F  m_C = c;\n",[52,23902,23903],{"class":54,"line":144},[52,23904,23905],{"class":94},"    \u002F\u002F}\n",[52,23907,23908],{"class":54,"line":153},[52,23909,123],{"emptyLinePlaceholder":122},[52,23911,23912],{"class":54,"line":159},[52,23913,23914],{"class":94},"    \u002F\u002F初始化列表方式初始化\n",[52,23916,23917],{"class":54,"line":167},[52,23918,23919],{"class":94},"    \u002F\u002F使用有参构造函数\n",[52,23921,23922,23924,23926,23928,23930,23932,23934,23936,23938,23940,23942,23945,23948,23951,23954,23957,23960],{"class":54,"line":173},[52,23923,21167],{"class":75},[52,23925,1216],{"class":79},[52,23927,242],{"class":58},[52,23929,4446],{"class":1223},[52,23931,15083],{"class":79},[52,23933,242],{"class":58},[52,23935,5822],{"class":1223},[52,23937,15083],{"class":79},[52,23939,242],{"class":58},[52,23941,5838],{"class":1223},[52,23943,23944],{"class":79},") :",[52,23946,23947],{"class":75},"m_A",[52,23949,23950],{"class":79},"(a), ",[52,23952,23953],{"class":75},"m_B",[52,23955,23956],{"class":79},"(b), ",[52,23958,23959],{"class":75},"m_C",[52,23961,23962],{"class":79},"(c) {}\n",[52,23964,23965,23967,23970],{"class":54,"line":181},[52,23966,17557],{"class":58},[52,23968,23969],{"class":75}," PrintPerson",[52,23971,13501],{"class":79},[52,23973,23974,23976,23978,23981,23983,23986,23988],{"class":54,"line":186},[52,23975,2113],{"class":79},[52,23977,339],{"class":58},[52,23979,23980],{"class":62}," \"mA:\"",[52,23982,1247],{"class":58},[52,23984,23985],{"class":79}," m_A ",[52,23987,339],{"class":58},[52,23989,1264],{"class":79},[52,23991,23992,23994,23996,23999,24001,24004,24006],{"class":54,"line":191},[52,23993,2113],{"class":79},[52,23995,339],{"class":58},[52,23997,23998],{"class":62}," \"mB:\"",[52,24000,1247],{"class":58},[52,24002,24003],{"class":79}," m_B ",[52,24005,339],{"class":58},[52,24007,1264],{"class":79},[52,24009,24010,24012,24014,24017,24019,24022,24024],{"class":54,"line":196},[52,24011,2113],{"class":79},[52,24013,339],{"class":58},[52,24015,24016],{"class":62}," \"mC:\"",[52,24018,1247],{"class":58},[52,24020,24021],{"class":79}," m_C ",[52,24023,339],{"class":58},[52,24025,1264],{"class":79},[52,24027,24028],{"class":54,"line":201},[52,24029,616],{"class":79},[52,24031,24032],{"class":54,"line":206},[52,24033,17870],{"class":58},[52,24035,24036,24038],{"class":54,"line":211},[52,24037,147],{"class":58},[52,24039,24040],{"class":79}," m_A;\n",[52,24042,24043,24045],{"class":54,"line":218},[52,24044,147],{"class":58},[52,24046,24047],{"class":79}," m_B;\n",[52,24049,24050,24052],{"class":54,"line":223},[52,24051,147],{"class":58},[52,24053,24054],{"class":79}," m_C;\n",[52,24056,24057],{"class":54,"line":230},[52,24058,170],{"class":79},[52,24060,24061],{"class":54,"line":239},[52,24062,123],{"emptyLinePlaceholder":122},[52,24064,24065,24067,24069],{"class":54,"line":251},[52,24066,242],{"class":58},[52,24068,245],{"class":75},[52,24070,1038],{"class":79},[52,24072,24073],{"class":54,"line":256},[52,24074,110],{"class":79},[52,24076,24077],{"class":54,"line":262},[52,24078,123],{"emptyLinePlaceholder":122},[52,24080,24081,24083,24085,24087,24089,24091,24093,24095,24097],{"class":54,"line":268},[52,24082,22079],{"class":79},[52,24084,14],{"class":75},[52,24086,1216],{"class":79},[52,24088,629],{"class":308},[52,24090,15083],{"class":79},[52,24092,564],{"class":308},[52,24094,15083],{"class":79},[52,24096,2313],{"class":308},[52,24098,2737],{"class":79},[52,24100,24101,24103,24106],{"class":54,"line":280},[52,24102,18514],{"class":79},[52,24104,24105],{"class":75},"PrintPerson",[52,24107,8601],{"class":79},[52,24109,24110],{"class":54,"line":286},[52,24111,123],{"emptyLinePlaceholder":122},[52,24113,24114],{"class":54,"line":300},[52,24115,123],{"emptyLinePlaceholder":122},[52,24117,24118,24120,24122,24124],{"class":54,"line":314},[52,24119,5313],{"class":75},[52,24121,1216],{"class":79},[52,24123,5318],{"class":62},[52,24125,2737],{"class":79},[52,24127,24128],{"class":54,"line":327},[52,24129,123],{"emptyLinePlaceholder":122},[52,24131,24132,24134,24136],{"class":54,"line":333},[52,24133,1441],{"class":58},[52,24135,1444],{"class":308},[52,24137,80],{"class":79},[52,24139,24140],{"class":54,"line":360},[52,24141,452],{"class":79},[14,24143,24144,24145,24148,24149],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2389,24146,24147],{},"参数名就是定义的对象属性","，",[2389,24150,24151],{},"属性后面的值为有参构造函数的形参",[42,24153,24155],{"className":44,"code":24154,"language":46,"meta":47,"style":47},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[49,24156,24157],{"__ignoreMap":47},[52,24158,24159,24161,24163,24165,24168,24170,24173,24175,24178,24180,24183,24185,24188,24190],{"class":54,"line":55},[52,24160,21694],{"class":75},[52,24162,1216],{"class":79},[52,24164,242],{"class":58},[52,24166,24167],{"class":79}," a.",[52,24169,242],{"class":58},[52,24171,24172],{"class":79}," b,",[52,24174,242],{"class":58},[52,24176,24177],{"class":79}," b):",[52,24179,23947],{"class":75},[52,24181,24182],{"class":79},"(a),",[52,24184,23953],{"class":75},[52,24186,24187],{"class":79},"(c),",[52,24189,23959],{"class":75},[52,24191,24192],{"class":79},"(b) {}\n",[3195,24194,24196],{"id":24195},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,24198,24199],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,24201,17281],{},[42,24203,24205],{"className":44,"code":24204,"language":46,"meta":47,"style":47},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[49,24206,24207,24212,24217,24221,24226,24230],{"__ignoreMap":47},[52,24208,24209],{"class":54,"line":55},[52,24210,24211],{"class":79},"A{};\n",[52,24213,24214],{"class":54,"line":66},[52,24215,24216],{"class":79},"B\n",[52,24218,24219],{"class":54,"line":83},[52,24220,110],{"class":79},[52,24222,24223],{"class":54,"line":91},[52,24224,24225],{"class":79},"    A a;\n",[52,24227,24228],{"class":54,"line":98},[52,24229,452],{"class":79},[52,24231,24232],{"class":54,"line":107},[52,24233,24234],{"class":94},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,24236,24237],{},"案例",[42,24239,24241],{"className":44,"code":24240,"language":46,"meta":47,"style":47},"\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",[49,24242,24243,24248,24255,24259,24264,24269,24283,24287,24297,24308,24312,24319,24323,24336,24340,24345,24350,24354,24360,24364,24368,24372,24403,24407,24418,24422,24428,24432,24445,24449,24453,24457,24462,24467,24471,24479,24483,24500,24519,24523,24531,24535,24541],{"__ignoreMap":47},[52,24244,24245],{"class":54,"line":55},[52,24246,24247],{"class":94},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[52,24249,24250,24252],{"class":54,"line":66},[52,24251,17342],{"class":58},[52,24253,24254],{"class":75}," Phone\n",[52,24256,24257],{"class":54,"line":83},[52,24258,110],{"class":79},[52,24260,24261],{"class":54,"line":91},[52,24262,24263],{"class":79},"public：\n",[52,24265,24266],{"class":54,"line":98},[52,24267,24268],{"class":94},"    \u002F\u002F 赋值(构造函数)\n",[52,24270,24271,24274,24276,24278,24281],{"class":54,"line":107},[52,24272,24273],{"class":75},"    Phone",[52,24275,1216],{"class":79},[52,24277,17565],{"class":75},[52,24279,24280],{"class":1223}," pName",[52,24282,708],{"class":79},[52,24284,24285],{"class":54,"line":113},[52,24286,575],{"class":79},[52,24288,24289,24292,24294],{"class":54,"line":119},[52,24290,24291],{"class":79},"        m_pName",[52,24293,292],{"class":58},[52,24295,24296],{"class":79},"pName;\n",[52,24298,24299,24301,24303,24306],{"class":54,"line":126},[52,24300,717],{"class":79},[52,24302,339],{"class":58},[52,24304,24305],{"class":62},"\"Phone的构造函数调用\"",[52,24307,80],{"class":79},[52,24309,24310],{"class":54,"line":132},[52,24311,616],{"class":79},[52,24313,24314,24317],{"class":54,"line":138},[52,24315,24316],{"class":75},"    ~Phone",[52,24318,248],{"class":79},[52,24320,24321],{"class":54,"line":144},[52,24322,575],{"class":79},[52,24324,24325,24327,24329,24332,24334],{"class":54,"line":153},[52,24326,717],{"class":79},[52,24328,339],{"class":58},[52,24330,24331],{"class":62},"\"Phone析构函数调用\"",[52,24333,339],{"class":58},[52,24335,357],{"class":79},[52,24337,24338],{"class":54,"line":159},[52,24339,616],{"class":79},[52,24341,24342],{"class":54,"line":167},[52,24343,24344],{"class":94},"    \u002F\u002F\n",[52,24346,24347],{"class":54,"line":173},[52,24348,24349],{"class":79},"    string m_PName;\n",[52,24351,24352],{"class":54,"line":181},[52,24353,170],{"class":79},[52,24355,24356,24358],{"class":54,"line":186},[52,24357,17342],{"class":58},[52,24359,17819],{"class":75},[52,24361,24362],{"class":54,"line":191},[52,24363,110],{"class":79},[52,24365,24366],{"class":54,"line":196},[52,24367,17364],{"class":58},[52,24369,24370],{"class":54,"line":201},[52,24371,19642],{"class":94},[52,24373,24374,24376,24378,24380,24382,24384,24386,24389,24392,24394,24397,24400],{"class":54,"line":206},[52,24375,21167],{"class":75},[52,24377,1216],{"class":79},[52,24379,17565],{"class":75},[52,24381,17568],{"class":1223},[52,24383,389],{"class":79},[52,24385,17565],{"class":75},[52,24387,24388],{"class":1223}," pname",[52,24390,24391],{"class":79},"):",[52,24393,17658],{"class":75},[52,24395,24396],{"class":79},"(name),m_phone.",[52,24398,24399],{"class":75},"m_PName",[52,24401,24402],{"class":79},"(pname) \n",[52,24404,24405],{"class":54,"line":211},[52,24406,575],{"class":79},[52,24408,24409,24411,24413,24416],{"class":54,"line":218},[52,24410,717],{"class":79},[52,24412,339],{"class":58},[52,24414,24415],{"class":62},"\"Person的构造函数调用\"",[52,24417,80],{"class":79},[52,24419,24420],{"class":54,"line":223},[52,24421,616],{"class":79},[52,24423,24424,24426],{"class":54,"line":230},[52,24425,21200],{"class":75},[52,24427,248],{"class":79},[52,24429,24430],{"class":54,"line":239},[52,24431,575],{"class":79},[52,24433,24434,24436,24438,24441,24443],{"class":54,"line":251},[52,24435,717],{"class":79},[52,24437,339],{"class":58},[52,24439,24440],{"class":62},"\"Person析构函数调用\"",[52,24442,339],{"class":58},[52,24444,357],{"class":79},[52,24446,24447],{"class":54,"line":256},[52,24448,616],{"class":79},[52,24450,24451],{"class":54,"line":262},[52,24452,129],{"class":94},[52,24454,24455],{"class":54,"line":268},[52,24456,17540],{"class":79},[52,24458,24459],{"class":54,"line":280},[52,24460,24461],{"class":94},"    \u002F\u002F手机\n",[52,24463,24464],{"class":54,"line":286},[52,24465,24466],{"class":79},"    Phone m_Phone;\n",[52,24468,24469],{"class":54,"line":300},[52,24470,170],{"class":79},[52,24472,24473,24475,24477],{"class":54,"line":314},[52,24474,1210],{"class":58},[52,24476,8553],{"class":75},[52,24478,248],{"class":79},[52,24480,24481],{"class":54,"line":327},[52,24482,110],{"class":79},[52,24484,24485,24487,24489,24491,24493,24495,24498],{"class":54,"line":333},[52,24486,22079],{"class":79},[52,24488,14],{"class":75},[52,24490,1216],{"class":79},[52,24492,295],{"class":62},[52,24494,389],{"class":79},[52,24496,24497],{"class":62},"\"安卓\"",[52,24499,2737],{"class":79},[52,24501,24502,24504,24506,24509,24511,24514,24516],{"class":54,"line":360},[52,24503,336],{"class":79},[52,24505,339],{"class":58},[52,24507,24508],{"class":79},"p.Name",[52,24510,339],{"class":58},[52,24512,24513],{"class":62},"\"拿着：\"",[52,24515,339],{"class":58},[52,24517,24518],{"class":79},"p.m_phone.m_PName;\n",[52,24520,24521],{"class":54,"line":365},[52,24522,452],{"class":79},[52,24524,24525,24527,24529],{"class":54,"line":371},[52,24526,242],{"class":58},[52,24528,245],{"class":75},[52,24530,248],{"class":79},[52,24532,24533],{"class":54,"line":400},[52,24534,110],{"class":79},[52,24536,24537,24539],{"class":54,"line":405},[52,24538,8598],{"class":75},[52,24540,8601],{"class":79},[52,24542,24543],{"class":54,"line":411},[52,24544,452],{"class":79},[14,24546,1453],{},[42,24548,24550],{"className":44,"code":24549,"language":46,"meta":47,"style":47},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[49,24551,24552,24557],{"__ignoreMap":47},[52,24553,24554],{"class":54,"line":55},[52,24555,24556],{"class":94},"    \u002F\u002F不需要写这个：\n",[52,24558,24559],{"class":54,"line":66},[52,24560,24561],{"class":94},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,24563,24564],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[42,24566,24568],{"className":44,"code":24567,"language":46,"meta":47,"style":47},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[49,24569,24570],{"__ignoreMap":47},[52,24571,24572,24574,24577,24579,24582,24585],{"class":54,"line":55},[52,24573,21694],{"class":75},[52,24575,24576],{"class":79},"(string name.string pname):",[52,24578,17658],{"class":75},[52,24580,24581],{"class":79},"(name),",[52,24583,24584],{"class":75},"m_phone",[52,24586,24587],{"class":79},"(pname) {}\n",[14,24589,24590,24591,292,24594],{},"采用的是隐式转换法，实际为如下：\n",[49,24592,24593],{},"m_phone(pname)",[49,24595,24596],{},"Phone m_phone=pname",[14,24598,24599,24602],{},[2389,24600,24601],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,24604,24605],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[3195,24607,24609],{"id":24608},"_828静态对象","8.2.8静态对象",[14,24611,24612],{},"静态对象在成员对象前static，称为静态对象",[14,24614,24615],{},"静态对象分为两类：",[1696,24617,24618],{},[32,24619,24620],{},"静态成员变量",[29,24622,24623,24626,24629],{},[32,24624,24625],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[32,24627,24628],{},"②在编译阶段分配内存",[32,24630,24631],{},"③类内声明，类外初始化",[1696,24633,24634],{"start":66},[32,24635,24636],{},"静态成员函数",[29,24638,24639,24642],{},[32,24640,24641],{},"①所有对象共享同一个函数",[32,24643,24644],{},"②静态成员函数只能访问静态成员变量",[24646,24647,24649],"h4",{"id":24648},"_8281静态成员变量","8.2.8.1静态成员变量",[42,24651,24653],{"className":44,"code":24652,"language":46,"meta":47,"style":47},"#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",[49,24654,24655,24661,24671,24677,24681,24685,24690,24695,24700,24708,24712,24716,24720,24728,24732,24736,24741,24754,24758,24766,24770,24776],{"__ignoreMap":47},[52,24656,24657,24659],{"class":54,"line":55},[52,24658,59],{"class":58},[52,24660,63],{"class":62},[52,24662,24663,24665,24667,24669],{"class":54,"line":66},[52,24664,69],{"class":58},[52,24666,72],{"class":58},[52,24668,76],{"class":75},[52,24670,80],{"class":79},[52,24672,24673,24675],{"class":54,"line":83},[52,24674,17342],{"class":58},[52,24676,17819],{"class":75},[52,24678,24679],{"class":54,"line":91},[52,24680,110],{"class":79},[52,24682,24683],{"class":54,"line":98},[52,24684,17364],{"class":58},[52,24686,24687],{"class":54,"line":107},[52,24688,24689],{"class":94},"    \u002F\u002F非静态成员变量\n",[52,24691,24692],{"class":54,"line":113},[52,24693,24694],{"class":94},"    \u002F\u002F int m_A;\n",[52,24696,24697],{"class":54,"line":119},[52,24698,24699],{"class":94},"    \u002F\u002F定义静态成员变量\n",[52,24701,24702,24704,24706],{"class":54,"line":126},[52,24703,13668],{"class":58},[52,24705,2280],{"class":58},[52,24707,24040],{"class":79},[52,24709,24710],{"class":54,"line":132},[52,24711,123],{"emptyLinePlaceholder":122},[52,24713,24714],{"class":54,"line":138},[52,24715,123],{"emptyLinePlaceholder":122},[52,24717,24718],{"class":54,"line":144},[52,24719,170],{"class":79},[52,24721,24722,24724,24726],{"class":54,"line":153},[52,24723,1210],{"class":58},[52,24725,8553],{"class":75},[52,24727,248],{"class":79},[52,24729,24730],{"class":54,"line":159},[52,24731,110],{"class":79},[52,24733,24734],{"class":54,"line":167},[52,24735,17961],{"class":79},[52,24737,24738],{"class":54,"line":173},[52,24739,24740],{"class":94},"    \u002F\u002F输出类成员变量这块内存\n",[52,24742,24743,24745,24747,24750,24752],{"class":54,"line":181},[52,24744,336],{"class":79},[52,24746,339],{"class":58},[52,24748,24749],{"class":79},"p.m_A",[52,24751,339],{"class":58},[52,24753,357],{"class":79},[52,24755,24756],{"class":54,"line":186},[52,24757,452],{"class":79},[52,24759,24760,24762,24764],{"class":54,"line":191},[52,24761,242],{"class":58},[52,24763,245],{"class":75},[52,24765,248],{"class":79},[52,24767,24768],{"class":54,"line":196},[52,24769,110],{"class":79},[52,24771,24772,24774],{"class":54,"line":201},[52,24773,8598],{"class":75},[52,24775,248],{"class":79},[52,24777,24778],{"class":54,"line":206},[52,24779,452],{"class":79},[14,24781,24782],{},"此时输出是报错的：无法解析外部命令",[14,24784,24785],{},"解决这一问题：必须用到类内声明，类外初始化操作",[42,24787,24789],{"className":44,"code":24788,"language":46,"meta":47,"style":47},"#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",[49,24790,24791,24797,24807,24813,24817,24821,24826,24834,24838,24843,24858,24866,24870,24874,24879,24884,24896,24901,24912,24917,24922,24935,24939,24947,24951,24957],{"__ignoreMap":47},[52,24792,24793,24795],{"class":54,"line":55},[52,24794,59],{"class":58},[52,24796,63],{"class":62},[52,24798,24799,24801,24803,24805],{"class":54,"line":66},[52,24800,69],{"class":58},[52,24802,72],{"class":58},[52,24804,76],{"class":75},[52,24806,80],{"class":79},[52,24808,24809,24811],{"class":54,"line":83},[52,24810,17342],{"class":58},[52,24812,17819],{"class":75},[52,24814,24815],{"class":54,"line":91},[52,24816,110],{"class":79},[52,24818,24819],{"class":54,"line":98},[52,24820,17364],{"class":58},[52,24822,24823],{"class":54,"line":107},[52,24824,24825],{"class":94},"    \u002F\u002F类内声明\n",[52,24827,24828,24830,24832],{"class":54,"line":113},[52,24829,13668],{"class":58},[52,24831,2280],{"class":58},[52,24833,24040],{"class":79},[52,24835,24836],{"class":54,"line":119},[52,24837,170],{"class":79},[52,24839,24840],{"class":54,"line":126},[52,24841,24842],{"class":94},"\u002F\u002F类外初始化\n",[52,24844,24845,24847,24849,24852,24854,24856],{"class":54,"line":132},[52,24846,242],{"class":58},[52,24848,18217],{"class":75},[52,24850,24851],{"class":79},"::m_A",[52,24853,292],{"class":58},[52,24855,3649],{"class":308},[52,24857,80],{"class":79},[52,24859,24860,24862,24864],{"class":54,"line":138},[52,24861,1210],{"class":58},[52,24863,8553],{"class":75},[52,24865,248],{"class":79},[52,24867,24868],{"class":54,"line":144},[52,24869,110],{"class":79},[52,24871,24872],{"class":54,"line":153},[52,24873,17961],{"class":79},[52,24875,24876],{"class":54,"line":159},[52,24877,24878],{"class":94},"    \u002F\u002F访问变量的原内存空间\n",[52,24880,24881],{"class":54,"line":167},[52,24882,24883],{"class":94},"    \u002F\u002F100\n",[52,24885,24886,24888,24890,24892,24894],{"class":54,"line":173},[52,24887,336],{"class":79},[52,24889,339],{"class":58},[52,24891,24749],{"class":79},[52,24893,339],{"class":58},[52,24895,357],{"class":79},[52,24897,24898],{"class":54,"line":181},[52,24899,24900],{"class":79},"    Person p2;\n",[52,24902,24903,24906,24908,24910],{"class":54,"line":186},[52,24904,24905],{"class":79},"    p2.m_A",[52,24907,292],{"class":58},[52,24909,856],{"class":308},[52,24911,80],{"class":79},[52,24913,24914],{"class":54,"line":191},[52,24915,24916],{"class":94},"    \u002F\u002F继续访问这片空间\n",[52,24918,24919],{"class":54,"line":196},[52,24920,24921],{"class":94},"    \u002F\u002F200\n",[52,24923,24924,24926,24928,24931,24933],{"class":54,"line":201},[52,24925,336],{"class":79},[52,24927,339],{"class":58},[52,24929,24930],{"class":79},"p2.m_A",[52,24932,339],{"class":58},[52,24934,357],{"class":79},[52,24936,24937],{"class":54,"line":206},[52,24938,452],{"class":79},[52,24940,24941,24943,24945],{"class":54,"line":211},[52,24942,242],{"class":58},[52,24944,245],{"class":75},[52,24946,248],{"class":79},[52,24948,24949],{"class":54,"line":218},[52,24950,110],{"class":79},[52,24952,24953,24955],{"class":54,"line":223},[52,24954,8598],{"class":75},[52,24956,8601],{"class":79},[52,24958,24959],{"class":54,"line":230},[52,24960,452],{"class":79},[14,24962,24963],{},[2389,24964,24965],{},"静态变量的访问",[42,24967,24969],{"className":44,"code":24968,"language":46,"meta":47,"style":47},"#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",[49,24970,24971,24977,24987,24993,24997,25001,25005,25013,25017,25022,25030,25034,25038,25052,25067,25075,25079,25084,25089,25094,25099,25111,25116,25121,25135,25152,25156,25164,25168,25174],{"__ignoreMap":47},[52,24972,24973,24975],{"class":54,"line":55},[52,24974,59],{"class":58},[52,24976,63],{"class":62},[52,24978,24979,24981,24983,24985],{"class":54,"line":66},[52,24980,69],{"class":58},[52,24982,72],{"class":58},[52,24984,76],{"class":75},[52,24986,80],{"class":79},[52,24988,24989,24991],{"class":54,"line":83},[52,24990,17342],{"class":58},[52,24992,17819],{"class":75},[52,24994,24995],{"class":54,"line":91},[52,24996,110],{"class":79},[52,24998,24999],{"class":54,"line":98},[52,25000,17364],{"class":58},[52,25002,25003],{"class":54,"line":107},[52,25004,24825],{"class":94},[52,25006,25007,25009,25011],{"class":54,"line":113},[52,25008,13668],{"class":58},[52,25010,2280],{"class":58},[52,25012,24040],{"class":79},[52,25014,25015],{"class":54,"line":119},[52,25016,17870],{"class":58},[52,25018,25019],{"class":54,"line":126},[52,25020,25021],{"class":94},"    \u002F\u002F静态成员变量也是有访问权限的\n",[52,25023,25024,25026,25028],{"class":54,"line":132},[52,25025,13668],{"class":58},[52,25027,2280],{"class":58},[52,25029,24047],{"class":79},[52,25031,25032],{"class":54,"line":138},[52,25033,170],{"class":79},[52,25035,25036],{"class":54,"line":144},[52,25037,24842],{"class":94},[52,25039,25040,25042,25044,25046,25048,25050],{"class":54,"line":153},[52,25041,242],{"class":58},[52,25043,18217],{"class":75},[52,25045,24851],{"class":79},[52,25047,292],{"class":58},[52,25049,3649],{"class":308},[52,25051,80],{"class":79},[52,25053,25054,25056,25058,25061,25063,25065],{"class":54,"line":159},[52,25055,242],{"class":58},[52,25057,18217],{"class":75},[52,25059,25060],{"class":79},"::m_B",[52,25062,292],{"class":58},[52,25064,444],{"class":308},[52,25066,80],{"class":79},[52,25068,25069,25071,25073],{"class":54,"line":167},[52,25070,1210],{"class":58},[52,25072,8622],{"class":75},[52,25074,248],{"class":79},[52,25076,25077],{"class":54,"line":173},[52,25078,110],{"class":79},[52,25080,25081],{"class":54,"line":181},[52,25082,25083],{"class":94},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[52,25085,25086],{"class":54,"line":186},[52,25087,25088],{"class":94},"    \u002F\u002F静态成员变量有两种访问方式：\n",[52,25090,25091],{"class":54,"line":191},[52,25092,25093],{"class":94},"    \u002F\u002F1.通过对象进行访问\n",[52,25095,25096],{"class":54,"line":196},[52,25097,25098],{"class":79},"    Person p;  \n",[52,25100,25101,25103,25105,25107,25109],{"class":54,"line":201},[52,25102,336],{"class":79},[52,25104,339],{"class":58},[52,25106,24749],{"class":79},[52,25108,339],{"class":58},[52,25110,357],{"class":79},[52,25112,25113],{"class":54,"line":206},[52,25114,25115],{"class":94},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[52,25117,25118],{"class":54,"line":211},[52,25119,25120],{"class":94},"    \u002F\u002F2.通过类名进行访问\n",[52,25122,25123,25125,25127,25129,25131,25133],{"class":54,"line":218},[52,25124,336],{"class":79},[52,25126,339],{"class":58},[52,25128,21694],{"class":75},[52,25130,24851],{"class":79},[52,25132,339],{"class":58},[52,25134,357],{"class":79},[52,25136,25137,25139,25141,25143,25145,25147,25149],{"class":54,"line":223},[52,25138,336],{"class":79},[52,25140,339],{"class":58},[52,25142,21694],{"class":75},[52,25144,25060],{"class":79},[52,25146,339],{"class":58},[52,25148,4290],{"class":79},[52,25150,25151],{"class":94}," \u002F\u002F没有访问权限，报错\n",[52,25153,25154],{"class":54,"line":230},[52,25155,452],{"class":79},[52,25157,25158,25160,25162],{"class":54,"line":239},[52,25159,242],{"class":58},[52,25161,245],{"class":75},[52,25163,248],{"class":79},[52,25165,25166],{"class":54,"line":251},[52,25167,110],{"class":79},[52,25169,25170,25172],{"class":54,"line":256},[52,25171,8667],{"class":75},[52,25173,8601],{"class":79},[52,25175,25176],{"class":54,"line":262},[52,25177,452],{"class":79},[24646,25179,25181],{"id":25180},"_8282静态成员函数","8.2.8.2静态成员函数",[14,25183,25184],{},"1.静态成员函数定义与访问",[42,25186,25188],{"className":44,"code":25187,"language":46,"meta":47,"style":47},"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",[49,25189,25190,25196,25200,25204,25209,25220,25224,25238,25242,25246,25254,25258,25263,25268,25272,25280,25285,25295],{"__ignoreMap":47},[52,25191,25192,25194],{"class":54,"line":55},[52,25193,17342],{"class":58},[52,25195,17819],{"class":75},[52,25197,25198],{"class":54,"line":66},[52,25199,110],{"class":79},[52,25201,25202],{"class":54,"line":83},[52,25203,17364],{"class":58},[52,25205,25206],{"class":54,"line":91},[52,25207,25208],{"class":94},"    \u002F\u002F在公共权限下定义静态成员函数\n",[52,25210,25211,25213,25216,25218],{"class":54,"line":98},[52,25212,13668],{"class":58},[52,25214,25215],{"class":58}," void",[52,25217,14033],{"class":75},[52,25219,248],{"class":79},[52,25221,25222],{"class":54,"line":107},[52,25223,575],{"class":79},[52,25225,25226,25229,25231,25234,25236],{"class":54,"line":113},[52,25227,25228],{"class":79},"        coout",[52,25230,339],{"class":58},[52,25232,25233],{"class":62},"\"静态成员函数的调用\"",[52,25235,339],{"class":58},[52,25237,357],{"class":79},[52,25239,25240],{"class":54,"line":119},[52,25241,616],{"class":79},[52,25243,25244],{"class":54,"line":126},[52,25245,170],{"class":79},[52,25247,25248,25250,25252],{"class":54,"line":132},[52,25249,1210],{"class":58},[52,25251,8553],{"class":75},[52,25253,248],{"class":79},[52,25255,25256],{"class":54,"line":138},[52,25257,110],{"class":79},[52,25259,25260],{"class":54,"line":144},[52,25261,25262],{"class":94},"    \u002F\u002F静态成员函数的调用方式:\n",[52,25264,25265],{"class":54,"line":153},[52,25266,25267],{"class":94},"    \u002F\u002F1.通过对象访问\n",[52,25269,25270],{"class":54,"line":159},[52,25271,17961],{"class":79},[52,25273,25274,25276,25278],{"class":54,"line":167},[52,25275,18514],{"class":79},[52,25277,14199],{"class":75},[52,25279,8601],{"class":79},[52,25281,25282],{"class":54,"line":173},[52,25283,25284],{"class":94},"    \u002F\u002F2.通过类名访问\n",[52,25286,25287,25289,25291,25293],{"class":54,"line":181},[52,25288,21167],{"class":75},[52,25290,20380],{"class":79},[52,25292,14199],{"class":75},[52,25294,8601],{"class":79},[52,25296,25297],{"class":54,"line":186},[52,25298,452],{"class":79},[1696,25300,25301],{"start":66},[32,25302,25303],{},"静态成员函数只能访问静态成员变量",[42,25305,25307],{"className":44,"code":25306,"language":46,"meta":47,"style":47},"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",[49,25308,25309,25315,25319,25323,25327,25337,25341,25355,25360,25372,25376,25387,25397,25401,25405,25409,25419,25423,25436,25440,25444,25448,25452,25466,25474,25478,25482,25486,25490,25498,25502,25512,25517,25521,25529,25533,25539],{"__ignoreMap":47},[52,25310,25311,25313],{"class":54,"line":55},[52,25312,17342],{"class":58},[52,25314,17819],{"class":75},[52,25316,25317],{"class":54,"line":66},[52,25318,110],{"class":79},[52,25320,25321],{"class":54,"line":83},[52,25322,17364],{"class":58},[52,25324,25325],{"class":54,"line":91},[52,25326,25208],{"class":94},[52,25328,25329,25331,25333,25335],{"class":54,"line":98},[52,25330,13668],{"class":58},[52,25332,25215],{"class":58},[52,25334,14033],{"class":75},[52,25336,248],{"class":79},[52,25338,25339],{"class":54,"line":107},[52,25340,575],{"class":79},[52,25342,25343,25346,25348,25350,25352],{"class":54,"line":113},[52,25344,25345],{"class":79},"        m_A",[52,25347,292],{"class":58},[52,25349,591],{"class":308},[52,25351,2010],{"class":79},[52,25353,25354],{"class":94}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[52,25356,25357],{"class":54,"line":119},[52,25358,25359],{"class":94},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[52,25361,25362,25364,25366,25368,25370],{"class":54,"line":126},[52,25363,25228],{"class":79},[52,25365,339],{"class":58},[52,25367,25233],{"class":62},[52,25369,339],{"class":58},[52,25371,357],{"class":79},[52,25373,25374],{"class":54,"line":132},[52,25375,616],{"class":79},[52,25377,25378,25380,25382,25384],{"class":54,"line":138},[52,25379,13668],{"class":58},[52,25381,2280],{"class":58},[52,25383,18096],{"class":79},[52,25385,25386],{"class":94}," \u002F\u002F静态成员变量\n",[52,25388,25389,25391,25394],{"class":54,"line":144},[52,25390,147],{"class":58},[52,25392,25393],{"class":79}," m_B;",[52,25395,25396],{"class":94}," \u002F\u002F非静态成员变量\n",[52,25398,25399],{"class":54,"line":153},[52,25400,123],{"emptyLinePlaceholder":122},[52,25402,25403],{"class":54,"line":159},[52,25404,17870],{"class":58},[52,25406,25407],{"class":54,"line":167},[52,25408,25021],{"class":94},[52,25410,25411,25413,25415,25417],{"class":54,"line":173},[52,25412,13668],{"class":58},[52,25414,25215],{"class":58},[52,25416,16266],{"class":75},[52,25418,248],{"class":79},[52,25420,25421],{"class":54,"line":181},[52,25422,575],{"class":79},[52,25424,25425,25427,25429,25432,25434],{"class":54,"line":186},[52,25426,717],{"class":79},[52,25428,339],{"class":58},[52,25430,25431],{"class":62},"\"这是私有权限下的静态函数调用\"",[52,25433,339],{"class":58},[52,25435,357],{"class":79},[52,25437,25438],{"class":54,"line":191},[52,25439,616],{"class":79},[52,25441,25442],{"class":54,"line":196},[52,25443,123],{"emptyLinePlaceholder":122},[52,25445,25446],{"class":54,"line":201},[52,25447,123],{"emptyLinePlaceholder":122},[52,25449,25450],{"class":54,"line":206},[52,25451,170],{"class":79},[52,25453,25454,25456,25458,25460,25462,25464],{"class":54,"line":211},[52,25455,242],{"class":58},[52,25457,18217],{"class":75},[52,25459,24851],{"class":79},[52,25461,292],{"class":58},[52,25463,692],{"class":308},[52,25465,80],{"class":79},[52,25467,25468,25470,25472],{"class":54,"line":218},[52,25469,1210],{"class":58},[52,25471,8553],{"class":75},[52,25473,248],{"class":79},[52,25475,25476],{"class":54,"line":223},[52,25477,110],{"class":79},[52,25479,25480],{"class":54,"line":230},[52,25481,25262],{"class":94},[52,25483,25484],{"class":54,"line":239},[52,25485,25267],{"class":94},[52,25487,25488],{"class":54,"line":251},[52,25489,17961],{"class":79},[52,25491,25492,25494,25496],{"class":54,"line":256},[52,25493,18514],{"class":79},[52,25495,14199],{"class":75},[52,25497,8601],{"class":79},[52,25499,25500],{"class":54,"line":262},[52,25501,25284],{"class":94},[52,25503,25504,25506,25508,25510],{"class":54,"line":268},[52,25505,21167],{"class":75},[52,25507,20380],{"class":79},[52,25509,14199],{"class":75},[52,25511,8601],{"class":79},[52,25513,25514],{"class":54,"line":280},[52,25515,25516],{"class":94},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[52,25518,25519],{"class":54,"line":286},[52,25520,452],{"class":79},[52,25522,25523,25525,25527],{"class":54,"line":300},[52,25524,242],{"class":58},[52,25526,245],{"class":75},[52,25528,248],{"class":79},[52,25530,25531],{"class":54,"line":314},[52,25532,110],{"class":79},[52,25534,25535,25537],{"class":54,"line":327},[52,25536,8598],{"class":75},[52,25538,8601],{"class":79},[52,25540,25541],{"class":54,"line":333},[52,25542,452],{"class":79},[3195,25544,25546],{"id":25545},"_83c对象模型和this指针","8.3C++对象模型和this指针",[24646,25548,25550],{"id":25549},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,25552,25553],{},"在c++中，类内的成员变量和成员函数分开存储",[14,25555,25556],{},"只有非静态成员变量才属于类的对象上",[25558,25559,25561],"h5",{"id":25560},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[42,25563,25565],{"className":44,"code":25564,"language":46,"meta":47,"style":47},"#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",[49,25566,25567,25574,25584,25590,25594,25598,25602,25610,25614,25618,25641,25645,25653,25657,25663],{"__ignoreMap":47},[52,25568,25569,25571],{"class":54,"line":55},[52,25570,59],{"class":58},[52,25572,25573],{"class":62},"\u003Ciostraem>\n",[52,25575,25576,25578,25580,25582],{"class":54,"line":66},[52,25577,69],{"class":58},[52,25579,72],{"class":58},[52,25581,76],{"class":75},[52,25583,80],{"class":79},[52,25585,25586,25588],{"class":54,"line":83},[52,25587,17342],{"class":58},[52,25589,17819],{"class":75},[52,25591,25592],{"class":54,"line":91},[52,25593,110],{"class":79},[52,25595,25596],{"class":54,"line":98},[52,25597,123],{"emptyLinePlaceholder":122},[52,25599,25600],{"class":54,"line":107},[52,25601,170],{"class":79},[52,25603,25604,25606,25608],{"class":54,"line":113},[52,25605,1210],{"class":58},[52,25607,8553],{"class":75},[52,25609,248],{"class":79},[52,25611,25612],{"class":54,"line":119},[52,25613,110],{"class":79},[52,25615,25616],{"class":54,"line":126},[52,25617,17961],{"class":79},[52,25619,25620,25622,25624,25627,25629,25632,25634,25636,25638],{"class":54,"line":132},[52,25621,336],{"class":79},[52,25623,339],{"class":58},[52,25625,25626],{"class":62},"\"size of p=\"",[52,25628,339],{"class":58},[52,25630,25631],{"class":75},"sizeoif",[52,25633,9500],{"class":79},[52,25635,339],{"class":58},[52,25637,4290],{"class":79},[52,25639,25640],{"class":94}," \u002F\u002F查看这个空类的占用的内存空间\n",[52,25642,25643],{"class":54,"line":138},[52,25644,452],{"class":79},[52,25646,25647,25649,25651],{"class":54,"line":144},[52,25648,242],{"class":58},[52,25650,245],{"class":75},[52,25652,248],{"class":79},[52,25654,25655],{"class":54,"line":153},[52,25656,110],{"class":79},[52,25658,25659,25661],{"class":54,"line":159},[52,25660,8598],{"class":75},[52,25662,8601],{"class":79},[52,25664,25665],{"class":54,"line":167},[52,25666,452],{"class":79},[14,25668,25669],{},"输出结果为：size of p=1",[14,25671,25672],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,25674,25675],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[25558,25677,25679],{"id":25678},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[42,25681,25683],{"className":44,"code":25682,"language":46,"meta":47,"style":47},"#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",[49,25684,25685,25691,25701,25709,25713,25722,25726,25734,25738,25742,25761,25765,25769,25777,25781,25787],{"__ignoreMap":47},[52,25686,25687,25689],{"class":54,"line":55},[52,25688,59],{"class":58},[52,25690,63],{"class":62},[52,25692,25693,25695,25697,25699],{"class":54,"line":66},[52,25694,69],{"class":58},[52,25696,72],{"class":58},[52,25698,76],{"class":75},[52,25700,80],{"class":79},[52,25702,25703,25705,25707],{"class":54,"line":83},[52,25704,17342],{"class":58},[52,25706,18217],{"class":75},[52,25708,963],{"class":79},[52,25710,25711],{"class":54,"line":91},[52,25712,110],{"class":79},[52,25714,25715,25717,25719],{"class":54,"line":98},[52,25716,147],{"class":58},[52,25718,18096],{"class":79},[52,25720,25721],{"class":94},"\u002F\u002F非静态成员变量\n",[52,25723,25724],{"class":54,"line":107},[52,25725,170],{"class":79},[52,25727,25728,25730,25732],{"class":54,"line":113},[52,25729,1210],{"class":58},[52,25731,8553],{"class":75},[52,25733,248],{"class":79},[52,25735,25736],{"class":54,"line":119},[52,25737,110],{"class":79},[52,25739,25740],{"class":54,"line":126},[52,25741,17961],{"class":79},[52,25743,25744,25746,25748,25750,25752,25754,25756,25758],{"class":54,"line":132},[52,25745,336],{"class":79},[52,25747,339],{"class":58},[52,25749,25626],{"class":62},[52,25751,4420],{"class":58},[52,25753,9500],{"class":79},[52,25755,339],{"class":58},[52,25757,4290],{"class":79},[52,25759,25760],{"class":94}," \u002F\u002F查看不是空对象时占用多少内存\n",[52,25762,25763],{"class":54,"line":138},[52,25764,123],{"emptyLinePlaceholder":122},[52,25766,25767],{"class":54,"line":144},[52,25768,452],{"class":79},[52,25770,25771,25773,25775],{"class":54,"line":153},[52,25772,242],{"class":58},[52,25774,245],{"class":75},[52,25776,248],{"class":79},[52,25778,25779],{"class":54,"line":159},[52,25780,110],{"class":79},[52,25782,25783,25785],{"class":54,"line":167},[52,25784,8598],{"class":75},[52,25786,8601],{"class":79},[52,25788,25789],{"class":54,"line":173},[52,25790,452],{"class":79},[14,25792,25793],{},"输出结果：size of p=4",[14,25795,25796],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[1696,25798,25799],{},[32,25800,25801],{},"如果加上非静态成员变量，Person类修改如下",[42,25803,25805],{"className":44,"code":25804,"language":46,"meta":47,"style":47},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[49,25806,25807,25813,25817,25823,25831,25835,25840],{"__ignoreMap":47},[52,25808,25809,25811],{"class":54,"line":55},[52,25810,17342],{"class":58},[52,25812,17819],{"class":75},[52,25814,25815],{"class":54,"line":66},[52,25816,110],{"class":79},[52,25818,25819,25821],{"class":54,"line":83},[52,25820,147],{"class":58},[52,25822,24040],{"class":79},[52,25824,25825,25827,25829],{"class":54,"line":91},[52,25826,13668],{"class":58},[52,25828,2280],{"class":58},[52,25830,24047],{"class":79},[52,25832,25833],{"class":54,"line":98},[52,25834,170],{"class":79},[52,25836,25837],{"class":54,"line":107},[52,25838,25839],{"class":94},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[52,25841,25842,25844,25846,25848,25850,25852],{"class":54,"line":113},[52,25843,242],{"class":58},[52,25845,18217],{"class":75},[52,25847,25060],{"class":79},[52,25849,292],{"class":58},[52,25851,692],{"class":308},[52,25853,80],{"class":79},[14,25855,25856],{},"输出结果：4",[14,25858,25859],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[1696,25861,25862],{"start":66},[32,25863,25864],{},"加上非静态成员函数",[42,25866,25868],{"className":44,"code":25867,"language":46,"meta":47,"style":47},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[49,25869,25870,25877,25881,25887,25895,25899,25903,25907],{"__ignoreMap":47},[52,25871,25872,25874],{"class":54,"line":55},[52,25873,17342],{"class":58},[52,25875,25876],{"class":75},"  Person\n",[52,25878,25879],{"class":54,"line":66},[52,25880,110],{"class":79},[52,25882,25883,25885],{"class":54,"line":83},[52,25884,147],{"class":58},[52,25886,24040],{"class":79},[52,25888,25889,25891,25893],{"class":54,"line":91},[52,25890,17557],{"class":58},[52,25892,14033],{"class":75},[52,25894,248],{"class":79},[52,25896,25897],{"class":54,"line":98},[52,25898,575],{"class":79},[52,25900,25901],{"class":54,"line":107},[52,25902,123],{"emptyLinePlaceholder":122},[52,25904,25905],{"class":54,"line":113},[52,25906,616],{"class":79},[52,25908,25909],{"class":54,"line":119},[52,25910,170],{"class":79},[14,25912,25913],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[1696,25915,25916],{"start":83},[32,25917,25918],{},"加上静态成员函数",[42,25920,25922],{"className":44,"code":25921,"language":46,"meta":47,"style":47},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[49,25923,25924,25930,25934,25940,25948,25952,25956,25960,25971,25975,25979,25983],{"__ignoreMap":47},[52,25925,25926,25928],{"class":54,"line":55},[52,25927,17342],{"class":58},[52,25929,25876],{"class":75},[52,25931,25932],{"class":54,"line":66},[52,25933,110],{"class":79},[52,25935,25936,25938],{"class":54,"line":83},[52,25937,147],{"class":58},[52,25939,24040],{"class":79},[52,25941,25942,25944,25946],{"class":54,"line":91},[52,25943,17557],{"class":58},[52,25945,14033],{"class":75},[52,25947,248],{"class":79},[52,25949,25950],{"class":54,"line":98},[52,25951,575],{"class":79},[52,25953,25954],{"class":54,"line":107},[52,25955,123],{"emptyLinePlaceholder":122},[52,25957,25958],{"class":54,"line":113},[52,25959,616],{"class":79},[52,25961,25962,25964,25966,25969],{"class":54,"line":119},[52,25963,13668],{"class":58},[52,25965,25215],{"class":58},[52,25967,25968],{"class":75}," func1",[52,25970,248],{"class":79},[52,25972,25973],{"class":54,"line":126},[52,25974,575],{"class":79},[52,25976,25977],{"class":54,"line":132},[52,25978,123],{"emptyLinePlaceholder":122},[52,25980,25981],{"class":54,"line":138},[52,25982,616],{"class":79},[52,25984,25985],{"class":54,"line":144},[52,25986,170],{"class":79},[14,25988,25856],{},[14,25990,25991],{},"解释：静态成员函数也不属于类上",[3141,25993,10629],{},{"title":47,"searchDepth":66,"depth":66,"links":25995},[25996,26002],{"id":17293,"depth":66,"text":17294,"children":25997},[25998,25999,26000,26001],{"id":17297,"depth":83,"text":17298},{"id":18022,"depth":83,"text":18023},{"id":18194,"depth":83,"text":18195},{"id":18653,"depth":83,"text":18654},{"id":21025,"depth":66,"text":21026,"children":26003},[26004,26005,26006,26007,26008,26009,26010,26011,26012],{"id":21037,"depth":83,"text":21038},{"id":21330,"depth":83,"text":21331},{"id":21821,"depth":83,"text":21822},{"id":22918,"depth":83,"text":22919},{"id":23341,"depth":83,"text":23342},{"id":23820,"depth":83,"text":23821},{"id":24195,"depth":83,"text":24196},{"id":24608,"depth":83,"text":24609},{"id":25545,"depth":83,"text":25546},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":17258,"description":26013},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":26020,"title":46,"body":26021,"description":26025,"extension":3153,"meta":26026,"navigation":122,"path":26028,"seo":26029,"stem":26030,"__hash__":26031},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":26022,"toc":26023},[],{"title":47,"searchDepth":66,"depth":66,"links":26024},[],null,{"category":26027},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":46,"description":26025},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":26033,"title":26034,"body":26035,"description":47,"extension":3153,"meta":26626,"navigation":122,"path":26627,"seo":26628,"stem":26629,"__hash__":26630},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":26036,"toc":26608},[26037,26040,26044,26047,26050,26053,26071,26076,26079,26082,26085,26088,26093,26096,26101,26104,26107,26111,26114,26117,26123,26126,26144,26148,26152,26155,26160,26163,26167,26170,26183,26186,26190,26193,26196,26199,26224,26227,26236,26247,26262,26294,26298,26305,26313,26317,26320,26323,26328,26332,26335,26338,26343,26346,26350,26353,26356,26361,26364,26368,26373,26377,26444,26448,26451,26454,26457,26460,26463,26469,26490,26493,26507,26516,26520,26523,26526,26531,26534,26539,26544,26547,26550,26555,26560,26563,26568,26573,26576,26581,26586,26589,26592,26597,26600,26605],[10,26038,26034],{"id":26039},"_1强化学习基本认识",[18,26041,26043],{"id":26042},"_11什么是强化学习","1.1.什么是强化学习",[14,26045,26046],{},"强化学习有两部分组成：智能体和环境；",[14,26048,26049],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,26051,26052],{},"强化学习与监督学习的区别:",[1696,26054,26055,26058,26061,26064],{},[32,26056,26057],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[32,26059,26060],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[32,26062,26063],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[32,26065,26066,26067,26070],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2389,26068,26069],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,26072,26073],{},[4509,26074],{"alt":47,"src":26075},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,26077,26078],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,26080,26081],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,26083,26084],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,26086,26087],{},"获取奖励",[14,26089,26090],{},[4509,26091],{"alt":47,"src":26092},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,26094,26095],{},"强化学习可以分成标准强化学习和深度强化学习",[14,26097,26098],{},[4509,26099],{"alt":47,"src":26100},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,26102,26103],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,26105,26106],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[18,26108,26110],{"id":26109},"_12强化学习应用场景","1.2.强化学习应用场景",[14,26112,26113],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,26115,26116],{},"具身智能中的应用",[14,26118,26119,26122],{},[2389,26120,26121],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,26124,26125],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,26127,26128,26129,26132,26133,26136,26137,26140,26141],{},"机器人是",[2389,26130,26131],{},"躯体","，深度学习是",[2389,26134,26135],{},"神经元****网络","，VLA是",[2389,26138,26139],{},"通用的行为逻辑","，而强化学习是",[2389,26142,26143],{},"教练",[18,26145,26147],{"id":26146},"_13序列决策","1.3.序列决策",[3195,26149,26151],{"id":26150},"_131智能体与环境","1.3.1.智能体与环境",[14,26153,26154],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,26156,26157],{},[4509,26158],{"alt":47,"src":26159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,26161,26162],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[3195,26164,26166],{"id":26165},"_132奖励","1.3.2.奖励",[14,26168,26169],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,26171,26172,26173,26182],{},"取某个策略的表现如何。强化学习的目的就是",[2389,26174,26175,26176,26181],{},"最大化",[2389,26177,26178],{},[2389,26179,26180],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,26184,26185],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[3195,26187,26189],{"id":26188},"_133序列决策","1.3.3.序列决策",[14,26191,26192],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,26194,26195],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,26197,26198],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,26200,26201,26205,26206,26208,26209,26211,26212,26214,26215,16443,26218,16443,26221],{},[26202,26203,26204],"em",{},"Ht"," = ",[26202,26207,3793],{},"1*, a",[26202,26210,629],{},", r",[26202,26213,629],{},", . . . ,* ",[26202,26216,26217],{},"ot",[26202,26219,26220],{},", at ,",[26202,26222,26223],{},"rt",[14,26225,26226],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,26228,26229,26205,26232,682,26234,2283],{},[26202,26230,26231],{},"st",[26202,26233,3273],{},[26202,26235,26204],{},[14,26237,26238,26239,26242,26243,26246],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2389,26240,26241],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2389,26244,26245],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,26248,26249,26250,26253,26254,26257,26258,26261],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2389,26251,26252],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2389,26255,26256],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[26202,26259,26260],{},"S, A, T, R, Ω, O, γ",")。",[14,26263,26264,26265,26267,26268,26270,26271,1216,26273,26276,26277,26279,26280,1216,26283,26286,26287,26289,26290,26293],{},"其中 ",[26202,26266,3884],{}," 表示状态空间，为隐变量，",[26202,26269,3445],{}," 为动作空间，",[26202,26272,3907],{},[26202,26274,26275],{},"s ′ |s, a",") 为状态转移概率，",[26202,26278,3860],{}," 为奖励函数，",[26202,26281,26282],{},"Ω",[26202,26284,26285],{},"o|s, a",") 为观测概率，",[26202,26288,3787],{}," 为观测空间，",[26202,26291,26292],{},"γ"," 为折扣因子。",[18,26295,26297],{"id":26296},"_14动作空间","1.4.动作空间",[14,26299,26300,26301,26304],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2389,26302,26303],{},"动作空间"," ，动作空间分为:",[1696,26306,26307,26310],{},[32,26308,26309],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[32,26311,26312],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[18,26314,26316],{"id":26315},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,26318,26319],{},"由策略、价值函数、模型三部分组成",[14,26321,26322],{},"这三者组成马尔可夫决策过程",[14,26324,26325],{},[4509,26326],{"alt":47,"src":26327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[3195,26329,26331],{"id":26330},"_151策略","1.5.1.策略",[14,26333,26334],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,26336,26337],{},"策略可分为两种：",[14,26339,26340],{},[4509,26341],{"alt":47,"src":26342},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,26344,26345],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[3195,26347,26349],{"id":26348},"_152价值函数","1.5.2.价值函数",[14,26351,26352],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,26354,26355],{},"价值函数中有一个折扣因子，类似于存款利息",[14,26357,26358],{},[4509,26359],{"alt":47,"src":26360},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,26362,26363],{},"进入某个状态采取的最优动作可以通过Q函数得到",[3195,26365,26367],{"id":26366},"_153模型","1.5.3.模型",[14,26369,26370],{},[4509,26371],{"alt":47,"src":26372},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[18,26374,26376],{"id":26375},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[3353,26378,26379,26390],{},[3356,26380,26381],{},[3359,26382,26383,26387],{},[3362,26384,26386],{"align":26385},"left","类型",[3362,26388,26389],{"align":26385},"特点",[3399,26391,26392,26402,26412,26422,26434],{},[3359,26393,26394,26399],{},[3404,26395,26396],{"align":26385},[2389,26397,26398],{},"基于价值的智能体",[3404,26400,26401],{"align":26385},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[3359,26403,26404,26409],{},[3404,26405,26406],{"align":26385},[2389,26407,26408],{},"基于策略的智能体",[3404,26410,26411],{"align":26385},"直接学习策略，没有学习价值函数",[3359,26413,26414,26419],{},[3404,26415,26416],{"align":26385},[2389,26417,26418],{},"演员-评论员智能体",[3404,26420,26421],{"align":26385},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[3359,26423,26424,26429],{},[3404,26425,26426],{"align":26385},[2389,26427,26428],{},"有模型强化学习智能体",[3404,26430,26431],{"align":26385},[4509,26432],{"alt":47,"src":26433},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[3359,26435,26436,26441],{},[3404,26437,26438],{"align":26385},[2389,26439,26440],{},"免模型强化学习智能体",[3404,26442,26443],{"align":26385},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[18,26445,26447],{"id":26446},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,26449,26450],{},"学习和规划是序列决策的两个基本问题",[14,26452,26453],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,26455,26456],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,26458,26459],{},"强化学习用到的库：Gym",[14,26461,26462],{},"Gym可以检验强化学习算法的优劣",[14,26464,26465,26468],{},[2389,26466,26467],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[42,26470,26474],{"className":26471,"code":26472,"language":26473,"meta":47,"style":47},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[49,26475,26476],{"__ignoreMap":47},[52,26477,26478,26481,26484,26487],{"class":54,"line":55},[52,26479,26480],{"class":75},"pip",[52,26482,26483],{"class":62}," install",[52,26485,26486],{"class":62}," gym==",[52,26488,26489],{"class":308},"0.25.2\n",[14,26491,26492],{},"显示图形界面需要",[42,26494,26496],{"className":26471,"code":26495,"language":26473,"meta":47,"style":47},"pip install pygame\n",[49,26497,26498],{"__ignoreMap":47},[52,26499,26500,26502,26504],{"class":54,"line":55},[52,26501,26480],{"class":75},[52,26503,26483],{"class":62},[52,26505,26506],{"class":62}," pygame\n",[14,26508,26509,26510],{},"有关Gym库的相关文档介绍：",[3451,26511,26515],{"href":26512,"rel":26513},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[26514],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[18,26517,26519],{"id":26518},"_18一些补充基础概念","1.8.一些补充基础概念",[14,26521,26522],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,26524,26525],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,26527,26528],{},[4509,26529],{"alt":47,"src":26530},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,26532,26533],{},"折扣率需要自己来设定",[14,26535,26536],{},[4509,26537],{"alt":47,"src":26538},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[1696,26540,26541],{},[32,26542,26543],{},"状态转移函数：",[14,26545,26546],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,26548,26549],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,26551,26552],{},[4509,26553],{"alt":47,"src":26554},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[1696,26556,26557],{"start":66},[32,26558,26559],{},"动作价值函数：",[14,26561,26562],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,26564,26565],{},[4509,26566],{"alt":47,"src":26567},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[1696,26569,26570],{"start":83},[32,26571,26572],{},"最优动作价值函数：",[14,26574,26575],{},"这个函数是对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,26577,26578],{},[4509,26579],{"alt":47,"src":26580},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[1696,26582,26583],{"start":91},[32,26584,26585],{},"状态价值函数:",[14,26587,26588],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,26590,26591],{},"它衡量的是“一个具体动作”的长期价值",[14,26593,26594],{},[4509,26595],{"alt":47,"src":26596},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,26598,26599],{},"几个价值函数之间的比较：",[14,26601,26602],{},[4509,26603],{"alt":47,"src":26604},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[3141,26606,26607],{},"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":47,"searchDepth":66,"depth":66,"links":26609},[26610,26611,26612,26617,26618,26623,26624,26625],{"id":26042,"depth":66,"text":26043},{"id":26109,"depth":66,"text":26110},{"id":26146,"depth":66,"text":26147,"children":26613},[26614,26615,26616],{"id":26150,"depth":83,"text":26151},{"id":26165,"depth":83,"text":26166},{"id":26188,"depth":83,"text":26189},{"id":26296,"depth":66,"text":26297},{"id":26315,"depth":66,"text":26316,"children":26619},[26620,26621,26622],{"id":26330,"depth":83,"text":26331},{"id":26348,"depth":83,"text":26349},{"id":26366,"depth":83,"text":26367},{"id":26375,"depth":66,"text":26376},{"id":26446,"depth":66,"text":26447},{"id":26518,"depth":66,"text":26519},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":26034,"description":47},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26632,"title":26633,"body":26634,"description":26641,"extension":3153,"meta":26652,"navigation":122,"path":26653,"seo":26654,"stem":26655,"__hash__":26656},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26635,"toc":26650},[26636,26639,26642,26647],[10,26637,26633],{"id":26638},"_2马尔可夫决策过程",[14,26640,26641],{},"这是强化学习的基本框架",[14,26643,26644],{},[4509,26645],{"alt":47,"src":26646},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,26648,26649],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":47,"searchDepth":66,"depth":66,"links":26651},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26633,"description":26641},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26658,"title":26659,"body":26660,"description":47,"extension":3153,"meta":26776,"navigation":122,"path":26777,"seo":26778,"stem":26779,"__hash__":26780},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26661,"toc":26771},[26662,26665,26669,26672,26677,26682,26685,26690,26693,26698,26701,26705,26710,26713,26718,26723,26728,26731,26735,26740,26743,26748,26753,26758,26763,26766],[10,26663,26659],{"id":26664},"_3动作价值函数",[18,26666,26668],{"id":26667},"_31dqn","3.1.DQN",[14,26670,26671],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,26673,26674],{},[4509,26675],{"alt":47,"src":26676},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,26678,26679],{},[4509,26680],{"alt":47,"src":26681},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,26683,26684],{},"DQN算法的描述：",[14,26686,26687],{},[4509,26688],{"alt":47,"src":26689},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,26691,26692],{},"这里的Dense指的是全连接层",[14,26694,26695],{},[4509,26696],{"alt":47,"src":26697},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,26699,26700],{},"当前观测的状态为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算法",[18,26702,26704],{"id":26703},"_32dqn的举例","3.2.DQN的举例",[14,26706,26707],{},[4509,26708],{"alt":47,"src":26709},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,26711,26712],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,26714,26715],{},[4509,26716],{"alt":47,"src":26717},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,26719,26720],{},[4509,26721],{"alt":47,"src":26722},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,26724,26725],{},[4509,26726],{"alt":47,"src":26727},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,26729,26730],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[18,26732,26734],{"id":26733},"_33td算法","3.3.TD算法",[14,26736,26737],{},[4509,26738],{"alt":47,"src":26739},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,26741,26742],{},"强化学习TD算法公式的粗略解释：",[14,26744,26745],{},[4509,26746],{"alt":47,"src":26747},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,26749,26750],{},[4509,26751],{"alt":47,"src":26752},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,26754,26755],{},[4509,26756],{"alt":47,"src":26757},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,26759,26760],{},[4509,26761],{"alt":47,"src":26762},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,26764,26765],{},"TD算法总结：",[14,26767,26768],{},[4509,26769],{"alt":47,"src":26770},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":47,"searchDepth":66,"depth":66,"links":26772},[26773,26774,26775],{"id":26667,"depth":66,"text":26668},{"id":26703,"depth":66,"text":26704},{"id":26733,"depth":66,"text":26734},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26659,"description":47},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26782,"title":26783,"body":26784,"description":47,"extension":3153,"meta":27017,"navigation":122,"path":27018,"seo":27019,"stem":27020,"__hash__":27021},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26785,"toc":27013},[26786,26789,26793,26796,26799,26804,26809,26812,26817,26822,26825,26830,26833,26838,26841,26846,26849,26854,26857,26862,26867,26870,26875,26878,26881,26886,26889,26894,26899,26903,26906,26909,26914,26919,26922,26927,26932,26935,26940,26943,26946,26951,26954,26959,26962,26967,26972,26975,26980,26985,26988,26993,26996,27001,27004],[10,26787,26783],{"id":26788},"_4策略学习",[18,26790,26792],{"id":26791},"_41概念描述","4.1.概念描述",[14,26794,26795],{},"用神经网络（策略网络）近似策略函数",[14,26797,26798],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,26800,26801],{},[4509,26802],{"alt":47,"src":26803},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,26805,26806],{},[4509,26807],{"alt":47,"src":26808},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,26810,26811],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,26813,26814],{},[4509,26815],{"alt":47,"src":26816},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,26818,26819],{},[4509,26820],{"alt":47,"src":26821},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,26823,26824],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,26826,26827],{},[4509,26828],{"alt":47,"src":26829},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,26831,26832],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,26834,26835],{},[4509,26836],{"alt":47,"src":26837},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,26839,26840],{},"改进theta要用到策略梯度算法",[14,26842,26843],{},[4509,26844],{"alt":47,"src":26845},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,26847,26848],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,26850,26851],{},[4509,26852],{"alt":47,"src":26853},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,26855,26856],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,26858,26859],{},[4509,26860],{"alt":47,"src":26861},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,26863,26864],{},[4509,26865],{"alt":47,"src":26866},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,26868,26869],{},"梯度公式总结：",[14,26871,26872],{},[4509,26873],{"alt":47,"src":26874},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,26876,26877],{},"两个公式的分别应用场景：",[14,26879,26880],{},"对于离散的动作：",[14,26882,26883],{},[4509,26884],{"alt":47,"src":26885},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,26887,26888],{},"对于连续的动作：",[14,26890,26891],{},[4509,26892],{"alt":47,"src":26893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,26895,26896],{},[4509,26897],{"alt":47,"src":26898},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[18,26900,26902],{"id":26901},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,26904,26905],{},"使用蒙特卡洛来近似计算策略梯度",[14,26907,26908],{},"蒙特卡洛法的解释如下：",[14,26910,26911],{},[4509,26912],{"alt":47,"src":26913},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,26915,26916],{},[4509,26917],{"alt":47,"src":26918},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,26920,26921],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[1696,26923,26924],{},[32,26925,26926],{},"方法一：reinforce算法",[14,26928,26929],{},[4509,26930],{"alt":47,"src":26931},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,26933,26934],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[1696,26936,26937],{"start":66},[32,26938,26939],{},"方法二：actor-critic算法",[14,26941,26942],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,26944,26945],{},"两个网络的构建：",[14,26947,26948],{},[4509,26949],{"alt":47,"src":26950},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,26952,26953],{},"actor网路：",[14,26955,26956],{},[4509,26957],{"alt":47,"src":26958},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,26960,26961],{},"critic网络",[14,26963,26964],{},[4509,26965],{"alt":47,"src":26966},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[1696,26968,26969],{"start":83},[32,26970,26971],{},"网络的训练",[14,26973,26974],{},"网络描述",[14,26976,26977],{},[4509,26978],{"alt":47,"src":26979},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,26981,26982],{},[4509,26983],{"alt":47,"src":26984},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,26986,26987],{},"TD算法更新梯度：",[14,26989,26990],{},[4509,26991],{"alt":47,"src":26992},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,26994,26995],{},"策略网络更新梯度：",[14,26997,26998],{},[4509,26999],{"alt":47,"src":27000},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,27002,27003],{},"训练整个流程的具体描述：",[14,27005,27006,27009,27010],{},[4509,27007],{"alt":47,"src":27008},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[4509,27011],{"alt":47,"src":27012},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":47,"searchDepth":66,"depth":66,"links":27014},[27015,27016],{"id":26791,"depth":66,"text":26792},{"id":26901,"depth":66,"text":26902},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26783,"description":47},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":27023,"title":27024,"body":27025,"description":27032,"extension":3153,"meta":27082,"navigation":122,"path":27083,"seo":27084,"stem":27085,"__hash__":27086},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":27026,"toc":27078},[27027,27030,27033,27037,27040,27045,27049,27052,27057,27060,27065,27070,27073],[10,27028,27024],{"id":27029},"_5alphago算法",[14,27031,27032],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[18,27034,27036],{"id":27035},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,27038,27039],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,27041,27042],{},[4509,27043],{"alt":47,"src":27044},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[18,27046,27048],{"id":27047},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,27050,27051],{},"采用强化学习的方式训练策略网络",[14,27053,27054],{},[4509,27055],{"alt":47,"src":27056},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,27058,27059],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,27061,27062],{},[4509,27063],{"alt":47,"src":27064},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,27066,27067],{},[4509,27068],{"alt":47,"src":27069},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,27071,27072],{},"强化学习训练策略网络的总结：",[14,27074,27075],{},[4509,27076],{"alt":47,"src":27077},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":47,"searchDepth":66,"depth":66,"links":27079},[27080,27081],{"id":27035,"depth":66,"text":27036},{"id":27047,"depth":66,"text":27048},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":27024,"description":27032},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":27088,"title":27089,"body":27090,"description":27097,"extension":3153,"meta":27100,"navigation":122,"path":27101,"seo":27102,"stem":27103,"__hash__":27104},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":27091,"toc":27098},[27092,27095],[10,27093,27089],{"id":27094},"_6价值网络",[14,27096,27097],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":47,"searchDepth":66,"depth":66,"links":27099},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":27089,"description":27097},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":27106,"title":27107,"body":27108,"description":27112,"extension":3153,"meta":27113,"navigation":122,"path":27114,"seo":27115,"stem":27116,"__hash__":27117},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":27109,"toc":27110},[],{"title":47,"searchDepth":66,"depth":66,"links":27111},[],"记录自己的强化学习笔记。",{"category":26027},"\u002Fwiki\u002F2025-12-04",{"title":27107,"description":27112},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":27119,"title":27120,"body":27121,"description":26025,"extension":3153,"meta":27160,"navigation":122,"path":27161,"seo":27162,"stem":27163,"__hash__":27164},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":27122,"toc":27158},[27123,27126,27129,27135,27138,27144,27147,27152,27155],[10,27124,27120],{"id":27125},"_1-项目概览与官方资源",[14,27127,27128],{},"官方文档：",[14,27130,27131],{},[3451,27132,27133],{"href":27133,"rel":27134},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[26514],[14,27136,27137],{},"官方代码仓库：",[14,27139,27140],{},[3451,27141,27142],{"href":27142,"rel":27143},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[26514],[14,27145,27146],{},"复现大体流程：",[14,27148,27149],{},[4509,27150],{"alt":47,"src":27151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,27153,27154],{},"本教程的目标是打通这条链路：",[14,27156,27157],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":47,"searchDepth":66,"depth":66,"links":27159},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":27120,"description":26025},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":27166,"title":27167,"body":27168,"description":26025,"extension":3153,"meta":27284,"navigation":122,"path":27285,"seo":27286,"stem":27287,"__hash__":27288},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":27169,"toc":27279},[27170,27173,27177,27180,27187,27191,27194,27203,27213,27217,27247,27250,27276],[10,27171,27167],{"id":27172},"_2-环境准备与设备连接",[18,27174,27176],{"id":27175},"_21-系统与环境","2.1 系统与环境",[14,27178,27179],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,27181,27182,27183,27186],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[49,27184,27185],{},"lerobot"," 依赖。",[18,27188,27190],{"id":27189},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,27192,27193],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[42,27195,27197],{"className":26471,"code":27196,"language":26473,"meta":47,"style":47},"lerobot-find-out\n",[49,27198,27199],{"__ignoreMap":47},[52,27200,27201],{"class":54,"line":55},[52,27202,27196],{"class":75},[14,27204,27205,27206,3426,27209,27212],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[49,27207,27208],{},"\u002Fdev\u002FttyACM0",[49,27210,27211],{},"\u002Fdev\u002FttyACM1","）。",[18,27214,27216],{"id":27215},"_23-串口授权","2.3 串口授权",[42,27218,27220],{"className":26471,"code":27219,"language":26473,"meta":47,"style":47},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[49,27221,27222,27236],{"__ignoreMap":47},[52,27223,27224,27227,27230,27233],{"class":54,"line":55},[52,27225,27226],{"class":75},"sudo",[52,27228,27229],{"class":62}," chmod",[52,27231,27232],{"class":308}," 666",[52,27234,27235],{"class":62}," \u002Fdev\u002FttyACM0\n",[52,27237,27238,27240,27242,27244],{"class":54,"line":66},[52,27239,27226],{"class":75},[52,27241,27229],{"class":62},[52,27243,27232],{"class":308},[52,27245,27246],{"class":62}," \u002Fdev\u002FttyACM1\n",[14,27248,27249],{},"说明：",[29,27251,27252,27257,27263,27273],{},[32,27253,27254,27256],{},[49,27255,27226],{},"：以 root 权限执行命令。",[32,27258,27259,27262],{},[49,27260,27261],{},"chmod","：修改设备节点权限。",[32,27264,27265,27268,27269,27272],{},[49,27266,27267],{},"666","：",[49,27270,27271],{},"rw-rw-rw-","，所有用户可读写。",[32,27274,27275],{},"串口号必须替换为你机器上的真实端口。",[3141,27277,27278],{},"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":47,"searchDepth":66,"depth":66,"links":27280},[27281,27282,27283],{"id":27175,"depth":66,"text":27176},{"id":27189,"depth":66,"text":27190},{"id":27215,"depth":66,"text":27216},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":27167,"description":26025},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":27290,"title":27291,"body":27292,"description":26025,"extension":3153,"meta":27453,"navigation":122,"path":27454,"seo":27455,"stem":27456,"__hash__":27457},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":27293,"toc":27449},[27294,27298,27302,27308,27311,27368,27371,27375,27378,27446],[10,27295,27297],{"id":27296},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[18,27299,27301],{"id":27300},"_31-配置电机-id","3.1 配置电机 ID",[14,27303,27304,27305,27307],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[49,27306,629],{},"，需要改成机械臂链路里不冲突的编号。",[14,27309,27310],{},"方式一：用 LeRobot 命令逐步写入。",[42,27312,27314],{"className":26471,"code":27313,"language":26473,"meta":47,"style":47},"# 主臂舵机配置 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",[49,27315,27316,27321,27329,27336,27341,27345,27350,27356,27363],{"__ignoreMap":47},[52,27317,27318],{"class":54,"line":55},[52,27319,27320],{"class":94},"# 主臂舵机配置 ID\n",[52,27322,27323,27326],{"class":54,"line":66},[52,27324,27325],{"class":75},"lerobot-setup-motors",[52,27327,27328],{"class":308}," \\\n",[52,27330,27331,27334],{"class":54,"line":83},[52,27332,27333],{"class":308},"  --teleop.type=so101_leader",[52,27335,27328],{"class":308},[52,27337,27338],{"class":54,"line":91},[52,27339,27340],{"class":308},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[52,27342,27343],{"class":54,"line":98},[52,27344,123],{"emptyLinePlaceholder":122},[52,27346,27347],{"class":54,"line":107},[52,27348,27349],{"class":94},"# 从臂舵机配置 ID\n",[52,27351,27352,27354],{"class":54,"line":113},[52,27353,27325],{"class":75},[52,27355,27328],{"class":308},[52,27357,27358,27361],{"class":54,"line":119},[52,27359,27360],{"class":308},"  --robot.type=so101_follower",[52,27362,27328],{"class":308},[52,27364,27365],{"class":54,"line":126},[52,27366,27367],{"class":308},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,27369,27370],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[18,27372,27374],{"id":27373},"_32-机械臂校准","3.2 机械臂校准",[14,27376,27377],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[42,27379,27381],{"className":26471,"code":27380,"language":26473,"meta":47,"style":47},"# 主臂校准\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",[49,27382,27383,27388,27395,27401,27408,27413,27417,27422,27428,27434,27441],{"__ignoreMap":47},[52,27384,27385],{"class":54,"line":55},[52,27386,27387],{"class":94},"# 主臂校准\n",[52,27389,27390,27393],{"class":54,"line":66},[52,27391,27392],{"class":75},"lerobot-calibrate",[52,27394,27328],{"class":308},[52,27396,27397,27399],{"class":54,"line":83},[52,27398,27333],{"class":308},[52,27400,27328],{"class":308},[52,27402,27403,27406],{"class":54,"line":91},[52,27404,27405],{"class":308},"  --teleop.port=\u002Fdev\u002FttyACM0",[52,27407,27328],{"class":308},[52,27409,27410],{"class":54,"line":98},[52,27411,27412],{"class":308},"  --teleop.id=my_awesome_leader_arm\n",[52,27414,27415],{"class":54,"line":107},[52,27416,123],{"emptyLinePlaceholder":122},[52,27418,27419],{"class":54,"line":113},[52,27420,27421],{"class":94},"# 从臂校准\n",[52,27423,27424,27426],{"class":54,"line":119},[52,27425,27392],{"class":75},[52,27427,27328],{"class":308},[52,27429,27430,27432],{"class":54,"line":126},[52,27431,27360],{"class":308},[52,27433,27328],{"class":308},[52,27435,27436,27439],{"class":54,"line":132},[52,27437,27438],{"class":308},"  --robot.port=\u002Fdev\u002FttyACM1",[52,27440,27328],{"class":308},[52,27442,27443],{"class":54,"line":138},[52,27444,27445],{"class":308},"  --robot.id=my_awesome_follower_arm\n",[3141,27447,27448],{},"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":47,"searchDepth":66,"depth":66,"links":27450},[27451,27452],{"id":27300,"depth":66,"text":27301},{"id":27373,"depth":66,"text":27374},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":27291,"description":26025},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":27459,"title":27460,"body":27461,"description":26025,"extension":3153,"meta":27652,"navigation":122,"path":27653,"seo":27654,"stem":27655,"__hash__":27656},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":27462,"toc":27648},[27463,27466,27470,27517,27521,27534,27597,27600,27645],[10,27464,27460],{"id":27465},"_4-遥操与相机接入",[18,27467,27469],{"id":27468},"_41-不带相机遥操","4.1 不带相机遥操",[42,27471,27473],{"className":26471,"code":27472,"language":26473,"meta":47,"style":47},"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",[49,27474,27475,27482,27488,27494,27501,27507,27513],{"__ignoreMap":47},[52,27476,27477,27480],{"class":54,"line":55},[52,27478,27479],{"class":75},"lerobot-teleoperate",[52,27481,27328],{"class":308},[52,27483,27484,27486],{"class":54,"line":66},[52,27485,27360],{"class":308},[52,27487,27328],{"class":308},[52,27489,27490,27492],{"class":54,"line":83},[52,27491,27438],{"class":308},[52,27493,27328],{"class":308},[52,27495,27496,27499],{"class":54,"line":91},[52,27497,27498],{"class":308},"  --robot.id=my_awesome_follower_arm",[52,27500,27328],{"class":308},[52,27502,27503,27505],{"class":54,"line":98},[52,27504,27333],{"class":308},[52,27506,27328],{"class":308},[52,27508,27509,27511],{"class":54,"line":107},[52,27510,27405],{"class":308},[52,27512,27328],{"class":308},[52,27514,27515],{"class":54,"line":113},[52,27516,27412],{"class":308},[18,27518,27520],{"id":27519},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[42,27522,27524],{"className":26471,"code":27523,"language":26473,"meta":47,"style":47},"lerobot-find-cameras opencv\n",[49,27525,27526],{"__ignoreMap":47},[52,27527,27528,27531],{"class":54,"line":55},[52,27529,27530],{"class":75},"lerobot-find-cameras",[52,27532,27533],{"class":62}," opencv\n",[42,27535,27537],{"className":26471,"code":27536,"language":26473,"meta":47,"style":47},"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",[49,27538,27539,27545,27551,27557,27563,27573,27579,27585,27592],{"__ignoreMap":47},[52,27540,27541,27543],{"class":54,"line":55},[52,27542,27479],{"class":75},[52,27544,27328],{"class":308},[52,27546,27547,27549],{"class":54,"line":66},[52,27548,27360],{"class":308},[52,27550,27328],{"class":308},[52,27552,27553,27555],{"class":54,"line":83},[52,27554,27438],{"class":308},[52,27556,27328],{"class":308},[52,27558,27559,27561],{"class":54,"line":91},[52,27560,27498],{"class":308},[52,27562,27328],{"class":308},[52,27564,27565,27568,27571],{"class":54,"line":98},[52,27566,27567],{"class":308},"  --robot.cameras=",[52,27569,27570],{"class":62},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[52,27572,27328],{"class":308},[52,27574,27575,27577],{"class":54,"line":107},[52,27576,27333],{"class":308},[52,27578,27328],{"class":308},[52,27580,27581,27583],{"class":54,"line":113},[52,27582,27405],{"class":308},[52,27584,27328],{"class":308},[52,27586,27587,27590],{"class":54,"line":119},[52,27588,27589],{"class":308},"  --teleop.id=my_awesome_leader_arm",[52,27591,27328],{"class":308},[52,27593,27594],{"class":54,"line":126},[52,27595,27596],{"class":308},"  --display_data=true\n",[14,27598,27599],{},"相机参数说明：",[29,27601,27602,27608,27614,27623,27633,27639],{},[32,27603,27604,27607],{},[49,27605,27606],{},"front","：相机名称。",[32,27609,27610,27613],{},[49,27611,27612],{},"type: opencv","：相机驱动类型。",[32,27615,27616,27619,27620,27212],{},[49,27617,27618],{},"index_or_path","：设备编号或设备路径（如 ",[49,27621,27622],{},"\u002Fdev\u002Fvideo4",[32,27624,27625,27628,27629,27632],{},[49,27626,27627],{},"width"," \u002F ",[49,27630,27631],{},"height","：图像分辨率。",[32,27634,27635,27638],{},[49,27636,27637],{},"fps","：采样帧率。",[32,27640,27641,27644],{},[49,27642,27643],{},"--display_data=true","：启用实时可视化。",[3141,27646,27647],{},"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":47,"searchDepth":66,"depth":66,"links":27649},[27650,27651],{"id":27468,"depth":66,"text":27469},{"id":27519,"depth":66,"text":27520},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":27460,"description":26025},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27658,"title":27659,"body":27660,"description":26025,"extension":3153,"meta":27832,"navigation":122,"path":27833,"seo":27834,"stem":27835,"__hash__":27836},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27661,"toc":27827},[27662,27666,27670,27675,27680,27683,27725,27731,27735,27784,27789,27793,27796,27804,27809,27814,27819,27824],[10,27663,27665],{"id":27664},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[18,27667,27669],{"id":27668},"_51-生成访问令牌","5.1 生成访问令牌",[14,27671,27672],{},[4509,27673],{"alt":47,"src":27674},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,27676,27677],{},[4509,27678],{"alt":47,"src":27679},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,27681,27682],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[42,27684,27686],{"className":26471,"code":27685,"language":26473,"meta":47,"style":47},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[49,27687,27688,27701],{"__ignoreMap":47},[52,27689,27690,27693,27696,27698],{"class":54,"line":55},[52,27691,27692],{"class":58},"export",[52,27694,27695],{"class":79}," HF_TOKEN",[52,27697,292],{"class":58},[52,27699,27700],{"class":62},"\"your_huggingface_token\"\n",[52,27702,27703,27706,27709,27712,27715,27717,27720,27722],{"class":54,"line":66},[52,27704,27705],{"class":75},"hf",[52,27707,27708],{"class":62}," auth",[52,27710,27711],{"class":62}," login",[52,27713,27714],{"class":308}," --token",[52,27716,2168],{"class":62},[52,27718,27719],{"class":79},"$HF_TOKEN",[52,27721,2844],{"class":62},[52,27723,27724],{"class":308}," --add-to-git-credential\n",[14,27726,27727,27730],{},[49,27728,27729],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[18,27732,27734],{"id":27733},"_52-验证登录","5.2 验证登录",[42,27736,27738],{"className":26471,"code":27737,"language":26473,"meta":47,"style":47},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[49,27739,27740,27771],{"__ignoreMap":47},[52,27741,27742,27745,27747,27750,27752,27754,27757,27760,27763,27766,27769],{"class":54,"line":55},[52,27743,27744],{"class":79},"HF_USER",[52,27746,292],{"class":58},[52,27748,27749],{"class":79},"$(",[52,27751,27705],{"class":75},[52,27753,27708],{"class":62},[52,27755,27756],{"class":62}," whoami",[52,27758,27759],{"class":58}," |",[52,27761,27762],{"class":75}," head",[52,27764,27765],{"class":308}," -n",[52,27767,27768],{"class":308}," 1",[52,27770,708],{"class":79},[52,27772,27773,27776,27778,27781],{"class":54,"line":66},[52,27774,27775],{"class":308},"echo",[52,27777,2168],{"class":62},[52,27779,27780],{"class":79},"$HF_USER",[52,27782,27783],{"class":62},"\"\n",[14,27785,27786],{},[4509,27787],{"alt":47,"src":27788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[18,27790,27792],{"id":27791},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,27794,27795],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[29,27797,27798,27801],{},[32,27799,27800],{},"Dataset Repo（用于上传演示数据）",[32,27802,27803],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,27805,27806],{},[4509,27807],{"alt":47,"src":27808},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,27810,27811],{},[4509,27812],{"alt":47,"src":27813},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,27815,27816],{},[4509,27817],{"alt":47,"src":27818},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,27820,27821],{},[4509,27822],{"alt":47,"src":27823},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[3141,27825,27826],{},"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":47,"searchDepth":66,"depth":66,"links":27828},[27829,27830,27831],{"id":27668,"depth":66,"text":27669},{"id":27733,"depth":66,"text":27734},{"id":27791,"depth":66,"text":27792},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27659,"description":26025},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27838,"title":27839,"body":27840,"description":26025,"extension":3153,"meta":28037,"navigation":122,"path":28038,"seo":28039,"stem":28040,"__hash__":28041},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27841,"toc":28032},[27842,27846,27850,27946,27954,27959,27963,27979,27982,27986,28029],[10,27843,27845],{"id":27844},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[18,27847,27849],{"id":27848},"_61-录制示教数据","6.1 录制示教数据",[42,27851,27853],{"className":26471,"code":27852,"language":26473,"meta":47,"style":47},"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",[49,27854,27855,27862,27868,27874,27880,27889,27895,27901,27907,27914,27924,27931,27941],{"__ignoreMap":47},[52,27856,27857,27860],{"class":54,"line":55},[52,27858,27859],{"class":75},"lerobot-record",[52,27861,27328],{"class":308},[52,27863,27864,27866],{"class":54,"line":66},[52,27865,27360],{"class":308},[52,27867,27328],{"class":308},[52,27869,27870,27872],{"class":54,"line":83},[52,27871,27438],{"class":308},[52,27873,27328],{"class":308},[52,27875,27876,27878],{"class":54,"line":91},[52,27877,27498],{"class":308},[52,27879,27328],{"class":308},[52,27881,27882,27884,27887],{"class":54,"line":98},[52,27883,27567],{"class":308},[52,27885,27886],{"class":62},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[52,27888,27328],{"class":308},[52,27890,27891,27893],{"class":54,"line":107},[52,27892,27333],{"class":308},[52,27894,27328],{"class":308},[52,27896,27897,27899],{"class":54,"line":113},[52,27898,27405],{"class":308},[52,27900,27328],{"class":308},[52,27902,27903,27905],{"class":54,"line":119},[52,27904,27589],{"class":308},[52,27906,27328],{"class":308},[52,27908,27909,27912],{"class":54,"line":126},[52,27910,27911],{"class":308},"  --display_data=true",[52,27913,27328],{"class":308},[52,27915,27916,27919,27922],{"class":54,"line":132},[52,27917,27918],{"class":308},"  --dataset.repo_id=",[52,27920,27921],{"class":62},"\"Embodied-AI-6\u002Fso101_test\"",[52,27923,27328],{"class":308},[52,27925,27926,27929],{"class":54,"line":138},[52,27927,27928],{"class":308},"  --dataset.num_episodes=10",[52,27930,27328],{"class":308},[52,27932,27933,27936,27939],{"class":54,"line":144},[52,27934,27935],{"class":308},"  --dataset.single_task=",[52,27937,27938],{"class":62},"\"Grab the green cube\"",[52,27940,27328],{"class":308},[52,27942,27943],{"class":54,"line":153},[52,27944,27945],{"class":308},"  --resume=true\n",[29,27947,27948],{},[32,27949,27950,27953],{},[49,27951,27952],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,27955,27956],{},[4509,27957],{"alt":47,"src":27958},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[18,27960,27962],{"id":27961},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[42,27964,27966],{"className":26471,"code":27965,"language":26473,"meta":47,"style":47},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[49,27967,27968],{"__ignoreMap":47},[52,27969,27970,27973,27976],{"class":54,"line":55},[52,27971,27972],{"class":75},"rm",[52,27974,27975],{"class":308}," -rf",[52,27977,27978],{"class":62}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,27980,27981],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[18,27983,27985],{"id":27984},"_63-回放指定-episode","6.3 回放指定 episode",[42,27987,27989],{"className":26471,"code":27988,"language":26473,"meta":47,"style":47},"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",[49,27990,27991,27998,28004,28010,28016,28024],{"__ignoreMap":47},[52,27992,27993,27996],{"class":54,"line":55},[52,27994,27995],{"class":75},"lerobot-replay",[52,27997,27328],{"class":308},[52,27999,28000,28002],{"class":54,"line":66},[52,28001,27360],{"class":308},[52,28003,27328],{"class":308},[52,28005,28006,28008],{"class":54,"line":83},[52,28007,27438],{"class":308},[52,28009,27328],{"class":308},[52,28011,28012,28014],{"class":54,"line":91},[52,28013,27498],{"class":308},[52,28015,27328],{"class":308},[52,28017,28018,28020,28022],{"class":54,"line":98},[52,28019,27918],{"class":308},[52,28021,27921],{"class":62},[52,28023,27328],{"class":308},[52,28025,28026],{"class":54,"line":107},[52,28027,28028],{"class":308},"  --dataset.episode=0\n",[3141,28030,28031],{},"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":47,"searchDepth":66,"depth":66,"links":28033},[28034,28035,28036],{"id":27848,"depth":66,"text":27849},{"id":27961,"depth":66,"text":27962},{"id":27984,"depth":66,"text":27985},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27839,"description":26025},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":28043,"title":28044,"body":28045,"description":26025,"extension":3153,"meta":28173,"navigation":122,"path":28174,"seo":28175,"stem":28176,"__hash__":28177},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":28046,"toc":28171},[28047,28051,28114,28117,28164,28169],[10,28048,28050],{"id":28049},"_7-act-模型训练","7. ACT 模型训练",[42,28052,28054],{"className":26471,"code":28053,"language":26473,"meta":47,"style":47},"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",[49,28055,28056,28063,28071,28078,28085,28092,28099,28106],{"__ignoreMap":47},[52,28057,28058,28061],{"class":54,"line":55},[52,28059,28060],{"class":75},"lerobot-train",[52,28062,27328],{"class":308},[52,28064,28065,28067,28069],{"class":54,"line":66},[52,28066,27918],{"class":308},[52,28068,27921],{"class":62},[52,28070,27328],{"class":308},[52,28072,28073,28076],{"class":54,"line":83},[52,28074,28075],{"class":308},"  --policy.type=act",[52,28077,27328],{"class":308},[52,28079,28080,28083],{"class":54,"line":91},[52,28081,28082],{"class":308},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[52,28084,27328],{"class":308},[52,28086,28087,28090],{"class":54,"line":98},[52,28088,28089],{"class":308},"  --job_name=act_so101_test",[52,28091,27328],{"class":308},[52,28093,28094,28097],{"class":54,"line":107},[52,28095,28096],{"class":308},"  --policy.device=cuda",[52,28098,27328],{"class":308},[52,28100,28101,28104],{"class":54,"line":113},[52,28102,28103],{"class":308},"  --wandb.enable=false",[52,28105,27328],{"class":308},[52,28107,28108,28111],{"class":54,"line":119},[52,28109,28110],{"class":308},"  --policy.repo_id=",[52,28112,28113],{"class":62},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,28115,28116],{},"参数说明：",[29,28118,28119,28125,28131,28137,28143,28152,28158],{},[32,28120,28121,28124],{},[49,28122,28123],{},"--dataset.repo_id","：训练数据集仓库。",[32,28126,28127,28130],{},[49,28128,28129],{},"--policy.type=act","：策略模型类型为 ACT。",[32,28132,28133,28136],{},[49,28134,28135],{},"--output_dir","：本地训练输出目录。",[32,28138,28139,28142],{},[49,28140,28141],{},"--job_name","：训练任务名称。",[32,28144,28145,28148,28149,27212],{},[49,28146,28147],{},"--policy.device","：训练设备（如 ",[49,28150,28151],{},"cuda",[32,28153,28154,28157],{},[49,28155,28156],{},"--wandb.enable","：是否启用 WandB 可视化。",[32,28159,28160,28163],{},[49,28161,28162],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,28165,28166],{},[4509,28167],{"alt":47,"src":28168},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[3141,28170,28031],{},{"title":47,"searchDepth":66,"depth":66,"links":28172},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":28044,"description":26025},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":28179,"title":28180,"body":28181,"description":26025,"extension":3153,"meta":28268,"navigation":122,"path":28269,"seo":28270,"stem":28271,"__hash__":28272},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":28182,"toc":28266},[28183,28186,28189,28256,28264],[10,28184,28180],{"id":28185},"_8-策略部署与自动采集",[14,28187,28188],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[42,28190,28192],{"className":26471,"code":28191,"language":26473,"meta":47,"style":47},"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",[49,28193,28194,28200,28206,28212,28220,28226,28233,28241,28249],{"__ignoreMap":47},[52,28195,28196,28198],{"class":54,"line":55},[52,28197,27859],{"class":75},[52,28199,27328],{"class":308},[52,28201,28202,28204],{"class":54,"line":66},[52,28203,27360],{"class":308},[52,28205,27328],{"class":308},[52,28207,28208,28210],{"class":54,"line":83},[52,28209,27438],{"class":308},[52,28211,27328],{"class":308},[52,28213,28214,28216,28218],{"class":54,"line":91},[52,28215,27567],{"class":308},[52,28217,27886],{"class":62},[52,28219,27328],{"class":308},[52,28221,28222,28224],{"class":54,"line":98},[52,28223,27498],{"class":308},[52,28225,27328],{"class":308},[52,28227,28228,28231],{"class":54,"line":107},[52,28229,28230],{"class":308},"  --display_data=false",[52,28232,27328],{"class":308},[52,28234,28235,28237,28239],{"class":54,"line":113},[52,28236,27918],{"class":308},[52,28238,27921],{"class":62},[52,28240,27328],{"class":308},[52,28242,28243,28245,28247],{"class":54,"line":119},[52,28244,27935],{"class":308},[52,28246,27938],{"class":62},[52,28248,27328],{"class":308},[52,28250,28251,28254],{"class":54,"line":126},[52,28252,28253],{"class":308},"  --policy.path=",[52,28255,28113],{"class":62},[29,28257,28258],{},[32,28259,28260,28263],{},[49,28261,28262],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[3141,28265,28031],{},{"title":47,"searchDepth":66,"depth":66,"links":28267},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":28180,"description":26025},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":28274,"title":28275,"body":28276,"description":26025,"extension":3153,"meta":28305,"navigation":122,"path":28306,"seo":28307,"stem":28308,"__hash__":28309},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":28277,"toc":28303},[28278,28282,28285,28291,28294,28300],[10,28279,28281],{"id":28280},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,28283,28284],{},"项目地址：",[14,28286,28287],{},[3451,28288,28289],{"href":28289,"rel":28290},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[26514],[14,28292,28293],{},"参考教程：",[14,28295,28296],{},[3451,28297,28298],{"href":28298,"rel":28299},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[26514],[14,28301,28302],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":47,"searchDepth":66,"depth":66,"links":28304},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":28275,"description":26025},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":28311,"title":28312,"body":28313,"description":28317,"extension":3153,"meta":28318,"navigation":122,"path":28319,"seo":28320,"stem":28321,"__hash__":28322},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":28314,"toc":28315},[],{"title":47,"searchDepth":66,"depth":66,"links":28316},[],"act复现",{"category":26027},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":28312,"description":28317},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":28324,"title":28325,"body":28326,"description":47,"extension":3153,"meta":28628,"navigation":122,"path":28629,"seo":28630,"stem":28631,"__hash__":28632},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":28327,"toc":28620},[28328,28331,28335,28345,28352,28359,28362,28369,28372,28375,28379,28391,28395,28441,28444,28447,28450,28453,28456,28460,28498,28504,28508,28562,28567,28570,28573,28578,28581,28586,28589,28592,28596,28599,28602,28606],[10,28329,28325],{"id":28330},"_1简介",[3195,28332,28334],{"id":28333},"_11什么是-docker","1.1什么是 Docker？",[14,28336,28337,28338,28341,28342],{},"Docker 是一个开源的 ",[2389,28339,28340],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2389,28343,28344],{},"一次构建，到处运行。",[14,28346,28347,28348,28351],{},"“ ",[2389,28349,28350],{},"一次构建，到处运行"," ”也就是说：",[1696,28353,28354],{},[32,28355,28356],{},[2389,28357,28358],{},"之前：",[14,28360,28361],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[1696,28363,28364],{},[32,28365,28366],{},[2389,28367,28368],{},"使用docker后：",[14,28370,28371],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,28373,28374],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[3195,28376,28378],{"id":28377},"_12它是怎么工作的","1.2.它是怎么工作的？",[29,28380,28381,28384],{},[32,28382,28383],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[32,28385,28386,28387,28390],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2389,28388,28389],{},"无论在哪运行都一样稳定"," 。",[3195,28392,28394],{"id":28393},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[3353,28396,28397,28407],{},[3356,28398,28399],{},[3359,28400,28401,28404],{},[3362,28402,28403],{"align":26385},"概念",[3362,28405,28406],{"align":26385},"解释",[3399,28408,28409,28417,28425,28433],{},[3359,28410,28411,28414],{},[3404,28412,28413],{"align":26385},"镜像",[3404,28415,28416],{"align":26385},"Image，运行容器的模板，像是一个应用快照",[3359,28418,28419,28422],{},[3404,28420,28421],{"align":26385},"容器",[3404,28423,28424],{"align":26385},"Container，运行中的镜像实例，有自己的文件系统、网络等",[3359,28426,28427,28430],{},[3404,28428,28429],{"align":26385},"Dockerfile",[3404,28431,28432],{"align":26385},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[3359,28434,28435,28438],{},[3404,28436,28437],{"align":26385},"仓库",[3404,28439,28440],{"align":26385},"Registry，存放镜像的地方，比如 Docker Hub",[14,28442,28443],{},"抽象化理解:",[14,28445,28446],{},"Docker镜像≈C++类",[14,28448,28449],{},"Docker容器≈C++类实例(即对象)",[14,28451,28452],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,28454,28455],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[3195,28457,28459],{"id":28458},"_14类比理解","1.4.类比理解",[3353,28461,28462,28472],{},[3356,28463,28464],{},[3359,28465,28466,28469],{},[3362,28467,28468],{"align":26385},"传统部署",[3362,28470,28471],{"align":26385},"Docker部署",[3399,28473,28474,28482,28490],{},[3359,28475,28476,28479],{},[3404,28477,28478],{"align":26385},"手动安装依赖、调试版本不一致问题",[3404,28480,28481],{"align":26385},"一次打包环境和代码",[3359,28483,28484,28487],{},[3404,28485,28486],{"align":26385},"程序“裸奔”跑在系统上",[3404,28488,28489],{"align":26385},"程序“穿着容器”隔离运行",[3359,28491,28492,28495],{},[3404,28493,28494],{"align":26385},"容易“在我电脑上能跑”",[3404,28496,28497],{"align":26385},"保证“无论在哪都能跑”",[14,28499,28500,28501],{},"就像快递包裹： ",[2389,28502,28503],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[3195,28505,28507],{"id":28506},"_15docker-的核心优势","1.5.Docker 的核心优势",[3353,28509,28510,28520],{},[3356,28511,28512],{},[3359,28513,28514,28517],{},[3362,28515,28516],{"align":26385},"优势",[3362,28518,28519],{"align":26385},"说明",[3399,28521,28522,28530,28538,28546,28554],{},[3359,28523,28524,28527],{},[3404,28525,28526],{"align":26385},"轻量级",[3404,28528,28529],{"align":26385},"基于系统内核共享，启动速度快，占资源少",[3359,28531,28532,28535],{},[3404,28533,28534],{"align":26385},"跨平台",[3404,28536,28537],{"align":26385},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[3359,28539,28540,28543],{},[3404,28541,28542],{"align":26385},"易于迁移部署",[3404,28544,28545],{"align":26385},"应用和环境一起封装，不怕依赖不一致",[3359,28547,28548,28551],{},[3404,28549,28550],{"align":26385},"易于版本控制",[3404,28552,28553],{"align":26385},"镜像版本可控，支持回滚",[3359,28555,28556,28559],{},[3404,28557,28558],{"align":26385},"生态丰富",[3404,28560,28561],{"align":26385},"Docker Hub 上有成千上万的现成镜像可用",[1696,28563,28564],{},[32,28565,28566],{},"在Linux上可以几乎实现无性能损失。",[14,28568,28569],{},"docker里的发行版和本机共用Linux内核。",[14,28571,28572],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[1696,28574,28575],{},[32,28576,28577],{},"可以快速部署在绝大多数Linux发行版",[14,28579,28580],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[1696,28582,28583],{},[32,28584,28585],{},"配置环境简单",[14,28587,28588],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,28590,28591],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[1696,28593,28594],{},[32,28595,28558],{},[14,28597,28598],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,28600,28601],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[3195,28603,28605],{"id":28604},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[29,28607,28608,28611,28614,28617],{},[32,28609,28610],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[32,28612,28613],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[32,28615,28616],{},"微服务架构：每个服务一个容器，灵活组合",[32,28618,28619],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":47,"searchDepth":66,"depth":66,"links":28621},[28622,28623,28624,28625,28626,28627],{"id":28333,"depth":83,"text":28334},{"id":28377,"depth":83,"text":28378},{"id":28393,"depth":83,"text":28394},{"id":28458,"depth":83,"text":28459},{"id":28506,"depth":83,"text":28507},{"id":28604,"depth":83,"text":28605},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":28325,"description":47},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28634,"title":28635,"body":28636,"description":47,"extension":3153,"meta":29369,"navigation":122,"path":29370,"seo":29371,"stem":29372,"__hash__":29373},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28637,"toc":29364},[28638,28641,28645,28648,28651,28657,28663,28667,28676,28679,28736,28739,28790,28793,28876,28879,28916,28920,28931,28944,28951,28954,29034,29037,29087,29090,29113,29117,29124,29127,29143,29149,29152,29168,29174,29177,29193,29207,29213,29233,29239,29242,29254,29260,29263,29277,29283,29286,29306,29311,29314,29317,29321,29324,29327,29330,29337,29340,29343,29346,29351,29356,29361],[10,28639,28635],{"id":28640},"_2安装docker",[3195,28642,28644],{"id":28643},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,28646,28647],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,28649,28650],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,28652,28653],{},[3451,28654,28655],{"href":28655,"rel":28656},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[26514],[14,28658,28659],{},[3451,28660,28661],{"href":28661,"rel":28662},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[26514],[24646,28664,28666],{"id":28665},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,28668,28669,28670,28675],{},"以下内容根据 ",[3451,28671,28674],{"href":28672,"rel":28673},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[26514],"官方文档"," 修改而来。",[14,28677,28678],{},"如果你过去安装过 docker，先删掉：",[42,28680,28682],{"className":26471,"code":28681,"language":26473,"meta":47,"style":47},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[49,28683,28684],{"__ignoreMap":47},[52,28685,28686,28688,28691,28694,28697,28700,28703,28706,28709,28712,28715,28718,28721,28724,28727,28730,28733],{"class":54,"line":55},[52,28687,6014],{"class":58},[52,28689,28690],{"class":79}," pkg ",[52,28692,28693],{"class":58},"in",[52,28695,28696],{"class":62}," docker.io",[52,28698,28699],{"class":62}," docker-doc",[52,28701,28702],{"class":62}," docker-compose",[52,28704,28705],{"class":62}," docker-compose-v2",[52,28707,28708],{"class":62}," podman-docker",[52,28710,28711],{"class":62}," containerd",[52,28713,28714],{"class":62}," runc",[52,28716,28717],{"class":79},"; ",[52,28719,28720],{"class":58},"do",[52,28722,28723],{"class":75}," sudo",[52,28725,28726],{"class":62}," apt-get",[52,28728,28729],{"class":62}," remove",[52,28731,28732],{"class":79}," $pkg; ",[52,28734,28735],{"class":58},"done\n",[14,28737,28738],{},"首先安装依赖和GPG：",[42,28740,28744],{"className":28741,"code":28742,"language":28743,"meta":47,"style":47},"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",[49,28745,28746,28751,28756,28761,28766,28771,28776,28780,28785],{"__ignoreMap":47},[52,28747,28748],{"class":54,"line":55},[52,28749,28750],{},"# Add Docker's official GPG key:\n",[52,28752,28753],{"class":54,"line":66},[52,28754,28755],{},"sudo apt-get update\n",[52,28757,28758],{"class":54,"line":83},[52,28759,28760],{},"sudo apt-get install ca-certificates curl\n",[52,28762,28763],{"class":54,"line":91},[52,28764,28765],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[52,28767,28768],{"class":54,"line":98},[52,28769,28770],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[52,28772,28773],{"class":54,"line":107},[52,28774,28775],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[52,28777,28778],{"class":54,"line":113},[52,28779,123],{"emptyLinePlaceholder":122},[52,28781,28782],{"class":54,"line":119},[52,28783,28784],{},"# 如果上面这行报错就弄下面这行\n",[52,28786,28787],{"class":54,"line":126},[52,28788,28789],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,28791,28792],{},"信任 Docker 的 GPG 公钥并添加仓库：",[42,28794,28796],{"className":26471,"code":28795,"language":26473,"meta":47,"style":47},"# 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",[49,28797,28798,28803,28809,28826,28859],{"__ignoreMap":47},[52,28799,28800],{"class":54,"line":55},[52,28801,28802],{"class":94},"# Add the repository to Apt sources:\n",[52,28804,28805,28807],{"class":54,"line":66},[52,28806,27775],{"class":308},[52,28808,27328],{"class":308},[52,28810,28811,28814,28817,28820,28823],{"class":54,"line":83},[52,28812,28813],{"class":62},"  \"deb [arch=$(",[52,28815,28816],{"class":75},"dpkg",[52,28818,28819],{"class":308}," --print-architecture",[52,28821,28822],{"class":62},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[52,28824,28825],{"class":308},"\\\n",[52,28827,28828,28831,28833,28835,28838,28841,28843,28845,28848,28850,28852,28855,28857],{"class":54,"line":91},[52,28829,28830],{"class":62},"  \"",[52,28832,27749],{"class":79},[52,28834,3757],{"class":308},[52,28836,28837],{"class":62}," \u002Fetc\u002Fos-release",[52,28839,28840],{"class":79}," && ",[52,28842,27775],{"class":308},[52,28844,2168],{"class":62},[52,28846,28847],{"class":79},"$VERSION_CODENAME",[52,28849,2844],{"class":62},[52,28851,2283],{"class":79},[52,28853,28854],{"class":62},"\" stable\"",[52,28856,27759],{"class":58},[52,28858,27328],{"class":308},[52,28860,28861,28864,28867,28870,28873],{"class":54,"line":98},[52,28862,28863],{"class":75},"  sudo",[52,28865,28866],{"class":62}," tee",[52,28868,28869],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[52,28871,28872],{"class":58}," >",[52,28874,28875],{"class":62}," \u002Fdev\u002Fnull\n",[14,28877,28878],{},"最后安装",[42,28880,28882],{"className":26471,"code":28881,"language":26473,"meta":47,"style":47},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[49,28883,28884,28893],{"__ignoreMap":47},[52,28885,28886,28888,28890],{"class":54,"line":55},[52,28887,27226],{"class":75},[52,28889,28726],{"class":62},[52,28891,28892],{"class":62}," update\n",[52,28894,28895,28897,28899,28901,28904,28907,28910,28913],{"class":54,"line":66},[52,28896,27226],{"class":75},[52,28898,28726],{"class":62},[52,28900,26483],{"class":62},[52,28902,28903],{"class":62}," docker-ce",[52,28905,28906],{"class":62}," docker-ce-cli",[52,28908,28909],{"class":62}," containerd.io",[52,28911,28912],{"class":62}," docker-buildx-plugin",[52,28914,28915],{"class":62}," docker-compose-plugin\n",[24646,28917,28919],{"id":28918},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,28921,28922,28923,28926,28927,28930],{},"查看自己自己包管理工具版本（dnf是 ",[2389,28924,28925],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2389,28928,28929],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[42,28932,28934],{"className":26471,"code":28933,"language":26473,"meta":47,"style":47},"dnf --version\n",[49,28935,28936],{"__ignoreMap":47},[52,28937,28938,28941],{"class":54,"line":55},[52,28939,28940],{"class":75},"dnf",[52,28942,28943],{"class":308}," --version\n",[14,28945,28669,28946,28950],{},[3451,28947,28674],{"href":28948,"rel":28949},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[26514]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,28952,28953],{},"如果你之前安装过 docker，请先删掉",[42,28955,28957],{"className":26471,"code":28956,"language":26473,"meta":47,"style":47},"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",[49,28958,28959,28973,28980,28987,28994,29001,29008,29015,29022,29029],{"__ignoreMap":47},[52,28960,28961,28963,28966,28968,28971],{"class":54,"line":55},[52,28962,27226],{"class":75},[52,28964,28965],{"class":62}," dnf",[52,28967,28729],{"class":62},[52,28969,28970],{"class":62}," docker",[52,28972,27328],{"class":308},[52,28974,28975,28978],{"class":54,"line":66},[52,28976,28977],{"class":62},"                  docker-client",[52,28979,27328],{"class":308},[52,28981,28982,28985],{"class":54,"line":83},[52,28983,28984],{"class":62},"                  docker-client-latest",[52,28986,27328],{"class":308},[52,28988,28989,28992],{"class":54,"line":91},[52,28990,28991],{"class":62},"                  docker-common",[52,28993,27328],{"class":308},[52,28995,28996,28999],{"class":54,"line":98},[52,28997,28998],{"class":62},"                  docker-latest",[52,29000,27328],{"class":308},[52,29002,29003,29006],{"class":54,"line":107},[52,29004,29005],{"class":62},"                  docker-latest-logrotate",[52,29007,27328],{"class":308},[52,29009,29010,29013],{"class":54,"line":113},[52,29011,29012],{"class":62},"                  docker-logrotate",[52,29014,27328],{"class":308},[52,29016,29017,29020],{"class":54,"line":119},[52,29018,29019],{"class":62},"                  docker-selinux",[52,29021,27328],{"class":308},[52,29023,29024,29027],{"class":54,"line":126},[52,29025,29026],{"class":62},"                  docker-engine-selinux",[52,29028,27328],{"class":308},[52,29030,29031],{"class":54,"line":132},[52,29032,29033],{"class":62},"                  docker-engine\n",[14,29035,29036],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[42,29038,29040],{"className":26471,"code":29039,"language":26473,"meta":47,"style":47},"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",[49,29041,29042,29056,29071],{"__ignoreMap":47},[52,29043,29044,29046,29048,29051,29053],{"class":54,"line":55},[52,29045,27226],{"class":75},[52,29047,28965],{"class":62},[52,29049,29050],{"class":308}," -y",[52,29052,26483],{"class":62},[52,29054,29055],{"class":62}," dnf-plugins-core\n",[52,29057,29058,29060,29062,29065,29068],{"class":54,"line":66},[52,29059,27226],{"class":75},[52,29061,28965],{"class":62},[52,29063,29064],{"class":62}," config-manager",[52,29066,29067],{"class":62}," addrepo",[52,29069,29070],{"class":308}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[52,29072,29073,29075,29078,29081,29084],{"class":54,"line":83},[52,29074,27226],{"class":75},[52,29076,29077],{"class":62}," sed",[52,29079,29080],{"class":308}," -i",[52,29082,29083],{"class":62}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[52,29085,29086],{"class":62}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,29088,29089],{},"最后安装：",[42,29091,29093],{"className":26471,"code":29092,"language":26473,"meta":47,"style":47},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[49,29094,29095],{"__ignoreMap":47},[52,29096,29097,29099,29101,29103,29105,29107,29109,29111],{"class":54,"line":55},[52,29098,27226],{"class":75},[52,29100,28965],{"class":62},[52,29102,26483],{"class":62},[52,29104,28903],{"class":62},[52,29106,28906],{"class":62},[52,29108,28909],{"class":62},[52,29110,28912],{"class":62},[52,29112,28915],{"class":62},[3195,29114,29116],{"id":29115},"_22配置环境","2.2.配置环境",[24646,29118,29120,29123],{"id":29119},"_221检查-docker-服务状态",[2389,29121,29122],{},"2.2.1.检查 Docker 服务状态"," ：",[14,29125,29126],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[42,29128,29130],{"className":26471,"code":29129,"language":26473,"meta":47,"style":47},"systemctl status docker\n",[49,29131,29132],{"__ignoreMap":47},[52,29133,29134,29137,29140],{"class":54,"line":55},[52,29135,29136],{"class":75},"systemctl",[52,29138,29139],{"class":62}," status",[52,29141,29142],{"class":62}," docker\n",[24646,29144,29146,29123],{"id":29145},"_222启动-docker-服务",[2389,29147,29148],{},"2.2.2.启动 Docker 服务",[14,29150,29151],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[42,29153,29155],{"className":26471,"code":29154,"language":26473,"meta":47,"style":47},"sudo systemctl start docker\n",[49,29156,29157],{"__ignoreMap":47},[52,29158,29159,29161,29164,29166],{"class":54,"line":55},[52,29160,27226],{"class":75},[52,29162,29163],{"class":62}," systemctl",[52,29165,7159],{"class":62},[52,29167,29142],{"class":62},[24646,29169,29171,29123],{"id":29170},"_223设置-docker-开机自启",[2389,29172,29173],{},"2.2.3.设置 Docker 开机自启",[14,29175,29176],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[42,29178,29180],{"className":26471,"code":29179,"language":26473,"meta":47,"style":47},"sudo systemctl enable docker\n",[49,29181,29182],{"__ignoreMap":47},[52,29183,29184,29186,29188,29191],{"class":54,"line":55},[52,29185,27226],{"class":75},[52,29187,29163],{"class":62},[52,29189,29190],{"class":62}," enable",[52,29192,29142],{"class":62},[24646,29194,29196,16443,29199,16443,29204,29123],{"id":29195},"_224将用户添加到-docker-组",[2389,29197,29198],{},"2.2.4.将用户添加到",[2389,29200,29201],{},[49,29202,29203],{},"docker",[2389,29205,29206],{},"组",[14,29208,29209,29210,29212],{},"使用以下命令将当前用户添加到 ",[49,29211,29203],{}," 组：",[42,29214,29216],{"className":26471,"code":29215,"language":26473,"meta":47,"style":47},"sudo usermod -aG docker $USER\n",[49,29217,29218],{"__ignoreMap":47},[52,29219,29220,29222,29225,29228,29230],{"class":54,"line":55},[52,29221,27226],{"class":75},[52,29223,29224],{"class":62}," usermod",[52,29226,29227],{"class":308}," -aG",[52,29229,28970],{"class":62},[52,29231,29232],{"class":79}," $USER\n",[24646,29234,29236,29123],{"id":29235},"_225退出并重新登录",[2389,29237,29238],{},"2.2.5.退出并重新登录",[14,29240,29241],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[42,29243,29245],{"className":26471,"code":29244,"language":26473,"meta":47,"style":47},"newgrp docker\n",[49,29246,29247],{"__ignoreMap":47},[52,29248,29249,29252],{"class":54,"line":55},[52,29250,29251],{"class":75},"newgrp",[52,29253,29142],{"class":62},[24646,29255,29257,29123],{"id":29256},"_226重新启动-docker-服务如果需要",[2389,29258,29259],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,29261,29262],{},"确保 Docker 服务正在运行，可以使用以下命令：",[42,29264,29265],{"className":26471,"code":29154,"language":26473,"meta":47,"style":47},[49,29266,29267],{"__ignoreMap":47},[52,29268,29269,29271,29273,29275],{"class":54,"line":55},[52,29270,27226],{"class":75},[52,29272,29163],{"class":62},[52,29274,7159],{"class":62},[52,29276,29142],{"class":62},[24646,29278,29280,29123],{"id":29279},"_227重启电脑后检查-docker-服务状态",[2389,29281,29282],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,29284,29285],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[42,29287,29289],{"className":26471,"code":29288,"language":26473,"meta":47,"style":47},"sudo reboot\nsystemctl status docker\n",[49,29290,29291,29298],{"__ignoreMap":47},[52,29292,29293,29295],{"class":54,"line":55},[52,29294,27226],{"class":75},[52,29296,29297],{"class":62}," reboot\n",[52,29299,29300,29302,29304],{"class":54,"line":66},[52,29301,29136],{"class":75},[52,29303,29139],{"class":62},[52,29305,29142],{"class":62},[14,29307,29308],{},[4509,29309],{"alt":47,"src":29310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,29312,29313],{},"第三行显示enabled说明开机自启动成功",[14,29315,29316],{},"按q退出",[3195,29318,29320],{"id":29319},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,29322,29323],{},"优先使用linux来使用docker是比较好的",[14,29325,29326],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,29328,29329],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,29331,29332,29333],{},"官方下载安装:",[3451,29334,29335],{"href":29335,"rel":29336},"https:\u002F\u002Fwww.docker.com\u002F",[26514],[14,29338,29339],{},"Windows的Docker显卡直通与USB直通:",[14,29341,29342],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,29344,29345],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,29347,29348],{},[4509,29349],{"alt":47,"src":29350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,29352,29353],{},[4509,29354],{"alt":47,"src":29355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,29357,29358],{},[4509,29359],{"alt":47,"src":29360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[3141,29362,29363],{},"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":47,"searchDepth":66,"depth":66,"links":29365},[29366,29367,29368],{"id":28643,"depth":83,"text":28644},{"id":29115,"depth":83,"text":29116},{"id":29319,"depth":83,"text":29320},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28635,"description":47},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":29375,"title":29376,"body":29377,"description":29384,"extension":3153,"meta":30077,"navigation":122,"path":30078,"seo":30079,"stem":30080,"__hash__":30081},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":29378,"toc":30071},[29379,29382,29385,29389,29394,29399,29402,29430,29435,29444,29447,29452,29456,29463,29468,29474,29478,29481,29485,29490,29582,29587,29605,29610,29631,29636,29652,29656,29661,29690,29695,29741,29746,29790,29798,29815,29820,29836,29841,29855,29858,29861,29864,29867,29896,29899,29904,29908,29911,29914,29920,29923,29926,29929,29991,29998,30003,30006,30024,30028,30031,30048,30051,30054,30068],[10,29380,29376],{"id":29381},"_3docker直通",[14,29383,29384],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[3195,29386,29388],{"id":29387},"_31usb直通","3.1.USB直通",[14,29390,29391],{},[4509,29392],{"alt":47,"src":29393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[1696,29395,29396],{},[32,29397,29398],{},"方法一(不是很推荐新手)：",[14,29400,29401],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[42,29403,29405],{"className":26471,"code":29404,"language":26473,"meta":47,"style":47},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[49,29406,29407,29415,29420],{"__ignoreMap":47},[52,29408,29409,29412],{"class":54,"line":55},[52,29410,29411],{"class":75},"ls",[52,29413,29414],{"class":62}," \u002Fdev\n",[52,29416,29417],{"class":54,"line":66},[52,29418,29419],{"class":94},"#例如\n",[52,29421,29422,29425,29427],{"class":54,"line":83},[52,29423,29424],{"class":79},"--device",[52,29426,292],{"class":58},[52,29428,29429],{"class":62},"\u002Fdev\u002Ftty_USB0\n",[1696,29431,29432],{"start":66},[32,29433,29434],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[42,29436,29438],{"className":26471,"code":29437,"language":26473,"meta":47,"style":47},"--privileged\n",[49,29439,29440],{"__ignoreMap":47},[52,29441,29442],{"class":54,"line":55},[52,29443,29437],{"class":75},[14,29445,29446],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,29448,29449],{},[4509,29450],{"alt":47,"src":29451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[3195,29453,29455],{"id":29454},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,29457,29458,29459,29462],{},"NVIDIA Container Toolkit使用户 ",[2389,29460,29461],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,29464,29465],{},[4509,29466],{"alt":47,"src":29467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,29469,29470],{},[3451,29471,29472],{"href":29472,"rel":29473},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[26514],[24646,29475,29477],{"id":29476},"_321安装","3.2.1.安装",[14,29479,29480],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[25558,29482,29484],{"id":29483},"_3211ubuntu","3.2.1.1.Ubuntu",[1696,29486,29487],{},[32,29488,29489],{},"配置存储库 并更新",[42,29491,29493],{"className":26471,"code":29492,"language":26473,"meta":47,"style":47},"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",[49,29494,29495,29524,29544,29556,29568,29574],{"__ignoreMap":47},[52,29496,29497,29500,29503,29506,29508,29510,29513,29516,29519,29522],{"class":54,"line":55},[52,29498,29499],{"class":75},"curl",[52,29501,29502],{"class":308}," -fsSL",[52,29504,29505],{"class":62}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[52,29507,27759],{"class":58},[52,29509,28723],{"class":75},[52,29511,29512],{"class":62}," gpg",[52,29514,29515],{"class":308}," --dearmor",[52,29517,29518],{"class":308}," -o",[52,29520,29521],{"class":62}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[52,29523,27328],{"class":308},[52,29525,29526,29529,29531,29534,29537,29540,29542],{"class":54,"line":66},[52,29527,29528],{"class":79},"  && ",[52,29530,29499],{"class":75},[52,29532,29533],{"class":308}," -s",[52,29535,29536],{"class":308}," -L",[52,29538,29539],{"class":62}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[52,29541,27759],{"class":58},[52,29543,27328],{"class":308},[52,29545,29546,29549,29552,29554],{"class":54,"line":83},[52,29547,29548],{"class":75},"    sed",[52,29550,29551],{"class":62}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[52,29553,27759],{"class":58},[52,29555,27328],{"class":308},[52,29557,29558,29561,29563,29566],{"class":54,"line":91},[52,29559,29560],{"class":75},"    sudo",[52,29562,28866],{"class":62},[52,29564,29565],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[52,29567,27328],{"class":308},[52,29569,29570,29572],{"class":54,"line":98},[52,29571,29528],{"class":79},[52,29573,28825],{"class":308},[52,29575,29576,29578,29580],{"class":54,"line":107},[52,29577,29560],{"class":75},[52,29579,28726],{"class":62},[52,29581,28892],{"class":62},[1696,29583,29584],{"start":66},[32,29585,29586],{},"安装nvidia-docker2",[42,29588,29590],{"className":26471,"code":29589,"language":26473,"meta":47,"style":47},"sudo apt-get install -y nvidia-docker2\n",[49,29591,29592],{"__ignoreMap":47},[52,29593,29594,29596,29598,29600,29602],{"class":54,"line":55},[52,29595,27226],{"class":75},[52,29597,28726],{"class":62},[52,29599,26483],{"class":62},[52,29601,29050],{"class":308},[52,29603,29604],{"class":62}," nvidia-docker2\n",[1696,29606,29607],{"start":83},[32,29608,29609],{},"使用nvidia-ctk命令配置container runtime",[42,29611,29613],{"className":26471,"code":29612,"language":26473,"meta":47,"style":47},"sudo nvidia-ctk runtime configure --runtime=docker\n",[49,29614,29615],{"__ignoreMap":47},[52,29616,29617,29619,29622,29625,29628],{"class":54,"line":55},[52,29618,27226],{"class":75},[52,29620,29621],{"class":62}," nvidia-ctk",[52,29623,29624],{"class":62}," runtime",[52,29626,29627],{"class":62}," configure",[52,29629,29630],{"class":308}," --runtime=docker\n",[1696,29632,29633],{"start":91},[32,29634,29635],{},"重启docker服务:",[42,29637,29639],{"className":26471,"code":29638,"language":26473,"meta":47,"style":47},"sudo systemctl restart docker\n",[49,29640,29641],{"__ignoreMap":47},[52,29642,29643,29645,29647,29650],{"class":54,"line":55},[52,29644,27226],{"class":75},[52,29646,29163],{"class":62},[52,29648,29649],{"class":62}," restart",[52,29651,29142],{"class":62},[25558,29653,29655],{"id":29654},"_3212fedora","3.2.1.2.Fedora",[1696,29657,29658],{},[32,29659,29660],{},"配置存储库",[42,29662,29664],{"className":26471,"code":29663,"language":26473,"meta":47,"style":47},"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",[49,29665,29666,29681],{"__ignoreMap":47},[52,29667,29668,29670,29672,29674,29677,29679],{"class":54,"line":55},[52,29669,29499],{"class":75},[52,29671,29533],{"class":308},[52,29673,29536],{"class":308},[52,29675,29676],{"class":62}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[52,29678,27759],{"class":58},[52,29680,27328],{"class":308},[52,29682,29683,29685,29687],{"class":54,"line":66},[52,29684,27226],{"class":75},[52,29686,28866],{"class":62},[52,29688,29689],{"class":62}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[1696,29691,29692],{"start":66},[32,29693,29694],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[42,29696,29698],{"className":26471,"code":29697,"language":26473,"meta":47,"style":47},"# 如果是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",[49,29699,29700,29705,29719,29723,29728],{"__ignoreMap":47},[52,29701,29702],{"class":54,"line":55},[52,29703,29704],{"class":94},"# 如果是RHEL或者Rocky（DNF4）\n",[52,29706,29707,29709,29711,29713,29716],{"class":54,"line":66},[52,29708,27226],{"class":75},[52,29710,28965],{"class":62},[52,29712,29064],{"class":62},[52,29714,29715],{"class":308}," --add-repo",[52,29717,29718],{"class":62}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[52,29720,29721],{"class":54,"line":83},[52,29722,123],{"emptyLinePlaceholder":122},[52,29724,29725],{"class":54,"line":91},[52,29726,29727],{"class":94},"# 如果是Feodra41+（DNF5）\n",[52,29729,29730,29732,29734,29736,29738],{"class":54,"line":98},[52,29731,27226],{"class":75},[52,29733,28965],{"class":62},[52,29735,29064],{"class":62},[52,29737,29067],{"class":62},[52,29739,29740],{"class":308}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[1696,29742,29743],{"start":83},[32,29744,29745],{},"安装NVIDIA Container Toolki包",[42,29747,29749],{"className":26471,"code":29748,"language":26473,"meta":47,"style":47},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[49,29750,29751,29756,29769,29773,29778],{"__ignoreMap":47},[52,29752,29753],{"class":54,"line":55},[52,29754,29755],{"class":94},"# 如果是RHEL或者Rocky\n",[52,29757,29758,29760,29762,29764,29766],{"class":54,"line":66},[52,29759,27226],{"class":75},[52,29761,28965],{"class":62},[52,29763,26483],{"class":62},[52,29765,29050],{"class":308},[52,29767,29768],{"class":62}," nvidia-container-toolkit\n",[52,29770,29771],{"class":54,"line":83},[52,29772,123],{"emptyLinePlaceholder":122},[52,29774,29775],{"class":54,"line":91},[52,29776,29777],{"class":94},"# 如果是Fedora\n",[52,29779,29780,29782,29784,29786,29788],{"class":54,"line":98},[52,29781,27226],{"class":75},[52,29783,28965],{"class":62},[52,29785,26483],{"class":62},[52,29787,29050],{"class":308},[52,29789,29768],{"class":62},[1696,29791,29792],{"start":91},[32,29793,29794,29795,29797],{},"安装nvidia-docker2 ： 在Fedora上使用",[49,29796,28940],{},"进行安装",[42,29799,29801],{"className":26471,"code":29800,"language":26473,"meta":47,"style":47},"sudo dnf install -y nvidia-docker2\n",[49,29802,29803],{"__ignoreMap":47},[52,29804,29805,29807,29809,29811,29813],{"class":54,"line":55},[52,29806,27226],{"class":75},[52,29808,28965],{"class":62},[52,29810,26483],{"class":62},[52,29812,29050],{"class":308},[52,29814,29604],{"class":62},[1696,29816,29817],{"start":98},[32,29818,29819],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[42,29821,29822],{"className":26471,"code":29612,"language":26473,"meta":47,"style":47},[49,29823,29824],{"__ignoreMap":47},[52,29825,29826,29828,29830,29832,29834],{"class":54,"line":55},[52,29827,27226],{"class":75},[52,29829,29621],{"class":62},[52,29831,29624],{"class":62},[52,29833,29627],{"class":62},[52,29835,29630],{"class":308},[1696,29837,29838],{"start":107},[32,29839,29840],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[42,29842,29843],{"className":26471,"code":29638,"language":26473,"meta":47,"style":47},[49,29844,29845],{"__ignoreMap":47},[52,29846,29847,29849,29851,29853],{"class":54,"line":55},[52,29848,27226],{"class":75},[52,29850,29163],{"class":62},[52,29852,29649],{"class":62},[52,29854,29142],{"class":62},[14,29856,29857],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,29859,29860],{},"方法：",[14,29862,29863],{},"1️⃣nvidia-smi",[14,29865,29866],{},"2️⃣运行nvidia cuda 容器进行测试",[42,29868,29870],{"className":26471,"code":29869,"language":26473,"meta":47,"style":47},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[49,29871,29872],{"__ignoreMap":47},[52,29873,29874,29876,29878,29881,29884,29887,29890,29893],{"class":54,"line":55},[52,29875,27226],{"class":75},[52,29877,28970],{"class":62},[52,29879,29880],{"class":62}," run",[52,29882,29883],{"class":308}," --rm",[52,29885,29886],{"class":308}," --gpus",[52,29888,29889],{"class":62}," all",[52,29891,29892],{"class":62}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[52,29894,29895],{"class":62}," nvidia-smi\n",[14,29897,29898],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,29900,29901],{},[4509,29902],{"alt":47,"src":29903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[3195,29905,29907],{"id":29906},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,29909,29910],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,29912,29913],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,29915,29916],{},[3451,29917,29918],{"href":29918,"rel":29919},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[26514],[14,29921,29922],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,29924,29925],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,29927,29928],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[3353,29930,29931,29947],{},[3356,29932,29933],{},[3359,29934,29935,29938,29941,29944],{},[3362,29936,29937],{"align":26385},"镜像类型",[3362,29939,29940],{"align":26385},"适用场景",[3362,29942,29943],{"align":26385},"示例标签",[3362,29945,29946],{"align":26385},"大小",[3399,29948,29949,29963,29977],{},[3359,29950,29951,29954,29957,29960],{},[3404,29952,29953],{"align":26385},"base",[3404,29955,29956],{"align":26385},"仅需 CUDA 运行时库",[3404,29958,29959],{"align":26385},"12.4.0-base-ubuntu22.04",[3404,29961,29962],{"align":26385},"~240MB",[3359,29964,29965,29968,29971,29974],{},[3404,29966,29967],{"align":26385},"runtime",[3404,29969,29970],{"align":26385},"部署编译后的应用（含数学库）",[3404,29972,29973],{"align":26385},"12.4.0-runtime-ubuntu22.04",[3404,29975,29976],{"align":26385},"~2GB",[3359,29978,29979,29982,29985,29988],{},[3404,29980,29981],{"align":26385},"devel",[3404,29983,29984],{"align":26385},"开发环境（含编译工具）",[3404,29986,29987],{"align":26385},"12.4.0-devel-ubuntu22.04",[3404,29989,29990],{"align":26385},"~3GB",[14,29992,29993,29994,29997],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[49,29995,29996],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,29999,30000],{},[4509,30001],{"alt":47,"src":30002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,30004,30005],{},"在dockerfile里就可以开头这么写：",[42,30007,30009],{"className":26471,"code":30008,"language":26473,"meta":47,"style":47},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[49,30010,30011,30016],{"__ignoreMap":47},[52,30012,30013],{"class":54,"line":55},[52,30014,30015],{"class":94},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[52,30017,30018,30021],{"class":54,"line":66},[52,30019,30020],{"class":75},"FROM",[52,30022,30023],{"class":62}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[3195,30025,30027],{"id":30026},"_34配置以太网","3.4.配置以太网",[14,30029,30030],{},"指定网络模式",[42,30032,30034],{"className":26471,"code":30033,"language":26473,"meta":47,"style":47},"--net=host \\\n",[49,30035,30036],{"__ignoreMap":47},[52,30037,30038,30041,30043,30046],{"class":54,"line":55},[52,30039,30040],{"class":79},"--net",[52,30042,292],{"class":58},[52,30044,30045],{"class":62},"host",[52,30047,27328],{"class":75},[14,30049,30050],{},"启动参数里加上这行即可。具体在下方",[14,30052,30053],{},"--net选项：指定网络模式，该选项有以下参数可选：",[29,30055,30056,30059,30062,30065],{},[32,30057,30058],{},"--net=bridge:默认选项，表示连接到默认的网桥",[32,30060,30061],{},"--net=host:容器使用宿主机的网络",[32,30063,30064],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[32,30066,30067],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[3141,30069,30070],{},"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":47,"searchDepth":66,"depth":66,"links":30072},[30073,30074,30075,30076],{"id":29387,"depth":83,"text":29388},{"id":29454,"depth":83,"text":29455},{"id":29906,"depth":83,"text":29907},{"id":30026,"depth":83,"text":30027},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":29376,"description":29384},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":30083,"title":30084,"body":30085,"description":30092,"extension":3153,"meta":30098,"navigation":122,"path":30099,"seo":30100,"stem":30101,"__hash__":30102},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":30086,"toc":30096},[30087,30090,30093],[10,30088,30084],{"id":30089},"_4dockerhub换源",[14,30091,30092],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,30094,30095],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":47,"searchDepth":66,"depth":66,"links":30097},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":30084,"description":30092},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":30104,"title":30105,"body":30106,"description":47,"extension":3153,"meta":31118,"navigation":122,"path":31119,"seo":31120,"stem":31121,"__hash__":31122},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":30107,"toc":31113},[30108,30111,30115,30121,30125,30128,30468,30471,30474,30477,30482,30487,30490,30493,30496,30499,30518,30521,30532,30538,30720,30730,30746,31009,31011,31036,31051,31060,31110],[10,30109,30105],{"id":30110},"_5docker命令学习",[3195,30112,30114],{"id":30113},"_51参考文档","5.1.参考文档",[14,30116,30117],{},[3451,30118,30119],{"href":30119,"rel":30120},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[26514],[3195,30122,30124],{"id":30123},"_52常用命令","5.2.常用命令",[14,30126,30127],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[3353,30129,30130,30143],{},[3356,30131,30132],{},[3359,30133,30134,30137,30140],{},[3362,30135,30136],{"align":26385},"命令",[3362,30138,30139],{"align":26385},"描述",[3362,30141,30142],{"align":26385},"示例",[3399,30144,30145,30156,30167,30178,30189,30200,30211,30222,30232,30243,30254,30265,30275,30286,30297,30308,30318,30328,30338,30348,30359,30370,30381,30392,30403,30414,30424,30435,30446,30457],{},[3359,30146,30147,30150,30153],{},[3404,30148,30149],{"align":26385},"docker run",[3404,30151,30152],{"align":26385},"创建并启动一个新的容器。",[3404,30154,30155],{"align":26385},"docker run -it ubuntu bash",[3359,30157,30158,30161,30164],{},[3404,30159,30160],{"align":26385},"docker build",[3404,30162,30163],{"align":26385},"通过指定的 Dockerfile 创建一个新的镜像。",[3404,30165,30166],{"align":26385},"docker build -t myimage .",[3359,30168,30169,30172,30175],{},[3404,30170,30171],{"align":26385},"docker pull",[3404,30173,30174],{"align":26385},"从 Docker 仓库拉取镜像。",[3404,30176,30177],{"align":26385},"docker pull ubuntu",[3359,30179,30180,30183,30186],{},[3404,30181,30182],{"align":26385},"docker push",[3404,30184,30185],{"align":26385},"将本地镜像推送到 Docker 仓库。",[3404,30187,30188],{"align":26385},"docker push myimage",[3359,30190,30191,30194,30197],{},[3404,30192,30193],{"align":26385},"docker stop",[3404,30195,30196],{"align":26385},"停止一个正在运行的容器。",[3404,30198,30199],{"align":26385},"docker stop container_id",[3359,30201,30202,30205,30208],{},[3404,30203,30204],{"align":26385},"docker start",[3404,30206,30207],{"align":26385},"启动一个已经存在的容器。",[3404,30209,30210],{"align":26385},"docker start container_id",[3359,30212,30213,30216,30219],{},[3404,30214,30215],{"align":26385},"docker restart",[3404,30217,30218],{"align":26385},"重新启动容器。",[3404,30220,30221],{"align":26385},"docker restart container_id",[3359,30223,30224,30227,30230],{},[3404,30225,30226],{"align":26385},"docker ps",[3404,30228,30229],{"align":26385},"列出当前正在运行的容器。",[3404,30231,30226],{"align":26385},[3359,30233,30234,30237,30240],{},[3404,30235,30236],{"align":26385},"docker rm",[3404,30238,30239],{"align":26385},"删除一个或多个停止的容器。",[3404,30241,30242],{"align":26385},"docker rm container_id",[3359,30244,30245,30248,30251],{},[3404,30246,30247],{"align":26385},"docker exec",[3404,30249,30250],{"align":26385},"在一个正在运行的容器中执行命令。",[3404,30252,30253],{"align":26385},"docker exec -it container_id bash",[3359,30255,30256,30259,30262],{},[3404,30257,30258],{"align":26385},"docker logs",[3404,30260,30261],{"align":26385},"查看容器的日志输出。",[3404,30263,30264],{"align":26385},"docker logs container_id",[3359,30266,30267,30270,30273],{},[3404,30268,30269],{"align":26385},"docker images",[3404,30271,30272],{"align":26385},"列出本地所有镜像。",[3404,30274,30269],{"align":26385},[3359,30276,30277,30280,30283],{},[3404,30278,30279],{"align":26385},"docker rmi",[3404,30281,30282],{"align":26385},"删除一个或多个镜像。",[3404,30284,30285],{"align":26385},"docker rmi myimage",[3359,30287,30288,30291,30294],{},[3404,30289,30290],{"align":26385},"docker network",[3404,30292,30293],{"align":26385},"管理 Docker 网络。",[3404,30295,30296],{"align":26385},"docker network ls",[3359,30298,30299,30302,30305],{},[3404,30300,30301],{"align":26385},"docker volume",[3404,30303,30304],{"align":26385},"管理 Docker 数据卷。",[3404,30306,30307],{"align":26385},"docker volume ls",[3359,30309,30310,30313,30316],{},[3404,30311,30312],{"align":26385},"docker-compose up",[3404,30314,30315],{"align":26385},"启动 docker-compose.yml 中定义的所有服务。",[3404,30317,30312],{"align":26385},[3359,30319,30320,30323,30326],{},[3404,30321,30322],{"align":26385},"docker-compose down",[3404,30324,30325],{"align":26385},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[3404,30327,30322],{"align":26385},[3359,30329,30330,30333,30336],{},[3404,30331,30332],{"align":26385},"docker info",[3404,30334,30335],{"align":26385},"显示 Docker 系统的详细信息。",[3404,30337,30332],{"align":26385},[3359,30339,30340,30343,30346],{},[3404,30341,30342],{"align":26385},"docker stats",[3404,30344,30345],{"align":26385},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[3404,30347,30342],{"align":26385},[3359,30349,30350,30353,30356],{},[3404,30351,30352],{"align":26385},"docker inspect",[3404,30354,30355],{"align":26385},"查看容器或镜像的详细信息（JSON 格式）。",[3404,30357,30358],{"align":26385},"docker inspect container_id",[3359,30360,30361,30364,30367],{},[3404,30362,30363],{"align":26385},"docker save",[3404,30365,30366],{"align":26385},"将一个镜像保存为 tar 文件。",[3404,30368,30369],{"align":26385},"docker save -o myimage.tar myimage",[3359,30371,30372,30375,30378],{},[3404,30373,30374],{"align":26385},"docker load",[3404,30376,30377],{"align":26385},"从 tar 文件中加载镜像。",[3404,30379,30380],{"align":26385},"docker load -i myimage.tar",[3359,30382,30383,30386,30389],{},[3404,30384,30385],{"align":26385},"docker tag",[3404,30387,30388],{"align":26385},"为镜像添加标签（tag）。",[3404,30390,30391],{"align":26385},"docker tag myimage myimage:v1",[3359,30393,30394,30397,30400],{},[3404,30395,30396],{"align":26385},"docker buildx build",[3404,30398,30399],{"align":26385},"使用 Buildx 构建多架构镜像。",[3404,30401,30402],{"align":26385},"docker buildx build -t myimage .",[3359,30404,30405,30408,30411],{},[3404,30406,30407],{"align":26385},"docker buildx create",[3404,30409,30410],{"align":26385},"创建一个新的 Buildx 构建实例。",[3404,30412,30413],{"align":26385},"docker buildx create –use",[3359,30415,30416,30419,30422],{},[3404,30417,30418],{"align":26385},"docker buildx ls",[3404,30420,30421],{"align":26385},"列出所有可用的 Buildx 构建实例。",[3404,30423,30418],{"align":26385},[3359,30425,30426,30429,30432],{},[3404,30427,30428],{"align":26385},"docker buildx use",[3404,30430,30431],{"align":26385},"设置当前的 Buildx 构建实例。",[3404,30433,30434],{"align":26385},"docker buildx use mybuilder",[3359,30436,30437,30440,30443],{},[3404,30438,30439],{"align":26385},"docker buildx bake",[3404,30441,30442],{"align":26385},"使用 Bake 文件批量构建镜像。",[3404,30444,30445],{"align":26385},"docker buildx bake -f bake.hcl",[3359,30447,30448,30451,30454],{},[3404,30449,30450],{"align":26385},"docker buildx build –push",[3404,30452,30453],{"align":26385},"构建镜像并推送到镜像仓库。",[3404,30455,30456],{"align":26385},"docker buildx build –push -t myimage .",[3359,30458,30459,30462,30465],{},[3404,30460,30461],{"align":26385},"docker buildx build –platform",[3404,30463,30464],{"align":26385},"构建镜像并为多个平台生成支持。",[3404,30466,30467],{"align":26385},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,30469,30470],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,30472,30473],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,30475,30476],{},"docker images 可以查看已经下载的镜像",[14,30478,30479],{},[4509,30480],{"alt":47,"src":30481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,30483,30484],{},[2389,30485,30486],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,30488,30489],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,30491,30492],{},"docker container logs 查看容器日志",[14,30494,30495],{},"docker top 查看容器里的进程",[14,30497,30498],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[42,30500,30502],{"className":26471,"code":30501,"language":26473,"meta":47,"style":47},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[49,30503,30504],{"__ignoreMap":47},[52,30505,30506,30509,30512,30515],{"class":54,"line":55},[52,30507,30508],{"class":75},"如：docker",[52,30510,30511],{"class":62}," cp",[52,30513,30514],{"class":62}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[52,30516,30517],{"class":62}," \u002Fmydata\u002Fnginx\n",[14,30519,30520],{},"docker run时在启动容器的时候会有几个常用的选项：",[29,30522,30523,30526,30529],{},[32,30524,30525],{},"-d选项：表示后台运行",[32,30527,30528],{},"-P选项：随机端口映射",[32,30530,30531],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[3195,30533,30535],{"id":30534},"_53run命令的参数非常重要",[2389,30536,30537],{},"5.3.run命令的参数（非常重要）",[3353,30539,30540,30553],{},[3356,30541,30542],{},[3359,30543,30544,30547,30550],{},[3362,30545,30546],{"align":26385},"参数\u002F配置",[3362,30548,30549],{"align":26385},"功能说明",[3362,30551,30552],{"align":26385},"重要性与参考依据",[3399,30554,30555,30566,30577,30588,30599,30610,30621,30632,30643,30654,30665,30676,30687,30698,30709],{},[3359,30556,30557,30560,30563],{},[3404,30558,30559],{"align":26385},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[3404,30561,30562],{"align":26385},"指定容器名称，便于后续管理",[3404,30564,30565],{"align":26385},"替代随机生成的容器名。",[3359,30567,30568,30571,30574],{},[3404,30569,30570],{"align":26385},"–gpus all",[3404,30572,30573],{"align":26385},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[3404,30575,30576],{"align":26385},"用于CUDA加速等GPU依赖任务。",[3359,30578,30579,30582,30585],{},[3404,30580,30581],{"align":26385},"-e NVIDIA_DRIVER_CAPABILITIES=all",[3404,30583,30584],{"align":26385},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[3404,30586,30587],{"align":26385},"确保容器内GPU功能完整67。",[3359,30589,30590,30593,30596],{},[3404,30591,30592],{"align":26385},"-dit",[3404,30594,30595],{"align":26385},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[3404,30597,30598],{"align":26385},"允许容器在后台运行并支持交互操作。",[3359,30600,30601,30604,30607],{},[3404,30602,30603],{"align":26385},"–privileged",[3404,30605,30606],{"align":26385},"赋予容器完全主机权限（可访问设备、内核模块等）",[3404,30608,30609],{"align":26385},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[3359,30611,30612,30615,30618],{},[3404,30613,30614],{"align":26385},"–net=host",[3404,30616,30617],{"align":26385},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[3404,30619,30620],{"align":26385},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[3359,30622,30623,30626,30629],{},[3404,30624,30625],{"align":26385},"–group-add audio–group-add video–group-add dialout",[3404,30627,30628],{"align":26385},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[3404,30630,30631],{"align":26385},"避免权限问题（如避免无法调用摄像头、麦克风）。",[3359,30633,30634,30637,30640],{},[3404,30635,30636],{"align":26385},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[3404,30638,30639],{"align":26385},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[3404,30641,30642],{"align":26385},"支持容器内运行图形界面应用（如OpenCV可视化）。",[3359,30644,30645,30648,30651],{},[3404,30646,30647],{"align":26385},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[3404,30649,30650],{"align":26385},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[3404,30652,30653],{"align":26385},"实现容器内图形显示。",[3359,30655,30656,30659,30662],{},[3404,30657,30658],{"align":26385},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[3404,30660,30661],{"align":26385},"挂载X11认证文件（只读）",[3404,30663,30664],{"align":26385},"确保容器有权连接宿主机显示服务。",[3359,30666,30667,30670,30673],{},[3404,30668,30669],{"align":26385},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[3404,30671,30672],{"align":26385},"挂载Wayland显示协议相关目录",[3404,30674,30675],{"align":26385},"支持Wayland协议的图形显示。",[3359,30677,30678,30681,30684],{},[3404,30679,30680],{"align":26385},"–ulimit nofile=1024:524288",[3404,30682,30683],{"align":26385},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[3404,30685,30686],{"align":26385},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[3359,30688,30689,30692,30695],{},[3404,30690,30691],{"align":26385},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[3404,30693,30694],{"align":26385},"挂载宿主机用户目录到容器内同名路径",[3404,30696,30697],{"align":26385},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[3359,30699,30700,30703,30706],{},[3404,30701,30702],{"align":26385},"-w \u002Fhome\u002Ftungchiahui",[3404,30704,30705],{"align":26385},"设置容器启动后的默认工作目录",[3404,30707,30708],{"align":26385},"直接进入项目路径，方便执行命令2324。",[3359,30710,30711,30714,30717],{},[3404,30712,30713],{"align":26385},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[3404,30715,30716],{"align":26385},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[3404,30718,30719],{"align":26385},"提供预配置的深度学习与机器人开发环境。",[14,30721,30722,30723,30725,30726,30729],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[49,30724,27226],{},"加不加",[49,30727,30728],{},"sudo -E","都无所谓。",[14,30731,30732,30733,30735,30736,30738,30739,30742,30743,30745],{},"用户已经被加到docker组了，不用",[49,30734,27226],{},"也行跑，其次，",[49,30737,27226],{},"运行的话，你的",[49,30740,30741],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[49,30744,30741],{},"更不可能变了。",[42,30747,30749],{"className":26471,"code":30748,"language":26473,"meta":47,"style":47},"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",[49,30750,30751,30764,30774,30784,30796,30803,30810,30817,30827,30836,30845,30859,30871,30883,30892,30902,30911,30926,30959,30986,30997,31004],{"__ignoreMap":47},[52,30752,30753,30755,30757,30759,30762],{"class":54,"line":55},[52,30754,27226],{"class":75},[52,30756,28970],{"class":62},[52,30758,29880],{"class":62},[52,30760,30761],{"class":308}," --name=ros_opencv_cuda",[52,30763,27328],{"class":308},[52,30765,30766,30769,30772],{"class":54,"line":66},[52,30767,30768],{"class":79},"--gpus ",[52,30770,30771],{"class":62},"all",[52,30773,27328],{"class":308},[52,30775,30776,30779,30782],{"class":54,"line":83},[52,30777,30778],{"class":79},"-e ",[52,30780,30781],{"class":62},"NVIDIA_DRIVER_CAPABILITIES=all",[52,30783,27328],{"class":308},[52,30785,30786,30788,30791,30794],{"class":54,"line":91},[52,30787,30778],{"class":79},[52,30789,30790],{"class":62},"DISPLAY=",[52,30792,30793],{"class":79},"$DISPLAY ",[52,30795,28825],{"class":308},[52,30797,30798,30801],{"class":54,"line":98},[52,30799,30800],{"class":79},"-dit ",[52,30802,28825],{"class":308},[52,30804,30805,30808],{"class":54,"line":107},[52,30806,30807],{"class":79},"--privileged ",[52,30809,28825],{"class":308},[52,30811,30812,30815],{"class":54,"line":113},[52,30813,30814],{"class":79},"--net=host ",[52,30816,28825],{"class":308},[52,30818,30819,30822,30825],{"class":54,"line":119},[52,30820,30821],{"class":79},"--group-add ",[52,30823,30824],{"class":62},"audio",[52,30826,27328],{"class":308},[52,30828,30829,30831,30834],{"class":54,"line":126},[52,30830,30821],{"class":79},[52,30832,30833],{"class":62},"video",[52,30835,27328],{"class":308},[52,30837,30838,30840,30843],{"class":54,"line":132},[52,30839,30821],{"class":79},[52,30841,30842],{"class":62},"dialout",[52,30844,27328],{"class":308},[52,30846,30847,30849,30852,30854,30857],{"class":54,"line":138},[52,30848,30778],{"class":79},[52,30850,30851],{"class":62},"XAUTHORITY=",[52,30853,30741],{"class":79},[52,30855,30856],{"class":62},"\u002F.Xauthority",[52,30858,27328],{"class":308},[52,30860,30861,30863,30866,30869],{"class":54,"line":144},[52,30862,30778],{"class":79},[52,30864,30865],{"class":62},"WAYLAND_DISPLAY=",[52,30867,30868],{"class":79},"$WAYLAND_DISPLAY ",[52,30870,28825],{"class":308},[52,30872,30873,30875,30878,30881],{"class":54,"line":153},[52,30874,30778],{"class":79},[52,30876,30877],{"class":62},"XDG_RUNTIME_DIR=",[52,30879,30880],{"class":79},"$XDG_RUNTIME_DIR ",[52,30882,28825],{"class":308},[52,30884,30885,30887,30890],{"class":54,"line":159},[52,30886,30778],{"class":79},[52,30888,30889],{"class":62},"QT_QPA_PLATFORM=xcb",[52,30891,27328],{"class":308},[52,30893,30894,30897,30900],{"class":54,"line":167},[52,30895,30896],{"class":79},"-v ",[52,30898,30899],{"class":62},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[52,30901,27328],{"class":308},[52,30903,30904,30906,30909],{"class":54,"line":173},[52,30905,30896],{"class":79},[52,30907,30908],{"class":62},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[52,30910,27328],{"class":308},[52,30912,30913,30916,30919,30921,30924],{"class":54,"line":181},[52,30914,30915],{"class":79},"-v $HOME",[52,30917,30918],{"class":62},"\u002F.Xauthority:",[52,30920,30741],{"class":79},[52,30922,30923],{"class":62},"\u002F.Xauthority:ro",[52,30925,27328],{"class":308},[52,30927,30928,30930,30933,30935,30938,30941,30943,30946,30948,30950,30952,30954,30957],{"class":54,"line":186},[52,30929,30896],{"class":79},[52,30931,30932],{"class":62},"\u002Frun\u002Fuser\u002F",[52,30934,27749],{"class":79},[52,30936,30937],{"class":75},"id",[52,30939,30940],{"class":308}," -u",[52,30942,2283],{"class":79},[52,30944,30945],{"class":62},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[52,30947,27749],{"class":79},[52,30949,30937],{"class":75},[52,30951,30940],{"class":308},[52,30953,2283],{"class":79},[52,30955,30956],{"class":62},"\u002Fwayland-0",[52,30958,27328],{"class":308},[52,30960,30961,30963,30965,30967,30969,30971,30973,30976,30978,30980,30982,30984],{"class":54,"line":191},[52,30962,30896],{"class":79},[52,30964,30932],{"class":62},[52,30966,27749],{"class":79},[52,30968,30937],{"class":75},[52,30970,30940],{"class":308},[52,30972,2283],{"class":79},[52,30974,30975],{"class":62},":\u002Frun\u002Fuser\u002F",[52,30977,27749],{"class":79},[52,30979,30937],{"class":75},[52,30981,30940],{"class":308},[52,30983,16362],{"class":79},[52,30985,28825],{"class":308},[52,30987,30988,30990,30992,30995],{"class":54,"line":196},[52,30989,30915],{"class":79},[52,30991,4049],{"class":62},[52,30993,30994],{"class":79},"$HOME ",[52,30996,28825],{"class":308},[52,30998,30999,31002],{"class":54,"line":201},[52,31000,31001],{"class":79},"-w $HOME ",[52,31003,28825],{"class":308},[52,31005,31006],{"class":54,"line":206},[52,31007,31008],{"class":79},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,31010,1453],{},[1696,31012,31013,31021,31024,31027],{},[32,31014,31015,16443,31017,31020],{},[49,31016,30781],{},[49,31018,31019],{},"--gpus all","没有英伟达显卡请注释。",[32,31022,31023],{},"--name后面请自己为容器起名。",[32,31025,31026],{},"最后一行仓库名称请你自己找对应的镜像填上。",[32,31028,31029,31030,31035],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[26202,31031,31032],{},[2389,31033,31034],{},"请不要加","。",[42,31037,31039],{"className":26471,"code":31038,"language":26473,"meta":47,"style":47},"--ulimit nofile=1024:524288 \\\n",[49,31040,31041],{"__ignoreMap":47},[52,31042,31043,31046,31049],{"class":54,"line":55},[52,31044,31045],{"class":75},"--ulimit",[52,31047,31048],{"class":62}," nofile=1024:524288",[52,31050,27328],{"class":308},[14,31052,31053,31054,31059],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[26202,31055,31056],{},[2389,31057,31058],{},"不建议","**.**",[42,31061,31063],{"className":26471,"code":31062,"language":26473,"meta":47,"style":47},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[49,31064,31065,31092,31101],{"__ignoreMap":47},[52,31066,31067,31070,31073,31075,31077,31079,31081,31083,31085,31088,31090],{"class":54,"line":55},[52,31068,31069],{"class":75},"--user",[52,31071,31072],{"class":79}," $(",[52,31074,30937],{"class":75},[52,31076,30940],{"class":308},[52,31078,2283],{"class":79},[52,31080,4049],{"class":62},[52,31082,27749],{"class":79},[52,31084,30937],{"class":75},[52,31086,31087],{"class":308}," -g",[52,31089,16362],{"class":79},[52,31091,28825],{"class":308},[52,31093,31094,31096,31099],{"class":54,"line":66},[52,31095,30896],{"class":79},[52,31097,31098],{"class":62},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[52,31100,27328],{"class":308},[52,31102,31103,31105,31108],{"class":54,"line":83},[52,31104,30896],{"class":79},[52,31106,31107],{"class":62},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[52,31109,27328],{"class":308},[3141,31111,31112],{},"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":47,"searchDepth":66,"depth":66,"links":31114},[31115,31116,31117],{"id":30113,"depth":83,"text":30114},{"id":30123,"depth":83,"text":30124},{"id":30534,"depth":83,"text":30537},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":30105,"description":47},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":31124,"title":31125,"body":31126,"description":47,"extension":3153,"meta":32749,"navigation":122,"path":32750,"seo":32751,"stem":32752,"__hash__":32753},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":31127,"toc":32744},[31128,31131,31135,31138,31360,31364,31368,31371,31477,31482,31485,31490,31493,31498,31501,31506,31509,31521,31524,31529,31536,31564,31571,31647,31652,31655,31678,31680,31755,31760,31763,31767,31775,31780,31785,31789,31800,31806,31809,31812,31836,31839,31842,31870,31873,31876,32341,32344,32349,32354,32358,32381,32386,32390,32394,32397,32400,32403,32430,32433,32436,32454,32457,32460,32482,32490,32495,32500,32504,32507,32510,32513,32516,32561,32564,32582,32585,32590,32593,32614,32617,32673,32676,32681,32685,32688,32695,32698,32701,32706,32709,32725,32728,32741],[10,31129,31125],{"id":31130},"_6手动创建docker镜像",[3195,31132,31134],{"id":31133},"_61dockerfile","6.1.DockerFile",[14,31136,31137],{},"常用命令：",[3353,31139,31140,31151],{},[3356,31141,31142],{},[3359,31143,31144,31147,31149],{},[3362,31145,31146],{"align":26385},"指令",[3362,31148,28519],{"align":26385},[3362,31150,30142],{"align":26385},[3399,31152,31153,31163,31179,31190,31201,31212,31223,31234,31245,31259,31273,31284,31298,31309,31320,31334,31349],{},[3359,31154,31155,31157,31160],{},[3404,31156,30020],{"align":26385},[3404,31158,31159],{"align":26385},"指定基础镜像，是 Dockerfile 的起点",[3404,31161,31162],{"align":26385},"FROM ubuntu:22.04",[3359,31164,31165,31168,31171],{},[3404,31166,31167],{"align":26385},"LABEL",[3404,31169,31170],{"align":26385},"添加元数据（如作者、版本等）",[3404,31172,31173,31174,31178],{"align":26385},"LABEL maintainer=”",[3451,31175,31177],{"href":31176},"mailto:you@example.com","you@example.com","”",[3359,31180,31181,31184,31187],{},[3404,31182,31183],{"align":26385},"ENV",[3404,31185,31186],{"align":26385},"设置环境变量",[3404,31188,31189],{"align":26385},"ENV PORT=8080",[3359,31191,31192,31195,31198],{},[3404,31193,31194],{"align":26385},"ARG",[3404,31196,31197],{"align":26385},"构建参数，只在构建期间可用",[3404,31199,31200],{"align":26385},"ARG VERSION=1.0",[3359,31202,31203,31206,31209],{},[3404,31204,31205],{"align":26385},"RUN",[3404,31207,31208],{"align":26385},"构建镜像时运行命令",[3404,31210,31211],{"align":26385},"RUN apt-get update && apt-get install -y curl",[3359,31213,31214,31217,31220],{},[3404,31215,31216],{"align":26385},"COPY",[3404,31218,31219],{"align":26385},"复制文件到镜像中",[3404,31221,31222],{"align":26385},"COPY . \u002Fapp",[3359,31224,31225,31228,31231],{},[3404,31226,31227],{"align":26385},"ADD",[3404,31229,31230],{"align":26385},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[3404,31232,31233],{"align":26385},"ADD archive.tar.gz \u002Fdata\u002F",[3359,31235,31236,31239,31242],{},[3404,31237,31238],{"align":26385},"WORKDIR",[3404,31240,31241],{"align":26385},"设置工作目录",[3404,31243,31244],{"align":26385},"WORKDIR \u002Fopt",[3359,31246,31247,31250,31253],{},[3404,31248,31249],{"align":26385},"CMD",[3404,31251,31252],{"align":26385},"设置容器启动时默认命令（可被 docker run 覆盖）",[3404,31254,31255,31256],{"align":26385},"CMD ",[52,31257,31258],{},"“node”, “index.js”",[3359,31260,31261,31264,31267],{},[3404,31262,31263],{"align":26385},"ENTRYPOINT",[3404,31265,31266],{"align":26385},"设置容器启动时固定命令（通常用于 CLI 工具等）",[3404,31268,31269,31270],{"align":26385},"ENTRYPOINT ",[52,31271,31272],{},"“python3”",[3359,31274,31275,31278,31281],{},[3404,31276,31277],{"align":26385},"EXPOSE",[3404,31279,31280],{"align":26385},"声明镜像内服务监听的端口（不会自动映射）",[3404,31282,31283],{"align":26385},"EXPOSE 80",[3359,31285,31286,31289,31292],{},[3404,31287,31288],{"align":26385},"VOLUME",[3404,31290,31291],{"align":26385},"声明数据卷挂载点",[3404,31293,31294,31295],{"align":26385},"VOLUME ",[52,31296,31297],{},"“\u002Fdata”",[3359,31299,31300,31303,31306],{},[3404,31301,31302],{"align":26385},"USER",[3404,31304,31305],{"align":26385},"设置后续命令执行的用户",[3404,31307,31308],{"align":26385},"USER appuser",[3359,31310,31311,31314,31317],{},[3404,31312,31313],{"align":26385},"ONBUILD",[3404,31315,31316],{"align":26385},"当镜像作为其他镜像基础镜像时触发的构建指令",[3404,31318,31319],{"align":26385},"ONBUILD COPY . \u002Fsrc",[3359,31321,31322,31325,31328],{},[3404,31323,31324],{"align":26385},"SHELL",[3404,31326,31327],{"align":26385},"更改默认 shell，比如将 sh -c 改为 bash -c",[3404,31329,31330,31331],{"align":26385},"SHELL ",[52,31332,31333],{},"“\u002Fbin\u002Fbash”, “-c”",[3359,31335,31336,31339,31342],{},[3404,31337,31338],{"align":26385},"HEALTHCHECK",[3404,31340,31341],{"align":26385},"定义容器运行时的健康检查命令",[3404,31343,31344,31345],{"align":26385},"`HEALTHCHECK CMD curl –fail ",[3451,31346,31347],{"href":31347,"rel":31348},"http:\u002F\u002Flocalhost:8080",[26514],[3359,31350,31351,31354,31357],{},[3404,31352,31353],{"align":26385},"STOPSIGNAL",[3404,31355,31356],{"align":26385},"容器停止时发送的信号",[3404,31358,31359],{"align":26385},"STOPSIGNAL SIGKILL",[3195,31361,31363],{"id":31362},"_62自己创建容器","6.2.自己创建容器",[24646,31365,31367],{"id":31366},"_621手动创建","6.2.1.手动创建",[14,31369,31370],{},"在x86电脑上编译x86的：",[42,31372,31374],{"className":26471,"code":31373,"language":26473,"meta":47,"style":47},"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",[49,31375,31376,31392,31396,31409,31413,31426,31430,31443,31447,31460,31464],{"__ignoreMap":47},[52,31377,31378,31380,31383,31386,31389],{"class":54,"line":55},[52,31379,29203],{"class":75},[52,31381,31382],{"class":62}," build",[52,31384,31385],{"class":308}," -t",[52,31387,31388],{"class":62}," ros-melodic-cuda118-cudnn8-bionic:latest",[52,31390,31391],{"class":62}," .\n",[52,31393,31394],{"class":54,"line":66},[52,31395,123],{"emptyLinePlaceholder":122},[52,31397,31398,31400,31402,31404,31407],{"class":54,"line":83},[52,31399,29203],{"class":75},[52,31401,31382],{"class":62},[52,31403,31385],{"class":308},[52,31405,31406],{"class":62}," ros-noetic-focal:latest",[52,31408,31391],{"class":62},[52,31410,31411],{"class":54,"line":91},[52,31412,123],{"emptyLinePlaceholder":122},[52,31414,31415,31417,31419,31421,31424],{"class":54,"line":98},[52,31416,29203],{"class":75},[52,31418,31382],{"class":62},[52,31420,31385],{"class":308},[52,31422,31423],{"class":62}," ros-humble-jammy:latest",[52,31425,31391],{"class":62},[52,31427,31428],{"class":54,"line":107},[52,31429,123],{"emptyLinePlaceholder":122},[52,31431,31432,31434,31436,31438,31441],{"class":54,"line":113},[52,31433,29203],{"class":75},[52,31435,31382],{"class":62},[52,31437,31385],{"class":308},[52,31439,31440],{"class":62}," ros-jazzy-noble:latest",[52,31442,31391],{"class":62},[52,31444,31445],{"class":54,"line":119},[52,31446,123],{"emptyLinePlaceholder":122},[52,31448,31449,31451,31453,31455,31458],{"class":54,"line":126},[52,31450,29203],{"class":75},[52,31452,31382],{"class":62},[52,31454,31385],{"class":308},[52,31456,31457],{"class":62}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[52,31459,31391],{"class":62},[52,31461,31462],{"class":54,"line":132},[52,31463,123],{"emptyLinePlaceholder":122},[52,31465,31466,31468,31470,31472,31475],{"class":54,"line":138},[52,31467,29203],{"class":75},[52,31469,31382],{"class":62},[52,31471,31385],{"class":308},[52,31473,31474],{"class":62}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[52,31476,31391],{"class":62},[14,31478,31479],{},[4509,31480],{"alt":47,"src":31481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,31483,31484],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,31486,31487],{},[4509,31488],{"alt":47,"src":31489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,31491,31492],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[1696,31494,31495],{},[32,31496,31497],{},"创建 Docker Hub 账户",[14,31499,31500],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[1696,31502,31503],{"start":66},[32,31504,31505],{},"登录 Docker Hub",[14,31507,31508],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[42,31510,31512],{"className":26471,"code":31511,"language":26473,"meta":47,"style":47},"docker login\n",[49,31513,31514],{"__ignoreMap":47},[52,31515,31516,31518],{"class":54,"line":55},[52,31517,29203],{"class":75},[52,31519,31520],{"class":62}," login\n",[14,31522,31523],{},"输入你的 Docker Hub 用户名和密码进行验证。",[1696,31525,31526],{},[32,31527,31528],{},"为你的镜像打标签",[14,31530,31531,31532,31535],{},"Docker Hub 使用 ",[49,31533,31534],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[42,31537,31539],{"className":26471,"code":31538,"language":26473,"meta":47,"style":47},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[49,31540,31541],{"__ignoreMap":47},[52,31542,31543,31545,31548,31550,31553,31556,31559,31561],{"class":54,"line":55},[52,31544,29203],{"class":75},[52,31546,31547],{"class":62}," tag",[52,31549,31440],{"class":62},[52,31551,31552],{"class":58}," \u003C",[52,31554,31555],{"class":62},"你的用户",[52,31557,31558],{"class":79},"名",[52,31560,2674],{"class":58},[52,31562,31563],{"class":62},"\u002Fros-jazzy-noble:latest\n",[14,31565,31566,31567,31570],{},"例如，如果你的 Docker Hub 用户名是 ",[49,31568,31569],{},"tungchiahui","，你应该执行：",[42,31572,31574],{"className":26471,"code":31573,"language":26473,"meta":47,"style":47},"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",[49,31575,31576,31587,31591,31602,31606,31617,31621,31632,31636],{"__ignoreMap":47},[52,31577,31578,31580,31582,31584],{"class":54,"line":55},[52,31579,29203],{"class":75},[52,31581,31547],{"class":62},[52,31583,31406],{"class":62},[52,31585,31586],{"class":62}," tungchiahui\u002Fros-noetic-focal:latest\n",[52,31588,31589],{"class":54,"line":66},[52,31590,123],{"emptyLinePlaceholder":122},[52,31592,31593,31595,31597,31599],{"class":54,"line":83},[52,31594,29203],{"class":75},[52,31596,31547],{"class":62},[52,31598,31423],{"class":62},[52,31600,31601],{"class":62}," tungchiahui\u002Fros-humble-jammy:latest\n",[52,31603,31604],{"class":54,"line":91},[52,31605,123],{"emptyLinePlaceholder":122},[52,31607,31608,31610,31612,31614],{"class":54,"line":98},[52,31609,29203],{"class":75},[52,31611,31547],{"class":62},[52,31613,31440],{"class":62},[52,31615,31616],{"class":62}," tungchiahui\u002Fros-jazzy-noble:latest\n",[52,31618,31619],{"class":54,"line":107},[52,31620,123],{"emptyLinePlaceholder":122},[52,31622,31623,31625,31627,31629],{"class":54,"line":113},[52,31624,29203],{"class":75},[52,31626,31547],{"class":62},[52,31628,31457],{"class":62},[52,31630,31631],{"class":62}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[52,31633,31634],{"class":54,"line":119},[52,31635,123],{"emptyLinePlaceholder":122},[52,31637,31638,31640,31642,31644],{"class":54,"line":126},[52,31639,29203],{"class":75},[52,31641,31547],{"class":62},[52,31643,31474],{"class":62},[52,31645,31646],{"class":62}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[1696,31648,31649],{"start":66},[32,31650,31651],{},"推送镜像到 Docker Hub",[14,31653,31654],{},"使用以下命令将镜像推送到 Docker Hub：",[42,31656,31658],{"className":26471,"code":31657,"language":26473,"meta":47,"style":47},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[49,31659,31660],{"__ignoreMap":47},[52,31661,31662,31664,31667,31669,31671,31673,31675],{"class":54,"line":55},[52,31663,29203],{"class":75},[52,31665,31666],{"class":62}," push",[52,31668,31552],{"class":58},[52,31670,31555],{"class":62},[52,31672,31558],{"class":79},[52,31674,2674],{"class":58},[52,31676,31677],{"class":62},"\u002Fros-noetic-jazzy-noble:latest\n",[14,31679,17281],{},[42,31681,31683],{"className":26471,"code":31682,"language":26473,"meta":47,"style":47},"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",[49,31684,31685,31693,31697,31705,31709,31717,31721,31730,31734,31742,31746],{"__ignoreMap":47},[52,31686,31687,31689,31691],{"class":54,"line":55},[52,31688,29203],{"class":75},[52,31690,31666],{"class":62},[52,31692,31586],{"class":62},[52,31694,31695],{"class":54,"line":66},[52,31696,123],{"emptyLinePlaceholder":122},[52,31698,31699,31701,31703],{"class":54,"line":83},[52,31700,29203],{"class":75},[52,31702,31666],{"class":62},[52,31704,31601],{"class":62},[52,31706,31707],{"class":54,"line":91},[52,31708,123],{"emptyLinePlaceholder":122},[52,31710,31711,31713,31715],{"class":54,"line":98},[52,31712,29203],{"class":75},[52,31714,31666],{"class":62},[52,31716,31616],{"class":62},[52,31718,31719],{"class":54,"line":107},[52,31720,123],{"emptyLinePlaceholder":122},[52,31722,31723,31725,31727],{"class":54,"line":113},[52,31724,29203],{"class":75},[52,31726,31666],{"class":62},[52,31728,31729],{"class":62}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[52,31731,31732],{"class":54,"line":119},[52,31733,123],{"emptyLinePlaceholder":122},[52,31735,31736,31738,31740],{"class":54,"line":126},[52,31737,29203],{"class":75},[52,31739,31666],{"class":62},[52,31741,31646],{"class":62},[52,31743,31744],{"class":54,"line":132},[52,31745,123],{"emptyLinePlaceholder":122},[52,31747,31748,31750,31752],{"class":54,"line":138},[52,31749,29203],{"class":75},[52,31751,31666],{"class":62},[52,31753,31754],{"class":62}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[1696,31756,31757],{"start":83},[32,31758,31759],{},"验证推送成功",[14,31761,31762],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,31764,31765],{},[2389,31766,6763],{},[29,31768,31769,31772],{},[32,31770,31771],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[32,31773,31774],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,31776,31777],{},[4509,31778],{"alt":47,"src":31779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,31781,31782],{},[4509,31783],{"alt":47,"src":31784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[24646,31786,31788],{"id":31787},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,31790,31791,31792,31795,31796,31799],{},"如果您想在 ",[2389,31793,31794],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2389,31797,31798],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,31801,31802,31803],{},"1. ",[2389,31804,31805],{},"启用 Docker 跨平台构建",[14,31807,31808],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,31810,31811],{},"第一步：启用 buildx（只需执行一次）",[42,31813,31815],{"className":26471,"code":31814,"language":26473,"meta":47,"style":47},"docker buildx create --name multiarch_builder --use\n",[49,31816,31817],{"__ignoreMap":47},[52,31818,31819,31821,31824,31827,31830,31833],{"class":54,"line":55},[52,31820,29203],{"class":75},[52,31822,31823],{"class":62}," buildx",[52,31825,31826],{"class":62}," create",[52,31828,31829],{"class":308}," --name",[52,31831,31832],{"class":62}," multiarch_builder",[52,31834,31835],{"class":308}," --use\n",[14,31837,31838],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,31840,31841],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[42,31843,31845],{"className":26471,"code":31844,"language":26473,"meta":47,"style":47},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[49,31846,31847],{"__ignoreMap":47},[52,31848,31849,31851,31853,31855,31858,31861,31864,31867],{"class":54,"line":55},[52,31850,29203],{"class":75},[52,31852,29880],{"class":62},[52,31854,29883],{"class":308},[52,31856,31857],{"class":308}," --privileged",[52,31859,31860],{"class":62}," multiarch\u002Fqemu-user-static",[52,31862,31863],{"class":308}," --reset",[52,31865,31866],{"class":308}," -p",[52,31868,31869],{"class":62}," yes\n",[14,31871,31872],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,31874,31875],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[42,31877,31879],{"className":26471,"code":31878,"language":26473,"meta":47,"style":47},"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",[49,31880,31881,31923,31927,31932,31942,31952,31961,31967,31971,31975,31985,31993,32002,32008,32012,32016,32026,32034,32043,32049,32053,32057,32067,32075,32084,32090,32094,32098,32108,32116,32125,32131,32135,32139,32149,32157,32166,32172,32176,32180,32190,32198,32207,32213,32217,32221,32231,32239,32248,32254,32258,32262,32272,32280,32289,32295,32299,32303,32314,32322,32331,32337],{"__ignoreMap":47},[52,31882,31883,31885,31887,31889,31892,31895,31897,31899,31902,31904,31906,31908,31910,31913,31916,31918,31921],{"class":54,"line":55},[52,31884,29203],{"class":75},[52,31886,31823],{"class":62},[52,31888,31382],{"class":62},[52,31890,31891],{"class":308}," --platform",[52,31893,31894],{"class":62}," linux\u002Famd64,linux\u002Farm64",[52,31896,31385],{"class":308},[52,31898,31552],{"class":58},[52,31900,31901],{"class":62},"你的镜像",[52,31903,31558],{"class":79},[52,31905,2674],{"class":58},[52,31907,4049],{"class":62},[52,31909,698],{"class":58},[52,31911,31912],{"class":62},"标",[52,31914,31915],{"class":79},"签",[52,31917,2674],{"class":58},[52,31919,31920],{"class":308}," --push",[52,31922,31391],{"class":62},[52,31924,31925],{"class":54,"line":66},[52,31926,123],{"emptyLinePlaceholder":122},[52,31928,31929],{"class":54,"line":83},[52,31930,31931],{"class":94},"# 例子：\n",[52,31933,31934,31936,31938,31940],{"class":54,"line":91},[52,31935,29203],{"class":75},[52,31937,31823],{"class":62},[52,31939,31382],{"class":62},[52,31941,27328],{"class":308},[52,31943,31944,31947,31950],{"class":54,"line":98},[52,31945,31946],{"class":79},"--platform ",[52,31948,31949],{"class":62},"linux\u002Famd64,linux\u002Farm64",[52,31951,27328],{"class":308},[52,31953,31954,31956,31959],{"class":54,"line":107},[52,31955,31385],{"class":308},[52,31957,31958],{"class":62}," tungchiahui\u002Fros:noetic-focal",[52,31960,27328],{"class":308},[52,31962,31963,31965],{"class":54,"line":113},[52,31964,31920],{"class":308},[52,31966,27328],{"class":308},[52,31968,31969],{"class":54,"line":119},[52,31970,31391],{"class":62},[52,31972,31973],{"class":54,"line":126},[52,31974,123],{"emptyLinePlaceholder":122},[52,31976,31977,31979,31981,31983],{"class":54,"line":132},[52,31978,29203],{"class":75},[52,31980,31823],{"class":62},[52,31982,31382],{"class":62},[52,31984,27328],{"class":308},[52,31986,31987,31989,31991],{"class":54,"line":138},[52,31988,31946],{"class":79},[52,31990,31949],{"class":62},[52,31992,27328],{"class":308},[52,31994,31995,31997,32000],{"class":54,"line":144},[52,31996,31385],{"class":308},[52,31998,31999],{"class":62}," tungchiahui\u002Fros:humble-jammy",[52,32001,27328],{"class":308},[52,32003,32004,32006],{"class":54,"line":153},[52,32005,31920],{"class":308},[52,32007,27328],{"class":308},[52,32009,32010],{"class":54,"line":159},[52,32011,31391],{"class":62},[52,32013,32014],{"class":54,"line":167},[52,32015,123],{"emptyLinePlaceholder":122},[52,32017,32018,32020,32022,32024],{"class":54,"line":173},[52,32019,29203],{"class":75},[52,32021,31823],{"class":62},[52,32023,31382],{"class":62},[52,32025,27328],{"class":308},[52,32027,32028,32030,32032],{"class":54,"line":181},[52,32029,31946],{"class":79},[52,32031,31949],{"class":62},[52,32033,27328],{"class":308},[52,32035,32036,32038,32041],{"class":54,"line":186},[52,32037,31385],{"class":308},[52,32039,32040],{"class":62}," tungchiahui\u002Fros:jazzy-noble",[52,32042,27328],{"class":308},[52,32044,32045,32047],{"class":54,"line":191},[52,32046,31920],{"class":308},[52,32048,27328],{"class":308},[52,32050,32051],{"class":54,"line":196},[52,32052,31391],{"class":62},[52,32054,32055],{"class":54,"line":201},[52,32056,123],{"emptyLinePlaceholder":122},[52,32058,32059,32061,32063,32065],{"class":54,"line":206},[52,32060,28970],{"class":75},[52,32062,31823],{"class":62},[52,32064,31382],{"class":62},[52,32066,27328],{"class":308},[52,32068,32069,32071,32073],{"class":54,"line":211},[52,32070,31946],{"class":79},[52,32072,31949],{"class":62},[52,32074,27328],{"class":308},[52,32076,32077,32079,32082],{"class":54,"line":218},[52,32078,31385],{"class":308},[52,32080,32081],{"class":62}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[52,32083,27328],{"class":308},[52,32085,32086,32088],{"class":54,"line":223},[52,32087,31920],{"class":308},[52,32089,27328],{"class":308},[52,32091,32092],{"class":54,"line":230},[52,32093,31391],{"class":62},[52,32095,32096],{"class":54,"line":239},[52,32097,123],{"emptyLinePlaceholder":122},[52,32099,32100,32102,32104,32106],{"class":54,"line":251},[52,32101,29203],{"class":75},[52,32103,31823],{"class":62},[52,32105,31382],{"class":62},[52,32107,27328],{"class":308},[52,32109,32110,32112,32114],{"class":54,"line":256},[52,32111,31946],{"class":79},[52,32113,31949],{"class":62},[52,32115,27328],{"class":308},[52,32117,32118,32120,32123],{"class":54,"line":262},[52,32119,31385],{"class":308},[52,32121,32122],{"class":62}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[52,32124,27328],{"class":308},[52,32126,32127,32129],{"class":54,"line":268},[52,32128,31920],{"class":308},[52,32130,27328],{"class":308},[52,32132,32133],{"class":54,"line":280},[52,32134,31391],{"class":62},[52,32136,32137],{"class":54,"line":286},[52,32138,123],{"emptyLinePlaceholder":122},[52,32140,32141,32143,32145,32147],{"class":54,"line":300},[52,32142,28970],{"class":75},[52,32144,31823],{"class":62},[52,32146,31382],{"class":62},[52,32148,27328],{"class":308},[52,32150,32151,32153,32155],{"class":54,"line":314},[52,32152,31946],{"class":79},[52,32154,31949],{"class":62},[52,32156,27328],{"class":308},[52,32158,32159,32161,32164],{"class":54,"line":327},[52,32160,31385],{"class":308},[52,32162,32163],{"class":62}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[52,32165,27328],{"class":308},[52,32167,32168,32170],{"class":54,"line":333},[52,32169,31920],{"class":308},[52,32171,27328],{"class":308},[52,32173,32174],{"class":54,"line":360},[52,32175,31391],{"class":62},[52,32177,32178],{"class":54,"line":365},[52,32179,123],{"emptyLinePlaceholder":122},[52,32181,32182,32184,32186,32188],{"class":54,"line":371},[52,32183,29203],{"class":75},[52,32185,31823],{"class":62},[52,32187,31382],{"class":62},[52,32189,27328],{"class":308},[52,32191,32192,32194,32196],{"class":54,"line":400},[52,32193,31946],{"class":79},[52,32195,31949],{"class":62},[52,32197,27328],{"class":308},[52,32199,32200,32202,32205],{"class":54,"line":405},[52,32201,31385],{"class":308},[52,32203,32204],{"class":62}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[52,32206,27328],{"class":308},[52,32208,32209,32211],{"class":54,"line":411},[52,32210,31920],{"class":308},[52,32212,27328],{"class":308},[52,32214,32215],{"class":54,"line":424},[52,32216,31391],{"class":62},[52,32218,32219],{"class":54,"line":436},[52,32220,123],{"emptyLinePlaceholder":122},[52,32222,32223,32225,32227,32229],{"class":54,"line":449},[52,32224,29203],{"class":75},[52,32226,31823],{"class":62},[52,32228,31382],{"class":62},[52,32230,27328],{"class":308},[52,32232,32233,32235,32237],{"class":54,"line":2160},[52,32234,31946],{"class":79},[52,32236,31949],{"class":62},[52,32238,27328],{"class":308},[52,32240,32241,32243,32246],{"class":54,"line":2186},[52,32242,31385],{"class":308},[52,32244,32245],{"class":62}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[52,32247,27328],{"class":308},[52,32249,32250,32252],{"class":54,"line":2209},[52,32251,31920],{"class":308},[52,32253,27328],{"class":308},[52,32255,32256],{"class":54,"line":2233},[52,32257,31391],{"class":62},[52,32259,32260],{"class":54,"line":2238},[52,32261,123],{"emptyLinePlaceholder":122},[52,32263,32264,32266,32268,32270],{"class":54,"line":2243},[52,32265,28970],{"class":75},[52,32267,31823],{"class":62},[52,32269,31382],{"class":62},[52,32271,27328],{"class":308},[52,32273,32274,32276,32278],{"class":54,"line":2248},[52,32275,31946],{"class":79},[52,32277,31949],{"class":62},[52,32279,27328],{"class":308},[52,32281,32282,32284,32287],{"class":54,"line":2257},[52,32283,31385],{"class":308},[52,32285,32286],{"class":62}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[52,32288,27328],{"class":308},[52,32290,32291,32293],{"class":54,"line":2262},[52,32292,31920],{"class":308},[52,32294,27328],{"class":308},[52,32296,32297],{"class":54,"line":2268},[52,32298,31391],{"class":62},[52,32300,32301],{"class":54,"line":2297},[52,32302,123],{"emptyLinePlaceholder":122},[52,32304,32305,32308,32310,32312],{"class":54,"line":2303},[52,32306,32307],{"class":75},"  docker",[52,32309,31823],{"class":62},[52,32311,31382],{"class":62},[52,32313,27328],{"class":308},[52,32315,32316,32318,32320],{"class":54,"line":2318},[52,32317,31946],{"class":79},[52,32319,31949],{"class":62},[52,32321,27328],{"class":308},[52,32323,32324,32326,32329],{"class":54,"line":2324},[52,32325,31385],{"class":308},[52,32327,32328],{"class":62}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[52,32330,27328],{"class":308},[52,32332,32333,32335],{"class":54,"line":2353},[52,32334,31920],{"class":308},[52,32336,27328],{"class":308},[52,32338,32339],{"class":54,"line":2362},[52,32340,31391],{"class":62},[14,32342,32343],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,32345,32346],{},[4509,32347],{"alt":47,"src":32348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,32350,32351],{},[4509,32352],{"alt":47,"src":32353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[24646,32355,32357],{"id":32356},"_623清除构建缓存","6.2.3.清除构建缓存",[42,32359,32361],{"className":26471,"code":32360,"language":26473,"meta":47,"style":47},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[49,32362,32363,32368],{"__ignoreMap":47},[52,32364,32365],{"class":54,"line":55},[52,32366,32367],{"class":94},"# 清理BuildKit构建缓存\n",[52,32369,32370,32372,32375,32378],{"class":54,"line":66},[52,32371,29203],{"class":75},[52,32373,32374],{"class":62}," builder",[52,32376,32377],{"class":62}," prune",[52,32379,32380],{"class":308}," -f\n",[14,32382,32383],{},[4509,32384],{"alt":47,"src":32385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[3195,32387,32389],{"id":32388},"_63补充","6.3.补充",[24646,32391,32393],{"id":32392},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,32395,32396],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,32398,32399],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,32401,32402],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[42,32404,32406],{"className":26471,"code":32405,"language":26473,"meta":47,"style":47},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[49,32407,32408,32415],{"__ignoreMap":47},[52,32409,32410,32412],{"class":54,"line":55},[52,32411,30020],{"class":75},[52,32413,32414],{"class":62}," nginx\n",[52,32416,32417,32419,32422,32425,32427],{"class":54,"line":66},[52,32418,31205],{"class":75},[52,32420,32421],{"class":62}," echo",[52,32423,32424],{"class":62}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[52,32426,28872],{"class":58},[52,32428,32429],{"class":62}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,32431,32432],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,32434,32435],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[42,32437,32439],{"className":26471,"code":32438,"language":26473,"meta":47,"style":47},"docker build -t nginx:tuling .\n",[49,32440,32441],{"__ignoreMap":47},[52,32442,32443,32445,32447,32449,32452],{"class":54,"line":55},[52,32444,29203],{"class":75},[52,32446,31382],{"class":62},[52,32448,31385],{"class":308},[52,32450,32451],{"class":62}," nginx:tuling",[52,32453,31391],{"class":62},[14,32455,32456],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,32458,32459],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[42,32461,32463],{"className":26471,"code":32462,"language":26473,"meta":47,"style":47},"docker run -d -p 92:80 nginx:tuling\n",[49,32464,32465],{"__ignoreMap":47},[52,32466,32467,32469,32471,32474,32476,32479],{"class":54,"line":55},[52,32468,29203],{"class":75},[52,32470,29880],{"class":62},[52,32472,32473],{"class":308}," -d",[52,32475,31866],{"class":308},[52,32477,32478],{"class":62}," 92:80",[52,32480,32481],{"class":62}," nginx:tuling\n",[14,32483,32484,32485],{},"4、访问 ",[3451,32486,32489],{"href":32487,"rel":32488},"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",[26514],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,32491,32492],{},[4509,32493],{"alt":47,"src":32494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,32496,32497],{},[4509,32498],{"alt":47,"src":32499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[24646,32501,32503],{"id":32502},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,32505,32506],{},"只需要知道大体流程即可",[14,32508,32509],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,32511,32512],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,32514,32515],{},"2、在Dockerfile中添加以下内容",[42,32517,32519],{"className":28741,"code":32518,"language":28743,"meta":47,"style":47},"# 基于哪个镜像\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",[49,32520,32521,32526,32531,32536,32541,32546,32551,32556],{"__ignoreMap":47},[52,32522,32523],{"class":54,"line":55},[52,32524,32525],{},"# 基于哪个镜像\n",[52,32527,32528],{"class":54,"line":66},[52,32529,32530],{},"From java:8\n",[52,32532,32533],{"class":54,"line":83},[52,32534,32535],{},"# 复制文件到容器\n",[52,32537,32538],{"class":54,"line":91},[52,32539,32540],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[52,32542,32543],{"class":54,"line":98},[52,32544,32545],{},"# 声明需要暴露的端口\n",[52,32547,32548],{"class":54,"line":107},[52,32549,32550],{},"EXPOSE 8877\n",[52,32552,32553],{"class":54,"line":113},[52,32554,32555],{},"# 配置容器启动后执行的命令\n",[52,32557,32558],{"class":54,"line":119},[52,32559,32560],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,32562,32563],{},"3、使用docker build命令构建镜像",[42,32565,32567],{"className":26471,"code":32566,"language":26473,"meta":47,"style":47},"docker build -t tulingmall-member:0.0.5 .\n",[49,32568,32569],{"__ignoreMap":47},[52,32570,32571,32573,32575,32577,32580],{"class":54,"line":55},[52,32572,29203],{"class":75},[52,32574,31382],{"class":62},[52,32576,31385],{"class":308},[52,32578,32579],{"class":62}," tulingmall-member:0.0.5",[52,32581,31391],{"class":62},[14,32583,32584],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,32586,32587],{},[4509,32588],{"alt":47,"src":32589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,32591,32592],{},"4、启动镜像，加-d可在后台启动",[42,32594,32596],{"className":26471,"code":32595,"language":26473,"meta":47,"style":47},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[49,32597,32598],{"__ignoreMap":47},[52,32599,32600,32602,32604,32606,32608,32611],{"class":54,"line":55},[52,32601,29203],{"class":75},[52,32603,29880],{"class":62},[52,32605,32473],{"class":308},[52,32607,31866],{"class":308},[52,32609,32610],{"class":62}," 8877:8877",[52,32612,32613],{"class":62}," tulingmall-member:0.0.5\n",[14,32615,32616],{},"加上JVM参数：",[42,32618,32620],{"className":26471,"code":32619,"language":26473,"meta":47,"style":47},"# --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",[49,32621,32622,32627,32642,32652,32661,32668],{"__ignoreMap":47},[52,32623,32624],{"class":54,"line":55},[52,32625,32626],{"class":94},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[52,32628,32629,32631,32633,32636,32638,32640],{"class":54,"line":66},[52,32630,29203],{"class":75},[52,32632,29880],{"class":62},[52,32634,32635],{"class":308},"  -d",[52,32637,31866],{"class":308},[52,32639,32610],{"class":62},[52,32641,27328],{"class":308},[52,32643,32644,32646,32649],{"class":54,"line":83},[52,32645,30778],{"class":79},[52,32647,32648],{"class":62},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[52,32650,32651],{"class":308},"  \\\n",[52,32653,32654,32656,32659],{"class":54,"line":91},[52,32655,30778],{"class":79},[52,32657,32658],{"class":62},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[52,32660,32651],{"class":308},[52,32662,32663,32666],{"class":54,"line":98},[52,32664,32665],{"class":79},"--cap-add=SYS_PTRACE  ",[52,32667,28825],{"class":308},[52,32669,32670],{"class":54,"line":107},[52,32671,32672],{"class":79},"tulingmall-member:0.0.5\n",[14,32674,32675],{},"5、访问会员服务接口",[14,32677,32678],{},[4509,32679],{"alt":47,"src":32680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[24646,32682,32684],{"id":32683},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,32686,32687],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,32689,32690,32691],{},"阿里云docker镜像仓库：",[3451,32692,32693],{"href":32693,"rel":32694},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[26514],[14,32696,32697],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,32699,32700],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,32702,32703],{},[4509,32704],{"alt":47,"src":32705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,32707,32708],{},"要把镜像推送到镜像仓库",[42,32710,32712],{"className":26471,"code":32711,"language":26473,"meta":47,"style":47},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[49,32713,32714],{"__ignoreMap":47},[52,32715,32716,32718,32720,32722],{"class":54,"line":55},[52,32717,29203],{"class":75},[52,32719,31547],{"class":62},[52,32721,32579],{"class":62},[52,32723,32724],{"class":62}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,32726,32727],{},"最后将镜像推送到远程仓库",[42,32729,32731],{"className":26471,"code":32730,"language":26473,"meta":47,"style":47},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[49,32732,32733],{"__ignoreMap":47},[52,32734,32735,32737,32739],{"class":54,"line":55},[52,32736,29203],{"class":75},[52,32738,31666],{"class":62},[52,32740,32724],{"class":62},[3141,32742,32743],{},"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":47,"searchDepth":66,"depth":66,"links":32745},[32746,32747,32748],{"id":31133,"depth":83,"text":31134},{"id":31362,"depth":83,"text":31363},{"id":32388,"depth":83,"text":32389},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":31125,"description":47},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32755,"title":32756,"body":32757,"description":47,"extension":3153,"meta":32900,"navigation":122,"path":32901,"seo":32902,"stem":32903,"__hash__":32904},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32758,"toc":32898},[32759,32762,32767,32772,32775,32780,32785,32788,32793,32798,32801,32806,32809,32812,32815,32818,32821,32824,32844,32866,32869,32872,32892,32895],[10,32760,32756],{"id":32761},"_7vscode远程开发",[1696,32763,32764],{},[32,32765,32766],{},"插件1：微软Docker工具",[14,32768,32769],{},[4509,32770],{"alt":47,"src":32771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,32773,32774],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,32776,32777],{},[4509,32778],{"alt":47,"src":32779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[1696,32781,32782],{"start":66},[32,32783,32784],{},"插件2：微软Docker远程开发工具",[14,32786,32787],{},"下面这是远程开发的插件。",[14,32789,32790],{},[4509,32791],{"alt":47,"src":32792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,32794,32795],{},[4509,32796],{"alt":47,"src":32797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,32799,32800],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,32802,32803],{},[4509,32804],{"alt":47,"src":32805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,32807,32808],{},"安装完拓展之后，vscode进行链接：",[14,32810,32811],{},"1.按ctrl+shift+p",[14,32813,32814],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,32816,32817],{},"3.选择目前运行的容器",[14,32819,32820],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,32822,32823],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[42,32825,32827],{"className":26471,"code":32826,"language":26473,"meta":47,"style":47},"docker run -v 主机目录:容器目录 image-name\n",[49,32828,32829],{"__ignoreMap":47},[52,32830,32831,32833,32835,32838,32841],{"class":54,"line":55},[52,32832,29203],{"class":75},[52,32834,29880],{"class":62},[52,32836,32837],{"class":308}," -v",[52,32839,32840],{"class":62}," 主机目录:容器目录",[52,32842,32843],{"class":62}," image-name\n",[42,32845,32847],{"className":26471,"code":32846,"language":26473,"meta":47,"style":47},"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",[49,32848,32849],{"__ignoreMap":47},[52,32850,32851,32853,32855,32858,32860,32863],{"class":54,"line":55},[52,32852,29203],{"class":75},[52,32854,29880],{"class":62},[52,32856,32857],{"class":308}," -it",[52,32859,32837],{"class":308},[52,32861,32862],{"class":62}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[52,32864,32865],{"class":62}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,32867,32868],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,32870,32871],{},"查看挂载情况：",[42,32873,32875],{"className":26471,"code":32874,"language":26473,"meta":47,"style":47},"mount | grep -i project\n",[49,32876,32877],{"__ignoreMap":47},[52,32878,32879,32882,32884,32887,32889],{"class":54,"line":55},[52,32880,32881],{"class":75},"mount",[52,32883,27759],{"class":58},[52,32885,32886],{"class":75}," grep",[52,32888,29080],{"class":308},[52,32890,32891],{"class":62}," project\n",[14,32893,32894],{},"也可以通过ls来进行查看",[3141,32896,32897],{},"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":47,"searchDepth":66,"depth":66,"links":32899},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32756,"description":47},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32906,"title":32907,"body":32908,"description":26025,"extension":3153,"meta":32912,"navigation":122,"path":32914,"seo":32915,"stem":32916,"__hash__":32917},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32909,"toc":32910},[],{"title":47,"searchDepth":66,"depth":66,"links":32911},[],{"category":32913},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32907,"description":26025},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32919,"title":32920,"body":32921,"description":26025,"extension":3153,"meta":32925,"navigation":122,"path":32926,"seo":32927,"stem":32928,"__hash__":32929},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32922,"toc":32923},[],{"title":47,"searchDepth":66,"depth":66,"links":32924},[],{"category":32913},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32920,"description":26025},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32931,"title":32932,"body":32933,"description":26025,"extension":3153,"meta":33226,"navigation":122,"path":33227,"seo":33228,"stem":33229,"__hash__":33230},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32934,"toc":33224},[32935,32938,32946,32961,32966,33017,33020,33026,33213,33218,33221],[10,32936,32932],{"id":32937},"_1验证深度学习环境",[14,32939,32940,32941],{},"关于环境的安装，看",[3451,32942,32945],{"href":32943,"rel":32944},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[26514],"Pytorch-->深度学习",[14,32947,32948,32949,32952,32953,32956,32957,32960],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[49,32950,32951],{},"pytorch-cuda=12.4"," 是一个“ ",[2389,32954,32955],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2389,32958,32959],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,32962,32963],{},[4509,32964],{"alt":47,"src":32965},"\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",[42,32967,32969],{"className":26471,"code":32968,"language":26473,"meta":47,"style":47},"# 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",[49,32970,32971,32976],{"__ignoreMap":47},[52,32972,32973],{"class":54,"line":55},[52,32974,32975],{"class":94},"# CUDA 12.4\n",[52,32977,32978,32981,32983,32986,32989,32992,32995,32998,33000,33003,33006,33009,33012,33014],{"class":54,"line":66},[52,32979,32980],{"class":75},"conda",[52,32982,26483],{"class":62},[52,32984,32985],{"class":62}," pytorch==",[52,32987,32988],{"class":308},"2.5.1",[52,32990,32991],{"class":62}," torchvision==",[52,32993,32994],{"class":308},"0.20.1",[52,32996,32997],{"class":62}," torchaudio==",[52,32999,32988],{"class":308},[52,33001,33002],{"class":62}," pytorch-cuda=",[52,33004,33005],{"class":308},"12.4",[52,33007,33008],{"class":308}," -c",[52,33010,33011],{"class":62}," pytorch",[52,33013,33008],{"class":308},[52,33015,33016],{"class":62}," nvidia\n",[14,33018,33019],{},"）：",[14,33021,33022],{},[3451,33023,33024],{"href":33024,"rel":33025},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[26514],[42,33027,33031],{"className":33028,"code":33029,"language":33030,"meta":47,"style":47},"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",[49,33032,33033,33038,33046,33051,33061,33077,33082,33092,33129,33136,33148,33164,33169,33179,33191,33201],{"__ignoreMap":47},[52,33034,33035],{"class":54,"line":55},[52,33036,33037],{"class":94},"# 对深度学习环境进行测试\n",[52,33039,33040,33043],{"class":54,"line":66},[52,33041,33042],{"class":58},"import",[52,33044,33045],{"class":79}," torch\n",[52,33047,33048],{"class":54,"line":83},[52,33049,33050],{"class":94},"# 查看cuda是否被激活\n",[52,33052,33053,33056,33058],{"class":54,"line":91},[52,33054,33055],{"class":79},"flag",[52,33057,292],{"class":58},[52,33059,33060],{"class":79},"torch.cuda.is_available()\n",[52,33062,33063,33066,33068,33071,33074],{"class":54,"line":98},[52,33064,33065],{"class":308},"print",[52,33067,1216],{"class":79},[52,33069,33070],{"class":62},"\"cuda:\"",[52,33072,33073],{"class":79},", flag)   ",[52,33075,33076],{"class":94},"#返回true的话说明被激活\n",[52,33078,33079],{"class":54,"line":107},[52,33080,33081],{"class":94},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[52,33083,33084,33087,33089],{"class":54,"line":113},[52,33085,33086],{"class":79},"ngpu",[52,33088,292],{"class":58},[52,33090,33091],{"class":308},"1\n",[52,33093,33094,33097,33099,33102,33105,33107,33110,33113,33116,33118,33120,33122,33124,33127],{"class":54,"line":119},[52,33095,33096],{"class":79},"device",[52,33098,292],{"class":58},[52,33100,33101],{"class":79},"torch.device(",[52,33103,33104],{"class":62},"\"cuda:0\"",[52,33106,4736],{"class":58},[52,33108,33109],{"class":79},"(torch.cuda.is_available() ",[52,33111,33112],{"class":58},"and",[52,33114,33115],{"class":79}," ngpu",[52,33117,2674],{"class":58},[52,33119,692],{"class":308},[52,33121,16362],{"class":79},[52,33123,4733],{"class":58},[52,33125,33126],{"class":62}," \"cpu\"",[52,33128,708],{"class":79},[52,33130,33131,33133],{"class":54,"line":126},[52,33132,33065],{"class":308},[52,33134,33135],{"class":79},"(device)\n",[52,33137,33138,33140,33143,33145],{"class":54,"line":132},[52,33139,33065],{"class":308},[52,33141,33142],{"class":79},"(torch.cuda.get_device_name(",[52,33144,692],{"class":308},[52,33146,33147],{"class":79},"))\n",[52,33149,33150,33152,33155,33157,33159,33161],{"class":54,"line":138},[52,33151,33065],{"class":308},[52,33153,33154],{"class":79},"(torch.rand(",[52,33156,2313],{"class":308},[52,33158,389],{"class":79},[52,33160,2313],{"class":308},[52,33162,33163],{"class":79},").cuda())\n",[52,33165,33166],{"class":54,"line":144},[52,33167,33168],{"class":94},"# 查看cuda和cudnn的版本\n",[52,33170,33171,33174,33176],{"class":54,"line":153},[52,33172,33173],{"class":79},"cuda_version",[52,33175,292],{"class":58},[52,33177,33178],{"class":79},"torch.version.cuda\n",[52,33180,33181,33183,33185,33188],{"class":54,"line":159},[52,33182,33065],{"class":308},[52,33184,1216],{"class":79},[52,33186,33187],{"class":62},"\"cuda version\"",[52,33189,33190],{"class":79},",cuda_version)\n",[52,33192,33193,33196,33198],{"class":54,"line":167},[52,33194,33195],{"class":79},"cudnn_version",[52,33197,292],{"class":58},[52,33199,33200],{"class":79},"torch.backends.cudnn.version()\n",[52,33202,33203,33205,33207,33210],{"class":54,"line":173},[52,33204,33065],{"class":308},[52,33206,1216],{"class":79},[52,33208,33209],{"class":62},"\"cudnn version\"",[52,33211,33212],{"class":79},",cudnn_version)\n",[14,33214,33215],{},[4509,33216],{"alt":47,"src":33217},"\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,33219,33220],{},"cuda:0 指的是一块显卡",[3141,33222,33223],{},"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":47,"searchDepth":66,"depth":66,"links":33225},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32932,"description":26025},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":33232,"title":33233,"body":33234,"description":26025,"extension":3153,"meta":53038,"navigation":122,"path":53039,"seo":53040,"stem":53041,"__hash__":53042},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":33235,"toc":53032},[33236,33239,33243,33247,33250,33255,33260,33263,33268,33273,33278,33281,33285,33290,33294,33299,33302,33307,33310,33313,33316,33319,33324,33327,33332,33337,33342,33347,33350,33354,33357,33362,33966,33971,33974,33979,33982,33985,34449,34452,34455,34458,34461,36512,36515,36520,36525,37320,37323,37328,38106,38110,39769,39773,40487,40491,40495,40500,40505,40510,40513,40518,40523,40528,40533,40538,40542,40547,41829,41834,41837,41840,41843,41998,42001,42004,43220,43225,43920,43924,43928,43933,43938,43941,43946,43951,43956,43961,43966,43971,43976,43981,43986,43991,43996,44001,44006,44011,44016,44021,44026,44031,44036,44041,44046,44051,44056,44061,44066,44071,44076,44081,44086,44091,44095,44099,44102,45580,45584,47231,47235,47929,47933,47936,47939,48483,48486,48490,48493,49890,49894,49897,50475,52262,52266,52269,53029],[10,33237,33233],{"id":33238},"_2经典神经网络",[3195,33240,33242],{"id":33241},"_21lenet与alexnet","2.1.LeNet与AlexNet",[24646,33244,33246],{"id":33245},"_211原理介绍","2.1.1.原理介绍",[14,33248,33249],{},"LeNet-5",[1696,33251,33252],{},[32,33253,33254],{},"原理",[14,33256,33257],{},[4509,33258],{"alt":47,"src":33259},"\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,33261,33262],{},"B是batch批次；C是channel通道",[1696,33264,33265],{"start":66},[32,33266,33267],{},"网络参数详细",[14,33269,33270],{},[4509,33271],{"alt":47,"src":33272},"\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,33274,33275],{},[4509,33276],{"alt":47,"src":33277},"\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,33279,33280],{},"AlexNet",[1696,33282,33283],{},[32,33284,33254],{},[14,33286,33287],{},[4509,33288],{"alt":47,"src":33289},"\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",[1696,33291,33292],{"start":66},[32,33293,33267],{},[14,33295,33296],{},[4509,33297],{"alt":47,"src":33298},"\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,33300,33301],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,33303,33304],{},[4509,33305],{"alt":47,"src":33306},"\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,33308,33309],{},"数据处理中的图像增强操作:",[14,33311,33312],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,33314,33315],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,33317,33318],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,33320,33321],{},[4509,33322],{"alt":47,"src":33323},"\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,33325,33326],{},"提升网络精确度的方法：LRN正则化",[14,33328,33329],{},[4509,33330],{"alt":47,"src":33331},"\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,33333,33334],{},[4509,33335],{"alt":47,"src":33336},"\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",[1696,33338,33339],{"start":83},[32,33340,33341],{},"AlexNet的总结",[14,33343,33344],{},[4509,33345],{"alt":47,"src":33346},"\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,33348,33349],{},"比LeNet模型要深一丢丢",[24646,33351,33353],{"id":33352},"_212代码实现","2.1.2.代码实现",[14,33355,33356],{},"（1）LeNet",[1696,33358,33359],{},[32,33360,33361],{},"模型搭建",[42,33363,33365],{"className":33028,"code":33364,"language":33030,"meta":47,"style":47},"# 导入库\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",[49,33366,33367,33372,33378,33383,33396,33401,33413,33417,33437,33442,33447,33458,33463,33482,33486,33491,33540,33552,33557,33586,33621,33648,33653,33665,33670,33690,33709,33728,33732,33737,33747,33764,33775,33790,33801,33812,33827,33842,33853,33860,33864,33878,33883,33906,33911,33916,33921,33925,33930,33935,33945],{"__ignoreMap":47},[52,33368,33369],{"class":54,"line":55},[52,33370,33371],{"class":94},"# 导入库\n",[52,33373,33374,33376],{"class":54,"line":66},[52,33375,33042],{"class":58},[52,33377,33045],{"class":79},[52,33379,33380],{"class":54,"line":83},[52,33381,33382],{"class":94},"# 导入神经网络层\n",[52,33384,33385,33388,33391,33393],{"class":54,"line":91},[52,33386,33387],{"class":58},"from",[52,33389,33390],{"class":79}," torch ",[52,33392,33042],{"class":58},[52,33394,33395],{"class":79}," nn\n",[52,33397,33398],{"class":54,"line":98},[52,33399,33400],{"class":94},"# 导入展示神经网络参数的包\n",[52,33402,33403,33405,33408,33410],{"class":54,"line":107},[52,33404,33387],{"class":58},[52,33406,33407],{"class":79}," torchsummary ",[52,33409,33042],{"class":58},[52,33411,33412],{"class":79}," summary\n",[52,33414,33415],{"class":54,"line":113},[52,33416,123],{"emptyLinePlaceholder":122},[52,33418,33419,33421,33424,33426,33429,33431,33434],{"class":54,"line":119},[52,33420,17342],{"class":58},[52,33422,33423],{"class":75}," LeNet",[52,33425,1216],{"class":79},[52,33427,33428],{"class":75},"nn",[52,33430,3757],{"class":79},[52,33432,33433],{"class":75},"Module",[52,33435,33436],{"class":79},"):\n",[52,33438,33439],{"class":54,"line":126},[52,33440,33441],{"class":94},"    # 模型初始化:\n",[52,33443,33444],{"class":54,"line":132},[52,33445,33446],{"class":94},"    # 定义一些网络层和激活函数\n",[52,33448,33449,33452,33455],{"class":54,"line":138},[52,33450,33451],{"class":58},"    def",[52,33453,33454],{"class":308}," __init__",[52,33456,33457],{"class":79},"(self):\n",[52,33459,33460],{"class":54,"line":144},[52,33461,33462],{"class":94},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[52,33464,33465,33468,33471,33474,33477,33480],{"class":54,"line":153},[52,33466,33467],{"class":308},"        super",[52,33469,33470],{"class":79},"(LeNet,",[52,33472,33473],{"class":308},"self",[52,33475,33476],{"class":79},").",[52,33478,33479],{"class":308},"__init__",[52,33481,248],{"class":79},[52,33483,33484],{"class":54,"line":159},[52,33485,123],{"emptyLinePlaceholder":122},[52,33487,33488],{"class":54,"line":167},[52,33489,33490],{"class":94},"        # 定义网络层\n",[52,33492,33493,33496,33499,33501,33504,33507,33509,33511,33513,33516,33518,33520,33522,33525,33527,33529,33531,33534,33536,33538],{"class":54,"line":173},[52,33494,33495],{"class":308},"        self",[52,33497,33498],{"class":79},".c1",[52,33500,292],{"class":58},[52,33502,33503],{"class":79},"nn.Conv2d(",[52,33505,33506],{"class":1223},"in_channels",[52,33508,292],{"class":58},[52,33510,629],{"class":308},[52,33512,389],{"class":79},[52,33514,33515],{"class":1223},"out_channels",[52,33517,292],{"class":58},[52,33519,1125],{"class":308},[52,33521,389],{"class":79},[52,33523,33524],{"class":1223},"kernel_size",[52,33526,292],{"class":58},[52,33528,1805],{"class":308},[52,33530,389],{"class":79},[52,33532,33533],{"class":1223},"padding",[52,33535,292],{"class":58},[52,33537,564],{"class":308},[52,33539,708],{"class":79},[52,33541,33542,33544,33547,33549],{"class":54,"line":181},[52,33543,33495],{"class":308},[52,33545,33546],{"class":79},".sig",[52,33548,292],{"class":58},[52,33550,33551],{"class":79},"nn.Sigmoid()\n",[52,33553,33554],{"class":54,"line":186},[52,33555,33556],{"class":94},"        # 定义池化\n",[52,33558,33559,33561,33564,33566,33569,33571,33573,33575,33577,33580,33582,33584],{"class":54,"line":191},[52,33560,33495],{"class":308},[52,33562,33563],{"class":79},".s2",[52,33565,292],{"class":58},[52,33567,33568],{"class":79},"nn.AvgPool2d(",[52,33570,33524],{"class":1223},[52,33572,292],{"class":58},[52,33574,564],{"class":308},[52,33576,389],{"class":79},[52,33578,33579],{"class":1223},"stride",[52,33581,292],{"class":58},[52,33583,564],{"class":308},[52,33585,708],{"class":79},[52,33587,33588,33590,33593,33595,33597,33599,33601,33603,33605,33607,33609,33611,33613,33615,33617,33619],{"class":54,"line":196},[52,33589,33495],{"class":308},[52,33591,33592],{"class":79},".c3",[52,33594,292],{"class":58},[52,33596,33503],{"class":79},[52,33598,33506],{"class":1223},[52,33600,292],{"class":58},[52,33602,1125],{"class":308},[52,33604,389],{"class":79},[52,33606,33515],{"class":1223},[52,33608,292],{"class":58},[52,33610,3798],{"class":308},[52,33612,389],{"class":79},[52,33614,33524],{"class":1223},[52,33616,292],{"class":58},[52,33618,1805],{"class":308},[52,33620,708],{"class":79},[52,33622,33623,33625,33628,33630,33632,33634,33636,33638,33640,33642,33644,33646],{"class":54,"line":201},[52,33624,33495],{"class":308},[52,33626,33627],{"class":79},".s4",[52,33629,292],{"class":58},[52,33631,33568],{"class":79},[52,33633,33524],{"class":1223},[52,33635,292],{"class":58},[52,33637,564],{"class":308},[52,33639,389],{"class":79},[52,33641,33579],{"class":1223},[52,33643,292],{"class":58},[52,33645,564],{"class":308},[52,33647,708],{"class":79},[52,33649,33650],{"class":54,"line":206},[52,33651,33652],{"class":94},"        # 定义平展层\n",[52,33654,33655,33657,33660,33662],{"class":54,"line":211},[52,33656,33495],{"class":308},[52,33658,33659],{"class":79},".flatten",[52,33661,292],{"class":58},[52,33663,33664],{"class":79},"nn.Flatten()\n",[52,33666,33667],{"class":54,"line":218},[52,33668,33669],{"class":94},"        # 定义全连接层\n",[52,33671,33672,33674,33677,33679,33682,33684,33686,33688],{"class":54,"line":223},[52,33673,33495],{"class":308},[52,33675,33676],{"class":79},".f5",[52,33678,292],{"class":58},[52,33680,33681],{"class":79},"nn.Linear(",[52,33683,6965],{"class":308},[52,33685,389],{"class":79},[52,33687,4007],{"class":308},[52,33689,708],{"class":79},[52,33691,33692,33694,33697,33699,33701,33703,33705,33707],{"class":54,"line":230},[52,33693,33495],{"class":308},[52,33695,33696],{"class":79},".f6",[52,33698,292],{"class":58},[52,33700,33681],{"class":79},[52,33702,4007],{"class":308},[52,33704,389],{"class":79},[52,33706,3904],{"class":308},[52,33708,708],{"class":79},[52,33710,33711,33713,33716,33718,33720,33722,33724,33726],{"class":54,"line":239},[52,33712,33495],{"class":308},[52,33714,33715],{"class":79},".f7",[52,33717,292],{"class":58},[52,33719,33681],{"class":79},[52,33721,3904],{"class":308},[52,33723,389],{"class":79},[52,33725,3649],{"class":308},[52,33727,708],{"class":79},[52,33729,33730],{"class":54,"line":251},[52,33731,123],{"emptyLinePlaceholder":122},[52,33733,33734],{"class":54,"line":256},[52,33735,33736],{"class":94},"    # 写工具->写前向传播\n",[52,33738,33739,33741,33744],{"class":54,"line":262},[52,33740,33451],{"class":58},[52,33742,33743],{"class":75}," forward",[52,33745,33746],{"class":79},"(self,x):\n",[52,33748,33749,33752,33754,33756,33759,33761],{"class":54,"line":268},[52,33750,33751],{"class":79},"        x",[52,33753,292],{"class":58},[52,33755,33473],{"class":308},[52,33757,33758],{"class":79},".sig(",[52,33760,33473],{"class":308},[52,33762,33763],{"class":79},".c1(x))\n",[52,33765,33766,33768,33770,33772],{"class":54,"line":280},[52,33767,33751],{"class":79},[52,33769,292],{"class":58},[52,33771,33473],{"class":308},[52,33773,33774],{"class":79},".s2(x)\n",[52,33776,33777,33779,33781,33783,33785,33787],{"class":54,"line":286},[52,33778,33751],{"class":79},[52,33780,292],{"class":58},[52,33782,33473],{"class":308},[52,33784,33758],{"class":79},[52,33786,33473],{"class":308},[52,33788,33789],{"class":79},".c3(x))\n",[52,33791,33792,33794,33796,33798],{"class":54,"line":300},[52,33793,33751],{"class":79},[52,33795,292],{"class":58},[52,33797,33473],{"class":308},[52,33799,33800],{"class":79},".s4(x)\n",[52,33802,33803,33805,33807,33809],{"class":54,"line":314},[52,33804,33751],{"class":79},[52,33806,292],{"class":58},[52,33808,33473],{"class":308},[52,33810,33811],{"class":79},".flatten(x)\n",[52,33813,33814,33816,33818,33820,33822,33824],{"class":54,"line":327},[52,33815,33751],{"class":79},[52,33817,292],{"class":58},[52,33819,33473],{"class":308},[52,33821,33758],{"class":79},[52,33823,33473],{"class":308},[52,33825,33826],{"class":79},".f5(x))\n",[52,33828,33829,33831,33833,33835,33837,33839],{"class":54,"line":333},[52,33830,33751],{"class":79},[52,33832,292],{"class":58},[52,33834,33473],{"class":308},[52,33836,33758],{"class":79},[52,33838,33473],{"class":308},[52,33840,33841],{"class":79},".f6(x))\n",[52,33843,33844,33846,33848,33850],{"class":54,"line":360},[52,33845,33751],{"class":79},[52,33847,292],{"class":58},[52,33849,33473],{"class":308},[52,33851,33852],{"class":79},".f7(x)\n",[52,33854,33855,33857],{"class":54,"line":365},[52,33856,17400],{"class":58},[52,33858,33859],{"class":79}," x\n",[52,33861,33862],{"class":54,"line":371},[52,33863,123],{"emptyLinePlaceholder":122},[52,33865,33866,33868,33871,33873,33876],{"class":54,"line":400},[52,33867,4578],{"class":58},[52,33869,33870],{"class":308}," __name__",[52,33872,5938],{"class":58},[52,33874,33875],{"class":62},"\"__main__\"",[52,33877,6718],{"class":79},[52,33879,33880],{"class":54,"line":405},[52,33881,33882],{"class":94},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[52,33884,33885,33888,33890,33892,33895,33897,33900,33902,33904],{"class":54,"line":411},[52,33886,33887],{"class":79},"    device",[52,33889,292],{"class":58},[52,33891,33101],{"class":79},[52,33893,33894],{"class":62},"\"cuda\"",[52,33896,4736],{"class":58},[52,33898,33899],{"class":79}," torch.cuda.is_available() ",[52,33901,4733],{"class":58},[52,33903,33126],{"class":62},[52,33905,708],{"class":79},[52,33907,33908],{"class":54,"line":424},[52,33909,33910],{"class":94},"    # 如果就是想指定用cpu用下方代码:\n",[52,33912,33913],{"class":54,"line":436},[52,33914,33915],{"class":94},"    # device=\"cpu\"\n",[52,33917,33918],{"class":54,"line":449},[52,33919,33920],{"class":94},"    # print(device)\n",[52,33922,33923],{"class":54,"line":2160},[52,33924,123],{"emptyLinePlaceholder":122},[52,33926,33927],{"class":54,"line":2186},[52,33928,33929],{"class":94},"    # 实例化模型\n",[52,33931,33932],{"class":54,"line":2209},[52,33933,33934],{"class":94},"    # 将模型放到设备中去运行\n",[52,33936,33937,33940,33942],{"class":54,"line":2233},[52,33938,33939],{"class":79},"    model",[52,33941,292],{"class":58},[52,33943,33944],{"class":79},"LeNet().to(device)\n",[52,33946,33947,33950,33953,33955,33957,33959,33961,33963],{"class":54,"line":2238},[52,33948,33949],{"class":308},"    print",[52,33951,33952],{"class":79},"(summary(model,(",[52,33954,629],{"class":308},[52,33956,389],{"class":79},[52,33958,4090],{"class":308},[52,33960,389],{"class":79},[52,33962,4090],{"class":308},[52,33964,33965],{"class":79},")))\n",[14,33967,33968],{},[4509,33969],{"alt":47,"src":33970},"\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,33972,33973],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[1696,33975,33976],{"start":66},[32,33977,33978],{},"训练",[14,33980,33981],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,33983,33984],{},"在训练之前可以将数据展示看一下",[42,33986,33988],{"className":33028,"code":33987,"language":33030,"meta":47,"style":47},"# 建立画图的函数，用于展示数据\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",[49,33989,33990,33995,34000,34012,34024,34037,34042,34054,34059,34071,34076,34088,34092,34096,34117,34129,34134,34155,34166,34170,34175,34193,34204,34209,34220,34225,34236,34240,34245,34260,34273,34278,34283,34296,34309,34322,34327,34331,34336,34356,34373,34393,34406,34419,34429,34444],{"__ignoreMap":47},[52,33991,33992],{"class":54,"line":55},[52,33993,33994],{"class":94},"# 建立画图的函数，用于展示数据\n",[52,33996,33997],{"class":54,"line":66},[52,33998,33999],{"class":94},"# torchvision中包含很多内置的数据集\n",[52,34001,34002,34004,34007,34009],{"class":54,"line":83},[52,34003,33387],{"class":58},[52,34005,34006],{"class":79}," sklearn.externals.array_api_compat.torch ",[52,34008,33042],{"class":58},[52,34010,34011],{"class":79}," squeeze\n",[52,34013,34014,34016,34019,34021],{"class":54,"line":91},[52,34015,33387],{"class":58},[52,34017,34018],{"class":79}," torchvision.datasets ",[52,34020,33042],{"class":58},[52,34022,34023],{"class":79}," FashionMNIST\n",[52,34025,34026,34028,34031,34034],{"class":54,"line":98},[52,34027,33042],{"class":58},[52,34029,34030],{"class":79}," numpy ",[52,34032,34033],{"class":58},"as",[52,34035,34036],{"class":79}," np\n",[52,34038,34039],{"class":54,"line":107},[52,34040,34041],{"class":94},"# 引入处理数据集的包\n",[52,34043,34044,34046,34049,34051],{"class":54,"line":113},[52,34045,33387],{"class":58},[52,34047,34048],{"class":79}," torchvision ",[52,34050,33042],{"class":58},[52,34052,34053],{"class":79}," transforms\n",[52,34055,34056],{"class":54,"line":119},[52,34057,34058],{"class":94},"# 从torch库中引入数据处理的包\n",[52,34060,34061,34063,34066,34068],{"class":54,"line":126},[52,34062,33042],{"class":58},[52,34064,34065],{"class":79}," torch.utils.data ",[52,34067,34033],{"class":58},[52,34069,34070],{"class":79}," Data\n",[52,34072,34073],{"class":54,"line":132},[52,34074,34075],{"class":94},"# 导入画图的库\n",[52,34077,34078,34080,34083,34085],{"class":54,"line":138},[52,34079,33042],{"class":58},[52,34081,34082],{"class":79}," matplotlib.pyplot ",[52,34084,34033],{"class":58},[52,34086,34087],{"class":79}," plt\n",[52,34089,34090],{"class":54,"line":144},[52,34091,123],{"emptyLinePlaceholder":122},[52,34093,34094],{"class":54,"line":153},[52,34095,123],{"emptyLinePlaceholder":122},[52,34097,34098,34101,34103,34106,34109,34111,34114],{"class":54,"line":159},[52,34099,34100],{"class":79},"train_data",[52,34102,292],{"class":58},[52,34104,34105],{"class":79},"FashionMNIST(",[52,34107,34108],{"class":1223},"root",[52,34110,292],{"class":58},[52,34112,34113],{"class":62},"'.\u002Fdata'",[52,34115,34116],{"class":79},",\n",[52,34118,34119,34122,34124,34127],{"class":54,"line":167},[52,34120,34121],{"class":1223},"                        train",[52,34123,292],{"class":58},[52,34125,34126],{"class":308},"True",[52,34128,34116],{"class":79},[52,34130,34131],{"class":54,"line":173},[52,34132,34133],{"class":94},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[52,34135,34136,34139,34141,34144,34147,34149,34152],{"class":54,"line":181},[52,34137,34138],{"class":1223},"                        transform",[52,34140,292],{"class":58},[52,34142,34143],{"class":79},"transforms.Compose([transforms.Resize(",[52,34145,34146],{"class":1223},"size",[52,34148,292],{"class":58},[52,34150,34151],{"class":308},"224",[52,34153,34154],{"class":79},"),transforms.ToTensor()]),\n",[52,34156,34157,34160,34162,34164],{"class":54,"line":186},[52,34158,34159],{"class":1223},"                        download",[52,34161,292],{"class":58},[52,34163,34126],{"class":308},[52,34165,708],{"class":79},[52,34167,34168],{"class":54,"line":191},[52,34169,123],{"emptyLinePlaceholder":122},[52,34171,34172],{"class":54,"line":196},[52,34173,34174],{"class":94},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[52,34176,34177,34180,34182,34185,34188,34190],{"class":54,"line":201},[52,34178,34179],{"class":79},"train_loader",[52,34181,292],{"class":58},[52,34183,34184],{"class":79},"Data.DataLoader(",[52,34186,34187],{"class":1223},"dataset",[52,34189,292],{"class":58},[52,34191,34192],{"class":79},"train_data,\n",[52,34194,34195,34198,34200,34202],{"class":54,"line":206},[52,34196,34197],{"class":1223},"                             batch_size",[52,34199,292],{"class":58},[52,34201,3417],{"class":308},[52,34203,34116],{"class":79},[52,34205,34206],{"class":54,"line":211},[52,34207,34208],{"class":94},"                             # 数据是否打乱\n",[52,34210,34211,34214,34216,34218],{"class":54,"line":218},[52,34212,34213],{"class":1223},"                             shuffle",[52,34215,292],{"class":58},[52,34217,34126],{"class":308},[52,34219,34116],{"class":79},[52,34221,34222],{"class":54,"line":223},[52,34223,34224],{"class":94},"                             # 规定加载数据的进程\n",[52,34226,34227,34230,34232,34234],{"class":54,"line":230},[52,34228,34229],{"class":1223},"                             num_workers",[52,34231,292],{"class":58},[52,34233,692],{"class":308},[52,34235,708],{"class":79},[52,34237,34238],{"class":54,"line":239},[52,34239,123],{"emptyLinePlaceholder":122},[52,34241,34242],{"class":54,"line":251},[52,34243,34244],{"class":94},"# 获得一个batch的数据\n",[52,34246,34247,34249,34252,34254,34257],{"class":54,"line":256},[52,34248,6014],{"class":58},[52,34250,34251],{"class":79}," step,(b_x,b_y) ",[52,34253,28693],{"class":58},[52,34255,34256],{"class":308}," enumerate",[52,34258,34259],{"class":79},"(train_loader):\n",[52,34261,34262,34264,34267,34269,34271],{"class":54,"line":262},[52,34263,6088],{"class":58},[52,34265,34266],{"class":79}," step ",[52,34268,2674],{"class":58},[52,34270,1444],{"class":308},[52,34272,6718],{"class":79},[52,34274,34275],{"class":54,"line":268},[52,34276,34277],{"class":58},"        break\n",[52,34279,34280],{"class":54,"line":280},[52,34281,34282],{"class":94},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[52,34284,34285,34288,34290,34293],{"class":54,"line":286},[52,34286,34287],{"class":79},"batch_x",[52,34289,292],{"class":58},[52,34291,34292],{"class":79},"b_x.squeeze().numpy()  ",[52,34294,34295],{"class":94},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[52,34297,34298,34301,34303,34306],{"class":54,"line":300},[52,34299,34300],{"class":79},"batch_y",[52,34302,292],{"class":58},[52,34304,34305],{"class":79},"b_y.numpy()   ",[52,34307,34308],{"class":94},"#将张量转换成功numpy数组\n",[52,34310,34311,34314,34316,34319],{"class":54,"line":314},[52,34312,34313],{"class":79},"class_label",[52,34315,292],{"class":58},[52,34317,34318],{"class":79},"train_data.classes  ",[52,34320,34321],{"class":94},"#训练集标签\n",[52,34323,34324],{"class":54,"line":327},[52,34325,34326],{"class":94},"# print(class_label)\n",[52,34328,34329],{"class":54,"line":333},[52,34330,123],{"emptyLinePlaceholder":122},[52,34332,34333],{"class":54,"line":360},[52,34334,34335],{"class":94},"# 可视化一个batch的图像\n",[52,34337,34338,34341,34344,34346,34348,34350,34352,34354],{"class":54,"line":365},[52,34339,34340],{"class":79},"plt.figure(",[52,34342,34343],{"class":1223},"figsize",[52,34345,292],{"class":58},[52,34347,1216],{"class":79},[52,34349,3698],{"class":308},[52,34351,389],{"class":79},[52,34353,1805],{"class":308},[52,34355,33147],{"class":79},[52,34357,34358,34360,34363,34365,34368,34370],{"class":54,"line":371},[52,34359,6014],{"class":58},[52,34361,34362],{"class":79}," ii ",[52,34364,28693],{"class":58},[52,34366,34367],{"class":79}," np.arange(",[52,34369,2639],{"class":308},[52,34371,34372],{"class":79},"(batch_y)):\n",[52,34374,34375,34378,34380,34382,34384,34387,34389,34391],{"class":54,"line":400},[52,34376,34377],{"class":79},"    plt.subplot(",[52,34379,3504],{"class":308},[52,34381,389],{"class":79},[52,34383,3798],{"class":308},[52,34385,34386],{"class":79},",ii ",[52,34388,2004],{"class":58},[52,34390,27768],{"class":308},[52,34392,708],{"class":79},[52,34394,34395,34398,34401,34403],{"class":54,"line":405},[52,34396,34397],{"class":79},"    plt.imshow(batch_x[ii,:,:],",[52,34399,34400],{"class":1223},"cmap",[52,34402,292],{"class":58},[52,34404,34405],{"class":79},"plt.cm.gray)\n",[52,34407,34408,34411,34413,34415,34417],{"class":54,"line":411},[52,34409,34410],{"class":79},"    plt.title(class_label[batch_y[ii]],",[52,34412,34146],{"class":1223},[52,34414,292],{"class":58},[52,34416,3649],{"class":308},[52,34418,708],{"class":79},[52,34420,34421,34424,34427],{"class":54,"line":424},[52,34422,34423],{"class":79},"    plt.axis(",[52,34425,34426],{"class":62},"\"off\"",[52,34428,708],{"class":79},[52,34430,34431,34434,34437,34439,34442],{"class":54,"line":436},[52,34432,34433],{"class":79},"    plt.subplots_adjust(",[52,34435,34436],{"class":1223},"wspace",[52,34438,292],{"class":58},[52,34440,34441],{"class":308},"0.05",[52,34443,708],{"class":79},[52,34445,34446],{"class":54,"line":449},[52,34447,34448],{"class":79},"plt.show()\n",[14,34450,34451],{},"用matplotlib进行展示的过程可以后续再补",[14,34453,34454],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,34456,34457],{},"训练次数就是按照批次过整个训练集数据的次数",[14,34459,34460],{},"模型训练：",[42,34462,34464],{"className":33028,"code":34463,"language":33030,"meta":47,"style":47},"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",[49,34465,34466,34473,34480,34484,34496,34502,34513,34523,34533,34543,34553,34558,34570,34580,34584,34588,34593,34604,34617,34628,34645,34656,34695,34711,34723,34734,34739,34750,34766,34777,34788,34799,34806,34810,34815,34820,34824,34829,34839,34860,34864,34868,34873,34878,34883,34903,34907,34912,34922,34926,34931,34940,34945,34950,34955,34965,34969,34973,34978,34983,34993,34998,35008,35013,35022,35027,35036,35041,35050,35054,35059,35069,35073,35077,35082,35097,35125,35140,35144,35149,35154,35163,35168,35177,35182,35191,35196,35205,35210,35219,35224,35233,35238,35251,35256,35266,35271,35281,35287,35293,35299,35305,35316,35322,35342,35348,35359,35365,35371,35377,35383,35389,35395,35401,35421,35427,35443,35449,35463,35469,35484,35490,35499,35505,35514,35520,35526,35535,35541,35552,35558,35577,35583,35594,35600,35620,35636,35642,35656,35662,35668,35679,35685,35691,35701,35707,35718,35724,35734,35739,35745,35794,35841,35846,35852,35871,35877,35897,35903,35909,35919,35924,35930,35946,35991,35997,36003,36009,36020,36026,36032,36038,36056,36070,36079,36088,36097,36106,36112,36118,36126,36131,36137,36148,36154,36174,36180,36186,36192,36209,36215,36221,36227,36233,36239,36266,36290,36296,36302,36308,36319,36330,36336,36353,36376,36399,36405,36410,36419,36429,36435,36440,36446,36459,36465,36476,36487,36506],{"__ignoreMap":47},[52,34467,34468,34470],{"class":54,"line":55},[52,34469,33042],{"class":58},[52,34471,34472],{"class":79}," copy\n",[52,34474,34475,34477],{"class":54,"line":66},[52,34476,33042],{"class":58},[52,34478,34479],{"class":79}," time\n",[52,34481,34482],{"class":54,"line":83},[52,34483,123],{"emptyLinePlaceholder":122},[52,34485,34486,34488,34491,34493],{"class":54,"line":91},[52,34487,33042],{"class":58},[52,34489,34490],{"class":79}," pandas ",[52,34492,34033],{"class":58},[52,34494,34495],{"class":79}," pd\n",[52,34497,34498,34500],{"class":54,"line":98},[52,34499,33042],{"class":58},[52,34501,33045],{"class":79},[52,34503,34504,34506,34508,34510],{"class":54,"line":107},[52,34505,33387],{"class":58},[52,34507,34065],{"class":79},[52,34509,33042],{"class":58},[52,34511,34512],{"class":79}," Dataset\n",[52,34514,34515,34517,34519,34521],{"class":54,"line":113},[52,34516,33387],{"class":58},[52,34518,34018],{"class":79},[52,34520,33042],{"class":58},[52,34522,34023],{"class":79},[52,34524,34525,34527,34529,34531],{"class":54,"line":119},[52,34526,33387],{"class":58},[52,34528,34048],{"class":79},[52,34530,33042],{"class":58},[52,34532,34053],{"class":79},[52,34534,34535,34537,34539,34541],{"class":54,"line":126},[52,34536,33042],{"class":58},[52,34538,34065],{"class":79},[52,34540,34033],{"class":58},[52,34542,34070],{"class":79},[52,34544,34545,34547,34549,34551],{"class":54,"line":132},[52,34546,33042],{"class":58},[52,34548,34082],{"class":79},[52,34550,34033],{"class":58},[52,34552,34087],{"class":79},[52,34554,34555],{"class":54,"line":138},[52,34556,34557],{"class":94},"# 导入模型\n",[52,34559,34560,34562,34565,34567],{"class":54,"line":144},[52,34561,33387],{"class":58},[52,34563,34564],{"class":79}," model ",[52,34566,33042],{"class":58},[52,34568,34569],{"class":79}," LeNet\n",[52,34571,34572,34574,34576,34578],{"class":54,"line":153},[52,34573,33387],{"class":58},[52,34575,33390],{"class":79},[52,34577,33042],{"class":58},[52,34579,33395],{"class":79},[52,34581,34582],{"class":54,"line":159},[52,34583,123],{"emptyLinePlaceholder":122},[52,34585,34586],{"class":54,"line":167},[52,34587,123],{"emptyLinePlaceholder":122},[52,34589,34590],{"class":54,"line":173},[52,34591,34592],{"class":94},"# 处理训练集与验证集函数--->划分数据集\n",[52,34594,34595,34598,34601],{"class":54,"line":181},[52,34596,34597],{"class":58},"def",[52,34599,34600],{"class":75}," train_val_data_process",[52,34602,34603],{"class":79},"():\n",[52,34605,34606,34609,34611,34613,34615],{"class":54,"line":186},[52,34607,34608],{"class":79},"    train_data",[52,34610,292],{"class":58},[52,34612,34105],{"class":79},[52,34614,34113],{"class":62},[52,34616,34116],{"class":79},[52,34618,34619,34622,34624,34626],{"class":54,"line":191},[52,34620,34621],{"class":1223},"                            train",[52,34623,292],{"class":58},[52,34625,34126],{"class":308},[52,34627,34116],{"class":79},[52,34629,34630,34633,34635,34637,34639,34641,34643],{"class":54,"line":196},[52,34631,34632],{"class":1223},"                            transform",[52,34634,292],{"class":58},[52,34636,34143],{"class":79},[52,34638,34146],{"class":1223},[52,34640,292],{"class":58},[52,34642,4090],{"class":308},[52,34644,34154],{"class":79},[52,34646,34647,34650,34652,34654],{"class":54,"line":201},[52,34648,34649],{"class":1223},"                            download",[52,34651,292],{"class":58},[52,34653,34126],{"class":308},[52,34655,708],{"class":79},[52,34657,34658,34661,34663,34666,34669,34671,34674,34676,34678,34681,34683,34685,34688,34690,34692],{"class":54,"line":206},[52,34659,34660],{"class":79},"    train_data,val_data",[52,34662,292],{"class":58},[52,34664,34665],{"class":79},"Data.random_split(train_data,[",[52,34667,34668],{"class":308},"round",[52,34670,1216],{"class":79},[52,34672,34673],{"class":308},"0.8",[52,34675,3053],{"class":58},[52,34677,2639],{"class":308},[52,34679,34680],{"class":79},"(train_data)),",[52,34682,34668],{"class":308},[52,34684,1216],{"class":79},[52,34686,34687],{"class":308},"0.2",[52,34689,3053],{"class":58},[52,34691,2639],{"class":308},[52,34693,34694],{"class":79},"(train_data))])\n",[52,34696,34697,34700,34702,34705,34707,34709],{"class":54,"line":211},[52,34698,34699],{"class":79},"    train_dataloader ",[52,34701,292],{"class":58},[52,34703,34704],{"class":79}," Data.DataLoader(",[52,34706,34187],{"class":1223},[52,34708,292],{"class":58},[52,34710,34192],{"class":79},[52,34712,34713,34716,34718,34721],{"class":54,"line":218},[52,34714,34715],{"class":1223},"                                       batch_size",[52,34717,292],{"class":58},[52,34719,34720],{"class":308},"128",[52,34722,34116],{"class":79},[52,34724,34725,34728,34730,34732],{"class":54,"line":223},[52,34726,34727],{"class":1223},"                                       shuffle",[52,34729,292],{"class":58},[52,34731,34126],{"class":308},[52,34733,34116],{"class":79},[52,34735,34736],{"class":54,"line":230},[52,34737,34738],{"class":94},"                                       # 规定8个进程\n",[52,34740,34741,34744,34746,34748],{"class":54,"line":239},[52,34742,34743],{"class":1223},"                                       num_workers",[52,34745,292],{"class":58},[52,34747,3600],{"class":308},[52,34749,708],{"class":79},[52,34751,34752,34755,34757,34759,34761,34763],{"class":54,"line":251},[52,34753,34754],{"class":79},"    val_dataloader",[52,34756,292],{"class":58},[52,34758,34184],{"class":79},[52,34760,34187],{"class":1223},[52,34762,292],{"class":58},[52,34764,34765],{"class":79},"val_data,\n",[52,34767,34768,34771,34773,34775],{"class":54,"line":256},[52,34769,34770],{"class":1223},"                                   batch_size",[52,34772,292],{"class":58},[52,34774,34720],{"class":308},[52,34776,34116],{"class":79},[52,34778,34779,34782,34784,34786],{"class":54,"line":262},[52,34780,34781],{"class":1223},"                                   shuffle",[52,34783,292],{"class":58},[52,34785,34126],{"class":308},[52,34787,34116],{"class":79},[52,34789,34790,34793,34795,34797],{"class":54,"line":268},[52,34791,34792],{"class":1223},"                                   num_workers",[52,34794,292],{"class":58},[52,34796,3600],{"class":308},[52,34798,708],{"class":79},[52,34800,34801,34803],{"class":54,"line":280},[52,34802,1441],{"class":58},[52,34804,34805],{"class":79}," train_dataloader,val_dataloader\n",[52,34807,34808],{"class":54,"line":286},[52,34809,123],{"emptyLinePlaceholder":122},[52,34811,34812],{"class":54,"line":300},[52,34813,34814],{"class":94},"# 验证是否出错\n",[52,34816,34817],{"class":54,"line":314},[52,34818,34819],{"class":94},"# train_val_data_process()\n",[52,34821,34822],{"class":54,"line":327},[52,34823,123],{"emptyLinePlaceholder":122},[52,34825,34826],{"class":54,"line":333},[52,34827,34828],{"class":94},"# 定义模型训练函数\n",[52,34830,34831,34833,34836],{"class":54,"line":360},[52,34832,34597],{"class":58},[52,34834,34835],{"class":75}," train_model_process",[52,34837,34838],{"class":79},"(model,train_dataloader,val_dataloader,num_epochs):\n",[52,34840,34841,34843,34845,34847,34849,34851,34853,34855,34858],{"class":54,"line":365},[52,34842,33887],{"class":79},[52,34844,292],{"class":58},[52,34846,33101],{"class":79},[52,34848,33894],{"class":62},[52,34850,4736],{"class":58},[52,34852,33899],{"class":79},[52,34854,4733],{"class":58},[52,34856,34857],{"class":62}," 'cpu'",[52,34859,708],{"class":79},[52,34861,34862],{"class":54,"line":371},[52,34863,123],{"emptyLinePlaceholder":122},[52,34865,34866],{"class":54,"line":400},[52,34867,123],{"emptyLinePlaceholder":122},[52,34869,34870],{"class":54,"line":405},[52,34871,34872],{"class":94},"    # 定义优化器\n",[52,34874,34875],{"class":54,"line":411},[52,34876,34877],{"class":94},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[52,34879,34880],{"class":54,"line":424},[52,34881,34882],{"class":94},"    # lr为学习率\n",[52,34884,34885,34888,34890,34893,34896,34898,34901],{"class":54,"line":436},[52,34886,34887],{"class":79},"    optimizer",[52,34889,292],{"class":58},[52,34891,34892],{"class":79},"torch.optim.Adam(model.parameters(),",[52,34894,34895],{"class":1223},"lr",[52,34897,292],{"class":58},[52,34899,34900],{"class":308},"0.001",[52,34902,708],{"class":79},[52,34904,34905],{"class":54,"line":449},[52,34906,123],{"emptyLinePlaceholder":122},[52,34908,34909],{"class":54,"line":2160},[52,34910,34911],{"class":94},"    # 定义损失函数使用交叉熵损失函数\n",[52,34913,34914,34917,34919],{"class":54,"line":2186},[52,34915,34916],{"class":79},"    criterion",[52,34918,292],{"class":58},[52,34920,34921],{"class":79},"nn.CrossEntropyLoss()\n",[52,34923,34924],{"class":54,"line":2209},[52,34925,123],{"emptyLinePlaceholder":122},[52,34927,34928],{"class":54,"line":2233},[52,34929,34930],{"class":94},"    # 将模型放到GPU中进行训练\n",[52,34932,34933,34935,34937],{"class":54,"line":2238},[52,34934,33939],{"class":79},[52,34936,292],{"class":58},[52,34938,34939],{"class":79},"model.to(device)\n",[52,34941,34942],{"class":54,"line":2243},[52,34943,34944],{"class":94},"    # 复制当前模型的参数\n",[52,34946,34947],{"class":54,"line":2248},[52,34948,34949],{"class":94},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[52,34951,34952],{"class":54,"line":2257},[52,34953,34954],{"class":94},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[52,34956,34957,34960,34962],{"class":54,"line":2262},[52,34958,34959],{"class":79},"    best_model_wts",[52,34961,292],{"class":58},[52,34963,34964],{"class":79},"copy.deepcopy(model.state_dict())\n",[52,34966,34967],{"class":54,"line":2268},[52,34968,123],{"emptyLinePlaceholder":122},[52,34970,34971],{"class":54,"line":2297},[52,34972,123],{"emptyLinePlaceholder":122},[52,34974,34975],{"class":54,"line":2303},[52,34976,34977],{"class":94},"    # 初始化参数\n",[52,34979,34980],{"class":54,"line":2318},[52,34981,34982],{"class":94},"    # 最高准确度\n",[52,34984,34985,34988,34990],{"class":54,"line":2324},[52,34986,34987],{"class":79},"    best_acc",[52,34989,292],{"class":58},[52,34991,34992],{"class":308},"0.0\n",[52,34994,34995],{"class":54,"line":2353},[52,34996,34997],{"class":94},"    # 训练集损失列表\n",[52,34999,35000,35003,35005],{"class":54,"line":2362},[52,35001,35002],{"class":79},"    train_loss_all",[52,35004,292],{"class":58},[52,35006,35007],{"class":79},"[]\n",[52,35009,35010],{"class":54,"line":2368},[52,35011,35012],{"class":94},"    # 验证集函数列表\n",[52,35014,35015,35018,35020],{"class":54,"line":2376},[52,35016,35017],{"class":79},"    val_loss_all",[52,35019,292],{"class":58},[52,35021,35007],{"class":79},[52,35023,35024],{"class":54,"line":2381},[52,35025,35026],{"class":94},"    # 训练集准确度列表\n",[52,35028,35029,35032,35034],{"class":54,"line":19252},[52,35030,35031],{"class":79},"    train_acc_all",[52,35033,292],{"class":58},[52,35035,35007],{"class":79},[52,35037,35038],{"class":54,"line":19258},[52,35039,35040],{"class":94},"    # 验证集准确度列表\n",[52,35042,35043,35046,35048],{"class":54,"line":19281},[52,35044,35045],{"class":79},"    val_acc_all",[52,35047,292],{"class":58},[52,35049,35007],{"class":79},[52,35051,35052],{"class":54,"line":19287},[52,35053,123],{"emptyLinePlaceholder":122},[52,35055,35056],{"class":54,"line":19310},[52,35057,35058],{"class":94},"    # 保存当前时间--->方便看每轮训练的时间\n",[52,35060,35061,35064,35066],{"class":54,"line":19324},[52,35062,35063],{"class":79},"    since",[52,35065,292],{"class":58},[52,35067,35068],{"class":79},"time.time()\n",[52,35070,35071],{"class":54,"line":19344},[52,35072,123],{"emptyLinePlaceholder":122},[52,35074,35075],{"class":54,"line":19350},[52,35076,123],{"emptyLinePlaceholder":122},[52,35078,35079],{"class":54,"line":19361},[52,35080,35081],{"class":94},"    # 准备工作完成--->开始训练模型\n",[52,35083,35084,35086,35089,35091,35094],{"class":54,"line":19384},[52,35085,679],{"class":58},[52,35087,35088],{"class":79}," epoch ",[52,35090,28693],{"class":58},[52,35092,35093],{"class":308}," range",[52,35095,35096],{"class":79},"(num_epochs):\n",[52,35098,35099,35102,35104,35107,35110,35112,35114,35116,35119,35121,35123],{"class":54,"line":19406},[52,35100,35101],{"class":308},"        print",[52,35103,1216],{"class":79},[52,35105,35106],{"class":62},"\"Epoch ",[52,35108,35109],{"class":308},"{}",[52,35111,2340],{"class":62},[52,35113,35109],{"class":308},[52,35115,2844],{"class":62},[52,35117,35118],{"class":79},".format(epoch,num_epochs",[52,35120,2642],{"class":58},[52,35122,629],{"class":308},[52,35124,33147],{"class":79},[52,35126,35127,35129,35131,35134,35136,35138],{"class":54,"line":19411},[52,35128,35101],{"class":308},[52,35130,1216],{"class":79},[52,35132,35133],{"class":62},"\"-\"",[52,35135,3053],{"class":58},[52,35137,3649],{"class":308},[52,35139,708],{"class":79},[52,35141,35142],{"class":54,"line":19417},[52,35143,123],{"emptyLinePlaceholder":122},[52,35145,35146],{"class":54,"line":19431},[52,35147,35148],{"class":94},"        # 初始化参数\n",[52,35150,35151],{"class":54,"line":19444},[52,35152,35153],{"class":94},"        # 训练集损失函数\n",[52,35155,35156,35159,35161],{"class":54,"line":19449},[52,35157,35158],{"class":79},"        train_loss",[52,35160,292],{"class":58},[52,35162,34992],{"class":308},[52,35164,35165],{"class":54,"line":19463},[52,35166,35167],{"class":94},"        # 训练集准确度\n",[52,35169,35170,35173,35175],{"class":54,"line":19468},[52,35171,35172],{"class":79},"        train_corrects",[52,35174,292],{"class":58},[52,35176,6072],{"class":308},[52,35178,35179],{"class":54,"line":19474},[52,35180,35181],{"class":94},"        # 验证集损失函数\n",[52,35183,35184,35187,35189],{"class":54,"line":19479},[52,35185,35186],{"class":79},"        val_loss",[52,35188,292],{"class":58},[52,35190,34992],{"class":308},[52,35192,35193],{"class":54,"line":19493},[52,35194,35195],{"class":94},"        # 验证集准确度\n",[52,35197,35198,35201,35203],{"class":54,"line":19498},[52,35199,35200],{"class":79},"        val_corrects",[52,35202,292],{"class":58},[52,35204,6072],{"class":308},[52,35206,35207],{"class":54,"line":19503},[52,35208,35209],{"class":94},"        # 训练集样本数量\n",[52,35211,35212,35215,35217],{"class":54,"line":19517},[52,35213,35214],{"class":79},"        train_num",[52,35216,292],{"class":58},[52,35218,6072],{"class":308},[52,35220,35221],{"class":54,"line":19529},[52,35222,35223],{"class":94},"        # 验证集样本数量\n",[52,35225,35226,35229,35231],{"class":54,"line":19534},[52,35227,35228],{"class":79},"        val_num",[52,35230,292],{"class":58},[52,35232,6072],{"class":308},[52,35234,35235],{"class":54,"line":19547},[52,35236,35237],{"class":94},"        # 将数据放到设备,并开始训练\n",[52,35239,35240,35242,35244,35246,35248],{"class":54,"line":19552},[52,35241,1927],{"class":58},[52,35243,34251],{"class":79},[52,35245,28693],{"class":58},[52,35247,34256],{"class":308},[52,35249,35250],{"class":79},"(train_dataloader):\n",[52,35252,35253],{"class":54,"line":19557},[52,35254,35255],{"class":94},"            # 将特征放入到训练设备\n",[52,35257,35258,35261,35263],{"class":54,"line":19562},[52,35259,35260],{"class":79},"            b_x",[52,35262,292],{"class":58},[52,35264,35265],{"class":79},"b_x.to(device)\n",[52,35267,35268],{"class":54,"line":19575},[52,35269,35270],{"class":94},"            # 将标签放入到训练设备当中\n",[52,35272,35273,35276,35278],{"class":54,"line":19580},[52,35274,35275],{"class":79},"            b_y",[52,35277,292],{"class":58},[52,35279,35280],{"class":79},"b_y.to(device)\n",[52,35282,35284],{"class":54,"line":35283},98,[52,35285,35286],{"class":94},"            # 设置模型为训练模式\n",[52,35288,35290],{"class":54,"line":35289},99,[52,35291,35292],{"class":79},"            model.train()\n",[52,35294,35296],{"class":54,"line":35295},100,[52,35297,35298],{"class":94},"            # 将数据放到模型当中,开始前向传播\n",[52,35300,35302],{"class":54,"line":35301},101,[52,35303,35304],{"class":94},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[52,35306,35308,35311,35313],{"class":54,"line":35307},102,[52,35309,35310],{"class":79},"            output",[52,35312,292],{"class":58},[52,35314,35315],{"class":79},"model(b_x)\n",[52,35317,35319],{"class":54,"line":35318},103,[52,35320,35321],{"class":94},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[52,35323,35325,35328,35330,35333,35336,35338,35340],{"class":54,"line":35324},104,[52,35326,35327],{"class":79},"            pre_lab",[52,35329,292],{"class":58},[52,35331,35332],{"class":79},"torch.argmax(output,",[52,35334,35335],{"class":1223},"dim",[52,35337,292],{"class":58},[52,35339,629],{"class":308},[52,35341,708],{"class":79},[52,35343,35345],{"class":54,"line":35344},105,[52,35346,35347],{"class":94},"            # 计算每一个batch的损失函数\n",[52,35349,35351,35354,35356],{"class":54,"line":35350},106,[52,35352,35353],{"class":79},"            loss",[52,35355,292],{"class":58},[52,35357,35358],{"class":79},"criterion(output,b_y)\n",[52,35360,35362],{"class":54,"line":35361},107,[52,35363,35364],{"class":94},"            # 将梯度初始化为0\n",[52,35366,35368],{"class":54,"line":35367},108,[52,35369,35370],{"class":79},"            optimizer.zero_grad()\n",[52,35372,35374],{"class":54,"line":35373},109,[52,35375,35376],{"class":94},"            # 梯度置为0后再进行反向传播\n",[52,35378,35380],{"class":54,"line":35379},110,[52,35381,35382],{"class":79},"            loss.backward()\n",[52,35384,35386],{"class":54,"line":35385},111,[52,35387,35388],{"class":94},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[52,35390,35392],{"class":54,"line":35391},112,[52,35393,35394],{"class":79},"            optimizer.step()\n",[52,35396,35398],{"class":54,"line":35397},113,[52,35399,35400],{"class":94},"            # loss.item()指的是batch的平均损失\n",[52,35402,35404,35407,35409,35412,35414,35417,35419],{"class":54,"line":35403},114,[52,35405,35406],{"class":79},"            train_loss",[52,35408,1910],{"class":58},[52,35410,35411],{"class":79},"loss.item()",[52,35413,3053],{"class":58},[52,35415,35416],{"class":79},"b_x.size(",[52,35418,692],{"class":308},[52,35420,708],{"class":79},[52,35422,35424],{"class":54,"line":35423},115,[52,35425,35426],{"class":94},"            # 计算每个批次中正确预测的数量\n",[52,35428,35430,35433,35435,35438,35440],{"class":54,"line":35429},116,[52,35431,35432],{"class":79},"            train_corrects",[52,35434,1910],{"class":58},[52,35436,35437],{"class":79},"torch.sum(pre_lab",[52,35439,5938],{"class":58},[52,35441,35442],{"class":79},"b_y.data)\n",[52,35444,35446],{"class":54,"line":35445},117,[52,35447,35448],{"class":94},"            # 计算目前为止一共处理了多少样本\n",[52,35450,35452,35455,35457,35459,35461],{"class":54,"line":35451},118,[52,35453,35454],{"class":79},"            train_num",[52,35456,1910],{"class":58},[52,35458,35416],{"class":79},[52,35460,692],{"class":308},[52,35462,708],{"class":79},[52,35464,35466],{"class":54,"line":35465},119,[52,35467,35468],{"class":94},"        # 验证数据\n",[52,35470,35472,35474,35477,35479,35481],{"class":54,"line":35471},120,[52,35473,1927],{"class":58},[52,35475,35476],{"class":79}," step ,(b_x,b_y) ",[52,35478,28693],{"class":58},[52,35480,34256],{"class":308},[52,35482,35483],{"class":79},"(val_dataloader):\n",[52,35485,35487],{"class":54,"line":35486},121,[52,35488,35489],{"class":94},"            # 将特征放到验证设备当中\n",[52,35491,35493,35495,35497],{"class":54,"line":35492},122,[52,35494,35260],{"class":79},[52,35496,292],{"class":58},[52,35498,35265],{"class":79},[52,35500,35502],{"class":54,"line":35501},123,[52,35503,35504],{"class":94},"            # 将标签放到放到训练设备当中\n",[52,35506,35508,35510,35512],{"class":54,"line":35507},124,[52,35509,35275],{"class":79},[52,35511,292],{"class":58},[52,35513,35280],{"class":79},[52,35515,35517],{"class":54,"line":35516},125,[52,35518,35519],{"class":94},"            # 开启验证模式，设置模型为评估模式\n",[52,35521,35523],{"class":54,"line":35522},126,[52,35524,35525],{"class":79},"            model.eval()\n",[52,35527,35529,35532],{"class":54,"line":35528},127,[52,35530,35531],{"class":58},"            with",[52,35533,35534],{"class":79}," torch.no_grad():\n",[52,35536,35538],{"class":54,"line":35537},128,[52,35539,35540],{"class":94},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[52,35542,35544,35547,35549],{"class":54,"line":35543},129,[52,35545,35546],{"class":79},"                output ",[52,35548,292],{"class":58},[52,35550,35551],{"class":79}," model(b_x)\n",[52,35553,35555],{"class":54,"line":35554},130,[52,35556,35557],{"class":94},"                # 查找每一行中最大值对应的下标\n",[52,35559,35561,35564,35566,35569,35571,35573,35575],{"class":54,"line":35560},131,[52,35562,35563],{"class":79},"                pre_lab ",[52,35565,292],{"class":58},[52,35567,35568],{"class":79}," torch.argmax(output, ",[52,35570,35335],{"class":1223},[52,35572,292],{"class":58},[52,35574,629],{"class":308},[52,35576,708],{"class":79},[52,35578,35580],{"class":54,"line":35579},132,[52,35581,35582],{"class":94},"                # 计算验证集上的当前 batch 损失\n",[52,35584,35586,35589,35591],{"class":54,"line":35585},133,[52,35587,35588],{"class":79},"                val_batch_loss ",[52,35590,292],{"class":58},[52,35592,35593],{"class":79}," criterion(output, b_y)\n",[52,35595,35597],{"class":54,"line":35596},134,[52,35598,35599],{"class":94},"                # 对损失函数进行累加（按样本数加权）\n",[52,35601,35603,35606,35608,35611,35613,35616,35618],{"class":54,"line":35602},135,[52,35604,35605],{"class":79},"                val_loss ",[52,35607,1910],{"class":58},[52,35609,35610],{"class":79}," val_batch_loss.item() ",[52,35612,3053],{"class":58},[52,35614,35615],{"class":79}," b_x.size(",[52,35617,692],{"class":308},[52,35619,708],{"class":79},[52,35621,35623,35626,35628,35631,35633],{"class":54,"line":35622},136,[52,35624,35625],{"class":79},"                val_corrects ",[52,35627,1910],{"class":58},[52,35629,35630],{"class":79}," torch.sum(pre_lab ",[52,35632,5938],{"class":58},[52,35634,35635],{"class":79}," b_y.data)\n",[52,35637,35639],{"class":54,"line":35638},137,[52,35640,35641],{"class":94},"                # 当前用于验证的样本数量\n",[52,35643,35645,35648,35650,35652,35654],{"class":54,"line":35644},138,[52,35646,35647],{"class":79},"            val_num ",[52,35649,1910],{"class":58},[52,35651,35615],{"class":79},[52,35653,692],{"class":308},[52,35655,708],{"class":79},[52,35657,35659],{"class":54,"line":35658},139,[52,35660,35661],{"class":94},"        # 计算并保存每一次迭代的loss值和准确率\n",[52,35663,35665],{"class":54,"line":35664},140,[52,35666,35667],{"class":94},"        # 计算并保存训练集的loss值\n",[52,35669,35671,35674,35676],{"class":54,"line":35670},141,[52,35672,35673],{"class":79},"        train_loss_all.append(train_loss",[52,35675,2340],{"class":58},[52,35677,35678],{"class":79},"train_num)\n",[52,35680,35682],{"class":54,"line":35681},142,[52,35683,35684],{"class":94},"        # 取双精度\n",[52,35686,35688],{"class":54,"line":35687},143,[52,35689,35690],{"class":94},"        # 计算并保存训练集的准确率\n",[52,35692,35694,35697,35699],{"class":54,"line":35693},144,[52,35695,35696],{"class":79},"        train_acc_all.append(train_corrects.double().item()",[52,35698,2340],{"class":58},[52,35700,35678],{"class":79},[52,35702,35704],{"class":54,"line":35703},145,[52,35705,35706],{"class":94},"        # 计算并保存验证集的loss值\n",[52,35708,35710,35713,35715],{"class":54,"line":35709},146,[52,35711,35712],{"class":79},"        val_loss_all.append(val_loss",[52,35714,2340],{"class":58},[52,35716,35717],{"class":79},"val_num)\n",[52,35719,35721],{"class":54,"line":35720},147,[52,35722,35723],{"class":94},"        # 计算并保存验证集的准确率\n",[52,35725,35727,35730,35732],{"class":54,"line":35726},148,[52,35728,35729],{"class":79},"        val_acc_all.append(val_corrects.double().item()",[52,35731,2340],{"class":58},[52,35733,35717],{"class":79},[52,35735,35737],{"class":54,"line":35736},149,[52,35738,123],{"emptyLinePlaceholder":122},[52,35740,35742],{"class":54,"line":35741},150,[52,35743,35744],{"class":94},"        # 打印训练一轮的loss值和准确率\n",[52,35746,35748,35750,35752,35754,35756,35759,35761,35764,35766,35769,35771,35773,35775,35777,35780,35782,35784,35787,35789,35791],{"class":54,"line":35747},151,[52,35749,35101],{"class":308},[52,35751,1216],{"class":79},[52,35753,6573],{"class":62},[52,35755,35109],{"class":308},[52,35757,35758],{"class":62},"train loss:",[52,35760,383],{"class":308},[52,35762,35763],{"class":58},":.4f",[52,35765,4132],{"class":308},[52,35767,35768],{"class":62}," train acc:",[52,35770,383],{"class":308},[52,35772,35763],{"class":58},[52,35774,4132],{"class":308},[52,35776,6573],{"class":62},[52,35778,35779],{"class":79},".format(epoch,train_loss_all[",[52,35781,2642],{"class":58},[52,35783,629],{"class":308},[52,35785,35786],{"class":79},"],train_acc_all[",[52,35788,2642],{"class":58},[52,35790,629],{"class":308},[52,35792,35793],{"class":79},"]))\n",[52,35795,35797,35799,35801,35803,35805,35808,35810,35812,35814,35817,35819,35821,35823,35825,35828,35830,35832,35835,35837,35839],{"class":54,"line":35796},152,[52,35798,35101],{"class":308},[52,35800,1216],{"class":79},[52,35802,6573],{"class":62},[52,35804,35109],{"class":308},[52,35806,35807],{"class":62},"val loss:",[52,35809,383],{"class":308},[52,35811,35763],{"class":58},[52,35813,4132],{"class":308},[52,35815,35816],{"class":62}," val acc:",[52,35818,383],{"class":308},[52,35820,35763],{"class":58},[52,35822,4132],{"class":308},[52,35824,6573],{"class":62},[52,35826,35827],{"class":79},".format(epoch,val_loss_all[",[52,35829,2642],{"class":58},[52,35831,629],{"class":308},[52,35833,35834],{"class":79},"],val_acc_all[",[52,35836,2642],{"class":58},[52,35838,629],{"class":308},[52,35840,35793],{"class":79},[52,35842,35844],{"class":54,"line":35843},153,[52,35845,123],{"emptyLinePlaceholder":122},[52,35847,35849],{"class":54,"line":35848},154,[52,35850,35851],{"class":94},"        # 判断准确度--->保存最优模型\n",[52,35853,35855,35857,35860,35862,35864,35866,35868],{"class":54,"line":35854},155,[52,35856,5497],{"class":58},[52,35858,35859],{"class":79}," val_acc_all[",[52,35861,2642],{"class":58},[52,35863,629],{"class":308},[52,35865,567],{"class":79},[52,35867,2674],{"class":58},[52,35869,35870],{"class":79},"best_acc:\n",[52,35872,35874],{"class":54,"line":35873},156,[52,35875,35876],{"class":94},"            # 保存当前模型准确度\n",[52,35878,35880,35883,35885,35887,35890,35892,35894],{"class":54,"line":35879},157,[52,35881,35882],{"class":79},"            best_acc:",[52,35884,3262],{"class":308},[52,35886,292],{"class":58},[52,35888,35889],{"class":79},"val_acc_all[",[52,35891,2642],{"class":58},[52,35893,629],{"class":308},[52,35895,35896],{"class":79},"]\n",[52,35898,35900],{"class":54,"line":35899},158,[52,35901,35902],{"class":94},"            # 保存当前的准确度\n",[52,35904,35906],{"class":54,"line":35905},159,[52,35907,35908],{"class":94},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[52,35910,35912,35915,35917],{"class":54,"line":35911},160,[52,35913,35914],{"class":79},"            best_model_wts",[52,35916,292],{"class":58},[52,35918,34964],{"class":79},[52,35920,35922],{"class":54,"line":35921},161,[52,35923,123],{"emptyLinePlaceholder":122},[52,35925,35927],{"class":54,"line":35926},162,[52,35928,35929],{"class":94},"        # 计算耗时\n",[52,35931,35933,35936,35938,35941,35943],{"class":54,"line":35932},163,[52,35934,35935],{"class":79},"        time_use",[52,35937,292],{"class":58},[52,35939,35940],{"class":79},"time.time()",[52,35942,2642],{"class":58},[52,35944,35945],{"class":79},"since\n",[52,35947,35949,35951,35953,35956,35958,35961,35963,35965,35967,35969,35971,35974,35977,35980,35982,35985,35987,35989],{"class":54,"line":35948},164,[52,35950,35101],{"class":308},[52,35952,1216],{"class":79},[52,35954,35955],{"class":62},"'训练和验证耗费的时间",[52,35957,383],{"class":308},[52,35959,35960],{"class":58},":.0f",[52,35962,4132],{"class":308},[52,35964,3743],{"class":62},[52,35966,383],{"class":308},[52,35968,35960],{"class":58},[52,35970,4132],{"class":308},[52,35972,35973],{"class":62},"s'",[52,35975,35976],{"class":79},".format(time_use",[52,35978,35979],{"class":58},"\u002F\u002F",[52,35981,2001],{"class":308},[52,35983,35984],{"class":79},",time_use",[52,35986,1998],{"class":58},[52,35988,2001],{"class":308},[52,35990,33147],{"class":79},[52,35992,35994],{"class":54,"line":35993},165,[52,35995,35996],{"class":94},"    # 选择最优参数\n",[52,35998,36000],{"class":54,"line":35999},166,[52,36001,36002],{"class":94},"    # 加载最高准确率下的模型参数\n",[52,36004,36006],{"class":54,"line":36005},167,[52,36007,36008],{"class":94},"    # model.load_state_dict(best_model_wts)\n",[52,36010,36012,36015,36018],{"class":54,"line":36011},168,[52,36013,36014],{"class":79},"    torch.save(model.state_dict(best_model_wts), ",[52,36016,36017],{"class":62},"'.\u002Fbest_model.pth'",[52,36019,708],{"class":79},[52,36021,36023],{"class":54,"line":36022},169,[52,36024,36025],{"class":94},"    # 或者写成\n",[52,36027,36029],{"class":54,"line":36028},170,[52,36030,36031],{"class":94},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[52,36033,36035],{"class":54,"line":36034},171,[52,36036,36037],{"class":94},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[52,36039,36041,36044,36046,36049,36052,36054],{"class":54,"line":36040},172,[52,36042,36043],{"class":79},"    train_process",[52,36045,292],{"class":58},[52,36047,36048],{"class":79},"pd.DataFrame(",[52,36050,36051],{"class":1223},"data",[52,36053,292],{"class":58},[52,36055,110],{"class":79},[52,36057,36059,36062,36064,36067],{"class":54,"line":36058},173,[52,36060,36061],{"class":62},"        \"epoch\"",[52,36063,4049],{"class":79},[52,36065,36066],{"class":308},"range",[52,36068,36069],{"class":79},"(num_epochs),\n",[52,36071,36073,36076],{"class":54,"line":36072},174,[52,36074,36075],{"class":62},"        \"train_loss_all\"",[52,36077,36078],{"class":79},":train_loss_all,\n",[52,36080,36082,36085],{"class":54,"line":36081},175,[52,36083,36084],{"class":62},"        \"val_loss_all\"",[52,36086,36087],{"class":79},":val_loss_all,\n",[52,36089,36091,36094],{"class":54,"line":36090},176,[52,36092,36093],{"class":62},"        \"train_acc_all\"",[52,36095,36096],{"class":79},":train_acc_all,\n",[52,36098,36100,36103],{"class":54,"line":36099},177,[52,36101,36102],{"class":62},"        \"val_acc_all\"",[52,36104,36105],{"class":79},":val_acc_all\n",[52,36107,36109],{"class":54,"line":36108},178,[52,36110,36111],{"class":79},"    })\n",[52,36113,36115],{"class":54,"line":36114},179,[52,36116,36117],{"class":94},"    # 返回训练保存的过程\n",[52,36119,36121,36123],{"class":54,"line":36120},180,[52,36122,1441],{"class":58},[52,36124,36125],{"class":79}," train_process\n",[52,36127,36129],{"class":54,"line":36128},181,[52,36130,123],{"emptyLinePlaceholder":122},[52,36132,36134],{"class":54,"line":36133},182,[52,36135,36136],{"class":94},"# 将loss值和精度按照图片的形式展示出来\n",[52,36138,36140,36142,36145],{"class":54,"line":36139},183,[52,36141,34597],{"class":58},[52,36143,36144],{"class":75}," matplot_acc_loss",[52,36146,36147],{"class":79},"(train_process):\n",[52,36149,36151],{"class":54,"line":36150},184,[52,36152,36153],{"class":94},"    # 设置图的大小\n",[52,36155,36157,36160,36162,36164,36166,36168,36170,36172],{"class":54,"line":36156},185,[52,36158,36159],{"class":79},"    plt.figure(",[52,36161,34343],{"class":1223},[52,36163,292],{"class":58},[52,36165,1216],{"class":79},[52,36167,3698],{"class":308},[52,36169,389],{"class":79},[52,36171,3504],{"class":308},[52,36173,33147],{"class":79},[52,36175,36177],{"class":54,"line":36176},186,[52,36178,36179],{"class":94},"    # 设置图中有几张图\n",[52,36181,36183],{"class":54,"line":36182},187,[52,36184,36185],{"class":94},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[52,36187,36189],{"class":54,"line":36188},188,[52,36190,36191],{"class":94},"    # ①loss图\n",[52,36193,36195,36197,36199,36201,36203,36205,36207],{"class":54,"line":36194},189,[52,36196,34377],{"class":79},[52,36198,629],{"class":308},[52,36200,389],{"class":79},[52,36202,564],{"class":308},[52,36204,389],{"class":79},[52,36206,629],{"class":308},[52,36208,708],{"class":79},[52,36210,36212],{"class":54,"line":36211},190,[52,36213,36214],{"class":94},"    # 补充:\n",[52,36216,36218],{"class":54,"line":36217},191,[52,36219,36220],{"class":94},"    # plt.subplot(nrows, ncols, index)\n",[52,36222,36224],{"class":54,"line":36223},192,[52,36225,36226],{"class":94},"    # nrows：行数\n",[52,36228,36230],{"class":54,"line":36229},193,[52,36231,36232],{"class":94},"    # ncols：列数\n",[52,36234,36236],{"class":54,"line":36235},194,[52,36237,36238],{"class":94},"    # index：目前选中第几个子图（从1开始）\n",[52,36240,36242,36245,36248,36251,36254,36256,36259,36261,36264],{"class":54,"line":36241},195,[52,36243,36244],{"class":79},"    plt.plot(train_process[",[52,36246,36247],{"class":62},"\"epoch\"",[52,36249,36250],{"class":79},"],train_process.train_loss_all,",[52,36252,36253],{"class":62},"'ro-'",[52,36255,389],{"class":79},[52,36257,36258],{"class":1223},"label",[52,36260,292],{"class":58},[52,36262,36263],{"class":62},"'train loss'",[52,36265,708],{"class":79},[52,36267,36269,36271,36273,36276,36279,36281,36283,36285,36288],{"class":54,"line":36268},196,[52,36270,36244],{"class":79},[52,36272,36247],{"class":62},[52,36274,36275],{"class":79},"],train_process.val_loss_all,",[52,36277,36278],{"class":62},"'bs--'",[52,36280,389],{"class":79},[52,36282,36258],{"class":1223},[52,36284,292],{"class":58},[52,36286,36287],{"class":62},"'val loss'",[52,36289,708],{"class":79},[52,36291,36293],{"class":54,"line":36292},197,[52,36294,36295],{"class":94},"    # 添加一个图例\n",[52,36297,36299],{"class":54,"line":36298},198,[52,36300,36301],{"class":79},"    plt.legend()\n",[52,36303,36305],{"class":54,"line":36304},199,[52,36306,36307],{"class":94},"    # 给轴添加标签\n",[52,36309,36311,36314,36317],{"class":54,"line":36310},200,[52,36312,36313],{"class":79},"    plt.xlabel(",[52,36315,36316],{"class":62},"'epoch'",[52,36318,708],{"class":79},[52,36320,36322,36325,36328],{"class":54,"line":36321},201,[52,36323,36324],{"class":79},"    plt.ylabel(",[52,36326,36327],{"class":62},"'loss'",[52,36329,708],{"class":79},[52,36331,36333],{"class":54,"line":36332},202,[52,36334,36335],{"class":94},"    # ②准确度图\n",[52,36337,36339,36341,36343,36345,36347,36349,36351],{"class":54,"line":36338},203,[52,36340,34377],{"class":79},[52,36342,629],{"class":308},[52,36344,389],{"class":79},[52,36346,564],{"class":308},[52,36348,389],{"class":79},[52,36350,564],{"class":308},[52,36352,708],{"class":79},[52,36354,36356,36358,36360,36363,36365,36367,36369,36371,36374],{"class":54,"line":36355},204,[52,36357,36244],{"class":79},[52,36359,36247],{"class":62},[52,36361,36362],{"class":79},"],train_process.train_acc_all,",[52,36364,36253],{"class":62},[52,36366,389],{"class":79},[52,36368,36258],{"class":1223},[52,36370,292],{"class":58},[52,36372,36373],{"class":62},"'train acc'",[52,36375,708],{"class":79},[52,36377,36379,36381,36383,36386,36388,36390,36392,36394,36397],{"class":54,"line":36378},205,[52,36380,36244],{"class":79},[52,36382,36247],{"class":62},[52,36384,36385],{"class":79},"],train_process.val_acc_all,",[52,36387,36278],{"class":62},[52,36389,389],{"class":79},[52,36391,36258],{"class":1223},[52,36393,292],{"class":58},[52,36395,36396],{"class":62},"'val acc'",[52,36398,708],{"class":79},[52,36400,36402],{"class":54,"line":36401},206,[52,36403,36404],{"class":94},"    # 添加图例\n",[52,36406,36408],{"class":54,"line":36407},207,[52,36409,36301],{"class":79},[52,36411,36413,36415,36417],{"class":54,"line":36412},208,[52,36414,36313],{"class":79},[52,36416,36247],{"class":62},[52,36418,708],{"class":79},[52,36420,36422,36424,36427],{"class":54,"line":36421},209,[52,36423,36324],{"class":79},[52,36425,36426],{"class":62},"\"acc\"",[52,36428,708],{"class":79},[52,36430,36432],{"class":54,"line":36431},210,[52,36433,36434],{"class":79},"    plt.show()\n",[52,36436,36438],{"class":54,"line":36437},211,[52,36439,123],{"emptyLinePlaceholder":122},[52,36441,36443],{"class":54,"line":36442},212,[52,36444,36445],{"class":94},"# 正式开始训练:\n",[52,36447,36449,36451,36453,36455,36457],{"class":54,"line":36448},213,[52,36450,4578],{"class":58},[52,36452,33870],{"class":308},[52,36454,5938],{"class":58},[52,36456,33875],{"class":62},[52,36458,6718],{"class":79},[52,36460,36462],{"class":54,"line":36461},214,[52,36463,36464],{"class":94},"    # 将模型实例化\n",[52,36466,36468,36471,36473],{"class":54,"line":36467},215,[52,36469,36470],{"class":79},"    LeNet",[52,36472,292],{"class":58},[52,36474,36475],{"class":79},"LeNet()\n",[52,36477,36479,36482,36484],{"class":54,"line":36478},216,[52,36480,36481],{"class":79},"    train_dataloader,val_dataloader",[52,36483,292],{"class":58},[52,36485,36486],{"class":79},"train_val_data_process()\n",[52,36488,36490,36492,36494,36497,36500,36502,36504],{"class":54,"line":36489},217,[52,36491,36043],{"class":79},[52,36493,292],{"class":58},[52,36495,36496],{"class":79},"train_model_process(LeNet,train_dataloader,val_dataloader,",[52,36498,36499],{"class":1223},"num_epochs",[52,36501,292],{"class":58},[52,36503,444],{"class":308},[52,36505,708],{"class":79},[52,36507,36509],{"class":54,"line":36508},218,[52,36510,36511],{"class":79},"    matplot_acc_loss(train_process)\n",[14,36513,36514],{},"画图的补充点学习：",[14,36516,36517],{},[4509,36518],{"alt":47,"src":36519},"\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",[1696,36521,36522],{"start":83},[32,36523,36524],{},"测试",[42,36526,36528],{"className":33028,"code":36527,"language":33030,"meta":47,"style":47},"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",[49,36529,36530,36536,36546,36558,36568,36573,36583,36593,36597,36602,36611,36628,36640,36657,36668,36684,36689,36700,36711,36722,36729,36733,36738,36748,36753,36770,36778,36782,36787,36796,36805,36809,36814,36819,36824,36831,36836,36848,36858,36868,36873,36877,36882,36891,36896,36912,36917,36922,36927,36941,36946,36960,36964,36969,36984,36989,37001,37005,37010,37022,37027,37035,37040,37045,37055,37060,37069,37074,37079,37083,37088,37093,37109,37117,37122,37127,37186,37192,37197,37208,37216,37224,37228,37233,37237,37242,37250,37255,37271,37276,37286,37296],{"__ignoreMap":47},[52,36531,36532,36534],{"class":54,"line":55},[52,36533,33042],{"class":58},[52,36535,33045],{"class":79},[52,36537,36538,36540,36542,36544],{"class":54,"line":66},[52,36539,33042],{"class":58},[52,36541,34065],{"class":79},[52,36543,34033],{"class":58},[52,36545,34070],{"class":79},[52,36547,36548,36550,36553,36555],{"class":54,"line":83},[52,36549,33387],{"class":58},[52,36551,36552],{"class":79}," jupyter_client.consoleapp ",[52,36554,33042],{"class":58},[52,36556,36557],{"class":79}," classes\n",[52,36559,36560,36562,36564,36566],{"class":54,"line":91},[52,36561,33387],{"class":58},[52,36563,34048],{"class":79},[52,36565,33042],{"class":58},[52,36567,34053],{"class":79},[52,36569,36570],{"class":54,"line":98},[52,36571,36572],{"class":94},"# 导入数据集\n",[52,36574,36575,36577,36579,36581],{"class":54,"line":107},[52,36576,33387],{"class":58},[52,36578,34018],{"class":79},[52,36580,33042],{"class":58},[52,36582,34023],{"class":79},[52,36584,36585,36587,36589,36591],{"class":54,"line":113},[52,36586,33387],{"class":58},[52,36588,34564],{"class":79},[52,36590,33042],{"class":58},[52,36592,34569],{"class":79},[52,36594,36595],{"class":54,"line":119},[52,36596,123],{"emptyLinePlaceholder":122},[52,36598,36599],{"class":54,"line":126},[52,36600,36601],{"class":94},"# 测试数据处理\n",[52,36603,36604,36606,36609],{"class":54,"line":132},[52,36605,34597],{"class":58},[52,36607,36608],{"class":75}," test_data_process",[52,36610,34603],{"class":79},[52,36612,36613,36616,36618,36620,36622,36624,36626],{"class":54,"line":138},[52,36614,36615],{"class":79},"    test_data",[52,36617,292],{"class":58},[52,36619,34105],{"class":79},[52,36621,34108],{"class":1223},[52,36623,292],{"class":58},[52,36625,34113],{"class":62},[52,36627,34116],{"class":79},[52,36629,36630,36633,36635,36638],{"class":54,"line":144},[52,36631,36632],{"class":1223},"                           train",[52,36634,292],{"class":58},[52,36636,36637],{"class":308},"False",[52,36639,34116],{"class":79},[52,36641,36642,36645,36647,36649,36651,36653,36655],{"class":54,"line":153},[52,36643,36644],{"class":1223},"                           transform",[52,36646,292],{"class":58},[52,36648,34143],{"class":79},[52,36650,34146],{"class":1223},[52,36652,292],{"class":58},[52,36654,4090],{"class":308},[52,36656,34154],{"class":79},[52,36658,36659,36662,36664,36666],{"class":54,"line":159},[52,36660,36661],{"class":1223},"                           download",[52,36663,292],{"class":58},[52,36665,34126],{"class":308},[52,36667,708],{"class":79},[52,36669,36670,36673,36675,36677,36679,36681],{"class":54,"line":167},[52,36671,36672],{"class":79},"    test_dataloader",[52,36674,292],{"class":58},[52,36676,34184],{"class":79},[52,36678,34187],{"class":1223},[52,36680,292],{"class":58},[52,36682,36683],{"class":79},"test_data,\n",[52,36685,36686],{"class":54,"line":173},[52,36687,36688],{"class":94},"                                    # 这里是一张一张进行测试\n",[52,36690,36691,36694,36696,36698],{"class":54,"line":181},[52,36692,36693],{"class":1223},"                                    batch_size",[52,36695,292],{"class":58},[52,36697,629],{"class":308},[52,36699,34116],{"class":79},[52,36701,36702,36705,36707,36709],{"class":54,"line":186},[52,36703,36704],{"class":1223},"                                    shuffle",[52,36706,292],{"class":58},[52,36708,34126],{"class":308},[52,36710,34116],{"class":79},[52,36712,36713,36716,36718,36720],{"class":54,"line":191},[52,36714,36715],{"class":1223},"                                    num_workers",[52,36717,292],{"class":58},[52,36719,692],{"class":308},[52,36721,708],{"class":79},[52,36723,36724,36726],{"class":54,"line":196},[52,36725,1441],{"class":58},[52,36727,36728],{"class":79}," test_dataloader\n",[52,36730,36731],{"class":54,"line":201},[52,36732,123],{"emptyLinePlaceholder":122},[52,36734,36735],{"class":54,"line":206},[52,36736,36737],{"class":94},"# 定义模型测试函数\n",[52,36739,36740,36742,36745],{"class":54,"line":211},[52,36741,34597],{"class":58},[52,36743,36744],{"class":75}," test_model_process",[52,36746,36747],{"class":79},"(model,test_dataloader):\n",[52,36749,36750],{"class":54,"line":218},[52,36751,36752],{"class":94},"    # 将模型放到设备当中，先进行判断\n",[52,36754,36755,36757,36759,36761,36763,36765,36767],{"class":54,"line":223},[52,36756,33887],{"class":79},[52,36758,292],{"class":58},[52,36760,33894],{"class":62},[52,36762,4736],{"class":58},[52,36764,33899],{"class":79},[52,36766,4733],{"class":58},[52,36768,36769],{"class":62}," \"cpu\"\n",[52,36771,36772,36774,36776],{"class":54,"line":230},[52,36773,33939],{"class":79},[52,36775,292],{"class":58},[52,36777,34939],{"class":79},[52,36779,36780],{"class":54,"line":239},[52,36781,123],{"emptyLinePlaceholder":122},[52,36783,36784],{"class":54,"line":251},[52,36785,36786],{"class":94},"    # 设置初始化参数\n",[52,36788,36789,36792,36794],{"class":54,"line":256},[52,36790,36791],{"class":79},"    test_corrects",[52,36793,292],{"class":58},[52,36795,34992],{"class":308},[52,36797,36798,36801,36803],{"class":54,"line":262},[52,36799,36800],{"class":79},"    test_num",[52,36802,292],{"class":58},[52,36804,6072],{"class":308},[52,36806,36807],{"class":54,"line":268},[52,36808,123],{"emptyLinePlaceholder":122},[52,36810,36811],{"class":54,"line":280},[52,36812,36813],{"class":94},"    # 进行模型测试\n",[52,36815,36816],{"class":54,"line":286},[52,36817,36818],{"class":94},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[52,36820,36821],{"class":54,"line":300},[52,36822,36823],{"class":94},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[52,36825,36826,36829],{"class":54,"line":314},[52,36827,36828],{"class":58},"    with",[52,36830,35534],{"class":79},[52,36832,36833],{"class":54,"line":327},[52,36834,36835],{"class":94},"        # 从数据中进行\n",[52,36837,36838,36840,36843,36845],{"class":54,"line":333},[52,36839,1927],{"class":58},[52,36841,36842],{"class":79}," test_data_x,test_data_y ",[52,36844,28693],{"class":58},[52,36846,36847],{"class":79}," test_dataloader:\n",[52,36849,36850,36853,36855],{"class":54,"line":360},[52,36851,36852],{"class":79},"            test_data_x",[52,36854,292],{"class":58},[52,36856,36857],{"class":79},"test_data_x.to(device)\n",[52,36859,36860,36863,36865],{"class":54,"line":365},[52,36861,36862],{"class":79},"            test_data_y",[52,36864,292],{"class":58},[52,36866,36867],{"class":79},"test_data_y.to(device)\n",[52,36869,36870],{"class":54,"line":371},[52,36871,36872],{"class":94},"            # 设置为验证模式\n",[52,36874,36875],{"class":54,"line":400},[52,36876,35525],{"class":79},[52,36878,36879],{"class":54,"line":405},[52,36880,36881],{"class":94},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[52,36883,36884,36886,36888],{"class":54,"line":411},[52,36885,35310],{"class":79},[52,36887,292],{"class":58},[52,36889,36890],{"class":79},"model(test_data_x)\n",[52,36892,36893],{"class":54,"line":424},[52,36894,36895],{"class":94},"            # 查找每一行中最大值对应的下标\n",[52,36897,36898,36900,36902,36904,36906,36908,36910],{"class":54,"line":436},[52,36899,35327],{"class":79},[52,36901,292],{"class":58},[52,36903,35332],{"class":79},[52,36905,35335],{"class":1223},[52,36907,292],{"class":58},[52,36909,629],{"class":308},[52,36911,708],{"class":79},[52,36913,36914],{"class":54,"line":449},[52,36915,36916],{"class":94},"            # 计算正确率\n",[52,36918,36919],{"class":54,"line":2160},[52,36920,36921],{"class":94},"            # .data表示是一个不带梯度信息的tensor\n",[52,36923,36924],{"class":54,"line":2186},[52,36925,36926],{"class":94},"            # 如果预测正确，则准确度test_corrects加1\n",[52,36928,36929,36932,36934,36936,36938],{"class":54,"line":2209},[52,36930,36931],{"class":79},"            test_corrects",[52,36933,1910],{"class":58},[52,36935,35437],{"class":79},[52,36937,5938],{"class":58},[52,36939,36940],{"class":79},"test_data_y.data)\n",[52,36942,36943],{"class":54,"line":2233},[52,36944,36945],{"class":94},"            # 将所有的测试样本进行累计\n",[52,36947,36948,36951,36953,36956,36958],{"class":54,"line":2238},[52,36949,36950],{"class":79},"            test_num",[52,36952,1910],{"class":58},[52,36954,36955],{"class":79},"test_data_x.size(",[52,36957,692],{"class":308},[52,36959,708],{"class":79},[52,36961,36962],{"class":54,"line":2243},[52,36963,123],{"emptyLinePlaceholder":122},[52,36965,36966],{"class":54,"line":2248},[52,36967,36968],{"class":94},"        # 计算准确度\n",[52,36970,36971,36974,36976,36979,36981],{"class":54,"line":2257},[52,36972,36973],{"class":79},"        test_acc",[52,36975,292],{"class":58},[52,36977,36978],{"class":79},"test_corrects.double().item()",[52,36980,2340],{"class":58},[52,36982,36983],{"class":79},"test_num\n",[52,36985,36986],{"class":54,"line":2262},[52,36987,36988],{"class":94},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[52,36990,36991,36993,36995,36998],{"class":54,"line":2268},[52,36992,35101],{"class":308},[52,36994,1216],{"class":79},[52,36996,36997],{"class":62},"\"测试的准确率：\"",[52,36999,37000],{"class":79},",test_acc)\n",[52,37002,37003],{"class":54,"line":2297},[52,37004,123],{"emptyLinePlaceholder":122},[52,37006,37007],{"class":54,"line":2303},[52,37008,37009],{"class":94},"# 实现模型的测试功能\n",[52,37011,37012,37014,37016,37018,37020],{"class":54,"line":2318},[52,37013,4578],{"class":58},[52,37015,33870],{"class":308},[52,37017,5938],{"class":58},[52,37019,33875],{"class":62},[52,37021,6718],{"class":79},[52,37023,37024],{"class":54,"line":2324},[52,37025,37026],{"class":94},"    # 加载模型\n",[52,37028,37029,37031,37033],{"class":54,"line":2353},[52,37030,33939],{"class":79},[52,37032,292],{"class":58},[52,37034,36475],{"class":79},[52,37036,37037],{"class":54,"line":2362},[52,37038,37039],{"class":94},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[52,37041,37042],{"class":54,"line":2368},[52,37043,37044],{"class":94},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[52,37046,37047,37050,37053],{"class":54,"line":2376},[52,37048,37049],{"class":79},"    model.load_state_dict(torch.load(",[52,37051,37052],{"class":62},"'best_model.pth'",[52,37054,33147],{"class":79},[52,37056,37057],{"class":54,"line":2381},[52,37058,37059],{"class":94},"    # 数据加载\n",[52,37061,37062,37064,37066],{"class":54,"line":19252},[52,37063,36672],{"class":79},[52,37065,292],{"class":58},[52,37067,37068],{"class":79},"test_data_process()\n",[52,37070,37071],{"class":54,"line":19258},[52,37072,37073],{"class":94},"    # 加载模型测试的函数\n",[52,37075,37076],{"class":54,"line":19281},[52,37077,37078],{"class":79},"    test_model_process(model,test_dataloader)\n",[52,37080,37081],{"class":54,"line":19287},[52,37082,123],{"emptyLinePlaceholder":122},[52,37084,37085],{"class":54,"line":19310},[52,37086,37087],{"class":94},"    # 验证集推理实现：\n",[52,37089,37090],{"class":54,"line":19324},[52,37091,37092],{"class":94},"    # 加载数据加载的更详细一些\n",[52,37094,37095,37097,37099,37101,37103,37105,37107],{"class":54,"line":19344},[52,37096,33887],{"class":79},[52,37098,292],{"class":58},[52,37100,33894],{"class":62},[52,37102,4736],{"class":58},[52,37104,33899],{"class":79},[52,37106,4733],{"class":58},[52,37108,36769],{"class":62},[52,37110,37111,37113,37115],{"class":54,"line":19350},[52,37112,33939],{"class":79},[52,37114,292],{"class":58},[52,37116,34939],{"class":79},[52,37118,37119],{"class":54,"line":19361},[52,37120,37121],{"class":94},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[52,37123,37124],{"class":54,"line":19384},[52,37125,37126],{"class":94},"    # 顺序不可改变\n",[52,37128,37129,37132,37134,37136,37139,37141,37144,37146,37149,37151,37154,37156,37159,37161,37164,37166,37169,37171,37174,37176,37179,37181,37184],{"class":54,"line":19406},[52,37130,37131],{"class":79},"    classes",[52,37133,292],{"class":58},[52,37135,4080],{"class":79},[52,37137,37138],{"class":62},"'T-shirt\u002Ftop'",[52,37140,389],{"class":79},[52,37142,37143],{"class":62},"'Trouser'",[52,37145,389],{"class":79},[52,37147,37148],{"class":62},"'Pullover'",[52,37150,389],{"class":79},[52,37152,37153],{"class":62},"'Dress'",[52,37155,389],{"class":79},[52,37157,37158],{"class":62},"'Coat'",[52,37160,389],{"class":79},[52,37162,37163],{"class":62},"'Sandal'",[52,37165,389],{"class":79},[52,37167,37168],{"class":62},"'Shirt'",[52,37170,389],{"class":79},[52,37172,37173],{"class":62},"'Sneaker'",[52,37175,389],{"class":79},[52,37177,37178],{"class":62},"'Bag'",[52,37180,389],{"class":79},[52,37182,37183],{"class":62},"'Ankle boot'",[52,37185,35896],{"class":79},[52,37187,37188,37190],{"class":54,"line":19411},[52,37189,36828],{"class":58},[52,37191,35534],{"class":79},[52,37193,37194],{"class":54,"line":19417},[52,37195,37196],{"class":94},"        # 将数据和标签都放到设备当中\n",[52,37198,37199,37201,37204,37206],{"class":54,"line":19431},[52,37200,1927],{"class":58},[52,37202,37203],{"class":79}," b_x,b_y ",[52,37205,28693],{"class":58},[52,37207,36847],{"class":79},[52,37209,37210,37212,37214],{"class":54,"line":19444},[52,37211,35260],{"class":79},[52,37213,292],{"class":58},[52,37215,35265],{"class":79},[52,37217,37218,37220,37222],{"class":54,"line":19449},[52,37219,35275],{"class":79},[52,37221,292],{"class":58},[52,37223,35280],{"class":79},[52,37225,37226],{"class":54,"line":19463},[52,37227,123],{"emptyLinePlaceholder":122},[52,37229,37230],{"class":54,"line":19468},[52,37231,37232],{"class":94},"            # 设置模型为验证模式\n",[52,37234,37235],{"class":54,"line":19474},[52,37236,35525],{"class":79},[52,37238,37239],{"class":54,"line":19479},[52,37240,37241],{"class":94},"            # 模型推理结果\n",[52,37243,37244,37246,37248],{"class":54,"line":19493},[52,37245,35310],{"class":79},[52,37247,292],{"class":58},[52,37249,35315],{"class":79},[52,37251,37252],{"class":54,"line":19498},[52,37253,37254],{"class":94},"            # 获取最大下标，最大下标就是类别号\n",[52,37256,37257,37259,37261,37263,37265,37267,37269],{"class":54,"line":19503},[52,37258,35327],{"class":79},[52,37260,292],{"class":58},[52,37262,35332],{"class":79},[52,37264,35335],{"class":1223},[52,37266,292],{"class":58},[52,37268,629],{"class":308},[52,37270,708],{"class":79},[52,37272,37273],{"class":54,"line":19517},[52,37274,37275],{"class":94},"            # 取出张量中的数值\n",[52,37277,37278,37281,37283],{"class":54,"line":19529},[52,37279,37280],{"class":79},"            result",[52,37282,292],{"class":58},[52,37284,37285],{"class":79},"pre_lab.item()\n",[52,37287,37288,37291,37293],{"class":54,"line":19534},[52,37289,37290],{"class":79},"            label",[52,37292,292],{"class":58},[52,37294,37295],{"class":79},"b_y.item()\n",[52,37297,37298,37301,37303,37306,37309,37312,37314,37317],{"class":54,"line":19547},[52,37299,37300],{"class":308},"            print",[52,37302,1216],{"class":79},[52,37304,37305],{"class":62},"\"预测值：\"",[52,37307,37308],{"class":79},",classes[result],",[52,37310,37311],{"class":62},"\"------\"",[52,37313,389],{"class":79},[52,37315,37316],{"class":62},"\"真实值：\"",[52,37318,37319],{"class":79},",classes[label])\n",[14,37321,37322],{},"（2）AlexNet",[1696,37324,37325],{},[32,37326,37327],{},"神经网络构建",[42,37329,37331],{"className":33028,"code":37330,"language":33030,"meta":47,"style":47},"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",[49,37332,37333,37339,37349,37359,37371,37375,37392,37400,37415,37427,37469,37496,37539,37565,37609,37652,37695,37722,37726,37736,37741,37769,37788,37807,37811,37816,37824,37839,37849,37863,37873,37888,37903,37918,37929,37933,37938,37948,37963,37968,37982,37997,38009,38014,38025,38030,38036,38041,38053,38073,38078,38087],{"__ignoreMap":47},[52,37334,37335,37337],{"class":54,"line":55},[52,37336,33042],{"class":58},[52,37338,33045],{"class":79},[52,37340,37341,37343,37345,37347],{"class":54,"line":66},[52,37342,33387],{"class":58},[52,37344,33390],{"class":79},[52,37346,33042],{"class":58},[52,37348,33395],{"class":79},[52,37350,37351,37353,37355,37357],{"class":54,"line":83},[52,37352,33387],{"class":58},[52,37354,33407],{"class":79},[52,37356,33042],{"class":58},[52,37358,33412],{"class":79},[52,37360,37361,37363,37366,37368],{"class":54,"line":91},[52,37362,33042],{"class":58},[52,37364,37365],{"class":79}," torch.nn.functional ",[52,37367,34033],{"class":58},[52,37369,37370],{"class":79}," F\n",[52,37372,37373],{"class":54,"line":98},[52,37374,123],{"emptyLinePlaceholder":122},[52,37376,37377,37379,37382,37384,37386,37388,37390],{"class":54,"line":107},[52,37378,17342],{"class":58},[52,37380,37381],{"class":75}," AlexNet",[52,37383,1216],{"class":79},[52,37385,33428],{"class":75},[52,37387,3757],{"class":79},[52,37389,33433],{"class":75},[52,37391,33436],{"class":79},[52,37393,37394,37396,37398],{"class":54,"line":113},[52,37395,33451],{"class":58},[52,37397,33454],{"class":308},[52,37399,33457],{"class":79},[52,37401,37402,37404,37407,37409,37411,37413],{"class":54,"line":119},[52,37403,33467],{"class":308},[52,37405,37406],{"class":79},"(AlexNet,",[52,37408,33473],{"class":308},[52,37410,33476],{"class":79},[52,37412,33479],{"class":308},[52,37414,248],{"class":79},[52,37416,37417,37419,37422,37424],{"class":54,"line":126},[52,37418,33495],{"class":308},[52,37420,37421],{"class":79},".ReLu",[52,37423,292],{"class":58},[52,37425,37426],{"class":79},"nn.ReLU()\n",[52,37428,37429,37431,37433,37435,37437,37439,37441,37443,37445,37447,37449,37451,37453,37455,37457,37459,37461,37463,37465,37467],{"class":54,"line":132},[52,37430,33495],{"class":308},[52,37432,33498],{"class":79},[52,37434,292],{"class":58},[52,37436,33503],{"class":79},[52,37438,33506],{"class":1223},[52,37440,292],{"class":58},[52,37442,629],{"class":308},[52,37444,389],{"class":79},[52,37446,33515],{"class":1223},[52,37448,292],{"class":58},[52,37450,3423],{"class":308},[52,37452,389],{"class":79},[52,37454,33524],{"class":1223},[52,37456,292],{"class":58},[52,37458,3673],{"class":308},[52,37460,389],{"class":79},[52,37462,33579],{"class":1223},[52,37464,292],{"class":58},[52,37466,3504],{"class":308},[52,37468,708],{"class":79},[52,37470,37471,37473,37475,37477,37480,37482,37484,37486,37488,37490,37492,37494],{"class":54,"line":138},[52,37472,33495],{"class":308},[52,37474,33563],{"class":79},[52,37476,292],{"class":58},[52,37478,37479],{"class":79},"nn.MaxPool2d(",[52,37481,33524],{"class":1223},[52,37483,292],{"class":58},[52,37485,2313],{"class":308},[52,37487,389],{"class":79},[52,37489,33579],{"class":1223},[52,37491,292],{"class":58},[52,37493,564],{"class":308},[52,37495,708],{"class":79},[52,37497,37498,37500,37502,37504,37506,37508,37510,37512,37514,37516,37518,37521,37523,37525,37527,37529,37531,37533,37535,37537],{"class":54,"line":144},[52,37499,33495],{"class":308},[52,37501,33592],{"class":79},[52,37503,292],{"class":58},[52,37505,33503],{"class":79},[52,37507,33506],{"class":1223},[52,37509,292],{"class":58},[52,37511,3423],{"class":308},[52,37513,389],{"class":79},[52,37515,33515],{"class":1223},[52,37517,292],{"class":58},[52,37519,37520],{"class":308},"256",[52,37522,389],{"class":79},[52,37524,33524],{"class":1223},[52,37526,292],{"class":58},[52,37528,1805],{"class":308},[52,37530,389],{"class":79},[52,37532,33533],{"class":1223},[52,37534,292],{"class":58},[52,37536,564],{"class":308},[52,37538,708],{"class":79},[52,37540,37541,37543,37545,37547,37549,37551,37553,37555,37557,37559,37561,37563],{"class":54,"line":153},[52,37542,33495],{"class":308},[52,37544,33627],{"class":79},[52,37546,292],{"class":58},[52,37548,37479],{"class":79},[52,37550,33524],{"class":1223},[52,37552,292],{"class":58},[52,37554,2313],{"class":308},[52,37556,389],{"class":79},[52,37558,33579],{"class":1223},[52,37560,292],{"class":58},[52,37562,564],{"class":308},[52,37564,708],{"class":79},[52,37566,37567,37569,37572,37574,37576,37578,37580,37582,37584,37586,37588,37591,37593,37595,37597,37599,37601,37603,37605,37607],{"class":54,"line":159},[52,37568,33495],{"class":308},[52,37570,37571],{"class":79},".c5",[52,37573,292],{"class":58},[52,37575,33503],{"class":79},[52,37577,33506],{"class":1223},[52,37579,292],{"class":58},[52,37581,37520],{"class":308},[52,37583,389],{"class":79},[52,37585,33515],{"class":1223},[52,37587,292],{"class":58},[52,37589,37590],{"class":308},"384",[52,37592,389],{"class":79},[52,37594,33524],{"class":1223},[52,37596,292],{"class":58},[52,37598,2313],{"class":308},[52,37600,389],{"class":79},[52,37602,33533],{"class":1223},[52,37604,292],{"class":58},[52,37606,629],{"class":308},[52,37608,708],{"class":79},[52,37610,37611,37613,37616,37618,37620,37622,37624,37626,37628,37630,37632,37634,37636,37638,37640,37642,37644,37646,37648,37650],{"class":54,"line":167},[52,37612,33495],{"class":308},[52,37614,37615],{"class":79},".c6",[52,37617,292],{"class":58},[52,37619,33503],{"class":79},[52,37621,33506],{"class":1223},[52,37623,292],{"class":58},[52,37625,37590],{"class":308},[52,37627,389],{"class":79},[52,37629,33515],{"class":1223},[52,37631,292],{"class":58},[52,37633,37590],{"class":308},[52,37635,389],{"class":79},[52,37637,33524],{"class":1223},[52,37639,292],{"class":58},[52,37641,2313],{"class":308},[52,37643,389],{"class":79},[52,37645,33533],{"class":1223},[52,37647,292],{"class":58},[52,37649,629],{"class":308},[52,37651,708],{"class":79},[52,37653,37654,37656,37659,37661,37663,37665,37667,37669,37671,37673,37675,37677,37679,37681,37683,37685,37687,37689,37691,37693],{"class":54,"line":173},[52,37655,33495],{"class":308},[52,37657,37658],{"class":79},".c7",[52,37660,292],{"class":58},[52,37662,33503],{"class":79},[52,37664,33506],{"class":1223},[52,37666,292],{"class":58},[52,37668,37590],{"class":308},[52,37670,389],{"class":79},[52,37672,33515],{"class":1223},[52,37674,292],{"class":58},[52,37676,37520],{"class":308},[52,37678,389],{"class":79},[52,37680,33524],{"class":1223},[52,37682,292],{"class":58},[52,37684,2313],{"class":308},[52,37686,389],{"class":79},[52,37688,33533],{"class":1223},[52,37690,292],{"class":58},[52,37692,629],{"class":308},[52,37694,708],{"class":79},[52,37696,37697,37699,37702,37704,37706,37708,37710,37712,37714,37716,37718,37720],{"class":54,"line":181},[52,37698,33495],{"class":308},[52,37700,37701],{"class":79},".s8",[52,37703,292],{"class":58},[52,37705,37479],{"class":79},[52,37707,33524],{"class":1223},[52,37709,292],{"class":58},[52,37711,2313],{"class":308},[52,37713,389],{"class":79},[52,37715,33579],{"class":1223},[52,37717,292],{"class":58},[52,37719,564],{"class":308},[52,37721,708],{"class":79},[52,37723,37724],{"class":54,"line":186},[52,37725,33652],{"class":94},[52,37727,37728,37730,37732,37734],{"class":54,"line":191},[52,37729,33495],{"class":308},[52,37731,33659],{"class":79},[52,37733,292],{"class":58},[52,37735,33664],{"class":79},[52,37737,37738],{"class":54,"line":196},[52,37739,37740],{"class":94},"       # 定义全连接层\n",[52,37742,37743,37745,37748,37750,37752,37754,37756,37758,37760,37762,37764,37767],{"class":54,"line":201},[52,37744,33495],{"class":308},[52,37746,37747],{"class":79},".f1",[52,37749,292],{"class":58},[52,37751,33681],{"class":79},[52,37753,1125],{"class":308},[52,37755,3053],{"class":58},[52,37757,1125],{"class":308},[52,37759,3053],{"class":58},[52,37761,37520],{"class":308},[52,37763,389],{"class":79},[52,37765,37766],{"class":308},"4096",[52,37768,708],{"class":79},[52,37770,37771,37773,37776,37778,37780,37782,37784,37786],{"class":54,"line":206},[52,37772,33495],{"class":308},[52,37774,37775],{"class":79},".f2",[52,37777,292],{"class":58},[52,37779,33681],{"class":79},[52,37781,37766],{"class":308},[52,37783,389],{"class":79},[52,37785,37766],{"class":308},[52,37787,708],{"class":79},[52,37789,37790,37792,37795,37797,37799,37801,37803,37805],{"class":54,"line":211},[52,37791,33495],{"class":308},[52,37793,37794],{"class":79},".f3",[52,37796,292],{"class":58},[52,37798,33681],{"class":79},[52,37800,37766],{"class":308},[52,37802,389],{"class":79},[52,37804,3649],{"class":308},[52,37806,708],{"class":79},[52,37808,37809],{"class":54,"line":218},[52,37810,123],{"emptyLinePlaceholder":122},[52,37812,37813],{"class":54,"line":223},[52,37814,37815],{"class":94},"    # 定义前向传播\n",[52,37817,37818,37820,37822],{"class":54,"line":230},[52,37819,33451],{"class":58},[52,37821,33743],{"class":75},[52,37823,33746],{"class":79},[52,37825,37826,37828,37830,37832,37835,37837],{"class":54,"line":239},[52,37827,33751],{"class":79},[52,37829,292],{"class":58},[52,37831,33473],{"class":308},[52,37833,37834],{"class":79},".ReLu(",[52,37836,33473],{"class":308},[52,37838,33763],{"class":79},[52,37840,37841,37843,37845,37847],{"class":54,"line":251},[52,37842,33751],{"class":79},[52,37844,292],{"class":58},[52,37846,33473],{"class":308},[52,37848,33774],{"class":79},[52,37850,37851,37853,37855,37857,37859,37861],{"class":54,"line":256},[52,37852,33751],{"class":79},[52,37854,292],{"class":58},[52,37856,33473],{"class":308},[52,37858,37834],{"class":79},[52,37860,33473],{"class":308},[52,37862,33789],{"class":79},[52,37864,37865,37867,37869,37871],{"class":54,"line":262},[52,37866,33751],{"class":79},[52,37868,292],{"class":58},[52,37870,33473],{"class":308},[52,37872,33800],{"class":79},[52,37874,37875,37877,37879,37881,37883,37885],{"class":54,"line":268},[52,37876,33751],{"class":79},[52,37878,292],{"class":58},[52,37880,33473],{"class":308},[52,37882,37834],{"class":79},[52,37884,33473],{"class":308},[52,37886,37887],{"class":79},".c5(x))\n",[52,37889,37890,37892,37894,37896,37898,37900],{"class":54,"line":280},[52,37891,33751],{"class":79},[52,37893,292],{"class":58},[52,37895,33473],{"class":308},[52,37897,37834],{"class":79},[52,37899,33473],{"class":308},[52,37901,37902],{"class":79},".c6(x))\n",[52,37904,37905,37907,37909,37911,37913,37915],{"class":54,"line":286},[52,37906,33751],{"class":79},[52,37908,292],{"class":58},[52,37910,33473],{"class":308},[52,37912,37834],{"class":79},[52,37914,33473],{"class":308},[52,37916,37917],{"class":79},".c7(x))\n",[52,37919,37920,37922,37924,37926],{"class":54,"line":300},[52,37921,33751],{"class":79},[52,37923,292],{"class":58},[52,37925,33473],{"class":308},[52,37927,37928],{"class":79},".s8(x)\n",[52,37930,37931],{"class":54,"line":314},[52,37932,123],{"emptyLinePlaceholder":122},[52,37934,37935],{"class":54,"line":327},[52,37936,37937],{"class":94},"        # 展平加线性全连接层\n",[52,37939,37940,37942,37944,37946],{"class":54,"line":333},[52,37941,33751],{"class":79},[52,37943,292],{"class":58},[52,37945,33473],{"class":308},[52,37947,33811],{"class":79},[52,37949,37950,37952,37954,37956,37958,37960],{"class":54,"line":360},[52,37951,33751],{"class":79},[52,37953,292],{"class":58},[52,37955,33473],{"class":308},[52,37957,37834],{"class":79},[52,37959,33473],{"class":308},[52,37961,37962],{"class":79},".f1(x))\n",[52,37964,37965],{"class":54,"line":365},[52,37966,37967],{"class":94},"        # 还需要dropout对神经元随机进行失活\n",[52,37969,37970,37972,37974,37977,37980],{"class":54,"line":371},[52,37971,33751],{"class":79},[52,37973,292],{"class":58},[52,37975,37976],{"class":79},"F.dropout(x,",[52,37978,37979],{"class":308},"0.5",[52,37981,708],{"class":79},[52,37983,37984,37986,37988,37990,37992,37994],{"class":54,"line":400},[52,37985,33751],{"class":79},[52,37987,292],{"class":58},[52,37989,33473],{"class":308},[52,37991,37834],{"class":79},[52,37993,33473],{"class":308},[52,37995,37996],{"class":79},".f2(x))\n",[52,37998,37999,38001,38003,38005,38007],{"class":54,"line":405},[52,38000,33751],{"class":79},[52,38002,292],{"class":58},[52,38004,37976],{"class":79},[52,38006,37979],{"class":308},[52,38008,708],{"class":79},[52,38010,38011],{"class":54,"line":411},[52,38012,38013],{"class":94},"        # 直接输出\n",[52,38015,38016,38018,38020,38022],{"class":54,"line":424},[52,38017,33751],{"class":79},[52,38019,292],{"class":58},[52,38021,33473],{"class":308},[52,38023,38024],{"class":79},".f3(x)\n",[52,38026,38027],{"class":54,"line":436},[52,38028,38029],{"class":94},"        # 前向传播输出\n",[52,38031,38032,38034],{"class":54,"line":449},[52,38033,17400],{"class":58},[52,38035,33859],{"class":79},[52,38037,38038],{"class":54,"line":2160},[52,38039,38040],{"class":94},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[52,38042,38043,38045,38047,38049,38051],{"class":54,"line":2186},[52,38044,4578],{"class":58},[52,38046,33870],{"class":308},[52,38048,5938],{"class":58},[52,38050,33875],{"class":62},[52,38052,6718],{"class":79},[52,38054,38055,38057,38059,38061,38063,38065,38067,38069,38071],{"class":54,"line":2209},[52,38056,33887],{"class":79},[52,38058,292],{"class":58},[52,38060,33101],{"class":79},[52,38062,33894],{"class":62},[52,38064,4736],{"class":58},[52,38066,33899],{"class":79},[52,38068,4733],{"class":58},[52,38070,33126],{"class":62},[52,38072,708],{"class":79},[52,38074,38075],{"class":54,"line":2233},[52,38076,38077],{"class":94},"    # 模型实例化，然后将实例化的模型放到设备中\n",[52,38079,38080,38082,38084],{"class":54,"line":2238},[52,38081,33939],{"class":79},[52,38083,292],{"class":58},[52,38085,38086],{"class":79},"AlexNet().to(device)\n",[52,38088,38089,38091,38093,38095,38097,38100,38102,38104],{"class":54,"line":2243},[52,38090,33949],{"class":308},[52,38092,33952],{"class":79},[52,38094,629],{"class":308},[52,38096,389],{"class":79},[52,38098,38099],{"class":308},"227",[52,38101,389],{"class":79},[52,38103,38099],{"class":308},[52,38105,33965],{"class":79},[1696,38107,38108],{"start":66},[32,38109,33978],{},[42,38111,38113],{"className":33028,"code":38112,"language":33030,"meta":47,"style":47},"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",[49,38114,38115,38121,38127,38137,38143,38153,38163,38173,38183,38193,38197,38208,38218,38222,38226,38230,38238,38250,38260,38276,38286,38318,38332,38342,38352,38356,38366,38380,38390,38400,38410,38416,38420,38424,38428,38432,38436,38444,38464,38468,38472,38476,38480,38484,38500,38504,38508,38516,38520,38524,38532,38536,38540,38544,38552,38556,38560,38564,38568,38576,38580,38588,38592,38600,38604,38612,38616,38624,38628,38632,38640,38644,38648,38652,38664,38688,38702,38706,38710,38714,38722,38726,38734,38738,38746,38750,38758,38762,38770,38774,38782,38786,38798,38802,38810,38814,38822,38826,38830,38834,38838,38846,38850,38866,38870,38878,38882,38886,38890,38894,38898,38902,38906,38922,38926,38938,38942,38954,38958,38970,38974,38982,38986,38994,38998,39002,39007,39013,39017,39026,39030,39047,39051,39060,39064,39082,39095,39100,39113,39117,39121,39129,39133,39137,39145,39149,39157,39161,39169,39173,39177,39219,39261,39265,39269,39285,39289,39305,39309,39313,39321,39325,39329,39341,39379,39384,39389,39398,39402,39416,39426,39432,39438,39444,39450,39454,39458,39464,39468,39472,39480,39484,39502,39506,39510,39514,39530,39534,39538,39542,39546,39550,39570,39590,39594,39598,39602,39610,39618,39622,39638,39658,39678,39682,39686,39694,39702,39706,39710,39714,39726,39730,39740,39748,39765],{"__ignoreMap":47},[52,38116,38117,38119],{"class":54,"line":55},[52,38118,33042],{"class":58},[52,38120,34472],{"class":79},[52,38122,38123,38125],{"class":54,"line":66},[52,38124,33042],{"class":58},[52,38126,34479],{"class":79},[52,38128,38129,38131,38133,38135],{"class":54,"line":83},[52,38130,33042],{"class":58},[52,38132,34490],{"class":79},[52,38134,34033],{"class":58},[52,38136,34495],{"class":79},[52,38138,38139,38141],{"class":54,"line":91},[52,38140,33042],{"class":58},[52,38142,33045],{"class":79},[52,38144,38145,38147,38149,38151],{"class":54,"line":98},[52,38146,33387],{"class":58},[52,38148,34065],{"class":79},[52,38150,33042],{"class":58},[52,38152,34512],{"class":79},[52,38154,38155,38157,38159,38161],{"class":54,"line":107},[52,38156,33387],{"class":58},[52,38158,34018],{"class":79},[52,38160,33042],{"class":58},[52,38162,34023],{"class":79},[52,38164,38165,38167,38169,38171],{"class":54,"line":113},[52,38166,33387],{"class":58},[52,38168,34048],{"class":79},[52,38170,33042],{"class":58},[52,38172,34053],{"class":79},[52,38174,38175,38177,38179,38181],{"class":54,"line":119},[52,38176,33042],{"class":58},[52,38178,34065],{"class":79},[52,38180,34033],{"class":58},[52,38182,34070],{"class":79},[52,38184,38185,38187,38189,38191],{"class":54,"line":126},[52,38186,33042],{"class":58},[52,38188,34082],{"class":79},[52,38190,34033],{"class":58},[52,38192,34087],{"class":79},[52,38194,38195],{"class":54,"line":132},[52,38196,34557],{"class":94},[52,38198,38199,38201,38203,38205],{"class":54,"line":138},[52,38200,33387],{"class":58},[52,38202,34564],{"class":79},[52,38204,33042],{"class":58},[52,38206,38207],{"class":79}," AlexNet\n",[52,38209,38210,38212,38214,38216],{"class":54,"line":144},[52,38211,33387],{"class":58},[52,38213,33390],{"class":79},[52,38215,33042],{"class":58},[52,38217,33395],{"class":79},[52,38219,38220],{"class":54,"line":153},[52,38221,123],{"emptyLinePlaceholder":122},[52,38223,38224],{"class":54,"line":159},[52,38225,123],{"emptyLinePlaceholder":122},[52,38227,38228],{"class":54,"line":167},[52,38229,34592],{"class":94},[52,38231,38232,38234,38236],{"class":54,"line":173},[52,38233,34597],{"class":58},[52,38235,34600],{"class":75},[52,38237,34603],{"class":79},[52,38239,38240,38242,38244,38246,38248],{"class":54,"line":181},[52,38241,34608],{"class":79},[52,38243,292],{"class":58},[52,38245,34105],{"class":79},[52,38247,34113],{"class":62},[52,38249,34116],{"class":79},[52,38251,38252,38254,38256,38258],{"class":54,"line":186},[52,38253,34621],{"class":1223},[52,38255,292],{"class":58},[52,38257,34126],{"class":308},[52,38259,34116],{"class":79},[52,38261,38262,38264,38266,38268,38270,38272,38274],{"class":54,"line":191},[52,38263,34632],{"class":1223},[52,38265,292],{"class":58},[52,38267,34143],{"class":79},[52,38269,34146],{"class":1223},[52,38271,292],{"class":58},[52,38273,38099],{"class":308},[52,38275,34154],{"class":79},[52,38277,38278,38280,38282,38284],{"class":54,"line":196},[52,38279,34649],{"class":1223},[52,38281,292],{"class":58},[52,38283,34126],{"class":308},[52,38285,708],{"class":79},[52,38287,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316],{"class":54,"line":201},[52,38289,34660],{"class":79},[52,38291,292],{"class":58},[52,38293,34665],{"class":79},[52,38295,34668],{"class":308},[52,38297,1216],{"class":79},[52,38299,34673],{"class":308},[52,38301,3053],{"class":58},[52,38303,2639],{"class":308},[52,38305,34680],{"class":79},[52,38307,34668],{"class":308},[52,38309,1216],{"class":79},[52,38311,34687],{"class":308},[52,38313,3053],{"class":58},[52,38315,2639],{"class":308},[52,38317,34694],{"class":79},[52,38319,38320,38322,38324,38326,38328,38330],{"class":54,"line":206},[52,38321,34699],{"class":79},[52,38323,292],{"class":58},[52,38325,34704],{"class":79},[52,38327,34187],{"class":1223},[52,38329,292],{"class":58},[52,38331,34192],{"class":79},[52,38333,38334,38336,38338,38340],{"class":54,"line":211},[52,38335,34715],{"class":1223},[52,38337,292],{"class":58},[52,38339,34720],{"class":308},[52,38341,34116],{"class":79},[52,38343,38344,38346,38348,38350],{"class":54,"line":218},[52,38345,34727],{"class":1223},[52,38347,292],{"class":58},[52,38349,34126],{"class":308},[52,38351,34116],{"class":79},[52,38353,38354],{"class":54,"line":223},[52,38355,34738],{"class":94},[52,38357,38358,38360,38362,38364],{"class":54,"line":230},[52,38359,34743],{"class":1223},[52,38361,292],{"class":58},[52,38363,3600],{"class":308},[52,38365,708],{"class":79},[52,38367,38368,38370,38372,38374,38376,38378],{"class":54,"line":239},[52,38369,34754],{"class":79},[52,38371,292],{"class":58},[52,38373,34184],{"class":79},[52,38375,34187],{"class":1223},[52,38377,292],{"class":58},[52,38379,34765],{"class":79},[52,38381,38382,38384,38386,38388],{"class":54,"line":251},[52,38383,34770],{"class":1223},[52,38385,292],{"class":58},[52,38387,34720],{"class":308},[52,38389,34116],{"class":79},[52,38391,38392,38394,38396,38398],{"class":54,"line":256},[52,38393,34781],{"class":1223},[52,38395,292],{"class":58},[52,38397,34126],{"class":308},[52,38399,34116],{"class":79},[52,38401,38402,38404,38406,38408],{"class":54,"line":262},[52,38403,34792],{"class":1223},[52,38405,292],{"class":58},[52,38407,3600],{"class":308},[52,38409,708],{"class":79},[52,38411,38412,38414],{"class":54,"line":268},[52,38413,1441],{"class":58},[52,38415,34805],{"class":79},[52,38417,38418],{"class":54,"line":280},[52,38419,123],{"emptyLinePlaceholder":122},[52,38421,38422],{"class":54,"line":286},[52,38423,34814],{"class":94},[52,38425,38426],{"class":54,"line":300},[52,38427,34819],{"class":94},[52,38429,38430],{"class":54,"line":314},[52,38431,123],{"emptyLinePlaceholder":122},[52,38433,38434],{"class":54,"line":327},[52,38435,34828],{"class":94},[52,38437,38438,38440,38442],{"class":54,"line":333},[52,38439,34597],{"class":58},[52,38441,34835],{"class":75},[52,38443,34838],{"class":79},[52,38445,38446,38448,38450,38452,38454,38456,38458,38460,38462],{"class":54,"line":360},[52,38447,33887],{"class":79},[52,38449,292],{"class":58},[52,38451,33101],{"class":79},[52,38453,33894],{"class":62},[52,38455,4736],{"class":58},[52,38457,33899],{"class":79},[52,38459,4733],{"class":58},[52,38461,34857],{"class":62},[52,38463,708],{"class":79},[52,38465,38466],{"class":54,"line":365},[52,38467,123],{"emptyLinePlaceholder":122},[52,38469,38470],{"class":54,"line":371},[52,38471,123],{"emptyLinePlaceholder":122},[52,38473,38474],{"class":54,"line":400},[52,38475,34872],{"class":94},[52,38477,38478],{"class":54,"line":405},[52,38479,34877],{"class":94},[52,38481,38482],{"class":54,"line":411},[52,38483,34882],{"class":94},[52,38485,38486,38488,38490,38492,38494,38496,38498],{"class":54,"line":424},[52,38487,34887],{"class":79},[52,38489,292],{"class":58},[52,38491,34892],{"class":79},[52,38493,34895],{"class":1223},[52,38495,292],{"class":58},[52,38497,34900],{"class":308},[52,38499,708],{"class":79},[52,38501,38502],{"class":54,"line":436},[52,38503,123],{"emptyLinePlaceholder":122},[52,38505,38506],{"class":54,"line":449},[52,38507,34911],{"class":94},[52,38509,38510,38512,38514],{"class":54,"line":2160},[52,38511,34916],{"class":79},[52,38513,292],{"class":58},[52,38515,34921],{"class":79},[52,38517,38518],{"class":54,"line":2186},[52,38519,123],{"emptyLinePlaceholder":122},[52,38521,38522],{"class":54,"line":2209},[52,38523,34930],{"class":94},[52,38525,38526,38528,38530],{"class":54,"line":2233},[52,38527,33939],{"class":79},[52,38529,292],{"class":58},[52,38531,34939],{"class":79},[52,38533,38534],{"class":54,"line":2238},[52,38535,34944],{"class":94},[52,38537,38538],{"class":54,"line":2243},[52,38539,34949],{"class":94},[52,38541,38542],{"class":54,"line":2248},[52,38543,34954],{"class":94},[52,38545,38546,38548,38550],{"class":54,"line":2257},[52,38547,34959],{"class":79},[52,38549,292],{"class":58},[52,38551,34964],{"class":79},[52,38553,38554],{"class":54,"line":2262},[52,38555,123],{"emptyLinePlaceholder":122},[52,38557,38558],{"class":54,"line":2268},[52,38559,123],{"emptyLinePlaceholder":122},[52,38561,38562],{"class":54,"line":2297},[52,38563,34977],{"class":94},[52,38565,38566],{"class":54,"line":2303},[52,38567,34982],{"class":94},[52,38569,38570,38572,38574],{"class":54,"line":2318},[52,38571,34987],{"class":79},[52,38573,292],{"class":58},[52,38575,34992],{"class":308},[52,38577,38578],{"class":54,"line":2324},[52,38579,34997],{"class":94},[52,38581,38582,38584,38586],{"class":54,"line":2353},[52,38583,35002],{"class":79},[52,38585,292],{"class":58},[52,38587,35007],{"class":79},[52,38589,38590],{"class":54,"line":2362},[52,38591,35012],{"class":94},[52,38593,38594,38596,38598],{"class":54,"line":2368},[52,38595,35017],{"class":79},[52,38597,292],{"class":58},[52,38599,35007],{"class":79},[52,38601,38602],{"class":54,"line":2376},[52,38603,35026],{"class":94},[52,38605,38606,38608,38610],{"class":54,"line":2381},[52,38607,35031],{"class":79},[52,38609,292],{"class":58},[52,38611,35007],{"class":79},[52,38613,38614],{"class":54,"line":19252},[52,38615,35040],{"class":94},[52,38617,38618,38620,38622],{"class":54,"line":19258},[52,38619,35045],{"class":79},[52,38621,292],{"class":58},[52,38623,35007],{"class":79},[52,38625,38626],{"class":54,"line":19281},[52,38627,123],{"emptyLinePlaceholder":122},[52,38629,38630],{"class":54,"line":19287},[52,38631,35058],{"class":94},[52,38633,38634,38636,38638],{"class":54,"line":19310},[52,38635,35063],{"class":79},[52,38637,292],{"class":58},[52,38639,35068],{"class":79},[52,38641,38642],{"class":54,"line":19324},[52,38643,123],{"emptyLinePlaceholder":122},[52,38645,38646],{"class":54,"line":19344},[52,38647,123],{"emptyLinePlaceholder":122},[52,38649,38650],{"class":54,"line":19350},[52,38651,35081],{"class":94},[52,38653,38654,38656,38658,38660,38662],{"class":54,"line":19361},[52,38655,679],{"class":58},[52,38657,35088],{"class":79},[52,38659,28693],{"class":58},[52,38661,35093],{"class":308},[52,38663,35096],{"class":79},[52,38665,38666,38668,38670,38672,38674,38676,38678,38680,38682,38684,38686],{"class":54,"line":19384},[52,38667,35101],{"class":308},[52,38669,1216],{"class":79},[52,38671,35106],{"class":62},[52,38673,35109],{"class":308},[52,38675,2340],{"class":62},[52,38677,35109],{"class":308},[52,38679,2844],{"class":62},[52,38681,35118],{"class":79},[52,38683,2642],{"class":58},[52,38685,629],{"class":308},[52,38687,33147],{"class":79},[52,38689,38690,38692,38694,38696,38698,38700],{"class":54,"line":19406},[52,38691,35101],{"class":308},[52,38693,1216],{"class":79},[52,38695,35133],{"class":62},[52,38697,3053],{"class":58},[52,38699,3649],{"class":308},[52,38701,708],{"class":79},[52,38703,38704],{"class":54,"line":19411},[52,38705,123],{"emptyLinePlaceholder":122},[52,38707,38708],{"class":54,"line":19417},[52,38709,35148],{"class":94},[52,38711,38712],{"class":54,"line":19431},[52,38713,35153],{"class":94},[52,38715,38716,38718,38720],{"class":54,"line":19444},[52,38717,35158],{"class":79},[52,38719,292],{"class":58},[52,38721,34992],{"class":308},[52,38723,38724],{"class":54,"line":19449},[52,38725,35167],{"class":94},[52,38727,38728,38730,38732],{"class":54,"line":19463},[52,38729,35172],{"class":79},[52,38731,292],{"class":58},[52,38733,6072],{"class":308},[52,38735,38736],{"class":54,"line":19468},[52,38737,35181],{"class":94},[52,38739,38740,38742,38744],{"class":54,"line":19474},[52,38741,35186],{"class":79},[52,38743,292],{"class":58},[52,38745,34992],{"class":308},[52,38747,38748],{"class":54,"line":19479},[52,38749,35195],{"class":94},[52,38751,38752,38754,38756],{"class":54,"line":19493},[52,38753,35200],{"class":79},[52,38755,292],{"class":58},[52,38757,6072],{"class":308},[52,38759,38760],{"class":54,"line":19498},[52,38761,35209],{"class":94},[52,38763,38764,38766,38768],{"class":54,"line":19503},[52,38765,35214],{"class":79},[52,38767,292],{"class":58},[52,38769,6072],{"class":308},[52,38771,38772],{"class":54,"line":19517},[52,38773,35223],{"class":94},[52,38775,38776,38778,38780],{"class":54,"line":19529},[52,38777,35228],{"class":79},[52,38779,292],{"class":58},[52,38781,6072],{"class":308},[52,38783,38784],{"class":54,"line":19534},[52,38785,35237],{"class":94},[52,38787,38788,38790,38792,38794,38796],{"class":54,"line":19547},[52,38789,1927],{"class":58},[52,38791,34251],{"class":79},[52,38793,28693],{"class":58},[52,38795,34256],{"class":308},[52,38797,35250],{"class":79},[52,38799,38800],{"class":54,"line":19552},[52,38801,35255],{"class":94},[52,38803,38804,38806,38808],{"class":54,"line":19557},[52,38805,35260],{"class":79},[52,38807,292],{"class":58},[52,38809,35265],{"class":79},[52,38811,38812],{"class":54,"line":19562},[52,38813,35270],{"class":94},[52,38815,38816,38818,38820],{"class":54,"line":19575},[52,38817,35275],{"class":79},[52,38819,292],{"class":58},[52,38821,35280],{"class":79},[52,38823,38824],{"class":54,"line":19580},[52,38825,35286],{"class":94},[52,38827,38828],{"class":54,"line":35283},[52,38829,35292],{"class":79},[52,38831,38832],{"class":54,"line":35289},[52,38833,35298],{"class":94},[52,38835,38836],{"class":54,"line":35295},[52,38837,35304],{"class":94},[52,38839,38840,38842,38844],{"class":54,"line":35301},[52,38841,35310],{"class":79},[52,38843,292],{"class":58},[52,38845,35315],{"class":79},[52,38847,38848],{"class":54,"line":35307},[52,38849,35321],{"class":94},[52,38851,38852,38854,38856,38858,38860,38862,38864],{"class":54,"line":35318},[52,38853,35327],{"class":79},[52,38855,292],{"class":58},[52,38857,35332],{"class":79},[52,38859,35335],{"class":1223},[52,38861,292],{"class":58},[52,38863,629],{"class":308},[52,38865,708],{"class":79},[52,38867,38868],{"class":54,"line":35324},[52,38869,35347],{"class":94},[52,38871,38872,38874,38876],{"class":54,"line":35344},[52,38873,35353],{"class":79},[52,38875,292],{"class":58},[52,38877,35358],{"class":79},[52,38879,38880],{"class":54,"line":35350},[52,38881,35364],{"class":94},[52,38883,38884],{"class":54,"line":35361},[52,38885,35370],{"class":79},[52,38887,38888],{"class":54,"line":35367},[52,38889,35376],{"class":94},[52,38891,38892],{"class":54,"line":35373},[52,38893,35382],{"class":79},[52,38895,38896],{"class":54,"line":35379},[52,38897,35388],{"class":94},[52,38899,38900],{"class":54,"line":35385},[52,38901,35394],{"class":79},[52,38903,38904],{"class":54,"line":35391},[52,38905,35400],{"class":94},[52,38907,38908,38910,38912,38914,38916,38918,38920],{"class":54,"line":35397},[52,38909,35406],{"class":79},[52,38911,1910],{"class":58},[52,38913,35411],{"class":79},[52,38915,3053],{"class":58},[52,38917,35416],{"class":79},[52,38919,692],{"class":308},[52,38921,708],{"class":79},[52,38923,38924],{"class":54,"line":35403},[52,38925,35426],{"class":94},[52,38927,38928,38930,38932,38934,38936],{"class":54,"line":35423},[52,38929,35432],{"class":79},[52,38931,1910],{"class":58},[52,38933,35437],{"class":79},[52,38935,5938],{"class":58},[52,38937,35442],{"class":79},[52,38939,38940],{"class":54,"line":35429},[52,38941,35448],{"class":94},[52,38943,38944,38946,38948,38950,38952],{"class":54,"line":35445},[52,38945,35454],{"class":79},[52,38947,1910],{"class":58},[52,38949,35416],{"class":79},[52,38951,692],{"class":308},[52,38953,708],{"class":79},[52,38955,38956],{"class":54,"line":35451},[52,38957,35468],{"class":94},[52,38959,38960,38962,38964,38966,38968],{"class":54,"line":35465},[52,38961,1927],{"class":58},[52,38963,35476],{"class":79},[52,38965,28693],{"class":58},[52,38967,34256],{"class":308},[52,38969,35483],{"class":79},[52,38971,38972],{"class":54,"line":35471},[52,38973,35489],{"class":94},[52,38975,38976,38978,38980],{"class":54,"line":35486},[52,38977,35260],{"class":79},[52,38979,292],{"class":58},[52,38981,35265],{"class":79},[52,38983,38984],{"class":54,"line":35492},[52,38985,35504],{"class":94},[52,38987,38988,38990,38992],{"class":54,"line":35501},[52,38989,35275],{"class":79},[52,38991,292],{"class":58},[52,38993,35280],{"class":79},[52,38995,38996],{"class":54,"line":35507},[52,38997,35519],{"class":94},[52,38999,39000],{"class":54,"line":35516},[52,39001,35525],{"class":79},[52,39003,39004],{"class":54,"line":35522},[52,39005,39006],{"class":94},"            # 验证时不计算梯度以节省内存\u002F计算\n",[52,39008,39009,39011],{"class":54,"line":35528},[52,39010,35531],{"class":58},[52,39012,35534],{"class":79},[52,39014,39015],{"class":54,"line":35537},[52,39016,35540],{"class":94},[52,39018,39019,39022,39024],{"class":54,"line":35543},[52,39020,39021],{"class":79},"                output",[52,39023,292],{"class":58},[52,39025,35315],{"class":79},[52,39027,39028],{"class":54,"line":35554},[52,39029,35557],{"class":94},[52,39031,39032,39035,39037,39039,39041,39043,39045],{"class":54,"line":35560},[52,39033,39034],{"class":79},"                pre_lab",[52,39036,292],{"class":58},[52,39038,35332],{"class":79},[52,39040,35335],{"class":1223},[52,39042,292],{"class":58},[52,39044,629],{"class":308},[52,39046,708],{"class":79},[52,39048,39049],{"class":54,"line":35579},[52,39050,35582],{"class":94},[52,39052,39053,39056,39058],{"class":54,"line":35585},[52,39054,39055],{"class":79},"                val_batch_loss",[52,39057,292],{"class":58},[52,39059,35358],{"class":79},[52,39061,39062],{"class":54,"line":35596},[52,39063,35599],{"class":94},[52,39065,39066,39069,39071,39074,39076,39078,39080],{"class":54,"line":35602},[52,39067,39068],{"class":79},"                val_loss",[52,39070,1910],{"class":58},[52,39072,39073],{"class":79},"val_batch_loss.item()",[52,39075,3053],{"class":58},[52,39077,35416],{"class":79},[52,39079,692],{"class":308},[52,39081,708],{"class":79},[52,39083,39084,39087,39089,39091,39093],{"class":54,"line":35622},[52,39085,39086],{"class":79},"                val_corrects",[52,39088,1910],{"class":58},[52,39090,35437],{"class":79},[52,39092,5938],{"class":58},[52,39094,35442],{"class":79},[52,39096,39097],{"class":54,"line":35638},[52,39098,39099],{"class":94},"            # 当前用于验证的样本数量\n",[52,39101,39102,39105,39107,39109,39111],{"class":54,"line":35644},[52,39103,39104],{"class":79},"            val_num",[52,39106,1910],{"class":58},[52,39108,35416],{"class":79},[52,39110,692],{"class":308},[52,39112,708],{"class":79},[52,39114,39115],{"class":54,"line":35658},[52,39116,35661],{"class":94},[52,39118,39119],{"class":54,"line":35664},[52,39120,35667],{"class":94},[52,39122,39123,39125,39127],{"class":54,"line":35670},[52,39124,35673],{"class":79},[52,39126,2340],{"class":58},[52,39128,35678],{"class":79},[52,39130,39131],{"class":54,"line":35681},[52,39132,35684],{"class":94},[52,39134,39135],{"class":54,"line":35687},[52,39136,35690],{"class":94},[52,39138,39139,39141,39143],{"class":54,"line":35693},[52,39140,35696],{"class":79},[52,39142,2340],{"class":58},[52,39144,35678],{"class":79},[52,39146,39147],{"class":54,"line":35703},[52,39148,35706],{"class":94},[52,39150,39151,39153,39155],{"class":54,"line":35709},[52,39152,35712],{"class":79},[52,39154,2340],{"class":58},[52,39156,35717],{"class":79},[52,39158,39159],{"class":54,"line":35720},[52,39160,35723],{"class":94},[52,39162,39163,39165,39167],{"class":54,"line":35726},[52,39164,35729],{"class":79},[52,39166,2340],{"class":58},[52,39168,35717],{"class":79},[52,39170,39171],{"class":54,"line":35736},[52,39172,123],{"emptyLinePlaceholder":122},[52,39174,39175],{"class":54,"line":35741},[52,39176,35744],{"class":94},[52,39178,39179,39181,39183,39185,39187,39189,39191,39193,39195,39197,39199,39201,39203,39205,39207,39209,39211,39213,39215,39217],{"class":54,"line":35747},[52,39180,35101],{"class":308},[52,39182,1216],{"class":79},[52,39184,6573],{"class":62},[52,39186,35109],{"class":308},[52,39188,35758],{"class":62},[52,39190,383],{"class":308},[52,39192,35763],{"class":58},[52,39194,4132],{"class":308},[52,39196,35768],{"class":62},[52,39198,383],{"class":308},[52,39200,35763],{"class":58},[52,39202,4132],{"class":308},[52,39204,6573],{"class":62},[52,39206,35779],{"class":79},[52,39208,2642],{"class":58},[52,39210,629],{"class":308},[52,39212,35786],{"class":79},[52,39214,2642],{"class":58},[52,39216,629],{"class":308},[52,39218,35793],{"class":79},[52,39220,39221,39223,39225,39227,39229,39231,39233,39235,39237,39239,39241,39243,39245,39247,39249,39251,39253,39255,39257,39259],{"class":54,"line":35796},[52,39222,35101],{"class":308},[52,39224,1216],{"class":79},[52,39226,6573],{"class":62},[52,39228,35109],{"class":308},[52,39230,35807],{"class":62},[52,39232,383],{"class":308},[52,39234,35763],{"class":58},[52,39236,4132],{"class":308},[52,39238,35816],{"class":62},[52,39240,383],{"class":308},[52,39242,35763],{"class":58},[52,39244,4132],{"class":308},[52,39246,6573],{"class":62},[52,39248,35827],{"class":79},[52,39250,2642],{"class":58},[52,39252,629],{"class":308},[52,39254,35834],{"class":79},[52,39256,2642],{"class":58},[52,39258,629],{"class":308},[52,39260,35793],{"class":79},[52,39262,39263],{"class":54,"line":35843},[52,39264,123],{"emptyLinePlaceholder":122},[52,39266,39267],{"class":54,"line":35848},[52,39268,35851],{"class":94},[52,39270,39271,39273,39275,39277,39279,39281,39283],{"class":54,"line":35854},[52,39272,5497],{"class":58},[52,39274,35859],{"class":79},[52,39276,2642],{"class":58},[52,39278,629],{"class":308},[52,39280,567],{"class":79},[52,39282,2674],{"class":58},[52,39284,35870],{"class":79},[52,39286,39287],{"class":54,"line":35873},[52,39288,35876],{"class":94},[52,39290,39291,39293,39295,39297,39299,39301,39303],{"class":54,"line":35879},[52,39292,35882],{"class":79},[52,39294,3262],{"class":308},[52,39296,292],{"class":58},[52,39298,35889],{"class":79},[52,39300,2642],{"class":58},[52,39302,629],{"class":308},[52,39304,35896],{"class":79},[52,39306,39307],{"class":54,"line":35899},[52,39308,35902],{"class":94},[52,39310,39311],{"class":54,"line":35905},[52,39312,35908],{"class":94},[52,39314,39315,39317,39319],{"class":54,"line":35911},[52,39316,35914],{"class":79},[52,39318,292],{"class":58},[52,39320,34964],{"class":79},[52,39322,39323],{"class":54,"line":35921},[52,39324,123],{"emptyLinePlaceholder":122},[52,39326,39327],{"class":54,"line":35926},[52,39328,35929],{"class":94},[52,39330,39331,39333,39335,39337,39339],{"class":54,"line":35932},[52,39332,35935],{"class":79},[52,39334,292],{"class":58},[52,39336,35940],{"class":79},[52,39338,2642],{"class":58},[52,39340,35945],{"class":79},[52,39342,39343,39345,39347,39349,39351,39353,39355,39357,39359,39361,39363,39365,39367,39369,39371,39373,39375,39377],{"class":54,"line":35948},[52,39344,35101],{"class":308},[52,39346,1216],{"class":79},[52,39348,35955],{"class":62},[52,39350,383],{"class":308},[52,39352,35960],{"class":58},[52,39354,4132],{"class":308},[52,39356,3743],{"class":62},[52,39358,383],{"class":308},[52,39360,35960],{"class":58},[52,39362,4132],{"class":308},[52,39364,35973],{"class":62},[52,39366,35976],{"class":79},[52,39368,35979],{"class":58},[52,39370,2001],{"class":308},[52,39372,35984],{"class":79},[52,39374,1998],{"class":58},[52,39376,2001],{"class":308},[52,39378,33147],{"class":79},[52,39380,39381],{"class":54,"line":35993},[52,39382,39383],{"class":94},"    # 选择最优参数并保存\n",[52,39385,39386],{"class":54,"line":35999},[52,39387,39388],{"class":94},"    # 保存最佳模型权重字典\n",[52,39390,39391,39394,39396],{"class":54,"line":36005},[52,39392,39393],{"class":79},"    torch.save(best_model_wts,",[52,39395,36017],{"class":62},[52,39397,708],{"class":79},[52,39399,39400],{"class":54,"line":36011},[52,39401,36037],{"class":94},[52,39403,39404,39406,39408,39410,39412,39414],{"class":54,"line":36022},[52,39405,36043],{"class":79},[52,39407,292],{"class":58},[52,39409,36048],{"class":79},[52,39411,36051],{"class":1223},[52,39413,292],{"class":58},[52,39415,110],{"class":79},[52,39417,39418,39420,39422,39424],{"class":54,"line":36028},[52,39419,36061],{"class":62},[52,39421,4049],{"class":79},[52,39423,36066],{"class":308},[52,39425,36069],{"class":79},[52,39427,39428,39430],{"class":54,"line":36034},[52,39429,36075],{"class":62},[52,39431,36078],{"class":79},[52,39433,39434,39436],{"class":54,"line":36040},[52,39435,36084],{"class":62},[52,39437,36087],{"class":79},[52,39439,39440,39442],{"class":54,"line":36058},[52,39441,36093],{"class":62},[52,39443,36096],{"class":79},[52,39445,39446,39448],{"class":54,"line":36072},[52,39447,36102],{"class":62},[52,39449,36105],{"class":79},[52,39451,39452],{"class":54,"line":36081},[52,39453,36111],{"class":79},[52,39455,39456],{"class":54,"line":36090},[52,39457,36117],{"class":94},[52,39459,39460,39462],{"class":54,"line":36099},[52,39461,1441],{"class":58},[52,39463,36125],{"class":79},[52,39465,39466],{"class":54,"line":36108},[52,39467,123],{"emptyLinePlaceholder":122},[52,39469,39470],{"class":54,"line":36114},[52,39471,36136],{"class":94},[52,39473,39474,39476,39478],{"class":54,"line":36120},[52,39475,34597],{"class":58},[52,39477,36144],{"class":75},[52,39479,36147],{"class":79},[52,39481,39482],{"class":54,"line":36128},[52,39483,36153],{"class":94},[52,39485,39486,39488,39490,39492,39494,39496,39498,39500],{"class":54,"line":36133},[52,39487,36159],{"class":79},[52,39489,34343],{"class":1223},[52,39491,292],{"class":58},[52,39493,1216],{"class":79},[52,39495,3698],{"class":308},[52,39497,389],{"class":79},[52,39499,3504],{"class":308},[52,39501,33147],{"class":79},[52,39503,39504],{"class":54,"line":36139},[52,39505,36179],{"class":94},[52,39507,39508],{"class":54,"line":36150},[52,39509,36185],{"class":94},[52,39511,39512],{"class":54,"line":36156},[52,39513,36191],{"class":94},[52,39515,39516,39518,39520,39522,39524,39526,39528],{"class":54,"line":36176},[52,39517,34377],{"class":79},[52,39519,629],{"class":308},[52,39521,389],{"class":79},[52,39523,564],{"class":308},[52,39525,389],{"class":79},[52,39527,629],{"class":308},[52,39529,708],{"class":79},[52,39531,39532],{"class":54,"line":36182},[52,39533,36214],{"class":94},[52,39535,39536],{"class":54,"line":36188},[52,39537,36220],{"class":94},[52,39539,39540],{"class":54,"line":36194},[52,39541,36226],{"class":94},[52,39543,39544],{"class":54,"line":36211},[52,39545,36232],{"class":94},[52,39547,39548],{"class":54,"line":36217},[52,39549,36238],{"class":94},[52,39551,39552,39554,39556,39558,39560,39562,39564,39566,39568],{"class":54,"line":36223},[52,39553,36244],{"class":79},[52,39555,36247],{"class":62},[52,39557,36250],{"class":79},[52,39559,36253],{"class":62},[52,39561,389],{"class":79},[52,39563,36258],{"class":1223},[52,39565,292],{"class":58},[52,39567,36263],{"class":62},[52,39569,708],{"class":79},[52,39571,39572,39574,39576,39578,39580,39582,39584,39586,39588],{"class":54,"line":36229},[52,39573,36244],{"class":79},[52,39575,36247],{"class":62},[52,39577,36275],{"class":79},[52,39579,36278],{"class":62},[52,39581,389],{"class":79},[52,39583,36258],{"class":1223},[52,39585,292],{"class":58},[52,39587,36287],{"class":62},[52,39589,708],{"class":79},[52,39591,39592],{"class":54,"line":36235},[52,39593,36295],{"class":94},[52,39595,39596],{"class":54,"line":36241},[52,39597,36301],{"class":79},[52,39599,39600],{"class":54,"line":36268},[52,39601,36307],{"class":94},[52,39603,39604,39606,39608],{"class":54,"line":36292},[52,39605,36313],{"class":79},[52,39607,36316],{"class":62},[52,39609,708],{"class":79},[52,39611,39612,39614,39616],{"class":54,"line":36298},[52,39613,36324],{"class":79},[52,39615,36327],{"class":62},[52,39617,708],{"class":79},[52,39619,39620],{"class":54,"line":36304},[52,39621,36335],{"class":94},[52,39623,39624,39626,39628,39630,39632,39634,39636],{"class":54,"line":36310},[52,39625,34377],{"class":79},[52,39627,629],{"class":308},[52,39629,389],{"class":79},[52,39631,564],{"class":308},[52,39633,389],{"class":79},[52,39635,564],{"class":308},[52,39637,708],{"class":79},[52,39639,39640,39642,39644,39646,39648,39650,39652,39654,39656],{"class":54,"line":36321},[52,39641,36244],{"class":79},[52,39643,36247],{"class":62},[52,39645,36362],{"class":79},[52,39647,36253],{"class":62},[52,39649,389],{"class":79},[52,39651,36258],{"class":1223},[52,39653,292],{"class":58},[52,39655,36373],{"class":62},[52,39657,708],{"class":79},[52,39659,39660,39662,39664,39666,39668,39670,39672,39674,39676],{"class":54,"line":36332},[52,39661,36244],{"class":79},[52,39663,36247],{"class":62},[52,39665,36385],{"class":79},[52,39667,36278],{"class":62},[52,39669,389],{"class":79},[52,39671,36258],{"class":1223},[52,39673,292],{"class":58},[52,39675,36396],{"class":62},[52,39677,708],{"class":79},[52,39679,39680],{"class":54,"line":36338},[52,39681,36404],{"class":94},[52,39683,39684],{"class":54,"line":36355},[52,39685,36301],{"class":79},[52,39687,39688,39690,39692],{"class":54,"line":36378},[52,39689,36313],{"class":79},[52,39691,36247],{"class":62},[52,39693,708],{"class":79},[52,39695,39696,39698,39700],{"class":54,"line":36401},[52,39697,36324],{"class":79},[52,39699,36426],{"class":62},[52,39701,708],{"class":79},[52,39703,39704],{"class":54,"line":36407},[52,39705,36434],{"class":79},[52,39707,39708],{"class":54,"line":36412},[52,39709,123],{"emptyLinePlaceholder":122},[52,39711,39712],{"class":54,"line":36421},[52,39713,36445],{"class":94},[52,39715,39716,39718,39720,39722,39724],{"class":54,"line":36431},[52,39717,4578],{"class":58},[52,39719,33870],{"class":308},[52,39721,5938],{"class":58},[52,39723,33875],{"class":62},[52,39725,6718],{"class":79},[52,39727,39728],{"class":54,"line":36437},[52,39729,36464],{"class":94},[52,39731,39732,39735,39737],{"class":54,"line":36442},[52,39733,39734],{"class":79},"    AlexNet",[52,39736,292],{"class":58},[52,39738,39739],{"class":79},"AlexNet()\n",[52,39741,39742,39744,39746],{"class":54,"line":36448},[52,39743,36481],{"class":79},[52,39745,292],{"class":58},[52,39747,36486],{"class":79},[52,39749,39750,39752,39754,39757,39759,39761,39763],{"class":54,"line":36461},[52,39751,36043],{"class":79},[52,39753,292],{"class":58},[52,39755,39756],{"class":79},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[52,39758,36499],{"class":1223},[52,39760,292],{"class":58},[52,39762,444],{"class":308},[52,39764,708],{"class":79},[52,39766,39767],{"class":54,"line":36467},[52,39768,36511],{"class":79},[1696,39770,39771],{"start":83},[32,39772,36524],{},[42,39774,39776],{"className":33028,"code":39775,"language":33030,"meta":47,"style":47},"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",[49,39777,39778,39784,39794,39804,39814,39818,39828,39838,39849,39853,39857,39861,39869,39885,39895,39911,39921,39935,39939,39949,39959,39969,39975,39979,39983,39991,39995,40011,40019,40023,40027,40035,40043,40047,40051,40055,40059,40065,40069,40079,40087,40095,40099,40103,40107,40115,40119,40135,40139,40143,40147,40159,40163,40175,40179,40183,40195,40199,40209,40213,40217,40229,40233,40241,40245,40249,40257,40261,40269,40273,40277,40281,40285,40289,40305,40313,40317,40321,40369,40375,40379,40389,40397,40405,40409,40413,40417,40421,40429,40433,40449,40453,40461,40469],{"__ignoreMap":47},[52,39779,39780,39782],{"class":54,"line":55},[52,39781,33042],{"class":58},[52,39783,33045],{"class":79},[52,39785,39786,39788,39790,39792],{"class":54,"line":66},[52,39787,33042],{"class":58},[52,39789,34065],{"class":79},[52,39791,34033],{"class":58},[52,39793,34070],{"class":79},[52,39795,39796,39798,39800,39802],{"class":54,"line":83},[52,39797,33387],{"class":58},[52,39799,36552],{"class":79},[52,39801,33042],{"class":58},[52,39803,36557],{"class":79},[52,39805,39806,39808,39810,39812],{"class":54,"line":91},[52,39807,33387],{"class":58},[52,39809,34048],{"class":79},[52,39811,33042],{"class":58},[52,39813,34053],{"class":79},[52,39815,39816],{"class":54,"line":98},[52,39817,36572],{"class":94},[52,39819,39820,39822,39824,39826],{"class":54,"line":107},[52,39821,33387],{"class":58},[52,39823,34018],{"class":79},[52,39825,33042],{"class":58},[52,39827,34023],{"class":79},[52,39829,39830,39832,39834,39836],{"class":54,"line":113},[52,39831,33387],{"class":58},[52,39833,34564],{"class":79},[52,39835,33042],{"class":58},[52,39837,38207],{"class":79},[52,39839,39840,39842,39845,39847],{"class":54,"line":119},[52,39841,33387],{"class":58},[52,39843,39844],{"class":79}," 练习.AlexNet.model ",[52,39846,33042],{"class":58},[52,39848,38207],{"class":79},[52,39850,39851],{"class":54,"line":126},[52,39852,123],{"emptyLinePlaceholder":122},[52,39854,39855],{"class":54,"line":132},[52,39856,123],{"emptyLinePlaceholder":122},[52,39858,39859],{"class":54,"line":138},[52,39860,36601],{"class":94},[52,39862,39863,39865,39867],{"class":54,"line":144},[52,39864,34597],{"class":58},[52,39866,36608],{"class":75},[52,39868,34603],{"class":79},[52,39870,39871,39873,39875,39877,39879,39881,39883],{"class":54,"line":153},[52,39872,36615],{"class":79},[52,39874,292],{"class":58},[52,39876,34105],{"class":79},[52,39878,34108],{"class":1223},[52,39880,292],{"class":58},[52,39882,34113],{"class":62},[52,39884,34116],{"class":79},[52,39886,39887,39889,39891,39893],{"class":54,"line":159},[52,39888,36632],{"class":1223},[52,39890,292],{"class":58},[52,39892,36637],{"class":308},[52,39894,34116],{"class":79},[52,39896,39897,39899,39901,39903,39905,39907,39909],{"class":54,"line":167},[52,39898,36644],{"class":1223},[52,39900,292],{"class":58},[52,39902,34143],{"class":79},[52,39904,34146],{"class":1223},[52,39906,292],{"class":58},[52,39908,38099],{"class":308},[52,39910,34154],{"class":79},[52,39912,39913,39915,39917,39919],{"class":54,"line":173},[52,39914,36661],{"class":1223},[52,39916,292],{"class":58},[52,39918,34126],{"class":308},[52,39920,708],{"class":79},[52,39922,39923,39925,39927,39929,39931,39933],{"class":54,"line":181},[52,39924,36672],{"class":79},[52,39926,292],{"class":58},[52,39928,34184],{"class":79},[52,39930,34187],{"class":1223},[52,39932,292],{"class":58},[52,39934,36683],{"class":79},[52,39936,39937],{"class":54,"line":186},[52,39938,36688],{"class":94},[52,39940,39941,39943,39945,39947],{"class":54,"line":191},[52,39942,36693],{"class":1223},[52,39944,292],{"class":58},[52,39946,629],{"class":308},[52,39948,34116],{"class":79},[52,39950,39951,39953,39955,39957],{"class":54,"line":196},[52,39952,36704],{"class":1223},[52,39954,292],{"class":58},[52,39956,34126],{"class":308},[52,39958,34116],{"class":79},[52,39960,39961,39963,39965,39967],{"class":54,"line":201},[52,39962,36715],{"class":1223},[52,39964,292],{"class":58},[52,39966,692],{"class":308},[52,39968,708],{"class":79},[52,39970,39971,39973],{"class":54,"line":206},[52,39972,1441],{"class":58},[52,39974,36728],{"class":79},[52,39976,39977],{"class":54,"line":211},[52,39978,123],{"emptyLinePlaceholder":122},[52,39980,39981],{"class":54,"line":218},[52,39982,36737],{"class":94},[52,39984,39985,39987,39989],{"class":54,"line":223},[52,39986,34597],{"class":58},[52,39988,36744],{"class":75},[52,39990,36747],{"class":79},[52,39992,39993],{"class":54,"line":230},[52,39994,36752],{"class":94},[52,39996,39997,39999,40001,40003,40005,40007,40009],{"class":54,"line":239},[52,39998,33887],{"class":79},[52,40000,292],{"class":58},[52,40002,33894],{"class":62},[52,40004,4736],{"class":58},[52,40006,33899],{"class":79},[52,40008,4733],{"class":58},[52,40010,36769],{"class":62},[52,40012,40013,40015,40017],{"class":54,"line":251},[52,40014,33939],{"class":79},[52,40016,292],{"class":58},[52,40018,34939],{"class":79},[52,40020,40021],{"class":54,"line":256},[52,40022,123],{"emptyLinePlaceholder":122},[52,40024,40025],{"class":54,"line":262},[52,40026,36786],{"class":94},[52,40028,40029,40031,40033],{"class":54,"line":268},[52,40030,36791],{"class":79},[52,40032,292],{"class":58},[52,40034,34992],{"class":308},[52,40036,40037,40039,40041],{"class":54,"line":280},[52,40038,36800],{"class":79},[52,40040,292],{"class":58},[52,40042,6072],{"class":308},[52,40044,40045],{"class":54,"line":286},[52,40046,123],{"emptyLinePlaceholder":122},[52,40048,40049],{"class":54,"line":300},[52,40050,36813],{"class":94},[52,40052,40053],{"class":54,"line":314},[52,40054,36818],{"class":94},[52,40056,40057],{"class":54,"line":327},[52,40058,36823],{"class":94},[52,40060,40061,40063],{"class":54,"line":333},[52,40062,36828],{"class":58},[52,40064,35534],{"class":79},[52,40066,40067],{"class":54,"line":360},[52,40068,36835],{"class":94},[52,40070,40071,40073,40075,40077],{"class":54,"line":365},[52,40072,1927],{"class":58},[52,40074,36842],{"class":79},[52,40076,28693],{"class":58},[52,40078,36847],{"class":79},[52,40080,40081,40083,40085],{"class":54,"line":371},[52,40082,36852],{"class":79},[52,40084,292],{"class":58},[52,40086,36857],{"class":79},[52,40088,40089,40091,40093],{"class":54,"line":400},[52,40090,36862],{"class":79},[52,40092,292],{"class":58},[52,40094,36867],{"class":79},[52,40096,40097],{"class":54,"line":405},[52,40098,36872],{"class":94},[52,40100,40101],{"class":54,"line":411},[52,40102,35525],{"class":79},[52,40104,40105],{"class":54,"line":424},[52,40106,36881],{"class":94},[52,40108,40109,40111,40113],{"class":54,"line":436},[52,40110,35310],{"class":79},[52,40112,292],{"class":58},[52,40114,36890],{"class":79},[52,40116,40117],{"class":54,"line":449},[52,40118,36895],{"class":94},[52,40120,40121,40123,40125,40127,40129,40131,40133],{"class":54,"line":2160},[52,40122,35327],{"class":79},[52,40124,292],{"class":58},[52,40126,35332],{"class":79},[52,40128,35335],{"class":1223},[52,40130,292],{"class":58},[52,40132,629],{"class":308},[52,40134,708],{"class":79},[52,40136,40137],{"class":54,"line":2186},[52,40138,36916],{"class":94},[52,40140,40141],{"class":54,"line":2209},[52,40142,36921],{"class":94},[52,40144,40145],{"class":54,"line":2233},[52,40146,36926],{"class":94},[52,40148,40149,40151,40153,40155,40157],{"class":54,"line":2238},[52,40150,36931],{"class":79},[52,40152,1910],{"class":58},[52,40154,35437],{"class":79},[52,40156,5938],{"class":58},[52,40158,36940],{"class":79},[52,40160,40161],{"class":54,"line":2243},[52,40162,36945],{"class":94},[52,40164,40165,40167,40169,40171,40173],{"class":54,"line":2248},[52,40166,36950],{"class":79},[52,40168,1910],{"class":58},[52,40170,36955],{"class":79},[52,40172,692],{"class":308},[52,40174,708],{"class":79},[52,40176,40177],{"class":54,"line":2257},[52,40178,123],{"emptyLinePlaceholder":122},[52,40180,40181],{"class":54,"line":2262},[52,40182,36968],{"class":94},[52,40184,40185,40187,40189,40191,40193],{"class":54,"line":2268},[52,40186,36973],{"class":79},[52,40188,292],{"class":58},[52,40190,36978],{"class":79},[52,40192,2340],{"class":58},[52,40194,36983],{"class":79},[52,40196,40197],{"class":54,"line":2297},[52,40198,36988],{"class":94},[52,40200,40201,40203,40205,40207],{"class":54,"line":2303},[52,40202,35101],{"class":308},[52,40204,1216],{"class":79},[52,40206,36997],{"class":62},[52,40208,37000],{"class":79},[52,40210,40211],{"class":54,"line":2318},[52,40212,123],{"emptyLinePlaceholder":122},[52,40214,40215],{"class":54,"line":2324},[52,40216,37009],{"class":94},[52,40218,40219,40221,40223,40225,40227],{"class":54,"line":2353},[52,40220,4578],{"class":58},[52,40222,33870],{"class":308},[52,40224,5938],{"class":58},[52,40226,33875],{"class":62},[52,40228,6718],{"class":79},[52,40230,40231],{"class":54,"line":2362},[52,40232,37026],{"class":94},[52,40234,40235,40237,40239],{"class":54,"line":2368},[52,40236,33939],{"class":79},[52,40238,292],{"class":58},[52,40240,39739],{"class":79},[52,40242,40243],{"class":54,"line":2376},[52,40244,37039],{"class":94},[52,40246,40247],{"class":54,"line":2381},[52,40248,37044],{"class":94},[52,40250,40251,40253,40255],{"class":54,"line":19252},[52,40252,37049],{"class":79},[52,40254,37052],{"class":62},[52,40256,33147],{"class":79},[52,40258,40259],{"class":54,"line":19258},[52,40260,37059],{"class":94},[52,40262,40263,40265,40267],{"class":54,"line":19281},[52,40264,36672],{"class":79},[52,40266,292],{"class":58},[52,40268,37068],{"class":79},[52,40270,40271],{"class":54,"line":19287},[52,40272,37073],{"class":94},[52,40274,40275],{"class":54,"line":19310},[52,40276,37078],{"class":79},[52,40278,40279],{"class":54,"line":19324},[52,40280,123],{"emptyLinePlaceholder":122},[52,40282,40283],{"class":54,"line":19344},[52,40284,37087],{"class":94},[52,40286,40287],{"class":54,"line":19350},[52,40288,37092],{"class":94},[52,40290,40291,40293,40295,40297,40299,40301,40303],{"class":54,"line":19361},[52,40292,33887],{"class":79},[52,40294,292],{"class":58},[52,40296,33894],{"class":62},[52,40298,4736],{"class":58},[52,40300,33899],{"class":79},[52,40302,4733],{"class":58},[52,40304,36769],{"class":62},[52,40306,40307,40309,40311],{"class":54,"line":19384},[52,40308,33939],{"class":79},[52,40310,292],{"class":58},[52,40312,34939],{"class":79},[52,40314,40315],{"class":54,"line":19406},[52,40316,37121],{"class":94},[52,40318,40319],{"class":54,"line":19411},[52,40320,37126],{"class":94},[52,40322,40323,40325,40327,40329,40331,40333,40335,40337,40339,40341,40343,40345,40347,40349,40351,40353,40355,40357,40359,40361,40363,40365,40367],{"class":54,"line":19417},[52,40324,37131],{"class":79},[52,40326,292],{"class":58},[52,40328,4080],{"class":79},[52,40330,37138],{"class":62},[52,40332,389],{"class":79},[52,40334,37143],{"class":62},[52,40336,389],{"class":79},[52,40338,37148],{"class":62},[52,40340,389],{"class":79},[52,40342,37153],{"class":62},[52,40344,389],{"class":79},[52,40346,37158],{"class":62},[52,40348,389],{"class":79},[52,40350,37163],{"class":62},[52,40352,389],{"class":79},[52,40354,37168],{"class":62},[52,40356,389],{"class":79},[52,40358,37173],{"class":62},[52,40360,389],{"class":79},[52,40362,37178],{"class":62},[52,40364,389],{"class":79},[52,40366,37183],{"class":62},[52,40368,35896],{"class":79},[52,40370,40371,40373],{"class":54,"line":19431},[52,40372,36828],{"class":58},[52,40374,35534],{"class":79},[52,40376,40377],{"class":54,"line":19444},[52,40378,37196],{"class":94},[52,40380,40381,40383,40385,40387],{"class":54,"line":19449},[52,40382,1927],{"class":58},[52,40384,37203],{"class":79},[52,40386,28693],{"class":58},[52,40388,36847],{"class":79},[52,40390,40391,40393,40395],{"class":54,"line":19463},[52,40392,35260],{"class":79},[52,40394,292],{"class":58},[52,40396,35265],{"class":79},[52,40398,40399,40401,40403],{"class":54,"line":19468},[52,40400,35275],{"class":79},[52,40402,292],{"class":58},[52,40404,35280],{"class":79},[52,40406,40407],{"class":54,"line":19474},[52,40408,123],{"emptyLinePlaceholder":122},[52,40410,40411],{"class":54,"line":19479},[52,40412,37232],{"class":94},[52,40414,40415],{"class":54,"line":19493},[52,40416,35525],{"class":79},[52,40418,40419],{"class":54,"line":19498},[52,40420,37241],{"class":94},[52,40422,40423,40425,40427],{"class":54,"line":19503},[52,40424,35310],{"class":79},[52,40426,292],{"class":58},[52,40428,35315],{"class":79},[52,40430,40431],{"class":54,"line":19517},[52,40432,37254],{"class":94},[52,40434,40435,40437,40439,40441,40443,40445,40447],{"class":54,"line":19529},[52,40436,35327],{"class":79},[52,40438,292],{"class":58},[52,40440,35332],{"class":79},[52,40442,35335],{"class":1223},[52,40444,292],{"class":58},[52,40446,629],{"class":308},[52,40448,708],{"class":79},[52,40450,40451],{"class":54,"line":19534},[52,40452,37275],{"class":94},[52,40454,40455,40457,40459],{"class":54,"line":19547},[52,40456,37280],{"class":79},[52,40458,292],{"class":58},[52,40460,37285],{"class":79},[52,40462,40463,40465,40467],{"class":54,"line":19552},[52,40464,37290],{"class":79},[52,40466,292],{"class":58},[52,40468,37295],{"class":79},[52,40470,40471,40473,40475,40477,40479,40481,40483,40485],{"class":54,"line":19557},[52,40472,37300],{"class":308},[52,40474,1216],{"class":79},[52,40476,37305],{"class":62},[52,40478,37308],{"class":79},[52,40480,37311],{"class":62},[52,40482,389],{"class":79},[52,40484,37316],{"class":62},[52,40486,37319],{"class":79},[3195,40488,40490],{"id":40489},"_22vgg","2.2.VGG",[24646,40492,40494],{"id":40493},"_221原理","2.2.1.原理",[14,40496,40497],{},[4509,40498],{"alt":47,"src":40499},"\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,40501,40502],{},[4509,40503],{"alt":47,"src":40504},"\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,40506,40507],{},[4509,40508],{"alt":47,"src":40509},"\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,40511,40512],{},"参数详细描述：",[14,40514,40515],{},[4509,40516],{"alt":47,"src":40517},"\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,40519,40520],{},[4509,40521],{"alt":47,"src":40522},"\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,40524,40525],{},[4509,40526],{"alt":47,"src":40527},"\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,40529,40530],{},[4509,40531],{"alt":47,"src":40532},"\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,40534,40535],{},[4509,40536],{"alt":47,"src":40537},"\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",[24646,40539,40541],{"id":40540},"_222代码实现","2.2.2.代码实现",[1696,40543,40544],{},[32,40545,40546],{},"网络搭建",[42,40548,40550],{"className":33028,"code":40549,"language":33030,"meta":47,"style":47},"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",[49,40551,40552,40558,40570,40580,40590,40594,40611,40619,40638,40643,40648,40660,40698,40703,40739,40743,40772,40777,40782,40793,40829,40833,40869,40873,40901,40905,40910,40921,40957,40961,40997,41001,41037,41041,41069,41073,41078,41089,41126,41130,41166,41170,41206,41210,41238,41242,41247,41258,41294,41298,41334,41338,41374,41378,41406,41410,41415,41426,41431,41436,41441,41462,41466,41478,41482,41494,41498,41502,41507,41512,41527,41532,41542,41547,41562,41567,41586,41591,41600,41605,41615,41620,41625,41639,41644,41658,41666,41670,41674,41682,41693,41704,41715,41726,41737,41748,41754,41758,41763,41776,41796,41802,41811],{"__ignoreMap":47},[52,40553,40554,40556],{"class":54,"line":55},[52,40555,33042],{"class":58},[52,40557,33045],{"class":79},[52,40559,40560,40562,40565,40567],{"class":54,"line":66},[52,40561,33387],{"class":58},[52,40563,40564],{"class":79}," sympy.core.sympify ",[52,40566,33042],{"class":58},[52,40568,40569],{"class":79}," kernS\n",[52,40571,40572,40574,40576,40578],{"class":54,"line":83},[52,40573,33387],{"class":58},[52,40575,33390],{"class":79},[52,40577,33042],{"class":58},[52,40579,33395],{"class":79},[52,40581,40582,40584,40586,40588],{"class":54,"line":91},[52,40583,33387],{"class":58},[52,40585,33407],{"class":79},[52,40587,33042],{"class":58},[52,40589,33412],{"class":79},[52,40591,40592],{"class":54,"line":98},[52,40593,123],{"emptyLinePlaceholder":122},[52,40595,40596,40598,40601,40603,40605,40607,40609],{"class":54,"line":107},[52,40597,17342],{"class":58},[52,40599,40600],{"class":75}," VGG16",[52,40602,1216],{"class":79},[52,40604,33428],{"class":75},[52,40606,3757],{"class":79},[52,40608,33433],{"class":75},[52,40610,33436],{"class":79},[52,40612,40613,40615,40617],{"class":54,"line":113},[52,40614,33451],{"class":58},[52,40616,33454],{"class":308},[52,40618,33457],{"class":79},[52,40620,40621,40623,40625,40628,40630,40632,40634,40636],{"class":54,"line":119},[52,40622,33467],{"class":308},[52,40624,1216],{"class":79},[52,40626,40627],{"class":308},"VGG16",[52,40629,15083],{"class":79},[52,40631,33473],{"class":308},[52,40633,33476],{"class":79},[52,40635,33479],{"class":308},[52,40637,248],{"class":79},[52,40639,40640],{"class":54,"line":126},[52,40641,40642],{"class":94},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[52,40644,40645],{"class":54,"line":132},[52,40646,40647],{"class":94},"        # 这里用的是灰度图\n",[52,40649,40650,40652,40655,40657],{"class":54,"line":138},[52,40651,33495],{"class":308},[52,40653,40654],{"class":79},".block1",[52,40656,292],{"class":58},[52,40658,40659],{"class":79},"nn.Sequential(\n",[52,40661,40662,40665,40667,40669,40671,40673,40675,40677,40679,40681,40683,40685,40687,40689,40691,40693,40695],{"class":54,"line":144},[52,40663,40664],{"class":79},"            nn.Conv2d(",[52,40666,33506],{"class":1223},[52,40668,292],{"class":58},[52,40670,629],{"class":308},[52,40672,389],{"class":79},[52,40674,33515],{"class":1223},[52,40676,292],{"class":58},[52,40678,3417],{"class":308},[52,40680,389],{"class":79},[52,40682,33524],{"class":1223},[52,40684,292],{"class":58},[52,40686,2313],{"class":308},[52,40688,389],{"class":79},[52,40690,33533],{"class":1223},[52,40692,292],{"class":58},[52,40694,629],{"class":308},[52,40696,40697],{"class":79},"),\n",[52,40699,40700],{"class":54,"line":153},[52,40701,40702],{"class":79},"            nn.ReLU(),\n",[52,40704,40705,40707,40709,40711,40713,40715,40717,40719,40721,40723,40725,40727,40729,40731,40733,40735,40737],{"class":54,"line":159},[52,40706,40664],{"class":79},[52,40708,33506],{"class":1223},[52,40710,292],{"class":58},[52,40712,3417],{"class":308},[52,40714,389],{"class":79},[52,40716,33515],{"class":1223},[52,40718,292],{"class":58},[52,40720,3417],{"class":308},[52,40722,389],{"class":79},[52,40724,33524],{"class":1223},[52,40726,292],{"class":58},[52,40728,2313],{"class":308},[52,40730,389],{"class":79},[52,40732,33533],{"class":1223},[52,40734,292],{"class":58},[52,40736,629],{"class":308},[52,40738,40697],{"class":79},[52,40740,40741],{"class":54,"line":167},[52,40742,40702],{"class":79},[52,40744,40745,40748,40750,40752,40754,40756,40758,40760,40762,40764,40766,40768,40770],{"class":54,"line":173},[52,40746,40747],{"class":79},"            nn.MaxPool2d(",[52,40749,33524],{"class":1223},[52,40751,292],{"class":58},[52,40753,564],{"class":308},[52,40755,389],{"class":79},[52,40757,33579],{"class":1223},[52,40759,292],{"class":58},[52,40761,564],{"class":308},[52,40763,389],{"class":79},[52,40765,33533],{"class":1223},[52,40767,292],{"class":58},[52,40769,692],{"class":308},[52,40771,708],{"class":79},[52,40773,40774],{"class":54,"line":181},[52,40775,40776],{"class":79},"        )\n",[52,40778,40779],{"class":54,"line":186},[52,40780,40781],{"class":94},"        # 第二层\n",[52,40783,40784,40786,40789,40791],{"class":54,"line":191},[52,40785,33495],{"class":308},[52,40787,40788],{"class":79},".block2",[52,40790,292],{"class":58},[52,40792,40659],{"class":79},[52,40794,40795,40797,40799,40801,40803,40805,40807,40809,40811,40813,40815,40817,40819,40821,40823,40825,40827],{"class":54,"line":196},[52,40796,40664],{"class":79},[52,40798,33506],{"class":1223},[52,40800,292],{"class":58},[52,40802,3417],{"class":308},[52,40804,389],{"class":79},[52,40806,33515],{"class":1223},[52,40808,292],{"class":58},[52,40810,34720],{"class":308},[52,40812,389],{"class":79},[52,40814,33524],{"class":1223},[52,40816,292],{"class":58},[52,40818,2313],{"class":308},[52,40820,389],{"class":79},[52,40822,33533],{"class":1223},[52,40824,292],{"class":58},[52,40826,629],{"class":308},[52,40828,40697],{"class":79},[52,40830,40831],{"class":54,"line":201},[52,40832,40702],{"class":79},[52,40834,40835,40837,40839,40841,40843,40845,40847,40849,40851,40853,40855,40857,40859,40861,40863,40865,40867],{"class":54,"line":206},[52,40836,40664],{"class":79},[52,40838,33506],{"class":1223},[52,40840,292],{"class":58},[52,40842,34720],{"class":308},[52,40844,389],{"class":79},[52,40846,33515],{"class":1223},[52,40848,292],{"class":58},[52,40850,34720],{"class":308},[52,40852,389],{"class":79},[52,40854,33524],{"class":1223},[52,40856,292],{"class":58},[52,40858,2313],{"class":308},[52,40860,389],{"class":79},[52,40862,33533],{"class":1223},[52,40864,292],{"class":58},[52,40866,629],{"class":308},[52,40868,40697],{"class":79},[52,40870,40871],{"class":54,"line":211},[52,40872,40702],{"class":79},[52,40874,40875,40877,40879,40881,40883,40885,40887,40889,40891,40893,40895,40897,40899],{"class":54,"line":218},[52,40876,40747],{"class":79},[52,40878,33524],{"class":1223},[52,40880,292],{"class":58},[52,40882,564],{"class":308},[52,40884,389],{"class":79},[52,40886,33579],{"class":1223},[52,40888,292],{"class":58},[52,40890,564],{"class":308},[52,40892,389],{"class":79},[52,40894,33533],{"class":1223},[52,40896,292],{"class":58},[52,40898,692],{"class":308},[52,40900,708],{"class":79},[52,40902,40903],{"class":54,"line":223},[52,40904,40776],{"class":79},[52,40906,40907],{"class":54,"line":230},[52,40908,40909],{"class":94},"        # 第三层\n",[52,40911,40912,40914,40917,40919],{"class":54,"line":239},[52,40913,33495],{"class":308},[52,40915,40916],{"class":79},".block3",[52,40918,292],{"class":58},[52,40920,40659],{"class":79},[52,40922,40923,40925,40927,40929,40931,40933,40935,40937,40939,40941,40943,40945,40947,40949,40951,40953,40955],{"class":54,"line":251},[52,40924,40664],{"class":79},[52,40926,33506],{"class":1223},[52,40928,292],{"class":58},[52,40930,34720],{"class":308},[52,40932,389],{"class":79},[52,40934,33515],{"class":1223},[52,40936,292],{"class":58},[52,40938,37520],{"class":308},[52,40940,389],{"class":79},[52,40942,33524],{"class":1223},[52,40944,292],{"class":58},[52,40946,2313],{"class":308},[52,40948,389],{"class":79},[52,40950,33533],{"class":1223},[52,40952,292],{"class":58},[52,40954,629],{"class":308},[52,40956,40697],{"class":79},[52,40958,40959],{"class":54,"line":256},[52,40960,40702],{"class":79},[52,40962,40963,40965,40967,40969,40971,40973,40975,40977,40979,40981,40983,40985,40987,40989,40991,40993,40995],{"class":54,"line":262},[52,40964,40664],{"class":79},[52,40966,33506],{"class":1223},[52,40968,292],{"class":58},[52,40970,37520],{"class":308},[52,40972,389],{"class":79},[52,40974,33515],{"class":1223},[52,40976,292],{"class":58},[52,40978,37520],{"class":308},[52,40980,389],{"class":79},[52,40982,33524],{"class":1223},[52,40984,292],{"class":58},[52,40986,2313],{"class":308},[52,40988,389],{"class":79},[52,40990,33533],{"class":1223},[52,40992,292],{"class":58},[52,40994,629],{"class":308},[52,40996,40697],{"class":79},[52,40998,40999],{"class":54,"line":268},[52,41000,40702],{"class":79},[52,41002,41003,41005,41007,41009,41011,41013,41015,41017,41019,41021,41023,41025,41027,41029,41031,41033,41035],{"class":54,"line":280},[52,41004,40664],{"class":79},[52,41006,33506],{"class":1223},[52,41008,292],{"class":58},[52,41010,37520],{"class":308},[52,41012,389],{"class":79},[52,41014,33515],{"class":1223},[52,41016,292],{"class":58},[52,41018,37520],{"class":308},[52,41020,389],{"class":79},[52,41022,33524],{"class":1223},[52,41024,292],{"class":58},[52,41026,2313],{"class":308},[52,41028,389],{"class":79},[52,41030,33533],{"class":1223},[52,41032,292],{"class":58},[52,41034,629],{"class":308},[52,41036,40697],{"class":79},[52,41038,41039],{"class":54,"line":286},[52,41040,40702],{"class":79},[52,41042,41043,41045,41047,41049,41051,41053,41055,41057,41059,41061,41063,41065,41067],{"class":54,"line":300},[52,41044,40747],{"class":79},[52,41046,33524],{"class":1223},[52,41048,292],{"class":58},[52,41050,564],{"class":308},[52,41052,389],{"class":79},[52,41054,33579],{"class":1223},[52,41056,292],{"class":58},[52,41058,564],{"class":308},[52,41060,389],{"class":79},[52,41062,33533],{"class":1223},[52,41064,292],{"class":58},[52,41066,692],{"class":308},[52,41068,708],{"class":79},[52,41070,41071],{"class":54,"line":314},[52,41072,40776],{"class":79},[52,41074,41075],{"class":54,"line":327},[52,41076,41077],{"class":94},"        # 第四层\n",[52,41079,41080,41082,41085,41087],{"class":54,"line":333},[52,41081,33495],{"class":308},[52,41083,41084],{"class":79},".block4",[52,41086,292],{"class":58},[52,41088,40659],{"class":79},[52,41090,41091,41093,41095,41097,41099,41101,41103,41105,41108,41110,41112,41114,41116,41118,41120,41122,41124],{"class":54,"line":360},[52,41092,40664],{"class":79},[52,41094,33506],{"class":1223},[52,41096,292],{"class":58},[52,41098,37520],{"class":308},[52,41100,389],{"class":79},[52,41102,33515],{"class":1223},[52,41104,292],{"class":58},[52,41106,41107],{"class":308},"512",[52,41109,389],{"class":79},[52,41111,33524],{"class":1223},[52,41113,292],{"class":58},[52,41115,2313],{"class":308},[52,41117,389],{"class":79},[52,41119,33533],{"class":1223},[52,41121,292],{"class":58},[52,41123,629],{"class":308},[52,41125,40697],{"class":79},[52,41127,41128],{"class":54,"line":365},[52,41129,40702],{"class":79},[52,41131,41132,41134,41136,41138,41140,41142,41144,41146,41148,41150,41152,41154,41156,41158,41160,41162,41164],{"class":54,"line":371},[52,41133,40664],{"class":79},[52,41135,33506],{"class":1223},[52,41137,292],{"class":58},[52,41139,41107],{"class":308},[52,41141,389],{"class":79},[52,41143,33515],{"class":1223},[52,41145,292],{"class":58},[52,41147,41107],{"class":308},[52,41149,389],{"class":79},[52,41151,33524],{"class":1223},[52,41153,292],{"class":58},[52,41155,2313],{"class":308},[52,41157,389],{"class":79},[52,41159,33533],{"class":1223},[52,41161,292],{"class":58},[52,41163,629],{"class":308},[52,41165,40697],{"class":79},[52,41167,41168],{"class":54,"line":400},[52,41169,40702],{"class":79},[52,41171,41172,41174,41176,41178,41180,41182,41184,41186,41188,41190,41192,41194,41196,41198,41200,41202,41204],{"class":54,"line":405},[52,41173,40664],{"class":79},[52,41175,33506],{"class":1223},[52,41177,292],{"class":58},[52,41179,41107],{"class":308},[52,41181,389],{"class":79},[52,41183,33515],{"class":1223},[52,41185,292],{"class":58},[52,41187,41107],{"class":308},[52,41189,389],{"class":79},[52,41191,33524],{"class":1223},[52,41193,292],{"class":58},[52,41195,2313],{"class":308},[52,41197,389],{"class":79},[52,41199,33533],{"class":1223},[52,41201,292],{"class":58},[52,41203,629],{"class":308},[52,41205,40697],{"class":79},[52,41207,41208],{"class":54,"line":411},[52,41209,40702],{"class":79},[52,41211,41212,41214,41216,41218,41220,41222,41224,41226,41228,41230,41232,41234,41236],{"class":54,"line":424},[52,41213,40747],{"class":79},[52,41215,33524],{"class":1223},[52,41217,292],{"class":58},[52,41219,564],{"class":308},[52,41221,389],{"class":79},[52,41223,33579],{"class":1223},[52,41225,292],{"class":58},[52,41227,564],{"class":308},[52,41229,389],{"class":79},[52,41231,33533],{"class":1223},[52,41233,292],{"class":58},[52,41235,692],{"class":308},[52,41237,708],{"class":79},[52,41239,41240],{"class":54,"line":436},[52,41241,40776],{"class":79},[52,41243,41244],{"class":54,"line":449},[52,41245,41246],{"class":94},"        # 第五层\n",[52,41248,41249,41251,41254,41256],{"class":54,"line":2160},[52,41250,33495],{"class":308},[52,41252,41253],{"class":79},".block5",[52,41255,292],{"class":58},[52,41257,40659],{"class":79},[52,41259,41260,41262,41264,41266,41268,41270,41272,41274,41276,41278,41280,41282,41284,41286,41288,41290,41292],{"class":54,"line":2186},[52,41261,40664],{"class":79},[52,41263,33506],{"class":1223},[52,41265,292],{"class":58},[52,41267,41107],{"class":308},[52,41269,389],{"class":79},[52,41271,33515],{"class":1223},[52,41273,292],{"class":58},[52,41275,41107],{"class":308},[52,41277,389],{"class":79},[52,41279,33524],{"class":1223},[52,41281,292],{"class":58},[52,41283,2313],{"class":308},[52,41285,389],{"class":79},[52,41287,33533],{"class":1223},[52,41289,292],{"class":58},[52,41291,629],{"class":308},[52,41293,40697],{"class":79},[52,41295,41296],{"class":54,"line":2209},[52,41297,40702],{"class":79},[52,41299,41300,41302,41304,41306,41308,41310,41312,41314,41316,41318,41320,41322,41324,41326,41328,41330,41332],{"class":54,"line":2233},[52,41301,40664],{"class":79},[52,41303,33506],{"class":1223},[52,41305,292],{"class":58},[52,41307,41107],{"class":308},[52,41309,389],{"class":79},[52,41311,33515],{"class":1223},[52,41313,292],{"class":58},[52,41315,41107],{"class":308},[52,41317,389],{"class":79},[52,41319,33524],{"class":1223},[52,41321,292],{"class":58},[52,41323,2313],{"class":308},[52,41325,389],{"class":79},[52,41327,33533],{"class":1223},[52,41329,292],{"class":58},[52,41331,629],{"class":308},[52,41333,40697],{"class":79},[52,41335,41336],{"class":54,"line":2238},[52,41337,40702],{"class":79},[52,41339,41340,41342,41344,41346,41348,41350,41352,41354,41356,41358,41360,41362,41364,41366,41368,41370,41372],{"class":54,"line":2243},[52,41341,40664],{"class":79},[52,41343,33506],{"class":1223},[52,41345,292],{"class":58},[52,41347,41107],{"class":308},[52,41349,389],{"class":79},[52,41351,33515],{"class":1223},[52,41353,292],{"class":58},[52,41355,41107],{"class":308},[52,41357,389],{"class":79},[52,41359,33524],{"class":1223},[52,41361,292],{"class":58},[52,41363,2313],{"class":308},[52,41365,389],{"class":79},[52,41367,33533],{"class":1223},[52,41369,292],{"class":58},[52,41371,629],{"class":308},[52,41373,40697],{"class":79},[52,41375,41376],{"class":54,"line":2248},[52,41377,40702],{"class":79},[52,41379,41380,41382,41384,41386,41388,41390,41392,41394,41396,41398,41400,41402,41404],{"class":54,"line":2257},[52,41381,40747],{"class":79},[52,41383,33524],{"class":1223},[52,41385,292],{"class":58},[52,41387,564],{"class":308},[52,41389,389],{"class":79},[52,41391,33579],{"class":1223},[52,41393,292],{"class":58},[52,41395,564],{"class":308},[52,41397,389],{"class":79},[52,41399,33533],{"class":1223},[52,41401,292],{"class":58},[52,41403,692],{"class":308},[52,41405,708],{"class":79},[52,41407,41408],{"class":54,"line":2262},[52,41409,40776],{"class":79},[52,41411,41412],{"class":54,"line":2268},[52,41413,41414],{"class":94},"        # 全连接层\n",[52,41416,41417,41419,41422,41424],{"class":54,"line":2297},[52,41418,33495],{"class":308},[52,41420,41421],{"class":79},".block6",[52,41423,292],{"class":58},[52,41425,40659],{"class":79},[52,41427,41428],{"class":54,"line":2303},[52,41429,41430],{"class":94},"            # 平展操作\n",[52,41432,41433],{"class":54,"line":2318},[52,41434,41435],{"class":94},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[52,41437,41438],{"class":54,"line":2324},[52,41439,41440],{"class":79},"            nn.Flatten(),\n",[52,41442,41443,41446,41448,41450,41452,41454,41456,41458,41460],{"class":54,"line":2353},[52,41444,41445],{"class":79},"            nn.Linear(",[52,41447,3575],{"class":308},[52,41449,3053],{"class":58},[52,41451,3575],{"class":308},[52,41453,3053],{"class":58},[52,41455,41107],{"class":308},[52,41457,389],{"class":79},[52,41459,37520],{"class":308},[52,41461,40697],{"class":79},[52,41463,41464],{"class":54,"line":2362},[52,41465,40702],{"class":79},[52,41467,41468,41470,41472,41474,41476],{"class":54,"line":2368},[52,41469,41445],{"class":79},[52,41471,37520],{"class":308},[52,41473,389],{"class":79},[52,41475,34720],{"class":308},[52,41477,40697],{"class":79},[52,41479,41480],{"class":54,"line":2376},[52,41481,40702],{"class":79},[52,41483,41484,41486,41488,41490,41492],{"class":54,"line":2381},[52,41485,41445],{"class":79},[52,41487,34720],{"class":308},[52,41489,389],{"class":79},[52,41491,3649],{"class":308},[52,41493,708],{"class":79},[52,41495,41496],{"class":54,"line":19252},[52,41497,40776],{"class":79},[52,41499,41500],{"class":54,"line":19258},[52,41501,123],{"emptyLinePlaceholder":122},[52,41503,41504],{"class":54,"line":19281},[52,41505,41506],{"class":94},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[52,41508,41509],{"class":54,"line":19287},[52,41510,41511],{"class":94},"        # 循环遍历模型\n",[52,41513,41514,41516,41519,41521,41524],{"class":54,"line":19310},[52,41515,1927],{"class":58},[52,41517,41518],{"class":79}," m ",[52,41520,28693],{"class":58},[52,41522,41523],{"class":308}," self",[52,41525,41526],{"class":79},".modules():\n",[52,41528,41529],{"class":54,"line":19324},[52,41530,41531],{"class":94},"            # print(m)\n",[52,41533,41534,41536,41539],{"class":54,"line":19344},[52,41535,7614],{"class":58},[52,41537,41538],{"class":308}," isinstance",[52,41540,41541],{"class":79},"(m,nn.Conv2d):\n",[52,41543,41544],{"class":54,"line":19350},[52,41545,41546],{"class":94},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[52,41548,41549,41552,41555,41557,41560],{"class":54,"line":19361},[52,41550,41551],{"class":79},"                nn.init.kaiming_normal_(m.weight,",[52,41553,41554],{"class":1223},"nonlinearity",[52,41556,292],{"class":58},[52,41558,41559],{"class":62},"'relu'",[52,41561,708],{"class":79},[52,41563,41564],{"class":54,"line":19384},[52,41565,41566],{"class":94},"                # 判断b参数是否存在\n",[52,41568,41569,41572,41575,41578,41581,41584],{"class":54,"line":19406},[52,41570,41571],{"class":58},"                if",[52,41573,41574],{"class":79}," m.bias ",[52,41576,41577],{"class":58},"is",[52,41579,41580],{"class":58}," not",[52,41582,41583],{"class":308}," None",[52,41585,6718],{"class":79},[52,41587,41588],{"class":54,"line":19411},[52,41589,41590],{"class":94},"                    # 如果参数不存在的化初始化b=0\n",[52,41592,41593,41596,41598],{"class":54,"line":19417},[52,41594,41595],{"class":79},"                    nn.init.constant_(m.bias,",[52,41597,692],{"class":308},[52,41599,708],{"class":79},[52,41601,41602],{"class":54,"line":19431},[52,41603,41604],{"class":94},"            # 全连接层初始化\n",[52,41606,41607,41610,41612],{"class":54,"line":19444},[52,41608,41609],{"class":58},"            elif",[52,41611,41538],{"class":308},[52,41613,41614],{"class":79},"(m,nn.Linear):\n",[52,41616,41617],{"class":54,"line":19449},[52,41618,41619],{"class":94},"                # 这个初始化方法是利用的是正太分布的方式\n",[52,41621,41622],{"class":54,"line":19463},[52,41623,41624],{"class":94},"                # 均值为0，方差为0.01\n",[52,41626,41627,41630,41632,41634,41637],{"class":54,"line":19468},[52,41628,41629],{"class":79},"                nn.init.normal_(m.weight,",[52,41631,692],{"class":308},[52,41633,389],{"class":79},[52,41635,41636],{"class":308},"0.01",[52,41638,708],{"class":79},[52,41640,41641],{"class":54,"line":19474},[52,41642,41643],{"class":94},"                # 初始化b参数\n",[52,41645,41646,41648,41650,41652,41654,41656],{"class":54,"line":19479},[52,41647,41571],{"class":58},[52,41649,41574],{"class":79},[52,41651,41577],{"class":58},[52,41653,41580],{"class":58},[52,41655,41583],{"class":308},[52,41657,6718],{"class":79},[52,41659,41660,41662,41664],{"class":54,"line":19493},[52,41661,41595],{"class":79},[52,41663,692],{"class":308},[52,41665,708],{"class":79},[52,41667,41668],{"class":54,"line":19498},[52,41669,123],{"emptyLinePlaceholder":122},[52,41671,41672],{"class":54,"line":19503},[52,41673,37815],{"class":94},[52,41675,41676,41678,41680],{"class":54,"line":19517},[52,41677,33451],{"class":58},[52,41679,33743],{"class":75},[52,41681,33746],{"class":79},[52,41683,41684,41686,41688,41690],{"class":54,"line":19529},[52,41685,33751],{"class":79},[52,41687,292],{"class":58},[52,41689,33473],{"class":308},[52,41691,41692],{"class":79},".block1(x)\n",[52,41694,41695,41697,41699,41701],{"class":54,"line":19534},[52,41696,33751],{"class":79},[52,41698,292],{"class":58},[52,41700,33473],{"class":308},[52,41702,41703],{"class":79},".block2(x)\n",[52,41705,41706,41708,41710,41712],{"class":54,"line":19547},[52,41707,33751],{"class":79},[52,41709,292],{"class":58},[52,41711,33473],{"class":308},[52,41713,41714],{"class":79},".block3(x)\n",[52,41716,41717,41719,41721,41723],{"class":54,"line":19552},[52,41718,33751],{"class":79},[52,41720,292],{"class":58},[52,41722,33473],{"class":308},[52,41724,41725],{"class":79},".block4(x)\n",[52,41727,41728,41730,41732,41734],{"class":54,"line":19557},[52,41729,33751],{"class":79},[52,41731,292],{"class":58},[52,41733,33473],{"class":308},[52,41735,41736],{"class":79},".block5(x)\n",[52,41738,41739,41741,41743,41745],{"class":54,"line":19562},[52,41740,33751],{"class":79},[52,41742,292],{"class":58},[52,41744,33473],{"class":308},[52,41746,41747],{"class":79},".block6(x)\n",[52,41749,41750,41752],{"class":54,"line":19575},[52,41751,17400],{"class":58},[52,41753,33859],{"class":79},[52,41755,41756],{"class":54,"line":19580},[52,41757,123],{"emptyLinePlaceholder":122},[52,41759,41760],{"class":54,"line":35283},[52,41761,41762],{"class":94},"# 验证模型\n",[52,41764,41765,41767,41769,41771,41774],{"class":54,"line":35289},[52,41766,4578],{"class":58},[52,41768,33870],{"class":308},[52,41770,5938],{"class":58},[52,41772,41773],{"class":62},"'__main__'",[52,41775,6718],{"class":79},[52,41777,41778,41780,41782,41784,41786,41788,41790,41792,41794],{"class":54,"line":35295},[52,41779,33887],{"class":79},[52,41781,292],{"class":58},[52,41783,33101],{"class":79},[52,41785,33894],{"class":62},[52,41787,4736],{"class":58},[52,41789,33899],{"class":79},[52,41791,4733],{"class":58},[52,41793,33126],{"class":62},[52,41795,708],{"class":79},[52,41797,41798,41800],{"class":54,"line":35301},[52,41799,33949],{"class":308},[52,41801,33135],{"class":79},[52,41803,41804,41806,41808],{"class":54,"line":35307},[52,41805,33939],{"class":79},[52,41807,292],{"class":58},[52,41809,41810],{"class":79},"VGG16().to(device)\n",[52,41812,41813,41815,41817,41819,41821,41823,41825,41827],{"class":54,"line":35318},[52,41814,33949],{"class":308},[52,41816,33952],{"class":79},[52,41818,629],{"class":308},[52,41820,389],{"class":79},[52,41822,34151],{"class":308},[52,41824,389],{"class":79},[52,41826,34151],{"class":308},[52,41828,33965],{"class":79},[1696,41830,41831],{"start":66},[32,41832,41833],{},"训练代码",[14,41835,41836],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,41838,41839],{},"解决方式:",[14,41841,41842],{},"①权重初始化",[42,41844,41846],{"className":33028,"code":41845,"language":33030,"meta":47,"style":47},"# 权重初始化,保证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",[49,41847,41848,41853,41858,41870,41875,41883,41888,41901,41906,41920,41925,41934,41939,41948,41953,41958,41971,41976,41990],{"__ignoreMap":47},[52,41849,41850],{"class":54,"line":55},[52,41851,41852],{"class":94},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[52,41854,41855],{"class":54,"line":66},[52,41856,41857],{"class":94},"# 循环遍历模型\n",[52,41859,41860,41862,41864,41866,41868],{"class":54,"line":83},[52,41861,6014],{"class":58},[52,41863,41518],{"class":79},[52,41865,28693],{"class":58},[52,41867,41523],{"class":308},[52,41869,41526],{"class":79},[52,41871,41872],{"class":54,"line":91},[52,41873,41874],{"class":94},"    # print(m)\n",[52,41876,41877,41879,41881],{"class":54,"line":98},[52,41878,6088],{"class":58},[52,41880,41538],{"class":308},[52,41882,41541],{"class":79},[52,41884,41885],{"class":54,"line":107},[52,41886,41887],{"class":94},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[52,41889,41890,41893,41895,41897,41899],{"class":54,"line":113},[52,41891,41892],{"class":79},"        nn.init.kaiming_normal_(m.weight,",[52,41894,41554],{"class":1223},[52,41896,292],{"class":58},[52,41898,41559],{"class":62},[52,41900,708],{"class":79},[52,41902,41903],{"class":54,"line":119},[52,41904,41905],{"class":94},"        # 判断b参数是否存在\n",[52,41907,41908,41910,41912,41914,41916,41918],{"class":54,"line":126},[52,41909,5497],{"class":58},[52,41911,41574],{"class":79},[52,41913,41577],{"class":58},[52,41915,41580],{"class":58},[52,41917,41583],{"class":308},[52,41919,6718],{"class":79},[52,41921,41922],{"class":54,"line":132},[52,41923,41924],{"class":94},"            # 如果参数不存在的化初始化b=0\n",[52,41926,41927,41930,41932],{"class":54,"line":138},[52,41928,41929],{"class":79},"            nn.init.constant_(m.bias,",[52,41931,692],{"class":308},[52,41933,708],{"class":79},[52,41935,41936],{"class":54,"line":144},[52,41937,41938],{"class":94},"    # 全连接层初始化\n",[52,41940,41941,41944,41946],{"class":54,"line":153},[52,41942,41943],{"class":58},"    elif",[52,41945,41538],{"class":308},[52,41947,41614],{"class":79},[52,41949,41950],{"class":54,"line":159},[52,41951,41952],{"class":94},"        # 这个初始化方法是利用的是正太分布的方式\n",[52,41954,41955],{"class":54,"line":167},[52,41956,41957],{"class":94},"        # 均值为0，方差为0.01\n",[52,41959,41960,41963,41965,41967,41969],{"class":54,"line":173},[52,41961,41962],{"class":79},"        nn.init.normal_(m.weight,",[52,41964,692],{"class":308},[52,41966,389],{"class":79},[52,41968,41636],{"class":308},[52,41970,708],{"class":79},[52,41972,41973],{"class":54,"line":181},[52,41974,41975],{"class":94},"        # 初始化b参数\n",[52,41977,41978,41980,41982,41984,41986,41988],{"class":54,"line":186},[52,41979,5497],{"class":58},[52,41981,41574],{"class":79},[52,41983,41577],{"class":58},[52,41985,41580],{"class":58},[52,41987,41583],{"class":308},[52,41989,6718],{"class":79},[52,41991,41992,41994,41996],{"class":54,"line":191},[52,41993,41929],{"class":79},[52,41995,692],{"class":308},[52,41997,708],{"class":79},[14,41999,42000],{},"②尽可能地增加批次",[14,42002,42003],{},"训练完整代码：",[42,42005,42006],{"className":33028,"code":40549,"language":33030,"meta":47,"style":47},[49,42007,42008,42014,42024,42034,42044,42048,42064,42072,42090,42094,42098,42108,42144,42148,42184,42188,42216,42220,42224,42234,42270,42274,42310,42314,42342,42346,42350,42360,42396,42400,42436,42440,42476,42480,42508,42512,42516,42526,42562,42566,42602,42606,42642,42646,42674,42678,42682,42692,42728,42732,42768,42772,42808,42812,42840,42844,42848,42858,42862,42866,42870,42890,42894,42906,42910,42922,42926,42930,42934,42938,42950,42954,42962,42966,42978,42982,42996,43000,43008,43012,43020,43024,43028,43040,43044,43058,43066,43070,43074,43082,43092,43102,43112,43122,43132,43142,43148,43152,43156,43168,43188,43194,43202],{"__ignoreMap":47},[52,42009,42010,42012],{"class":54,"line":55},[52,42011,33042],{"class":58},[52,42013,33045],{"class":79},[52,42015,42016,42018,42020,42022],{"class":54,"line":66},[52,42017,33387],{"class":58},[52,42019,40564],{"class":79},[52,42021,33042],{"class":58},[52,42023,40569],{"class":79},[52,42025,42026,42028,42030,42032],{"class":54,"line":83},[52,42027,33387],{"class":58},[52,42029,33390],{"class":79},[52,42031,33042],{"class":58},[52,42033,33395],{"class":79},[52,42035,42036,42038,42040,42042],{"class":54,"line":91},[52,42037,33387],{"class":58},[52,42039,33407],{"class":79},[52,42041,33042],{"class":58},[52,42043,33412],{"class":79},[52,42045,42046],{"class":54,"line":98},[52,42047,123],{"emptyLinePlaceholder":122},[52,42049,42050,42052,42054,42056,42058,42060,42062],{"class":54,"line":107},[52,42051,17342],{"class":58},[52,42053,40600],{"class":75},[52,42055,1216],{"class":79},[52,42057,33428],{"class":75},[52,42059,3757],{"class":79},[52,42061,33433],{"class":75},[52,42063,33436],{"class":79},[52,42065,42066,42068,42070],{"class":54,"line":113},[52,42067,33451],{"class":58},[52,42069,33454],{"class":308},[52,42071,33457],{"class":79},[52,42073,42074,42076,42078,42080,42082,42084,42086,42088],{"class":54,"line":119},[52,42075,33467],{"class":308},[52,42077,1216],{"class":79},[52,42079,40627],{"class":308},[52,42081,15083],{"class":79},[52,42083,33473],{"class":308},[52,42085,33476],{"class":79},[52,42087,33479],{"class":308},[52,42089,248],{"class":79},[52,42091,42092],{"class":54,"line":126},[52,42093,40642],{"class":94},[52,42095,42096],{"class":54,"line":132},[52,42097,40647],{"class":94},[52,42099,42100,42102,42104,42106],{"class":54,"line":138},[52,42101,33495],{"class":308},[52,42103,40654],{"class":79},[52,42105,292],{"class":58},[52,42107,40659],{"class":79},[52,42109,42110,42112,42114,42116,42118,42120,42122,42124,42126,42128,42130,42132,42134,42136,42138,42140,42142],{"class":54,"line":144},[52,42111,40664],{"class":79},[52,42113,33506],{"class":1223},[52,42115,292],{"class":58},[52,42117,629],{"class":308},[52,42119,389],{"class":79},[52,42121,33515],{"class":1223},[52,42123,292],{"class":58},[52,42125,3417],{"class":308},[52,42127,389],{"class":79},[52,42129,33524],{"class":1223},[52,42131,292],{"class":58},[52,42133,2313],{"class":308},[52,42135,389],{"class":79},[52,42137,33533],{"class":1223},[52,42139,292],{"class":58},[52,42141,629],{"class":308},[52,42143,40697],{"class":79},[52,42145,42146],{"class":54,"line":153},[52,42147,40702],{"class":79},[52,42149,42150,42152,42154,42156,42158,42160,42162,42164,42166,42168,42170,42172,42174,42176,42178,42180,42182],{"class":54,"line":159},[52,42151,40664],{"class":79},[52,42153,33506],{"class":1223},[52,42155,292],{"class":58},[52,42157,3417],{"class":308},[52,42159,389],{"class":79},[52,42161,33515],{"class":1223},[52,42163,292],{"class":58},[52,42165,3417],{"class":308},[52,42167,389],{"class":79},[52,42169,33524],{"class":1223},[52,42171,292],{"class":58},[52,42173,2313],{"class":308},[52,42175,389],{"class":79},[52,42177,33533],{"class":1223},[52,42179,292],{"class":58},[52,42181,629],{"class":308},[52,42183,40697],{"class":79},[52,42185,42186],{"class":54,"line":167},[52,42187,40702],{"class":79},[52,42189,42190,42192,42194,42196,42198,42200,42202,42204,42206,42208,42210,42212,42214],{"class":54,"line":173},[52,42191,40747],{"class":79},[52,42193,33524],{"class":1223},[52,42195,292],{"class":58},[52,42197,564],{"class":308},[52,42199,389],{"class":79},[52,42201,33579],{"class":1223},[52,42203,292],{"class":58},[52,42205,564],{"class":308},[52,42207,389],{"class":79},[52,42209,33533],{"class":1223},[52,42211,292],{"class":58},[52,42213,692],{"class":308},[52,42215,708],{"class":79},[52,42217,42218],{"class":54,"line":181},[52,42219,40776],{"class":79},[52,42221,42222],{"class":54,"line":186},[52,42223,40781],{"class":94},[52,42225,42226,42228,42230,42232],{"class":54,"line":191},[52,42227,33495],{"class":308},[52,42229,40788],{"class":79},[52,42231,292],{"class":58},[52,42233,40659],{"class":79},[52,42235,42236,42238,42240,42242,42244,42246,42248,42250,42252,42254,42256,42258,42260,42262,42264,42266,42268],{"class":54,"line":196},[52,42237,40664],{"class":79},[52,42239,33506],{"class":1223},[52,42241,292],{"class":58},[52,42243,3417],{"class":308},[52,42245,389],{"class":79},[52,42247,33515],{"class":1223},[52,42249,292],{"class":58},[52,42251,34720],{"class":308},[52,42253,389],{"class":79},[52,42255,33524],{"class":1223},[52,42257,292],{"class":58},[52,42259,2313],{"class":308},[52,42261,389],{"class":79},[52,42263,33533],{"class":1223},[52,42265,292],{"class":58},[52,42267,629],{"class":308},[52,42269,40697],{"class":79},[52,42271,42272],{"class":54,"line":201},[52,42273,40702],{"class":79},[52,42275,42276,42278,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302,42304,42306,42308],{"class":54,"line":206},[52,42277,40664],{"class":79},[52,42279,33506],{"class":1223},[52,42281,292],{"class":58},[52,42283,34720],{"class":308},[52,42285,389],{"class":79},[52,42287,33515],{"class":1223},[52,42289,292],{"class":58},[52,42291,34720],{"class":308},[52,42293,389],{"class":79},[52,42295,33524],{"class":1223},[52,42297,292],{"class":58},[52,42299,2313],{"class":308},[52,42301,389],{"class":79},[52,42303,33533],{"class":1223},[52,42305,292],{"class":58},[52,42307,629],{"class":308},[52,42309,40697],{"class":79},[52,42311,42312],{"class":54,"line":211},[52,42313,40702],{"class":79},[52,42315,42316,42318,42320,42322,42324,42326,42328,42330,42332,42334,42336,42338,42340],{"class":54,"line":218},[52,42317,40747],{"class":79},[52,42319,33524],{"class":1223},[52,42321,292],{"class":58},[52,42323,564],{"class":308},[52,42325,389],{"class":79},[52,42327,33579],{"class":1223},[52,42329,292],{"class":58},[52,42331,564],{"class":308},[52,42333,389],{"class":79},[52,42335,33533],{"class":1223},[52,42337,292],{"class":58},[52,42339,692],{"class":308},[52,42341,708],{"class":79},[52,42343,42344],{"class":54,"line":223},[52,42345,40776],{"class":79},[52,42347,42348],{"class":54,"line":230},[52,42349,40909],{"class":94},[52,42351,42352,42354,42356,42358],{"class":54,"line":239},[52,42353,33495],{"class":308},[52,42355,40916],{"class":79},[52,42357,292],{"class":58},[52,42359,40659],{"class":79},[52,42361,42362,42364,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386,42388,42390,42392,42394],{"class":54,"line":251},[52,42363,40664],{"class":79},[52,42365,33506],{"class":1223},[52,42367,292],{"class":58},[52,42369,34720],{"class":308},[52,42371,389],{"class":79},[52,42373,33515],{"class":1223},[52,42375,292],{"class":58},[52,42377,37520],{"class":308},[52,42379,389],{"class":79},[52,42381,33524],{"class":1223},[52,42383,292],{"class":58},[52,42385,2313],{"class":308},[52,42387,389],{"class":79},[52,42389,33533],{"class":1223},[52,42391,292],{"class":58},[52,42393,629],{"class":308},[52,42395,40697],{"class":79},[52,42397,42398],{"class":54,"line":256},[52,42399,40702],{"class":79},[52,42401,42402,42404,42406,42408,42410,42412,42414,42416,42418,42420,42422,42424,42426,42428,42430,42432,42434],{"class":54,"line":262},[52,42403,40664],{"class":79},[52,42405,33506],{"class":1223},[52,42407,292],{"class":58},[52,42409,37520],{"class":308},[52,42411,389],{"class":79},[52,42413,33515],{"class":1223},[52,42415,292],{"class":58},[52,42417,37520],{"class":308},[52,42419,389],{"class":79},[52,42421,33524],{"class":1223},[52,42423,292],{"class":58},[52,42425,2313],{"class":308},[52,42427,389],{"class":79},[52,42429,33533],{"class":1223},[52,42431,292],{"class":58},[52,42433,629],{"class":308},[52,42435,40697],{"class":79},[52,42437,42438],{"class":54,"line":268},[52,42439,40702],{"class":79},[52,42441,42442,42444,42446,42448,42450,42452,42454,42456,42458,42460,42462,42464,42466,42468,42470,42472,42474],{"class":54,"line":280},[52,42443,40664],{"class":79},[52,42445,33506],{"class":1223},[52,42447,292],{"class":58},[52,42449,37520],{"class":308},[52,42451,389],{"class":79},[52,42453,33515],{"class":1223},[52,42455,292],{"class":58},[52,42457,37520],{"class":308},[52,42459,389],{"class":79},[52,42461,33524],{"class":1223},[52,42463,292],{"class":58},[52,42465,2313],{"class":308},[52,42467,389],{"class":79},[52,42469,33533],{"class":1223},[52,42471,292],{"class":58},[52,42473,629],{"class":308},[52,42475,40697],{"class":79},[52,42477,42478],{"class":54,"line":286},[52,42479,40702],{"class":79},[52,42481,42482,42484,42486,42488,42490,42492,42494,42496,42498,42500,42502,42504,42506],{"class":54,"line":300},[52,42483,40747],{"class":79},[52,42485,33524],{"class":1223},[52,42487,292],{"class":58},[52,42489,564],{"class":308},[52,42491,389],{"class":79},[52,42493,33579],{"class":1223},[52,42495,292],{"class":58},[52,42497,564],{"class":308},[52,42499,389],{"class":79},[52,42501,33533],{"class":1223},[52,42503,292],{"class":58},[52,42505,692],{"class":308},[52,42507,708],{"class":79},[52,42509,42510],{"class":54,"line":314},[52,42511,40776],{"class":79},[52,42513,42514],{"class":54,"line":327},[52,42515,41077],{"class":94},[52,42517,42518,42520,42522,42524],{"class":54,"line":333},[52,42519,33495],{"class":308},[52,42521,41084],{"class":79},[52,42523,292],{"class":58},[52,42525,40659],{"class":79},[52,42527,42528,42530,42532,42534,42536,42538,42540,42542,42544,42546,42548,42550,42552,42554,42556,42558,42560],{"class":54,"line":360},[52,42529,40664],{"class":79},[52,42531,33506],{"class":1223},[52,42533,292],{"class":58},[52,42535,37520],{"class":308},[52,42537,389],{"class":79},[52,42539,33515],{"class":1223},[52,42541,292],{"class":58},[52,42543,41107],{"class":308},[52,42545,389],{"class":79},[52,42547,33524],{"class":1223},[52,42549,292],{"class":58},[52,42551,2313],{"class":308},[52,42553,389],{"class":79},[52,42555,33533],{"class":1223},[52,42557,292],{"class":58},[52,42559,629],{"class":308},[52,42561,40697],{"class":79},[52,42563,42564],{"class":54,"line":365},[52,42565,40702],{"class":79},[52,42567,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590,42592,42594,42596,42598,42600],{"class":54,"line":371},[52,42569,40664],{"class":79},[52,42571,33506],{"class":1223},[52,42573,292],{"class":58},[52,42575,41107],{"class":308},[52,42577,389],{"class":79},[52,42579,33515],{"class":1223},[52,42581,292],{"class":58},[52,42583,41107],{"class":308},[52,42585,389],{"class":79},[52,42587,33524],{"class":1223},[52,42589,292],{"class":58},[52,42591,2313],{"class":308},[52,42593,389],{"class":79},[52,42595,33533],{"class":1223},[52,42597,292],{"class":58},[52,42599,629],{"class":308},[52,42601,40697],{"class":79},[52,42603,42604],{"class":54,"line":400},[52,42605,40702],{"class":79},[52,42607,42608,42610,42612,42614,42616,42618,42620,42622,42624,42626,42628,42630,42632,42634,42636,42638,42640],{"class":54,"line":405},[52,42609,40664],{"class":79},[52,42611,33506],{"class":1223},[52,42613,292],{"class":58},[52,42615,41107],{"class":308},[52,42617,389],{"class":79},[52,42619,33515],{"class":1223},[52,42621,292],{"class":58},[52,42623,41107],{"class":308},[52,42625,389],{"class":79},[52,42627,33524],{"class":1223},[52,42629,292],{"class":58},[52,42631,2313],{"class":308},[52,42633,389],{"class":79},[52,42635,33533],{"class":1223},[52,42637,292],{"class":58},[52,42639,629],{"class":308},[52,42641,40697],{"class":79},[52,42643,42644],{"class":54,"line":411},[52,42645,40702],{"class":79},[52,42647,42648,42650,42652,42654,42656,42658,42660,42662,42664,42666,42668,42670,42672],{"class":54,"line":424},[52,42649,40747],{"class":79},[52,42651,33524],{"class":1223},[52,42653,292],{"class":58},[52,42655,564],{"class":308},[52,42657,389],{"class":79},[52,42659,33579],{"class":1223},[52,42661,292],{"class":58},[52,42663,564],{"class":308},[52,42665,389],{"class":79},[52,42667,33533],{"class":1223},[52,42669,292],{"class":58},[52,42671,692],{"class":308},[52,42673,708],{"class":79},[52,42675,42676],{"class":54,"line":436},[52,42677,40776],{"class":79},[52,42679,42680],{"class":54,"line":449},[52,42681,41246],{"class":94},[52,42683,42684,42686,42688,42690],{"class":54,"line":2160},[52,42685,33495],{"class":308},[52,42687,41253],{"class":79},[52,42689,292],{"class":58},[52,42691,40659],{"class":79},[52,42693,42694,42696,42698,42700,42702,42704,42706,42708,42710,42712,42714,42716,42718,42720,42722,42724,42726],{"class":54,"line":2186},[52,42695,40664],{"class":79},[52,42697,33506],{"class":1223},[52,42699,292],{"class":58},[52,42701,41107],{"class":308},[52,42703,389],{"class":79},[52,42705,33515],{"class":1223},[52,42707,292],{"class":58},[52,42709,41107],{"class":308},[52,42711,389],{"class":79},[52,42713,33524],{"class":1223},[52,42715,292],{"class":58},[52,42717,2313],{"class":308},[52,42719,389],{"class":79},[52,42721,33533],{"class":1223},[52,42723,292],{"class":58},[52,42725,629],{"class":308},[52,42727,40697],{"class":79},[52,42729,42730],{"class":54,"line":2209},[52,42731,40702],{"class":79},[52,42733,42734,42736,42738,42740,42742,42744,42746,42748,42750,42752,42754,42756,42758,42760,42762,42764,42766],{"class":54,"line":2233},[52,42735,40664],{"class":79},[52,42737,33506],{"class":1223},[52,42739,292],{"class":58},[52,42741,41107],{"class":308},[52,42743,389],{"class":79},[52,42745,33515],{"class":1223},[52,42747,292],{"class":58},[52,42749,41107],{"class":308},[52,42751,389],{"class":79},[52,42753,33524],{"class":1223},[52,42755,292],{"class":58},[52,42757,2313],{"class":308},[52,42759,389],{"class":79},[52,42761,33533],{"class":1223},[52,42763,292],{"class":58},[52,42765,629],{"class":308},[52,42767,40697],{"class":79},[52,42769,42770],{"class":54,"line":2238},[52,42771,40702],{"class":79},[52,42773,42774,42776,42778,42780,42782,42784,42786,42788,42790,42792,42794,42796,42798,42800,42802,42804,42806],{"class":54,"line":2243},[52,42775,40664],{"class":79},[52,42777,33506],{"class":1223},[52,42779,292],{"class":58},[52,42781,41107],{"class":308},[52,42783,389],{"class":79},[52,42785,33515],{"class":1223},[52,42787,292],{"class":58},[52,42789,41107],{"class":308},[52,42791,389],{"class":79},[52,42793,33524],{"class":1223},[52,42795,292],{"class":58},[52,42797,2313],{"class":308},[52,42799,389],{"class":79},[52,42801,33533],{"class":1223},[52,42803,292],{"class":58},[52,42805,629],{"class":308},[52,42807,40697],{"class":79},[52,42809,42810],{"class":54,"line":2248},[52,42811,40702],{"class":79},[52,42813,42814,42816,42818,42820,42822,42824,42826,42828,42830,42832,42834,42836,42838],{"class":54,"line":2257},[52,42815,40747],{"class":79},[52,42817,33524],{"class":1223},[52,42819,292],{"class":58},[52,42821,564],{"class":308},[52,42823,389],{"class":79},[52,42825,33579],{"class":1223},[52,42827,292],{"class":58},[52,42829,564],{"class":308},[52,42831,389],{"class":79},[52,42833,33533],{"class":1223},[52,42835,292],{"class":58},[52,42837,692],{"class":308},[52,42839,708],{"class":79},[52,42841,42842],{"class":54,"line":2262},[52,42843,40776],{"class":79},[52,42845,42846],{"class":54,"line":2268},[52,42847,41414],{"class":94},[52,42849,42850,42852,42854,42856],{"class":54,"line":2297},[52,42851,33495],{"class":308},[52,42853,41421],{"class":79},[52,42855,292],{"class":58},[52,42857,40659],{"class":79},[52,42859,42860],{"class":54,"line":2303},[52,42861,41430],{"class":94},[52,42863,42864],{"class":54,"line":2318},[52,42865,41435],{"class":94},[52,42867,42868],{"class":54,"line":2324},[52,42869,41440],{"class":79},[52,42871,42872,42874,42876,42878,42880,42882,42884,42886,42888],{"class":54,"line":2353},[52,42873,41445],{"class":79},[52,42875,3575],{"class":308},[52,42877,3053],{"class":58},[52,42879,3575],{"class":308},[52,42881,3053],{"class":58},[52,42883,41107],{"class":308},[52,42885,389],{"class":79},[52,42887,37520],{"class":308},[52,42889,40697],{"class":79},[52,42891,42892],{"class":54,"line":2362},[52,42893,40702],{"class":79},[52,42895,42896,42898,42900,42902,42904],{"class":54,"line":2368},[52,42897,41445],{"class":79},[52,42899,37520],{"class":308},[52,42901,389],{"class":79},[52,42903,34720],{"class":308},[52,42905,40697],{"class":79},[52,42907,42908],{"class":54,"line":2376},[52,42909,40702],{"class":79},[52,42911,42912,42914,42916,42918,42920],{"class":54,"line":2381},[52,42913,41445],{"class":79},[52,42915,34720],{"class":308},[52,42917,389],{"class":79},[52,42919,3649],{"class":308},[52,42921,708],{"class":79},[52,42923,42924],{"class":54,"line":19252},[52,42925,40776],{"class":79},[52,42927,42928],{"class":54,"line":19258},[52,42929,123],{"emptyLinePlaceholder":122},[52,42931,42932],{"class":54,"line":19281},[52,42933,41506],{"class":94},[52,42935,42936],{"class":54,"line":19287},[52,42937,41511],{"class":94},[52,42939,42940,42942,42944,42946,42948],{"class":54,"line":19310},[52,42941,1927],{"class":58},[52,42943,41518],{"class":79},[52,42945,28693],{"class":58},[52,42947,41523],{"class":308},[52,42949,41526],{"class":79},[52,42951,42952],{"class":54,"line":19324},[52,42953,41531],{"class":94},[52,42955,42956,42958,42960],{"class":54,"line":19344},[52,42957,7614],{"class":58},[52,42959,41538],{"class":308},[52,42961,41541],{"class":79},[52,42963,42964],{"class":54,"line":19350},[52,42965,41546],{"class":94},[52,42967,42968,42970,42972,42974,42976],{"class":54,"line":19361},[52,42969,41551],{"class":79},[52,42971,41554],{"class":1223},[52,42973,292],{"class":58},[52,42975,41559],{"class":62},[52,42977,708],{"class":79},[52,42979,42980],{"class":54,"line":19384},[52,42981,41566],{"class":94},[52,42983,42984,42986,42988,42990,42992,42994],{"class":54,"line":19406},[52,42985,41571],{"class":58},[52,42987,41574],{"class":79},[52,42989,41577],{"class":58},[52,42991,41580],{"class":58},[52,42993,41583],{"class":308},[52,42995,6718],{"class":79},[52,42997,42998],{"class":54,"line":19411},[52,42999,41590],{"class":94},[52,43001,43002,43004,43006],{"class":54,"line":19417},[52,43003,41595],{"class":79},[52,43005,692],{"class":308},[52,43007,708],{"class":79},[52,43009,43010],{"class":54,"line":19431},[52,43011,41604],{"class":94},[52,43013,43014,43016,43018],{"class":54,"line":19444},[52,43015,41609],{"class":58},[52,43017,41538],{"class":308},[52,43019,41614],{"class":79},[52,43021,43022],{"class":54,"line":19449},[52,43023,41619],{"class":94},[52,43025,43026],{"class":54,"line":19463},[52,43027,41624],{"class":94},[52,43029,43030,43032,43034,43036,43038],{"class":54,"line":19468},[52,43031,41629],{"class":79},[52,43033,692],{"class":308},[52,43035,389],{"class":79},[52,43037,41636],{"class":308},[52,43039,708],{"class":79},[52,43041,43042],{"class":54,"line":19474},[52,43043,41643],{"class":94},[52,43045,43046,43048,43050,43052,43054,43056],{"class":54,"line":19479},[52,43047,41571],{"class":58},[52,43049,41574],{"class":79},[52,43051,41577],{"class":58},[52,43053,41580],{"class":58},[52,43055,41583],{"class":308},[52,43057,6718],{"class":79},[52,43059,43060,43062,43064],{"class":54,"line":19493},[52,43061,41595],{"class":79},[52,43063,692],{"class":308},[52,43065,708],{"class":79},[52,43067,43068],{"class":54,"line":19498},[52,43069,123],{"emptyLinePlaceholder":122},[52,43071,43072],{"class":54,"line":19503},[52,43073,37815],{"class":94},[52,43075,43076,43078,43080],{"class":54,"line":19517},[52,43077,33451],{"class":58},[52,43079,33743],{"class":75},[52,43081,33746],{"class":79},[52,43083,43084,43086,43088,43090],{"class":54,"line":19529},[52,43085,33751],{"class":79},[52,43087,292],{"class":58},[52,43089,33473],{"class":308},[52,43091,41692],{"class":79},[52,43093,43094,43096,43098,43100],{"class":54,"line":19534},[52,43095,33751],{"class":79},[52,43097,292],{"class":58},[52,43099,33473],{"class":308},[52,43101,41703],{"class":79},[52,43103,43104,43106,43108,43110],{"class":54,"line":19547},[52,43105,33751],{"class":79},[52,43107,292],{"class":58},[52,43109,33473],{"class":308},[52,43111,41714],{"class":79},[52,43113,43114,43116,43118,43120],{"class":54,"line":19552},[52,43115,33751],{"class":79},[52,43117,292],{"class":58},[52,43119,33473],{"class":308},[52,43121,41725],{"class":79},[52,43123,43124,43126,43128,43130],{"class":54,"line":19557},[52,43125,33751],{"class":79},[52,43127,292],{"class":58},[52,43129,33473],{"class":308},[52,43131,41736],{"class":79},[52,43133,43134,43136,43138,43140],{"class":54,"line":19562},[52,43135,33751],{"class":79},[52,43137,292],{"class":58},[52,43139,33473],{"class":308},[52,43141,41747],{"class":79},[52,43143,43144,43146],{"class":54,"line":19575},[52,43145,17400],{"class":58},[52,43147,33859],{"class":79},[52,43149,43150],{"class":54,"line":19580},[52,43151,123],{"emptyLinePlaceholder":122},[52,43153,43154],{"class":54,"line":35283},[52,43155,41762],{"class":94},[52,43157,43158,43160,43162,43164,43166],{"class":54,"line":35289},[52,43159,4578],{"class":58},[52,43161,33870],{"class":308},[52,43163,5938],{"class":58},[52,43165,41773],{"class":62},[52,43167,6718],{"class":79},[52,43169,43170,43172,43174,43176,43178,43180,43182,43184,43186],{"class":54,"line":35295},[52,43171,33887],{"class":79},[52,43173,292],{"class":58},[52,43175,33101],{"class":79},[52,43177,33894],{"class":62},[52,43179,4736],{"class":58},[52,43181,33899],{"class":79},[52,43183,4733],{"class":58},[52,43185,33126],{"class":62},[52,43187,708],{"class":79},[52,43189,43190,43192],{"class":54,"line":35301},[52,43191,33949],{"class":308},[52,43193,33135],{"class":79},[52,43195,43196,43198,43200],{"class":54,"line":35307},[52,43197,33939],{"class":79},[52,43199,292],{"class":58},[52,43201,41810],{"class":79},[52,43203,43204,43206,43208,43210,43212,43214,43216,43218],{"class":54,"line":35318},[52,43205,33949],{"class":308},[52,43207,33952],{"class":79},[52,43209,629],{"class":308},[52,43211,389],{"class":79},[52,43213,34151],{"class":308},[52,43215,389],{"class":79},[52,43217,34151],{"class":308},[52,43219,33965],{"class":79},[1696,43221,43222],{"start":83},[32,43223,43224],{},"测试代码",[42,43226,43228],{"className":33028,"code":43227,"language":33030,"meta":47,"style":47},"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",[49,43229,43230,43236,43246,43256,43260,43270,43281,43285,43289,43293,43301,43317,43327,43343,43353,43367,43371,43381,43391,43401,43407,43411,43415,43423,43427,43443,43451,43455,43459,43467,43475,43479,43483,43487,43491,43497,43501,43511,43519,43527,43531,43535,43539,43547,43551,43567,43571,43575,43579,43591,43595,43607,43611,43615,43627,43631,43641,43645,43649,43661,43665,43674,43678,43682,43690,43694,43702,43706,43710,43714,43718,43722,43738,43746,43750,43754,43802,43808,43812,43822,43830,43838,43842,43846,43850,43854,43862,43866,43882,43886,43894,43902],{"__ignoreMap":47},[52,43231,43232,43234],{"class":54,"line":55},[52,43233,33042],{"class":58},[52,43235,33045],{"class":79},[52,43237,43238,43240,43242,43244],{"class":54,"line":66},[52,43239,33042],{"class":58},[52,43241,34065],{"class":79},[52,43243,34033],{"class":58},[52,43245,34070],{"class":79},[52,43247,43248,43250,43252,43254],{"class":54,"line":83},[52,43249,33387],{"class":58},[52,43251,34048],{"class":79},[52,43253,33042],{"class":58},[52,43255,34053],{"class":79},[52,43257,43258],{"class":54,"line":91},[52,43259,36572],{"class":94},[52,43261,43262,43264,43266,43268],{"class":54,"line":98},[52,43263,33387],{"class":58},[52,43265,34018],{"class":79},[52,43267,33042],{"class":58},[52,43269,34023],{"class":79},[52,43271,43272,43274,43276,43278],{"class":54,"line":107},[52,43273,33387],{"class":58},[52,43275,34564],{"class":79},[52,43277,33042],{"class":58},[52,43279,43280],{"class":308}," VGG16\n",[52,43282,43283],{"class":54,"line":113},[52,43284,123],{"emptyLinePlaceholder":122},[52,43286,43287],{"class":54,"line":119},[52,43288,123],{"emptyLinePlaceholder":122},[52,43290,43291],{"class":54,"line":126},[52,43292,36601],{"class":94},[52,43294,43295,43297,43299],{"class":54,"line":132},[52,43296,34597],{"class":58},[52,43298,36608],{"class":75},[52,43300,34603],{"class":79},[52,43302,43303,43305,43307,43309,43311,43313,43315],{"class":54,"line":138},[52,43304,36615],{"class":79},[52,43306,292],{"class":58},[52,43308,34105],{"class":79},[52,43310,34108],{"class":1223},[52,43312,292],{"class":58},[52,43314,34113],{"class":62},[52,43316,34116],{"class":79},[52,43318,43319,43321,43323,43325],{"class":54,"line":144},[52,43320,36632],{"class":1223},[52,43322,292],{"class":58},[52,43324,36637],{"class":308},[52,43326,34116],{"class":79},[52,43328,43329,43331,43333,43335,43337,43339,43341],{"class":54,"line":153},[52,43330,36644],{"class":1223},[52,43332,292],{"class":58},[52,43334,34143],{"class":79},[52,43336,34146],{"class":1223},[52,43338,292],{"class":58},[52,43340,34151],{"class":308},[52,43342,34154],{"class":79},[52,43344,43345,43347,43349,43351],{"class":54,"line":159},[52,43346,36661],{"class":1223},[52,43348,292],{"class":58},[52,43350,34126],{"class":308},[52,43352,708],{"class":79},[52,43354,43355,43357,43359,43361,43363,43365],{"class":54,"line":167},[52,43356,36672],{"class":79},[52,43358,292],{"class":58},[52,43360,34184],{"class":79},[52,43362,34187],{"class":1223},[52,43364,292],{"class":58},[52,43366,36683],{"class":79},[52,43368,43369],{"class":54,"line":173},[52,43370,36688],{"class":94},[52,43372,43373,43375,43377,43379],{"class":54,"line":181},[52,43374,36693],{"class":1223},[52,43376,292],{"class":58},[52,43378,629],{"class":308},[52,43380,34116],{"class":79},[52,43382,43383,43385,43387,43389],{"class":54,"line":186},[52,43384,36704],{"class":1223},[52,43386,292],{"class":58},[52,43388,34126],{"class":308},[52,43390,34116],{"class":79},[52,43392,43393,43395,43397,43399],{"class":54,"line":191},[52,43394,36715],{"class":1223},[52,43396,292],{"class":58},[52,43398,692],{"class":308},[52,43400,708],{"class":79},[52,43402,43403,43405],{"class":54,"line":196},[52,43404,1441],{"class":58},[52,43406,36728],{"class":79},[52,43408,43409],{"class":54,"line":201},[52,43410,123],{"emptyLinePlaceholder":122},[52,43412,43413],{"class":54,"line":206},[52,43414,36737],{"class":94},[52,43416,43417,43419,43421],{"class":54,"line":211},[52,43418,34597],{"class":58},[52,43420,36744],{"class":75},[52,43422,36747],{"class":79},[52,43424,43425],{"class":54,"line":218},[52,43426,36752],{"class":94},[52,43428,43429,43431,43433,43435,43437,43439,43441],{"class":54,"line":223},[52,43430,33887],{"class":79},[52,43432,292],{"class":58},[52,43434,33894],{"class":62},[52,43436,4736],{"class":58},[52,43438,33899],{"class":79},[52,43440,4733],{"class":58},[52,43442,36769],{"class":62},[52,43444,43445,43447,43449],{"class":54,"line":230},[52,43446,33939],{"class":79},[52,43448,292],{"class":58},[52,43450,34939],{"class":79},[52,43452,43453],{"class":54,"line":239},[52,43454,123],{"emptyLinePlaceholder":122},[52,43456,43457],{"class":54,"line":251},[52,43458,36786],{"class":94},[52,43460,43461,43463,43465],{"class":54,"line":256},[52,43462,36791],{"class":79},[52,43464,292],{"class":58},[52,43466,34992],{"class":308},[52,43468,43469,43471,43473],{"class":54,"line":262},[52,43470,36800],{"class":79},[52,43472,292],{"class":58},[52,43474,6072],{"class":308},[52,43476,43477],{"class":54,"line":268},[52,43478,123],{"emptyLinePlaceholder":122},[52,43480,43481],{"class":54,"line":280},[52,43482,36813],{"class":94},[52,43484,43485],{"class":54,"line":286},[52,43486,36818],{"class":94},[52,43488,43489],{"class":54,"line":300},[52,43490,36823],{"class":94},[52,43492,43493,43495],{"class":54,"line":314},[52,43494,36828],{"class":58},[52,43496,35534],{"class":79},[52,43498,43499],{"class":54,"line":327},[52,43500,36835],{"class":94},[52,43502,43503,43505,43507,43509],{"class":54,"line":333},[52,43504,1927],{"class":58},[52,43506,36842],{"class":79},[52,43508,28693],{"class":58},[52,43510,36847],{"class":79},[52,43512,43513,43515,43517],{"class":54,"line":360},[52,43514,36852],{"class":79},[52,43516,292],{"class":58},[52,43518,36857],{"class":79},[52,43520,43521,43523,43525],{"class":54,"line":365},[52,43522,36862],{"class":79},[52,43524,292],{"class":58},[52,43526,36867],{"class":79},[52,43528,43529],{"class":54,"line":371},[52,43530,36872],{"class":94},[52,43532,43533],{"class":54,"line":400},[52,43534,35525],{"class":79},[52,43536,43537],{"class":54,"line":405},[52,43538,36881],{"class":94},[52,43540,43541,43543,43545],{"class":54,"line":411},[52,43542,35310],{"class":79},[52,43544,292],{"class":58},[52,43546,36890],{"class":79},[52,43548,43549],{"class":54,"line":424},[52,43550,36895],{"class":94},[52,43552,43553,43555,43557,43559,43561,43563,43565],{"class":54,"line":436},[52,43554,35327],{"class":79},[52,43556,292],{"class":58},[52,43558,35332],{"class":79},[52,43560,35335],{"class":1223},[52,43562,292],{"class":58},[52,43564,629],{"class":308},[52,43566,708],{"class":79},[52,43568,43569],{"class":54,"line":449},[52,43570,36916],{"class":94},[52,43572,43573],{"class":54,"line":2160},[52,43574,36921],{"class":94},[52,43576,43577],{"class":54,"line":2186},[52,43578,36926],{"class":94},[52,43580,43581,43583,43585,43587,43589],{"class":54,"line":2209},[52,43582,36931],{"class":79},[52,43584,1910],{"class":58},[52,43586,35437],{"class":79},[52,43588,5938],{"class":58},[52,43590,36940],{"class":79},[52,43592,43593],{"class":54,"line":2233},[52,43594,36945],{"class":94},[52,43596,43597,43599,43601,43603,43605],{"class":54,"line":2238},[52,43598,36950],{"class":79},[52,43600,1910],{"class":58},[52,43602,36955],{"class":79},[52,43604,692],{"class":308},[52,43606,708],{"class":79},[52,43608,43609],{"class":54,"line":2243},[52,43610,123],{"emptyLinePlaceholder":122},[52,43612,43613],{"class":54,"line":2248},[52,43614,36968],{"class":94},[52,43616,43617,43619,43621,43623,43625],{"class":54,"line":2257},[52,43618,36973],{"class":79},[52,43620,292],{"class":58},[52,43622,36978],{"class":79},[52,43624,2340],{"class":58},[52,43626,36983],{"class":79},[52,43628,43629],{"class":54,"line":2262},[52,43630,36988],{"class":94},[52,43632,43633,43635,43637,43639],{"class":54,"line":2268},[52,43634,35101],{"class":308},[52,43636,1216],{"class":79},[52,43638,36997],{"class":62},[52,43640,37000],{"class":79},[52,43642,43643],{"class":54,"line":2297},[52,43644,123],{"emptyLinePlaceholder":122},[52,43646,43647],{"class":54,"line":2303},[52,43648,37009],{"class":94},[52,43650,43651,43653,43655,43657,43659],{"class":54,"line":2318},[52,43652,4578],{"class":58},[52,43654,33870],{"class":308},[52,43656,5938],{"class":58},[52,43658,33875],{"class":62},[52,43660,6718],{"class":79},[52,43662,43663],{"class":54,"line":2324},[52,43664,37026],{"class":94},[52,43666,43667,43669,43671],{"class":54,"line":2353},[52,43668,33939],{"class":79},[52,43670,292],{"class":58},[52,43672,43673],{"class":79},"VGG16()\n",[52,43675,43676],{"class":54,"line":2362},[52,43677,37039],{"class":94},[52,43679,43680],{"class":54,"line":2368},[52,43681,37044],{"class":94},[52,43683,43684,43686,43688],{"class":54,"line":2376},[52,43685,37049],{"class":79},[52,43687,37052],{"class":62},[52,43689,33147],{"class":79},[52,43691,43692],{"class":54,"line":2381},[52,43693,37059],{"class":94},[52,43695,43696,43698,43700],{"class":54,"line":19252},[52,43697,36672],{"class":79},[52,43699,292],{"class":58},[52,43701,37068],{"class":79},[52,43703,43704],{"class":54,"line":19258},[52,43705,37073],{"class":94},[52,43707,43708],{"class":54,"line":19281},[52,43709,37078],{"class":79},[52,43711,43712],{"class":54,"line":19287},[52,43713,123],{"emptyLinePlaceholder":122},[52,43715,43716],{"class":54,"line":19310},[52,43717,37087],{"class":94},[52,43719,43720],{"class":54,"line":19324},[52,43721,37092],{"class":94},[52,43723,43724,43726,43728,43730,43732,43734,43736],{"class":54,"line":19344},[52,43725,33887],{"class":79},[52,43727,292],{"class":58},[52,43729,33894],{"class":62},[52,43731,4736],{"class":58},[52,43733,33899],{"class":79},[52,43735,4733],{"class":58},[52,43737,36769],{"class":62},[52,43739,43740,43742,43744],{"class":54,"line":19350},[52,43741,33939],{"class":79},[52,43743,292],{"class":58},[52,43745,34939],{"class":79},[52,43747,43748],{"class":54,"line":19361},[52,43749,37121],{"class":94},[52,43751,43752],{"class":54,"line":19384},[52,43753,37126],{"class":94},[52,43755,43756,43758,43760,43762,43764,43766,43768,43770,43772,43774,43776,43778,43780,43782,43784,43786,43788,43790,43792,43794,43796,43798,43800],{"class":54,"line":19406},[52,43757,37131],{"class":79},[52,43759,292],{"class":58},[52,43761,4080],{"class":79},[52,43763,37138],{"class":62},[52,43765,389],{"class":79},[52,43767,37143],{"class":62},[52,43769,389],{"class":79},[52,43771,37148],{"class":62},[52,43773,389],{"class":79},[52,43775,37153],{"class":62},[52,43777,389],{"class":79},[52,43779,37158],{"class":62},[52,43781,389],{"class":79},[52,43783,37163],{"class":62},[52,43785,389],{"class":79},[52,43787,37168],{"class":62},[52,43789,389],{"class":79},[52,43791,37173],{"class":62},[52,43793,389],{"class":79},[52,43795,37178],{"class":62},[52,43797,389],{"class":79},[52,43799,37183],{"class":62},[52,43801,35896],{"class":79},[52,43803,43804,43806],{"class":54,"line":19411},[52,43805,36828],{"class":58},[52,43807,35534],{"class":79},[52,43809,43810],{"class":54,"line":19417},[52,43811,37196],{"class":94},[52,43813,43814,43816,43818,43820],{"class":54,"line":19431},[52,43815,1927],{"class":58},[52,43817,37203],{"class":79},[52,43819,28693],{"class":58},[52,43821,36847],{"class":79},[52,43823,43824,43826,43828],{"class":54,"line":19444},[52,43825,35260],{"class":79},[52,43827,292],{"class":58},[52,43829,35265],{"class":79},[52,43831,43832,43834,43836],{"class":54,"line":19449},[52,43833,35275],{"class":79},[52,43835,292],{"class":58},[52,43837,35280],{"class":79},[52,43839,43840],{"class":54,"line":19463},[52,43841,123],{"emptyLinePlaceholder":122},[52,43843,43844],{"class":54,"line":19468},[52,43845,37232],{"class":94},[52,43847,43848],{"class":54,"line":19474},[52,43849,35525],{"class":79},[52,43851,43852],{"class":54,"line":19479},[52,43853,37241],{"class":94},[52,43855,43856,43858,43860],{"class":54,"line":19493},[52,43857,35310],{"class":79},[52,43859,292],{"class":58},[52,43861,35315],{"class":79},[52,43863,43864],{"class":54,"line":19498},[52,43865,37254],{"class":94},[52,43867,43868,43870,43872,43874,43876,43878,43880],{"class":54,"line":19503},[52,43869,35327],{"class":79},[52,43871,292],{"class":58},[52,43873,35332],{"class":79},[52,43875,35335],{"class":1223},[52,43877,292],{"class":58},[52,43879,629],{"class":308},[52,43881,708],{"class":79},[52,43883,43884],{"class":54,"line":19517},[52,43885,37275],{"class":94},[52,43887,43888,43890,43892],{"class":54,"line":19529},[52,43889,37280],{"class":79},[52,43891,292],{"class":58},[52,43893,37285],{"class":79},[52,43895,43896,43898,43900],{"class":54,"line":19534},[52,43897,37290],{"class":79},[52,43899,292],{"class":58},[52,43901,37295],{"class":79},[52,43903,43904,43906,43908,43910,43912,43914,43916,43918],{"class":54,"line":19547},[52,43905,37300],{"class":308},[52,43907,1216],{"class":79},[52,43909,37305],{"class":62},[52,43911,37308],{"class":79},[52,43913,37311],{"class":62},[52,43915,389],{"class":79},[52,43917,37316],{"class":62},[52,43919,37319],{"class":79},[3195,43921,43923],{"id":43922},"_23googlenet","2.3.GoogLeNet",[24646,43925,43927],{"id":43926},"_231原理","2.3.1.原理",[1696,43929,43930],{},[32,43931,43932],{},"网络结构",[14,43934,43935],{},[4509,43936],{"alt":47,"src":43937},"\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,43939,43940],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,43942,43943],{},[4509,43944],{"alt":47,"src":43945},"\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,43947,43948],{},[4509,43949],{"alt":47,"src":43950},"\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,43952,43953],{},[4509,43954],{"alt":47,"src":43955},"\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",[1696,43957,43958],{"start":66},[32,43959,43960],{},"1x1卷积的优点",[14,43962,43963],{},[4509,43964],{"alt":47,"src":43965},"\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",[1696,43967,43968],{"start":83},[32,43969,43970],{},"全局平均池化层优点",[14,43972,43973],{},[4509,43974],{"alt":47,"src":43975},"\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,43977,43978],{},[4509,43979],{"alt":47,"src":43980},"\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",[1696,43982,43983],{"start":91},[32,43984,43985],{},"参数详细描述",[14,43987,43988],{},[4509,43989],{"alt":47,"src":43990},"\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,43992,43993],{},[4509,43994],{"alt":47,"src":43995},"\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,43997,43998],{},[4509,43999],{"alt":47,"src":44000},"\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,44002,44003],{},[4509,44004],{"alt":47,"src":44005},"\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,44007,44008],{},[4509,44009],{"alt":47,"src":44010},"\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,44012,44013],{},[4509,44014],{"alt":47,"src":44015},"\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,44017,44018],{},[4509,44019],{"alt":47,"src":44020},"\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,44022,44023],{},[4509,44024],{"alt":47,"src":44025},"\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,44027,44028],{},[4509,44029],{"alt":47,"src":44030},"\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,44032,44033],{},[4509,44034],{"alt":47,"src":44035},"\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,44037,44038],{},[4509,44039],{"alt":47,"src":44040},"\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,44042,44043],{},[4509,44044],{"alt":47,"src":44045},"\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,44047,44048],{},[4509,44049],{"alt":47,"src":44050},"\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,44052,44053],{},[4509,44054],{"alt":47,"src":44055},"\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,44057,44058],{},[4509,44059],{"alt":47,"src":44060},"\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,44062,44063],{},[4509,44064],{"alt":47,"src":44065},"\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,44067,44068],{},[4509,44069],{"alt":47,"src":44070},"\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,44072,44073],{},[4509,44074],{"alt":47,"src":44075},"\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,44077,44078],{},[4509,44079],{"alt":47,"src":44080},"\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,44082,44083],{},[4509,44084],{"alt":47,"src":44085},"\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,44087,44088],{},[4509,44089],{"alt":47,"src":44090},"\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",[24646,44092,44094],{"id":44093},"_232代码实现","2.3.2.代码实现",[1696,44096,44097],{},[32,44098,33361],{},[14,44100,44101],{},"根据原理一步一步搭建即可",[42,44103,44105],{"className":33028,"code":44104,"language":33030,"meta":47,"style":47},"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",[49,44106,44107,44113,44123,44133,44137,44154,44163,44178,44188,44193,44226,44231,44268,44315,44320,44356,44403,44408,44413,44448,44480,44484,44492,44508,44532,44557,44578,44583,44598,44602,44606,44611,44628,44633,44642,44657,44668,44712,44716,44744,44748,44759,44787,44791,44828,44832,44860,44864,44875,44911,44943,44971,44975,44986,45020,45052,45084,45117,45151,45179,45183,45194,45227,45259,45273,45277,45290,45294,45299,45311,45319,45341,45346,45351,45356,45361,45366,45371,45385,45393,45402,45415,45430,45439,45443,45451,45462,45473,45484,45495,45506,45512,45516,45521,45533,45553,45562],{"__ignoreMap":47},[52,44108,44109,44111],{"class":54,"line":55},[52,44110,33042],{"class":58},[52,44112,33045],{"class":79},[52,44114,44115,44117,44119,44121],{"class":54,"line":66},[52,44116,33387],{"class":58},[52,44118,33390],{"class":79},[52,44120,33042],{"class":58},[52,44122,33395],{"class":79},[52,44124,44125,44127,44129,44131],{"class":54,"line":83},[52,44126,33387],{"class":58},[52,44128,33407],{"class":79},[52,44130,33042],{"class":58},[52,44132,33412],{"class":79},[52,44134,44135],{"class":54,"line":91},[52,44136,123],{"emptyLinePlaceholder":122},[52,44138,44139,44141,44144,44146,44148,44150,44152],{"class":54,"line":98},[52,44140,17342],{"class":58},[52,44142,44143],{"class":75}," Inception",[52,44145,1216],{"class":79},[52,44147,33428],{"class":75},[52,44149,3757],{"class":79},[52,44151,33433],{"class":75},[52,44153,33436],{"class":79},[52,44155,44156,44158,44160],{"class":54,"line":107},[52,44157,33451],{"class":58},[52,44159,33454],{"class":308},[52,44161,44162],{"class":79},"(self,in_channels,c1,c2,c3,c4):\n",[52,44164,44165,44167,44170,44172,44174,44176],{"class":54,"line":113},[52,44166,33467],{"class":308},[52,44168,44169],{"class":79},"(Inception,",[52,44171,33473],{"class":308},[52,44173,33476],{"class":79},[52,44175,33479],{"class":308},[52,44177,248],{"class":79},[52,44179,44180,44182,44184,44186],{"class":54,"line":119},[52,44181,33495],{"class":308},[52,44183,37421],{"class":79},[52,44185,292],{"class":58},[52,44187,37426],{"class":79},[52,44189,44190],{"class":54,"line":126},[52,44191,44192],{"class":94},"        # 路线1：定义1*1卷积\n",[52,44194,44195,44197,44200,44202,44204,44206,44208,44211,44213,44215,44218,44220,44222,44224],{"class":54,"line":132},[52,44196,33495],{"class":308},[52,44198,44199],{"class":79},".p1_1",[52,44201,292],{"class":58},[52,44203,33503],{"class":79},[52,44205,33506],{"class":1223},[52,44207,292],{"class":58},[52,44209,44210],{"class":79},"in_channels,",[52,44212,33515],{"class":1223},[52,44214,292],{"class":58},[52,44216,44217],{"class":79},"c1,",[52,44219,33524],{"class":1223},[52,44221,292],{"class":58},[52,44223,629],{"class":308},[52,44225,708],{"class":79},[52,44227,44228],{"class":54,"line":138},[52,44229,44230],{"class":94},"        # 路线2：定义1*1卷积和3*3\n",[52,44232,44233,44235,44238,44240,44242,44244,44246,44248,44250,44252,44255,44257,44260,44262,44264,44266],{"class":54,"line":144},[52,44234,33495],{"class":308},[52,44236,44237],{"class":79},".p2_1",[52,44239,292],{"class":58},[52,44241,33503],{"class":79},[52,44243,33506],{"class":1223},[52,44245,292],{"class":58},[52,44247,44210],{"class":79},[52,44249,33515],{"class":1223},[52,44251,292],{"class":58},[52,44253,44254],{"class":79},"c2[",[52,44256,692],{"class":308},[52,44258,44259],{"class":79},"],",[52,44261,33524],{"class":1223},[52,44263,292],{"class":58},[52,44265,629],{"class":308},[52,44267,708],{"class":79},[52,44269,44270,44272,44275,44277,44279,44281,44283,44285,44287,44289,44291,44293,44295,44297,44299,44301,44303,44305,44307,44309,44311,44313],{"class":54,"line":153},[52,44271,33495],{"class":308},[52,44273,44274],{"class":79},".p2_2",[52,44276,292],{"class":58},[52,44278,33503],{"class":79},[52,44280,33506],{"class":1223},[52,44282,292],{"class":58},[52,44284,44254],{"class":79},[52,44286,692],{"class":308},[52,44288,44259],{"class":79},[52,44290,33515],{"class":1223},[52,44292,292],{"class":58},[52,44294,44254],{"class":79},[52,44296,629],{"class":308},[52,44298,44259],{"class":79},[52,44300,33524],{"class":1223},[52,44302,292],{"class":58},[52,44304,2313],{"class":308},[52,44306,389],{"class":79},[52,44308,33533],{"class":1223},[52,44310,292],{"class":58},[52,44312,629],{"class":308},[52,44314,708],{"class":79},[52,44316,44317],{"class":54,"line":159},[52,44318,44319],{"class":94},"        # 路线3：定义1*1卷积和5*5\n",[52,44321,44322,44324,44327,44329,44331,44333,44335,44337,44339,44341,44344,44346,44348,44350,44352,44354],{"class":54,"line":167},[52,44323,33495],{"class":308},[52,44325,44326],{"class":79},".p3_1",[52,44328,292],{"class":58},[52,44330,33503],{"class":79},[52,44332,33506],{"class":1223},[52,44334,292],{"class":58},[52,44336,44210],{"class":79},[52,44338,33515],{"class":1223},[52,44340,292],{"class":58},[52,44342,44343],{"class":79},"c3[",[52,44345,692],{"class":308},[52,44347,44259],{"class":79},[52,44349,33524],{"class":1223},[52,44351,292],{"class":58},[52,44353,629],{"class":308},[52,44355,708],{"class":79},[52,44357,44358,44360,44363,44365,44367,44369,44371,44373,44375,44377,44379,44381,44383,44385,44387,44389,44391,44393,44395,44397,44399,44401],{"class":54,"line":173},[52,44359,33495],{"class":308},[52,44361,44362],{"class":79},".p3_2",[52,44364,292],{"class":58},[52,44366,33503],{"class":79},[52,44368,33506],{"class":1223},[52,44370,292],{"class":58},[52,44372,44343],{"class":79},[52,44374,692],{"class":308},[52,44376,44259],{"class":79},[52,44378,33515],{"class":1223},[52,44380,292],{"class":58},[52,44382,44343],{"class":79},[52,44384,629],{"class":308},[52,44386,44259],{"class":79},[52,44388,33524],{"class":1223},[52,44390,292],{"class":58},[52,44392,1805],{"class":308},[52,44394,389],{"class":79},[52,44396,33533],{"class":1223},[52,44398,292],{"class":58},[52,44400,564],{"class":308},[52,44402,708],{"class":79},[52,44404,44405],{"class":54,"line":181},[52,44406,44407],{"class":94},"        # 路线4：定义3*3最大池化和1*1卷积\n",[52,44409,44410],{"class":54,"line":186},[52,44411,44412],{"class":94},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[52,44414,44415,44417,44420,44422,44424,44426,44428,44430,44432,44434,44436,44438,44440,44442,44444,44446],{"class":54,"line":191},[52,44416,33495],{"class":308},[52,44418,44419],{"class":79},".p4_1",[52,44421,292],{"class":58},[52,44423,37479],{"class":79},[52,44425,33524],{"class":1223},[52,44427,292],{"class":58},[52,44429,2313],{"class":308},[52,44431,389],{"class":79},[52,44433,33579],{"class":1223},[52,44435,292],{"class":58},[52,44437,629],{"class":308},[52,44439,389],{"class":79},[52,44441,33533],{"class":1223},[52,44443,292],{"class":58},[52,44445,629],{"class":308},[52,44447,708],{"class":79},[52,44449,44450,44452,44455,44457,44459,44461,44463,44465,44467,44469,44472,44474,44476,44478],{"class":54,"line":196},[52,44451,33495],{"class":308},[52,44453,44454],{"class":79},".p4_2",[52,44456,292],{"class":58},[52,44458,33503],{"class":79},[52,44460,33506],{"class":1223},[52,44462,292],{"class":58},[52,44464,44210],{"class":79},[52,44466,33515],{"class":1223},[52,44468,292],{"class":58},[52,44470,44471],{"class":79},"c4,",[52,44473,33524],{"class":1223},[52,44475,292],{"class":58},[52,44477,629],{"class":308},[52,44479,708],{"class":79},[52,44481,44482],{"class":54,"line":201},[52,44483,123],{"emptyLinePlaceholder":122},[52,44485,44486,44488,44490],{"class":54,"line":206},[52,44487,33451],{"class":58},[52,44489,33743],{"class":75},[52,44491,33746],{"class":79},[52,44493,44494,44497,44499,44501,44503,44505],{"class":54,"line":211},[52,44495,44496],{"class":79},"        p1",[52,44498,292],{"class":58},[52,44500,33473],{"class":308},[52,44502,37834],{"class":79},[52,44504,33473],{"class":308},[52,44506,44507],{"class":79},".p1_1(x))\n",[52,44509,44510,44512,44514,44516,44518,44520,44523,44525,44527,44529],{"class":54,"line":218},[52,44511,10045],{"class":79},[52,44513,292],{"class":58},[52,44515,33473],{"class":308},[52,44517,37834],{"class":79},[52,44519,33473],{"class":308},[52,44521,44522],{"class":79},".p2_2(",[52,44524,33473],{"class":308},[52,44526,37834],{"class":79},[52,44528,33473],{"class":308},[52,44530,44531],{"class":79},".p2_1(x))))\n",[52,44533,44534,44537,44539,44541,44543,44545,44548,44550,44552,44554],{"class":54,"line":223},[52,44535,44536],{"class":79},"        p3",[52,44538,292],{"class":58},[52,44540,33473],{"class":308},[52,44542,37834],{"class":79},[52,44544,33473],{"class":308},[52,44546,44547],{"class":79},".p3_2(",[52,44549,33473],{"class":308},[52,44551,37834],{"class":79},[52,44553,33473],{"class":308},[52,44555,44556],{"class":79},".p3_1(x))))\n",[52,44558,44559,44562,44564,44566,44568,44570,44573,44575],{"class":54,"line":230},[52,44560,44561],{"class":79},"        p4",[52,44563,292],{"class":58},[52,44565,33473],{"class":308},[52,44567,37834],{"class":79},[52,44569,33473],{"class":308},[52,44571,44572],{"class":79},".p4_2(",[52,44574,33473],{"class":308},[52,44576,44577],{"class":79},".p4_1(x)))\n",[52,44579,44580],{"class":54,"line":239},[52,44581,44582],{"class":94},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[52,44584,44585,44587,44590,44592,44594,44596],{"class":54,"line":251},[52,44586,17400],{"class":58},[52,44588,44589],{"class":79}," torch.cat((p1,p2,p3,p4),",[52,44591,35335],{"class":1223},[52,44593,292],{"class":58},[52,44595,629],{"class":308},[52,44597,708],{"class":79},[52,44599,44600],{"class":54,"line":256},[52,44601,123],{"emptyLinePlaceholder":122},[52,44603,44604],{"class":54,"line":262},[52,44605,123],{"emptyLinePlaceholder":122},[52,44607,44608],{"class":54,"line":268},[52,44609,44610],{"class":94},"# 搭建GoogLeNet网络\n",[52,44612,44613,44615,44618,44620,44622,44624,44626],{"class":54,"line":280},[52,44614,17342],{"class":58},[52,44616,44617],{"class":75}," GoogLeNet",[52,44619,1216],{"class":79},[52,44621,33428],{"class":75},[52,44623,3757],{"class":79},[52,44625,33433],{"class":75},[52,44627,33436],{"class":79},[52,44629,44630],{"class":54,"line":286},[52,44631,44632],{"class":94},"    # 必须把Inception导入到里边\n",[52,44634,44635,44637,44639],{"class":54,"line":300},[52,44636,33451],{"class":58},[52,44638,33454],{"class":308},[52,44640,44641],{"class":79},"(self,Inception):\n",[52,44643,44644,44646,44649,44651,44653,44655],{"class":54,"line":314},[52,44645,33467],{"class":308},[52,44647,44648],{"class":79},"(GoogLeNet,",[52,44650,33473],{"class":308},[52,44652,33476],{"class":79},[52,44654,33479],{"class":308},[52,44656,248],{"class":79},[52,44658,44659,44661,44664,44666],{"class":54,"line":327},[52,44660,33495],{"class":308},[52,44662,44663],{"class":79},".b1",[52,44665,292],{"class":58},[52,44667,40659],{"class":79},[52,44669,44670,44672,44674,44676,44678,44680,44682,44684,44686,44688,44690,44692,44694,44696,44698,44700,44702,44704,44706,44708,44710],{"class":54,"line":333},[52,44671,40664],{"class":79},[52,44673,33506],{"class":1223},[52,44675,292],{"class":58},[52,44677,629],{"class":308},[52,44679,389],{"class":79},[52,44681,33515],{"class":1223},[52,44683,292],{"class":58},[52,44685,3417],{"class":308},[52,44687,389],{"class":79},[52,44689,33524],{"class":1223},[52,44691,292],{"class":58},[52,44693,3575],{"class":308},[52,44695,389],{"class":79},[52,44697,33579],{"class":1223},[52,44699,292],{"class":58},[52,44701,564],{"class":308},[52,44703,389],{"class":79},[52,44705,33533],{"class":1223},[52,44707,292],{"class":58},[52,44709,2313],{"class":308},[52,44711,40697],{"class":79},[52,44713,44714],{"class":54,"line":360},[52,44715,40702],{"class":79},[52,44717,44718,44720,44722,44724,44726,44728,44730,44732,44734,44736,44738,44740,44742],{"class":54,"line":365},[52,44719,40747],{"class":79},[52,44721,33524],{"class":1223},[52,44723,292],{"class":58},[52,44725,2313],{"class":308},[52,44727,389],{"class":79},[52,44729,33579],{"class":1223},[52,44731,292],{"class":58},[52,44733,564],{"class":308},[52,44735,389],{"class":79},[52,44737,33533],{"class":1223},[52,44739,292],{"class":58},[52,44741,629],{"class":308},[52,44743,708],{"class":79},[52,44745,44746],{"class":54,"line":371},[52,44747,40776],{"class":79},[52,44749,44750,44752,44755,44757],{"class":54,"line":400},[52,44751,33495],{"class":308},[52,44753,44754],{"class":79},".b2",[52,44756,292],{"class":58},[52,44758,40659],{"class":79},[52,44760,44761,44763,44765,44767,44769,44771,44773,44775,44777,44779,44781,44783,44785],{"class":54,"line":405},[52,44762,40664],{"class":79},[52,44764,33506],{"class":1223},[52,44766,292],{"class":58},[52,44768,3417],{"class":308},[52,44770,389],{"class":79},[52,44772,33515],{"class":1223},[52,44774,292],{"class":58},[52,44776,3417],{"class":308},[52,44778,389],{"class":79},[52,44780,33524],{"class":1223},[52,44782,292],{"class":58},[52,44784,629],{"class":308},[52,44786,40697],{"class":79},[52,44788,44789],{"class":54,"line":411},[52,44790,40702],{"class":79},[52,44792,44793,44795,44797,44799,44801,44803,44805,44807,44810,44812,44814,44816,44818,44820,44822,44824,44826],{"class":54,"line":424},[52,44794,40664],{"class":79},[52,44796,33506],{"class":1223},[52,44798,292],{"class":58},[52,44800,3417],{"class":308},[52,44802,389],{"class":79},[52,44804,33515],{"class":1223},[52,44806,292],{"class":58},[52,44808,44809],{"class":308},"192",[52,44811,389],{"class":79},[52,44813,33524],{"class":1223},[52,44815,292],{"class":58},[52,44817,2313],{"class":308},[52,44819,389],{"class":79},[52,44821,33533],{"class":1223},[52,44823,292],{"class":58},[52,44825,629],{"class":308},[52,44827,40697],{"class":79},[52,44829,44830],{"class":54,"line":436},[52,44831,40702],{"class":79},[52,44833,44834,44836,44838,44840,44842,44844,44846,44848,44850,44852,44854,44856,44858],{"class":54,"line":449},[52,44835,40747],{"class":79},[52,44837,33524],{"class":1223},[52,44839,292],{"class":58},[52,44841,2313],{"class":308},[52,44843,389],{"class":79},[52,44845,33579],{"class":1223},[52,44847,292],{"class":58},[52,44849,564],{"class":308},[52,44851,389],{"class":79},[52,44853,33533],{"class":1223},[52,44855,292],{"class":58},[52,44857,629],{"class":308},[52,44859,708],{"class":79},[52,44861,44862],{"class":54,"line":2160},[52,44863,40776],{"class":79},[52,44865,44866,44868,44871,44873],{"class":54,"line":2186},[52,44867,33495],{"class":308},[52,44869,44870],{"class":79},".b3",[52,44872,292],{"class":58},[52,44874,40659],{"class":79},[52,44876,44877,44880,44882,44884,44886,44889,44891,44893,44895,44898,44900,44902,44904,44907,44909],{"class":54,"line":2209},[52,44878,44879],{"class":79},"            Inception(",[52,44881,44809],{"class":308},[52,44883,389],{"class":79},[52,44885,3417],{"class":308},[52,44887,44888],{"class":79},",(",[52,44890,3423],{"class":308},[52,44892,389],{"class":79},[52,44894,34720],{"class":308},[52,44896,44897],{"class":79},"),(",[52,44899,3798],{"class":308},[52,44901,389],{"class":79},[52,44903,3411],{"class":308},[52,44905,44906],{"class":79},"),",[52,44908,3411],{"class":308},[52,44910,40697],{"class":79},[52,44912,44913,44915,44917,44919,44921,44923,44925,44927,44929,44931,44933,44935,44937,44939,44941],{"class":54,"line":2233},[52,44914,44879],{"class":79},[52,44916,37520],{"class":308},[52,44918,389],{"class":79},[52,44920,34720],{"class":308},[52,44922,44888],{"class":79},[52,44924,34720],{"class":308},[52,44926,389],{"class":79},[52,44928,44809],{"class":308},[52,44930,44897],{"class":79},[52,44932,3411],{"class":308},[52,44934,389],{"class":79},[52,44936,3423],{"class":308},[52,44938,44906],{"class":79},[52,44940,3417],{"class":308},[52,44942,40697],{"class":79},[52,44944,44945,44947,44949,44951,44953,44955,44957,44959,44961,44963,44965,44967,44969],{"class":54,"line":2238},[52,44946,40747],{"class":79},[52,44948,33524],{"class":1223},[52,44950,292],{"class":58},[52,44952,2313],{"class":308},[52,44954,389],{"class":79},[52,44956,33579],{"class":1223},[52,44958,292],{"class":58},[52,44960,564],{"class":308},[52,44962,389],{"class":79},[52,44964,33533],{"class":1223},[52,44966,292],{"class":58},[52,44968,629],{"class":308},[52,44970,708],{"class":79},[52,44972,44973],{"class":54,"line":2243},[52,44974,40776],{"class":79},[52,44976,44977,44979,44982,44984],{"class":54,"line":2248},[52,44978,33495],{"class":308},[52,44980,44981],{"class":79},".b4",[52,44983,292],{"class":58},[52,44985,40659],{"class":79},[52,44987,44988,44990,44993,44995,44997,44999,45001,45003,45006,45008,45010,45012,45014,45016,45018],{"class":54,"line":2257},[52,44989,44879],{"class":79},[52,44991,44992],{"class":308},"480",[52,44994,389],{"class":79},[52,44996,44809],{"class":308},[52,44998,44888],{"class":79},[52,45000,3423],{"class":308},[52,45002,389],{"class":79},[52,45004,45005],{"class":308},"208",[52,45007,44897],{"class":79},[52,45009,3798],{"class":308},[52,45011,389],{"class":79},[52,45013,3804],{"class":308},[52,45015,44906],{"class":79},[52,45017,3417],{"class":308},[52,45019,40697],{"class":79},[52,45021,45022,45024,45026,45028,45030,45032,45034,45036,45038,45040,45042,45044,45046,45048,45050],{"class":54,"line":2262},[52,45023,44879],{"class":79},[52,45025,41107],{"class":308},[52,45027,389],{"class":79},[52,45029,23696],{"class":308},[52,45031,44888],{"class":79},[52,45033,3815],{"class":308},[52,45035,389],{"class":79},[52,45037,34151],{"class":308},[52,45039,44897],{"class":79},[52,45041,3990],{"class":308},[52,45043,389],{"class":79},[52,45045,3417],{"class":308},[52,45047,44906],{"class":79},[52,45049,3417],{"class":308},[52,45051,40697],{"class":79},[52,45053,45054,45056,45058,45060,45062,45064,45066,45068,45070,45072,45074,45076,45078,45080,45082],{"class":54,"line":2268},[52,45055,44879],{"class":79},[52,45057,41107],{"class":308},[52,45059,389],{"class":79},[52,45061,34720],{"class":308},[52,45063,44888],{"class":79},[52,45065,34720],{"class":308},[52,45067,389],{"class":79},[52,45069,37520],{"class":308},[52,45071,44897],{"class":79},[52,45073,3990],{"class":308},[52,45075,389],{"class":79},[52,45077,3417],{"class":308},[52,45079,44906],{"class":79},[52,45081,3417],{"class":308},[52,45083,40697],{"class":79},[52,45085,45086,45088,45090,45092,45094,45096,45098,45100,45103,45105,45107,45109,45111,45113,45115],{"class":54,"line":2297},[52,45087,44879],{"class":79},[52,45089,41107],{"class":308},[52,45091,389],{"class":79},[52,45093,3815],{"class":308},[52,45095,44888],{"class":79},[52,45097,34720],{"class":308},[52,45099,389],{"class":79},[52,45101,45102],{"class":308},"288",[52,45104,44897],{"class":79},[52,45106,3411],{"class":308},[52,45108,389],{"class":79},[52,45110,3417],{"class":308},[52,45112,44906],{"class":79},[52,45114,3417],{"class":308},[52,45116,40697],{"class":79},[52,45118,45119,45121,45124,45126,45128,45130,45132,45134,45137,45139,45141,45143,45145,45147,45149],{"class":54,"line":2303},[52,45120,44879],{"class":79},[52,45122,45123],{"class":308},"528",[52,45125,389],{"class":79},[52,45127,37520],{"class":308},[52,45129,44888],{"class":79},[52,45131,23696],{"class":308},[52,45133,389],{"class":79},[52,45135,45136],{"class":308},"320",[52,45138,44897],{"class":79},[52,45140,3411],{"class":308},[52,45142,389],{"class":79},[52,45144,34720],{"class":308},[52,45146,44906],{"class":79},[52,45148,34720],{"class":308},[52,45150,40697],{"class":79},[52,45152,45153,45155,45157,45159,45161,45163,45165,45167,45169,45171,45173,45175,45177],{"class":54,"line":2318},[52,45154,40747],{"class":79},[52,45156,33524],{"class":1223},[52,45158,292],{"class":58},[52,45160,2313],{"class":308},[52,45162,389],{"class":79},[52,45164,33579],{"class":1223},[52,45166,292],{"class":58},[52,45168,564],{"class":308},[52,45170,389],{"class":79},[52,45172,33533],{"class":1223},[52,45174,292],{"class":58},[52,45176,629],{"class":308},[52,45178,708],{"class":79},[52,45180,45181],{"class":54,"line":2324},[52,45182,40776],{"class":79},[52,45184,45185,45187,45190,45192],{"class":54,"line":2353},[52,45186,33495],{"class":308},[52,45188,45189],{"class":79},".b5",[52,45191,292],{"class":58},[52,45193,40659],{"class":79},[52,45195,45196,45198,45201,45203,45205,45207,45209,45211,45213,45215,45217,45219,45221,45223,45225],{"class":54,"line":2362},[52,45197,44879],{"class":79},[52,45199,45200],{"class":308},"832",[52,45202,389],{"class":79},[52,45204,37520],{"class":308},[52,45206,44888],{"class":79},[52,45208,23696],{"class":308},[52,45210,389],{"class":79},[52,45212,45136],{"class":308},[52,45214,44897],{"class":79},[52,45216,3411],{"class":308},[52,45218,389],{"class":79},[52,45220,34720],{"class":308},[52,45222,44906],{"class":79},[52,45224,34720],{"class":308},[52,45226,40697],{"class":79},[52,45228,45229,45231,45233,45235,45237,45239,45241,45243,45245,45247,45249,45251,45253,45255,45257],{"class":54,"line":2368},[52,45230,44879],{"class":79},[52,45232,45200],{"class":308},[52,45234,389],{"class":79},[52,45236,37590],{"class":308},[52,45238,44888],{"class":79},[52,45240,44809],{"class":308},[52,45242,389],{"class":79},[52,45244,37590],{"class":308},[52,45246,44897],{"class":79},[52,45248,3804],{"class":308},[52,45250,389],{"class":79},[52,45252,34720],{"class":308},[52,45254,44906],{"class":79},[52,45256,34720],{"class":308},[52,45258,40697],{"class":79},[52,45260,45261,45264,45266,45268,45270],{"class":54,"line":2376},[52,45262,45263],{"class":79},"            nn.AdaptiveAvgPool2d((",[52,45265,629],{"class":308},[52,45267,389],{"class":79},[52,45269,629],{"class":308},[52,45271,45272],{"class":79},")),\n",[52,45274,45275],{"class":54,"line":2381},[52,45276,41440],{"class":79},[52,45278,45279,45281,45284,45286,45288],{"class":54,"line":19252},[52,45280,41445],{"class":79},[52,45282,45283],{"class":308},"1024",[52,45285,389],{"class":79},[52,45287,3649],{"class":308},[52,45289,708],{"class":79},[52,45291,45292],{"class":54,"line":19258},[52,45293,40776],{"class":79},[52,45295,45296],{"class":54,"line":19281},[52,45297,45298],{"class":94},"        # 对模型参数初始化\n",[52,45300,45301,45303,45305,45307,45309],{"class":54,"line":19287},[52,45302,1927],{"class":58},[52,45304,41518],{"class":79},[52,45306,28693],{"class":58},[52,45308,41523],{"class":308},[52,45310,41526],{"class":79},[52,45312,45313,45315,45317],{"class":54,"line":19310},[52,45314,7614],{"class":58},[52,45316,41538],{"class":308},[52,45318,41541],{"class":79},[52,45320,45321,45323,45326,45328,45331,45333,45335,45337,45339],{"class":54,"line":19324},[52,45322,41551],{"class":79},[52,45324,45325],{"class":1223},"mode",[52,45327,292],{"class":58},[52,45329,45330],{"class":62},"'fan_out'",[52,45332,389],{"class":79},[52,45334,41554],{"class":1223},[52,45336,292],{"class":58},[52,45338,41559],{"class":62},[52,45340,708],{"class":79},[52,45342,45343],{"class":54,"line":19344},[52,45344,45345],{"class":94},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[52,45347,45348],{"class":54,"line":19350},[52,45349,45350],{"class":94},"                # ② mode = 'fan_out'决定使用的fan值：\n",[52,45352,45353],{"class":54,"line":19361},[52,45354,45355],{"class":94},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[52,45357,45358],{"class":54,"line":19384},[52,45359,45360],{"class":94},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[52,45362,45363],{"class":54,"line":19406},[52,45364,45365],{"class":94},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[52,45367,45368],{"class":54,"line":19411},[52,45369,45370],{"class":94},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[52,45372,45373,45375,45377,45379,45381,45383],{"class":54,"line":19417},[52,45374,41571],{"class":58},[52,45376,41574],{"class":79},[52,45378,41577],{"class":58},[52,45380,41580],{"class":58},[52,45382,41583],{"class":308},[52,45384,6718],{"class":79},[52,45386,45387,45389,45391],{"class":54,"line":19431},[52,45388,41595],{"class":79},[52,45390,692],{"class":308},[52,45392,708],{"class":79},[52,45394,45395,45398,45400],{"class":54,"line":19444},[52,45396,45397],{"class":58},"                elif",[52,45399,41538],{"class":308},[52,45401,41614],{"class":79},[52,45403,45404,45407,45409,45411,45413],{"class":54,"line":19449},[52,45405,45406],{"class":79},"                    nn.init.normal_(m.weight,",[52,45408,692],{"class":308},[52,45410,389],{"class":79},[52,45412,41636],{"class":308},[52,45414,708],{"class":79},[52,45416,45417,45420,45422,45424,45426,45428],{"class":54,"line":19463},[52,45418,45419],{"class":58},"                    if",[52,45421,41574],{"class":79},[52,45423,41577],{"class":58},[52,45425,41580],{"class":58},[52,45427,41583],{"class":308},[52,45429,6718],{"class":79},[52,45431,45432,45435,45437],{"class":54,"line":19468},[52,45433,45434],{"class":79},"                        nn.init.constant_(m.bias,",[52,45436,692],{"class":308},[52,45438,708],{"class":79},[52,45440,45441],{"class":54,"line":19474},[52,45442,37815],{"class":94},[52,45444,45445,45447,45449],{"class":54,"line":19479},[52,45446,33451],{"class":58},[52,45448,33743],{"class":75},[52,45450,33746],{"class":79},[52,45452,45453,45455,45457,45459],{"class":54,"line":19493},[52,45454,33751],{"class":79},[52,45456,292],{"class":58},[52,45458,33473],{"class":308},[52,45460,45461],{"class":79},".b1(x)\n",[52,45463,45464,45466,45468,45470],{"class":54,"line":19498},[52,45465,33751],{"class":79},[52,45467,292],{"class":58},[52,45469,33473],{"class":308},[52,45471,45472],{"class":79},".b2(x)\n",[52,45474,45475,45477,45479,45481],{"class":54,"line":19503},[52,45476,33751],{"class":79},[52,45478,292],{"class":58},[52,45480,33473],{"class":308},[52,45482,45483],{"class":79},".b3(x)\n",[52,45485,45486,45488,45490,45492],{"class":54,"line":19517},[52,45487,33751],{"class":79},[52,45489,292],{"class":58},[52,45491,33473],{"class":308},[52,45493,45494],{"class":79},".b4(x)\n",[52,45496,45497,45499,45501,45503],{"class":54,"line":19529},[52,45498,33751],{"class":79},[52,45500,292],{"class":58},[52,45502,33473],{"class":308},[52,45504,45505],{"class":79},".b5(x)\n",[52,45507,45508,45510],{"class":54,"line":19534},[52,45509,17400],{"class":58},[52,45511,33859],{"class":79},[52,45513,45514],{"class":54,"line":19547},[52,45515,123],{"emptyLinePlaceholder":122},[52,45517,45518],{"class":54,"line":19552},[52,45519,45520],{"class":94},"# 模型展示\n",[52,45522,45523,45525,45527,45529,45531],{"class":54,"line":19557},[52,45524,4578],{"class":58},[52,45526,33870],{"class":308},[52,45528,5938],{"class":58},[52,45530,33875],{"class":62},[52,45532,6718],{"class":79},[52,45534,45535,45537,45539,45541,45543,45545,45547,45549,45551],{"class":54,"line":19562},[52,45536,33887],{"class":79},[52,45538,292],{"class":58},[52,45540,33101],{"class":79},[52,45542,33894],{"class":62},[52,45544,4736],{"class":58},[52,45546,33899],{"class":79},[52,45548,4733],{"class":58},[52,45550,33126],{"class":62},[52,45552,708],{"class":79},[52,45554,45555,45557,45559],{"class":54,"line":19575},[52,45556,33939],{"class":79},[52,45558,292],{"class":58},[52,45560,45561],{"class":79},"GoogLeNet(Inception).to(device)\n",[52,45563,45564,45566,45568,45570,45572,45574,45576,45578],{"class":54,"line":19580},[52,45565,33949],{"class":308},[52,45567,33952],{"class":79},[52,45569,629],{"class":308},[52,45571,389],{"class":79},[52,45573,34151],{"class":308},[52,45575,389],{"class":79},[52,45577,34151],{"class":308},[52,45579,33965],{"class":79},[1696,45581,45582],{"start":66},[32,45583,41833],{},[42,45585,45587],{"className":33028,"code":45586,"language":33030,"meta":47,"style":47},"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",[49,45588,45589,45595,45601,45611,45617,45627,45637,45647,45657,45667,45671,45682,45692,45696,45700,45704,45712,45724,45734,45750,45760,45792,45806,45816,45826,45830,45840,45854,45864,45874,45884,45890,45894,45898,45902,45906,45910,45918,45938,45942,45946,45950,45954,45958,45974,45978,45982,45990,45994,45998,46006,46010,46014,46018,46026,46030,46034,46038,46042,46050,46054,46062,46066,46074,46078,46086,46090,46098,46102,46106,46114,46118,46122,46126,46138,46162,46176,46180,46184,46188,46196,46200,46208,46212,46220,46224,46232,46236,46244,46248,46256,46260,46272,46276,46284,46288,46296,46300,46304,46308,46312,46320,46324,46340,46344,46352,46356,46360,46364,46368,46372,46376,46380,46396,46400,46412,46416,46428,46432,46444,46448,46456,46460,46468,46472,46476,46480,46486,46490,46498,46502,46518,46522,46530,46534,46550,46562,46566,46578,46582,46586,46594,46598,46602,46610,46614,46622,46626,46634,46638,46642,46684,46726,46730,46734,46750,46754,46770,46774,46778,46786,46790,46794,46806,46844,46848,46852,46860,46864,46878,46888,46894,46900,46906,46912,46916,46920,46926,46930,46934,46942,46946,46964,46968,46972,46976,46992,46996,47000,47004,47008,47012,47032,47052,47056,47060,47064,47072,47080,47084,47100,47120,47140,47144,47148,47156,47164,47168,47172,47176,47188,47192,47202,47210,47227],{"__ignoreMap":47},[52,45590,45591,45593],{"class":54,"line":55},[52,45592,33042],{"class":58},[52,45594,34472],{"class":79},[52,45596,45597,45599],{"class":54,"line":66},[52,45598,33042],{"class":58},[52,45600,34479],{"class":79},[52,45602,45603,45605,45607,45609],{"class":54,"line":83},[52,45604,33042],{"class":58},[52,45606,34490],{"class":79},[52,45608,34033],{"class":58},[52,45610,34495],{"class":79},[52,45612,45613,45615],{"class":54,"line":91},[52,45614,33042],{"class":58},[52,45616,33045],{"class":79},[52,45618,45619,45621,45623,45625],{"class":54,"line":98},[52,45620,33387],{"class":58},[52,45622,34065],{"class":79},[52,45624,33042],{"class":58},[52,45626,34512],{"class":79},[52,45628,45629,45631,45633,45635],{"class":54,"line":107},[52,45630,33387],{"class":58},[52,45632,34018],{"class":79},[52,45634,33042],{"class":58},[52,45636,34023],{"class":79},[52,45638,45639,45641,45643,45645],{"class":54,"line":113},[52,45640,33387],{"class":58},[52,45642,34048],{"class":79},[52,45644,33042],{"class":58},[52,45646,34053],{"class":79},[52,45648,45649,45651,45653,45655],{"class":54,"line":119},[52,45650,33042],{"class":58},[52,45652,34065],{"class":79},[52,45654,34033],{"class":58},[52,45656,34070],{"class":79},[52,45658,45659,45661,45663,45665],{"class":54,"line":126},[52,45660,33042],{"class":58},[52,45662,34082],{"class":79},[52,45664,34033],{"class":58},[52,45666,34087],{"class":79},[52,45668,45669],{"class":54,"line":132},[52,45670,34557],{"class":94},[52,45672,45673,45675,45677,45679],{"class":54,"line":138},[52,45674,33387],{"class":58},[52,45676,34564],{"class":79},[52,45678,33042],{"class":58},[52,45680,45681],{"class":79}," GoogLeNet, Inception\n",[52,45683,45684,45686,45688,45690],{"class":54,"line":144},[52,45685,33387],{"class":58},[52,45687,33390],{"class":79},[52,45689,33042],{"class":58},[52,45691,33395],{"class":79},[52,45693,45694],{"class":54,"line":153},[52,45695,123],{"emptyLinePlaceholder":122},[52,45697,45698],{"class":54,"line":159},[52,45699,123],{"emptyLinePlaceholder":122},[52,45701,45702],{"class":54,"line":167},[52,45703,34592],{"class":94},[52,45705,45706,45708,45710],{"class":54,"line":173},[52,45707,34597],{"class":58},[52,45709,34600],{"class":75},[52,45711,34603],{"class":79},[52,45713,45714,45716,45718,45720,45722],{"class":54,"line":181},[52,45715,34608],{"class":79},[52,45717,292],{"class":58},[52,45719,34105],{"class":79},[52,45721,34113],{"class":62},[52,45723,34116],{"class":79},[52,45725,45726,45728,45730,45732],{"class":54,"line":186},[52,45727,34621],{"class":1223},[52,45729,292],{"class":58},[52,45731,34126],{"class":308},[52,45733,34116],{"class":79},[52,45735,45736,45738,45740,45742,45744,45746,45748],{"class":54,"line":191},[52,45737,34632],{"class":1223},[52,45739,292],{"class":58},[52,45741,34143],{"class":79},[52,45743,34146],{"class":1223},[52,45745,292],{"class":58},[52,45747,38099],{"class":308},[52,45749,34154],{"class":79},[52,45751,45752,45754,45756,45758],{"class":54,"line":196},[52,45753,34649],{"class":1223},[52,45755,292],{"class":58},[52,45757,34126],{"class":308},[52,45759,708],{"class":79},[52,45761,45762,45764,45766,45768,45770,45772,45774,45776,45778,45780,45782,45784,45786,45788,45790],{"class":54,"line":201},[52,45763,34660],{"class":79},[52,45765,292],{"class":58},[52,45767,34665],{"class":79},[52,45769,34668],{"class":308},[52,45771,1216],{"class":79},[52,45773,34673],{"class":308},[52,45775,3053],{"class":58},[52,45777,2639],{"class":308},[52,45779,34680],{"class":79},[52,45781,34668],{"class":308},[52,45783,1216],{"class":79},[52,45785,34687],{"class":308},[52,45787,3053],{"class":58},[52,45789,2639],{"class":308},[52,45791,34694],{"class":79},[52,45793,45794,45796,45798,45800,45802,45804],{"class":54,"line":206},[52,45795,34699],{"class":79},[52,45797,292],{"class":58},[52,45799,34704],{"class":79},[52,45801,34187],{"class":1223},[52,45803,292],{"class":58},[52,45805,34192],{"class":79},[52,45807,45808,45810,45812,45814],{"class":54,"line":211},[52,45809,34715],{"class":1223},[52,45811,292],{"class":58},[52,45813,3411],{"class":308},[52,45815,34116],{"class":79},[52,45817,45818,45820,45822,45824],{"class":54,"line":218},[52,45819,34727],{"class":1223},[52,45821,292],{"class":58},[52,45823,34126],{"class":308},[52,45825,34116],{"class":79},[52,45827,45828],{"class":54,"line":223},[52,45829,34738],{"class":94},[52,45831,45832,45834,45836,45838],{"class":54,"line":230},[52,45833,34743],{"class":1223},[52,45835,292],{"class":58},[52,45837,3600],{"class":308},[52,45839,708],{"class":79},[52,45841,45842,45844,45846,45848,45850,45852],{"class":54,"line":239},[52,45843,34754],{"class":79},[52,45845,292],{"class":58},[52,45847,34184],{"class":79},[52,45849,34187],{"class":1223},[52,45851,292],{"class":58},[52,45853,34765],{"class":79},[52,45855,45856,45858,45860,45862],{"class":54,"line":251},[52,45857,34770],{"class":1223},[52,45859,292],{"class":58},[52,45861,3411],{"class":308},[52,45863,34116],{"class":79},[52,45865,45866,45868,45870,45872],{"class":54,"line":256},[52,45867,34781],{"class":1223},[52,45869,292],{"class":58},[52,45871,34126],{"class":308},[52,45873,34116],{"class":79},[52,45875,45876,45878,45880,45882],{"class":54,"line":262},[52,45877,34792],{"class":1223},[52,45879,292],{"class":58},[52,45881,3600],{"class":308},[52,45883,708],{"class":79},[52,45885,45886,45888],{"class":54,"line":268},[52,45887,1441],{"class":58},[52,45889,34805],{"class":79},[52,45891,45892],{"class":54,"line":280},[52,45893,123],{"emptyLinePlaceholder":122},[52,45895,45896],{"class":54,"line":286},[52,45897,34814],{"class":94},[52,45899,45900],{"class":54,"line":300},[52,45901,34819],{"class":94},[52,45903,45904],{"class":54,"line":314},[52,45905,123],{"emptyLinePlaceholder":122},[52,45907,45908],{"class":54,"line":327},[52,45909,34828],{"class":94},[52,45911,45912,45914,45916],{"class":54,"line":333},[52,45913,34597],{"class":58},[52,45915,34835],{"class":75},[52,45917,34838],{"class":79},[52,45919,45920,45922,45924,45926,45928,45930,45932,45934,45936],{"class":54,"line":360},[52,45921,33887],{"class":79},[52,45923,292],{"class":58},[52,45925,33101],{"class":79},[52,45927,33894],{"class":62},[52,45929,4736],{"class":58},[52,45931,33899],{"class":79},[52,45933,4733],{"class":58},[52,45935,34857],{"class":62},[52,45937,708],{"class":79},[52,45939,45940],{"class":54,"line":365},[52,45941,123],{"emptyLinePlaceholder":122},[52,45943,45944],{"class":54,"line":371},[52,45945,123],{"emptyLinePlaceholder":122},[52,45947,45948],{"class":54,"line":400},[52,45949,34872],{"class":94},[52,45951,45952],{"class":54,"line":405},[52,45953,34877],{"class":94},[52,45955,45956],{"class":54,"line":411},[52,45957,34882],{"class":94},[52,45959,45960,45962,45964,45966,45968,45970,45972],{"class":54,"line":424},[52,45961,34887],{"class":79},[52,45963,292],{"class":58},[52,45965,34892],{"class":79},[52,45967,34895],{"class":1223},[52,45969,292],{"class":58},[52,45971,34900],{"class":308},[52,45973,708],{"class":79},[52,45975,45976],{"class":54,"line":436},[52,45977,123],{"emptyLinePlaceholder":122},[52,45979,45980],{"class":54,"line":449},[52,45981,34911],{"class":94},[52,45983,45984,45986,45988],{"class":54,"line":2160},[52,45985,34916],{"class":79},[52,45987,292],{"class":58},[52,45989,34921],{"class":79},[52,45991,45992],{"class":54,"line":2186},[52,45993,123],{"emptyLinePlaceholder":122},[52,45995,45996],{"class":54,"line":2209},[52,45997,34930],{"class":94},[52,45999,46000,46002,46004],{"class":54,"line":2233},[52,46001,33939],{"class":79},[52,46003,292],{"class":58},[52,46005,34939],{"class":79},[52,46007,46008],{"class":54,"line":2238},[52,46009,34944],{"class":94},[52,46011,46012],{"class":54,"line":2243},[52,46013,34949],{"class":94},[52,46015,46016],{"class":54,"line":2248},[52,46017,34954],{"class":94},[52,46019,46020,46022,46024],{"class":54,"line":2257},[52,46021,34959],{"class":79},[52,46023,292],{"class":58},[52,46025,34964],{"class":79},[52,46027,46028],{"class":54,"line":2262},[52,46029,123],{"emptyLinePlaceholder":122},[52,46031,46032],{"class":54,"line":2268},[52,46033,123],{"emptyLinePlaceholder":122},[52,46035,46036],{"class":54,"line":2297},[52,46037,34977],{"class":94},[52,46039,46040],{"class":54,"line":2303},[52,46041,34982],{"class":94},[52,46043,46044,46046,46048],{"class":54,"line":2318},[52,46045,34987],{"class":79},[52,46047,292],{"class":58},[52,46049,34992],{"class":308},[52,46051,46052],{"class":54,"line":2324},[52,46053,34997],{"class":94},[52,46055,46056,46058,46060],{"class":54,"line":2353},[52,46057,35002],{"class":79},[52,46059,292],{"class":58},[52,46061,35007],{"class":79},[52,46063,46064],{"class":54,"line":2362},[52,46065,35012],{"class":94},[52,46067,46068,46070,46072],{"class":54,"line":2368},[52,46069,35017],{"class":79},[52,46071,292],{"class":58},[52,46073,35007],{"class":79},[52,46075,46076],{"class":54,"line":2376},[52,46077,35026],{"class":94},[52,46079,46080,46082,46084],{"class":54,"line":2381},[52,46081,35031],{"class":79},[52,46083,292],{"class":58},[52,46085,35007],{"class":79},[52,46087,46088],{"class":54,"line":19252},[52,46089,35040],{"class":94},[52,46091,46092,46094,46096],{"class":54,"line":19258},[52,46093,35045],{"class":79},[52,46095,292],{"class":58},[52,46097,35007],{"class":79},[52,46099,46100],{"class":54,"line":19281},[52,46101,123],{"emptyLinePlaceholder":122},[52,46103,46104],{"class":54,"line":19287},[52,46105,35058],{"class":94},[52,46107,46108,46110,46112],{"class":54,"line":19310},[52,46109,35063],{"class":79},[52,46111,292],{"class":58},[52,46113,35068],{"class":79},[52,46115,46116],{"class":54,"line":19324},[52,46117,123],{"emptyLinePlaceholder":122},[52,46119,46120],{"class":54,"line":19344},[52,46121,123],{"emptyLinePlaceholder":122},[52,46123,46124],{"class":54,"line":19350},[52,46125,35081],{"class":94},[52,46127,46128,46130,46132,46134,46136],{"class":54,"line":19361},[52,46129,679],{"class":58},[52,46131,35088],{"class":79},[52,46133,28693],{"class":58},[52,46135,35093],{"class":308},[52,46137,35096],{"class":79},[52,46139,46140,46142,46144,46146,46148,46150,46152,46154,46156,46158,46160],{"class":54,"line":19384},[52,46141,35101],{"class":308},[52,46143,1216],{"class":79},[52,46145,35106],{"class":62},[52,46147,35109],{"class":308},[52,46149,2340],{"class":62},[52,46151,35109],{"class":308},[52,46153,2844],{"class":62},[52,46155,35118],{"class":79},[52,46157,2642],{"class":58},[52,46159,629],{"class":308},[52,46161,33147],{"class":79},[52,46163,46164,46166,46168,46170,46172,46174],{"class":54,"line":19406},[52,46165,35101],{"class":308},[52,46167,1216],{"class":79},[52,46169,35133],{"class":62},[52,46171,3053],{"class":58},[52,46173,3649],{"class":308},[52,46175,708],{"class":79},[52,46177,46178],{"class":54,"line":19411},[52,46179,123],{"emptyLinePlaceholder":122},[52,46181,46182],{"class":54,"line":19417},[52,46183,35148],{"class":94},[52,46185,46186],{"class":54,"line":19431},[52,46187,35153],{"class":94},[52,46189,46190,46192,46194],{"class":54,"line":19444},[52,46191,35158],{"class":79},[52,46193,292],{"class":58},[52,46195,34992],{"class":308},[52,46197,46198],{"class":54,"line":19449},[52,46199,35167],{"class":94},[52,46201,46202,46204,46206],{"class":54,"line":19463},[52,46203,35172],{"class":79},[52,46205,292],{"class":58},[52,46207,6072],{"class":308},[52,46209,46210],{"class":54,"line":19468},[52,46211,35181],{"class":94},[52,46213,46214,46216,46218],{"class":54,"line":19474},[52,46215,35186],{"class":79},[52,46217,292],{"class":58},[52,46219,34992],{"class":308},[52,46221,46222],{"class":54,"line":19479},[52,46223,35195],{"class":94},[52,46225,46226,46228,46230],{"class":54,"line":19493},[52,46227,35200],{"class":79},[52,46229,292],{"class":58},[52,46231,6072],{"class":308},[52,46233,46234],{"class":54,"line":19498},[52,46235,35209],{"class":94},[52,46237,46238,46240,46242],{"class":54,"line":19503},[52,46239,35214],{"class":79},[52,46241,292],{"class":58},[52,46243,6072],{"class":308},[52,46245,46246],{"class":54,"line":19517},[52,46247,35223],{"class":94},[52,46249,46250,46252,46254],{"class":54,"line":19529},[52,46251,35228],{"class":79},[52,46253,292],{"class":58},[52,46255,6072],{"class":308},[52,46257,46258],{"class":54,"line":19534},[52,46259,35237],{"class":94},[52,46261,46262,46264,46266,46268,46270],{"class":54,"line":19547},[52,46263,1927],{"class":58},[52,46265,34251],{"class":79},[52,46267,28693],{"class":58},[52,46269,34256],{"class":308},[52,46271,35250],{"class":79},[52,46273,46274],{"class":54,"line":19552},[52,46275,35255],{"class":94},[52,46277,46278,46280,46282],{"class":54,"line":19557},[52,46279,35260],{"class":79},[52,46281,292],{"class":58},[52,46283,35265],{"class":79},[52,46285,46286],{"class":54,"line":19562},[52,46287,35270],{"class":94},[52,46289,46290,46292,46294],{"class":54,"line":19575},[52,46291,35275],{"class":79},[52,46293,292],{"class":58},[52,46295,35280],{"class":79},[52,46297,46298],{"class":54,"line":19580},[52,46299,35286],{"class":94},[52,46301,46302],{"class":54,"line":35283},[52,46303,35292],{"class":79},[52,46305,46306],{"class":54,"line":35289},[52,46307,35298],{"class":94},[52,46309,46310],{"class":54,"line":35295},[52,46311,35304],{"class":94},[52,46313,46314,46316,46318],{"class":54,"line":35301},[52,46315,35310],{"class":79},[52,46317,292],{"class":58},[52,46319,35315],{"class":79},[52,46321,46322],{"class":54,"line":35307},[52,46323,35321],{"class":94},[52,46325,46326,46328,46330,46332,46334,46336,46338],{"class":54,"line":35318},[52,46327,35327],{"class":79},[52,46329,292],{"class":58},[52,46331,35332],{"class":79},[52,46333,35335],{"class":1223},[52,46335,292],{"class":58},[52,46337,629],{"class":308},[52,46339,708],{"class":79},[52,46341,46342],{"class":54,"line":35324},[52,46343,35347],{"class":94},[52,46345,46346,46348,46350],{"class":54,"line":35344},[52,46347,35353],{"class":79},[52,46349,292],{"class":58},[52,46351,35358],{"class":79},[52,46353,46354],{"class":54,"line":35350},[52,46355,35364],{"class":94},[52,46357,46358],{"class":54,"line":35361},[52,46359,35370],{"class":79},[52,46361,46362],{"class":54,"line":35367},[52,46363,35376],{"class":94},[52,46365,46366],{"class":54,"line":35373},[52,46367,35382],{"class":79},[52,46369,46370],{"class":54,"line":35379},[52,46371,35388],{"class":94},[52,46373,46374],{"class":54,"line":35385},[52,46375,35394],{"class":79},[52,46377,46378],{"class":54,"line":35391},[52,46379,35400],{"class":94},[52,46381,46382,46384,46386,46388,46390,46392,46394],{"class":54,"line":35397},[52,46383,35406],{"class":79},[52,46385,1910],{"class":58},[52,46387,35411],{"class":79},[52,46389,3053],{"class":58},[52,46391,35416],{"class":79},[52,46393,692],{"class":308},[52,46395,708],{"class":79},[52,46397,46398],{"class":54,"line":35403},[52,46399,35426],{"class":94},[52,46401,46402,46404,46406,46408,46410],{"class":54,"line":35423},[52,46403,35432],{"class":79},[52,46405,1910],{"class":58},[52,46407,35437],{"class":79},[52,46409,5938],{"class":58},[52,46411,35442],{"class":79},[52,46413,46414],{"class":54,"line":35429},[52,46415,35448],{"class":94},[52,46417,46418,46420,46422,46424,46426],{"class":54,"line":35445},[52,46419,35454],{"class":79},[52,46421,1910],{"class":58},[52,46423,35416],{"class":79},[52,46425,692],{"class":308},[52,46427,708],{"class":79},[52,46429,46430],{"class":54,"line":35451},[52,46431,35468],{"class":94},[52,46433,46434,46436,46438,46440,46442],{"class":54,"line":35465},[52,46435,1927],{"class":58},[52,46437,35476],{"class":79},[52,46439,28693],{"class":58},[52,46441,34256],{"class":308},[52,46443,35483],{"class":79},[52,46445,46446],{"class":54,"line":35471},[52,46447,35489],{"class":94},[52,46449,46450,46452,46454],{"class":54,"line":35486},[52,46451,35260],{"class":79},[52,46453,292],{"class":58},[52,46455,35265],{"class":79},[52,46457,46458],{"class":54,"line":35492},[52,46459,35504],{"class":94},[52,46461,46462,46464,46466],{"class":54,"line":35501},[52,46463,35275],{"class":79},[52,46465,292],{"class":58},[52,46467,35280],{"class":79},[52,46469,46470],{"class":54,"line":35507},[52,46471,35519],{"class":94},[52,46473,46474],{"class":54,"line":35516},[52,46475,35525],{"class":79},[52,46477,46478],{"class":54,"line":35522},[52,46479,39006],{"class":94},[52,46481,46482,46484],{"class":54,"line":35528},[52,46483,35531],{"class":58},[52,46485,35534],{"class":79},[52,46487,46488],{"class":54,"line":35537},[52,46489,35540],{"class":94},[52,46491,46492,46494,46496],{"class":54,"line":35543},[52,46493,39021],{"class":79},[52,46495,292],{"class":58},[52,46497,35315],{"class":79},[52,46499,46500],{"class":54,"line":35554},[52,46501,35557],{"class":94},[52,46503,46504,46506,46508,46510,46512,46514,46516],{"class":54,"line":35560},[52,46505,39034],{"class":79},[52,46507,292],{"class":58},[52,46509,35332],{"class":79},[52,46511,35335],{"class":1223},[52,46513,292],{"class":58},[52,46515,629],{"class":308},[52,46517,708],{"class":79},[52,46519,46520],{"class":54,"line":35579},[52,46521,35582],{"class":94},[52,46523,46524,46526,46528],{"class":54,"line":35585},[52,46525,39055],{"class":79},[52,46527,292],{"class":58},[52,46529,35358],{"class":79},[52,46531,46532],{"class":54,"line":35596},[52,46533,35599],{"class":94},[52,46535,46536,46538,46540,46542,46544,46546,46548],{"class":54,"line":35602},[52,46537,39068],{"class":79},[52,46539,1910],{"class":58},[52,46541,39073],{"class":79},[52,46543,3053],{"class":58},[52,46545,35416],{"class":79},[52,46547,692],{"class":308},[52,46549,708],{"class":79},[52,46551,46552,46554,46556,46558,46560],{"class":54,"line":35622},[52,46553,39086],{"class":79},[52,46555,1910],{"class":58},[52,46557,35437],{"class":79},[52,46559,5938],{"class":58},[52,46561,35442],{"class":79},[52,46563,46564],{"class":54,"line":35638},[52,46565,39099],{"class":94},[52,46567,46568,46570,46572,46574,46576],{"class":54,"line":35644},[52,46569,39104],{"class":79},[52,46571,1910],{"class":58},[52,46573,35416],{"class":79},[52,46575,692],{"class":308},[52,46577,708],{"class":79},[52,46579,46580],{"class":54,"line":35658},[52,46581,35661],{"class":94},[52,46583,46584],{"class":54,"line":35664},[52,46585,35667],{"class":94},[52,46587,46588,46590,46592],{"class":54,"line":35670},[52,46589,35673],{"class":79},[52,46591,2340],{"class":58},[52,46593,35678],{"class":79},[52,46595,46596],{"class":54,"line":35681},[52,46597,35684],{"class":94},[52,46599,46600],{"class":54,"line":35687},[52,46601,35690],{"class":94},[52,46603,46604,46606,46608],{"class":54,"line":35693},[52,46605,35696],{"class":79},[52,46607,2340],{"class":58},[52,46609,35678],{"class":79},[52,46611,46612],{"class":54,"line":35703},[52,46613,35706],{"class":94},[52,46615,46616,46618,46620],{"class":54,"line":35709},[52,46617,35712],{"class":79},[52,46619,2340],{"class":58},[52,46621,35717],{"class":79},[52,46623,46624],{"class":54,"line":35720},[52,46625,35723],{"class":94},[52,46627,46628,46630,46632],{"class":54,"line":35726},[52,46629,35729],{"class":79},[52,46631,2340],{"class":58},[52,46633,35717],{"class":79},[52,46635,46636],{"class":54,"line":35736},[52,46637,123],{"emptyLinePlaceholder":122},[52,46639,46640],{"class":54,"line":35741},[52,46641,35744],{"class":94},[52,46643,46644,46646,46648,46650,46652,46654,46656,46658,46660,46662,46664,46666,46668,46670,46672,46674,46676,46678,46680,46682],{"class":54,"line":35747},[52,46645,35101],{"class":308},[52,46647,1216],{"class":79},[52,46649,6573],{"class":62},[52,46651,35109],{"class":308},[52,46653,35758],{"class":62},[52,46655,383],{"class":308},[52,46657,35763],{"class":58},[52,46659,4132],{"class":308},[52,46661,35768],{"class":62},[52,46663,383],{"class":308},[52,46665,35763],{"class":58},[52,46667,4132],{"class":308},[52,46669,6573],{"class":62},[52,46671,35779],{"class":79},[52,46673,2642],{"class":58},[52,46675,629],{"class":308},[52,46677,35786],{"class":79},[52,46679,2642],{"class":58},[52,46681,629],{"class":308},[52,46683,35793],{"class":79},[52,46685,46686,46688,46690,46692,46694,46696,46698,46700,46702,46704,46706,46708,46710,46712,46714,46716,46718,46720,46722,46724],{"class":54,"line":35796},[52,46687,35101],{"class":308},[52,46689,1216],{"class":79},[52,46691,6573],{"class":62},[52,46693,35109],{"class":308},[52,46695,35807],{"class":62},[52,46697,383],{"class":308},[52,46699,35763],{"class":58},[52,46701,4132],{"class":308},[52,46703,35816],{"class":62},[52,46705,383],{"class":308},[52,46707,35763],{"class":58},[52,46709,4132],{"class":308},[52,46711,6573],{"class":62},[52,46713,35827],{"class":79},[52,46715,2642],{"class":58},[52,46717,629],{"class":308},[52,46719,35834],{"class":79},[52,46721,2642],{"class":58},[52,46723,629],{"class":308},[52,46725,35793],{"class":79},[52,46727,46728],{"class":54,"line":35843},[52,46729,123],{"emptyLinePlaceholder":122},[52,46731,46732],{"class":54,"line":35848},[52,46733,35851],{"class":94},[52,46735,46736,46738,46740,46742,46744,46746,46748],{"class":54,"line":35854},[52,46737,5497],{"class":58},[52,46739,35859],{"class":79},[52,46741,2642],{"class":58},[52,46743,629],{"class":308},[52,46745,567],{"class":79},[52,46747,2674],{"class":58},[52,46749,35870],{"class":79},[52,46751,46752],{"class":54,"line":35873},[52,46753,35876],{"class":94},[52,46755,46756,46758,46760,46762,46764,46766,46768],{"class":54,"line":35879},[52,46757,35882],{"class":79},[52,46759,3262],{"class":308},[52,46761,292],{"class":58},[52,46763,35889],{"class":79},[52,46765,2642],{"class":58},[52,46767,629],{"class":308},[52,46769,35896],{"class":79},[52,46771,46772],{"class":54,"line":35899},[52,46773,35902],{"class":94},[52,46775,46776],{"class":54,"line":35905},[52,46777,35908],{"class":94},[52,46779,46780,46782,46784],{"class":54,"line":35911},[52,46781,35914],{"class":79},[52,46783,292],{"class":58},[52,46785,34964],{"class":79},[52,46787,46788],{"class":54,"line":35921},[52,46789,123],{"emptyLinePlaceholder":122},[52,46791,46792],{"class":54,"line":35926},[52,46793,35929],{"class":94},[52,46795,46796,46798,46800,46802,46804],{"class":54,"line":35932},[52,46797,35935],{"class":79},[52,46799,292],{"class":58},[52,46801,35940],{"class":79},[52,46803,2642],{"class":58},[52,46805,35945],{"class":79},[52,46807,46808,46810,46812,46814,46816,46818,46820,46822,46824,46826,46828,46830,46832,46834,46836,46838,46840,46842],{"class":54,"line":35948},[52,46809,35101],{"class":308},[52,46811,1216],{"class":79},[52,46813,35955],{"class":62},[52,46815,383],{"class":308},[52,46817,35960],{"class":58},[52,46819,4132],{"class":308},[52,46821,3743],{"class":62},[52,46823,383],{"class":308},[52,46825,35960],{"class":58},[52,46827,4132],{"class":308},[52,46829,35973],{"class":62},[52,46831,35976],{"class":79},[52,46833,35979],{"class":58},[52,46835,2001],{"class":308},[52,46837,35984],{"class":79},[52,46839,1998],{"class":58},[52,46841,2001],{"class":308},[52,46843,33147],{"class":79},[52,46845,46846],{"class":54,"line":35993},[52,46847,39383],{"class":94},[52,46849,46850],{"class":54,"line":35999},[52,46851,39388],{"class":94},[52,46853,46854,46856,46858],{"class":54,"line":36005},[52,46855,39393],{"class":79},[52,46857,36017],{"class":62},[52,46859,708],{"class":79},[52,46861,46862],{"class":54,"line":36011},[52,46863,36037],{"class":94},[52,46865,46866,46868,46870,46872,46874,46876],{"class":54,"line":36022},[52,46867,36043],{"class":79},[52,46869,292],{"class":58},[52,46871,36048],{"class":79},[52,46873,36051],{"class":1223},[52,46875,292],{"class":58},[52,46877,110],{"class":79},[52,46879,46880,46882,46884,46886],{"class":54,"line":36028},[52,46881,36061],{"class":62},[52,46883,4049],{"class":79},[52,46885,36066],{"class":308},[52,46887,36069],{"class":79},[52,46889,46890,46892],{"class":54,"line":36034},[52,46891,36075],{"class":62},[52,46893,36078],{"class":79},[52,46895,46896,46898],{"class":54,"line":36040},[52,46897,36084],{"class":62},[52,46899,36087],{"class":79},[52,46901,46902,46904],{"class":54,"line":36058},[52,46903,36093],{"class":62},[52,46905,36096],{"class":79},[52,46907,46908,46910],{"class":54,"line":36072},[52,46909,36102],{"class":62},[52,46911,36105],{"class":79},[52,46913,46914],{"class":54,"line":36081},[52,46915,36111],{"class":79},[52,46917,46918],{"class":54,"line":36090},[52,46919,36117],{"class":94},[52,46921,46922,46924],{"class":54,"line":36099},[52,46923,1441],{"class":58},[52,46925,36125],{"class":79},[52,46927,46928],{"class":54,"line":36108},[52,46929,123],{"emptyLinePlaceholder":122},[52,46931,46932],{"class":54,"line":36114},[52,46933,36136],{"class":94},[52,46935,46936,46938,46940],{"class":54,"line":36120},[52,46937,34597],{"class":58},[52,46939,36144],{"class":75},[52,46941,36147],{"class":79},[52,46943,46944],{"class":54,"line":36128},[52,46945,36153],{"class":94},[52,46947,46948,46950,46952,46954,46956,46958,46960,46962],{"class":54,"line":36133},[52,46949,36159],{"class":79},[52,46951,34343],{"class":1223},[52,46953,292],{"class":58},[52,46955,1216],{"class":79},[52,46957,3698],{"class":308},[52,46959,389],{"class":79},[52,46961,3504],{"class":308},[52,46963,33147],{"class":79},[52,46965,46966],{"class":54,"line":36139},[52,46967,36179],{"class":94},[52,46969,46970],{"class":54,"line":36150},[52,46971,36185],{"class":94},[52,46973,46974],{"class":54,"line":36156},[52,46975,36191],{"class":94},[52,46977,46978,46980,46982,46984,46986,46988,46990],{"class":54,"line":36176},[52,46979,34377],{"class":79},[52,46981,629],{"class":308},[52,46983,389],{"class":79},[52,46985,564],{"class":308},[52,46987,389],{"class":79},[52,46989,629],{"class":308},[52,46991,708],{"class":79},[52,46993,46994],{"class":54,"line":36182},[52,46995,36214],{"class":94},[52,46997,46998],{"class":54,"line":36188},[52,46999,36220],{"class":94},[52,47001,47002],{"class":54,"line":36194},[52,47003,36226],{"class":94},[52,47005,47006],{"class":54,"line":36211},[52,47007,36232],{"class":94},[52,47009,47010],{"class":54,"line":36217},[52,47011,36238],{"class":94},[52,47013,47014,47016,47018,47020,47022,47024,47026,47028,47030],{"class":54,"line":36223},[52,47015,36244],{"class":79},[52,47017,36247],{"class":62},[52,47019,36250],{"class":79},[52,47021,36253],{"class":62},[52,47023,389],{"class":79},[52,47025,36258],{"class":1223},[52,47027,292],{"class":58},[52,47029,36263],{"class":62},[52,47031,708],{"class":79},[52,47033,47034,47036,47038,47040,47042,47044,47046,47048,47050],{"class":54,"line":36229},[52,47035,36244],{"class":79},[52,47037,36247],{"class":62},[52,47039,36275],{"class":79},[52,47041,36278],{"class":62},[52,47043,389],{"class":79},[52,47045,36258],{"class":1223},[52,47047,292],{"class":58},[52,47049,36287],{"class":62},[52,47051,708],{"class":79},[52,47053,47054],{"class":54,"line":36235},[52,47055,36295],{"class":94},[52,47057,47058],{"class":54,"line":36241},[52,47059,36301],{"class":79},[52,47061,47062],{"class":54,"line":36268},[52,47063,36307],{"class":94},[52,47065,47066,47068,47070],{"class":54,"line":36292},[52,47067,36313],{"class":79},[52,47069,36316],{"class":62},[52,47071,708],{"class":79},[52,47073,47074,47076,47078],{"class":54,"line":36298},[52,47075,36324],{"class":79},[52,47077,36327],{"class":62},[52,47079,708],{"class":79},[52,47081,47082],{"class":54,"line":36304},[52,47083,36335],{"class":94},[52,47085,47086,47088,47090,47092,47094,47096,47098],{"class":54,"line":36310},[52,47087,34377],{"class":79},[52,47089,629],{"class":308},[52,47091,389],{"class":79},[52,47093,564],{"class":308},[52,47095,389],{"class":79},[52,47097,564],{"class":308},[52,47099,708],{"class":79},[52,47101,47102,47104,47106,47108,47110,47112,47114,47116,47118],{"class":54,"line":36321},[52,47103,36244],{"class":79},[52,47105,36247],{"class":62},[52,47107,36362],{"class":79},[52,47109,36253],{"class":62},[52,47111,389],{"class":79},[52,47113,36258],{"class":1223},[52,47115,292],{"class":58},[52,47117,36373],{"class":62},[52,47119,708],{"class":79},[52,47121,47122,47124,47126,47128,47130,47132,47134,47136,47138],{"class":54,"line":36332},[52,47123,36244],{"class":79},[52,47125,36247],{"class":62},[52,47127,36385],{"class":79},[52,47129,36278],{"class":62},[52,47131,389],{"class":79},[52,47133,36258],{"class":1223},[52,47135,292],{"class":58},[52,47137,36396],{"class":62},[52,47139,708],{"class":79},[52,47141,47142],{"class":54,"line":36338},[52,47143,36404],{"class":94},[52,47145,47146],{"class":54,"line":36355},[52,47147,36301],{"class":79},[52,47149,47150,47152,47154],{"class":54,"line":36378},[52,47151,36313],{"class":79},[52,47153,36247],{"class":62},[52,47155,708],{"class":79},[52,47157,47158,47160,47162],{"class":54,"line":36401},[52,47159,36324],{"class":79},[52,47161,36426],{"class":62},[52,47163,708],{"class":79},[52,47165,47166],{"class":54,"line":36407},[52,47167,36434],{"class":79},[52,47169,47170],{"class":54,"line":36412},[52,47171,123],{"emptyLinePlaceholder":122},[52,47173,47174],{"class":54,"line":36421},[52,47175,36445],{"class":94},[52,47177,47178,47180,47182,47184,47186],{"class":54,"line":36431},[52,47179,4578],{"class":58},[52,47181,33870],{"class":308},[52,47183,5938],{"class":58},[52,47185,33875],{"class":62},[52,47187,6718],{"class":79},[52,47189,47190],{"class":54,"line":36437},[52,47191,36464],{"class":94},[52,47193,47194,47197,47199],{"class":54,"line":36442},[52,47195,47196],{"class":79},"    GoogLeNet",[52,47198,292],{"class":58},[52,47200,47201],{"class":79},"GoogLeNet(Inception)\n",[52,47203,47204,47206,47208],{"class":54,"line":36448},[52,47205,36481],{"class":79},[52,47207,292],{"class":58},[52,47209,36486],{"class":79},[52,47211,47212,47214,47216,47219,47221,47223,47225],{"class":54,"line":36461},[52,47213,36043],{"class":79},[52,47215,292],{"class":58},[52,47217,47218],{"class":79},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[52,47220,36499],{"class":1223},[52,47222,292],{"class":58},[52,47224,4137],{"class":308},[52,47226,708],{"class":79},[52,47228,47229],{"class":54,"line":36467},[52,47230,36511],{"class":79},[1696,47232,47233],{"start":83},[32,47234,43224],{},[42,47236,47238],{"className":33028,"code":47237,"language":33030,"meta":47,"style":47},"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",[49,47239,47240,47246,47256,47266,47270,47280,47291,47295,47299,47303,47311,47327,47337,47353,47363,47377,47381,47391,47401,47411,47417,47421,47425,47433,47437,47453,47461,47465,47469,47477,47485,47489,47493,47497,47501,47507,47511,47521,47529,47537,47541,47545,47549,47557,47561,47577,47581,47585,47589,47601,47605,47617,47621,47625,47637,47641,47651,47655,47659,47671,47675,47683,47687,47691,47699,47703,47711,47715,47719,47723,47727,47731,47747,47755,47759,47763,47811,47817,47821,47831,47839,47847,47851,47855,47859,47863,47871,47875,47891,47895,47903,47911],{"__ignoreMap":47},[52,47241,47242,47244],{"class":54,"line":55},[52,47243,33042],{"class":58},[52,47245,33045],{"class":79},[52,47247,47248,47250,47252,47254],{"class":54,"line":66},[52,47249,33042],{"class":58},[52,47251,34065],{"class":79},[52,47253,34033],{"class":58},[52,47255,34070],{"class":79},[52,47257,47258,47260,47262,47264],{"class":54,"line":83},[52,47259,33387],{"class":58},[52,47261,34048],{"class":79},[52,47263,33042],{"class":58},[52,47265,34053],{"class":79},[52,47267,47268],{"class":54,"line":91},[52,47269,36572],{"class":94},[52,47271,47272,47274,47276,47278],{"class":54,"line":98},[52,47273,33387],{"class":58},[52,47275,34018],{"class":79},[52,47277,33042],{"class":58},[52,47279,34023],{"class":79},[52,47281,47282,47284,47286,47288],{"class":54,"line":107},[52,47283,33387],{"class":58},[52,47285,34564],{"class":79},[52,47287,33042],{"class":58},[52,47289,47290],{"class":79}," GoogLeNet,Inception\n",[52,47292,47293],{"class":54,"line":113},[52,47294,123],{"emptyLinePlaceholder":122},[52,47296,47297],{"class":54,"line":119},[52,47298,123],{"emptyLinePlaceholder":122},[52,47300,47301],{"class":54,"line":126},[52,47302,36601],{"class":94},[52,47304,47305,47307,47309],{"class":54,"line":132},[52,47306,34597],{"class":58},[52,47308,36608],{"class":75},[52,47310,34603],{"class":79},[52,47312,47313,47315,47317,47319,47321,47323,47325],{"class":54,"line":138},[52,47314,36615],{"class":79},[52,47316,292],{"class":58},[52,47318,34105],{"class":79},[52,47320,34108],{"class":1223},[52,47322,292],{"class":58},[52,47324,34113],{"class":62},[52,47326,34116],{"class":79},[52,47328,47329,47331,47333,47335],{"class":54,"line":144},[52,47330,36632],{"class":1223},[52,47332,292],{"class":58},[52,47334,36637],{"class":308},[52,47336,34116],{"class":79},[52,47338,47339,47341,47343,47345,47347,47349,47351],{"class":54,"line":153},[52,47340,36644],{"class":1223},[52,47342,292],{"class":58},[52,47344,34143],{"class":79},[52,47346,34146],{"class":1223},[52,47348,292],{"class":58},[52,47350,38099],{"class":308},[52,47352,34154],{"class":79},[52,47354,47355,47357,47359,47361],{"class":54,"line":159},[52,47356,36661],{"class":1223},[52,47358,292],{"class":58},[52,47360,34126],{"class":308},[52,47362,708],{"class":79},[52,47364,47365,47367,47369,47371,47373,47375],{"class":54,"line":167},[52,47366,36672],{"class":79},[52,47368,292],{"class":58},[52,47370,34184],{"class":79},[52,47372,34187],{"class":1223},[52,47374,292],{"class":58},[52,47376,36683],{"class":79},[52,47378,47379],{"class":54,"line":173},[52,47380,36688],{"class":94},[52,47382,47383,47385,47387,47389],{"class":54,"line":181},[52,47384,36693],{"class":1223},[52,47386,292],{"class":58},[52,47388,629],{"class":308},[52,47390,34116],{"class":79},[52,47392,47393,47395,47397,47399],{"class":54,"line":186},[52,47394,36704],{"class":1223},[52,47396,292],{"class":58},[52,47398,34126],{"class":308},[52,47400,34116],{"class":79},[52,47402,47403,47405,47407,47409],{"class":54,"line":191},[52,47404,36715],{"class":1223},[52,47406,292],{"class":58},[52,47408,692],{"class":308},[52,47410,708],{"class":79},[52,47412,47413,47415],{"class":54,"line":196},[52,47414,1441],{"class":58},[52,47416,36728],{"class":79},[52,47418,47419],{"class":54,"line":201},[52,47420,123],{"emptyLinePlaceholder":122},[52,47422,47423],{"class":54,"line":206},[52,47424,36737],{"class":94},[52,47426,47427,47429,47431],{"class":54,"line":211},[52,47428,34597],{"class":58},[52,47430,36744],{"class":75},[52,47432,36747],{"class":79},[52,47434,47435],{"class":54,"line":218},[52,47436,36752],{"class":94},[52,47438,47439,47441,47443,47445,47447,47449,47451],{"class":54,"line":223},[52,47440,33887],{"class":79},[52,47442,292],{"class":58},[52,47444,33894],{"class":62},[52,47446,4736],{"class":58},[52,47448,33899],{"class":79},[52,47450,4733],{"class":58},[52,47452,36769],{"class":62},[52,47454,47455,47457,47459],{"class":54,"line":230},[52,47456,33939],{"class":79},[52,47458,292],{"class":58},[52,47460,34939],{"class":79},[52,47462,47463],{"class":54,"line":239},[52,47464,123],{"emptyLinePlaceholder":122},[52,47466,47467],{"class":54,"line":251},[52,47468,36786],{"class":94},[52,47470,47471,47473,47475],{"class":54,"line":256},[52,47472,36791],{"class":79},[52,47474,292],{"class":58},[52,47476,34992],{"class":308},[52,47478,47479,47481,47483],{"class":54,"line":262},[52,47480,36800],{"class":79},[52,47482,292],{"class":58},[52,47484,6072],{"class":308},[52,47486,47487],{"class":54,"line":268},[52,47488,123],{"emptyLinePlaceholder":122},[52,47490,47491],{"class":54,"line":280},[52,47492,36813],{"class":94},[52,47494,47495],{"class":54,"line":286},[52,47496,36818],{"class":94},[52,47498,47499],{"class":54,"line":300},[52,47500,36823],{"class":94},[52,47502,47503,47505],{"class":54,"line":314},[52,47504,36828],{"class":58},[52,47506,35534],{"class":79},[52,47508,47509],{"class":54,"line":327},[52,47510,36835],{"class":94},[52,47512,47513,47515,47517,47519],{"class":54,"line":333},[52,47514,1927],{"class":58},[52,47516,36842],{"class":79},[52,47518,28693],{"class":58},[52,47520,36847],{"class":79},[52,47522,47523,47525,47527],{"class":54,"line":360},[52,47524,36852],{"class":79},[52,47526,292],{"class":58},[52,47528,36857],{"class":79},[52,47530,47531,47533,47535],{"class":54,"line":365},[52,47532,36862],{"class":79},[52,47534,292],{"class":58},[52,47536,36867],{"class":79},[52,47538,47539],{"class":54,"line":371},[52,47540,36872],{"class":94},[52,47542,47543],{"class":54,"line":400},[52,47544,35525],{"class":79},[52,47546,47547],{"class":54,"line":405},[52,47548,36881],{"class":94},[52,47550,47551,47553,47555],{"class":54,"line":411},[52,47552,35310],{"class":79},[52,47554,292],{"class":58},[52,47556,36890],{"class":79},[52,47558,47559],{"class":54,"line":424},[52,47560,36895],{"class":94},[52,47562,47563,47565,47567,47569,47571,47573,47575],{"class":54,"line":436},[52,47564,35327],{"class":79},[52,47566,292],{"class":58},[52,47568,35332],{"class":79},[52,47570,35335],{"class":1223},[52,47572,292],{"class":58},[52,47574,629],{"class":308},[52,47576,708],{"class":79},[52,47578,47579],{"class":54,"line":449},[52,47580,36916],{"class":94},[52,47582,47583],{"class":54,"line":2160},[52,47584,36921],{"class":94},[52,47586,47587],{"class":54,"line":2186},[52,47588,36926],{"class":94},[52,47590,47591,47593,47595,47597,47599],{"class":54,"line":2209},[52,47592,36931],{"class":79},[52,47594,1910],{"class":58},[52,47596,35437],{"class":79},[52,47598,5938],{"class":58},[52,47600,36940],{"class":79},[52,47602,47603],{"class":54,"line":2233},[52,47604,36945],{"class":94},[52,47606,47607,47609,47611,47613,47615],{"class":54,"line":2238},[52,47608,36950],{"class":79},[52,47610,1910],{"class":58},[52,47612,36955],{"class":79},[52,47614,692],{"class":308},[52,47616,708],{"class":79},[52,47618,47619],{"class":54,"line":2243},[52,47620,123],{"emptyLinePlaceholder":122},[52,47622,47623],{"class":54,"line":2248},[52,47624,36968],{"class":94},[52,47626,47627,47629,47631,47633,47635],{"class":54,"line":2257},[52,47628,36973],{"class":79},[52,47630,292],{"class":58},[52,47632,36978],{"class":79},[52,47634,2340],{"class":58},[52,47636,36983],{"class":79},[52,47638,47639],{"class":54,"line":2262},[52,47640,36988],{"class":94},[52,47642,47643,47645,47647,47649],{"class":54,"line":2268},[52,47644,35101],{"class":308},[52,47646,1216],{"class":79},[52,47648,36997],{"class":62},[52,47650,37000],{"class":79},[52,47652,47653],{"class":54,"line":2297},[52,47654,123],{"emptyLinePlaceholder":122},[52,47656,47657],{"class":54,"line":2303},[52,47658,37009],{"class":94},[52,47660,47661,47663,47665,47667,47669],{"class":54,"line":2318},[52,47662,4578],{"class":58},[52,47664,33870],{"class":308},[52,47666,5938],{"class":58},[52,47668,33875],{"class":62},[52,47670,6718],{"class":79},[52,47672,47673],{"class":54,"line":2324},[52,47674,37026],{"class":94},[52,47676,47677,47679,47681],{"class":54,"line":2353},[52,47678,33939],{"class":79},[52,47680,292],{"class":58},[52,47682,47201],{"class":79},[52,47684,47685],{"class":54,"line":2362},[52,47686,37039],{"class":94},[52,47688,47689],{"class":54,"line":2368},[52,47690,37044],{"class":94},[52,47692,47693,47695,47697],{"class":54,"line":2376},[52,47694,37049],{"class":79},[52,47696,37052],{"class":62},[52,47698,33147],{"class":79},[52,47700,47701],{"class":54,"line":2381},[52,47702,37059],{"class":94},[52,47704,47705,47707,47709],{"class":54,"line":19252},[52,47706,36672],{"class":79},[52,47708,292],{"class":58},[52,47710,37068],{"class":79},[52,47712,47713],{"class":54,"line":19258},[52,47714,37073],{"class":94},[52,47716,47717],{"class":54,"line":19281},[52,47718,37078],{"class":79},[52,47720,47721],{"class":54,"line":19287},[52,47722,123],{"emptyLinePlaceholder":122},[52,47724,47725],{"class":54,"line":19310},[52,47726,37087],{"class":94},[52,47728,47729],{"class":54,"line":19324},[52,47730,37092],{"class":94},[52,47732,47733,47735,47737,47739,47741,47743,47745],{"class":54,"line":19344},[52,47734,33887],{"class":79},[52,47736,292],{"class":58},[52,47738,33894],{"class":62},[52,47740,4736],{"class":58},[52,47742,33899],{"class":79},[52,47744,4733],{"class":58},[52,47746,36769],{"class":62},[52,47748,47749,47751,47753],{"class":54,"line":19350},[52,47750,33939],{"class":79},[52,47752,292],{"class":58},[52,47754,34939],{"class":79},[52,47756,47757],{"class":54,"line":19361},[52,47758,37121],{"class":94},[52,47760,47761],{"class":54,"line":19384},[52,47762,37126],{"class":94},[52,47764,47765,47767,47769,47771,47773,47775,47777,47779,47781,47783,47785,47787,47789,47791,47793,47795,47797,47799,47801,47803,47805,47807,47809],{"class":54,"line":19406},[52,47766,37131],{"class":79},[52,47768,292],{"class":58},[52,47770,4080],{"class":79},[52,47772,37138],{"class":62},[52,47774,389],{"class":79},[52,47776,37143],{"class":62},[52,47778,389],{"class":79},[52,47780,37148],{"class":62},[52,47782,389],{"class":79},[52,47784,37153],{"class":62},[52,47786,389],{"class":79},[52,47788,37158],{"class":62},[52,47790,389],{"class":79},[52,47792,37163],{"class":62},[52,47794,389],{"class":79},[52,47796,37168],{"class":62},[52,47798,389],{"class":79},[52,47800,37173],{"class":62},[52,47802,389],{"class":79},[52,47804,37178],{"class":62},[52,47806,389],{"class":79},[52,47808,37183],{"class":62},[52,47810,35896],{"class":79},[52,47812,47813,47815],{"class":54,"line":19411},[52,47814,36828],{"class":58},[52,47816,35534],{"class":79},[52,47818,47819],{"class":54,"line":19417},[52,47820,37196],{"class":94},[52,47822,47823,47825,47827,47829],{"class":54,"line":19431},[52,47824,1927],{"class":58},[52,47826,37203],{"class":79},[52,47828,28693],{"class":58},[52,47830,36847],{"class":79},[52,47832,47833,47835,47837],{"class":54,"line":19444},[52,47834,35260],{"class":79},[52,47836,292],{"class":58},[52,47838,35265],{"class":79},[52,47840,47841,47843,47845],{"class":54,"line":19449},[52,47842,35275],{"class":79},[52,47844,292],{"class":58},[52,47846,35280],{"class":79},[52,47848,47849],{"class":54,"line":19463},[52,47850,123],{"emptyLinePlaceholder":122},[52,47852,47853],{"class":54,"line":19468},[52,47854,37232],{"class":94},[52,47856,47857],{"class":54,"line":19474},[52,47858,35525],{"class":79},[52,47860,47861],{"class":54,"line":19479},[52,47862,37241],{"class":94},[52,47864,47865,47867,47869],{"class":54,"line":19493},[52,47866,35310],{"class":79},[52,47868,292],{"class":58},[52,47870,35315],{"class":79},[52,47872,47873],{"class":54,"line":19498},[52,47874,37254],{"class":94},[52,47876,47877,47879,47881,47883,47885,47887,47889],{"class":54,"line":19503},[52,47878,35327],{"class":79},[52,47880,292],{"class":58},[52,47882,35332],{"class":79},[52,47884,35335],{"class":1223},[52,47886,292],{"class":58},[52,47888,629],{"class":308},[52,47890,708],{"class":79},[52,47892,47893],{"class":54,"line":19517},[52,47894,37275],{"class":94},[52,47896,47897,47899,47901],{"class":54,"line":19529},[52,47898,37280],{"class":79},[52,47900,292],{"class":58},[52,47902,37285],{"class":79},[52,47904,47905,47907,47909],{"class":54,"line":19534},[52,47906,37290],{"class":79},[52,47908,292],{"class":58},[52,47910,37295],{"class":79},[52,47912,47913,47915,47917,47919,47921,47923,47925,47927],{"class":54,"line":19547},[52,47914,37300],{"class":308},[52,47916,1216],{"class":79},[52,47918,37305],{"class":62},[52,47920,37308],{"class":79},[52,47922,37311],{"class":62},[52,47924,389],{"class":79},[52,47926,37316],{"class":62},[52,47928,37319],{"class":79},[3195,47930,47932],{"id":47931},"_24训练自己的数据集","2.4.训练自己的数据集",[14,47934,47935],{},"猫狗分类任务",[14,47937,47938],{},"划分数据集和验证集",[42,47940,47942],{"className":33028,"code":47941,"language":33030,"meta":47,"style":47},"# 创建脚本，用于划分数据集和验证集\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",[49,47943,47944,47949,47956,47961,47972,47979,47983,47993,48007,48016,48020,48025,48035,48055,48059,48064,48074,48085,48098,48102,48107,48116,48126,48137,48141,48146,48156,48160,48165,48170,48175,48180,48185,48189,48199,48226,48239,48251,48278,48283,48288,48302,48307,48319,48334,48349,48357,48361,48366,48372,48384,48397,48402,48407,48412,48462,48468,48472],{"__ignoreMap":47},[52,47945,47946],{"class":54,"line":55},[52,47947,47948],{"class":94},"# 创建脚本，用于划分数据集和验证集\n",[52,47950,47951,47953],{"class":54,"line":66},[52,47952,33042],{"class":58},[52,47954,47955],{"class":79}," os\n",[52,47957,47958],{"class":54,"line":83},[52,47959,47960],{"class":94},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[52,47962,47963,47965,47968,47970],{"class":54,"line":91},[52,47964,33387],{"class":58},[52,47966,47967],{"class":79}," shutil ",[52,47969,33042],{"class":58},[52,47971,34472],{"class":79},[52,47973,47974,47976],{"class":54,"line":98},[52,47975,33042],{"class":58},[52,47977,47978],{"class":79}," random\n",[52,47980,47981],{"class":54,"line":107},[52,47982,123],{"emptyLinePlaceholder":122},[52,47984,47985,47987,47990],{"class":54,"line":113},[52,47986,34597],{"class":58},[52,47988,47989],{"class":75}," mkfile",[52,47991,47992],{"class":79},"(file):\n",[52,47994,47995,47997,47999,48002,48005],{"class":54,"line":119},[52,47996,6088],{"class":58},[52,47998,41580],{"class":58},[52,48000,48001],{"class":79}," os.path.exists(",[52,48003,48004],{"class":1223},"file",[52,48006,33436],{"class":79},[52,48008,48009,48012,48014],{"class":54,"line":126},[52,48010,48011],{"class":79},"        os.makedirs(",[52,48013,48004],{"class":1223},[52,48015,708],{"class":79},[52,48017,48018],{"class":54,"line":132},[52,48019,123],{"emptyLinePlaceholder":122},[52,48021,48022],{"class":54,"line":138},[52,48023,48024],{"class":94},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[52,48026,48027,48030,48032],{"class":54,"line":144},[52,48028,48029],{"class":79},"file_path",[52,48031,292],{"class":58},[52,48033,48034],{"class":62},"'data_cat_dog'\n",[52,48036,48037,48040,48042,48045,48047,48050,48052],{"class":54,"line":153},[52,48038,48039],{"class":79},"flower_class",[52,48041,292],{"class":58},[52,48043,48044],{"class":79},"[cla ",[52,48046,6014],{"class":58},[52,48048,48049],{"class":79}," cla ",[52,48051,28693],{"class":58},[52,48053,48054],{"class":79}," os.listdir(file_path)]\n",[52,48056,48057],{"class":54,"line":159},[52,48058,123],{"emptyLinePlaceholder":122},[52,48060,48061],{"class":54,"line":167},[52,48062,48063],{"class":94},"# 创建训练集train文件夹\n",[52,48065,48066,48069,48072],{"class":54,"line":173},[52,48067,48068],{"class":79},"mkfile(",[52,48070,48071],{"class":62},"'data\u002Ftrain'",[52,48073,708],{"class":79},[52,48075,48076,48078,48080,48082],{"class":54,"line":181},[52,48077,6014],{"class":58},[52,48079,48049],{"class":79},[52,48081,28693],{"class":58},[52,48083,48084],{"class":79}," flower_class:\n",[52,48086,48087,48090,48093,48095],{"class":54,"line":186},[52,48088,48089],{"class":79},"    mkfile(",[52,48091,48092],{"class":62},"'data\u002Ftrain\u002F'",[52,48094,2004],{"class":58},[52,48096,48097],{"class":79},"cla)\n",[52,48099,48100],{"class":54,"line":191},[52,48101,123],{"emptyLinePlaceholder":122},[52,48103,48104],{"class":54,"line":196},[52,48105,48106],{"class":94},"# 创建验证集val文件夹\n",[52,48108,48109,48111,48114],{"class":54,"line":201},[52,48110,48068],{"class":79},[52,48112,48113],{"class":62},"'data\u002Ftest'",[52,48115,708],{"class":79},[52,48117,48118,48120,48122,48124],{"class":54,"line":206},[52,48119,6014],{"class":58},[52,48121,48049],{"class":79},[52,48123,28693],{"class":58},[52,48125,48084],{"class":79},[52,48127,48128,48130,48133,48135],{"class":54,"line":211},[52,48129,48089],{"class":79},[52,48131,48132],{"class":62},"'data\u002Ftest\u002F'",[52,48134,2004],{"class":58},[52,48136,48097],{"class":79},[52,48138,48139],{"class":54,"line":218},[52,48140,123],{"emptyLinePlaceholder":122},[52,48142,48143],{"class":54,"line":223},[52,48144,48145],{"class":94},"# 划分比例，训练集：测试集=9：1\n",[52,48147,48148,48151,48153],{"class":54,"line":230},[52,48149,48150],{"class":79},"split_rate",[52,48152,292],{"class":58},[52,48154,48155],{"class":308},"0.1\n",[52,48157,48158],{"class":54,"line":239},[52,48159,123],{"emptyLinePlaceholder":122},[52,48161,48162],{"class":54,"line":251},[52,48163,48164],{"class":94},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[52,48166,48167],{"class":54,"line":256},[52,48168,48169],{"class":94},"# cla_path：当前类别的原始图片路径\n",[52,48171,48172],{"class":54,"line":262},[52,48173,48174],{"class":94},"# images：当前类别下所有图片的文件名列表\n",[52,48176,48177],{"class":54,"line":268},[52,48178,48179],{"class":94},"# num：该类别图片总数\n",[52,48181,48182],{"class":54,"line":280},[52,48183,48184],{"class":94},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[52,48186,48187],{"class":54,"line":286},[52,48188,123],{"emptyLinePlaceholder":122},[52,48190,48191,48193,48195,48197],{"class":54,"line":300},[52,48192,6014],{"class":58},[52,48194,48049],{"class":79},[52,48196,28693],{"class":58},[52,48198,48084],{"class":79},[52,48200,48201,48204,48206,48209,48211,48214,48217,48219,48221,48223],{"class":54,"line":314},[52,48202,48203],{"class":79},"    cla_path ",[52,48205,292],{"class":58},[52,48207,48208],{"class":79}," file_path ",[52,48210,2004],{"class":58},[52,48212,48213],{"class":62}," '\u002F'",[52,48215,48216],{"class":58}," +",[52,48218,48049],{"class":79},[52,48220,2004],{"class":58},[52,48222,48213],{"class":62},[52,48224,48225],{"class":94},"  # 某一类别的子目录\n",[52,48227,48228,48231,48233,48236],{"class":54,"line":327},[52,48229,48230],{"class":79},"    images ",[52,48232,292],{"class":58},[52,48234,48235],{"class":79}," os.listdir(cla_path)  ",[52,48237,48238],{"class":94},"# iamges 列表存储了该目录下所有图像的名称\n",[52,48240,48241,48244,48246,48248],{"class":54,"line":333},[52,48242,48243],{"class":79},"    num ",[52,48245,292],{"class":58},[52,48247,1842],{"class":308},[52,48249,48250],{"class":79},"(images)\n",[52,48252,48253,48256,48258,48261,48263,48265,48267,48270,48272,48275],{"class":54,"line":360},[52,48254,48255],{"class":79},"    eval_index ",[52,48257,292],{"class":58},[52,48259,48260],{"class":79}," random.sample(images, ",[52,48262,3693],{"class":1223},[52,48264,292],{"class":58},[52,48266,242],{"class":308},[52,48268,48269],{"class":79},"(num ",[52,48271,3053],{"class":58},[52,48273,48274],{"class":79}," split_rate))  ",[52,48276,48277],{"class":94},"# 从images列表中随机抽取 k 个图像名称\n",[52,48279,48280],{"class":54,"line":365},[52,48281,48282],{"class":94},"    # 遍历该类别下的所有图片\n",[52,48284,48285],{"class":54,"line":371},[52,48286,48287],{"class":94},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[52,48289,48290,48292,48295,48297,48299],{"class":54,"line":400},[52,48291,679],{"class":58},[52,48293,48294],{"class":79}," index, image ",[52,48296,28693],{"class":58},[52,48298,34256],{"class":308},[52,48300,48301],{"class":79},"(images):\n",[52,48303,48304],{"class":54,"line":405},[52,48305,48306],{"class":94},"        # eval_index 中保存验证集val的图像名称\n",[52,48308,48309,48311,48314,48316],{"class":54,"line":411},[52,48310,5497],{"class":58},[52,48312,48313],{"class":79}," image ",[52,48315,28693],{"class":58},[52,48317,48318],{"class":79}," eval_index:\n",[52,48320,48321,48324,48326,48329,48331],{"class":54,"line":424},[52,48322,48323],{"class":79},"            image_path ",[52,48325,292],{"class":58},[52,48327,48328],{"class":79}," cla_path ",[52,48330,2004],{"class":58},[52,48332,48333],{"class":79}," image\n",[52,48335,48336,48339,48341,48344,48346],{"class":54,"line":436},[52,48337,48338],{"class":79},"            new_path ",[52,48340,292],{"class":58},[52,48342,48343],{"class":62}," 'data\u002Ftest\u002F'",[52,48345,48216],{"class":58},[52,48347,48348],{"class":79}," cla\n",[52,48350,48351,48354],{"class":54,"line":449},[52,48352,48353],{"class":79},"            copy(image_path, new_path)  ",[52,48355,48356],{"class":94},"# 将选中的图像复制到新路径\n",[52,48358,48359],{"class":54,"line":2160},[52,48360,123],{"emptyLinePlaceholder":122},[52,48362,48363],{"class":54,"line":2186},[52,48364,48365],{"class":94},"        # 其余的图像保存在训练集train中\n",[52,48367,48368,48370],{"class":54,"line":2209},[52,48369,5532],{"class":58},[52,48371,6718],{"class":79},[52,48373,48374,48376,48378,48380,48382],{"class":54,"line":2233},[52,48375,48323],{"class":79},[52,48377,292],{"class":58},[52,48379,48328],{"class":79},[52,48381,2004],{"class":58},[52,48383,48333],{"class":79},[52,48385,48386,48388,48390,48393,48395],{"class":54,"line":2238},[52,48387,48338],{"class":79},[52,48389,292],{"class":58},[52,48391,48392],{"class":62}," 'data\u002Ftrain\u002F'",[52,48394,48216],{"class":58},[52,48396,48348],{"class":79},[52,48398,48399],{"class":54,"line":2243},[52,48400,48401],{"class":79},"            copy(image_path, new_path)\n",[52,48403,48404],{"class":54,"line":2248},[52,48405,48406],{"class":94},"            # 打印进度条信息\n",[52,48408,48409],{"class":54,"line":2257},[52,48410,48411],{"class":94},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[52,48413,48414,48416,48418,48420,48423,48425,48427,48430,48432,48434,48436,48439,48442,48444,48446,48449,48452,48454,48456,48459],{"class":54,"line":2262},[52,48415,35101],{"class":308},[52,48417,1216],{"class":79},[52,48419,2844],{"class":62},[52,48421,48422],{"class":308},"\\r",[52,48424,4080],{"class":62},[52,48426,35109],{"class":308},[52,48428,48429],{"class":62},"] processing [",[52,48431,35109],{"class":308},[52,48433,2340],{"class":62},[52,48435,35109],{"class":308},[52,48437,48438],{"class":62},"]\"",[52,48440,48441],{"class":79},".format(cla, index ",[52,48443,2004],{"class":58},[52,48445,27768],{"class":308},[52,48447,48448],{"class":79},", num), ",[52,48450,48451],{"class":1223},"end",[52,48453,292],{"class":58},[52,48455,10607],{"class":62},[52,48457,48458],{"class":79},")  ",[52,48460,48461],{"class":94},"# processing bar\n",[52,48463,48464,48466],{"class":54,"line":2268},[52,48465,33949],{"class":308},[52,48467,248],{"class":79},[52,48469,48470],{"class":54,"line":2297},[52,48471,123],{"emptyLinePlaceholder":122},[52,48473,48474,48476,48478,48481],{"class":54,"line":2303},[52,48475,33065],{"class":308},[52,48477,1216],{"class":79},[52,48479,48480],{"class":62},"\"processing done!\"",[52,48482,708],{"class":79},[14,48484,48485],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[24646,48487,48489],{"id":48488},"_242模型代码","2.4.2.模型代码",[14,48491,48492],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[42,48494,48496],{"className":33028,"code":48495,"language":33030,"meta":47,"style":47},"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",[49,48497,48498,48504,48514,48524,48528,48544,48552,48566,48576,48580,48610,48614,48648,48694,48698,48732,48778,48782,48786,48820,48850,48854,48862,48876,48898,48920,48938,48942,48956,48960,48964,48980,48984,48992,49006,49016,49060,49064,49092,49096,49106,49134,49138,49174,49178,49206,49210,49220,49252,49284,49312,49316,49326,49358,49390,49422,49454,49486,49514,49518,49528,49560,49592,49604,49608,49620,49624,49628,49640,49648,49668,49672,49676,49680,49684,49688,49692,49706,49714,49722,49734,49748,49756,49760,49768,49778,49788,49798,49808,49818,49824,49828,49832,49844,49864,49872],{"__ignoreMap":47},[52,48499,48500,48502],{"class":54,"line":55},[52,48501,33042],{"class":58},[52,48503,33045],{"class":79},[52,48505,48506,48508,48510,48512],{"class":54,"line":66},[52,48507,33387],{"class":58},[52,48509,33390],{"class":79},[52,48511,33042],{"class":58},[52,48513,33395],{"class":79},[52,48515,48516,48518,48520,48522],{"class":54,"line":83},[52,48517,33387],{"class":58},[52,48519,33407],{"class":79},[52,48521,33042],{"class":58},[52,48523,33412],{"class":79},[52,48525,48526],{"class":54,"line":91},[52,48527,123],{"emptyLinePlaceholder":122},[52,48529,48530,48532,48534,48536,48538,48540,48542],{"class":54,"line":98},[52,48531,17342],{"class":58},[52,48533,44143],{"class":75},[52,48535,1216],{"class":79},[52,48537,33428],{"class":75},[52,48539,3757],{"class":79},[52,48541,33433],{"class":75},[52,48543,33436],{"class":79},[52,48545,48546,48548,48550],{"class":54,"line":107},[52,48547,33451],{"class":58},[52,48549,33454],{"class":308},[52,48551,44162],{"class":79},[52,48553,48554,48556,48558,48560,48562,48564],{"class":54,"line":113},[52,48555,33467],{"class":308},[52,48557,44169],{"class":79},[52,48559,33473],{"class":308},[52,48561,33476],{"class":79},[52,48563,33479],{"class":308},[52,48565,248],{"class":79},[52,48567,48568,48570,48572,48574],{"class":54,"line":119},[52,48569,33495],{"class":308},[52,48571,37421],{"class":79},[52,48573,292],{"class":58},[52,48575,37426],{"class":79},[52,48577,48578],{"class":54,"line":126},[52,48579,44192],{"class":94},[52,48581,48582,48584,48586,48588,48590,48592,48594,48596,48598,48600,48602,48604,48606,48608],{"class":54,"line":132},[52,48583,33495],{"class":308},[52,48585,44199],{"class":79},[52,48587,292],{"class":58},[52,48589,33503],{"class":79},[52,48591,33506],{"class":1223},[52,48593,292],{"class":58},[52,48595,44210],{"class":79},[52,48597,33515],{"class":1223},[52,48599,292],{"class":58},[52,48601,44217],{"class":79},[52,48603,33524],{"class":1223},[52,48605,292],{"class":58},[52,48607,629],{"class":308},[52,48609,708],{"class":79},[52,48611,48612],{"class":54,"line":138},[52,48613,44230],{"class":94},[52,48615,48616,48618,48620,48622,48624,48626,48628,48630,48632,48634,48636,48638,48640,48642,48644,48646],{"class":54,"line":144},[52,48617,33495],{"class":308},[52,48619,44237],{"class":79},[52,48621,292],{"class":58},[52,48623,33503],{"class":79},[52,48625,33506],{"class":1223},[52,48627,292],{"class":58},[52,48629,44210],{"class":79},[52,48631,33515],{"class":1223},[52,48633,292],{"class":58},[52,48635,44254],{"class":79},[52,48637,692],{"class":308},[52,48639,44259],{"class":79},[52,48641,33524],{"class":1223},[52,48643,292],{"class":58},[52,48645,629],{"class":308},[52,48647,708],{"class":79},[52,48649,48650,48652,48654,48656,48658,48660,48662,48664,48666,48668,48670,48672,48674,48676,48678,48680,48682,48684,48686,48688,48690,48692],{"class":54,"line":153},[52,48651,33495],{"class":308},[52,48653,44274],{"class":79},[52,48655,292],{"class":58},[52,48657,33503],{"class":79},[52,48659,33506],{"class":1223},[52,48661,292],{"class":58},[52,48663,44254],{"class":79},[52,48665,692],{"class":308},[52,48667,44259],{"class":79},[52,48669,33515],{"class":1223},[52,48671,292],{"class":58},[52,48673,44254],{"class":79},[52,48675,629],{"class":308},[52,48677,44259],{"class":79},[52,48679,33524],{"class":1223},[52,48681,292],{"class":58},[52,48683,2313],{"class":308},[52,48685,389],{"class":79},[52,48687,33533],{"class":1223},[52,48689,292],{"class":58},[52,48691,629],{"class":308},[52,48693,708],{"class":79},[52,48695,48696],{"class":54,"line":159},[52,48697,44319],{"class":94},[52,48699,48700,48702,48704,48706,48708,48710,48712,48714,48716,48718,48720,48722,48724,48726,48728,48730],{"class":54,"line":167},[52,48701,33495],{"class":308},[52,48703,44326],{"class":79},[52,48705,292],{"class":58},[52,48707,33503],{"class":79},[52,48709,33506],{"class":1223},[52,48711,292],{"class":58},[52,48713,44210],{"class":79},[52,48715,33515],{"class":1223},[52,48717,292],{"class":58},[52,48719,44343],{"class":79},[52,48721,692],{"class":308},[52,48723,44259],{"class":79},[52,48725,33524],{"class":1223},[52,48727,292],{"class":58},[52,48729,629],{"class":308},[52,48731,708],{"class":79},[52,48733,48734,48736,48738,48740,48742,48744,48746,48748,48750,48752,48754,48756,48758,48760,48762,48764,48766,48768,48770,48772,48774,48776],{"class":54,"line":173},[52,48735,33495],{"class":308},[52,48737,44362],{"class":79},[52,48739,292],{"class":58},[52,48741,33503],{"class":79},[52,48743,33506],{"class":1223},[52,48745,292],{"class":58},[52,48747,44343],{"class":79},[52,48749,692],{"class":308},[52,48751,44259],{"class":79},[52,48753,33515],{"class":1223},[52,48755,292],{"class":58},[52,48757,44343],{"class":79},[52,48759,629],{"class":308},[52,48761,44259],{"class":79},[52,48763,33524],{"class":1223},[52,48765,292],{"class":58},[52,48767,1805],{"class":308},[52,48769,389],{"class":79},[52,48771,33533],{"class":1223},[52,48773,292],{"class":58},[52,48775,564],{"class":308},[52,48777,708],{"class":79},[52,48779,48780],{"class":54,"line":181},[52,48781,44407],{"class":94},[52,48783,48784],{"class":54,"line":186},[52,48785,44412],{"class":94},[52,48787,48788,48790,48792,48794,48796,48798,48800,48802,48804,48806,48808,48810,48812,48814,48816,48818],{"class":54,"line":191},[52,48789,33495],{"class":308},[52,48791,44419],{"class":79},[52,48793,292],{"class":58},[52,48795,37479],{"class":79},[52,48797,33524],{"class":1223},[52,48799,292],{"class":58},[52,48801,2313],{"class":308},[52,48803,389],{"class":79},[52,48805,33579],{"class":1223},[52,48807,292],{"class":58},[52,48809,629],{"class":308},[52,48811,389],{"class":79},[52,48813,33533],{"class":1223},[52,48815,292],{"class":58},[52,48817,629],{"class":308},[52,48819,708],{"class":79},[52,48821,48822,48824,48826,48828,48830,48832,48834,48836,48838,48840,48842,48844,48846,48848],{"class":54,"line":196},[52,48823,33495],{"class":308},[52,48825,44454],{"class":79},[52,48827,292],{"class":58},[52,48829,33503],{"class":79},[52,48831,33506],{"class":1223},[52,48833,292],{"class":58},[52,48835,44210],{"class":79},[52,48837,33515],{"class":1223},[52,48839,292],{"class":58},[52,48841,44471],{"class":79},[52,48843,33524],{"class":1223},[52,48845,292],{"class":58},[52,48847,629],{"class":308},[52,48849,708],{"class":79},[52,48851,48852],{"class":54,"line":201},[52,48853,123],{"emptyLinePlaceholder":122},[52,48855,48856,48858,48860],{"class":54,"line":206},[52,48857,33451],{"class":58},[52,48859,33743],{"class":75},[52,48861,33746],{"class":79},[52,48863,48864,48866,48868,48870,48872,48874],{"class":54,"line":211},[52,48865,44496],{"class":79},[52,48867,292],{"class":58},[52,48869,33473],{"class":308},[52,48871,37834],{"class":79},[52,48873,33473],{"class":308},[52,48875,44507],{"class":79},[52,48877,48878,48880,48882,48884,48886,48888,48890,48892,48894,48896],{"class":54,"line":218},[52,48879,10045],{"class":79},[52,48881,292],{"class":58},[52,48883,33473],{"class":308},[52,48885,37834],{"class":79},[52,48887,33473],{"class":308},[52,48889,44522],{"class":79},[52,48891,33473],{"class":308},[52,48893,37834],{"class":79},[52,48895,33473],{"class":308},[52,48897,44531],{"class":79},[52,48899,48900,48902,48904,48906,48908,48910,48912,48914,48916,48918],{"class":54,"line":223},[52,48901,44536],{"class":79},[52,48903,292],{"class":58},[52,48905,33473],{"class":308},[52,48907,37834],{"class":79},[52,48909,33473],{"class":308},[52,48911,44547],{"class":79},[52,48913,33473],{"class":308},[52,48915,37834],{"class":79},[52,48917,33473],{"class":308},[52,48919,44556],{"class":79},[52,48921,48922,48924,48926,48928,48930,48932,48934,48936],{"class":54,"line":230},[52,48923,44561],{"class":79},[52,48925,292],{"class":58},[52,48927,33473],{"class":308},[52,48929,37834],{"class":79},[52,48931,33473],{"class":308},[52,48933,44572],{"class":79},[52,48935,33473],{"class":308},[52,48937,44577],{"class":79},[52,48939,48940],{"class":54,"line":239},[52,48941,44582],{"class":94},[52,48943,48944,48946,48948,48950,48952,48954],{"class":54,"line":251},[52,48945,17400],{"class":58},[52,48947,44589],{"class":79},[52,48949,35335],{"class":1223},[52,48951,292],{"class":58},[52,48953,629],{"class":308},[52,48955,708],{"class":79},[52,48957,48958],{"class":54,"line":256},[52,48959,123],{"emptyLinePlaceholder":122},[52,48961,48962],{"class":54,"line":262},[52,48963,44610],{"class":94},[52,48965,48966,48968,48970,48972,48974,48976,48978],{"class":54,"line":268},[52,48967,17342],{"class":58},[52,48969,44617],{"class":75},[52,48971,1216],{"class":79},[52,48973,33428],{"class":75},[52,48975,3757],{"class":79},[52,48977,33433],{"class":75},[52,48979,33436],{"class":79},[52,48981,48982],{"class":54,"line":280},[52,48983,44632],{"class":94},[52,48985,48986,48988,48990],{"class":54,"line":286},[52,48987,33451],{"class":58},[52,48989,33454],{"class":308},[52,48991,44641],{"class":79},[52,48993,48994,48996,48998,49000,49002,49004],{"class":54,"line":300},[52,48995,33467],{"class":308},[52,48997,44648],{"class":79},[52,48999,33473],{"class":308},[52,49001,33476],{"class":79},[52,49003,33479],{"class":308},[52,49005,248],{"class":79},[52,49007,49008,49010,49012,49014],{"class":54,"line":314},[52,49009,33495],{"class":308},[52,49011,44663],{"class":79},[52,49013,292],{"class":58},[52,49015,40659],{"class":79},[52,49017,49018,49020,49022,49024,49026,49028,49030,49032,49034,49036,49038,49040,49042,49044,49046,49048,49050,49052,49054,49056,49058],{"class":54,"line":327},[52,49019,40664],{"class":79},[52,49021,33506],{"class":1223},[52,49023,292],{"class":58},[52,49025,2313],{"class":308},[52,49027,389],{"class":79},[52,49029,33515],{"class":1223},[52,49031,292],{"class":58},[52,49033,3417],{"class":308},[52,49035,389],{"class":79},[52,49037,33524],{"class":1223},[52,49039,292],{"class":58},[52,49041,3575],{"class":308},[52,49043,389],{"class":79},[52,49045,33579],{"class":1223},[52,49047,292],{"class":58},[52,49049,564],{"class":308},[52,49051,389],{"class":79},[52,49053,33533],{"class":1223},[52,49055,292],{"class":58},[52,49057,2313],{"class":308},[52,49059,40697],{"class":79},[52,49061,49062],{"class":54,"line":333},[52,49063,40702],{"class":79},[52,49065,49066,49068,49070,49072,49074,49076,49078,49080,49082,49084,49086,49088,49090],{"class":54,"line":360},[52,49067,40747],{"class":79},[52,49069,33524],{"class":1223},[52,49071,292],{"class":58},[52,49073,2313],{"class":308},[52,49075,389],{"class":79},[52,49077,33579],{"class":1223},[52,49079,292],{"class":58},[52,49081,564],{"class":308},[52,49083,389],{"class":79},[52,49085,33533],{"class":1223},[52,49087,292],{"class":58},[52,49089,629],{"class":308},[52,49091,708],{"class":79},[52,49093,49094],{"class":54,"line":365},[52,49095,40776],{"class":79},[52,49097,49098,49100,49102,49104],{"class":54,"line":371},[52,49099,33495],{"class":308},[52,49101,44754],{"class":79},[52,49103,292],{"class":58},[52,49105,40659],{"class":79},[52,49107,49108,49110,49112,49114,49116,49118,49120,49122,49124,49126,49128,49130,49132],{"class":54,"line":400},[52,49109,40664],{"class":79},[52,49111,33506],{"class":1223},[52,49113,292],{"class":58},[52,49115,3417],{"class":308},[52,49117,389],{"class":79},[52,49119,33515],{"class":1223},[52,49121,292],{"class":58},[52,49123,3417],{"class":308},[52,49125,389],{"class":79},[52,49127,33524],{"class":1223},[52,49129,292],{"class":58},[52,49131,629],{"class":308},[52,49133,40697],{"class":79},[52,49135,49136],{"class":54,"line":405},[52,49137,40702],{"class":79},[52,49139,49140,49142,49144,49146,49148,49150,49152,49154,49156,49158,49160,49162,49164,49166,49168,49170,49172],{"class":54,"line":411},[52,49141,40664],{"class":79},[52,49143,33506],{"class":1223},[52,49145,292],{"class":58},[52,49147,3417],{"class":308},[52,49149,389],{"class":79},[52,49151,33515],{"class":1223},[52,49153,292],{"class":58},[52,49155,44809],{"class":308},[52,49157,389],{"class":79},[52,49159,33524],{"class":1223},[52,49161,292],{"class":58},[52,49163,2313],{"class":308},[52,49165,389],{"class":79},[52,49167,33533],{"class":1223},[52,49169,292],{"class":58},[52,49171,629],{"class":308},[52,49173,40697],{"class":79},[52,49175,49176],{"class":54,"line":424},[52,49177,40702],{"class":79},[52,49179,49180,49182,49184,49186,49188,49190,49192,49194,49196,49198,49200,49202,49204],{"class":54,"line":436},[52,49181,40747],{"class":79},[52,49183,33524],{"class":1223},[52,49185,292],{"class":58},[52,49187,2313],{"class":308},[52,49189,389],{"class":79},[52,49191,33579],{"class":1223},[52,49193,292],{"class":58},[52,49195,564],{"class":308},[52,49197,389],{"class":79},[52,49199,33533],{"class":1223},[52,49201,292],{"class":58},[52,49203,629],{"class":308},[52,49205,708],{"class":79},[52,49207,49208],{"class":54,"line":449},[52,49209,40776],{"class":79},[52,49211,49212,49214,49216,49218],{"class":54,"line":2160},[52,49213,33495],{"class":308},[52,49215,44870],{"class":79},[52,49217,292],{"class":58},[52,49219,40659],{"class":79},[52,49221,49222,49224,49226,49228,49230,49232,49234,49236,49238,49240,49242,49244,49246,49248,49250],{"class":54,"line":2186},[52,49223,44879],{"class":79},[52,49225,44809],{"class":308},[52,49227,389],{"class":79},[52,49229,3417],{"class":308},[52,49231,44888],{"class":79},[52,49233,3423],{"class":308},[52,49235,389],{"class":79},[52,49237,34720],{"class":308},[52,49239,44897],{"class":79},[52,49241,3798],{"class":308},[52,49243,389],{"class":79},[52,49245,3411],{"class":308},[52,49247,44906],{"class":79},[52,49249,3411],{"class":308},[52,49251,40697],{"class":79},[52,49253,49254,49256,49258,49260,49262,49264,49266,49268,49270,49272,49274,49276,49278,49280,49282],{"class":54,"line":2209},[52,49255,44879],{"class":79},[52,49257,37520],{"class":308},[52,49259,389],{"class":79},[52,49261,34720],{"class":308},[52,49263,44888],{"class":79},[52,49265,34720],{"class":308},[52,49267,389],{"class":79},[52,49269,44809],{"class":308},[52,49271,44897],{"class":79},[52,49273,3411],{"class":308},[52,49275,389],{"class":79},[52,49277,3423],{"class":308},[52,49279,44906],{"class":79},[52,49281,3417],{"class":308},[52,49283,40697],{"class":79},[52,49285,49286,49288,49290,49292,49294,49296,49298,49300,49302,49304,49306,49308,49310],{"class":54,"line":2233},[52,49287,40747],{"class":79},[52,49289,33524],{"class":1223},[52,49291,292],{"class":58},[52,49293,2313],{"class":308},[52,49295,389],{"class":79},[52,49297,33579],{"class":1223},[52,49299,292],{"class":58},[52,49301,564],{"class":308},[52,49303,389],{"class":79},[52,49305,33533],{"class":1223},[52,49307,292],{"class":58},[52,49309,629],{"class":308},[52,49311,708],{"class":79},[52,49313,49314],{"class":54,"line":2238},[52,49315,40776],{"class":79},[52,49317,49318,49320,49322,49324],{"class":54,"line":2243},[52,49319,33495],{"class":308},[52,49321,44981],{"class":79},[52,49323,292],{"class":58},[52,49325,40659],{"class":79},[52,49327,49328,49330,49332,49334,49336,49338,49340,49342,49344,49346,49348,49350,49352,49354,49356],{"class":54,"line":2248},[52,49329,44879],{"class":79},[52,49331,44992],{"class":308},[52,49333,389],{"class":79},[52,49335,44809],{"class":308},[52,49337,44888],{"class":79},[52,49339,3423],{"class":308},[52,49341,389],{"class":79},[52,49343,45005],{"class":308},[52,49345,44897],{"class":79},[52,49347,3798],{"class":308},[52,49349,389],{"class":79},[52,49351,3804],{"class":308},[52,49353,44906],{"class":79},[52,49355,3417],{"class":308},[52,49357,40697],{"class":79},[52,49359,49360,49362,49364,49366,49368,49370,49372,49374,49376,49378,49380,49382,49384,49386,49388],{"class":54,"line":2257},[52,49361,44879],{"class":79},[52,49363,41107],{"class":308},[52,49365,389],{"class":79},[52,49367,23696],{"class":308},[52,49369,44888],{"class":79},[52,49371,3815],{"class":308},[52,49373,389],{"class":79},[52,49375,34151],{"class":308},[52,49377,44897],{"class":79},[52,49379,3990],{"class":308},[52,49381,389],{"class":79},[52,49383,3417],{"class":308},[52,49385,44906],{"class":79},[52,49387,3417],{"class":308},[52,49389,40697],{"class":79},[52,49391,49392,49394,49396,49398,49400,49402,49404,49406,49408,49410,49412,49414,49416,49418,49420],{"class":54,"line":2262},[52,49393,44879],{"class":79},[52,49395,41107],{"class":308},[52,49397,389],{"class":79},[52,49399,34720],{"class":308},[52,49401,44888],{"class":79},[52,49403,34720],{"class":308},[52,49405,389],{"class":79},[52,49407,37520],{"class":308},[52,49409,44897],{"class":79},[52,49411,3990],{"class":308},[52,49413,389],{"class":79},[52,49415,3417],{"class":308},[52,49417,44906],{"class":79},[52,49419,3417],{"class":308},[52,49421,40697],{"class":79},[52,49423,49424,49426,49428,49430,49432,49434,49436,49438,49440,49442,49444,49446,49448,49450,49452],{"class":54,"line":2268},[52,49425,44879],{"class":79},[52,49427,41107],{"class":308},[52,49429,389],{"class":79},[52,49431,3815],{"class":308},[52,49433,44888],{"class":79},[52,49435,34720],{"class":308},[52,49437,389],{"class":79},[52,49439,45102],{"class":308},[52,49441,44897],{"class":79},[52,49443,3411],{"class":308},[52,49445,389],{"class":79},[52,49447,3417],{"class":308},[52,49449,44906],{"class":79},[52,49451,3417],{"class":308},[52,49453,40697],{"class":79},[52,49455,49456,49458,49460,49462,49464,49466,49468,49470,49472,49474,49476,49478,49480,49482,49484],{"class":54,"line":2297},[52,49457,44879],{"class":79},[52,49459,45123],{"class":308},[52,49461,389],{"class":79},[52,49463,37520],{"class":308},[52,49465,44888],{"class":79},[52,49467,23696],{"class":308},[52,49469,389],{"class":79},[52,49471,45136],{"class":308},[52,49473,44897],{"class":79},[52,49475,3411],{"class":308},[52,49477,389],{"class":79},[52,49479,34720],{"class":308},[52,49481,44906],{"class":79},[52,49483,34720],{"class":308},[52,49485,40697],{"class":79},[52,49487,49488,49490,49492,49494,49496,49498,49500,49502,49504,49506,49508,49510,49512],{"class":54,"line":2303},[52,49489,40747],{"class":79},[52,49491,33524],{"class":1223},[52,49493,292],{"class":58},[52,49495,2313],{"class":308},[52,49497,389],{"class":79},[52,49499,33579],{"class":1223},[52,49501,292],{"class":58},[52,49503,564],{"class":308},[52,49505,389],{"class":79},[52,49507,33533],{"class":1223},[52,49509,292],{"class":58},[52,49511,629],{"class":308},[52,49513,708],{"class":79},[52,49515,49516],{"class":54,"line":2318},[52,49517,40776],{"class":79},[52,49519,49520,49522,49524,49526],{"class":54,"line":2324},[52,49521,33495],{"class":308},[52,49523,45189],{"class":79},[52,49525,292],{"class":58},[52,49527,40659],{"class":79},[52,49529,49530,49532,49534,49536,49538,49540,49542,49544,49546,49548,49550,49552,49554,49556,49558],{"class":54,"line":2353},[52,49531,44879],{"class":79},[52,49533,45200],{"class":308},[52,49535,389],{"class":79},[52,49537,37520],{"class":308},[52,49539,44888],{"class":79},[52,49541,23696],{"class":308},[52,49543,389],{"class":79},[52,49545,45136],{"class":308},[52,49547,44897],{"class":79},[52,49549,3411],{"class":308},[52,49551,389],{"class":79},[52,49553,34720],{"class":308},[52,49555,44906],{"class":79},[52,49557,34720],{"class":308},[52,49559,40697],{"class":79},[52,49561,49562,49564,49566,49568,49570,49572,49574,49576,49578,49580,49582,49584,49586,49588,49590],{"class":54,"line":2362},[52,49563,44879],{"class":79},[52,49565,45200],{"class":308},[52,49567,389],{"class":79},[52,49569,37590],{"class":308},[52,49571,44888],{"class":79},[52,49573,44809],{"class":308},[52,49575,389],{"class":79},[52,49577,37590],{"class":308},[52,49579,44897],{"class":79},[52,49581,3804],{"class":308},[52,49583,389],{"class":79},[52,49585,34720],{"class":308},[52,49587,44906],{"class":79},[52,49589,34720],{"class":308},[52,49591,40697],{"class":79},[52,49593,49594,49596,49598,49600,49602],{"class":54,"line":2368},[52,49595,45263],{"class":79},[52,49597,629],{"class":308},[52,49599,389],{"class":79},[52,49601,629],{"class":308},[52,49603,45272],{"class":79},[52,49605,49606],{"class":54,"line":2376},[52,49607,41440],{"class":79},[52,49609,49610,49612,49614,49616,49618],{"class":54,"line":2381},[52,49611,41445],{"class":79},[52,49613,45283],{"class":308},[52,49615,389],{"class":79},[52,49617,564],{"class":308},[52,49619,708],{"class":79},[52,49621,49622],{"class":54,"line":19252},[52,49623,40776],{"class":79},[52,49625,49626],{"class":54,"line":19258},[52,49627,45298],{"class":94},[52,49629,49630,49632,49634,49636,49638],{"class":54,"line":19281},[52,49631,1927],{"class":58},[52,49633,41518],{"class":79},[52,49635,28693],{"class":58},[52,49637,41523],{"class":308},[52,49639,41526],{"class":79},[52,49641,49642,49644,49646],{"class":54,"line":19287},[52,49643,7614],{"class":58},[52,49645,41538],{"class":308},[52,49647,41541],{"class":79},[52,49649,49650,49652,49654,49656,49658,49660,49662,49664,49666],{"class":54,"line":19310},[52,49651,41551],{"class":79},[52,49653,45325],{"class":1223},[52,49655,292],{"class":58},[52,49657,45330],{"class":62},[52,49659,389],{"class":79},[52,49661,41554],{"class":1223},[52,49663,292],{"class":58},[52,49665,41559],{"class":62},[52,49667,708],{"class":79},[52,49669,49670],{"class":54,"line":19324},[52,49671,45345],{"class":94},[52,49673,49674],{"class":54,"line":19344},[52,49675,45350],{"class":94},[52,49677,49678],{"class":54,"line":19350},[52,49679,45355],{"class":94},[52,49681,49682],{"class":54,"line":19361},[52,49683,45360],{"class":94},[52,49685,49686],{"class":54,"line":19384},[52,49687,45365],{"class":94},[52,49689,49690],{"class":54,"line":19406},[52,49691,45370],{"class":94},[52,49693,49694,49696,49698,49700,49702,49704],{"class":54,"line":19411},[52,49695,41571],{"class":58},[52,49697,41574],{"class":79},[52,49699,41577],{"class":58},[52,49701,41580],{"class":58},[52,49703,41583],{"class":308},[52,49705,6718],{"class":79},[52,49707,49708,49710,49712],{"class":54,"line":19417},[52,49709,41595],{"class":79},[52,49711,692],{"class":308},[52,49713,708],{"class":79},[52,49715,49716,49718,49720],{"class":54,"line":19431},[52,49717,45397],{"class":58},[52,49719,41538],{"class":308},[52,49721,41614],{"class":79},[52,49723,49724,49726,49728,49730,49732],{"class":54,"line":19444},[52,49725,45406],{"class":79},[52,49727,692],{"class":308},[52,49729,389],{"class":79},[52,49731,41636],{"class":308},[52,49733,708],{"class":79},[52,49735,49736,49738,49740,49742,49744,49746],{"class":54,"line":19449},[52,49737,45419],{"class":58},[52,49739,41574],{"class":79},[52,49741,41577],{"class":58},[52,49743,41580],{"class":58},[52,49745,41583],{"class":308},[52,49747,6718],{"class":79},[52,49749,49750,49752,49754],{"class":54,"line":19463},[52,49751,45434],{"class":79},[52,49753,692],{"class":308},[52,49755,708],{"class":79},[52,49757,49758],{"class":54,"line":19468},[52,49759,37815],{"class":94},[52,49761,49762,49764,49766],{"class":54,"line":19474},[52,49763,33451],{"class":58},[52,49765,33743],{"class":75},[52,49767,33746],{"class":79},[52,49769,49770,49772,49774,49776],{"class":54,"line":19479},[52,49771,33751],{"class":79},[52,49773,292],{"class":58},[52,49775,33473],{"class":308},[52,49777,45461],{"class":79},[52,49779,49780,49782,49784,49786],{"class":54,"line":19493},[52,49781,33751],{"class":79},[52,49783,292],{"class":58},[52,49785,33473],{"class":308},[52,49787,45472],{"class":79},[52,49789,49790,49792,49794,49796],{"class":54,"line":19498},[52,49791,33751],{"class":79},[52,49793,292],{"class":58},[52,49795,33473],{"class":308},[52,49797,45483],{"class":79},[52,49799,49800,49802,49804,49806],{"class":54,"line":19503},[52,49801,33751],{"class":79},[52,49803,292],{"class":58},[52,49805,33473],{"class":308},[52,49807,45494],{"class":79},[52,49809,49810,49812,49814,49816],{"class":54,"line":19517},[52,49811,33751],{"class":79},[52,49813,292],{"class":58},[52,49815,33473],{"class":308},[52,49817,45505],{"class":79},[52,49819,49820,49822],{"class":54,"line":19529},[52,49821,17400],{"class":58},[52,49823,33859],{"class":79},[52,49825,49826],{"class":54,"line":19534},[52,49827,123],{"emptyLinePlaceholder":122},[52,49829,49830],{"class":54,"line":19547},[52,49831,45520],{"class":94},[52,49833,49834,49836,49838,49840,49842],{"class":54,"line":19552},[52,49835,4578],{"class":58},[52,49837,33870],{"class":308},[52,49839,5938],{"class":58},[52,49841,33875],{"class":62},[52,49843,6718],{"class":79},[52,49845,49846,49848,49850,49852,49854,49856,49858,49860,49862],{"class":54,"line":19557},[52,49847,33887],{"class":79},[52,49849,292],{"class":58},[52,49851,33101],{"class":79},[52,49853,33894],{"class":62},[52,49855,4736],{"class":58},[52,49857,33899],{"class":79},[52,49859,4733],{"class":58},[52,49861,33126],{"class":62},[52,49863,708],{"class":79},[52,49865,49866,49868,49870],{"class":54,"line":19562},[52,49867,33939],{"class":79},[52,49869,292],{"class":58},[52,49871,45561],{"class":79},[52,49873,49874,49876,49878,49880,49882,49884,49886,49888],{"class":54,"line":19575},[52,49875,33949],{"class":308},[52,49877,33952],{"class":79},[52,49879,629],{"class":308},[52,49881,389],{"class":79},[52,49883,34151],{"class":308},[52,49885,389],{"class":79},[52,49887,34151],{"class":308},[52,49889,33965],{"class":79},[24646,49891,49893],{"id":49892},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,49895,49896],{},"计算图片的均值与方差，用于训练中归一化处理操作",[42,49898,49900],{"className":33028,"code":49899,"language":33030,"meta":47,"style":47},"# 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",[49,49901,49902,49907,49920,49925,49931,49936,49946,49950,49955,49965,49969,49974,49984,50001,50005,50010,50022,50034,50065,50074,50084,50094,50098,50103,50118,50122,50127,50132,50137,50147,50152,50177,50181,50186,50201,50205,50218,50222,50227,50232,50237,50242,50247,50257,50267,50290,50298,50306,50314,50318,50330,50334,50339,50343,50347,50354,50374,50398,50405,50419,50424,50429,50433,50447,50451,50463],{"__ignoreMap":47},[52,49903,49904],{"class":54,"line":55},[52,49905,49906],{"class":94},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[52,49908,49909,49911,49914,49917],{"class":54,"line":66},[52,49910,33387],{"class":58},[52,49912,49913],{"class":308}," PIL",[52,49915,49916],{"class":58}," import",[52,49918,49919],{"class":79}," Image\n",[52,49921,49922],{"class":54,"line":83},[52,49923,49924],{"class":94},"# os 用来处理文件夹和文件路径\n",[52,49926,49927,49929],{"class":54,"line":91},[52,49928,33042],{"class":58},[52,49930,47955],{"class":79},[52,49932,49933],{"class":54,"line":98},[52,49934,49935],{"class":94},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[52,49937,49938,49940,49942,49944],{"class":54,"line":107},[52,49939,33042],{"class":58},[52,49941,34030],{"class":79},[52,49943,34033],{"class":58},[52,49945,34036],{"class":79},[52,49947,49948],{"class":54,"line":113},[52,49949,123],{"emptyLinePlaceholder":122},[52,49951,49952],{"class":54,"line":119},[52,49953,49954],{"class":94},"# 文件夹路径，包含所有图片文件\n",[52,49956,49957,49960,49962],{"class":54,"line":126},[52,49958,49959],{"class":79},"folder_path ",[52,49961,292],{"class":58},[52,49963,49964],{"class":62}," 'data_cat_dog'\n",[52,49966,49967],{"class":54,"line":132},[52,49968,123],{"emptyLinePlaceholder":122},[52,49970,49971],{"class":54,"line":138},[52,49972,49973],{"class":94},"# 初始化累积变量\n",[52,49975,49976,49979,49981],{"class":54,"line":144},[52,49977,49978],{"class":79},"total_pixels ",[52,49980,292],{"class":58},[52,49982,49983],{"class":308}," 0\n",[52,49985,49986,49989,49991,49994,49996,49998],{"class":54,"line":153},[52,49987,49988],{"class":79},"sum_normalized_pixel_values ",[52,49990,292],{"class":58},[52,49992,49993],{"class":79}," np.zeros(",[52,49995,2313],{"class":308},[52,49997,48458],{"class":79},[52,49999,50000],{"class":94},"# 如果是RGB图像，需要三个通道的均值和方差\n",[52,50002,50003],{"class":54,"line":159},[52,50004,123],{"emptyLinePlaceholder":122},[52,50006,50007],{"class":54,"line":167},[52,50008,50009],{"class":94},"# 遍历文件夹中的图片文件\n",[52,50011,50012,50014,50017,50019],{"class":54,"line":173},[52,50013,6014],{"class":58},[52,50015,50016],{"class":79}," root, dirs, files ",[52,50018,28693],{"class":58},[52,50020,50021],{"class":79}," os.walk(folder_path):\n",[52,50023,50024,50026,50029,50031],{"class":54,"line":181},[52,50025,679],{"class":58},[52,50027,50028],{"class":79}," filename ",[52,50030,28693],{"class":58},[52,50032,50033],{"class":79}," files:\n",[52,50035,50036,50038,50041,50044,50046,50049,50051,50054,50056,50059,50062],{"class":54,"line":186},[52,50037,5497],{"class":58},[52,50039,50040],{"class":79}," filename.endswith((",[52,50042,50043],{"class":62},"'.jpg'",[52,50045,15083],{"class":79},[52,50047,50048],{"class":62},"'.jpeg'",[52,50050,15083],{"class":79},[52,50052,50053],{"class":62},"'.png'",[52,50055,15083],{"class":79},[52,50057,50058],{"class":62},"'.bmp'",[52,50060,50061],{"class":79},")):  ",[52,50063,50064],{"class":94},"# 可根据实际情况添加其他格式\n",[52,50066,50067,50069,50071],{"class":54,"line":191},[52,50068,48323],{"class":79},[52,50070,292],{"class":58},[52,50072,50073],{"class":79}," os.path.join(root, filename)\n",[52,50075,50076,50079,50081],{"class":54,"line":196},[52,50077,50078],{"class":79},"            image ",[52,50080,292],{"class":58},[52,50082,50083],{"class":79}," Image.open(image_path)\n",[52,50085,50086,50089,50091],{"class":54,"line":201},[52,50087,50088],{"class":79},"            image_array ",[52,50090,292],{"class":58},[52,50092,50093],{"class":79}," np.array(image)\n",[52,50095,50096],{"class":54,"line":206},[52,50097,123],{"emptyLinePlaceholder":122},[52,50099,50100],{"class":54,"line":211},[52,50101,50102],{"class":94},"            # 归一化像素值到0-1之间\n",[52,50104,50105,50108,50110,50113,50115],{"class":54,"line":218},[52,50106,50107],{"class":79},"            normalized_image_array ",[52,50109,292],{"class":58},[52,50111,50112],{"class":79}," image_array ",[52,50114,2340],{"class":58},[52,50116,50117],{"class":308}," 255.0\n",[52,50119,50120],{"class":54,"line":223},[52,50121,123],{"emptyLinePlaceholder":122},[52,50123,50124],{"class":54,"line":230},[52,50125,50126],{"class":94},"            # print(image_path)\n",[52,50128,50129],{"class":54,"line":239},[52,50130,50131],{"class":94},"            # print(normalized_image_array.shape)\n",[52,50133,50134],{"class":54,"line":251},[52,50135,50136],{"class":94},"            # 累积归一化后的像素值和像素数量\n",[52,50138,50139,50142,50144],{"class":54,"line":256},[52,50140,50141],{"class":79},"            total_pixels ",[52,50143,1910],{"class":58},[52,50145,50146],{"class":79}," normalized_image_array.size\n",[52,50148,50149],{"class":54,"line":262},[52,50150,50151],{"class":94},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[52,50153,50154,50157,50159,50162,50165,50167,50169,50171,50173,50175],{"class":54,"line":268},[52,50155,50156],{"class":79},"            sum_normalized_pixel_values ",[52,50158,1910],{"class":58},[52,50160,50161],{"class":79}," np.sum(normalized_image_array, ",[52,50163,50164],{"class":1223},"axis",[52,50166,292],{"class":58},[52,50168,1216],{"class":79},[52,50170,692],{"class":308},[52,50172,15083],{"class":79},[52,50174,629],{"class":308},[52,50176,33147],{"class":79},[52,50178,50179],{"class":54,"line":280},[52,50180,123],{"emptyLinePlaceholder":122},[52,50182,50183],{"class":54,"line":286},[52,50184,50185],{"class":94},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[52,50187,50188,50191,50193,50196,50198],{"class":54,"line":300},[52,50189,50190],{"class":79},"mean ",[52,50192,292],{"class":58},[52,50194,50195],{"class":79}," sum_normalized_pixel_values ",[52,50197,2340],{"class":58},[52,50199,50200],{"class":79}," total_pixels\n",[52,50202,50203],{"class":54,"line":314},[52,50204,123],{"emptyLinePlaceholder":122},[52,50206,50207,50210,50212,50214,50216],{"class":54,"line":327},[52,50208,50209],{"class":79},"sum_squared_diff ",[52,50211,292],{"class":58},[52,50213,49993],{"class":79},[52,50215,2313],{"class":308},[52,50217,708],{"class":79},[52,50219,50220],{"class":54,"line":333},[52,50221,123],{"emptyLinePlaceholder":122},[52,50223,50224],{"class":54,"line":360},[52,50225,50226],{"class":94},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[52,50228,50229],{"class":54,"line":365},[52,50230,50231],{"class":94},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[52,50233,50234],{"class":54,"line":371},[52,50235,50236],{"class":94},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[52,50238,50239],{"class":54,"line":400},[52,50240,50241],{"class":94},"# Image.open(image_path)：打开图片\n",[52,50243,50244],{"class":54,"line":405},[52,50245,50246],{"class":94},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[52,50248,50249,50251,50253,50255],{"class":54,"line":411},[52,50250,6014],{"class":58},[52,50252,50016],{"class":79},[52,50254,28693],{"class":58},[52,50256,50021],{"class":79},[52,50258,50259,50261,50263,50265],{"class":54,"line":424},[52,50260,679],{"class":58},[52,50262,50028],{"class":79},[52,50264,28693],{"class":58},[52,50266,50033],{"class":79},[52,50268,50269,50271,50273,50275,50277,50279,50281,50283,50285,50287],{"class":54,"line":436},[52,50270,5497],{"class":58},[52,50272,50040],{"class":79},[52,50274,50043],{"class":62},[52,50276,15083],{"class":79},[52,50278,50048],{"class":62},[52,50280,15083],{"class":79},[52,50282,50053],{"class":62},[52,50284,15083],{"class":79},[52,50286,50058],{"class":62},[52,50288,50289],{"class":79},")):\n",[52,50291,50292,50294,50296],{"class":54,"line":449},[52,50293,48323],{"class":79},[52,50295,292],{"class":58},[52,50297,50073],{"class":79},[52,50299,50300,50302,50304],{"class":54,"line":2160},[52,50301,50078],{"class":79},[52,50303,292],{"class":58},[52,50305,50083],{"class":79},[52,50307,50308,50310,50312],{"class":54,"line":2186},[52,50309,50088],{"class":79},[52,50311,292],{"class":58},[52,50313,50093],{"class":79},[52,50315,50316],{"class":54,"line":2209},[52,50317,50102],{"class":94},[52,50319,50320,50322,50324,50326,50328],{"class":54,"line":2233},[52,50321,50107],{"class":79},[52,50323,292],{"class":58},[52,50325,50112],{"class":79},[52,50327,2340],{"class":58},[52,50329,50117],{"class":308},[52,50331,50332],{"class":54,"line":2238},[52,50333,50131],{"class":94},[52,50335,50336],{"class":54,"line":2243},[52,50337,50338],{"class":94},"            # print(mean.shape)\n",[52,50340,50341],{"class":54,"line":2248},[52,50342,50126],{"class":94},[52,50344,50345],{"class":54,"line":2257},[52,50346,123],{"emptyLinePlaceholder":122},[52,50348,50349,50352],{"class":54,"line":2262},[52,50350,50351],{"class":58},"            try",[52,50353,6718],{"class":79},[52,50355,50356,50359,50361,50364,50366,50369,50371],{"class":54,"line":2268},[52,50357,50358],{"class":79},"                diff ",[52,50360,292],{"class":58},[52,50362,50363],{"class":79}," (normalized_image_array ",[52,50365,2642],{"class":58},[52,50367,50368],{"class":79}," mean) ",[52,50370,3139],{"class":58},[52,50372,50373],{"class":308}," 2\n",[52,50375,50376,50379,50381,50384,50386,50388,50390,50392,50394,50396],{"class":54,"line":2297},[52,50377,50378],{"class":79},"                sum_squared_diff ",[52,50380,1910],{"class":58},[52,50382,50383],{"class":79}," np.sum(diff, ",[52,50385,50164],{"class":1223},[52,50387,292],{"class":58},[52,50389,1216],{"class":79},[52,50391,692],{"class":308},[52,50393,15083],{"class":79},[52,50395,629],{"class":308},[52,50397,33147],{"class":79},[52,50399,50400,50403],{"class":54,"line":2303},[52,50401,50402],{"class":58},"            except",[52,50404,6718],{"class":79},[52,50406,50407,50410,50412,50414,50417],{"class":54,"line":2318},[52,50408,50409],{"class":308},"                print",[52,50411,1216],{"class":79},[52,50413,3273],{"class":58},[52,50415,50416],{"class":62},"\"捕获到自定义异常\"",[52,50418,708],{"class":79},[52,50420,50421],{"class":54,"line":2324},[52,50422,50423],{"class":94},"            # diff = (normalized_image_array - mean) ** 2\n",[52,50425,50426],{"class":54,"line":2353},[52,50427,50428],{"class":94},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[52,50430,50431],{"class":54,"line":2362},[52,50432,123],{"emptyLinePlaceholder":122},[52,50434,50435,50438,50440,50443,50445],{"class":54,"line":2368},[52,50436,50437],{"class":79},"variance ",[52,50439,292],{"class":58},[52,50441,50442],{"class":79}," sum_squared_diff ",[52,50444,2340],{"class":58},[52,50446,50200],{"class":79},[52,50448,50449],{"class":54,"line":2376},[52,50450,123],{"emptyLinePlaceholder":122},[52,50452,50453,50455,50457,50460],{"class":54,"line":2381},[52,50454,33065],{"class":308},[52,50456,1216],{"class":79},[52,50458,50459],{"class":62},"\"Mean:\"",[52,50461,50462],{"class":79},", mean)\n",[52,50464,50465,50467,50469,50472],{"class":54,"line":19252},[52,50466,33065],{"class":308},[52,50468,1216],{"class":79},[52,50470,50471],{"class":62},"\"Variance:\"",[52,50473,50474],{"class":79},", variance)\n",[42,50476,50478],{"className":33028,"code":50477,"language":33030,"meta":47,"style":47},"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",[49,50479,50480,50486,50492,50502,50508,50518,50532,50542,50552,50562,50566,50576,50586,50590,50594,50602,50607,50612,50631,50635,50640,50645,50650,50655,50696,50701,50711,50716,50729,50734,50739,50744,50749,50754,50758,50763,50768,50790,50794,50826,50840,50850,50860,50864,50874,50888,50898,50908,50918,50924,50928,50932,50936,50940,50944,50952,50972,50976,50980,50984,50988,51004,51008,51012,51020,51024,51028,51036,51040,51044,51048,51056,51060,51064,51068,51076,51080,51088,51092,51100,51104,51112,51116,51124,51128,51132,51140,51144,51148,51160,51184,51198,51202,51206,51210,51218,51222,51230,51234,51242,51246,51254,51258,51266,51270,51278,51282,51294,51298,51306,51310,51318,51322,51326,51330,51334,51342,51346,51362,51366,51374,51378,51382,51386,51390,51394,51398,51402,51418,51422,51434,51438,51450,51454,51466,51470,51478,51482,51490,51494,51498,51502,51508,51512,51520,51524,51540,51544,51552,51556,51572,51584,51588,51600,51604,51608,51616,51620,51624,51632,51636,51644,51648,51656,51660,51664,51706,51748,51752,51756,51772,51776,51792,51796,51800,51808,51812,51816,51828,51866,51870,51874,51882,51886,51900,51910,51916,51922,51928,51934,51938,51942,51948,51952,51956,51964,51968,51986,51990,51994,51998,52014,52018,52022,52026,52030,52034,52054,52074,52078,52082,52086,52094,52102,52106,52122,52142,52162,52166,52171,52180,52189,52194,52199,52204,52217,52222,52231,52240,52257],{"__ignoreMap":47},[52,50481,50482,50484],{"class":54,"line":55},[52,50483,33042],{"class":58},[52,50485,34472],{"class":79},[52,50487,50488,50490],{"class":54,"line":66},[52,50489,33042],{"class":58},[52,50491,34479],{"class":79},[52,50493,50494,50496,50498,50500],{"class":54,"line":83},[52,50495,33042],{"class":58},[52,50497,34490],{"class":79},[52,50499,34033],{"class":58},[52,50501,34495],{"class":79},[52,50503,50504,50506],{"class":54,"line":91},[52,50505,33042],{"class":58},[52,50507,33045],{"class":79},[52,50509,50510,50512,50514,50516],{"class":54,"line":98},[52,50511,33387],{"class":58},[52,50513,34065],{"class":79},[52,50515,33042],{"class":58},[52,50517,34512],{"class":79},[52,50519,50520,50522,50524,50526,50529],{"class":54,"line":107},[52,50521,33387],{"class":58},[52,50523,34018],{"class":79},[52,50525,33042],{"class":58},[52,50527,50528],{"class":79}," ImageFolder ",[52,50530,50531],{"class":94},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[52,50533,50534,50536,50538,50540],{"class":54,"line":113},[52,50535,33387],{"class":58},[52,50537,34048],{"class":79},[52,50539,33042],{"class":58},[52,50541,34053],{"class":79},[52,50543,50544,50546,50548,50550],{"class":54,"line":119},[52,50545,33042],{"class":58},[52,50547,34065],{"class":79},[52,50549,34033],{"class":58},[52,50551,34070],{"class":79},[52,50553,50554,50556,50558,50560],{"class":54,"line":126},[52,50555,33042],{"class":58},[52,50557,34082],{"class":79},[52,50559,34033],{"class":58},[52,50561,34087],{"class":79},[52,50563,50564],{"class":54,"line":132},[52,50565,34557],{"class":94},[52,50567,50568,50570,50572,50574],{"class":54,"line":138},[52,50569,33387],{"class":58},[52,50571,34564],{"class":79},[52,50573,33042],{"class":58},[52,50575,45681],{"class":79},[52,50577,50578,50580,50582,50584],{"class":54,"line":144},[52,50579,33387],{"class":58},[52,50581,33390],{"class":79},[52,50583,33042],{"class":58},[52,50585,33395],{"class":79},[52,50587,50588],{"class":54,"line":153},[52,50589,123],{"emptyLinePlaceholder":122},[52,50591,50592],{"class":54,"line":159},[52,50593,34592],{"class":94},[52,50595,50596,50598,50600],{"class":54,"line":167},[52,50597,34597],{"class":58},[52,50599,34600],{"class":75},[52,50601,34603],{"class":79},[52,50603,50604],{"class":54,"line":173},[52,50605,50606],{"class":94},"    # 导入自己的数据集，并进行数据处理\n",[52,50608,50609],{"class":54,"line":181},[52,50610,50611],{"class":94},"    # 定义数据集的路径\n",[52,50613,50614,50617,50619,50621,50623,50625,50629],{"class":54,"line":186},[52,50615,50616],{"class":308},"    ROOT_PATH",[52,50618,292],{"class":58},[52,50620,3866],{"class":58},[52,50622,2844],{"class":62},[52,50624,3757],{"class":308},[52,50626,50628],{"class":50627},"sA_wV","\u002Fdata\u002Ftrain",[52,50630,27783],{"class":62},[52,50632,50633],{"class":54,"line":191},[52,50634,123],{"emptyLinePlaceholder":122},[52,50636,50637],{"class":54,"line":196},[52,50638,50639],{"class":94},"    # 定义归一化方法\n",[52,50641,50642],{"class":54,"line":201},[52,50643,50644],{"class":94},"    # 这里需要先计算一下数据集的均值和方差\n",[52,50646,50647],{"class":54,"line":206},[52,50648,50649],{"class":94},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[52,50651,50652],{"class":54,"line":211},[52,50653,50654],{"class":94},"    # 第一个参数是均值，第二个参数是方差\n",[52,50656,50657,50660,50662,50665,50668,50670,50673,50675,50678,50681,50684,50686,50689,50691,50694],{"class":54,"line":218},[52,50658,50659],{"class":79},"    normalize",[52,50661,292],{"class":58},[52,50663,50664],{"class":79},"transforms.Normalize([",[52,50666,50667],{"class":308},"0.162",[52,50669,389],{"class":79},[52,50671,50672],{"class":308},"0.151",[52,50674,389],{"class":79},[52,50676,50677],{"class":308},"0.138",[52,50679,50680],{"class":79},"],[",[52,50682,50683],{"class":308},"0.058",[52,50685,389],{"class":79},[52,50687,50688],{"class":308},"0.052",[52,50690,389],{"class":79},[52,50692,50693],{"class":308},"0.048",[52,50695,7629],{"class":79},[52,50697,50698],{"class":54,"line":223},[52,50699,50700],{"class":94},"    # 定义数据集处理方法变量\n",[52,50702,50703,50706,50708],{"class":54,"line":230},[52,50704,50705],{"class":79},"    train_transform",[52,50707,292],{"class":58},[52,50709,50710],{"class":79},"transforms.Compose([\n",[52,50712,50713],{"class":54,"line":239},[52,50714,50715],{"class":94},"        # 调整图像大小为224*224\n",[52,50717,50718,50721,50723,50725,50727],{"class":54,"line":251},[52,50719,50720],{"class":79},"        transforms.Resize((",[52,50722,34151],{"class":308},[52,50724,389],{"class":79},[52,50726,34151],{"class":308},[52,50728,45272],{"class":79},[52,50730,50731],{"class":54,"line":256},[52,50732,50733],{"class":94},"        # 将图像转换为张量\n",[52,50735,50736],{"class":54,"line":262},[52,50737,50738],{"class":79},"        transforms.ToTensor(),\n",[52,50740,50741],{"class":54,"line":268},[52,50742,50743],{"class":79},"        normalize])\n",[52,50745,50746],{"class":54,"line":280},[52,50747,50748],{"class":94},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[52,50750,50751],{"class":54,"line":286},[52,50752,50753],{"class":94},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[52,50755,50756],{"class":54,"line":300},[52,50757,123],{"emptyLinePlaceholder":122},[52,50759,50760],{"class":54,"line":314},[52,50761,50762],{"class":94},"    # 加载数据集\n",[52,50764,50765],{"class":54,"line":327},[52,50766,50767],{"class":94},"    # 传入数据集路径与处理方法\n",[52,50769,50770,50772,50774,50777,50780,50782,50785,50787],{"class":54,"line":333},[52,50771,34608],{"class":79},[52,50773,292],{"class":58},[52,50775,50776],{"class":79},"ImageFolder(",[52,50778,50779],{"class":308},"ROOT_PATH",[52,50781,389],{"class":79},[52,50783,50784],{"class":1223},"transform",[52,50786,292],{"class":58},[52,50788,50789],{"class":79},"train_transform)\n",[52,50791,50792],{"class":54,"line":360},[52,50793,123],{"emptyLinePlaceholder":122},[52,50795,50796,50798,50800,50802,50804,50806,50808,50810,50812,50814,50816,50818,50820,50822,50824],{"class":54,"line":365},[52,50797,34660],{"class":79},[52,50799,292],{"class":58},[52,50801,34665],{"class":79},[52,50803,34668],{"class":308},[52,50805,1216],{"class":79},[52,50807,34673],{"class":308},[52,50809,3053],{"class":58},[52,50811,2639],{"class":308},[52,50813,34680],{"class":79},[52,50815,34668],{"class":308},[52,50817,1216],{"class":79},[52,50819,34687],{"class":308},[52,50821,3053],{"class":58},[52,50823,2639],{"class":308},[52,50825,34694],{"class":79},[52,50827,50828,50830,50832,50834,50836,50838],{"class":54,"line":371},[52,50829,34699],{"class":79},[52,50831,292],{"class":58},[52,50833,34704],{"class":79},[52,50835,34187],{"class":1223},[52,50837,292],{"class":58},[52,50839,34192],{"class":79},[52,50841,50842,50844,50846,50848],{"class":54,"line":400},[52,50843,34715],{"class":1223},[52,50845,292],{"class":58},[52,50847,3411],{"class":308},[52,50849,34116],{"class":79},[52,50851,50852,50854,50856,50858],{"class":54,"line":405},[52,50853,34727],{"class":1223},[52,50855,292],{"class":58},[52,50857,34126],{"class":308},[52,50859,34116],{"class":79},[52,50861,50862],{"class":54,"line":411},[52,50863,34738],{"class":94},[52,50865,50866,50868,50870,50872],{"class":54,"line":424},[52,50867,34743],{"class":1223},[52,50869,292],{"class":58},[52,50871,3600],{"class":308},[52,50873,708],{"class":79},[52,50875,50876,50878,50880,50882,50884,50886],{"class":54,"line":436},[52,50877,34754],{"class":79},[52,50879,292],{"class":58},[52,50881,34184],{"class":79},[52,50883,34187],{"class":1223},[52,50885,292],{"class":58},[52,50887,34765],{"class":79},[52,50889,50890,50892,50894,50896],{"class":54,"line":449},[52,50891,34770],{"class":1223},[52,50893,292],{"class":58},[52,50895,3411],{"class":308},[52,50897,34116],{"class":79},[52,50899,50900,50902,50904,50906],{"class":54,"line":2160},[52,50901,34781],{"class":1223},[52,50903,292],{"class":58},[52,50905,34126],{"class":308},[52,50907,34116],{"class":79},[52,50909,50910,50912,50914,50916],{"class":54,"line":2186},[52,50911,34792],{"class":1223},[52,50913,292],{"class":58},[52,50915,3600],{"class":308},[52,50917,708],{"class":79},[52,50919,50920,50922],{"class":54,"line":2209},[52,50921,1441],{"class":58},[52,50923,34805],{"class":79},[52,50925,50926],{"class":54,"line":2233},[52,50927,123],{"emptyLinePlaceholder":122},[52,50929,50930],{"class":54,"line":2238},[52,50931,34814],{"class":94},[52,50933,50934],{"class":54,"line":2243},[52,50935,34819],{"class":94},[52,50937,50938],{"class":54,"line":2248},[52,50939,123],{"emptyLinePlaceholder":122},[52,50941,50942],{"class":54,"line":2257},[52,50943,34828],{"class":94},[52,50945,50946,50948,50950],{"class":54,"line":2262},[52,50947,34597],{"class":58},[52,50949,34835],{"class":75},[52,50951,34838],{"class":79},[52,50953,50954,50956,50958,50960,50962,50964,50966,50968,50970],{"class":54,"line":2268},[52,50955,33887],{"class":79},[52,50957,292],{"class":58},[52,50959,33101],{"class":79},[52,50961,33894],{"class":62},[52,50963,4736],{"class":58},[52,50965,33899],{"class":79},[52,50967,4733],{"class":58},[52,50969,34857],{"class":62},[52,50971,708],{"class":79},[52,50973,50974],{"class":54,"line":2297},[52,50975,123],{"emptyLinePlaceholder":122},[52,50977,50978],{"class":54,"line":2303},[52,50979,34872],{"class":94},[52,50981,50982],{"class":54,"line":2318},[52,50983,34877],{"class":94},[52,50985,50986],{"class":54,"line":2324},[52,50987,34882],{"class":94},[52,50989,50990,50992,50994,50996,50998,51000,51002],{"class":54,"line":2353},[52,50991,34887],{"class":79},[52,50993,292],{"class":58},[52,50995,34892],{"class":79},[52,50997,34895],{"class":1223},[52,50999,292],{"class":58},[52,51001,34900],{"class":308},[52,51003,708],{"class":79},[52,51005,51006],{"class":54,"line":2362},[52,51007,123],{"emptyLinePlaceholder":122},[52,51009,51010],{"class":54,"line":2368},[52,51011,34911],{"class":94},[52,51013,51014,51016,51018],{"class":54,"line":2376},[52,51015,34916],{"class":79},[52,51017,292],{"class":58},[52,51019,34921],{"class":79},[52,51021,51022],{"class":54,"line":2381},[52,51023,123],{"emptyLinePlaceholder":122},[52,51025,51026],{"class":54,"line":19252},[52,51027,34930],{"class":94},[52,51029,51030,51032,51034],{"class":54,"line":19258},[52,51031,33939],{"class":79},[52,51033,292],{"class":58},[52,51035,34939],{"class":79},[52,51037,51038],{"class":54,"line":19281},[52,51039,34944],{"class":94},[52,51041,51042],{"class":54,"line":19287},[52,51043,34949],{"class":94},[52,51045,51046],{"class":54,"line":19310},[52,51047,34954],{"class":94},[52,51049,51050,51052,51054],{"class":54,"line":19324},[52,51051,34959],{"class":79},[52,51053,292],{"class":58},[52,51055,34964],{"class":79},[52,51057,51058],{"class":54,"line":19344},[52,51059,123],{"emptyLinePlaceholder":122},[52,51061,51062],{"class":54,"line":19350},[52,51063,34977],{"class":94},[52,51065,51066],{"class":54,"line":19361},[52,51067,34982],{"class":94},[52,51069,51070,51072,51074],{"class":54,"line":19384},[52,51071,34987],{"class":79},[52,51073,292],{"class":58},[52,51075,34992],{"class":308},[52,51077,51078],{"class":54,"line":19406},[52,51079,34997],{"class":94},[52,51081,51082,51084,51086],{"class":54,"line":19411},[52,51083,35002],{"class":79},[52,51085,292],{"class":58},[52,51087,35007],{"class":79},[52,51089,51090],{"class":54,"line":19417},[52,51091,35012],{"class":94},[52,51093,51094,51096,51098],{"class":54,"line":19431},[52,51095,35017],{"class":79},[52,51097,292],{"class":58},[52,51099,35007],{"class":79},[52,51101,51102],{"class":54,"line":19444},[52,51103,35026],{"class":94},[52,51105,51106,51108,51110],{"class":54,"line":19449},[52,51107,35031],{"class":79},[52,51109,292],{"class":58},[52,51111,35007],{"class":79},[52,51113,51114],{"class":54,"line":19463},[52,51115,35040],{"class":94},[52,51117,51118,51120,51122],{"class":54,"line":19468},[52,51119,35045],{"class":79},[52,51121,292],{"class":58},[52,51123,35007],{"class":79},[52,51125,51126],{"class":54,"line":19474},[52,51127,123],{"emptyLinePlaceholder":122},[52,51129,51130],{"class":54,"line":19479},[52,51131,35058],{"class":94},[52,51133,51134,51136,51138],{"class":54,"line":19493},[52,51135,35063],{"class":79},[52,51137,292],{"class":58},[52,51139,35068],{"class":79},[52,51141,51142],{"class":54,"line":19498},[52,51143,123],{"emptyLinePlaceholder":122},[52,51145,51146],{"class":54,"line":19503},[52,51147,35081],{"class":94},[52,51149,51150,51152,51154,51156,51158],{"class":54,"line":19517},[52,51151,679],{"class":58},[52,51153,35088],{"class":79},[52,51155,28693],{"class":58},[52,51157,35093],{"class":308},[52,51159,35096],{"class":79},[52,51161,51162,51164,51166,51168,51170,51172,51174,51176,51178,51180,51182],{"class":54,"line":19529},[52,51163,35101],{"class":308},[52,51165,1216],{"class":79},[52,51167,35106],{"class":62},[52,51169,35109],{"class":308},[52,51171,2340],{"class":62},[52,51173,35109],{"class":308},[52,51175,2844],{"class":62},[52,51177,35118],{"class":79},[52,51179,2642],{"class":58},[52,51181,629],{"class":308},[52,51183,33147],{"class":79},[52,51185,51186,51188,51190,51192,51194,51196],{"class":54,"line":19534},[52,51187,35101],{"class":308},[52,51189,1216],{"class":79},[52,51191,35133],{"class":62},[52,51193,3053],{"class":58},[52,51195,3649],{"class":308},[52,51197,708],{"class":79},[52,51199,51200],{"class":54,"line":19547},[52,51201,123],{"emptyLinePlaceholder":122},[52,51203,51204],{"class":54,"line":19552},[52,51205,35148],{"class":94},[52,51207,51208],{"class":54,"line":19557},[52,51209,35153],{"class":94},[52,51211,51212,51214,51216],{"class":54,"line":19562},[52,51213,35158],{"class":79},[52,51215,292],{"class":58},[52,51217,34992],{"class":308},[52,51219,51220],{"class":54,"line":19575},[52,51221,35167],{"class":94},[52,51223,51224,51226,51228],{"class":54,"line":19580},[52,51225,35172],{"class":79},[52,51227,292],{"class":58},[52,51229,6072],{"class":308},[52,51231,51232],{"class":54,"line":35283},[52,51233,35181],{"class":94},[52,51235,51236,51238,51240],{"class":54,"line":35289},[52,51237,35186],{"class":79},[52,51239,292],{"class":58},[52,51241,34992],{"class":308},[52,51243,51244],{"class":54,"line":35295},[52,51245,35195],{"class":94},[52,51247,51248,51250,51252],{"class":54,"line":35301},[52,51249,35200],{"class":79},[52,51251,292],{"class":58},[52,51253,6072],{"class":308},[52,51255,51256],{"class":54,"line":35307},[52,51257,35209],{"class":94},[52,51259,51260,51262,51264],{"class":54,"line":35318},[52,51261,35214],{"class":79},[52,51263,292],{"class":58},[52,51265,6072],{"class":308},[52,51267,51268],{"class":54,"line":35324},[52,51269,35223],{"class":94},[52,51271,51272,51274,51276],{"class":54,"line":35344},[52,51273,35228],{"class":79},[52,51275,292],{"class":58},[52,51277,6072],{"class":308},[52,51279,51280],{"class":54,"line":35350},[52,51281,35237],{"class":94},[52,51283,51284,51286,51288,51290,51292],{"class":54,"line":35361},[52,51285,1927],{"class":58},[52,51287,34251],{"class":79},[52,51289,28693],{"class":58},[52,51291,34256],{"class":308},[52,51293,35250],{"class":79},[52,51295,51296],{"class":54,"line":35367},[52,51297,35255],{"class":94},[52,51299,51300,51302,51304],{"class":54,"line":35373},[52,51301,35260],{"class":79},[52,51303,292],{"class":58},[52,51305,35265],{"class":79},[52,51307,51308],{"class":54,"line":35379},[52,51309,35270],{"class":94},[52,51311,51312,51314,51316],{"class":54,"line":35385},[52,51313,35275],{"class":79},[52,51315,292],{"class":58},[52,51317,35280],{"class":79},[52,51319,51320],{"class":54,"line":35391},[52,51321,35286],{"class":94},[52,51323,51324],{"class":54,"line":35397},[52,51325,35292],{"class":79},[52,51327,51328],{"class":54,"line":35403},[52,51329,35298],{"class":94},[52,51331,51332],{"class":54,"line":35423},[52,51333,35304],{"class":94},[52,51335,51336,51338,51340],{"class":54,"line":35429},[52,51337,35310],{"class":79},[52,51339,292],{"class":58},[52,51341,35315],{"class":79},[52,51343,51344],{"class":54,"line":35445},[52,51345,35321],{"class":94},[52,51347,51348,51350,51352,51354,51356,51358,51360],{"class":54,"line":35451},[52,51349,35327],{"class":79},[52,51351,292],{"class":58},[52,51353,35332],{"class":79},[52,51355,35335],{"class":1223},[52,51357,292],{"class":58},[52,51359,629],{"class":308},[52,51361,708],{"class":79},[52,51363,51364],{"class":54,"line":35465},[52,51365,35347],{"class":94},[52,51367,51368,51370,51372],{"class":54,"line":35471},[52,51369,35353],{"class":79},[52,51371,292],{"class":58},[52,51373,35358],{"class":79},[52,51375,51376],{"class":54,"line":35486},[52,51377,35364],{"class":94},[52,51379,51380],{"class":54,"line":35492},[52,51381,35370],{"class":79},[52,51383,51384],{"class":54,"line":35501},[52,51385,35376],{"class":94},[52,51387,51388],{"class":54,"line":35507},[52,51389,35382],{"class":79},[52,51391,51392],{"class":54,"line":35516},[52,51393,35388],{"class":94},[52,51395,51396],{"class":54,"line":35522},[52,51397,35394],{"class":79},[52,51399,51400],{"class":54,"line":35528},[52,51401,35400],{"class":94},[52,51403,51404,51406,51408,51410,51412,51414,51416],{"class":54,"line":35537},[52,51405,35406],{"class":79},[52,51407,1910],{"class":58},[52,51409,35411],{"class":79},[52,51411,3053],{"class":58},[52,51413,35416],{"class":79},[52,51415,692],{"class":308},[52,51417,708],{"class":79},[52,51419,51420],{"class":54,"line":35543},[52,51421,35426],{"class":94},[52,51423,51424,51426,51428,51430,51432],{"class":54,"line":35554},[52,51425,35432],{"class":79},[52,51427,1910],{"class":58},[52,51429,35437],{"class":79},[52,51431,5938],{"class":58},[52,51433,35442],{"class":79},[52,51435,51436],{"class":54,"line":35560},[52,51437,35448],{"class":94},[52,51439,51440,51442,51444,51446,51448],{"class":54,"line":35579},[52,51441,35454],{"class":79},[52,51443,1910],{"class":58},[52,51445,35416],{"class":79},[52,51447,692],{"class":308},[52,51449,708],{"class":79},[52,51451,51452],{"class":54,"line":35585},[52,51453,35468],{"class":94},[52,51455,51456,51458,51460,51462,51464],{"class":54,"line":35596},[52,51457,1927],{"class":58},[52,51459,35476],{"class":79},[52,51461,28693],{"class":58},[52,51463,34256],{"class":308},[52,51465,35483],{"class":79},[52,51467,51468],{"class":54,"line":35602},[52,51469,35489],{"class":94},[52,51471,51472,51474,51476],{"class":54,"line":35622},[52,51473,35260],{"class":79},[52,51475,292],{"class":58},[52,51477,35265],{"class":79},[52,51479,51480],{"class":54,"line":35638},[52,51481,35504],{"class":94},[52,51483,51484,51486,51488],{"class":54,"line":35644},[52,51485,35275],{"class":79},[52,51487,292],{"class":58},[52,51489,35280],{"class":79},[52,51491,51492],{"class":54,"line":35658},[52,51493,35519],{"class":94},[52,51495,51496],{"class":54,"line":35664},[52,51497,35525],{"class":79},[52,51499,51500],{"class":54,"line":35670},[52,51501,39006],{"class":94},[52,51503,51504,51506],{"class":54,"line":35681},[52,51505,35531],{"class":58},[52,51507,35534],{"class":79},[52,51509,51510],{"class":54,"line":35687},[52,51511,35540],{"class":94},[52,51513,51514,51516,51518],{"class":54,"line":35693},[52,51515,39021],{"class":79},[52,51517,292],{"class":58},[52,51519,35315],{"class":79},[52,51521,51522],{"class":54,"line":35703},[52,51523,35557],{"class":94},[52,51525,51526,51528,51530,51532,51534,51536,51538],{"class":54,"line":35709},[52,51527,39034],{"class":79},[52,51529,292],{"class":58},[52,51531,35332],{"class":79},[52,51533,35335],{"class":1223},[52,51535,292],{"class":58},[52,51537,629],{"class":308},[52,51539,708],{"class":79},[52,51541,51542],{"class":54,"line":35720},[52,51543,35582],{"class":94},[52,51545,51546,51548,51550],{"class":54,"line":35726},[52,51547,39055],{"class":79},[52,51549,292],{"class":58},[52,51551,35358],{"class":79},[52,51553,51554],{"class":54,"line":35736},[52,51555,35599],{"class":94},[52,51557,51558,51560,51562,51564,51566,51568,51570],{"class":54,"line":35741},[52,51559,39068],{"class":79},[52,51561,1910],{"class":58},[52,51563,39073],{"class":79},[52,51565,3053],{"class":58},[52,51567,35416],{"class":79},[52,51569,692],{"class":308},[52,51571,708],{"class":79},[52,51573,51574,51576,51578,51580,51582],{"class":54,"line":35747},[52,51575,39086],{"class":79},[52,51577,1910],{"class":58},[52,51579,35437],{"class":79},[52,51581,5938],{"class":58},[52,51583,35442],{"class":79},[52,51585,51586],{"class":54,"line":35796},[52,51587,39099],{"class":94},[52,51589,51590,51592,51594,51596,51598],{"class":54,"line":35843},[52,51591,39104],{"class":79},[52,51593,1910],{"class":58},[52,51595,35416],{"class":79},[52,51597,692],{"class":308},[52,51599,708],{"class":79},[52,51601,51602],{"class":54,"line":35848},[52,51603,35661],{"class":94},[52,51605,51606],{"class":54,"line":35854},[52,51607,35667],{"class":94},[52,51609,51610,51612,51614],{"class":54,"line":35873},[52,51611,35673],{"class":79},[52,51613,2340],{"class":58},[52,51615,35678],{"class":79},[52,51617,51618],{"class":54,"line":35879},[52,51619,35684],{"class":94},[52,51621,51622],{"class":54,"line":35899},[52,51623,35690],{"class":94},[52,51625,51626,51628,51630],{"class":54,"line":35905},[52,51627,35696],{"class":79},[52,51629,2340],{"class":58},[52,51631,35678],{"class":79},[52,51633,51634],{"class":54,"line":35911},[52,51635,35706],{"class":94},[52,51637,51638,51640,51642],{"class":54,"line":35921},[52,51639,35712],{"class":79},[52,51641,2340],{"class":58},[52,51643,35717],{"class":79},[52,51645,51646],{"class":54,"line":35926},[52,51647,35723],{"class":94},[52,51649,51650,51652,51654],{"class":54,"line":35932},[52,51651,35729],{"class":79},[52,51653,2340],{"class":58},[52,51655,35717],{"class":79},[52,51657,51658],{"class":54,"line":35948},[52,51659,123],{"emptyLinePlaceholder":122},[52,51661,51662],{"class":54,"line":35993},[52,51663,35744],{"class":94},[52,51665,51666,51668,51670,51672,51674,51676,51678,51680,51682,51684,51686,51688,51690,51692,51694,51696,51698,51700,51702,51704],{"class":54,"line":35999},[52,51667,35101],{"class":308},[52,51669,1216],{"class":79},[52,51671,6573],{"class":62},[52,51673,35109],{"class":308},[52,51675,35758],{"class":62},[52,51677,383],{"class":308},[52,51679,35763],{"class":58},[52,51681,4132],{"class":308},[52,51683,35768],{"class":62},[52,51685,383],{"class":308},[52,51687,35763],{"class":58},[52,51689,4132],{"class":308},[52,51691,6573],{"class":62},[52,51693,35779],{"class":79},[52,51695,2642],{"class":58},[52,51697,629],{"class":308},[52,51699,35786],{"class":79},[52,51701,2642],{"class":58},[52,51703,629],{"class":308},[52,51705,35793],{"class":79},[52,51707,51708,51710,51712,51714,51716,51718,51720,51722,51724,51726,51728,51730,51732,51734,51736,51738,51740,51742,51744,51746],{"class":54,"line":36005},[52,51709,35101],{"class":308},[52,51711,1216],{"class":79},[52,51713,6573],{"class":62},[52,51715,35109],{"class":308},[52,51717,35807],{"class":62},[52,51719,383],{"class":308},[52,51721,35763],{"class":58},[52,51723,4132],{"class":308},[52,51725,35816],{"class":62},[52,51727,383],{"class":308},[52,51729,35763],{"class":58},[52,51731,4132],{"class":308},[52,51733,6573],{"class":62},[52,51735,35827],{"class":79},[52,51737,2642],{"class":58},[52,51739,629],{"class":308},[52,51741,35834],{"class":79},[52,51743,2642],{"class":58},[52,51745,629],{"class":308},[52,51747,35793],{"class":79},[52,51749,51750],{"class":54,"line":36011},[52,51751,123],{"emptyLinePlaceholder":122},[52,51753,51754],{"class":54,"line":36022},[52,51755,35851],{"class":94},[52,51757,51758,51760,51762,51764,51766,51768,51770],{"class":54,"line":36028},[52,51759,5497],{"class":58},[52,51761,35859],{"class":79},[52,51763,2642],{"class":58},[52,51765,629],{"class":308},[52,51767,567],{"class":79},[52,51769,2674],{"class":58},[52,51771,35870],{"class":79},[52,51773,51774],{"class":54,"line":36034},[52,51775,35876],{"class":94},[52,51777,51778,51780,51782,51784,51786,51788,51790],{"class":54,"line":36040},[52,51779,35882],{"class":79},[52,51781,3262],{"class":308},[52,51783,292],{"class":58},[52,51785,35889],{"class":79},[52,51787,2642],{"class":58},[52,51789,629],{"class":308},[52,51791,35896],{"class":79},[52,51793,51794],{"class":54,"line":36058},[52,51795,35902],{"class":94},[52,51797,51798],{"class":54,"line":36072},[52,51799,35908],{"class":94},[52,51801,51802,51804,51806],{"class":54,"line":36081},[52,51803,35914],{"class":79},[52,51805,292],{"class":58},[52,51807,34964],{"class":79},[52,51809,51810],{"class":54,"line":36090},[52,51811,123],{"emptyLinePlaceholder":122},[52,51813,51814],{"class":54,"line":36099},[52,51815,35929],{"class":94},[52,51817,51818,51820,51822,51824,51826],{"class":54,"line":36108},[52,51819,35935],{"class":79},[52,51821,292],{"class":58},[52,51823,35940],{"class":79},[52,51825,2642],{"class":58},[52,51827,35945],{"class":79},[52,51829,51830,51832,51834,51836,51838,51840,51842,51844,51846,51848,51850,51852,51854,51856,51858,51860,51862,51864],{"class":54,"line":36114},[52,51831,35101],{"class":308},[52,51833,1216],{"class":79},[52,51835,35955],{"class":62},[52,51837,383],{"class":308},[52,51839,35960],{"class":58},[52,51841,4132],{"class":308},[52,51843,3743],{"class":62},[52,51845,383],{"class":308},[52,51847,35960],{"class":58},[52,51849,4132],{"class":308},[52,51851,35973],{"class":62},[52,51853,35976],{"class":79},[52,51855,35979],{"class":58},[52,51857,2001],{"class":308},[52,51859,35984],{"class":79},[52,51861,1998],{"class":58},[52,51863,2001],{"class":308},[52,51865,33147],{"class":79},[52,51867,51868],{"class":54,"line":36120},[52,51869,39383],{"class":94},[52,51871,51872],{"class":54,"line":36128},[52,51873,39388],{"class":94},[52,51875,51876,51878,51880],{"class":54,"line":36133},[52,51877,39393],{"class":79},[52,51879,36017],{"class":62},[52,51881,708],{"class":79},[52,51883,51884],{"class":54,"line":36139},[52,51885,36037],{"class":94},[52,51887,51888,51890,51892,51894,51896,51898],{"class":54,"line":36150},[52,51889,36043],{"class":79},[52,51891,292],{"class":58},[52,51893,36048],{"class":79},[52,51895,36051],{"class":1223},[52,51897,292],{"class":58},[52,51899,110],{"class":79},[52,51901,51902,51904,51906,51908],{"class":54,"line":36156},[52,51903,36061],{"class":62},[52,51905,4049],{"class":79},[52,51907,36066],{"class":308},[52,51909,36069],{"class":79},[52,51911,51912,51914],{"class":54,"line":36176},[52,51913,36075],{"class":62},[52,51915,36078],{"class":79},[52,51917,51918,51920],{"class":54,"line":36182},[52,51919,36084],{"class":62},[52,51921,36087],{"class":79},[52,51923,51924,51926],{"class":54,"line":36188},[52,51925,36093],{"class":62},[52,51927,36096],{"class":79},[52,51929,51930,51932],{"class":54,"line":36194},[52,51931,36102],{"class":62},[52,51933,36105],{"class":79},[52,51935,51936],{"class":54,"line":36211},[52,51937,36111],{"class":79},[52,51939,51940],{"class":54,"line":36217},[52,51941,36117],{"class":94},[52,51943,51944,51946],{"class":54,"line":36223},[52,51945,1441],{"class":58},[52,51947,36125],{"class":79},[52,51949,51950],{"class":54,"line":36229},[52,51951,123],{"emptyLinePlaceholder":122},[52,51953,51954],{"class":54,"line":36235},[52,51955,36136],{"class":94},[52,51957,51958,51960,51962],{"class":54,"line":36241},[52,51959,34597],{"class":58},[52,51961,36144],{"class":75},[52,51963,36147],{"class":79},[52,51965,51966],{"class":54,"line":36268},[52,51967,36153],{"class":94},[52,51969,51970,51972,51974,51976,51978,51980,51982,51984],{"class":54,"line":36292},[52,51971,36159],{"class":79},[52,51973,34343],{"class":1223},[52,51975,292],{"class":58},[52,51977,1216],{"class":79},[52,51979,3698],{"class":308},[52,51981,389],{"class":79},[52,51983,3504],{"class":308},[52,51985,33147],{"class":79},[52,51987,51988],{"class":54,"line":36298},[52,51989,36179],{"class":94},[52,51991,51992],{"class":54,"line":36304},[52,51993,36185],{"class":94},[52,51995,51996],{"class":54,"line":36310},[52,51997,36191],{"class":94},[52,51999,52000,52002,52004,52006,52008,52010,52012],{"class":54,"line":36321},[52,52001,34377],{"class":79},[52,52003,629],{"class":308},[52,52005,389],{"class":79},[52,52007,564],{"class":308},[52,52009,389],{"class":79},[52,52011,629],{"class":308},[52,52013,708],{"class":79},[52,52015,52016],{"class":54,"line":36332},[52,52017,36214],{"class":94},[52,52019,52020],{"class":54,"line":36338},[52,52021,36220],{"class":94},[52,52023,52024],{"class":54,"line":36355},[52,52025,36226],{"class":94},[52,52027,52028],{"class":54,"line":36378},[52,52029,36232],{"class":94},[52,52031,52032],{"class":54,"line":36401},[52,52033,36238],{"class":94},[52,52035,52036,52038,52040,52042,52044,52046,52048,52050,52052],{"class":54,"line":36407},[52,52037,36244],{"class":79},[52,52039,36247],{"class":62},[52,52041,36250],{"class":79},[52,52043,36253],{"class":62},[52,52045,389],{"class":79},[52,52047,36258],{"class":1223},[52,52049,292],{"class":58},[52,52051,36263],{"class":62},[52,52053,708],{"class":79},[52,52055,52056,52058,52060,52062,52064,52066,52068,52070,52072],{"class":54,"line":36412},[52,52057,36244],{"class":79},[52,52059,36247],{"class":62},[52,52061,36275],{"class":79},[52,52063,36278],{"class":62},[52,52065,389],{"class":79},[52,52067,36258],{"class":1223},[52,52069,292],{"class":58},[52,52071,36287],{"class":62},[52,52073,708],{"class":79},[52,52075,52076],{"class":54,"line":36421},[52,52077,36295],{"class":94},[52,52079,52080],{"class":54,"line":36431},[52,52081,36301],{"class":79},[52,52083,52084],{"class":54,"line":36437},[52,52085,36307],{"class":94},[52,52087,52088,52090,52092],{"class":54,"line":36442},[52,52089,36313],{"class":79},[52,52091,36316],{"class":62},[52,52093,708],{"class":79},[52,52095,52096,52098,52100],{"class":54,"line":36448},[52,52097,36324],{"class":79},[52,52099,36327],{"class":62},[52,52101,708],{"class":79},[52,52103,52104],{"class":54,"line":36461},[52,52105,36335],{"class":94},[52,52107,52108,52110,52112,52114,52116,52118,52120],{"class":54,"line":36467},[52,52109,34377],{"class":79},[52,52111,629],{"class":308},[52,52113,389],{"class":79},[52,52115,564],{"class":308},[52,52117,389],{"class":79},[52,52119,564],{"class":308},[52,52121,708],{"class":79},[52,52123,52124,52126,52128,52130,52132,52134,52136,52138,52140],{"class":54,"line":36478},[52,52125,36244],{"class":79},[52,52127,36247],{"class":62},[52,52129,36362],{"class":79},[52,52131,36253],{"class":62},[52,52133,389],{"class":79},[52,52135,36258],{"class":1223},[52,52137,292],{"class":58},[52,52139,36373],{"class":62},[52,52141,708],{"class":79},[52,52143,52144,52146,52148,52150,52152,52154,52156,52158,52160],{"class":54,"line":36489},[52,52145,36244],{"class":79},[52,52147,36247],{"class":62},[52,52149,36385],{"class":79},[52,52151,36278],{"class":62},[52,52153,389],{"class":79},[52,52155,36258],{"class":1223},[52,52157,292],{"class":58},[52,52159,36396],{"class":62},[52,52161,708],{"class":79},[52,52163,52164],{"class":54,"line":36508},[52,52165,36404],{"class":94},[52,52167,52169],{"class":54,"line":52168},219,[52,52170,36301],{"class":79},[52,52172,52174,52176,52178],{"class":54,"line":52173},220,[52,52175,36313],{"class":79},[52,52177,36247],{"class":62},[52,52179,708],{"class":79},[52,52181,52183,52185,52187],{"class":54,"line":52182},221,[52,52184,36324],{"class":79},[52,52186,36426],{"class":62},[52,52188,708],{"class":79},[52,52190,52192],{"class":54,"line":52191},222,[52,52193,36434],{"class":79},[52,52195,52197],{"class":54,"line":52196},223,[52,52198,123],{"emptyLinePlaceholder":122},[52,52200,52202],{"class":54,"line":52201},224,[52,52203,36445],{"class":94},[52,52205,52207,52209,52211,52213,52215],{"class":54,"line":52206},225,[52,52208,4578],{"class":58},[52,52210,33870],{"class":308},[52,52212,5938],{"class":58},[52,52214,33875],{"class":62},[52,52216,6718],{"class":79},[52,52218,52220],{"class":54,"line":52219},226,[52,52221,36464],{"class":94},[52,52223,52225,52227,52229],{"class":54,"line":52224},227,[52,52226,47196],{"class":79},[52,52228,292],{"class":58},[52,52230,47201],{"class":79},[52,52232,52234,52236,52238],{"class":54,"line":52233},228,[52,52235,36481],{"class":79},[52,52237,292],{"class":58},[52,52239,36486],{"class":79},[52,52241,52243,52245,52247,52249,52251,52253,52255],{"class":54,"line":52242},229,[52,52244,36043],{"class":79},[52,52246,292],{"class":58},[52,52248,47218],{"class":79},[52,52250,36499],{"class":1223},[52,52252,292],{"class":58},[52,52254,2001],{"class":308},[52,52256,708],{"class":79},[52,52258,52260],{"class":54,"line":52259},230,[52,52261,36511],{"class":79},[24646,52263,52265],{"id":52264},"_242测试代码","2.4.2.测试代码",[14,52267,52268],{},"使用测试集进行测试与推理",[42,52270,52272],{"className":33028,"code":52271,"language":33030,"meta":47,"style":47},"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",[49,52273,52274,52280,52290,52300,52311,52321,52325,52329,52337,52342,52346,52363,52367,52371,52375,52379,52383,52415,52419,52427,52431,52443,52447,52451,52455,52459,52463,52467,52471,52475,52493,52507,52511,52521,52531,52541,52547,52551,52555,52563,52567,52583,52591,52595,52599,52607,52615,52619,52623,52627,52631,52637,52641,52651,52659,52667,52671,52675,52679,52687,52691,52707,52711,52715,52719,52731,52735,52747,52751,52755,52767,52771,52781,52785,52789,52801,52805,52813,52817,52821,52829,52833,52841,52845,52849,52853,52857,52861,52877,52885,52889,52893,52911,52917,52921,52931,52939,52947,52951,52955,52959,52963,52971,52975,52991,52995,53003,53011],{"__ignoreMap":47},[52,52275,52276,52278],{"class":54,"line":55},[52,52277,33042],{"class":58},[52,52279,33045],{"class":79},[52,52281,52282,52284,52286,52288],{"class":54,"line":66},[52,52283,33042],{"class":58},[52,52285,34065],{"class":79},[52,52287,34033],{"class":58},[52,52289,34070],{"class":79},[52,52291,52292,52294,52296,52298],{"class":54,"line":83},[52,52293,33387],{"class":58},[52,52295,34048],{"class":79},[52,52297,33042],{"class":58},[52,52299,34053],{"class":79},[52,52301,52302,52304,52306,52308],{"class":54,"line":91},[52,52303,33387],{"class":58},[52,52305,34018],{"class":79},[52,52307,33042],{"class":58},[52,52309,52310],{"class":79}," ImageFolder\n",[52,52312,52313,52315,52317,52319],{"class":54,"line":98},[52,52314,33387],{"class":58},[52,52316,34564],{"class":79},[52,52318,33042],{"class":58},[52,52320,47290],{"class":79},[52,52322,52323],{"class":54,"line":107},[52,52324,123],{"emptyLinePlaceholder":122},[52,52326,52327],{"class":54,"line":113},[52,52328,36601],{"class":94},[52,52330,52331,52333,52335],{"class":54,"line":119},[52,52332,34597],{"class":58},[52,52334,36608],{"class":75},[52,52336,34603],{"class":79},[52,52338,52339],{"class":54,"line":126},[52,52340,52341],{"class":94},"   # 导入自己的数据集，并进行数据处理\n",[52,52343,52344],{"class":54,"line":132},[52,52345,50611],{"class":94},[52,52347,52348,52350,52352,52354,52356,52358,52361],{"class":54,"line":138},[52,52349,50616],{"class":308},[52,52351,292],{"class":58},[52,52353,3866],{"class":58},[52,52355,2844],{"class":62},[52,52357,3757],{"class":308},[52,52359,52360],{"class":50627},"\u002Fdata\u002Ftest",[52,52362,27783],{"class":62},[52,52364,52365],{"class":54,"line":144},[52,52366,123],{"emptyLinePlaceholder":122},[52,52368,52369],{"class":54,"line":153},[52,52370,50639],{"class":94},[52,52372,52373],{"class":54,"line":159},[52,52374,50644],{"class":94},[52,52376,52377],{"class":54,"line":167},[52,52378,50649],{"class":94},[52,52380,52381],{"class":54,"line":173},[52,52382,50654],{"class":94},[52,52384,52385,52387,52389,52391,52393,52395,52397,52399,52401,52403,52405,52407,52409,52411,52413],{"class":54,"line":181},[52,52386,50659],{"class":79},[52,52388,292],{"class":58},[52,52390,50664],{"class":79},[52,52392,50667],{"class":308},[52,52394,389],{"class":79},[52,52396,50672],{"class":308},[52,52398,389],{"class":79},[52,52400,50677],{"class":308},[52,52402,50680],{"class":79},[52,52404,50683],{"class":308},[52,52406,389],{"class":79},[52,52408,50688],{"class":308},[52,52410,389],{"class":79},[52,52412,50693],{"class":308},[52,52414,7629],{"class":79},[52,52416,52417],{"class":54,"line":186},[52,52418,50700],{"class":94},[52,52420,52421,52423,52425],{"class":54,"line":191},[52,52422,50705],{"class":79},[52,52424,292],{"class":58},[52,52426,50710],{"class":79},[52,52428,52429],{"class":54,"line":196},[52,52430,50715],{"class":94},[52,52432,52433,52435,52437,52439,52441],{"class":54,"line":201},[52,52434,50720],{"class":79},[52,52436,34151],{"class":308},[52,52438,389],{"class":79},[52,52440,34151],{"class":308},[52,52442,45272],{"class":79},[52,52444,52445],{"class":54,"line":206},[52,52446,50733],{"class":94},[52,52448,52449],{"class":54,"line":211},[52,52450,50738],{"class":79},[52,52452,52453],{"class":54,"line":218},[52,52454,50743],{"class":79},[52,52456,52457],{"class":54,"line":223},[52,52458,50748],{"class":94},[52,52460,52461],{"class":54,"line":230},[52,52462,50753],{"class":94},[52,52464,52465],{"class":54,"line":239},[52,52466,123],{"emptyLinePlaceholder":122},[52,52468,52469],{"class":54,"line":251},[52,52470,50762],{"class":94},[52,52472,52473],{"class":54,"line":256},[52,52474,50767],{"class":94},[52,52476,52477,52479,52481,52483,52485,52487,52489,52491],{"class":54,"line":262},[52,52478,36615],{"class":79},[52,52480,292],{"class":58},[52,52482,50776],{"class":79},[52,52484,50779],{"class":308},[52,52486,389],{"class":79},[52,52488,50784],{"class":1223},[52,52490,292],{"class":58},[52,52492,50789],{"class":79},[52,52494,52495,52497,52499,52501,52503,52505],{"class":54,"line":268},[52,52496,36672],{"class":79},[52,52498,292],{"class":58},[52,52500,34184],{"class":79},[52,52502,34187],{"class":1223},[52,52504,292],{"class":58},[52,52506,36683],{"class":79},[52,52508,52509],{"class":54,"line":280},[52,52510,36688],{"class":94},[52,52512,52513,52515,52517,52519],{"class":54,"line":286},[52,52514,36693],{"class":1223},[52,52516,292],{"class":58},[52,52518,629],{"class":308},[52,52520,34116],{"class":79},[52,52522,52523,52525,52527,52529],{"class":54,"line":300},[52,52524,36704],{"class":1223},[52,52526,292],{"class":58},[52,52528,34126],{"class":308},[52,52530,34116],{"class":79},[52,52532,52533,52535,52537,52539],{"class":54,"line":314},[52,52534,36715],{"class":1223},[52,52536,292],{"class":58},[52,52538,692],{"class":308},[52,52540,708],{"class":79},[52,52542,52543,52545],{"class":54,"line":327},[52,52544,1441],{"class":58},[52,52546,36728],{"class":79},[52,52548,52549],{"class":54,"line":333},[52,52550,123],{"emptyLinePlaceholder":122},[52,52552,52553],{"class":54,"line":360},[52,52554,36737],{"class":94},[52,52556,52557,52559,52561],{"class":54,"line":365},[52,52558,34597],{"class":58},[52,52560,36744],{"class":75},[52,52562,36747],{"class":79},[52,52564,52565],{"class":54,"line":371},[52,52566,36752],{"class":94},[52,52568,52569,52571,52573,52575,52577,52579,52581],{"class":54,"line":400},[52,52570,33887],{"class":79},[52,52572,292],{"class":58},[52,52574,33894],{"class":62},[52,52576,4736],{"class":58},[52,52578,33899],{"class":79},[52,52580,4733],{"class":58},[52,52582,36769],{"class":62},[52,52584,52585,52587,52589],{"class":54,"line":405},[52,52586,33939],{"class":79},[52,52588,292],{"class":58},[52,52590,34939],{"class":79},[52,52592,52593],{"class":54,"line":411},[52,52594,123],{"emptyLinePlaceholder":122},[52,52596,52597],{"class":54,"line":424},[52,52598,36786],{"class":94},[52,52600,52601,52603,52605],{"class":54,"line":436},[52,52602,36791],{"class":79},[52,52604,292],{"class":58},[52,52606,34992],{"class":308},[52,52608,52609,52611,52613],{"class":54,"line":449},[52,52610,36800],{"class":79},[52,52612,292],{"class":58},[52,52614,6072],{"class":308},[52,52616,52617],{"class":54,"line":2160},[52,52618,123],{"emptyLinePlaceholder":122},[52,52620,52621],{"class":54,"line":2186},[52,52622,36813],{"class":94},[52,52624,52625],{"class":54,"line":2209},[52,52626,36818],{"class":94},[52,52628,52629],{"class":54,"line":2233},[52,52630,36823],{"class":94},[52,52632,52633,52635],{"class":54,"line":2238},[52,52634,36828],{"class":58},[52,52636,35534],{"class":79},[52,52638,52639],{"class":54,"line":2243},[52,52640,36835],{"class":94},[52,52642,52643,52645,52647,52649],{"class":54,"line":2248},[52,52644,1927],{"class":58},[52,52646,36842],{"class":79},[52,52648,28693],{"class":58},[52,52650,36847],{"class":79},[52,52652,52653,52655,52657],{"class":54,"line":2257},[52,52654,36852],{"class":79},[52,52656,292],{"class":58},[52,52658,36857],{"class":79},[52,52660,52661,52663,52665],{"class":54,"line":2262},[52,52662,36862],{"class":79},[52,52664,292],{"class":58},[52,52666,36867],{"class":79},[52,52668,52669],{"class":54,"line":2268},[52,52670,36872],{"class":94},[52,52672,52673],{"class":54,"line":2297},[52,52674,35525],{"class":79},[52,52676,52677],{"class":54,"line":2303},[52,52678,36881],{"class":94},[52,52680,52681,52683,52685],{"class":54,"line":2318},[52,52682,35310],{"class":79},[52,52684,292],{"class":58},[52,52686,36890],{"class":79},[52,52688,52689],{"class":54,"line":2324},[52,52690,36895],{"class":94},[52,52692,52693,52695,52697,52699,52701,52703,52705],{"class":54,"line":2353},[52,52694,35327],{"class":79},[52,52696,292],{"class":58},[52,52698,35332],{"class":79},[52,52700,35335],{"class":1223},[52,52702,292],{"class":58},[52,52704,629],{"class":308},[52,52706,708],{"class":79},[52,52708,52709],{"class":54,"line":2362},[52,52710,36916],{"class":94},[52,52712,52713],{"class":54,"line":2368},[52,52714,36921],{"class":94},[52,52716,52717],{"class":54,"line":2376},[52,52718,36926],{"class":94},[52,52720,52721,52723,52725,52727,52729],{"class":54,"line":2381},[52,52722,36931],{"class":79},[52,52724,1910],{"class":58},[52,52726,35437],{"class":79},[52,52728,5938],{"class":58},[52,52730,36940],{"class":79},[52,52732,52733],{"class":54,"line":19252},[52,52734,36945],{"class":94},[52,52736,52737,52739,52741,52743,52745],{"class":54,"line":19258},[52,52738,36950],{"class":79},[52,52740,1910],{"class":58},[52,52742,36955],{"class":79},[52,52744,692],{"class":308},[52,52746,708],{"class":79},[52,52748,52749],{"class":54,"line":19281},[52,52750,123],{"emptyLinePlaceholder":122},[52,52752,52753],{"class":54,"line":19287},[52,52754,36968],{"class":94},[52,52756,52757,52759,52761,52763,52765],{"class":54,"line":19310},[52,52758,36973],{"class":79},[52,52760,292],{"class":58},[52,52762,36978],{"class":79},[52,52764,2340],{"class":58},[52,52766,36983],{"class":79},[52,52768,52769],{"class":54,"line":19324},[52,52770,36988],{"class":94},[52,52772,52773,52775,52777,52779],{"class":54,"line":19344},[52,52774,35101],{"class":308},[52,52776,1216],{"class":79},[52,52778,36997],{"class":62},[52,52780,37000],{"class":79},[52,52782,52783],{"class":54,"line":19350},[52,52784,123],{"emptyLinePlaceholder":122},[52,52786,52787],{"class":54,"line":19361},[52,52788,37009],{"class":94},[52,52790,52791,52793,52795,52797,52799],{"class":54,"line":19384},[52,52792,4578],{"class":58},[52,52794,33870],{"class":308},[52,52796,5938],{"class":58},[52,52798,33875],{"class":62},[52,52800,6718],{"class":79},[52,52802,52803],{"class":54,"line":19406},[52,52804,37026],{"class":94},[52,52806,52807,52809,52811],{"class":54,"line":19411},[52,52808,33939],{"class":79},[52,52810,292],{"class":58},[52,52812,47201],{"class":79},[52,52814,52815],{"class":54,"line":19417},[52,52816,37039],{"class":94},[52,52818,52819],{"class":54,"line":19431},[52,52820,37044],{"class":94},[52,52822,52823,52825,52827],{"class":54,"line":19444},[52,52824,37049],{"class":79},[52,52826,37052],{"class":62},[52,52828,33147],{"class":79},[52,52830,52831],{"class":54,"line":19449},[52,52832,37059],{"class":94},[52,52834,52835,52837,52839],{"class":54,"line":19463},[52,52836,36672],{"class":79},[52,52838,292],{"class":58},[52,52840,37068],{"class":79},[52,52842,52843],{"class":54,"line":19468},[52,52844,37073],{"class":94},[52,52846,52847],{"class":54,"line":19474},[52,52848,37078],{"class":79},[52,52850,52851],{"class":54,"line":19479},[52,52852,123],{"emptyLinePlaceholder":122},[52,52854,52855],{"class":54,"line":19493},[52,52856,37087],{"class":94},[52,52858,52859],{"class":54,"line":19498},[52,52860,37092],{"class":94},[52,52862,52863,52865,52867,52869,52871,52873,52875],{"class":54,"line":19503},[52,52864,33887],{"class":79},[52,52866,292],{"class":58},[52,52868,33894],{"class":62},[52,52870,4736],{"class":58},[52,52872,33899],{"class":79},[52,52874,4733],{"class":58},[52,52876,36769],{"class":62},[52,52878,52879,52881,52883],{"class":54,"line":19517},[52,52880,33939],{"class":79},[52,52882,292],{"class":58},[52,52884,34939],{"class":79},[52,52886,52887],{"class":54,"line":19529},[52,52888,37121],{"class":94},[52,52890,52891],{"class":54,"line":19534},[52,52892,37126],{"class":94},[52,52894,52895,52897,52899,52901,52904,52906,52909],{"class":54,"line":19547},[52,52896,37131],{"class":79},[52,52898,292],{"class":58},[52,52900,4080],{"class":79},[52,52902,52903],{"class":62},"'猫'",[52,52905,389],{"class":79},[52,52907,52908],{"class":62},"'狗'",[52,52910,35896],{"class":79},[52,52912,52913,52915],{"class":54,"line":19552},[52,52914,36828],{"class":58},[52,52916,35534],{"class":79},[52,52918,52919],{"class":54,"line":19557},[52,52920,37196],{"class":94},[52,52922,52923,52925,52927,52929],{"class":54,"line":19562},[52,52924,1927],{"class":58},[52,52926,37203],{"class":79},[52,52928,28693],{"class":58},[52,52930,36847],{"class":79},[52,52932,52933,52935,52937],{"class":54,"line":19575},[52,52934,35260],{"class":79},[52,52936,292],{"class":58},[52,52938,35265],{"class":79},[52,52940,52941,52943,52945],{"class":54,"line":19580},[52,52942,35275],{"class":79},[52,52944,292],{"class":58},[52,52946,35280],{"class":79},[52,52948,52949],{"class":54,"line":35283},[52,52950,123],{"emptyLinePlaceholder":122},[52,52952,52953],{"class":54,"line":35289},[52,52954,37232],{"class":94},[52,52956,52957],{"class":54,"line":35295},[52,52958,35525],{"class":79},[52,52960,52961],{"class":54,"line":35301},[52,52962,37241],{"class":94},[52,52964,52965,52967,52969],{"class":54,"line":35307},[52,52966,35310],{"class":79},[52,52968,292],{"class":58},[52,52970,35315],{"class":79},[52,52972,52973],{"class":54,"line":35318},[52,52974,37254],{"class":94},[52,52976,52977,52979,52981,52983,52985,52987,52989],{"class":54,"line":35324},[52,52978,35327],{"class":79},[52,52980,292],{"class":58},[52,52982,35332],{"class":79},[52,52984,35335],{"class":1223},[52,52986,292],{"class":58},[52,52988,629],{"class":308},[52,52990,708],{"class":79},[52,52992,52993],{"class":54,"line":35344},[52,52994,37275],{"class":94},[52,52996,52997,52999,53001],{"class":54,"line":35350},[52,52998,37280],{"class":79},[52,53000,292],{"class":58},[52,53002,37285],{"class":79},[52,53004,53005,53007,53009],{"class":54,"line":35361},[52,53006,37290],{"class":79},[52,53008,292],{"class":58},[52,53010,37295],{"class":79},[52,53012,53013,53015,53017,53019,53021,53023,53025,53027],{"class":54,"line":35367},[52,53014,37300],{"class":308},[52,53016,1216],{"class":79},[52,53018,37305],{"class":62},[52,53020,37308],{"class":79},[52,53022,37311],{"class":62},[52,53024,389],{"class":79},[52,53026,37316],{"class":62},[52,53028,37319],{"class":79},[3141,53030,53031],{},"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":47,"searchDepth":66,"depth":66,"links":53033},[53034,53035,53036,53037],{"id":33241,"depth":83,"text":33242},{"id":40489,"depth":83,"text":40490},{"id":43922,"depth":83,"text":43923},{"id":47931,"depth":83,"text":47932},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":33233,"description":26025},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":53044,"title":53045,"body":53046,"description":26025,"extension":3153,"meta":53053,"navigation":122,"path":53054,"seo":53055,"stem":53056,"__hash__":53057},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":53047,"toc":53051},[53048],[10,53049,53045],{"id":53050},"_3yolo模型学习",{"title":47,"searchDepth":66,"depth":66,"links":53052},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":53045,"description":26025},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":53059,"title":53060,"body":53061,"description":53068,"extension":3153,"meta":53069,"navigation":122,"path":53071,"seo":53072,"stem":53073,"__hash__":53074},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":53062,"toc":53066},[53063],[14,53064,53065],{},"yolo模型还未补充",{"title":47,"searchDepth":66,"depth":66,"links":53067},[],"深度学习学习",{"category":53070},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":53060,"description":53068},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":53076,"title":53077,"body":53078,"description":26025,"extension":3153,"meta":53103,"navigation":122,"path":53104,"seo":53105,"stem":53106,"__hash__":53107},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":53079,"toc":53101},[53080,53083,53086,53091,53098],[10,53081,53077],{"id":53082},"_1工具",[14,53084,53085],{},"提示错误插件：有问题会提前报错",[14,53087,53088],{},[4509,53089],{"alt":47,"src":53090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,53092,53093],{},[3451,53094,53097],{"href":53095,"rel":53096},"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",[26514],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,53099,53100],{},"alt键加上下箭头可以实现语句的移动",{"title":47,"searchDepth":66,"depth":66,"links":53102},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":53077,"description":26025},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":53109,"title":53110,"body":53111,"description":26025,"extension":3153,"meta":55975,"navigation":122,"path":55976,"seo":55977,"stem":55978,"__hash__":55979},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":53112,"toc":55926},[53113,53116,53120,53124,53129,53132,53137,53141,53148,53153,53160,53165,53172,53177,53181,53186,53189,53193,53198,53202,53207,53210,53213,53216,53219,53222,53225,53228,53231,53236,53241,53246,53250,53253,53256,53260,53265,53268,53276,53281,53298,53306,53311,53316,53321,53326,53331,53334,53339,53344,53348,53357,53362,53367,53371,53376,53379,53383,53388,53396,53401,53406,53409,53414,53419,53424,53427,53430,53433,53438,53443,53446,53451,53454,53459,53462,53465,53468,53473,53476,53479,53494,53499,53504,53509,53512,53515,53518,53532,53535,53540,53545,53548,53551,53554,53557,53560,53563,53566,53570,53574,53579,53583,53586,53591,53596,53599,53604,53607,53611,53616,53619,53622,53625,53628,53631,53634,53637,53640,53643,53647,53652,53657,53662,53665,53668,53672,53677,53680,53684,53687,53690,53695,53698,53701,53705,53709,53712,53717,53722,53725,53754,53759,53764,53769,53774,53778,53783,53787,53792,53795,53799,53803,53808,53812,53817,53822,53826,53831,53834,53836,53839,53844,53848,53853,53857,53861,53866,53871,53876,53881,53885,53890,53895,53900,53903,53906,53911,53914,53919,53924,53929,53934,53938,54745,54749,55092,55097,55100,55103,55106,55109,55112,55115,55118,55121,55123,55126,55128,55131,55135,55140,55143,55146,55149,55153,55158,55163,55183,55186,55190,55195,55200,55217,55221,55250,55254,55276,55278,55317,55325,55331,55335,55338,55341,55346,55351,55354,55357,55360,55365,55370,55373,55376,55379,55382,55385,55388,55391,55394,55397,55400,55403,55405,55408,55411,55414,55417,55420,55423,55426,55429,55433,55438,55441,55446,55449,55452,55455,55458,55461,55464,55467,55469,55472,55475,55478,55481,55484,55487,55491,55494,55503,55506,55511,55514,55519,55522,55525,55528,55531,55534,55537,55540,55544,55548,55551,55554,55559,55564,55569,55573,55578,55583,55586,55589,55592,55595,55598,55603,55606,55611,55613,55618,55621,55625,55630,55633,55636,55641,55645,55648,55653,55656,55659,55688,55693,55696,55699,55702,55705,55708,55712,55715,55801,55805,55808,55813,55818,55825,55828,55831,55834,55837,55840,55845,55850,55853,55856,55859,55862,55865,55868,55871,55874,55877,55879,55882,55886,55891,55896,55901,55904,55909,55914,55917,55920,55923],[10,53114,53110],{"id":53115},"_2基础语法",[18,53117,53119],{"id":53118},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[3195,53121,53123],{"id":53122},"_211-js组成","2.1.1 js组成",[1696,53125,53126],{},[32,53127,53128],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,53130,53131],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[1696,53133,53134],{"start":66},[32,53135,53136],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[3195,53138,53140],{"id":53139},"_212-js书写位置","2.1.2 js书写位置",[1696,53142,53143],{},[32,53144,53145],{},[2389,53146,53147],{},"内部 JavaScript",[14,53149,53150],{},[4509,53151],{"alt":47,"src":53152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[1696,53154,53155],{"start":66},[32,53156,53157],{},[2389,53158,53159],{},"外部 JavaScript",[14,53161,53162],{},[4509,53163],{"alt":47,"src":53164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[1696,53166,53167],{"start":83},[32,53168,53169],{},[2389,53170,53171],{},"内联 JavaScript",[14,53173,53174],{},[4509,53175],{"alt":47,"src":53176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[3195,53178,53180],{"id":53179},"_213-javascript注释","2.1.3 JavaScript注释",[14,53182,53183],{},[4509,53184],{"alt":47,"src":53185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,53187,53188],{},"alt+shift+a一定要记住！",[3195,53190,53192],{"id":53191},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,53194,53195],{},[4509,53196],{"alt":47,"src":53197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[3195,53199,53201],{"id":53200},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[1696,53203,53204],{},[32,53205,53206],{},"输出语法：",[14,53208,53209],{},"①document.write('要出的内容')",[14,53211,53212],{},"向body内输出内容；",[14,53214,53215],{},"如果输出的内容写的是标签，也会被解析cheng",[14,53217,53218],{},"②alert('要出的内容')",[14,53220,53221],{},"页面弹出警告对话框",[14,53223,53224],{},"③console.log('控制台打印')",[14,53226,53227],{},"控制台输出语法，程序员调试使用",[14,53229,53230],{},"输入log就行，自动生成：",[14,53232,53233],{},[4509,53234],{"alt":47,"src":53235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[1696,53237,53238],{"start":66},[32,53239,53240],{},"输入语法：",[14,53242,53243],{},[4509,53244],{"alt":47,"src":53245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[3195,53247,53249],{"id":53248},"_2116-字面量","21.1.6 字面量",[14,53251,53252],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,53254,53255],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[18,53257,53259],{"id":53258},"_22-变量","2.2 变量",[1696,53261,53262],{},[32,53263,53264],{},"变量声明",[14,53266,53267],{},"let 变量名",[29,53269,53270,53273],{},[32,53271,53272],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[32,53274,53275],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[1696,53277,53278],{"start":66},[32,53279,53280],{},"变量赋值",[42,53282,53286],{"className":53283,"code":53284,"language":53285,"meta":47,"style":47},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[49,53287,53288,53293],{"__ignoreMap":47},[52,53289,53290],{"class":54,"line":55},[52,53291,53292],{"class":79},"let age\n",[52,53294,53295],{"class":54,"line":66},[52,53296,53297],{"class":79},"age=18\n",[1696,53299,53300,53303],{"start":83},[32,53301,53302],{},"连这些（变量的初始化）：let age=18",[32,53304,53305],{},"更新变量",[14,53307,53308],{},[4509,53309],{"alt":47,"src":53310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[1696,53312,53313],{"start":98},[32,53314,53315],{},"声明多个变量",[14,53317,53318],{},[4509,53319],{"alt":47,"src":53320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[1696,53322,53323],{"start":107},[32,53324,53325],{},"变量命名规则与规范",[14,53327,53328],{},[4509,53329],{"alt":47,"src":53330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,53332,53333],{},"遵守小驼峰！",[1696,53335,53336],{"start":113},[32,53337,53338],{},"变量拓展-let和var的区别",[14,53340,53341],{},[4509,53342],{"alt":47,"src":53343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[18,53345,53347],{"id":53346},"_23-数组","2.3 数组",[42,53349,53351],{"className":53283,"code":53350,"language":53285,"meta":47,"style":47},"let arr = []\n",[49,53352,53353],{"__ignoreMap":47},[52,53354,53355],{"class":54,"line":55},[52,53356,53350],{"class":79},[14,53358,53359],{},[4509,53360],{"alt":47,"src":53361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,53363,53364],{},[4509,53365],{"alt":47,"src":53366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[18,53368,53370],{"id":53369},"_24-常量","2.4 常量",[14,53372,53373],{},[4509,53374],{"alt":47,"src":53375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,53377,53378],{},"const — 类似于 let ，但是变量的值无法被修改",[18,53380,53382],{"id":53381},"_25-数据类型","2.5 数据类型",[14,53384,53385],{},[4509,53386],{"alt":47,"src":53387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[1696,53389,53390,53393],{},[32,53391,53392],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[32,53394,53395],{},"算数运算符：",[14,53397,53398],{},[4509,53399],{"alt":47,"src":53400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[1696,53402,53403],{"start":83},[32,53404,53405],{},"数字类型（Number）",[14,53407,53408],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,53410,53411],{},[4509,53412],{"alt":47,"src":53413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[1696,53415,53416],{"start":91},[32,53417,53418],{},"字符串类型（string）",[14,53420,53421],{},[4509,53422],{"alt":47,"src":53423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,53425,53426],{},"反引号也是可以使用的",[14,53428,53429],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,53431,53432],{},"例如：document.write(\"我今年\"+age+\"岁\")",[1696,53434,53435],{"start":98},[32,53436,53437],{},"模板字符串",[14,53439,53440],{},[4509,53441],{"alt":47,"src":53442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,53444,53445],{},"类似于python的字符串格式化",[1696,53447,53448],{"start":107},[32,53449,53450],{},"布尔类型",[14,53452,53453],{},"true 和 false",[1696,53455,53456],{"start":113},[32,53457,53458],{},"未定义类型（underfined）",[14,53460,53461],{},"表示没有赋值",[14,53463,53464],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,53466,53467],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[1696,53469,53470],{"start":119},[32,53471,53472],{},"null（空类型）",[14,53474,53475],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,53477,53478],{},"赋值了，但是内容为空",[42,53480,53482],{"className":53283,"code":53481,"language":53285,"meta":47,"style":47},"typeof null\n输出的是'object'，是一个对象数据类型\n",[49,53483,53484,53489],{"__ignoreMap":47},[52,53485,53486],{"class":54,"line":55},[52,53487,53488],{"class":79},"typeof null\n",[52,53490,53491],{"class":54,"line":66},[52,53492,53493],{"class":79},"输出的是'object'，是一个对象数据类型\n",[1696,53495,53496],{"start":126},[32,53497,53498],{},"控制台检测数据类型",[14,53500,53501],{},[4509,53502],{"alt":47,"src":53503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[1696,53505,53506],{"start":132},[32,53507,53508],{},"类型转换",[14,53510,53511],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,53513,53514],{},"转换方式：隐式转换和显示转换",[14,53516,53517],{},"①隐式转换",[29,53519,53520,53523,53526,53529],{},[32,53521,53522],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[32,53524,53525],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[32,53527,53528],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[32,53530,53531],{},"任何数据和字符串相加结果都是字符串",[14,53533,53534],{},"②显示转换",[14,53536,53537],{},[4509,53538],{"alt":47,"src":53539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,53541,53542],{},[4509,53543],{"alt":47,"src":53544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,53546,53547],{},"在输入的时候要用好隐式转换，简单写起来",[14,53549,53550],{},"let num = +prompt(’请输入数字：‘)",[14,53552,53553],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,53555,53556],{},"console.log(parseInt('12.333px'))",[14,53558,53559],{},"输出为：12",[14,53561,53562],{},"console.log(parseInt('a'a'a12.333px'))",[14,53564,53565],{},"输出：NaN",[18,53567,53569],{"id":53568},"_26-运算符","2.6 运算符",[3195,53571,53573],{"id":53572},"_261-赋值运算符","2.6.1 赋值运算符",[14,53575,53576],{},[4509,53577],{"alt":47,"src":53578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[3195,53580,53582],{"id":53581},"_262-一元运算符","2.6.2 一元运算符",[14,53584,53585],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,53587,53588],{},[4509,53589],{"alt":47,"src":53590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,53592,53593],{},[4509,53594],{"alt":47,"src":53595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,53597,53598],{},"两者的区别：",[14,53600,53601],{},[4509,53602],{"alt":47,"src":53603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,53605,53606],{},"前置先自加；后置后加，代码执行完之后再加",[3195,53608,53610],{"id":53609},"_263-比较运算符","2.6.3 比较运算符",[14,53612,53613],{},[4509,53614],{"alt":47,"src":53615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,53617,53618],{},"比较运算符也有隐式转换",[14,53620,53621],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,53623,53624],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,53626,53627],{},"要使用三等，开发的时候",[14,53629,53630],{},"NaN不等于任何人，包括它自己",[14,53632,53633],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,53635,53636],{},"7\u002F10=0.7",[14,53638,53639],{},"最后：0.5+0.2=0.7",[14,53641,53642],{},"字符串比较，比较的是字符对应的ASCII码",[3195,53644,53646],{"id":53645},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,53648,53649],{},[4509,53650],{"alt":47,"src":53651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,53653,53654],{},[4509,53655],{"alt":47,"src":53656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,53658,53659],{},[4509,53660],{"alt":47,"src":53661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,53663,53664],{},"上述题目选D",[14,53666,53667],{},"与真2假1；或真1假2",[3195,53669,53671],{"id":53670},"_265-运算符优先级","2.6.5 运算符优先级",[14,53673,53674],{},[4509,53675],{"alt":47,"src":53676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,53678,53679],{},"先算逻辑与，后算逻辑或",[18,53681,53683],{"id":53682},"_27-语句","2.7 语句",[14,53685,53686],{},"表达式：是可以被求值的代码，会有结果给我们",[14,53688,53689],{},"语句：语句是可以被执行的代码，例如prompt()",[14,53691,53692],{},[4509,53693],{"alt":47,"src":53694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,53696,53697],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,53699,53700],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[3195,53702,53704],{"id":53703},"_271-分支语句","2.7.1 分支语句",[24646,53706,53708],{"id":53707},"_2711-if分支语句","2.7.1.1 if分支语句",[14,53710,53711],{},"if语句单行简单的话，可以不写{}，写在一行就行",[1696,53713,53714],{},[32,53715,53716],{},"单分支语句",[14,53718,53719],{},[4509,53720],{"alt":47,"src":53721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,53723,53724],{},"除了0，所有数字都为真",[42,53726,53728],{"className":53283,"code":53727,"language":53285,"meta":47,"style":47},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[49,53729,53730,53735,53740,53745,53749],{"__ignoreMap":47},[52,53731,53732],{"class":54,"line":55},[52,53733,53734],{"class":79},"if（0) {\n",[52,53736,53737],{"class":54,"line":66},[52,53738,53739],{"class":79},"    let a=1\n",[52,53741,53742],{"class":54,"line":83},[52,53743,53744],{"class":79},"    alert(typeof a)\n",[52,53746,53747],{"class":54,"line":91},[52,53748,452],{"class":79},[52,53750,53751],{"class":54,"line":98},[52,53752,53753],{"class":79},"不输出，括号为假\n",[1696,53755,53756],{"start":66},[32,53757,53758],{},"双分支语句",[14,53760,53761],{},[4509,53762],{"alt":47,"src":53763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[1696,53765,53766],{"start":83},[32,53767,53768],{},"多分支语句",[14,53770,53771],{},[4509,53772],{"alt":47,"src":53773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[24646,53775,53777],{"id":53776},"_2712-三元运算符","2.7.1.2 三元运算符",[14,53779,53780],{},[4509,53781],{"alt":47,"src":53782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[24646,53784,53786],{"id":53785},"_2713-switch语句","2.7.1.3 switch语句",[14,53788,53789],{},[4509,53790],{"alt":47,"src":53791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,53793,53794],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[3195,53796,53798],{"id":53797},"_272-循环语句","2.7.2 循环语句",[24646,53800,53802],{"id":53801},"_2721-断点演示","2.7.2.1 断点演示",[14,53804,53805],{},[4509,53806],{"alt":47,"src":53807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[24646,53809,53811],{"id":53810},"_2722-while循环","2.7.2.2 while循环",[14,53813,53814],{},[4509,53815],{"alt":47,"src":53816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,53818,53819],{},[4509,53820],{"alt":47,"src":53821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[24646,53823,53825],{"id":53824},"_2723-for循环","2.7.2.3 for循环",[14,53827,53828],{},[4509,53829],{"alt":47,"src":53830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,53832,53833],{},"for(;;) {",[14,53835,4132],{},[14,53837,53838],{},"表示无限循环",[14,53840,53841],{},[4509,53842],{"alt":47,"src":53843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[24646,53845,53847],{"id":53846},"_2724-循环的退出","2.7.2.4 循环的退出",[14,53849,53850],{},[4509,53851],{"alt":47,"src":53852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[18,53854,53856],{"id":53855},"_28-数组","2.8 数组",[3195,53858,53860],{"id":53859},"_281-基础认识","2.8.1 基础认识",[14,53862,53863],{},[4509,53864],{"alt":47,"src":53865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,53867,53868],{},[4509,53869],{"alt":47,"src":53870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,53872,53873],{},[4509,53874],{"alt":47,"src":53875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,53877,53878],{},[4509,53879],{"alt":47,"src":53880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[3195,53882,53884],{"id":53883},"_282-操作数组","2.8.2 操作数组",[14,53886,53887],{},[4509,53888],{"alt":47,"src":53889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[1696,53891,53892],{},[32,53893,53894],{},"添加元素",[14,53896,53897],{},[4509,53898],{"alt":47,"src":53899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,53901,53902],{},"console.log(arr.push('green'))",[14,53904,53905],{},"输出结果：为新数组的长度",[14,53907,53908],{},[4509,53909],{"alt":47,"src":53910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,53912,53913],{},"push用的非常多，一定要记住",[1696,53915,53916],{},[32,53917,53918],{},"删除元素",[14,53920,53921],{},[4509,53922],{"alt":47,"src":53923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,53925,53926],{},[4509,53927],{"alt":47,"src":53928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,53930,53931],{},[4509,53932],{"alt":47,"src":53933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[3195,53935,53937],{"id":53936},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[42,53939,53941],{"className":53283,"code":53940,"language":53285,"meta":47,"style":47},"\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",[49,53942,53943,53958,53974,53978,53987,54005,54029,54051,54065,54073,54080,54092,54103,54107,54111,54118,54130,54145,54158,54177,54194,54209,54221,54233,54245,54249,54253,54264,54274,54286,54298,54310,54321,54325,54329,54341,54345,54359,54363,54367,54378,54392,54404,54418,54422,54431,54440,54444,54453,54457,54466,54471,54476,54489,54517,54522,54527,54552,54557,54561,54566,54571,54586,54590,54595,54625,54637,54653,54669,54683,54688,54695,54699,54704,54717,54725,54733,54737],{"__ignoreMap":47},[52,53944,53945,53948,53952,53955],{"class":54,"line":55},[52,53946,53947],{"class":79},"\u003C!",[52,53949,53951],{"class":53950},"s9eBZ","DOCTYPE",[52,53953,53954],{"class":75}," html",[52,53956,53957],{"class":79},">\n",[52,53959,53960,53962,53964,53967,53969,53972],{"class":54,"line":66},[52,53961,698],{"class":79},[52,53963,53285],{"class":53950},[52,53965,53966],{"class":75}," lang",[52,53968,292],{"class":79},[52,53970,53971],{"class":62},"\"en\"",[52,53973,53957],{"class":79},[52,53975,53976],{"class":54,"line":83},[52,53977,123],{"emptyLinePlaceholder":122},[52,53979,53980,53982,53985],{"class":54,"line":91},[52,53981,698],{"class":79},[52,53983,53984],{"class":53950},"head",[52,53986,53957],{"class":79},[52,53988,53989,53992,53995,53998,54000,54003],{"class":54,"line":98},[52,53990,53991],{"class":79},"    \u003C",[52,53993,53994],{"class":53950},"meta",[52,53996,53997],{"class":75}," charset",[52,53999,292],{"class":79},[52,54001,54002],{"class":62},"\"UTF-8\"",[52,54004,53957],{"class":79},[52,54006,54007,54009,54011,54014,54016,54019,54022,54024,54027],{"class":54,"line":107},[52,54008,53991],{"class":79},[52,54010,53994],{"class":53950},[52,54012,54013],{"class":75}," http-equiv",[52,54015,292],{"class":79},[52,54017,54018],{"class":62},"\"X-UA-Compatible\"",[52,54020,54021],{"class":75}," content",[52,54023,292],{"class":79},[52,54025,54026],{"class":62},"\"IE=edge\"",[52,54028,53957],{"class":79},[52,54030,54031,54033,54035,54037,54039,54042,54044,54046,54049],{"class":54,"line":113},[52,54032,53991],{"class":79},[52,54034,53994],{"class":53950},[52,54036,17568],{"class":75},[52,54038,292],{"class":79},[52,54040,54041],{"class":62},"\"viewport\"",[52,54043,54021],{"class":75},[52,54045,292],{"class":79},[52,54047,54048],{"class":62},"\"width=device-width, initial-scale=1.0\"",[52,54050,53957],{"class":79},[52,54052,54053,54055,54058,54061,54063],{"class":54,"line":119},[52,54054,53991],{"class":79},[52,54056,54057],{"class":53950},"title",[52,54059,54060],{"class":79},">Document\u003C\u002F",[52,54062,54057],{"class":53950},[52,54064,53957],{"class":79},[52,54066,54067,54069,54071],{"class":54,"line":126},[52,54068,53991],{"class":79},[52,54070,3141],{"class":53950},[52,54072,53957],{"class":79},[52,54074,54075,54078],{"class":54,"line":132},[52,54076,54077],{"class":53950},"        *",[52,54079,18220],{"class":79},[52,54081,54082,54085,54088,54090],{"class":54,"line":138},[52,54083,54084],{"class":308},"            margin",[52,54086,54087],{"class":79},": ",[52,54089,692],{"class":308},[52,54091,80],{"class":79},[52,54093,54094,54097,54099,54101],{"class":54,"line":144},[52,54095,54096],{"class":308},"            padding",[52,54098,54087],{"class":79},[52,54100,692],{"class":308},[52,54102,80],{"class":79},[52,54104,54105],{"class":54,"line":153},[52,54106,2039],{"class":79},[52,54108,54109],{"class":54,"line":159},[52,54110,123],{"emptyLinePlaceholder":122},[52,54112,54113,54116],{"class":54,"line":167},[52,54114,54115],{"class":75},"        .box",[52,54117,18220],{"class":79},[52,54119,54120,54123,54125,54128],{"class":54,"line":173},[52,54121,54122],{"class":308},"            display",[52,54124,54087],{"class":79},[52,54126,54127],{"class":308},"flex",[52,54129,80],{"class":79},[52,54131,54132,54135,54137,54140,54143],{"class":54,"line":181},[52,54133,54134],{"class":308},"            width",[52,54136,54087],{"class":79},[52,54138,54139],{"class":308},"700",[52,54141,54142],{"class":58},"px",[52,54144,80],{"class":79},[52,54146,54147,54150,54152,54154,54156],{"class":54,"line":186},[52,54148,54149],{"class":308},"            height",[52,54151,54087],{"class":79},[52,54153,6951],{"class":308},[52,54155,54142],{"class":58},[52,54157,80],{"class":79},[52,54159,54160,54163,54165,54167,54169,54172,54175],{"class":54,"line":191},[52,54161,54162],{"class":308},"            border-left",[52,54164,54087],{"class":79},[52,54166,629],{"class":308},[52,54168,54142],{"class":58},[52,54170,54171],{"class":308}," solid",[52,54173,54174],{"class":308}," pink",[52,54176,80],{"class":79},[52,54178,54179,54182,54184,54186,54188,54190,54192],{"class":54,"line":196},[52,54180,54181],{"class":308},"            border-bottom",[52,54183,54087],{"class":79},[52,54185,629],{"class":308},[52,54187,54142],{"class":58},[52,54189,54171],{"class":308},[52,54191,54174],{"class":308},[52,54193,80],{"class":79},[52,54195,54196,54198,54200,54202,54204,54207],{"class":54,"line":201},[52,54197,54084],{"class":308},[52,54199,54087],{"class":79},[52,54201,3852],{"class":308},[52,54203,54142],{"class":58},[52,54205,54206],{"class":308}," auto",[52,54208,80],{"class":79},[52,54210,54211,54214,54216,54219],{"class":54,"line":206},[52,54212,54213],{"class":308},"            justify-content",[52,54215,54087],{"class":79},[52,54217,54218],{"class":308},"space-around",[52,54220,80],{"class":79},[52,54222,54223,54226,54228,54231],{"class":54,"line":211},[52,54224,54225],{"class":308},"            align-items",[52,54227,54087],{"class":79},[52,54229,54230],{"class":308},"flex-end",[52,54232,80],{"class":79},[52,54234,54235,54238,54240,54243],{"class":54,"line":218},[52,54236,54237],{"class":308},"            text-align",[52,54239,54087],{"class":79},[52,54241,54242],{"class":308},"center",[52,54244,80],{"class":79},[52,54246,54247],{"class":54,"line":223},[52,54248,2039],{"class":79},[52,54250,54251],{"class":54,"line":230},[52,54252,123],{"emptyLinePlaceholder":122},[52,54254,54255,54257,54259,54262],{"class":54,"line":239},[52,54256,54115],{"class":75},[52,54258,2674],{"class":58},[52,54260,54261],{"class":53950},"div",[52,54263,18220],{"class":79},[52,54265,54266,54268,54270,54272],{"class":54,"line":251},[52,54267,54122],{"class":308},[52,54269,54087],{"class":79},[52,54271,54127],{"class":308},[52,54273,80],{"class":79},[52,54275,54276,54278,54280,54282,54284],{"class":54,"line":256},[52,54277,54134],{"class":308},[52,54279,54087],{"class":79},[52,54281,3852],{"class":308},[52,54283,54142],{"class":58},[52,54285,80],{"class":79},[52,54287,54288,54291,54293,54296],{"class":54,"line":262},[52,54289,54290],{"class":308},"            background-color",[52,54292,54087],{"class":79},[52,54294,54295],{"class":308},"pink",[52,54297,80],{"class":79},[52,54299,54300,54303,54305,54308],{"class":54,"line":268},[52,54301,54302],{"class":308},"            flex-direction",[52,54304,54087],{"class":79},[52,54306,54307],{"class":308},"column",[52,54309,80],{"class":79},[52,54311,54312,54314,54316,54319],{"class":54,"line":280},[52,54313,54213],{"class":308},[52,54315,54087],{"class":79},[52,54317,54318],{"class":308},"space-between",[52,54320,80],{"class":79},[52,54322,54323],{"class":54,"line":286},[52,54324,2039],{"class":79},[52,54326,54327],{"class":54,"line":300},[52,54328,123],{"emptyLinePlaceholder":122},[52,54330,54331,54333,54336,54339],{"class":54,"line":314},[52,54332,54115],{"class":75},[52,54334,54335],{"class":53950}," div",[52,54337,54338],{"class":53950}," span",[52,54340,18220],{"class":79},[52,54342,54343],{"class":54,"line":327},[52,54344,123],{"emptyLinePlaceholder":122},[52,54346,54347,54350,54352,54355,54357],{"class":54,"line":333},[52,54348,54349],{"class":308},"            margin-top",[52,54351,54087],{"class":79},[52,54353,54354],{"class":308},"-20",[52,54356,54142],{"class":58},[52,54358,80],{"class":79},[52,54360,54361],{"class":54,"line":360},[52,54362,2039],{"class":79},[52,54364,54365],{"class":54,"line":365},[52,54366,123],{"emptyLinePlaceholder":122},[52,54368,54369,54371,54373,54376],{"class":54,"line":371},[52,54370,54115],{"class":75},[52,54372,54335],{"class":53950},[52,54374,54375],{"class":53950}," h4",[52,54377,18220],{"class":79},[52,54379,54380,54383,54385,54388,54390],{"class":54,"line":400},[52,54381,54382],{"class":308},"            margin-bottom",[52,54384,54087],{"class":79},[52,54386,54387],{"class":308},"-35",[52,54389,54142],{"class":58},[52,54391,80],{"class":79},[52,54393,54394,54396,54398,54400,54402],{"class":54,"line":405},[52,54395,54134],{"class":308},[52,54397,54087],{"class":79},[52,54399,3562],{"class":308},[52,54401,54142],{"class":58},[52,54403,80],{"class":79},[52,54405,54406,54409,54411,54414,54416],{"class":54,"line":411},[52,54407,54408],{"class":308},"            margin-left",[52,54410,54087],{"class":79},[52,54412,54413],{"class":308},"-10",[52,54415,54142],{"class":58},[52,54417,80],{"class":79},[52,54419,54420],{"class":54,"line":424},[52,54421,2039],{"class":79},[52,54423,54424,54427,54429],{"class":54,"line":436},[52,54425,54426],{"class":79},"    \u003C\u002F",[52,54428,3141],{"class":53950},[52,54430,53957],{"class":79},[52,54432,54433,54436,54438],{"class":54,"line":449},[52,54434,54435],{"class":79},"\u003C\u002F",[52,54437,53984],{"class":53950},[52,54439,53957],{"class":79},[52,54441,54442],{"class":54,"line":2160},[52,54443,123],{"emptyLinePlaceholder":122},[52,54445,54446,54448,54451],{"class":54,"line":2186},[52,54447,698],{"class":79},[52,54449,54450],{"class":53950},"body",[52,54452,53957],{"class":79},[52,54454,54455],{"class":54,"line":2209},[52,54456,123],{"emptyLinePlaceholder":122},[52,54458,54459,54461,54464],{"class":54,"line":2233},[52,54460,53991],{"class":79},[52,54462,54463],{"class":53950},"script",[52,54465,53957],{"class":79},[52,54467,54468],{"class":54,"line":2238},[52,54469,54470],{"class":94},"        \u002F\u002F 1. 四次弹框效果\n",[52,54472,54473],{"class":54,"line":2243},[52,54474,54475],{"class":94},"        \u002F\u002F 声明一个新的数组\n",[52,54477,54478,54481,54484,54486],{"class":54,"line":2248},[52,54479,54480],{"class":58},"        let",[52,54482,54483],{"class":79}," arr ",[52,54485,292],{"class":58},[52,54487,54488],{"class":79}," []\n",[52,54490,54491,54493,54495,54498,54500,54502,54504,54506,54508,54511,54513,54515],{"class":54,"line":2257},[52,54492,1927],{"class":58},[52,54494,682],{"class":79},[52,54496,54497],{"class":58},"let",[52,54499,1871],{"class":79},[52,54501,292],{"class":58},[52,54503,27768],{"class":308},[52,54505,1878],{"class":79},[52,54507,4632],{"class":58},[52,54509,54510],{"class":308}," 4",[52,54512,6200],{"class":79},[52,54514,705],{"class":58},[52,54516,15090],{"class":79},[52,54518,54519],{"class":54,"line":2262},[52,54520,54521],{"class":94},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[52,54523,54524],{"class":54,"line":2268},[52,54525,54526],{"class":94},"            \u002F\u002F arr.push(num)\n",[52,54528,54529,54532,54535,54537,54540,54542,54545,54547,54550],{"class":54,"line":2297},[52,54530,54531],{"class":79},"            arr.",[52,54533,54534],{"class":75},"push",[52,54536,1216],{"class":79},[52,54538,54539],{"class":75},"prompt",[52,54541,1216],{"class":79},[52,54543,54544],{"class":62},"`请输入第${",[52,54546,3644],{"class":79},[52,54548,54549],{"class":62},"}季度的数据:`",[52,54551,33147],{"class":79},[52,54553,54554],{"class":54,"line":2303},[52,54555,54556],{"class":94},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[52,54558,54559],{"class":54,"line":2318},[52,54560,2039],{"class":79},[52,54562,54563],{"class":54,"line":2324},[52,54564,54565],{"class":94},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[52,54567,54568],{"class":54,"line":2353},[52,54569,54570],{"class":94},"        \u002F\u002F 盒子开头\n",[52,54572,54573,54576,54579,54581,54584],{"class":54,"line":2362},[52,54574,54575],{"class":79},"        document.",[52,54577,54578],{"class":75},"write",[52,54580,1216],{"class":79},[52,54582,54583],{"class":62},"` \u003Cdiv class=\"box\">`",[52,54585,708],{"class":79},[52,54587,54588],{"class":54,"line":2368},[52,54589,123],{"emptyLinePlaceholder":122},[52,54591,54592],{"class":54,"line":2376},[52,54593,54594],{"class":94},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[52,54596,54597,54599,54601,54603,54605,54607,54609,54611,54613,54616,54619,54621,54623],{"class":54,"line":2381},[52,54598,1927],{"class":58},[52,54600,682],{"class":79},[52,54602,54497],{"class":58},[52,54604,1871],{"class":79},[52,54606,292],{"class":58},[52,54608,1444],{"class":308},[52,54610,1878],{"class":79},[52,54612,698],{"class":58},[52,54614,54615],{"class":79}," arr.",[52,54617,54618],{"class":308},"length",[52,54620,6200],{"class":79},[52,54622,705],{"class":58},[52,54624,15090],{"class":79},[52,54626,54627,54630,54632,54634],{"class":54,"line":19252},[52,54628,54629],{"class":79},"            document.",[52,54631,54578],{"class":75},[52,54633,1216],{"class":79},[52,54635,54636],{"class":62},"`\n",[52,54638,54639,54642,54644,54646,54648,54650],{"class":54,"line":19258},[52,54640,54641],{"class":62},"              \u003Cdiv style=\"height: ${",[52,54643,6858],{"class":79},[52,54645,4080],{"class":62},[52,54647,3644],{"class":79},[52,54649,567],{"class":62},[52,54651,54652],{"class":62},"}px;\">\n",[52,54654,54655,54658,54660,54662,54664,54666],{"class":54,"line":19281},[52,54656,54657],{"class":62},"                \u003Cspan>${",[52,54659,6858],{"class":79},[52,54661,4080],{"class":62},[52,54663,3644],{"class":79},[52,54665,567],{"class":62},[52,54667,54668],{"class":62},"}\u003C\u002Fspan>\n",[52,54670,54671,54674,54676,54678,54680],{"class":54,"line":19287},[52,54672,54673],{"class":62},"                \u003Ch4>第${",[52,54675,3644],{"class":79},[52,54677,48216],{"class":58},[52,54679,27768],{"class":308},[52,54681,54682],{"class":62},"}季度\u003C\u002Fh4>\n",[52,54684,54685],{"class":54,"line":19310},[52,54686,54687],{"class":62},"              \u003C\u002Fdiv>          \n",[52,54689,54690,54693],{"class":54,"line":19324},[52,54691,54692],{"class":62},"            `",[52,54694,708],{"class":79},[52,54696,54697],{"class":54,"line":19344},[52,54698,2039],{"class":79},[52,54700,54701],{"class":54,"line":19350},[52,54702,54703],{"class":94},"        \u002F\u002F 盒子结尾\n",[52,54705,54706,54708,54710,54712,54715],{"class":54,"line":19361},[52,54707,54575],{"class":79},[52,54709,54578],{"class":75},[52,54711,1216],{"class":79},[52,54713,54714],{"class":62},"` \u003C\u002Fdiv>`",[52,54716,708],{"class":79},[52,54718,54719,54721,54723],{"class":54,"line":19384},[52,54720,54426],{"class":79},[52,54722,54463],{"class":53950},[52,54724,53957],{"class":79},[52,54726,54727,54729,54731],{"class":54,"line":19406},[52,54728,54435],{"class":79},[52,54730,54450],{"class":53950},[52,54732,53957],{"class":79},[52,54734,54735],{"class":54,"line":19411},[52,54736,123],{"emptyLinePlaceholder":122},[52,54738,54739,54741,54743],{"class":54,"line":19417},[52,54740,54435],{"class":79},[52,54742,53285],{"class":53950},[52,54744,53957],{"class":79},[3195,54746,54748],{"id":54747},"_284-冒泡排序","2.8.4 冒泡排序",[42,54750,54752],{"className":53283,"code":54751,"language":53285,"meta":47,"style":47},"\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",[49,54753,54754,54764,54778,54782,54790,54805,54825,54837,54845,54849,54857,54865,54897,54930,54967,54972,54991,54996,55009,55024,55040,55044,55049,55053,55063,55072,55080,55084],{"__ignoreMap":47},[52,54755,54756,54758,54760,54762],{"class":54,"line":55},[52,54757,53947],{"class":79},[52,54759,53951],{"class":53950},[52,54761,53954],{"class":75},[52,54763,53957],{"class":79},[52,54765,54766,54768,54770,54772,54774,54776],{"class":54,"line":66},[52,54767,698],{"class":79},[52,54769,53285],{"class":53950},[52,54771,53966],{"class":75},[52,54773,292],{"class":79},[52,54775,53971],{"class":62},[52,54777,53957],{"class":79},[52,54779,54780],{"class":54,"line":83},[52,54781,123],{"emptyLinePlaceholder":122},[52,54783,54784,54786,54788],{"class":54,"line":91},[52,54785,698],{"class":79},[52,54787,53984],{"class":53950},[52,54789,53957],{"class":79},[52,54791,54792,54795,54797,54799,54801,54803],{"class":54,"line":98},[52,54793,54794],{"class":79},"  \u003C",[52,54796,53994],{"class":53950},[52,54798,53997],{"class":75},[52,54800,292],{"class":79},[52,54802,54002],{"class":62},[52,54804,53957],{"class":79},[52,54806,54807,54809,54811,54813,54815,54817,54819,54821,54823],{"class":54,"line":107},[52,54808,54794],{"class":79},[52,54810,53994],{"class":53950},[52,54812,17568],{"class":75},[52,54814,292],{"class":79},[52,54816,54041],{"class":62},[52,54818,54021],{"class":75},[52,54820,292],{"class":79},[52,54822,54048],{"class":62},[52,54824,53957],{"class":79},[52,54826,54827,54829,54831,54833,54835],{"class":54,"line":113},[52,54828,54794],{"class":79},[52,54830,54057],{"class":53950},[52,54832,54060],{"class":79},[52,54834,54057],{"class":53950},[52,54836,53957],{"class":79},[52,54838,54839,54841,54843],{"class":54,"line":119},[52,54840,54435],{"class":79},[52,54842,53984],{"class":53950},[52,54844,53957],{"class":79},[52,54846,54847],{"class":54,"line":126},[52,54848,123],{"emptyLinePlaceholder":122},[52,54850,54851,54853,54855],{"class":54,"line":132},[52,54852,698],{"class":79},[52,54854,54450],{"class":53950},[52,54856,53957],{"class":79},[52,54858,54859,54861,54863],{"class":54,"line":138},[52,54860,54794],{"class":79},[52,54862,54463],{"class":53950},[52,54864,53957],{"class":79},[52,54866,54867,54870,54872,54874,54877,54879,54881,54883,54885,54887,54889,54891,54893,54895],{"class":54,"line":144},[52,54868,54869],{"class":58},"    let",[52,54871,54483],{"class":79},[52,54873,292],{"class":58},[52,54875,54876],{"class":79}," [",[52,54878,1805],{"class":308},[52,54880,15083],{"class":79},[52,54882,3504],{"class":308},[52,54884,15083],{"class":79},[52,54886,2313],{"class":308},[52,54888,15083],{"class":79},[52,54890,564],{"class":308},[52,54892,15083],{"class":79},[52,54894,629],{"class":308},[52,54896,35896],{"class":79},[52,54898,54899,54901,54903,54905,54907,54909,54911,54913,54915,54917,54919,54922,54924,54926,54928],{"class":54,"line":153},[52,54900,679],{"class":58},[52,54902,682],{"class":79},[52,54904,54497],{"class":58},[52,54906,1871],{"class":79},[52,54908,292],{"class":58},[52,54910,1444],{"class":308},[52,54912,1878],{"class":79},[52,54914,698],{"class":58},[52,54916,54615],{"class":79},[52,54918,54618],{"class":308},[52,54920,54921],{"class":58}," -",[52,54923,27768],{"class":308},[52,54925,6200],{"class":79},[52,54927,705],{"class":58},[52,54929,15090],{"class":79},[52,54931,54932,54935,54937,54939,54941,54943,54945,54947,54949,54951,54953,54955,54957,54959,54961,54963,54965],{"class":54,"line":159},[52,54933,54934],{"class":58},"      for",[52,54936,682],{"class":79},[52,54938,54497],{"class":58},[52,54940,1934],{"class":79},[52,54942,292],{"class":58},[52,54944,1444],{"class":308},[52,54946,1941],{"class":79},[52,54948,698],{"class":58},[52,54950,54615],{"class":79},[52,54952,54618],{"class":308},[52,54954,54921],{"class":58},[52,54956,1871],{"class":79},[52,54958,2642],{"class":58},[52,54960,27768],{"class":308},[52,54962,1949],{"class":79},[52,54964,705],{"class":58},[52,54966,15090],{"class":79},[52,54968,54969],{"class":54,"line":167},[52,54970,54971],{"class":94},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[52,54973,54974,54976,54979,54981,54984,54986,54988],{"class":54,"line":173},[52,54975,5497],{"class":58},[52,54977,54978],{"class":79}," (arr[j] ",[52,54980,2674],{"class":58},[52,54982,54983],{"class":79}," arr[j ",[52,54985,2004],{"class":58},[52,54987,27768],{"class":308},[52,54989,54990],{"class":79},"]) {\n",[52,54992,54993],{"class":54,"line":181},[52,54994,54995],{"class":94},"          \u002F\u002F 交换两个变量\n",[52,54997,54998,55001,55004,55006],{"class":54,"line":186},[52,54999,55000],{"class":58},"          let",[52,55002,55003],{"class":79}," tmp ",[52,55005,292],{"class":58},[52,55007,55008],{"class":79}," arr[j]\n",[52,55010,55011,55014,55016,55018,55020,55022],{"class":54,"line":191},[52,55012,55013],{"class":79},"          arr[j] ",[52,55015,292],{"class":58},[52,55017,54983],{"class":79},[52,55019,2004],{"class":58},[52,55021,27768],{"class":308},[52,55023,35896],{"class":79},[52,55025,55026,55029,55031,55033,55035,55037],{"class":54,"line":196},[52,55027,55028],{"class":79},"          arr[j ",[52,55030,2004],{"class":58},[52,55032,27768],{"class":308},[52,55034,7415],{"class":79},[52,55036,292],{"class":58},[52,55038,55039],{"class":79}," tmp\n",[52,55041,55042],{"class":54,"line":201},[52,55043,2039],{"class":79},[52,55045,55046],{"class":54,"line":206},[52,55047,55048],{"class":79},"      }\n",[52,55050,55051],{"class":54,"line":211},[52,55052,616],{"class":79},[52,55054,55055,55058,55060],{"class":54,"line":218},[52,55056,55057],{"class":79},"    document.",[52,55059,54578],{"class":75},[52,55061,55062],{"class":79},"(arr)\n",[52,55064,55065,55068,55070],{"class":54,"line":223},[52,55066,55067],{"class":79},"  \u003C\u002F",[52,55069,54463],{"class":53950},[52,55071,53957],{"class":79},[52,55073,55074,55076,55078],{"class":54,"line":230},[52,55075,54435],{"class":79},[52,55077,54450],{"class":53950},[52,55079,53957],{"class":79},[52,55081,55082],{"class":54,"line":239},[52,55083,123],{"emptyLinePlaceholder":122},[52,55085,55086,55088,55090],{"class":54,"line":251},[52,55087,54435],{"class":79},[52,55089,53285],{"class":53950},[52,55091,53957],{"class":79},[14,55093,55094],{},[4509,55095],{"alt":47,"src":55096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,55098,55099],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,55101,55102],{},"let arr = [4, 2, 5, 1, 3]",[14,55104,55105],{},"\u002F\u002F 1.升序排列写法",[14,55107,55108],{},"arr.sort(function (a, b) {",[14,55110,55111],{},"return a - b",[14,55113,55114],{},"})",[14,55116,55117],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,55119,55120],{},"\u002F\u002F 降序排列写法",[14,55122,55108],{},[14,55124,55125],{},"return b - a",[14,55127,55114],{},[14,55129,55130],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[18,55132,55134],{"id":55133},"_29-函数","2.9 函数",[14,55136,55137],{},[4509,55138],{"alt":47,"src":55139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,55141,55142],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,55144,55145],{},"函数的声明用function",[14,55147,55148],{},"函数里边可以嵌套函数",[3195,55150,55152],{"id":55151},"_291-函数传参","2.9.1 函数传参",[14,55154,55155],{},[4509,55156],{"alt":47,"src":55157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,55159,55160],{},[4509,55161],{"alt":47,"src":55162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[29,55164,55165,55168,55171,55174,55177,55180],{},[32,55166,55167],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[32,55169,55170],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[32,55172,55173],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[32,55175,55176],{},"开发中尽量保持形参和实参个数一致",[32,55178,55179],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[32,55181,55182],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,55184,55185],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[3195,55187,55189],{"id":55188},"_292-函数的返回值","2.9.2 函数的返回值",[14,55191,55192],{},[4509,55193],{"alt":47,"src":55194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,55196,55197],{},[4509,55198],{"alt":47,"src":55199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[29,55201,55202,55205,55208,55211,55214],{},[32,55203,55204],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[32,55206,55207],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[32,55209,55210],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[32,55212,55213],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[32,55215,55216],{},"断点调试:进入函数内部看执行过程F11",[3195,55218,55220],{"id":55219},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[42,55222,55224],{"className":53283,"code":55223,"language":53285,"meta":47,"style":47},"    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",[49,55225,55226,55231,55236,55240,55245],{"__ignoreMap":47},[52,55227,55228],{"class":54,"line":55},[52,55229,55230],{"class":79},"    function fn(a, b) {\n",[52,55232,55233],{"class":54,"line":66},[52,55234,55235],{"class":79},"      console.log(a + b);\n",[52,55237,55238],{"class":54,"line":83},[52,55239,616],{"class":79},[52,55241,55242],{"class":54,"line":91},[52,55243,55244],{"class":79},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[52,55246,55247],{"class":54,"line":98},[52,55248,55249],{"class":79},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[3195,55251,55253],{"id":55252},"_294-作用域","2.9.4 作用域",[29,55255,55256,55262,55267,55270,55273],{},[32,55257,55258,55259],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2389,55260,55261],{},"作用域",[32,55263,55264],{},[2389,55265,55266],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[32,55268,55269],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[32,55271,55272],{},"函数内部可以直接所使用全局变量",[32,55274,55275],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,55277,17281],{},[42,55279,55281],{"className":53283,"code":55280,"language":53285,"meta":47,"style":47},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[49,55282,55283,55288,55293,55297,55302,55307,55312],{"__ignoreMap":47},[52,55284,55285],{"class":54,"line":55},[52,55286,55287],{"class":79},"    function fun() {\n",[52,55289,55290],{"class":54,"line":66},[52,55291,55292],{"class":79},"      num = 10\n",[52,55294,55295],{"class":54,"line":83},[52,55296,616],{"class":79},[52,55298,55299],{"class":54,"line":91},[52,55300,55301],{"class":79},"    fun()\n",[52,55303,55304],{"class":54,"line":98},[52,55305,55306],{"class":79},"    console.log(num)\n",[52,55308,55309],{"class":54,"line":107},[52,55310,55311],{"class":79},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[52,55313,55314],{"class":54,"line":113},[52,55315,55316],{"class":79},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[29,55318,55319,55322],{},[32,55320,55321],{},"函数内部的形参可以看做是局部变量",[32,55323,55324],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,55326,55327,55328],{},"变量访问原则： ",[2389,55329,55330],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[3195,55332,55334],{"id":55333},"_295-匿名函数","2.9.5 匿名函数",[14,55336,55337],{},"函数可以分为具名函数和匿名函数",[14,55339,55340],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[1696,55342,55343],{},[32,55344,55345],{},"函数表达式",[14,55347,55348],{},[4509,55349],{"alt":47,"src":55350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,55352,55353],{},"里边也可以写参数",[14,55355,55356],{},"具名函数调用位置可以随意调整；",[14,55358,55359],{},"匿名函数函数表达式形式只能在声明后才可以使用",[1696,55361,55362],{"start":66},[32,55363,55364],{},"立即执行函数",[14,55366,55367],{},[4509,55368],{"alt":47,"src":55369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,55371,55372],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,55374,55375],{},"写法：两个小括号，然后在第一个小括号中写function",[14,55377,55378],{},"(function () {})();",[14,55380,55381],{},"不要落下最后的;",[14,55383,55384],{},"立即执行函数必须要加;",[14,55386,55387],{},"分号写前写后都没问题",[14,55389,55390],{},"写前：",[14,55392,55393],{},"(function() {})()",[14,55395,55396],{},";(function () {})();",[14,55398,55399],{},"写后:",[14,55401,55402],{},"(function() {})();",[14,55404,55378],{},[14,55406,55407],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,55409,55410],{},"还有一种写法：",[14,55412,55413],{},"(function(){}());",[14,55415,55416],{},"或者:",[14,55418,55419],{},"!function(){}();",[14,55421,55422],{},"立即执行函数有时候也是可以加名字的：",[14,55424,55425],{},"(function flexible(window,document) {}(window,document));",[14,55427,55428],{},"省一些调用方法",[3195,55430,55432],{"id":55431},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,55434,55435],{},[4509,55436],{"alt":47,"src":55437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,55439,55440],{},"这样就不用非得给x,y初始化了",[14,55442,55443],{},[4509,55444],{"alt":47,"src":55445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,55447,55448],{},"代码执行时先看左边",[14,55450,55451],{},"例如：console.log(false && 3+5)",[14,55453,55454],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,55456,55457],{},"&&都是真时，就返回最后一个真值",[14,55459,55460],{},"console.log(11 && 22)",[14,55462,55463],{},"输出22",[14,55465,55466],{},"逻辑与：遇真则真",[14,55468,17281],{},[14,55470,55471],{},"let age=1",[14,55473,55474],{},"console.log(11 || age++)",[14,55476,55477],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,55479,55480],{},"console.log(11 || 22)",[14,55482,55483],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,55485,55486],{},"||如果都是假的话，就取最后一个假的值了",[3195,55488,55490],{"id":55489},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,55492,55493],{},"显示转换：",[14,55495,55496,55499,55500],{},[2389,55497,55498],{},"记忆","： ",[2389,55501,55502],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,55504,55505],{},"空字符串为假，其他字符串全为真",[14,55507,55508],{},[4509,55509],{"alt":47,"src":55510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,55512,55513],{},"隐式转换：",[14,55515,55516],{},[4509,55517],{"alt":47,"src":55518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,55520,55521],{},"隐式转换:",[14,55523,55524],{},"null+3=3",[14,55526,55527],{},"undefined+3=NaN",[14,55529,55530],{},"null==undefined 输出true,他两个都当0看",[14,55532,55533],{},"null===undefined 输出false",[14,55535,55536],{},"undefined做任何操作都是NaN",[14,55538,55539],{},"NaN不等于NaN，NaN表示计算错误",[18,55541,55543],{"id":55542},"_210-对象","2.10 对象",[3195,55545,55547],{"id":55546},"_2101-对象的介绍","2.10.1 对象的介绍",[14,55549,55550],{},"对象也是一种数据类型，里边的数据是无序的",[14,55552,55553],{},"对象由属性和方法组成",[14,55555,55556],{},[4509,55557],{"alt":47,"src":55558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,55560,55561],{},[4509,55562],{"alt":47,"src":55563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,55565,55566],{},[4509,55567],{"alt":47,"src":55568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[3195,55570,55572],{"id":55571},"_2102-对象属性","2.10.2 对象属性",[14,55574,55575],{},[4509,55576],{"alt":47,"src":55577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[1696,55579,55580],{},[32,55581,55582],{},"查询对象",[14,55584,55585],{},"对象名.属性 goods.uname",[14,55587,55588],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,55590,55591],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,55593,55594],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,55596,55597],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[1696,55599,55600],{"start":66},[32,55601,55602],{},"重新赋值",[14,55604,55605],{},"对象名.属性=新值",[1696,55607,55608],{"start":83},[32,55609,55610],{},"增加新数据",[14,55612,55605],{},[1696,55614,55615],{"start":91},[32,55616,55617],{},"删除对象中的属性",[14,55619,55620],{},"delete 对象名.属性",[3195,55622,55624],{"id":55623},"_2103-对象方法","2.10.3 对象方法",[14,55626,55627],{},[4509,55628],{"alt":47,"src":55629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,55631,55632],{},"后边跟的是匿名函数",[14,55634,55635],{},"对象外面的叫函数；对象内部的叫方法",[14,55637,55638],{},[4509,55639],{"alt":47,"src":55640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[3195,55642,55644],{"id":55643},"_2104-遍历对象","2.10.4 遍历对象",[14,55646,55647],{},"理解为加括号的python字典遍历",[14,55649,55650],{},[4509,55651],{"alt":47,"src":55652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,55654,55655],{},"k是字符串类型",[14,55657,55658],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[42,55660,55662],{"className":53283,"code":55661,"language":53285,"meta":47,"style":47},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[49,55663,55664,55669,55674,55679,55684],{"__ignoreMap":47},[52,55665,55666],{"class":54,"line":55},[52,55667,55668],{"class":79},"   let arr = [1, 2, 3]\n",[52,55670,55671],{"class":54,"line":66},[52,55672,55673],{"class":79},"    for (let k in arr) {\n",[52,55675,55676],{"class":54,"line":83},[52,55677,55678],{"class":79},"      console.log(k)\n",[52,55680,55681],{"class":54,"line":91},[52,55682,55683],{"class":79},"      console.log(arr[k])\n",[52,55685,55686],{"class":54,"line":98},[52,55687,616],{"class":79},[14,55689,55690],{},[4509,55691],{"alt":47,"src":55692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,55694,55695],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,55697,55698],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,55700,55701],{},"for in 得到的k是属性名",[54463,55703,55704],{},"\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,55706,55707],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[3195,55709,55711],{"id":55710},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,55713,55714],{},"数组中放对象信息",[42,55716,55720],{"className":55717,"code":55718,"language":55719,"meta":47,"style":47},"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",[49,55721,55722,55730,55735,55740,55745,55750,55755,55760,55765,55770,55775,55780,55785,55789,55793],{"__ignoreMap":47},[52,55723,55724,55726,55728],{"class":54,"line":55},[52,55725,698],{"class":79},[52,55727,54463],{"class":53950},[52,55729,53957],{"class":79},[52,55731,55732],{"class":54,"line":66},[52,55733,55734],{"class":79},"    let students = [\n",[52,55736,55737],{"class":54,"line":83},[52,55738,55739],{"class":79},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[52,55741,55742],{"class":54,"line":91},[52,55743,55744],{"class":79},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[52,55746,55747],{"class":54,"line":98},[52,55748,55749],{"class":79},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[52,55751,55752],{"class":54,"line":107},[52,55753,55754],{"class":79},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[52,55756,55757],{"class":54,"line":113},[52,55758,55759],{"class":79},"    ]\n",[52,55761,55762],{"class":54,"line":119},[52,55763,55764],{"class":79},"    for (let i = 0; i \u003C students.length; i++) {\n",[52,55766,55767],{"class":54,"line":126},[52,55768,55769],{"class":79},"      for (let k in students[i]) {\n",[52,55771,55772],{"class":54,"line":132},[52,55773,55774],{"class":79},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[52,55776,55777],{"class":54,"line":138},[52,55778,55779],{"class":79},"        \u002F\u002F输出每个人的名字：\n",[52,55781,55782],{"class":54,"line":144},[52,55783,55784],{"class":79},"        \u002F\u002Fconsole.log(students[i].name)\n",[52,55786,55787],{"class":54,"line":153},[52,55788,55048],{"class":79},[52,55790,55791],{"class":54,"line":159},[52,55792,616],{"class":79},[52,55794,55795,55797,55799],{"class":54,"line":167},[52,55796,55067],{"class":79},[52,55798,54463],{"class":53950},[52,55800,53957],{"class":79},[3195,55802,55804],{"id":55803},"_2106-内置对象","2.10.6 内置对象",[14,55806,55807],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[1696,55809,55810],{},[32,55811,55812],{},"数学对象Math",[14,55814,55815],{},[4509,55816],{"alt":47,"src":55817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,55819,55820],{},[3451,55821,55824],{"href":55822,"rel":55823},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[26514],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,55826,55827],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,55829,55830],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,55832,55833],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,55835,55836],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,55838,55839],{},"null属于对象数据类型",[1696,55841,55842],{"start":66},[32,55843,55844],{},"生成任意范围随机数",[14,55846,55847],{},[4509,55848],{"alt":47,"src":55849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,55851,55852],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,55854,55855],{},"乘以几就取不到几",[14,55857,55858],{},"取数组中的随机元素：",[14,55860,55861],{},"let arr = ['red', 'green', 'blue']",[14,55863,55864],{},"let random = Math.floor(Math.random() * arr.length)",[14,55866,55867],{},"console.log(arr[random])",[14,55869,55870],{},"这个函数得到的是全闭区间",[14,55872,55873],{},"function getRandom(N, M) {",[14,55875,55876],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,55878,4132],{},[14,55880,55881],{},"console.log(getRandom(4, 8))",[3195,55883,55885],{"id":55884},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,55887,55888],{},[4509,55889],{"alt":47,"src":55890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,55892,55893],{},[4509,55894],{"alt":47,"src":55895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,55897,55898],{},[4509,55899],{"alt":47,"src":55900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,55902,55903],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,55905,55906],{},[4509,55907],{"alt":47,"src":55908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,55910,55911],{},[4509,55912],{"alt":47,"src":55913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,55915,55916],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,55918,55919],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,55921,55922],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[3141,55924,55925],{},"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":47,"searchDepth":66,"depth":66,"links":55927},[55928,55936,55937,55938,55939,55940,55947,55951,55957,55966],{"id":53118,"depth":66,"text":53119,"children":55929},[55930,55931,55932,55933,55934,55935],{"id":53122,"depth":83,"text":53123},{"id":53139,"depth":83,"text":53140},{"id":53179,"depth":83,"text":53180},{"id":53191,"depth":83,"text":53192},{"id":53200,"depth":83,"text":53201},{"id":53248,"depth":83,"text":53249},{"id":53258,"depth":66,"text":53259},{"id":53346,"depth":66,"text":53347},{"id":53369,"depth":66,"text":53370},{"id":53381,"depth":66,"text":53382},{"id":53568,"depth":66,"text":53569,"children":55941},[55942,55943,55944,55945,55946],{"id":53572,"depth":83,"text":53573},{"id":53581,"depth":83,"text":53582},{"id":53609,"depth":83,"text":53610},{"id":53645,"depth":83,"text":53646},{"id":53670,"depth":83,"text":53671},{"id":53682,"depth":66,"text":53683,"children":55948},[55949,55950],{"id":53703,"depth":83,"text":53704},{"id":53797,"depth":83,"text":53798},{"id":53855,"depth":66,"text":53856,"children":55952},[55953,55954,55955,55956],{"id":53859,"depth":83,"text":53860},{"id":53883,"depth":83,"text":53884},{"id":53936,"depth":83,"text":53937},{"id":54747,"depth":83,"text":54748},{"id":55133,"depth":66,"text":55134,"children":55958},[55959,55960,55961,55962,55963,55964,55965],{"id":55151,"depth":83,"text":55152},{"id":55188,"depth":83,"text":55189},{"id":55219,"depth":83,"text":55220},{"id":55252,"depth":83,"text":55253},{"id":55333,"depth":83,"text":55334},{"id":55431,"depth":83,"text":55432},{"id":55489,"depth":83,"text":55490},{"id":55542,"depth":66,"text":55543,"children":55967},[55968,55969,55970,55971,55972,55973,55974],{"id":55546,"depth":83,"text":55547},{"id":55571,"depth":83,"text":55572},{"id":55623,"depth":83,"text":55624},{"id":55643,"depth":83,"text":55644},{"id":55710,"depth":83,"text":55711},{"id":55803,"depth":83,"text":55804},{"id":55884,"depth":83,"text":55885},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":53110,"description":26025},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55981,"title":55982,"body":55983,"description":26025,"extension":3153,"meta":79323,"navigation":122,"path":79324,"seo":79325,"stem":79326,"__hash__":79327},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55984,"toc":79263},[55985,55988,55991,55994,55999,56002,56005,56008,56012,56016,56022,56027,56035,56042,56045,56049,56054,56059,56064,56067,56070,56081,56084,56088,56091,56094,56099,56104,56109,56112,56115,56207,56210,56215,56218,56223,56226,56229,56234,56237,56242,56246,56249,56263,56267,56272,56275,56278,56282,56287,56290,56294,56298,56303,56307,56312,56315,56318,56321,56324,56327,56330,56335,56340,56368,56371,56374,56377,56382,56385,56388,56391,56394,56398,56427,56431,56436,56441,56444,56447,56450,56455,56570,56575,56580,56741,56746,56749,56753,56758,56763,56766,56769,56772,56775,56778,56781,56784,56787,56790,56793,56796,56799,56802,56805,56807,56810,56813,56816,56821,56825,57222,57225,57231,57235,57240,58522,58527,58530,58533,58536,58541,59737,59741,59747,59752,59755,59760,59765,59769,59773,59778,59781,59786,59789,59792,59796,60704,60707,60711,60932,60935,60938,60941,61167,61170,61394,61397,61401,61406,61409,61412,61640,61643,61676,61679,61683,61688,61692,61695,61698,61701,61704,61707,61710,61713,61718,62998,63002,63005,64098,64102,64105,64108,64111,64114,64118,64121,64124,64126,64134,65615,65619,65622,65625,65628,65837,65840,65844,65848,65853,65858,65861,65864,65869,65873,65878,65881,65990,65994,65999,66004,66007,66010,66014,66019,66024,66029,66032,66035,66046,66049,66054,66059,66062,66065,66138,66142,66147,66150,66152,66163,66167,66172,67498,67501,67504,67507,67509,67512,67515,67518,67521,67524,67527,67530,67533,67536,67539,67542,67545,67547,67549,67552,67556,68650,68653,68656,68672,68686,68689,68694,68700,68705,68709,68713,68718,68722,68727,69169,69174,69177,69181,69186,69189,69192,69196,69201,69205,69210,69215,69219,69224,69229,69232,69237,69242,69246,69251,69256,69360,69363,69367,69372,69738,69741,69744,69747,69750,69753,69756,69759,69762,71058,71062,71067,71072,71075,71078,71081,71084,71086,71091,71096,71099,71103,71108,71113,71118,71121,71124,71127,71130,71133,71138,71141,71145,71150,71155,71159,71164,71167,71172,71175,71178,71181,71184,71187,71192,71195,71198,71201,71204,71208,71213,71216,71220,71225,71228,71231,71235,71264,71267,71271,71275,71280,71284,71289,71292,71295,71298,71301,71304,71307,71310,71313,71316,71319,71322,71325,71328,71331,71335,71340,71345,71348,71352,71356,71361,71364,71368,71371,71374,71379,71384,71389,71394,71399,71402,71405,71410,71415,71419,71424,71427,71432,71435,71438,71441,71444,71449,71452,71461,71465,71470,71473,71476,71480,71483,71488,71492,71495,71501,71507,71511,71537,71540,73101,73104,73600,73603,73608,73613,73618,73622,73627,73632,73637,73641,73646,73649,73652,73655,73658,73662,73665,73670,73673,73678,73682,73687,73690,73695,73700,73705,73708,73711,73716,73721,73724,73727,73731,73734,73739,73742,73747,73750,73755,73760,73765,73768,73773,73838,73841,73852,73856,73861,74033,74037,74042,74045,74048,74051,74055,74066,74070,74073,74078,74083,74086,74089,74092,74095,74098,74100,74103,74106,74109,74114,74117,74122,74125,74129,74132,74135,74149,74153,74156,74211,74216,74219,74222,74227,74230,74234,74239,74369,74373,74378,74383,74464,74469,74473,74476,74481,74486,74492,74495,74498,74501,74505,74510,74513,74524,74528,74545,77592,77596,77599,77602,77605,77626,77630,77633,77641,77644,77649,77652,77655,77660,77665,77669,77690,77694,77699,77702,77705,77708,77711,77715,77720,77723,77727,77732,77735,77740,77743,77748,77751,77756,78959,78963,78968,78971,78976,79260],[10,55986,55982],{"id":55987},"_3web-apis",[14,55989,55990],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,55992,55993],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,55995,55996],{},[4509,55997],{"alt":47,"src":55998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,56000,56001],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,56003,56004],{},"建议数组和对象使用 const 来声明",[14,56006,56007],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[18,56009,56011],{"id":56010},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[3195,56013,56015],{"id":56014},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,56017,56018,56021],{},[49,56019,56020],{},"document"," = HTML 文件解析后的对象化表示；",[14,56023,56024,56026],{},[49,56025,56020],{}," ≠ HTML 文件本身",[14,56028,56029,56034],{},[2389,56030,56031],{},[49,56032,56033],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,56036,56037,56041],{},[2389,56038,56039],{},[49,56040,56020],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,56043,56044],{},"document实际上为window.document的简写",[3195,56046,56048],{"id":56047},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,56050,56051],{},[4509,56052],{"alt":47,"src":56053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,56055,56056],{},[4509,56057],{"alt":47,"src":56058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,56060,56061],{},[4509,56062],{"alt":47,"src":56063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,56065,56066],{},"console.dir()",[14,56068,56069],{},"dir用来打印对象",[29,56071,56072,56075,56078],{},[32,56073,56074],{},"任何一个标签，都是一个对象",[32,56076,56077],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[32,56079,56080],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,56082,56083],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[3195,56085,56087],{"id":56086},"_312-获取dom对象","3.1.2 获取DoM对象",[14,56089,56090],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,56092,56093],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,56095,56096],{},[2389,56097,56098],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[1696,56100,56101],{},[32,56102,56103],{},"利用CSS选择器来获取标签元素",[14,56105,56106],{},[4509,56107],{"alt":47,"src":56108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,56110,56111],{},"里边的选择器必须必须加引号！！！",[14,56113,56114],{},"只选择第一个元素",[42,56116,56118],{"className":55717,"code":56117,"language":55719,"meta":47,"style":47},"\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",[49,56119,56120,56128,56149,56168,56176,56181,56186,56191,56199],{"__ignoreMap":47},[52,56121,56122,56124,56126],{"class":54,"line":55},[52,56123,698],{"class":79},[52,56125,54450],{"class":53950},[52,56127,53957],{"class":79},[52,56129,56130,56132,56134,56137,56139,56142,56145,56147],{"class":54,"line":66},[52,56131,54794],{"class":79},[52,56133,54261],{"class":53950},[52,56135,56136],{"class":75}," class",[52,56138,292],{"class":79},[52,56140,56141],{"class":62},"\"box\"",[52,56143,56144],{"class":79},">123\u003C\u002F",[52,56146,54261],{"class":53950},[52,56148,53957],{"class":79},[52,56150,56151,56153,56155,56157,56159,56161,56164,56166],{"class":54,"line":83},[52,56152,54794],{"class":79},[52,56154,54261],{"class":53950},[52,56156,56136],{"class":75},[52,56158,292],{"class":79},[52,56160,56141],{"class":62},[52,56162,56163],{"class":79},">456\u003C\u002F",[52,56165,54261],{"class":53950},[52,56167,53957],{"class":79},[52,56169,56170,56172,56174],{"class":54,"line":91},[52,56171,54794],{"class":79},[52,56173,54463],{"class":53950},[52,56175,53957],{"class":79},[52,56177,56178],{"class":54,"line":98},[52,56179,56180],{"class":79},"    \u002F\u002F 1.获取匹配的第一个元素\n",[52,56182,56183],{"class":54,"line":107},[52,56184,56185],{"class":79},"    const box = document.querySelector('div')\n",[52,56187,56188],{"class":54,"line":113},[52,56189,56190],{"class":79},"    console.dir(box)\n",[52,56192,56193,56195,56197],{"class":54,"line":119},[52,56194,55067],{"class":79},[52,56196,54463],{"class":53950},[52,56198,53957],{"class":79},[52,56200,56201,56203,56205],{"class":54,"line":126},[52,56202,54435],{"class":79},[52,56204,54450],{"class":53950},[52,56206,53957],{"class":79},[14,56208,56209],{},"只选123，不选456",[14,56211,56212],{},[4509,56213],{"alt":47,"src":56214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,56216,56217],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,56219,56220],{},[4509,56221],{"alt":47,"src":56222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,56224,56225],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,56227,56228],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[1696,56230,56231],{"start":66},[32,56232,56233],{},"其他方法来获取标签元素",[14,56235,56236],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,56238,56239],{},[4509,56240],{"alt":47,"src":56241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[3195,56243,56245],{"id":56244},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,56247,56248],{},"设置修改DOM元素内容有两种方式：",[29,56250,56251,56254,56257,56260],{},[32,56252,56253],{},"元素.innerText=''",[32,56255,56256],{},"元素.innerHTML=''",[32,56258,56259],{},"不写字符串输出数字也是可以的",[32,56261,56262],{},"元素.innerHtml=1",[24646,56264,56266],{"id":56265},"_3131-innertext","3.1.3.1 innerText",[14,56268,56269],{},[4509,56270],{"alt":47,"src":56271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,56273,56274],{},"思路：实现了修改盒子中的内容！",[14,56276,56277],{},"它只显示纯文本，不解析标签",[24646,56279,56281],{"id":56280},"_3132-innerhtml","3.1.3.2 innerHTML",[14,56283,56284],{},[4509,56285],{"alt":47,"src":56286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,56288,56289],{},"相比于innerText，他的强大之处在于可以解析标签",[3195,56291,56293],{"id":56292},"_314-操作元素属性","3.1.4 操作元素属性",[24646,56295,56297],{"id":56296},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,56299,56300],{},[4509,56301],{"alt":47,"src":56302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[24646,56304,56306],{"id":56305},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,56308,56309],{},[4509,56310],{"alt":47,"src":56311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,56313,56314],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,56316,56317],{},"div.style.backgroundColor = 'hotpink'",[14,56319,56320],{},"如果按照css的写法，-表示减，就会出错",[14,56322,56323],{},"body元素不需要再获取，直接用就行！！！！！！",[14,56325,56326],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,56328,56329],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,56331,56332],{},[4509,56333],{"alt":47,"src":56334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,56336,56337],{},[4509,56338],{"alt":47,"src":56339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[1696,56341,56342,56345,56348,56351,56354,56357],{},[32,56343,56344],{},"className这个方式就是修改很多样式的时候来使用的！",[32,56346,56347],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[32,56349,56350],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[32,56352,56353],{},"className为属性名，如果还用class的话就导致与关键字冲突",[32,56355,56356],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[32,56358,56359,56360,56365],{},"解析标签的时候就变为了",[54261,56361],{"className":56362},[56363,56364],"nav","box",[56366,56367],"br",{},[14,56369,56370],{},"例子：",[54261,56372],{"className":56373},[56363],[54463,56375,56376],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,56378,56379],{},[4509,56380],{"alt":47,"src":56381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,56383,56384],{},"追加和删除类名用classList",[14,56386,56387],{},"常用于类似于开关的操作",[14,56389,56390],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,56392,56393],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[24646,56395,56397],{"id":56396},"_3143-牢记点","3.1.4.3 牢记点",[1696,56399,56400,56403,56406,56409,56412,56415,56418,56421,56424],{},[32,56401,56402],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[32,56404,56405],{},"使用style属性操作css时不要忘记引号",[32,56407,56408],{},"使用className或者classList时也不要忘记引号",[32,56410,56411],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[32,56413,56414],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[32,56416,56417],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[32,56419,56420],{},"若： let arr=['1','2',3] arr[0]=1",[32,56422,56423],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[32,56425,56426],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[3195,56428,56430],{"id":56429},"_315-操作表单元素","3.1.5 操作表单元素",[1696,56432,56433],{},[32,56434,56435],{},"天生的属性",[14,56437,56438],{},[4509,56439],{"alt":47,"src":56440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,56442,56443],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,56445,56446],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,56448,56449],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,56451,56452],{},[4509,56453],{"alt":47,"src":56454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[42,56456,56458],{"className":53283,"code":56457,"language":53285,"meta":47,"style":47},"在复选框中如果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",[49,56459,56460,56465,56497,56502,56507,56512,56517,56521,56526,56531,56548,56560,56565],{"__ignoreMap":47},[52,56461,56462],{"class":54,"line":55},[52,56463,56464],{"class":79},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[52,56466,56467,56469,56472,56475,56477,56480,56482,56484,56486,56488,56490,56492,56495],{"class":54,"line":66},[52,56468,698],{"class":79},[52,56470,56471],{"class":53950},"input",[52,56473,56474],{"class":75}," type",[52,56476,292],{"class":79},[52,56478,56479],{"class":62},"\"checkbox\"",[52,56481,17568],{"class":75},[52,56483,292],{"class":79},[52,56485,10607],{"class":62},[52,56487,17607],{"class":75},[52,56489,292],{"class":79},[52,56491,10607],{"class":62},[52,56493,56494],{"class":75}," checked",[52,56496,53957],{"class":79},[52,56498,56499],{"class":54,"line":83},[52,56500,56501],{"class":79},"不选的话：\n",[52,56503,56504],{"class":54,"line":91},[52,56505,56506],{"class":79},"const input = document.querySelector('input')\n",[52,56508,56509],{"class":54,"line":98},[52,56510,56511],{"class":79},"input.checked=false\n",[52,56513,56514],{"class":54,"line":107},[52,56515,56516],{"class":79},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[52,56518,56519],{"class":54,"line":113},[52,56520,123],{"emptyLinePlaceholder":122},[52,56522,56523],{"class":54,"line":119},[52,56524,56525],{"class":79},"禁用按钮：\n",[52,56527,56528],{"class":54,"line":126},[52,56529,56530],{"class":79},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[52,56532,56533,56535,56538,56541,56544,56546],{"class":54,"line":132},[52,56534,698],{"class":79},[52,56536,56537],{"class":53950},"button",[52,56539,56540],{"class":75}," disabled",[52,56542,56543],{"class":79},">点击\u003C\u002F",[52,56545,56537],{"class":53950},[52,56547,53957],{"class":79},[52,56549,56550,56552,56554,56556,56558],{"class":54,"line":138},[52,56551,698],{"class":79},[52,56553,56537],{"class":53950},[52,56555,56543],{"class":79},[52,56557,56537],{"class":53950},[52,56559,53957],{"class":79},[52,56561,56562],{"class":54,"line":144},[52,56563,56564],{"class":79},"const bt = document.querySelector('button')\n",[52,56566,56567],{"class":54,"line":153},[52,56568,56569],{"class":79},"bt.disabled = false\n",[1696,56571,56572],{"start":66},[32,56573,56574],{},"自定义属性",[14,56576,56577],{},[4509,56578],{"alt":47,"src":56579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[42,56581,56583],{"className":55717,"code":56582,"language":55719,"meta":47,"style":47},"\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",[49,56584,56585,56593,56621,56640,56659,56678,56697,56705,56710,56715,56720,56725,56733],{"__ignoreMap":47},[52,56586,56587,56589,56591],{"class":54,"line":55},[52,56588,698],{"class":79},[52,56590,54450],{"class":53950},[52,56592,53957],{"class":79},[52,56594,56595,56597,56599,56602,56604,56606,56609,56611,56614,56617,56619],{"class":54,"line":66},[52,56596,54794],{"class":79},[52,56598,54261],{"class":53950},[52,56600,56601],{"class":75}," data-id",[52,56603,292],{"class":79},[52,56605,419],{"class":62},[52,56607,56608],{"class":75}," data-spm",[52,56610,292],{"class":79},[52,56612,56613],{"class":62},"\"我不知道\"",[52,56615,56616],{"class":79},">1\u003C\u002F",[52,56618,54261],{"class":53950},[52,56620,53957],{"class":79},[52,56622,56623,56625,56627,56629,56631,56633,56636,56638],{"class":54,"line":83},[52,56624,54794],{"class":79},[52,56626,54261],{"class":53950},[52,56628,56601],{"class":75},[52,56630,292],{"class":79},[52,56632,637],{"class":62},[52,56634,56635],{"class":79},">2\u003C\u002F",[52,56637,54261],{"class":53950},[52,56639,53957],{"class":79},[52,56641,56642,56644,56646,56648,56650,56652,56655,56657],{"class":54,"line":91},[52,56643,54794],{"class":79},[52,56645,54261],{"class":53950},[52,56647,56601],{"class":75},[52,56649,292],{"class":79},[52,56651,6693],{"class":62},[52,56653,56654],{"class":79},">3\u003C\u002F",[52,56656,54261],{"class":53950},[52,56658,53957],{"class":79},[52,56660,56661,56663,56665,56667,56669,56671,56674,56676],{"class":54,"line":98},[52,56662,54794],{"class":79},[52,56664,54261],{"class":53950},[52,56666,56601],{"class":75},[52,56668,292],{"class":79},[52,56670,6706],{"class":62},[52,56672,56673],{"class":79},">4\u003C\u002F",[52,56675,54261],{"class":53950},[52,56677,53957],{"class":79},[52,56679,56680,56682,56684,56686,56688,56690,56693,56695],{"class":54,"line":107},[52,56681,54794],{"class":79},[52,56683,54261],{"class":53950},[52,56685,56601],{"class":75},[52,56687,292],{"class":79},[52,56689,6727],{"class":62},[52,56691,56692],{"class":79},">5\u003C\u002F",[52,56694,54261],{"class":53950},[52,56696,53957],{"class":79},[52,56698,56699,56701,56703],{"class":54,"line":113},[52,56700,54794],{"class":79},[52,56702,54463],{"class":53950},[52,56704,53957],{"class":79},[52,56706,56707],{"class":54,"line":119},[52,56708,56709],{"class":79},"    const one = document.querySelector('div')\n",[52,56711,56712],{"class":54,"line":126},[52,56713,56714],{"class":79},"    console.log(one.dataset)\n",[52,56716,56717],{"class":54,"line":132},[52,56718,56719],{"class":79},"    console.log(one.dataset.id)\n",[52,56721,56722],{"class":54,"line":138},[52,56723,56724],{"class":79},"    console.log(one.dataset.spm)\n",[52,56726,56727,56729,56731],{"class":54,"line":144},[52,56728,55067],{"class":79},[52,56730,54463],{"class":53950},[52,56732,53957],{"class":79},[52,56734,56735,56737,56739],{"class":54,"line":153},[52,56736,54435],{"class":79},[52,56738,54450],{"class":53950},[52,56740,53957],{"class":79},[14,56742,56743],{},[4509,56744],{"alt":47,"src":56745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,56747,56748],{},"document.querySelector选择的是第一个对象（元素）",[3195,56750,56752],{"id":56751},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,56754,56755],{},[4509,56756],{"alt":47,"src":56757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,56759,56760],{},[4509,56761],{"alt":47,"src":56762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,56764,56765],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[54463,56767,56768],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,56770,56771],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[54463,56773,56774],{},"\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,56776,56777],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,56779,56780],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,56782,56783],{},"单位为毫秒！！！",[14,56785,56786],{},"可以搭配匿名函数来用！！！",[14,56788,56789],{},"setInterval(function () {",[14,56791,56792],{},"alert('两秒执行一次')",[14,56794,56795],{},"}, 2000)",[14,56797,56798],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,56800,56801],{},"function fn() {",[14,56803,56804],{},"document.write(1)",[14,56806,4132],{},[14,56808,56809],{},"setInterval(fn, 1000)",[14,56811,56812],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,56814,56815],{},"setInterval('fn()', 1000)",[14,56817,56818],{},[4509,56819],{"alt":47,"src":56820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[24646,56822,56824],{"id":56823},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[42,56826,56828],{"className":53283,"code":56827,"language":53285,"meta":47,"style":47},"\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",[49,56829,56830,56840,56854,56858,56866,56880,56900,56912,56920,56924,56932,56969,56974,56979,56984,56992,57000,57022,57030,57035,57057,57062,57067,57078,57083,57103,57111,57126,57141,57152,57157,57167,57177,57181,57190,57194,57202,57210,57214],{"__ignoreMap":47},[52,56831,56832,56834,56836,56838],{"class":54,"line":55},[52,56833,53947],{"class":79},[52,56835,53951],{"class":53950},[52,56837,53954],{"class":75},[52,56839,53957],{"class":79},[52,56841,56842,56844,56846,56848,56850,56852],{"class":54,"line":66},[52,56843,698],{"class":79},[52,56845,53285],{"class":53950},[52,56847,53966],{"class":75},[52,56849,292],{"class":79},[52,56851,53971],{"class":62},[52,56853,53957],{"class":79},[52,56855,56856],{"class":54,"line":83},[52,56857,123],{"emptyLinePlaceholder":122},[52,56859,56860,56862,56864],{"class":54,"line":91},[52,56861,698],{"class":79},[52,56863,53984],{"class":53950},[52,56865,53957],{"class":79},[52,56867,56868,56870,56872,56874,56876,56878],{"class":54,"line":98},[52,56869,54794],{"class":79},[52,56871,53994],{"class":53950},[52,56873,53997],{"class":75},[52,56875,292],{"class":79},[52,56877,54002],{"class":62},[52,56879,53957],{"class":79},[52,56881,56882,56884,56886,56888,56890,56892,56894,56896,56898],{"class":54,"line":107},[52,56883,54794],{"class":79},[52,56885,53994],{"class":53950},[52,56887,17568],{"class":75},[52,56889,292],{"class":79},[52,56891,54041],{"class":62},[52,56893,54021],{"class":75},[52,56895,292],{"class":79},[52,56897,54048],{"class":62},[52,56899,53957],{"class":79},[52,56901,56902,56904,56906,56908,56910],{"class":54,"line":113},[52,56903,54794],{"class":79},[52,56905,54057],{"class":53950},[52,56907,54060],{"class":79},[52,56909,54057],{"class":53950},[52,56911,53957],{"class":79},[52,56913,56914,56916,56918],{"class":54,"line":119},[52,56915,54435],{"class":79},[52,56917,53984],{"class":53950},[52,56919,53957],{"class":79},[52,56921,56922],{"class":54,"line":126},[52,56923,123],{"emptyLinePlaceholder":122},[52,56925,56926,56928,56930],{"class":54,"line":132},[52,56927,698],{"class":79},[52,56929,54450],{"class":53950},[52,56931,53957],{"class":79},[52,56933,56934,56936,56939,56941,56943,56945,56947,56949,56951,56954,56956,56959,56962,56964,56967],{"class":54,"line":138},[52,56935,54794],{"class":79},[52,56937,56938],{"class":53950},"textarea",[52,56940,17568],{"class":75},[52,56942,292],{"class":79},[52,56944,10607],{"class":62},[52,56946,17607],{"class":75},[52,56948,292],{"class":79},[52,56950,10607],{"class":62},[52,56952,56953],{"class":75}," cols",[52,56955,292],{"class":79},[52,56957,56958],{"class":62},"\"30\"",[52,56960,56961],{"class":75}," rows",[52,56963,292],{"class":79},[52,56965,56966],{"class":62},"\"10\"",[52,56968,53957],{"class":79},[52,56970,56971],{"class":54,"line":144},[52,56972,56973],{"class":79},"        用户注册协议\n",[52,56975,56976],{"class":54,"line":153},[52,56977,56978],{"class":79},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[52,56980,56981],{"class":54,"line":159},[52,56982,56983],{"class":79},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[52,56985,56986,56988,56990],{"class":54,"line":167},[52,56987,54426],{"class":79},[52,56989,56938],{"class":53950},[52,56991,53957],{"class":79},[52,56993,56994,56996,56998],{"class":54,"line":173},[52,56995,54794],{"class":79},[52,56997,56366],{"class":53950},[52,56999,53957],{"class":79},[52,57001,57002,57004,57006,57008,57010,57013,57015,57018,57020],{"class":54,"line":181},[52,57003,54794],{"class":79},[52,57005,56537],{"class":53950},[52,57007,56136],{"class":75},[52,57009,292],{"class":79},[52,57011,57012],{"class":62},"\"btn\"",[52,57014,56540],{"class":75},[52,57016,57017],{"class":79},">我已经阅读用户协议(5)\u003C\u002F",[52,57019,56537],{"class":53950},[52,57021,53957],{"class":79},[52,57023,57024,57026,57028],{"class":54,"line":186},[52,57025,54794],{"class":79},[52,57027,54463],{"class":53950},[52,57029,53957],{"class":79},[52,57031,57032],{"class":54,"line":191},[52,57033,57034],{"class":94},"    \u002F\u002F 1. 获取元素\n",[52,57036,57037,57039,57042,57044,57047,57050,57052,57055],{"class":54,"line":196},[52,57038,13869],{"class":58},[52,57040,57041],{"class":308}," btn",[52,57043,16212],{"class":58},[52,57045,57046],{"class":79}," document.",[52,57048,57049],{"class":75},"querySelector",[52,57051,1216],{"class":79},[52,57053,57054],{"class":62},"'.btn'",[52,57056,708],{"class":79},[52,57058,57059],{"class":54,"line":201},[52,57060,57061],{"class":94},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[52,57063,57064],{"class":54,"line":206},[52,57065,57066],{"class":94},"    \u002F\u002F 2. 倒计时\n",[52,57068,57069,57071,57073,57075],{"class":54,"line":211},[52,57070,54869],{"class":58},[52,57072,1871],{"class":79},[52,57074,292],{"class":58},[52,57076,57077],{"class":308}," 5\n",[52,57079,57080],{"class":54,"line":218},[52,57081,57082],{"class":94},"    \u002F\u002F 2.1 开启定时器\n",[52,57084,57085,57087,57090,57092,57095,57097,57100],{"class":54,"line":223},[52,57086,54869],{"class":58},[52,57088,57089],{"class":79}," n ",[52,57091,292],{"class":58},[52,57093,57094],{"class":75}," setInterval",[52,57096,1216],{"class":79},[52,57098,57099],{"class":58},"function",[52,57101,57102],{"class":79}," () {\n",[52,57104,57105,57108],{"class":54,"line":230},[52,57106,57107],{"class":79},"      i",[52,57109,57110],{"class":58},"--\n",[52,57112,57113,57116,57118,57121,57123],{"class":54,"line":239},[52,57114,57115],{"class":79},"      btn.innerHTML ",[52,57117,292],{"class":58},[52,57119,57120],{"class":62}," `我已经阅读用户协议(${",[52,57122,3644],{"class":79},[52,57124,57125],{"class":62},"})`\n",[52,57127,57128,57131,57134,57137,57139],{"class":54,"line":251},[52,57129,57130],{"class":58},"      if",[52,57132,57133],{"class":79}," (i ",[52,57135,57136],{"class":58},"===",[52,57138,1444],{"class":308},[52,57140,15090],{"class":79},[52,57142,57143,57146,57149],{"class":54,"line":256},[52,57144,57145],{"class":75},"        clearInterval",[52,57147,57148],{"class":79},"(n)  ",[52,57150,57151],{"class":94},"\u002F\u002F 关闭定时器\n",[52,57153,57154],{"class":54,"line":262},[52,57155,57156],{"class":94},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[52,57158,57159,57162,57164],{"class":54,"line":268},[52,57160,57161],{"class":79},"        btn.disabled ",[52,57163,292],{"class":58},[52,57165,57166],{"class":308}," false\n",[52,57168,57169,57172,57174],{"class":54,"line":280},[52,57170,57171],{"class":79},"        btn.innerHTML ",[52,57173,292],{"class":58},[52,57175,57176],{"class":62}," '同意'\n",[52,57178,57179],{"class":54,"line":286},[52,57180,55048],{"class":79},[52,57182,57183,57186,57188],{"class":54,"line":300},[52,57184,57185],{"class":79},"    }, ",[52,57187,9373],{"class":308},[52,57189,708],{"class":79},[52,57191,57192],{"class":54,"line":314},[52,57193,123],{"emptyLinePlaceholder":122},[52,57195,57196,57198,57200],{"class":54,"line":327},[52,57197,55067],{"class":79},[52,57199,54463],{"class":53950},[52,57201,53957],{"class":79},[52,57203,57204,57206,57208],{"class":54,"line":333},[52,57205,54435],{"class":79},[52,57207,54450],{"class":53950},[52,57209,53957],{"class":79},[52,57211,57212],{"class":54,"line":360},[52,57213,123],{"emptyLinePlaceholder":122},[52,57215,57216,57218,57220],{"class":54,"line":365},[52,57217,54435],{"class":79},[52,57219,53285],{"class":53950},[52,57221,53957],{"class":79},[14,57223,57224],{},"不要一直想着用死循环,避免死循环",[14,57226,57227,57230],{},[49,57228,57229],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[24646,57232,57234],{"id":57233},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[1696,57236,57237],{},[32,57238,57239],{},"法1",[42,57241,57243],{"className":53283,"code":57242,"language":53285,"meta":47,"style":47},"\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",[49,57244,57245,57255,57269,57273,57281,57295,57315,57327,57335,57341,57352,57363,57367,57371,57378,57390,57394,57398,57405,57417,57431,57444,57458,57462,57466,57473,57484,57495,57506,57518,57530,57542,57546,57550,57558,57568,57581,57593,57606,57610,57614,57621,57631,57643,57655,57666,57677,57687,57699,57711,57715,57719,57728,57740,57752,57780,57793,57797,57801,57808,57819,57823,57831,57839,57843,57851,57865,57880,57904,57912,57927,57940,57948,57969,57981,57993,58005,58017,58029,58041,58053,58062,58070,58078,58086,58098,58121,58140,58159,58178,58197,58216,58235,58255,58259,58279,58298,58318,58339,58350,58367,58377,58387,58397,58402,58407,58412,58417,58442,58455,58459,58482,58486,58494,58502,58510,58514],{"__ignoreMap":47},[52,57246,57247,57249,57251,57253],{"class":54,"line":55},[52,57248,53947],{"class":79},[52,57250,53951],{"class":53950},[52,57252,53954],{"class":75},[52,57254,53957],{"class":79},[52,57256,57257,57259,57261,57263,57265,57267],{"class":54,"line":66},[52,57258,698],{"class":79},[52,57260,53285],{"class":53950},[52,57262,53966],{"class":75},[52,57264,292],{"class":79},[52,57266,53971],{"class":62},[52,57268,53957],{"class":79},[52,57270,57271],{"class":54,"line":83},[52,57272,123],{"emptyLinePlaceholder":122},[52,57274,57275,57277,57279],{"class":54,"line":91},[52,57276,698],{"class":79},[52,57278,53984],{"class":53950},[52,57280,53957],{"class":79},[52,57282,57283,57285,57287,57289,57291,57293],{"class":54,"line":98},[52,57284,54794],{"class":79},[52,57286,53994],{"class":53950},[52,57288,53997],{"class":75},[52,57290,292],{"class":79},[52,57292,54002],{"class":62},[52,57294,53957],{"class":79},[52,57296,57297,57299,57301,57303,57305,57307,57309,57311,57313],{"class":54,"line":107},[52,57298,54794],{"class":79},[52,57300,53994],{"class":53950},[52,57302,17568],{"class":75},[52,57304,292],{"class":79},[52,57306,54041],{"class":62},[52,57308,54021],{"class":75},[52,57310,292],{"class":79},[52,57312,54048],{"class":62},[52,57314,53957],{"class":79},[52,57316,57317,57319,57321,57323,57325],{"class":54,"line":113},[52,57318,54794],{"class":79},[52,57320,54057],{"class":53950},[52,57322,54060],{"class":79},[52,57324,54057],{"class":53950},[52,57326,53957],{"class":79},[52,57328,57329,57331,57333],{"class":54,"line":119},[52,57330,54794],{"class":79},[52,57332,3141],{"class":53950},[52,57334,53957],{"class":79},[52,57336,57337,57339],{"class":54,"line":126},[52,57338,9366],{"class":53950},[52,57340,18220],{"class":79},[52,57342,57343,57346,57348,57350],{"class":54,"line":132},[52,57344,57345],{"class":308},"      padding",[52,57347,54087],{"class":79},[52,57349,692],{"class":308},[52,57351,80],{"class":79},[52,57353,57354,57357,57359,57361],{"class":54,"line":138},[52,57355,57356],{"class":308},"      margin",[52,57358,54087],{"class":79},[52,57360,692],{"class":308},[52,57362,80],{"class":79},[52,57364,57365],{"class":54,"line":144},[52,57366,616],{"class":79},[52,57368,57369],{"class":54,"line":153},[52,57370,123],{"emptyLinePlaceholder":122},[52,57372,57373,57376],{"class":54,"line":159},[52,57374,57375],{"class":53950},"    li",[52,57377,18220],{"class":79},[52,57379,57380,57383,57385,57388],{"class":54,"line":167},[52,57381,57382],{"class":308},"      list-style",[52,57384,54087],{"class":79},[52,57386,57387],{"class":308},"none",[52,57389,80],{"class":79},[52,57391,57392],{"class":54,"line":173},[52,57393,616],{"class":79},[52,57395,57396],{"class":54,"line":181},[52,57397,123],{"emptyLinePlaceholder":122},[52,57399,57400,57403],{"class":54,"line":186},[52,57401,57402],{"class":75},"    .box",[52,57404,18220],{"class":79},[52,57406,57407,57410,57412,57415],{"class":54,"line":191},[52,57408,57409],{"class":308},"      position",[52,57411,54087],{"class":79},[52,57413,57414],{"class":308},"relative",[52,57416,80],{"class":79},[52,57418,57419,57422,57424,57427,57429],{"class":54,"line":196},[52,57420,57421],{"class":308},"      width",[52,57423,54087],{"class":79},[52,57425,57426],{"class":308},"976",[52,57428,54142],{"class":58},[52,57430,80],{"class":79},[52,57432,57433,57436,57438,57440,57442],{"class":54,"line":201},[52,57434,57435],{"class":308},"      height",[52,57437,54087],{"class":79},[52,57439,4586],{"class":308},[52,57441,54142],{"class":58},[52,57443,80],{"class":79},[52,57445,57446,57448,57450,57452,57454,57456],{"class":54,"line":206},[52,57447,57356],{"class":308},[52,57449,54087],{"class":79},[52,57451,591],{"class":308},[52,57453,54142],{"class":58},[52,57455,54206],{"class":308},[52,57457,80],{"class":79},[52,57459,57460],{"class":54,"line":211},[52,57461,616],{"class":79},[52,57463,57464],{"class":54,"line":218},[52,57465,123],{"emptyLinePlaceholder":122},[52,57467,57468,57471],{"class":54,"line":223},[52,57469,57470],{"class":75},"    .slider-footer",[52,57472,18220],{"class":79},[52,57474,57475,57477,57479,57482],{"class":54,"line":230},[52,57476,57409],{"class":308},[52,57478,54087],{"class":79},[52,57480,57481],{"class":308},"absolute",[52,57483,80],{"class":79},[52,57485,57486,57489,57491,57493],{"class":54,"line":239},[52,57487,57488],{"class":308},"      left",[52,57490,54087],{"class":79},[52,57492,692],{"class":308},[52,57494,80],{"class":79},[52,57496,57497,57500,57502,57504],{"class":54,"line":251},[52,57498,57499],{"class":308},"      bottom",[52,57501,54087],{"class":79},[52,57503,692],{"class":308},[52,57505,80],{"class":79},[52,57507,57508,57510,57512,57514,57516],{"class":54,"line":256},[52,57509,57421],{"class":308},[52,57511,54087],{"class":79},[52,57513,591],{"class":308},[52,57515,1998],{"class":58},[52,57517,80],{"class":79},[52,57519,57520,57522,57524,57526,57528],{"class":54,"line":262},[52,57521,57435],{"class":308},[52,57523,54087],{"class":79},[52,57525,605],{"class":308},[52,57527,1998],{"class":58},[52,57529,80],{"class":79},[52,57531,57532,57535,57537,57540],{"class":54,"line":268},[52,57533,57534],{"class":308},"      background-color",[52,57536,54087],{"class":79},[52,57538,57539],{"class":308},"skyblue",[52,57541,80],{"class":79},[52,57543,57544],{"class":54,"line":280},[52,57545,616],{"class":79},[52,57547,57548],{"class":54,"line":286},[52,57549,123],{"emptyLinePlaceholder":122},[52,57551,57552,57554,57556],{"class":54,"line":300},[52,57553,57470],{"class":75},[52,57555,9785],{"class":53950},[52,57557,18220],{"class":79},[52,57559,57560,57562,57564,57566],{"class":54,"line":314},[52,57561,57409],{"class":308},[52,57563,54087],{"class":79},[52,57565,57481],{"class":308},[52,57567,80],{"class":79},[52,57569,57570,57573,57575,57577,57579],{"class":54,"line":327},[52,57571,57572],{"class":308},"      font-size",[52,57574,54087],{"class":79},[52,57576,4090],{"class":308},[52,57578,54142],{"class":58},[52,57580,80],{"class":79},[52,57582,57583,57585,57587,57589,57591],{"class":54,"line":333},[52,57584,57488],{"class":308},[52,57586,54087],{"class":79},[52,57588,444],{"class":308},[52,57590,54142],{"class":58},[52,57592,80],{"class":79},[52,57594,57595,57598,57600,57602,57604],{"class":54,"line":360},[52,57596,57597],{"class":308},"      top",[52,57599,54087],{"class":79},[52,57601,1805],{"class":308},[52,57603,54142],{"class":58},[52,57605,80],{"class":79},[52,57607,57608],{"class":54,"line":365},[52,57609,616],{"class":79},[52,57611,57612],{"class":54,"line":371},[52,57613,123],{"emptyLinePlaceholder":122},[52,57615,57616,57619],{"class":54,"line":400},[52,57617,57618],{"class":53950},"    ul",[52,57620,18220],{"class":79},[52,57622,57623,57625,57627,57629],{"class":54,"line":405},[52,57624,57409],{"class":308},[52,57626,54087],{"class":79},[52,57628,57481],{"class":308},[52,57630,80],{"class":79},[52,57632,57633,57635,57637,57639,57641],{"class":54,"line":411},[52,57634,57597],{"class":308},[52,57636,54087],{"class":79},[52,57638,3971],{"class":308},[52,57640,54142],{"class":58},[52,57642,80],{"class":79},[52,57644,57645,57647,57649,57651,57653],{"class":54,"line":424},[52,57646,57488],{"class":308},[52,57648,54087],{"class":79},[52,57650,444],{"class":308},[52,57652,54142],{"class":58},[52,57654,80],{"class":79},[52,57656,57657,57660,57662,57664],{"class":54,"line":436},[52,57658,57659],{"class":308},"      display",[52,57661,54087],{"class":79},[52,57663,54127],{"class":308},[52,57665,80],{"class":79},[52,57667,57668,57671,57673,57675],{"class":54,"line":449},[52,57669,57670],{"class":308},"      justify-content",[52,57672,54087],{"class":79},[52,57674,54318],{"class":308},[52,57676,80],{"class":79},[52,57678,57679,57681,57683,57685],{"class":54,"line":2160},[52,57680,57409],{"class":308},[52,57682,54087],{"class":79},[52,57684,57481],{"class":308},[52,57686,80],{"class":79},[52,57688,57689,57691,57693,57695,57697],{"class":54,"line":2186},[52,57690,57421],{"class":308},[52,57692,54087],{"class":79},[52,57694,6970],{"class":308},[52,57696,54142],{"class":58},[52,57698,80],{"class":79},[52,57700,57701,57703,57705,57707,57709],{"class":54,"line":2209},[52,57702,57435],{"class":308},[52,57704,54087],{"class":79},[52,57706,444],{"class":308},[52,57708,54142],{"class":58},[52,57710,80],{"class":79},[52,57712,57713],{"class":54,"line":2233},[52,57714,616],{"class":79},[52,57716,57717],{"class":54,"line":2238},[52,57718,123],{"emptyLinePlaceholder":122},[52,57720,57721,57723,57726],{"class":54,"line":2243},[52,57722,57618],{"class":53950},[52,57724,57725],{"class":53950}," li",[52,57727,18220],{"class":79},[52,57729,57730,57732,57734,57736,57738],{"class":54,"line":2248},[52,57731,57421],{"class":308},[52,57733,54087],{"class":79},[52,57735,444],{"class":308},[52,57737,54142],{"class":58},[52,57739,80],{"class":79},[52,57741,57742,57744,57746,57748,57750],{"class":54,"line":2257},[52,57743,57435],{"class":308},[52,57745,54087],{"class":79},[52,57747,444],{"class":308},[52,57749,54142],{"class":58},[52,57751,80],{"class":79},[52,57753,57754,57756,57758,57761,57763,57765,57767,57769,57771,57773,57775,57778],{"class":54,"line":2262},[52,57755,57534],{"class":308},[52,57757,54087],{"class":79},[52,57759,57760],{"class":308},"rgba",[52,57762,1216],{"class":79},[52,57764,692],{"class":308},[52,57766,15083],{"class":79},[52,57768,692],{"class":308},[52,57770,15083],{"class":79},[52,57772,692],{"class":308},[52,57774,15083],{"class":79},[52,57776,57777],{"class":308},".4",[52,57779,2737],{"class":79},[52,57781,57782,57785,57787,57789,57791],{"class":54,"line":2268},[52,57783,57784],{"class":308},"      border-radius",[52,57786,54087],{"class":79},[52,57788,3649],{"class":308},[52,57790,54142],{"class":58},[52,57792,80],{"class":79},[52,57794,57795],{"class":54,"line":2297},[52,57796,616],{"class":79},[52,57798,57799],{"class":54,"line":2303},[52,57800,123],{"emptyLinePlaceholder":122},[52,57802,57803,57806],{"class":54,"line":2318},[52,57804,57805],{"class":75},"    .activate",[52,57807,18220],{"class":79},[52,57809,57810,57812,57814,57817],{"class":54,"line":2324},[52,57811,57534],{"class":308},[52,57813,54087],{"class":79},[52,57815,57816],{"class":308},"#f7f7f7",[52,57818,80],{"class":79},[52,57820,57821],{"class":54,"line":2353},[52,57822,616],{"class":79},[52,57824,57825,57827,57829],{"class":54,"line":2362},[52,57826,55067],{"class":79},[52,57828,3141],{"class":53950},[52,57830,53957],{"class":79},[52,57832,57833,57835,57837],{"class":54,"line":2368},[52,57834,54435],{"class":79},[52,57836,53984],{"class":53950},[52,57838,53957],{"class":79},[52,57840,57841],{"class":54,"line":2376},[52,57842,123],{"emptyLinePlaceholder":122},[52,57844,57845,57847,57849],{"class":54,"line":2381},[52,57846,698],{"class":79},[52,57848,54450],{"class":53950},[52,57850,53957],{"class":79},[52,57852,57853,57855,57857,57859,57861,57863],{"class":54,"line":19252},[52,57854,54794],{"class":79},[52,57856,54261],{"class":53950},[52,57858,56136],{"class":75},[52,57860,292],{"class":79},[52,57862,56141],{"class":62},[52,57864,53957],{"class":79},[52,57866,57867,57869,57871,57873,57875,57878],{"class":54,"line":19258},[52,57868,53991],{"class":79},[52,57870,54261],{"class":53950},[52,57872,56136],{"class":75},[52,57874,292],{"class":79},[52,57876,57877],{"class":62},"\"slider-wrapper\"",[52,57879,53957],{"class":79},[52,57881,57882,57885,57887,57890,57892,57895,57898,57900,57902],{"class":54,"line":19281},[52,57883,57884],{"class":79},"      \u003C",[52,57886,4509],{"class":53950},[52,57888,57889],{"class":75}," src",[52,57891,292],{"class":79},[52,57893,57894],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[52,57896,57897],{"class":75}," alt",[52,57899,292],{"class":79},[52,57901,10607],{"class":62},[52,57903,53957],{"class":79},[52,57905,57906,57908,57910],{"class":54,"line":19287},[52,57907,54426],{"class":79},[52,57909,54261],{"class":53950},[52,57911,53957],{"class":79},[52,57913,57914,57916,57918,57920,57922,57925],{"class":54,"line":19310},[52,57915,53991],{"class":79},[52,57917,54261],{"class":53950},[52,57919,56136],{"class":75},[52,57921,292],{"class":79},[52,57923,57924],{"class":62},"\"slider-footer\"",[52,57926,53957],{"class":79},[52,57928,57929,57931,57933,57936,57938],{"class":54,"line":19324},[52,57930,57884],{"class":79},[52,57932,14],{"class":53950},[52,57934,57935],{"class":79},">对人类来说会不会太超前了?\u003C\u002F",[52,57937,14],{"class":53950},[52,57939,53957],{"class":79},[52,57941,57942,57944,57946],{"class":54,"line":19344},[52,57943,57884],{"class":79},[52,57945,29],{"class":53950},[52,57947,53957],{"class":79},[52,57949,57950,57953,57955,57957,57959,57962,57965,57967],{"class":54,"line":19350},[52,57951,57952],{"class":79},"        \u003C",[52,57954,32],{"class":53950},[52,57956,56136],{"class":75},[52,57958,292],{"class":79},[52,57960,57961],{"class":62},"\"activate\"",[52,57963,57964],{"class":79},">\u003C\u002F",[52,57966,32],{"class":53950},[52,57968,53957],{"class":79},[52,57970,57971,57973,57975,57977,57979],{"class":54,"line":19361},[52,57972,57952],{"class":79},[52,57974,32],{"class":53950},[52,57976,57964],{"class":79},[52,57978,32],{"class":53950},[52,57980,53957],{"class":79},[52,57982,57983,57985,57987,57989,57991],{"class":54,"line":19384},[52,57984,57952],{"class":79},[52,57986,32],{"class":53950},[52,57988,57964],{"class":79},[52,57990,32],{"class":53950},[52,57992,53957],{"class":79},[52,57994,57995,57997,57999,58001,58003],{"class":54,"line":19406},[52,57996,57952],{"class":79},[52,57998,32],{"class":53950},[52,58000,57964],{"class":79},[52,58002,32],{"class":53950},[52,58004,53957],{"class":79},[52,58006,58007,58009,58011,58013,58015],{"class":54,"line":19411},[52,58008,57952],{"class":79},[52,58010,32],{"class":53950},[52,58012,57964],{"class":79},[52,58014,32],{"class":53950},[52,58016,53957],{"class":79},[52,58018,58019,58021,58023,58025,58027],{"class":54,"line":19417},[52,58020,57952],{"class":79},[52,58022,32],{"class":53950},[52,58024,57964],{"class":79},[52,58026,32],{"class":53950},[52,58028,53957],{"class":79},[52,58030,58031,58033,58035,58037,58039],{"class":54,"line":19431},[52,58032,57952],{"class":79},[52,58034,32],{"class":53950},[52,58036,57964],{"class":79},[52,58038,32],{"class":53950},[52,58040,53957],{"class":79},[52,58042,58043,58045,58047,58049,58051],{"class":54,"line":19444},[52,58044,57952],{"class":79},[52,58046,32],{"class":53950},[52,58048,57964],{"class":79},[52,58050,32],{"class":53950},[52,58052,53957],{"class":79},[52,58054,58055,58058,58060],{"class":54,"line":19449},[52,58056,58057],{"class":79},"      \u003C\u002F",[52,58059,29],{"class":53950},[52,58061,53957],{"class":79},[52,58063,58064,58066,58068],{"class":54,"line":19463},[52,58065,54426],{"class":79},[52,58067,54261],{"class":53950},[52,58069,53957],{"class":79},[52,58071,58072,58074,58076],{"class":54,"line":19468},[52,58073,55067],{"class":79},[52,58075,54261],{"class":53950},[52,58077,53957],{"class":79},[52,58079,58080,58082,58084],{"class":54,"line":19474},[52,58081,54794],{"class":79},[52,58083,54463],{"class":53950},[52,58085,53957],{"class":79},[52,58087,58088,58090,58093,58095],{"class":54,"line":19479},[52,58089,13869],{"class":58},[52,58091,58092],{"class":308}," arrImage",[52,58094,16212],{"class":58},[52,58096,58097],{"class":79}," [\n",[52,58099,58100,58103,58106,58109,58112,58115,58118],{"class":54,"line":19493},[52,58101,58102],{"class":79},"      { url: ",[52,58104,58105],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[52,58107,58108],{"class":79},", title: ",[52,58110,58111],{"class":62},"'对人类来说会不会太超前了?'",[52,58113,58114],{"class":79},", color: ",[52,58116,58117],{"class":62},"'rgba(100,67,68)'",[52,58119,58120],{"class":79}," },\n",[52,58122,58123,58125,58128,58130,58133,58135,58138],{"class":54,"line":19498},[52,58124,58102],{"class":79},[52,58126,58127],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[52,58129,58108],{"class":79},[52,58131,58132],{"class":62},"'开启剑与雪的黑暗传说!'",[52,58134,58114],{"class":79},[52,58136,58137],{"class":62},"'rgba(43,35,26)'",[52,58139,58120],{"class":79},[52,58141,58142,58144,58147,58149,58152,58154,58157],{"class":54,"line":19503},[52,58143,58102],{"class":79},[52,58145,58146],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[52,58148,58108],{"class":79},[52,58150,58151],{"class":62},"'真正的jo厨出现了!'",[52,58153,58114],{"class":79},[52,58155,58156],{"class":62},"'rgba(36,31,33)'",[52,58158,58120],{"class":79},[52,58160,58161,58163,58166,58168,58171,58173,58176],{"class":54,"line":19517},[52,58162,58102],{"class":79},[52,58164,58165],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[52,58167,58108],{"class":79},[52,58169,58170],{"class":62},"'李玉刚:让世界通过b站看到东方大国文化'",[52,58172,58114],{"class":79},[52,58174,58175],{"class":62},"'rgba(139,98,66)'",[52,58177,58120],{"class":79},[52,58179,58180,58182,58185,58187,58190,58192,58195],{"class":54,"line":19529},[52,58181,58102],{"class":79},[52,58183,58184],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[52,58186,58108],{"class":79},[52,58188,58189],{"class":62},"'快来分享你的寒假日常吧'",[52,58191,58114],{"class":79},[52,58193,58194],{"class":62},"'rgba(67,90,92)'",[52,58196,58120],{"class":79},[52,58198,58199,58201,58204,58206,58209,58211,58214],{"class":54,"line":19534},[52,58200,58102],{"class":79},[52,58202,58203],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[52,58205,58108],{"class":79},[52,58207,58208],{"class":62},"'哔哩哔哩小年YEAR'",[52,58210,58114],{"class":79},[52,58212,58213],{"class":62},"'rgba(166,131,143)'",[52,58215,58120],{"class":79},[52,58217,58218,58220,58223,58225,58228,58230,58233],{"class":54,"line":19547},[52,58219,58102],{"class":79},[52,58221,58222],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[52,58224,58108],{"class":79},[52,58226,58227],{"class":62},"'一站式解决你的电脑配置问题'",[52,58229,58114],{"class":79},[52,58231,58232],{"class":62},"'rgba(53,29,25)'",[52,58234,58120],{"class":79},[52,58236,58237,58239,58242,58244,58247,58249,58252],{"class":54,"line":19552},[52,58238,58102],{"class":79},[52,58240,58241],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[52,58243,58108],{"class":79},[52,58245,58246],{"class":62},"'谁不想和小猫咪贴贴呢?'",[52,58248,58114],{"class":79},[52,58250,58251],{"class":62},"'rgba(99,72,114)'",[52,58253,58254],{"class":79}," }\n",[52,58256,58257],{"class":54,"line":19557},[52,58258,55759],{"class":79},[52,58260,58261,58263,58266,58268,58270,58272,58274,58277],{"class":54,"line":19562},[52,58262,13869],{"class":58},[52,58264,58265],{"class":308}," img",[52,58267,16212],{"class":58},[52,58269,57046],{"class":79},[52,58271,57049],{"class":75},[52,58273,1216],{"class":79},[52,58275,58276],{"class":62},"'.slider-wrapper img'",[52,58278,708],{"class":79},[52,58280,58281,58283,58285,58287,58289,58291,58293,58296],{"class":54,"line":19575},[52,58282,13869],{"class":58},[52,58284,9785],{"class":308},[52,58286,16212],{"class":58},[52,58288,57046],{"class":79},[52,58290,57049],{"class":75},[52,58292,1216],{"class":79},[52,58294,58295],{"class":62},"'.slider-footer p'",[52,58297,708],{"class":79},[52,58299,58300,58302,58305,58307,58309,58311,58313,58316],{"class":54,"line":19580},[52,58301,13869],{"class":58},[52,58303,58304],{"class":308}," color",[52,58306,16212],{"class":58},[52,58308,57046],{"class":79},[52,58310,57049],{"class":75},[52,58312,1216],{"class":79},[52,58314,58315],{"class":62},"'.slider-footer'",[52,58317,708],{"class":79},[52,58319,58320,58322,58325,58327,58329,58332,58334,58337],{"class":54,"line":35283},[52,58321,13869],{"class":58},[52,58323,58324],{"class":308}," lis",[52,58326,16212],{"class":58},[52,58328,57046],{"class":79},[52,58330,58331],{"class":75},"querySelectorAll",[52,58333,1216],{"class":79},[52,58335,58336],{"class":62},"'.slider-footer ul li'",[52,58338,708],{"class":79},[52,58340,58341,58343,58345,58347],{"class":54,"line":35289},[52,58342,54869],{"class":58},[52,58344,1871],{"class":79},[52,58346,292],{"class":58},[52,58348,58349],{"class":308}," 1\n",[52,58351,58352,58354,58357,58359,58361,58363,58365],{"class":54,"line":35295},[52,58353,54869],{"class":58},[52,58355,58356],{"class":79}," timer ",[52,58358,292],{"class":58},[52,58360,57094],{"class":75},[52,58362,1216],{"class":79},[52,58364,57099],{"class":58},[52,58366,57102],{"class":79},[52,58368,58369,58372,58374],{"class":54,"line":35301},[52,58370,58371],{"class":79},"      img.src ",[52,58373,292],{"class":58},[52,58375,58376],{"class":79}," arrImage[i].url\n",[52,58378,58379,58382,58384],{"class":54,"line":35307},[52,58380,58381],{"class":79},"      p.innerHTML ",[52,58383,292],{"class":58},[52,58385,58386],{"class":79}," arrImage[i].title\n",[52,58388,58389,58392,58394],{"class":54,"line":35318},[52,58390,58391],{"class":79},"      color.style.backgroundColor ",[52,58393,292],{"class":58},[52,58395,58396],{"class":79}," arrImage[i].color\n",[52,58398,58399],{"class":54,"line":35324},[52,58400,58401],{"class":94},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[52,58403,58404],{"class":54,"line":35344},[52,58405,58406],{"class":94},"      \u002F\u002F li.classList.add('activate')\n",[52,58408,58409],{"class":54,"line":35350},[52,58410,58411],{"class":94},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[52,58413,58414],{"class":54,"line":35361},[52,58415,58416],{"class":94},"      \u002F\u002F lis[i].classList.remove('activate')\n",[52,58418,58419,58422,58424,58426,58429,58432,58435,58437,58440],{"class":54,"line":35367},[52,58420,58421],{"class":79},"      document.",[52,58423,57049],{"class":75},[52,58425,1216],{"class":79},[52,58427,58428],{"class":62},"'.activate'",[52,58430,58431],{"class":79},")?.classList.",[52,58433,58434],{"class":75},"toggle",[52,58436,1216],{"class":79},[52,58438,58439],{"class":62},"'activate'",[52,58441,708],{"class":79},[52,58443,58444,58447,58449,58451,58453],{"class":54,"line":35373},[52,58445,58446],{"class":79},"      lis[i].classList.",[52,58448,8300],{"class":75},[52,58450,1216],{"class":79},[52,58452,58439],{"class":62},[52,58454,708],{"class":79},[52,58456,58457],{"class":54,"line":35379},[52,58458,123],{"emptyLinePlaceholder":122},[52,58460,58461,58464,58466,58468,58470,58472,58474,58476,58479],{"class":54,"line":35385},[52,58462,58463],{"class":79},"      i ",[52,58465,292],{"class":58},[52,58467,57133],{"class":79},[52,58469,2004],{"class":58},[52,58471,27768],{"class":308},[52,58473,16362],{"class":79},[52,58475,1998],{"class":58},[52,58477,58478],{"class":79}," arrImage.",[52,58480,58481],{"class":308},"length\n",[52,58483,58484],{"class":54,"line":35391},[52,58485,123],{"emptyLinePlaceholder":122},[52,58487,58488,58490,58492],{"class":54,"line":35397},[52,58489,57185],{"class":79},[52,58491,9373],{"class":308},[52,58493,708],{"class":79},[52,58495,58496,58498,58500],{"class":54,"line":35403},[52,58497,55067],{"class":79},[52,58499,54463],{"class":53950},[52,58501,53957],{"class":79},[52,58503,58504,58506,58508],{"class":54,"line":35423},[52,58505,54435],{"class":79},[52,58507,54450],{"class":53950},[52,58509,53957],{"class":79},[52,58511,58512],{"class":54,"line":35429},[52,58513,123],{"emptyLinePlaceholder":122},[52,58515,58516,58518,58520],{"class":54,"line":35445},[52,58517,54435],{"class":79},[52,58519,53285],{"class":53950},[52,58521,53957],{"class":79},[14,58523,58524],{},[4509,58525],{"alt":47,"src":58526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,58528,58529],{},"?.就是短路保护,确保输出正常进行",[14,58531,58532],{},"不要忘记取余%,有时候可以用",[14,58534,58535],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[1696,58537,58538],{"start":66},[32,58539,58540],{},"法2",[42,58542,58544],{"className":53283,"code":58543,"language":53285,"meta":47,"style":47},"\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",[49,58545,58546,58556,58570,58574,58582,58596,58616,58628,58636,58642,58652,58662,58666,58670,58676,58686,58690,58694,58700,58710,58722,58734,58748,58752,58756,58762,58772,58782,58792,58804,58816,58826,58830,58834,58842,58852,58864,58876,58888,58892,58896,58902,58912,58924,58936,58946,58956,58966,58978,58990,58994,58998,59006,59018,59030,59056,59068,59072,59076,59082,59092,59096,59104,59112,59116,59124,59138,59152,59172,59180,59194,59206,59214,59232,59244,59256,59268,59280,59292,59304,59316,59324,59332,59340,59348,59359,59375,59391,59407,59423,59439,59455,59471,59487,59491,59496,59514,59532,59542,59547,59552,59563,59569,59584,59593,59597,59602,59611,59616,59625,59630,59635,59640,59663,59693,59697,59705,59709,59717,59725,59729],{"__ignoreMap":47},[52,58547,58548,58550,58552,58554],{"class":54,"line":55},[52,58549,53947],{"class":79},[52,58551,53951],{"class":53950},[52,58553,53954],{"class":75},[52,58555,53957],{"class":79},[52,58557,58558,58560,58562,58564,58566,58568],{"class":54,"line":66},[52,58559,698],{"class":79},[52,58561,53285],{"class":53950},[52,58563,53966],{"class":75},[52,58565,292],{"class":79},[52,58567,53971],{"class":62},[52,58569,53957],{"class":79},[52,58571,58572],{"class":54,"line":83},[52,58573,123],{"emptyLinePlaceholder":122},[52,58575,58576,58578,58580],{"class":54,"line":91},[52,58577,698],{"class":79},[52,58579,53984],{"class":53950},[52,58581,53957],{"class":79},[52,58583,58584,58586,58588,58590,58592,58594],{"class":54,"line":98},[52,58585,54794],{"class":79},[52,58587,53994],{"class":53950},[52,58589,53997],{"class":75},[52,58591,292],{"class":79},[52,58593,54002],{"class":62},[52,58595,53957],{"class":79},[52,58597,58598,58600,58602,58604,58606,58608,58610,58612,58614],{"class":54,"line":107},[52,58599,54794],{"class":79},[52,58601,53994],{"class":53950},[52,58603,17568],{"class":75},[52,58605,292],{"class":79},[52,58607,54041],{"class":62},[52,58609,54021],{"class":75},[52,58611,292],{"class":79},[52,58613,54048],{"class":62},[52,58615,53957],{"class":79},[52,58617,58618,58620,58622,58624,58626],{"class":54,"line":113},[52,58619,54794],{"class":79},[52,58621,54057],{"class":53950},[52,58623,54060],{"class":79},[52,58625,54057],{"class":53950},[52,58627,53957],{"class":79},[52,58629,58630,58632,58634],{"class":54,"line":119},[52,58631,54794],{"class":79},[52,58633,3141],{"class":53950},[52,58635,53957],{"class":79},[52,58637,58638,58640],{"class":54,"line":126},[52,58639,9366],{"class":53950},[52,58641,18220],{"class":79},[52,58643,58644,58646,58648,58650],{"class":54,"line":132},[52,58645,57345],{"class":308},[52,58647,54087],{"class":79},[52,58649,692],{"class":308},[52,58651,80],{"class":79},[52,58653,58654,58656,58658,58660],{"class":54,"line":138},[52,58655,57356],{"class":308},[52,58657,54087],{"class":79},[52,58659,692],{"class":308},[52,58661,80],{"class":79},[52,58663,58664],{"class":54,"line":144},[52,58665,616],{"class":79},[52,58667,58668],{"class":54,"line":153},[52,58669,123],{"emptyLinePlaceholder":122},[52,58671,58672,58674],{"class":54,"line":159},[52,58673,57375],{"class":53950},[52,58675,18220],{"class":79},[52,58677,58678,58680,58682,58684],{"class":54,"line":167},[52,58679,57382],{"class":308},[52,58681,54087],{"class":79},[52,58683,57387],{"class":308},[52,58685,80],{"class":79},[52,58687,58688],{"class":54,"line":173},[52,58689,616],{"class":79},[52,58691,58692],{"class":54,"line":181},[52,58693,123],{"emptyLinePlaceholder":122},[52,58695,58696,58698],{"class":54,"line":186},[52,58697,57402],{"class":75},[52,58699,18220],{"class":79},[52,58701,58702,58704,58706,58708],{"class":54,"line":191},[52,58703,57409],{"class":308},[52,58705,54087],{"class":79},[52,58707,57414],{"class":308},[52,58709,80],{"class":79},[52,58711,58712,58714,58716,58718,58720],{"class":54,"line":196},[52,58713,57421],{"class":308},[52,58715,54087],{"class":79},[52,58717,57426],{"class":308},[52,58719,54142],{"class":58},[52,58721,80],{"class":79},[52,58723,58724,58726,58728,58730,58732],{"class":54,"line":201},[52,58725,57435],{"class":308},[52,58727,54087],{"class":79},[52,58729,4586],{"class":308},[52,58731,54142],{"class":58},[52,58733,80],{"class":79},[52,58735,58736,58738,58740,58742,58744,58746],{"class":54,"line":206},[52,58737,57356],{"class":308},[52,58739,54087],{"class":79},[52,58741,591],{"class":308},[52,58743,54142],{"class":58},[52,58745,54206],{"class":308},[52,58747,80],{"class":79},[52,58749,58750],{"class":54,"line":211},[52,58751,616],{"class":79},[52,58753,58754],{"class":54,"line":218},[52,58755,123],{"emptyLinePlaceholder":122},[52,58757,58758,58760],{"class":54,"line":223},[52,58759,57470],{"class":75},[52,58761,18220],{"class":79},[52,58763,58764,58766,58768,58770],{"class":54,"line":230},[52,58765,57409],{"class":308},[52,58767,54087],{"class":79},[52,58769,57481],{"class":308},[52,58771,80],{"class":79},[52,58773,58774,58776,58778,58780],{"class":54,"line":239},[52,58775,57488],{"class":308},[52,58777,54087],{"class":79},[52,58779,692],{"class":308},[52,58781,80],{"class":79},[52,58783,58784,58786,58788,58790],{"class":54,"line":251},[52,58785,57499],{"class":308},[52,58787,54087],{"class":79},[52,58789,692],{"class":308},[52,58791,80],{"class":79},[52,58793,58794,58796,58798,58800,58802],{"class":54,"line":256},[52,58795,57421],{"class":308},[52,58797,54087],{"class":79},[52,58799,591],{"class":308},[52,58801,1998],{"class":58},[52,58803,80],{"class":79},[52,58805,58806,58808,58810,58812,58814],{"class":54,"line":262},[52,58807,57435],{"class":308},[52,58809,54087],{"class":79},[52,58811,605],{"class":308},[52,58813,1998],{"class":58},[52,58815,80],{"class":79},[52,58817,58818,58820,58822,58824],{"class":54,"line":268},[52,58819,57534],{"class":308},[52,58821,54087],{"class":79},[52,58823,57539],{"class":308},[52,58825,80],{"class":79},[52,58827,58828],{"class":54,"line":280},[52,58829,616],{"class":79},[52,58831,58832],{"class":54,"line":286},[52,58833,123],{"emptyLinePlaceholder":122},[52,58835,58836,58838,58840],{"class":54,"line":300},[52,58837,57470],{"class":75},[52,58839,9785],{"class":53950},[52,58841,18220],{"class":79},[52,58843,58844,58846,58848,58850],{"class":54,"line":314},[52,58845,57409],{"class":308},[52,58847,54087],{"class":79},[52,58849,57481],{"class":308},[52,58851,80],{"class":79},[52,58853,58854,58856,58858,58860,58862],{"class":54,"line":327},[52,58855,57572],{"class":308},[52,58857,54087],{"class":79},[52,58859,4090],{"class":308},[52,58861,54142],{"class":58},[52,58863,80],{"class":79},[52,58865,58866,58868,58870,58872,58874],{"class":54,"line":333},[52,58867,57488],{"class":308},[52,58869,54087],{"class":79},[52,58871,444],{"class":308},[52,58873,54142],{"class":58},[52,58875,80],{"class":79},[52,58877,58878,58880,58882,58884,58886],{"class":54,"line":360},[52,58879,57597],{"class":308},[52,58881,54087],{"class":79},[52,58883,1805],{"class":308},[52,58885,54142],{"class":58},[52,58887,80],{"class":79},[52,58889,58890],{"class":54,"line":365},[52,58891,616],{"class":79},[52,58893,58894],{"class":54,"line":371},[52,58895,123],{"emptyLinePlaceholder":122},[52,58897,58898,58900],{"class":54,"line":400},[52,58899,57618],{"class":53950},[52,58901,18220],{"class":79},[52,58903,58904,58906,58908,58910],{"class":54,"line":405},[52,58905,57409],{"class":308},[52,58907,54087],{"class":79},[52,58909,57481],{"class":308},[52,58911,80],{"class":79},[52,58913,58914,58916,58918,58920,58922],{"class":54,"line":411},[52,58915,57597],{"class":308},[52,58917,54087],{"class":79},[52,58919,3971],{"class":308},[52,58921,54142],{"class":58},[52,58923,80],{"class":79},[52,58925,58926,58928,58930,58932,58934],{"class":54,"line":424},[52,58927,57488],{"class":308},[52,58929,54087],{"class":79},[52,58931,444],{"class":308},[52,58933,54142],{"class":58},[52,58935,80],{"class":79},[52,58937,58938,58940,58942,58944],{"class":54,"line":436},[52,58939,57659],{"class":308},[52,58941,54087],{"class":79},[52,58943,54127],{"class":308},[52,58945,80],{"class":79},[52,58947,58948,58950,58952,58954],{"class":54,"line":449},[52,58949,57670],{"class":308},[52,58951,54087],{"class":79},[52,58953,54318],{"class":308},[52,58955,80],{"class":79},[52,58957,58958,58960,58962,58964],{"class":54,"line":2160},[52,58959,57409],{"class":308},[52,58961,54087],{"class":79},[52,58963,57481],{"class":308},[52,58965,80],{"class":79},[52,58967,58968,58970,58972,58974,58976],{"class":54,"line":2186},[52,58969,57421],{"class":308},[52,58971,54087],{"class":79},[52,58973,6970],{"class":308},[52,58975,54142],{"class":58},[52,58977,80],{"class":79},[52,58979,58980,58982,58984,58986,58988],{"class":54,"line":2209},[52,58981,57435],{"class":308},[52,58983,54087],{"class":79},[52,58985,444],{"class":308},[52,58987,54142],{"class":58},[52,58989,80],{"class":79},[52,58991,58992],{"class":54,"line":2233},[52,58993,616],{"class":79},[52,58995,58996],{"class":54,"line":2238},[52,58997,123],{"emptyLinePlaceholder":122},[52,58999,59000,59002,59004],{"class":54,"line":2243},[52,59001,57618],{"class":53950},[52,59003,57725],{"class":53950},[52,59005,18220],{"class":79},[52,59007,59008,59010,59012,59014,59016],{"class":54,"line":2248},[52,59009,57421],{"class":308},[52,59011,54087],{"class":79},[52,59013,444],{"class":308},[52,59015,54142],{"class":58},[52,59017,80],{"class":79},[52,59019,59020,59022,59024,59026,59028],{"class":54,"line":2257},[52,59021,57435],{"class":308},[52,59023,54087],{"class":79},[52,59025,444],{"class":308},[52,59027,54142],{"class":58},[52,59029,80],{"class":79},[52,59031,59032,59034,59036,59038,59040,59042,59044,59046,59048,59050,59052,59054],{"class":54,"line":2262},[52,59033,57534],{"class":308},[52,59035,54087],{"class":79},[52,59037,57760],{"class":308},[52,59039,1216],{"class":79},[52,59041,692],{"class":308},[52,59043,15083],{"class":79},[52,59045,692],{"class":308},[52,59047,15083],{"class":79},[52,59049,692],{"class":308},[52,59051,15083],{"class":79},[52,59053,57777],{"class":308},[52,59055,2737],{"class":79},[52,59057,59058,59060,59062,59064,59066],{"class":54,"line":2268},[52,59059,57784],{"class":308},[52,59061,54087],{"class":79},[52,59063,3649],{"class":308},[52,59065,54142],{"class":58},[52,59067,80],{"class":79},[52,59069,59070],{"class":54,"line":2297},[52,59071,616],{"class":79},[52,59073,59074],{"class":54,"line":2303},[52,59075,123],{"emptyLinePlaceholder":122},[52,59077,59078,59080],{"class":54,"line":2318},[52,59079,57805],{"class":75},[52,59081,18220],{"class":79},[52,59083,59084,59086,59088,59090],{"class":54,"line":2324},[52,59085,57534],{"class":308},[52,59087,54087],{"class":79},[52,59089,57816],{"class":308},[52,59091,80],{"class":79},[52,59093,59094],{"class":54,"line":2353},[52,59095,616],{"class":79},[52,59097,59098,59100,59102],{"class":54,"line":2362},[52,59099,55067],{"class":79},[52,59101,3141],{"class":53950},[52,59103,53957],{"class":79},[52,59105,59106,59108,59110],{"class":54,"line":2368},[52,59107,54435],{"class":79},[52,59109,53984],{"class":53950},[52,59111,53957],{"class":79},[52,59113,59114],{"class":54,"line":2376},[52,59115,123],{"emptyLinePlaceholder":122},[52,59117,59118,59120,59122],{"class":54,"line":2381},[52,59119,698],{"class":79},[52,59121,54450],{"class":53950},[52,59123,53957],{"class":79},[52,59125,59126,59128,59130,59132,59134,59136],{"class":54,"line":19252},[52,59127,54794],{"class":79},[52,59129,54261],{"class":53950},[52,59131,56136],{"class":75},[52,59133,292],{"class":79},[52,59135,56141],{"class":62},[52,59137,53957],{"class":79},[52,59139,59140,59142,59144,59146,59148,59150],{"class":54,"line":19258},[52,59141,53991],{"class":79},[52,59143,54261],{"class":53950},[52,59145,56136],{"class":75},[52,59147,292],{"class":79},[52,59149,57877],{"class":62},[52,59151,53957],{"class":79},[52,59153,59154,59156,59158,59160,59162,59164,59166,59168,59170],{"class":54,"line":19281},[52,59155,57884],{"class":79},[52,59157,4509],{"class":53950},[52,59159,57889],{"class":75},[52,59161,292],{"class":79},[52,59163,57894],{"class":62},[52,59165,57897],{"class":75},[52,59167,292],{"class":79},[52,59169,10607],{"class":62},[52,59171,53957],{"class":79},[52,59173,59174,59176,59178],{"class":54,"line":19287},[52,59175,54426],{"class":79},[52,59177,54261],{"class":53950},[52,59179,53957],{"class":79},[52,59181,59182,59184,59186,59188,59190,59192],{"class":54,"line":19310},[52,59183,53991],{"class":79},[52,59185,54261],{"class":53950},[52,59187,56136],{"class":75},[52,59189,292],{"class":79},[52,59191,57924],{"class":62},[52,59193,53957],{"class":79},[52,59195,59196,59198,59200,59202,59204],{"class":54,"line":19324},[52,59197,57884],{"class":79},[52,59199,14],{"class":53950},[52,59201,57935],{"class":79},[52,59203,14],{"class":53950},[52,59205,53957],{"class":79},[52,59207,59208,59210,59212],{"class":54,"line":19344},[52,59209,57884],{"class":79},[52,59211,29],{"class":53950},[52,59213,53957],{"class":79},[52,59215,59216,59218,59220,59222,59224,59226,59228,59230],{"class":54,"line":19350},[52,59217,57952],{"class":79},[52,59219,32],{"class":53950},[52,59221,56136],{"class":75},[52,59223,292],{"class":79},[52,59225,57961],{"class":62},[52,59227,57964],{"class":79},[52,59229,32],{"class":53950},[52,59231,53957],{"class":79},[52,59233,59234,59236,59238,59240,59242],{"class":54,"line":19361},[52,59235,57952],{"class":79},[52,59237,32],{"class":53950},[52,59239,57964],{"class":79},[52,59241,32],{"class":53950},[52,59243,53957],{"class":79},[52,59245,59246,59248,59250,59252,59254],{"class":54,"line":19384},[52,59247,57952],{"class":79},[52,59249,32],{"class":53950},[52,59251,57964],{"class":79},[52,59253,32],{"class":53950},[52,59255,53957],{"class":79},[52,59257,59258,59260,59262,59264,59266],{"class":54,"line":19406},[52,59259,57952],{"class":79},[52,59261,32],{"class":53950},[52,59263,57964],{"class":79},[52,59265,32],{"class":53950},[52,59267,53957],{"class":79},[52,59269,59270,59272,59274,59276,59278],{"class":54,"line":19411},[52,59271,57952],{"class":79},[52,59273,32],{"class":53950},[52,59275,57964],{"class":79},[52,59277,32],{"class":53950},[52,59279,53957],{"class":79},[52,59281,59282,59284,59286,59288,59290],{"class":54,"line":19417},[52,59283,57952],{"class":79},[52,59285,32],{"class":53950},[52,59287,57964],{"class":79},[52,59289,32],{"class":53950},[52,59291,53957],{"class":79},[52,59293,59294,59296,59298,59300,59302],{"class":54,"line":19431},[52,59295,57952],{"class":79},[52,59297,32],{"class":53950},[52,59299,57964],{"class":79},[52,59301,32],{"class":53950},[52,59303,53957],{"class":79},[52,59305,59306,59308,59310,59312,59314],{"class":54,"line":19444},[52,59307,57952],{"class":79},[52,59309,32],{"class":53950},[52,59311,57964],{"class":79},[52,59313,32],{"class":53950},[52,59315,53957],{"class":79},[52,59317,59318,59320,59322],{"class":54,"line":19449},[52,59319,58057],{"class":79},[52,59321,29],{"class":53950},[52,59323,53957],{"class":79},[52,59325,59326,59328,59330],{"class":54,"line":19463},[52,59327,54426],{"class":79},[52,59329,54261],{"class":53950},[52,59331,53957],{"class":79},[52,59333,59334,59336,59338],{"class":54,"line":19468},[52,59335,55067],{"class":79},[52,59337,54261],{"class":53950},[52,59339,53957],{"class":79},[52,59341,59342,59344,59346],{"class":54,"line":19474},[52,59343,54794],{"class":79},[52,59345,54463],{"class":53950},[52,59347,53957],{"class":79},[52,59349,59350,59352,59355,59357],{"class":54,"line":19479},[52,59351,13869],{"class":58},[52,59353,59354],{"class":308}," sliderData",[52,59356,16212],{"class":58},[52,59358,58097],{"class":79},[52,59360,59361,59363,59365,59367,59369,59371,59373],{"class":54,"line":19493},[52,59362,58102],{"class":79},[52,59364,58105],{"class":62},[52,59366,58108],{"class":79},[52,59368,58111],{"class":62},[52,59370,58114],{"class":79},[52,59372,58117],{"class":62},[52,59374,58120],{"class":79},[52,59376,59377,59379,59381,59383,59385,59387,59389],{"class":54,"line":19498},[52,59378,58102],{"class":79},[52,59380,58127],{"class":62},[52,59382,58108],{"class":79},[52,59384,58132],{"class":62},[52,59386,58114],{"class":79},[52,59388,58137],{"class":62},[52,59390,58120],{"class":79},[52,59392,59393,59395,59397,59399,59401,59403,59405],{"class":54,"line":19503},[52,59394,58102],{"class":79},[52,59396,58146],{"class":62},[52,59398,58108],{"class":79},[52,59400,58151],{"class":62},[52,59402,58114],{"class":79},[52,59404,58156],{"class":62},[52,59406,58120],{"class":79},[52,59408,59409,59411,59413,59415,59417,59419,59421],{"class":54,"line":19517},[52,59410,58102],{"class":79},[52,59412,58165],{"class":62},[52,59414,58108],{"class":79},[52,59416,58170],{"class":62},[52,59418,58114],{"class":79},[52,59420,58175],{"class":62},[52,59422,58120],{"class":79},[52,59424,59425,59427,59429,59431,59433,59435,59437],{"class":54,"line":19529},[52,59426,58102],{"class":79},[52,59428,58184],{"class":62},[52,59430,58108],{"class":79},[52,59432,58189],{"class":62},[52,59434,58114],{"class":79},[52,59436,58194],{"class":62},[52,59438,58120],{"class":79},[52,59440,59441,59443,59445,59447,59449,59451,59453],{"class":54,"line":19534},[52,59442,58102],{"class":79},[52,59444,58203],{"class":62},[52,59446,58108],{"class":79},[52,59448,58208],{"class":62},[52,59450,58114],{"class":79},[52,59452,58213],{"class":62},[52,59454,58120],{"class":79},[52,59456,59457,59459,59461,59463,59465,59467,59469],{"class":54,"line":19547},[52,59458,58102],{"class":79},[52,59460,58222],{"class":62},[52,59462,58108],{"class":79},[52,59464,58227],{"class":62},[52,59466,58114],{"class":79},[52,59468,58232],{"class":62},[52,59470,58120],{"class":79},[52,59472,59473,59475,59477,59479,59481,59483,59485],{"class":54,"line":19552},[52,59474,58102],{"class":79},[52,59476,58241],{"class":62},[52,59478,58108],{"class":79},[52,59480,58246],{"class":62},[52,59482,58114],{"class":79},[52,59484,58251],{"class":62},[52,59486,58254],{"class":79},[52,59488,59489],{"class":54,"line":19557},[52,59490,55759],{"class":79},[52,59492,59493],{"class":54,"line":19562},[52,59494,59495],{"class":94},"    \u002F\u002F 1.获取元素\n",[52,59497,59498,59500,59502,59504,59506,59508,59510,59512],{"class":54,"line":19575},[52,59499,13869],{"class":58},[52,59501,58265],{"class":308},[52,59503,16212],{"class":58},[52,59505,57046],{"class":79},[52,59507,57049],{"class":75},[52,59509,1216],{"class":79},[52,59511,58276],{"class":62},[52,59513,708],{"class":79},[52,59515,59516,59518,59520,59522,59524,59526,59528,59530],{"class":54,"line":19580},[52,59517,13869],{"class":58},[52,59519,9785],{"class":308},[52,59521,16212],{"class":58},[52,59523,57046],{"class":79},[52,59525,57049],{"class":75},[52,59527,1216],{"class":79},[52,59529,58295],{"class":62},[52,59531,708],{"class":79},[52,59533,59534,59536,59538,59540],{"class":54,"line":35283},[52,59535,54869],{"class":58},[52,59537,1871],{"class":79},[52,59539,292],{"class":58},[52,59541,49983],{"class":308},[52,59543,59544],{"class":54,"line":35289},[52,59545,59546],{"class":94},"    \u002F\u002F 2.开启定时器\n",[52,59548,59549],{"class":54,"line":35295},[52,59550,59551],{"class":94},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[52,59553,59554,59557,59559,59561],{"class":54,"line":35301},[52,59555,59556],{"class":75},"    setInterval",[52,59558,1216],{"class":79},[52,59560,57099],{"class":58},[52,59562,57102],{"class":79},[52,59564,59565,59567],{"class":54,"line":35307},[52,59566,57107],{"class":79},[52,59568,5692],{"class":58},[52,59570,59571,59573,59575,59577,59580,59582],{"class":54,"line":35318},[52,59572,57130],{"class":58},[52,59574,57133],{"class":79},[52,59576,4742],{"class":58},[52,59578,59579],{"class":79}," sliderData.",[52,59581,54618],{"class":308},[52,59583,15090],{"class":79},[52,59585,59586,59589,59591],{"class":54,"line":35324},[52,59587,59588],{"class":79},"        i ",[52,59590,292],{"class":58},[52,59592,49983],{"class":308},[52,59594,59595],{"class":54,"line":35344},[52,59596,55048],{"class":79},[52,59598,59599],{"class":54,"line":35350},[52,59600,59601],{"class":94},"      \u002F\u002F 更换图片路径\n",[52,59603,59604,59606,59608],{"class":54,"line":35361},[52,59605,58371],{"class":79},[52,59607,292],{"class":58},[52,59609,59610],{"class":79}," sliderData[i].url\n",[52,59612,59613],{"class":54,"line":35367},[52,59614,59615],{"class":94},"      \u002F\u002F 把文字写到p里面\n",[52,59617,59618,59620,59622],{"class":54,"line":35373},[52,59619,58381],{"class":79},[52,59621,292],{"class":58},[52,59623,59624],{"class":79}," sliderData[i].title\n",[52,59626,59627],{"class":54,"line":35379},[52,59628,59629],{"class":94},"      \u002F\u002F 小圆点\n",[52,59631,59632],{"class":54,"line":35385},[52,59633,59634],{"class":94},"      \u002F\u002F 先删除以前的active\n",[52,59636,59637],{"class":54,"line":35391},[52,59638,59639],{"class":94},"      \u002F\u002F 只让当前li添加active\n",[52,59641,59642,59644,59646,59648,59651,59654,59657,59659,59661],{"class":54,"line":35397},[52,59643,58421],{"class":79},[52,59645,57049],{"class":75},[52,59647,1216],{"class":79},[52,59649,59650],{"class":62},"'.slider-footer .activate'",[52,59652,59653],{"class":79},").classList.",[52,59655,59656],{"class":75},"remove",[52,59658,1216],{"class":79},[52,59660,58439],{"class":62},[52,59662,708],{"class":79},[52,59664,59665,59667,59669,59671,59674,59676,59678,59680,59683,59685,59687,59689,59691],{"class":54,"line":35403},[52,59666,58421],{"class":79},[52,59668,57049],{"class":75},[52,59670,1216],{"class":79},[52,59672,59673],{"class":62},"`.slider-footer ul li:nth-child(${",[52,59675,3644],{"class":79},[52,59677,48216],{"class":58},[52,59679,27768],{"class":308},[52,59681,59682],{"class":62},"})`",[52,59684,59653],{"class":79},[52,59686,8300],{"class":75},[52,59688,1216],{"class":79},[52,59690,58439],{"class":62},[52,59692,708],{"class":79},[52,59694,59695],{"class":54,"line":35423},[52,59696,123],{"emptyLinePlaceholder":122},[52,59698,59699,59701,59703],{"class":54,"line":35429},[52,59700,57185],{"class":79},[52,59702,9373],{"class":308},[52,59704,708],{"class":79},[52,59706,59707],{"class":54,"line":35445},[52,59708,123],{"emptyLinePlaceholder":122},[52,59710,59711,59713,59715],{"class":54,"line":35451},[52,59712,55067],{"class":79},[52,59714,54463],{"class":53950},[52,59716,53957],{"class":79},[52,59718,59719,59721,59723],{"class":54,"line":35465},[52,59720,54435],{"class":79},[52,59722,54450],{"class":53950},[52,59724,53957],{"class":79},[52,59726,59727],{"class":54,"line":35471},[52,59728,123],{"emptyLinePlaceholder":122},[52,59730,59731,59733,59735],{"class":54,"line":35486},[52,59732,54435],{"class":79},[52,59734,53285],{"class":53950},[52,59736,53957],{"class":79},[3195,59738,59740],{"id":59739},"_317-重要知识点","3.1.7 重要知识点",[14,59742,59743,59744],{},"浏览器在渲染文本时， ",[2389,59745,59746],{},"没有空格或换行符就没有“断行点”",[14,59748,59749],{},[4509,59750],{"alt":47,"src":59751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,59753,59754],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,59756,59757],{},[4509,59758],{"alt":47,"src":59759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,59761,59762],{},[4509,59763],{"alt":47,"src":59764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[18,59766,59768],{"id":59767},"_32-dom事件基础","3.2 DOM事件基础",[3195,59770,59772],{"id":59771},"_321-事件监听","3.2.1 事件监听",[14,59774,59775],{},[4509,59776],{"alt":47,"src":59777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,59779,59780],{},"事件监听有响应的发生",[14,59782,59783],{},[4509,59784],{"alt":47,"src":59785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,59787,59788],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,59790,59791],{},"对于有名函数,要执行的函数名后边不要加()",[3195,59793,59795],{"id":59794},"_322-随机点名案例","3.2.2 随机点名案例",[42,59797,59799],{"className":53283,"code":59798,"language":53285,"meta":47,"style":47},"\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",[49,59800,59801,59811,59825,59829,59837,59851,59871,59883,59891,59897,59907,59917,59921,59925,59932,59943,59947,59951,59957,59969,59983,59993,60005,60018,60022,60026,60033,60037,60050,60062,60074,60078,60082,60086,60093,60103,60107,60111,60120,60132,60144,60159,60163,60171,60179,60183,60191,60204,60218,60231,60251,60259,60274,60294,60314,60322,60326,60334,60339,60375,60395,60400,60419,60424,60435,60440,60451,60456,60475,60490,60495,60521,60531,60540,60545,60561,60566,60571,60576,60591,60595,60599,60604,60623,60640,60648,60653,60668,60672,60676,60684,60692,60696],{"__ignoreMap":47},[52,59802,59803,59805,59807,59809],{"class":54,"line":55},[52,59804,53947],{"class":79},[52,59806,53951],{"class":53950},[52,59808,53954],{"class":75},[52,59810,53957],{"class":79},[52,59812,59813,59815,59817,59819,59821,59823],{"class":54,"line":66},[52,59814,698],{"class":79},[52,59816,53285],{"class":53950},[52,59818,53966],{"class":75},[52,59820,292],{"class":79},[52,59822,53971],{"class":62},[52,59824,53957],{"class":79},[52,59826,59827],{"class":54,"line":83},[52,59828,123],{"emptyLinePlaceholder":122},[52,59830,59831,59833,59835],{"class":54,"line":91},[52,59832,698],{"class":79},[52,59834,53984],{"class":53950},[52,59836,53957],{"class":79},[52,59838,59839,59841,59843,59845,59847,59849],{"class":54,"line":98},[52,59840,54794],{"class":79},[52,59842,53994],{"class":53950},[52,59844,53997],{"class":75},[52,59846,292],{"class":79},[52,59848,54002],{"class":62},[52,59850,53957],{"class":79},[52,59852,59853,59855,59857,59859,59861,59863,59865,59867,59869],{"class":54,"line":107},[52,59854,54794],{"class":79},[52,59856,53994],{"class":53950},[52,59858,17568],{"class":75},[52,59860,292],{"class":79},[52,59862,54041],{"class":62},[52,59864,54021],{"class":75},[52,59866,292],{"class":79},[52,59868,54048],{"class":62},[52,59870,53957],{"class":79},[52,59872,59873,59875,59877,59879,59881],{"class":54,"line":113},[52,59874,54794],{"class":79},[52,59876,54057],{"class":53950},[52,59878,54060],{"class":79},[52,59880,54057],{"class":53950},[52,59882,53957],{"class":79},[52,59884,59885,59887,59889],{"class":54,"line":119},[52,59886,54794],{"class":79},[52,59888,3141],{"class":53950},[52,59890,53957],{"class":79},[52,59892,59893,59895],{"class":54,"line":126},[52,59894,9366],{"class":53950},[52,59896,18220],{"class":79},[52,59898,59899,59901,59903,59905],{"class":54,"line":132},[52,59900,57356],{"class":308},[52,59902,54087],{"class":79},[52,59904,692],{"class":308},[52,59906,80],{"class":79},[52,59908,59909,59911,59913,59915],{"class":54,"line":138},[52,59910,57345],{"class":308},[52,59912,54087],{"class":79},[52,59914,692],{"class":308},[52,59916,80],{"class":79},[52,59918,59919],{"class":54,"line":144},[52,59920,616],{"class":79},[52,59922,59923],{"class":54,"line":153},[52,59924,123],{"emptyLinePlaceholder":122},[52,59926,59927,59930],{"class":54,"line":159},[52,59928,59929],{"class":53950},"    h2",[52,59931,18220],{"class":79},[52,59933,59934,59937,59939,59941],{"class":54,"line":167},[52,59935,59936],{"class":308},"      text-align",[52,59938,54087],{"class":79},[52,59940,54242],{"class":308},[52,59942,80],{"class":79},[52,59944,59945],{"class":54,"line":173},[52,59946,616],{"class":79},[52,59948,59949],{"class":54,"line":181},[52,59950,123],{"emptyLinePlaceholder":122},[52,59952,59953,59955],{"class":54,"line":186},[52,59954,57402],{"class":75},[52,59956,18220],{"class":79},[52,59958,59959,59961,59963,59965,59967],{"class":54,"line":191},[52,59960,57421],{"class":308},[52,59962,54087],{"class":79},[52,59964,4586],{"class":308},[52,59966,54142],{"class":58},[52,59968,80],{"class":79},[52,59970,59971,59973,59975,59977,59979,59981],{"class":54,"line":196},[52,59972,57356],{"class":308},[52,59974,54087],{"class":79},[52,59976,3852],{"class":308},[52,59978,54142],{"class":58},[52,59980,54206],{"class":308},[52,59982,80],{"class":79},[52,59984,59985,59987,59989,59991],{"class":54,"line":201},[52,59986,57659],{"class":308},[52,59988,54087],{"class":79},[52,59990,54127],{"class":308},[52,59992,80],{"class":79},[52,59994,59995,59997,59999,60001,60003],{"class":54,"line":206},[52,59996,57572],{"class":308},[52,59998,54087],{"class":79},[52,60000,4015],{"class":308},[52,60002,54142],{"class":58},[52,60004,80],{"class":79},[52,60006,60007,60010,60012,60014,60016],{"class":54,"line":211},[52,60008,60009],{"class":308},"      line-height",[52,60011,54087],{"class":79},[52,60013,2007],{"class":308},[52,60015,54142],{"class":58},[52,60017,80],{"class":79},[52,60019,60020],{"class":54,"line":218},[52,60021,616],{"class":79},[52,60023,60024],{"class":54,"line":223},[52,60025,123],{"emptyLinePlaceholder":122},[52,60027,60028,60031],{"class":54,"line":230},[52,60029,60030],{"class":75},"    .qs",[52,60032,18220],{"class":79},[52,60034,60035],{"class":54,"line":239},[52,60036,123],{"emptyLinePlaceholder":122},[52,60038,60039,60041,60043,60046,60048],{"class":54,"line":251},[52,60040,57421],{"class":308},[52,60042,54087],{"class":79},[52,60044,60045],{"class":308},"450",[52,60047,54142],{"class":58},[52,60049,80],{"class":79},[52,60051,60052,60054,60056,60058,60060],{"class":54,"line":256},[52,60053,57435],{"class":308},[52,60055,54087],{"class":79},[52,60057,2007],{"class":308},[52,60059,54142],{"class":58},[52,60061,80],{"class":79},[52,60063,60064,60067,60069,60072],{"class":54,"line":262},[52,60065,60066],{"class":308},"      color",[52,60068,54087],{"class":79},[52,60070,60071],{"class":308},"red",[52,60073,80],{"class":79},[52,60075,60076],{"class":54,"line":268},[52,60077,123],{"emptyLinePlaceholder":122},[52,60079,60080],{"class":54,"line":280},[52,60081,616],{"class":79},[52,60083,60084],{"class":54,"line":286},[52,60085,123],{"emptyLinePlaceholder":122},[52,60087,60088,60091],{"class":54,"line":300},[52,60089,60090],{"class":75},"    .btns",[52,60092,18220],{"class":79},[52,60094,60095,60097,60099,60101],{"class":54,"line":314},[52,60096,59936],{"class":308},[52,60098,54087],{"class":79},[52,60100,54242],{"class":308},[52,60102,80],{"class":79},[52,60104,60105],{"class":54,"line":327},[52,60106,616],{"class":79},[52,60108,60109],{"class":54,"line":333},[52,60110,123],{"emptyLinePlaceholder":122},[52,60112,60113,60115,60118],{"class":54,"line":360},[52,60114,60090],{"class":75},[52,60116,60117],{"class":53950}," button",[52,60119,18220],{"class":79},[52,60121,60122,60124,60126,60128,60130],{"class":54,"line":365},[52,60123,57421],{"class":308},[52,60125,54087],{"class":79},[52,60127,4007],{"class":308},[52,60129,54142],{"class":58},[52,60131,80],{"class":79},[52,60133,60134,60136,60138,60140,60142],{"class":54,"line":371},[52,60135,57435],{"class":308},[52,60137,54087],{"class":79},[52,60139,3484],{"class":308},[52,60141,54142],{"class":58},[52,60143,80],{"class":79},[52,60145,60146,60148,60150,60152,60155,60157],{"class":54,"line":400},[52,60147,57356],{"class":308},[52,60149,54087],{"class":79},[52,60151,692],{"class":308},[52,60153,60154],{"class":308}," 50",[52,60156,54142],{"class":58},[52,60158,80],{"class":79},[52,60160,60161],{"class":54,"line":405},[52,60162,616],{"class":79},[52,60164,60165,60167,60169],{"class":54,"line":411},[52,60166,55067],{"class":79},[52,60168,3141],{"class":53950},[52,60170,53957],{"class":79},[52,60172,60173,60175,60177],{"class":54,"line":424},[52,60174,54435],{"class":79},[52,60176,53984],{"class":53950},[52,60178,53957],{"class":79},[52,60180,60181],{"class":54,"line":436},[52,60182,123],{"emptyLinePlaceholder":122},[52,60184,60185,60187,60189],{"class":54,"line":449},[52,60186,698],{"class":79},[52,60188,54450],{"class":53950},[52,60190,53957],{"class":79},[52,60192,60193,60195,60197,60200,60202],{"class":54,"line":2160},[52,60194,54794],{"class":79},[52,60196,18],{"class":53950},[52,60198,60199],{"class":79},">随机点名\u003C\u002F",[52,60201,18],{"class":53950},[52,60203,53957],{"class":79},[52,60205,60206,60208,60210,60212,60214,60216],{"class":54,"line":2186},[52,60207,54794],{"class":79},[52,60209,54261],{"class":53950},[52,60211,56136],{"class":75},[52,60213,292],{"class":79},[52,60215,56141],{"class":62},[52,60217,53957],{"class":79},[52,60219,60220,60222,60224,60227,60229],{"class":54,"line":2209},[52,60221,53991],{"class":79},[52,60223,52],{"class":53950},[52,60225,60226],{"class":79},">名字是：\u003C\u002F",[52,60228,52],{"class":53950},[52,60230,53957],{"class":79},[52,60232,60233,60235,60237,60239,60241,60244,60247,60249],{"class":54,"line":2233},[52,60234,53991],{"class":79},[52,60236,54261],{"class":53950},[52,60238,56136],{"class":75},[52,60240,292],{"class":79},[52,60242,60243],{"class":62},"\"qs\"",[52,60245,60246],{"class":79},">这里显示姓名\u003C\u002F",[52,60248,54261],{"class":53950},[52,60250,53957],{"class":79},[52,60252,60253,60255,60257],{"class":54,"line":2238},[52,60254,55067],{"class":79},[52,60256,54261],{"class":53950},[52,60258,53957],{"class":79},[52,60260,60261,60263,60265,60267,60269,60272],{"class":54,"line":2243},[52,60262,54794],{"class":79},[52,60264,54261],{"class":53950},[52,60266,56136],{"class":75},[52,60268,292],{"class":79},[52,60270,60271],{"class":62},"\"btns\"",[52,60273,53957],{"class":79},[52,60275,60276,60278,60280,60282,60284,60287,60290,60292],{"class":54,"line":2248},[52,60277,53991],{"class":79},[52,60279,56537],{"class":53950},[52,60281,56136],{"class":75},[52,60283,292],{"class":79},[52,60285,60286],{"class":62},"\"start\"",[52,60288,60289],{"class":79},">开始\u003C\u002F",[52,60291,56537],{"class":53950},[52,60293,53957],{"class":79},[52,60295,60296,60298,60300,60302,60304,60307,60310,60312],{"class":54,"line":2257},[52,60297,53991],{"class":79},[52,60299,56537],{"class":53950},[52,60301,56136],{"class":75},[52,60303,292],{"class":79},[52,60305,60306],{"class":62},"\"end\"",[52,60308,60309],{"class":79},">结束\u003C\u002F",[52,60311,56537],{"class":53950},[52,60313,53957],{"class":79},[52,60315,60316,60318,60320],{"class":54,"line":2262},[52,60317,55067],{"class":79},[52,60319,54261],{"class":53950},[52,60321,53957],{"class":79},[52,60323,60324],{"class":54,"line":2268},[52,60325,123],{"emptyLinePlaceholder":122},[52,60327,60328,60330,60332],{"class":54,"line":2297},[52,60329,54794],{"class":79},[52,60331,54463],{"class":53950},[52,60333,53957],{"class":79},[52,60335,60336],{"class":54,"line":2303},[52,60337,60338],{"class":94},"    \u002F\u002F 数据数组\n",[52,60340,60341,60343,60346,60348,60350,60353,60355,60358,60360,60363,60365,60368,60370,60373],{"class":54,"line":2318},[52,60342,13869],{"class":58},[52,60344,60345],{"class":308}," arr",[52,60347,16212],{"class":58},[52,60349,54876],{"class":79},[52,60351,60352],{"class":62},"'马超'",[52,60354,15083],{"class":79},[52,60356,60357],{"class":62},"'黄忠'",[52,60359,15083],{"class":79},[52,60361,60362],{"class":62},"'赵云'",[52,60364,15083],{"class":79},[52,60366,60367],{"class":62},"'关羽'",[52,60369,15083],{"class":79},[52,60371,60372],{"class":62},"'张飞'",[52,60374,35896],{"class":79},[52,60376,60377,60379,60382,60384,60386,60388,60390,60393],{"class":54,"line":2324},[52,60378,13869],{"class":58},[52,60380,60381],{"class":308}," qs",[52,60383,16212],{"class":58},[52,60385,57046],{"class":79},[52,60387,57049],{"class":75},[52,60389,1216],{"class":79},[52,60391,60392],{"class":62},"'.qs'",[52,60394,708],{"class":79},[52,60396,60397],{"class":54,"line":2353},[52,60398,60399],{"class":94},"    \u002F\u002F 1.业务1.开始按钮模块\n",[52,60401,60402,60404,60406,60408,60410,60412,60414,60417],{"class":54,"line":2362},[52,60403,13869],{"class":58},[52,60405,7159],{"class":308},[52,60407,16212],{"class":58},[52,60409,57046],{"class":79},[52,60411,57049],{"class":75},[52,60413,1216],{"class":79},[52,60415,60416],{"class":62},"'.start'",[52,60418,708],{"class":79},[52,60420,60421],{"class":54,"line":2368},[52,60422,60423],{"class":94},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[52,60425,60426,60428,60431,60433],{"class":54,"line":2376},[52,60427,54869],{"class":58},[52,60429,60430],{"class":79}," timerId ",[52,60432,292],{"class":58},[52,60434,49983],{"class":308},[52,60436,60437],{"class":54,"line":2381},[52,60438,60439],{"class":94},"    \u002F\u002F 随机号要全局变量\n",[52,60441,60442,60444,60447,60449],{"class":54,"line":19252},[52,60443,54869],{"class":58},[52,60445,60446],{"class":79}," random ",[52,60448,292],{"class":58},[52,60450,49983],{"class":308},[52,60452,60453],{"class":54,"line":19258},[52,60454,60455],{"class":94},"    \u002F\u002F 1.1 添加点击事件\n",[52,60457,60458,60461,60464,60466,60469,60471,60473],{"class":54,"line":19281},[52,60459,60460],{"class":79},"    start.",[52,60462,60463],{"class":75},"addEventListener",[52,60465,1216],{"class":79},[52,60467,60468],{"class":62},"'click'",[52,60470,15083],{"class":79},[52,60472,57099],{"class":58},[52,60474,57102],{"class":79},[52,60476,60477,60480,60482,60484,60486,60488],{"class":54,"line":19287},[52,60478,60479],{"class":79},"      timerId ",[52,60481,292],{"class":58},[52,60483,57094],{"class":75},[52,60485,1216],{"class":79},[52,60487,57099],{"class":58},[52,60489,57102],{"class":79},[52,60491,60492],{"class":54,"line":19310},[52,60493,60494],{"class":94},"        \u002F\u002F 随机数\n",[52,60496,60497,60500,60502,60505,60508,60511,60513,60515,60517,60519],{"class":54,"line":19324},[52,60498,60499],{"class":79},"        random ",[52,60501,292],{"class":58},[52,60503,60504],{"class":75}," parseInt",[52,60506,60507],{"class":79},"(Math.",[52,60509,60510],{"class":75},"random",[52,60512,15698],{"class":79},[52,60514,3053],{"class":58},[52,60516,54615],{"class":79},[52,60518,54618],{"class":308},[52,60520,708],{"class":79},[52,60522,60523,60526,60528],{"class":54,"line":19344},[52,60524,60525],{"class":79},"        qs.innerHTML ",[52,60527,292],{"class":58},[52,60529,60530],{"class":79}," arr[random]\n",[52,60532,60533,60536,60538],{"class":54,"line":19350},[52,60534,60535],{"class":79},"      }, ",[52,60537,3484],{"class":308},[52,60539,708],{"class":79},[52,60541,60542],{"class":54,"line":19361},[52,60543,60544],{"class":94},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[52,60546,60547,60549,60552,60554,60557,60559],{"class":54,"line":19384},[52,60548,57130],{"class":58},[52,60550,60551],{"class":79}," (arr.",[52,60553,54618],{"class":308},[52,60555,60556],{"class":58}," ===",[52,60558,27768],{"class":308},[52,60560,15090],{"class":79},[52,60562,60563],{"class":54,"line":19406},[52,60564,60565],{"class":94},"        \u002F\u002F start.disabled = true\n",[52,60567,60568],{"class":54,"line":19411},[52,60569,60570],{"class":94},"        \u002F\u002F end.disabled = true\n",[52,60572,60573],{"class":54,"line":19417},[52,60574,60575],{"class":94},"        \u002F\u002F 可以合起来写\n",[52,60577,60578,60581,60583,60586,60588],{"class":54,"line":19431},[52,60579,60580],{"class":79},"        start.disabled ",[52,60582,292],{"class":58},[52,60584,60585],{"class":79}," end.disabled ",[52,60587,292],{"class":58},[52,60589,60590],{"class":308}," true\n",[52,60592,60593],{"class":54,"line":19444},[52,60594,55048],{"class":79},[52,60596,60597],{"class":54,"line":19449},[52,60598,36111],{"class":79},[52,60600,60601],{"class":54,"line":19463},[52,60602,60603],{"class":94},"    \u002F\u002F 1.2 关闭按钮模块\n",[52,60605,60606,60608,60610,60612,60614,60616,60618,60621],{"class":54,"line":19468},[52,60607,13869],{"class":58},[52,60609,7175],{"class":308},[52,60611,16212],{"class":58},[52,60613,57046],{"class":79},[52,60615,57049],{"class":75},[52,60617,1216],{"class":79},[52,60619,60620],{"class":62},"'.end'",[52,60622,708],{"class":79},[52,60624,60625,60628,60630,60632,60634,60636,60638],{"class":54,"line":19474},[52,60626,60627],{"class":79},"    end.",[52,60629,60463],{"class":75},[52,60631,1216],{"class":79},[52,60633,60468],{"class":62},[52,60635,15083],{"class":79},[52,60637,57099],{"class":58},[52,60639,57102],{"class":79},[52,60641,60642,60645],{"class":54,"line":19479},[52,60643,60644],{"class":75},"      clearInterval",[52,60646,60647],{"class":79},"(timerId)\n",[52,60649,60650],{"class":54,"line":19493},[52,60651,60652],{"class":94},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[52,60654,60655,60658,60661,60664,60666],{"class":54,"line":19498},[52,60656,60657],{"class":79},"      arr.",[52,60659,60660],{"class":75},"splice",[52,60662,60663],{"class":79},"(random, ",[52,60665,629],{"class":308},[52,60667,708],{"class":79},[52,60669,60670],{"class":54,"line":19503},[52,60671,36111],{"class":79},[52,60673,60674],{"class":54,"line":19517},[52,60675,123],{"emptyLinePlaceholder":122},[52,60677,60678,60680,60682],{"class":54,"line":19529},[52,60679,55067],{"class":79},[52,60681,54463],{"class":53950},[52,60683,53957],{"class":79},[52,60685,60686,60688,60690],{"class":54,"line":19534},[52,60687,54435],{"class":79},[52,60689,54450],{"class":53950},[52,60691,53957],{"class":79},[52,60693,60694],{"class":54,"line":19547},[52,60695,123],{"emptyLinePlaceholder":122},[52,60697,60698,60700,60702],{"class":54,"line":19552},[52,60699,54435],{"class":79},[52,60701,53285],{"class":53950},[52,60703,53957],{"class":79},[14,60705,60706],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[3195,60708,60710],{"id":60709},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[42,60712,60714],{"className":53283,"code":60713,"language":53285,"meta":47,"style":47},"\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",[49,60715,60716,60726,60740,60744,60752,60766,60786,60798,60806,60810,60818,60830,60838,60857,60874,60890,60900,60904,60912,60920,60924],{"__ignoreMap":47},[52,60717,60718,60720,60722,60724],{"class":54,"line":55},[52,60719,53947],{"class":79},[52,60721,53951],{"class":53950},[52,60723,53954],{"class":75},[52,60725,53957],{"class":79},[52,60727,60728,60730,60732,60734,60736,60738],{"class":54,"line":66},[52,60729,698],{"class":79},[52,60731,53285],{"class":53950},[52,60733,53966],{"class":75},[52,60735,292],{"class":79},[52,60737,53971],{"class":62},[52,60739,53957],{"class":79},[52,60741,60742],{"class":54,"line":83},[52,60743,123],{"emptyLinePlaceholder":122},[52,60745,60746,60748,60750],{"class":54,"line":91},[52,60747,698],{"class":79},[52,60749,53984],{"class":53950},[52,60751,53957],{"class":79},[52,60753,60754,60756,60758,60760,60762,60764],{"class":54,"line":98},[52,60755,54794],{"class":79},[52,60757,53994],{"class":53950},[52,60759,53997],{"class":75},[52,60761,292],{"class":79},[52,60763,54002],{"class":62},[52,60765,53957],{"class":79},[52,60767,60768,60770,60772,60774,60776,60778,60780,60782,60784],{"class":54,"line":107},[52,60769,54794],{"class":79},[52,60771,53994],{"class":53950},[52,60773,17568],{"class":75},[52,60775,292],{"class":79},[52,60777,54041],{"class":62},[52,60779,54021],{"class":75},[52,60781,292],{"class":79},[52,60783,54048],{"class":62},[52,60785,53957],{"class":79},[52,60787,60788,60790,60792,60794,60796],{"class":54,"line":113},[52,60789,54794],{"class":79},[52,60791,54057],{"class":53950},[52,60793,54060],{"class":79},[52,60795,54057],{"class":53950},[52,60797,53957],{"class":79},[52,60799,60800,60802,60804],{"class":54,"line":119},[52,60801,54435],{"class":79},[52,60803,53984],{"class":53950},[52,60805,53957],{"class":79},[52,60807,60808],{"class":54,"line":126},[52,60809,123],{"emptyLinePlaceholder":122},[52,60811,60812,60814,60816],{"class":54,"line":132},[52,60813,698],{"class":79},[52,60815,54450],{"class":53950},[52,60817,53957],{"class":79},[52,60819,60820,60822,60824,60826,60828],{"class":54,"line":138},[52,60821,54794],{"class":79},[52,60823,56537],{"class":53950},[52,60825,56543],{"class":79},[52,60827,56537],{"class":53950},[52,60829,53957],{"class":79},[52,60831,60832,60834,60836],{"class":54,"line":144},[52,60833,54794],{"class":79},[52,60835,54463],{"class":53950},[52,60837,53957],{"class":79},[52,60839,60840,60842,60844,60846,60848,60850,60852,60855],{"class":54,"line":153},[52,60841,13869],{"class":58},[52,60843,57041],{"class":308},[52,60845,16212],{"class":58},[52,60847,57046],{"class":79},[52,60849,57049],{"class":75},[52,60851,1216],{"class":79},[52,60853,60854],{"class":62},"'button'",[52,60856,708],{"class":79},[52,60858,60859,60862,60864,60866,60868,60870,60872],{"class":54,"line":159},[52,60860,60861],{"class":79},"    btn.",[52,60863,60463],{"class":75},[52,60865,1216],{"class":79},[52,60867,60468],{"class":62},[52,60869,15083],{"class":79},[52,60871,57099],{"class":58},[52,60873,57102],{"class":79},[52,60875,60876,60879,60881,60883,60886,60888],{"class":54,"line":167},[52,60877,60878],{"class":58},"      const",[52,60880,5251],{"class":308},[52,60882,16212],{"class":58},[52,60884,60885],{"class":79}," Math.",[52,60887,60510],{"class":75},[52,60889,248],{"class":79},[52,60891,60892,60895,60898],{"class":54,"line":173},[52,60893,60894],{"class":79},"      console.",[52,60896,60897],{"class":75},"log",[52,60899,3236],{"class":79},[52,60901,60902],{"class":54,"line":181},[52,60903,36111],{"class":79},[52,60905,60906,60908,60910],{"class":54,"line":186},[52,60907,55067],{"class":79},[52,60909,54463],{"class":53950},[52,60911,53957],{"class":79},[52,60913,60914,60916,60918],{"class":54,"line":191},[52,60915,54435],{"class":79},[52,60917,54450],{"class":53950},[52,60919,53957],{"class":79},[52,60921,60922],{"class":54,"line":196},[52,60923,123],{"emptyLinePlaceholder":122},[52,60925,60926,60928,60930],{"class":54,"line":201},[52,60927,54435],{"class":79},[52,60929,53285],{"class":53950},[52,60931,53957],{"class":79},[14,60933,60934],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,60936,60937],{},"常量不可以重新赋值",[14,60939,60940],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[42,60942,60944],{"className":53283,"code":60943,"language":53285,"meta":47,"style":47},"\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",[49,60945,60946,60956,60970,60974,60982,60996,61016,61028,61036,61040,61048,61060,61068,61079,61097,61113,61127,61135,61139,61147,61155,61159],{"__ignoreMap":47},[52,60947,60948,60950,60952,60954],{"class":54,"line":55},[52,60949,53947],{"class":79},[52,60951,53951],{"class":53950},[52,60953,53954],{"class":75},[52,60955,53957],{"class":79},[52,60957,60958,60960,60962,60964,60966,60968],{"class":54,"line":66},[52,60959,698],{"class":79},[52,60961,53285],{"class":53950},[52,60963,53966],{"class":75},[52,60965,292],{"class":79},[52,60967,53971],{"class":62},[52,60969,53957],{"class":79},[52,60971,60972],{"class":54,"line":83},[52,60973,123],{"emptyLinePlaceholder":122},[52,60975,60976,60978,60980],{"class":54,"line":91},[52,60977,698],{"class":79},[52,60979,53984],{"class":53950},[52,60981,53957],{"class":79},[52,60983,60984,60986,60988,60990,60992,60994],{"class":54,"line":98},[52,60985,54794],{"class":79},[52,60987,53994],{"class":53950},[52,60989,53997],{"class":75},[52,60991,292],{"class":79},[52,60993,54002],{"class":62},[52,60995,53957],{"class":79},[52,60997,60998,61000,61002,61004,61006,61008,61010,61012,61014],{"class":54,"line":107},[52,60999,54794],{"class":79},[52,61001,53994],{"class":53950},[52,61003,17568],{"class":75},[52,61005,292],{"class":79},[52,61007,54041],{"class":62},[52,61009,54021],{"class":75},[52,61011,292],{"class":79},[52,61013,54048],{"class":62},[52,61015,53957],{"class":79},[52,61017,61018,61020,61022,61024,61026],{"class":54,"line":113},[52,61019,54794],{"class":79},[52,61021,54057],{"class":53950},[52,61023,54060],{"class":79},[52,61025,54057],{"class":53950},[52,61027,53957],{"class":79},[52,61029,61030,61032,61034],{"class":54,"line":119},[52,61031,54435],{"class":79},[52,61033,53984],{"class":53950},[52,61035,53957],{"class":79},[52,61037,61038],{"class":54,"line":126},[52,61039,123],{"emptyLinePlaceholder":122},[52,61041,61042,61044,61046],{"class":54,"line":132},[52,61043,698],{"class":79},[52,61045,54450],{"class":53950},[52,61047,53957],{"class":79},[52,61049,61050,61052,61054,61056,61058],{"class":54,"line":138},[52,61051,54794],{"class":79},[52,61053,56537],{"class":53950},[52,61055,56543],{"class":79},[52,61057,56537],{"class":53950},[52,61059,53957],{"class":79},[52,61061,61062,61064,61066],{"class":54,"line":144},[52,61063,54794],{"class":79},[52,61065,54463],{"class":53950},[52,61067,53957],{"class":79},[52,61069,61070,61072,61074,61076],{"class":54,"line":153},[52,61071,13869],{"class":58},[52,61073,5251],{"class":308},[52,61075,16212],{"class":58},[52,61077,61078],{"class":308}," 10\n",[52,61080,61081,61083,61085,61087,61089,61091,61093,61095],{"class":54,"line":159},[52,61082,13869],{"class":58},[52,61084,57041],{"class":308},[52,61086,16212],{"class":58},[52,61088,57046],{"class":79},[52,61090,57049],{"class":75},[52,61092,1216],{"class":79},[52,61094,60854],{"class":62},[52,61096,708],{"class":79},[52,61098,61099,61101,61103,61105,61107,61109,61111],{"class":54,"line":167},[52,61100,60861],{"class":79},[52,61102,60463],{"class":75},[52,61104,1216],{"class":79},[52,61106,60468],{"class":62},[52,61108,15083],{"class":79},[52,61110,57099],{"class":58},[52,61112,57102],{"class":79},[52,61114,61115,61117,61119,61121,61123,61125],{"class":54,"line":173},[52,61116,60878],{"class":58},[52,61118,5251],{"class":308},[52,61120,16212],{"class":58},[52,61122,60885],{"class":79},[52,61124,60510],{"class":75},[52,61126,248],{"class":79},[52,61128,61129,61131,61133],{"class":54,"line":181},[52,61130,60894],{"class":79},[52,61132,60897],{"class":75},[52,61134,3236],{"class":79},[52,61136,61137],{"class":54,"line":186},[52,61138,36111],{"class":79},[52,61140,61141,61143,61145],{"class":54,"line":191},[52,61142,55067],{"class":79},[52,61144,54463],{"class":53950},[52,61146,53957],{"class":79},[52,61148,61149,61151,61153],{"class":54,"line":196},[52,61150,54435],{"class":79},[52,61152,54450],{"class":53950},[52,61154,53957],{"class":79},[52,61156,61157],{"class":54,"line":201},[52,61158,123],{"emptyLinePlaceholder":122},[52,61160,61161,61163,61165],{"class":54,"line":206},[52,61162,54435],{"class":79},[52,61164,53285],{"class":53950},[52,61166,53957],{"class":79},[14,61168,61169],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[42,61171,61173],{"className":53283,"code":61172,"language":53285,"meta":47,"style":47},"\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",[49,61174,61175,61185,61199,61203,61211,61225,61245,61257,61265,61269,61277,61289,61297,61307,61325,61341,61354,61362,61366,61374,61382,61386],{"__ignoreMap":47},[52,61176,61177,61179,61181,61183],{"class":54,"line":55},[52,61178,53947],{"class":79},[52,61180,53951],{"class":53950},[52,61182,53954],{"class":75},[52,61184,53957],{"class":79},[52,61186,61187,61189,61191,61193,61195,61197],{"class":54,"line":66},[52,61188,698],{"class":79},[52,61190,53285],{"class":53950},[52,61192,53966],{"class":75},[52,61194,292],{"class":79},[52,61196,53971],{"class":62},[52,61198,53957],{"class":79},[52,61200,61201],{"class":54,"line":83},[52,61202,123],{"emptyLinePlaceholder":122},[52,61204,61205,61207,61209],{"class":54,"line":91},[52,61206,698],{"class":79},[52,61208,53984],{"class":53950},[52,61210,53957],{"class":79},[52,61212,61213,61215,61217,61219,61221,61223],{"class":54,"line":98},[52,61214,54794],{"class":79},[52,61216,53994],{"class":53950},[52,61218,53997],{"class":75},[52,61220,292],{"class":79},[52,61222,54002],{"class":62},[52,61224,53957],{"class":79},[52,61226,61227,61229,61231,61233,61235,61237,61239,61241,61243],{"class":54,"line":107},[52,61228,54794],{"class":79},[52,61230,53994],{"class":53950},[52,61232,17568],{"class":75},[52,61234,292],{"class":79},[52,61236,54041],{"class":62},[52,61238,54021],{"class":75},[52,61240,292],{"class":79},[52,61242,54048],{"class":62},[52,61244,53957],{"class":79},[52,61246,61247,61249,61251,61253,61255],{"class":54,"line":113},[52,61248,54794],{"class":79},[52,61250,54057],{"class":53950},[52,61252,54060],{"class":79},[52,61254,54057],{"class":53950},[52,61256,53957],{"class":79},[52,61258,61259,61261,61263],{"class":54,"line":119},[52,61260,54435],{"class":79},[52,61262,53984],{"class":53950},[52,61264,53957],{"class":79},[52,61266,61267],{"class":54,"line":126},[52,61268,123],{"emptyLinePlaceholder":122},[52,61270,61271,61273,61275],{"class":54,"line":132},[52,61272,698],{"class":79},[52,61274,54450],{"class":53950},[52,61276,53957],{"class":79},[52,61278,61279,61281,61283,61285,61287],{"class":54,"line":138},[52,61280,54794],{"class":79},[52,61282,56537],{"class":53950},[52,61284,56543],{"class":79},[52,61286,56537],{"class":53950},[52,61288,53957],{"class":79},[52,61290,61291,61293,61295],{"class":54,"line":144},[52,61292,54794],{"class":79},[52,61294,54463],{"class":53950},[52,61296,53957],{"class":79},[52,61298,61299,61301,61303,61305],{"class":54,"line":153},[52,61300,13869],{"class":58},[52,61302,5251],{"class":308},[52,61304,16212],{"class":58},[52,61306,61078],{"class":308},[52,61308,61309,61311,61313,61315,61317,61319,61321,61323],{"class":54,"line":159},[52,61310,13869],{"class":58},[52,61312,57041],{"class":308},[52,61314,16212],{"class":58},[52,61316,57046],{"class":79},[52,61318,57049],{"class":75},[52,61320,1216],{"class":79},[52,61322,60854],{"class":62},[52,61324,708],{"class":79},[52,61326,61327,61329,61331,61333,61335,61337,61339],{"class":54,"line":167},[52,61328,60861],{"class":79},[52,61330,60463],{"class":75},[52,61332,1216],{"class":79},[52,61334,60468],{"class":62},[52,61336,15083],{"class":79},[52,61338,57099],{"class":58},[52,61340,57102],{"class":79},[52,61342,61343,61346,61348,61350,61352],{"class":54,"line":173},[52,61344,61345],{"class":79},"      num ",[52,61347,292],{"class":58},[52,61349,60885],{"class":79},[52,61351,60510],{"class":75},[52,61353,248],{"class":79},[52,61355,61356,61358,61360],{"class":54,"line":181},[52,61357,60894],{"class":79},[52,61359,60897],{"class":75},[52,61361,3236],{"class":79},[52,61363,61364],{"class":54,"line":186},[52,61365,36111],{"class":79},[52,61367,61368,61370,61372],{"class":54,"line":191},[52,61369,55067],{"class":79},[52,61371,54463],{"class":53950},[52,61373,53957],{"class":79},[52,61375,61376,61378,61380],{"class":54,"line":196},[52,61377,54435],{"class":79},[52,61379,54450],{"class":53950},[52,61381,53957],{"class":79},[52,61383,61384],{"class":54,"line":201},[52,61385,123],{"emptyLinePlaceholder":122},[52,61387,61388,61390,61392],{"class":54,"line":206},[52,61389,54435],{"class":79},[52,61391,53285],{"class":53950},[52,61393,53957],{"class":79},[14,61395,61396],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[3195,61398,61400],{"id":61399},"_324-事件监听版本","3.2.4 事件监听版本",[14,61402,61403],{},[4509,61404],{"alt":47,"src":61405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,61407,61408],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,61410,61411],{},"这种方式会覆盖前边的事件监听:",[42,61413,61415],{"className":53283,"code":61414,"language":53285,"meta":47,"style":47},"\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",[49,61416,61417,61427,61441,61445,61453,61467,61487,61499,61507,61511,61519,61531,61539,61557,61571,61582,61586,61598,61608,61612,61620,61628,61632],{"__ignoreMap":47},[52,61418,61419,61421,61423,61425],{"class":54,"line":55},[52,61420,53947],{"class":79},[52,61422,53951],{"class":53950},[52,61424,53954],{"class":75},[52,61426,53957],{"class":79},[52,61428,61429,61431,61433,61435,61437,61439],{"class":54,"line":66},[52,61430,698],{"class":79},[52,61432,53285],{"class":53950},[52,61434,53966],{"class":75},[52,61436,292],{"class":79},[52,61438,53971],{"class":62},[52,61440,53957],{"class":79},[52,61442,61443],{"class":54,"line":83},[52,61444,123],{"emptyLinePlaceholder":122},[52,61446,61447,61449,61451],{"class":54,"line":91},[52,61448,698],{"class":79},[52,61450,53984],{"class":53950},[52,61452,53957],{"class":79},[52,61454,61455,61457,61459,61461,61463,61465],{"class":54,"line":98},[52,61456,54794],{"class":79},[52,61458,53994],{"class":53950},[52,61460,53997],{"class":75},[52,61462,292],{"class":79},[52,61464,54002],{"class":62},[52,61466,53957],{"class":79},[52,61468,61469,61471,61473,61475,61477,61479,61481,61483,61485],{"class":54,"line":107},[52,61470,54794],{"class":79},[52,61472,53994],{"class":53950},[52,61474,17568],{"class":75},[52,61476,292],{"class":79},[52,61478,54041],{"class":62},[52,61480,54021],{"class":75},[52,61482,292],{"class":79},[52,61484,54048],{"class":62},[52,61486,53957],{"class":79},[52,61488,61489,61491,61493,61495,61497],{"class":54,"line":113},[52,61490,54794],{"class":79},[52,61492,54057],{"class":53950},[52,61494,54060],{"class":79},[52,61496,54057],{"class":53950},[52,61498,53957],{"class":79},[52,61500,61501,61503,61505],{"class":54,"line":119},[52,61502,54435],{"class":79},[52,61504,53984],{"class":53950},[52,61506,53957],{"class":79},[52,61508,61509],{"class":54,"line":126},[52,61510,123],{"emptyLinePlaceholder":122},[52,61512,61513,61515,61517],{"class":54,"line":132},[52,61514,698],{"class":79},[52,61516,54450],{"class":53950},[52,61518,53957],{"class":79},[52,61520,61521,61523,61525,61527,61529],{"class":54,"line":138},[52,61522,54794],{"class":79},[52,61524,56537],{"class":53950},[52,61526,56543],{"class":79},[52,61528,56537],{"class":53950},[52,61530,53957],{"class":79},[52,61532,61533,61535,61537],{"class":54,"line":144},[52,61534,54794],{"class":79},[52,61536,54463],{"class":53950},[52,61538,53957],{"class":79},[52,61540,61541,61543,61545,61547,61549,61551,61553,61555],{"class":54,"line":153},[52,61542,13869],{"class":58},[52,61544,57041],{"class":308},[52,61546,16212],{"class":58},[52,61548,57046],{"class":79},[52,61550,57049],{"class":75},[52,61552,1216],{"class":79},[52,61554,60854],{"class":62},[52,61556,708],{"class":79},[52,61558,61559,61561,61564,61566,61569],{"class":54,"line":159},[52,61560,60861],{"class":79},[52,61562,61563],{"class":75},"onclick",[52,61565,16212],{"class":58},[52,61567,61568],{"class":58}," function",[52,61570,57102],{"class":79},[52,61572,61573,61576,61578,61580],{"class":54,"line":167},[52,61574,61575],{"class":75},"      alert",[52,61577,1216],{"class":79},[52,61579,3673],{"class":308},[52,61581,708],{"class":79},[52,61583,61584],{"class":54,"line":173},[52,61585,616],{"class":79},[52,61587,61588,61590,61592,61594,61596],{"class":54,"line":181},[52,61589,60861],{"class":79},[52,61591,61563],{"class":75},[52,61593,16212],{"class":58},[52,61595,61568],{"class":58},[52,61597,57102],{"class":79},[52,61599,61600,61602,61604,61606],{"class":54,"line":186},[52,61601,61575],{"class":75},[52,61603,1216],{"class":79},[52,61605,2433],{"class":308},[52,61607,708],{"class":79},[52,61609,61610],{"class":54,"line":191},[52,61611,616],{"class":79},[52,61613,61614,61616,61618],{"class":54,"line":196},[52,61615,55067],{"class":79},[52,61617,54463],{"class":53950},[52,61619,53957],{"class":79},[52,61621,61622,61624,61626],{"class":54,"line":201},[52,61623,54435],{"class":79},[52,61625,54450],{"class":53950},[52,61627,53957],{"class":79},[52,61629,61630],{"class":54,"line":206},[52,61631,123],{"emptyLinePlaceholder":122},[52,61633,61634,61636,61638],{"class":54,"line":211},[52,61635,54435],{"class":79},[52,61637,53285],{"class":53950},[52,61639,53957],{"class":79},[14,61641,61642],{},"只要点击就输出结果为22,前边11被覆盖了",[42,61644,61646],{"className":53283,"code":61645,"language":53285,"meta":47,"style":47},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[49,61647,61648,61653,61658,61662,61667,61672],{"__ignoreMap":47},[52,61649,61650],{"class":54,"line":55},[52,61651,61652],{"class":79},"  btn.addEventListener('click', function () {\n",[52,61654,61655],{"class":54,"line":66},[52,61656,61657],{"class":79},"      alert(11)\n",[52,61659,61660],{"class":54,"line":83},[52,61661,36111],{"class":79},[52,61663,61664],{"class":54,"line":91},[52,61665,61666],{"class":79},"    btn.addEventListener('click', function () {\n",[52,61668,61669],{"class":54,"line":98},[52,61670,61671],{"class":79},"      alert(22)\n",[52,61673,61674],{"class":54,"line":107},[52,61675,36111],{"class":79},[14,61677,61678],{},"点击第一次输出11,第二次点击为22",[3195,61680,61682],{"id":61681},"_325-事件类型","3.2.5 事件类型",[14,61684,61685],{},[4509,61686],{"alt":47,"src":61687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[24646,61689,61691],{"id":61690},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,61693,61694],{},"补充知识:",[14,61696,61697],{},"轮播图自动播放模块,可以使用",[14,61699,61700],{},"let timerId = setInterval(function () {",[14,61702,61703],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,61705,61706],{},"用js方法模拟进行点击事件,click必须加()",[14,61708,61709],{},"next.click()",[14,61711,61712],{},"}, 1000)",[14,61714,61715],{},[4509,61716],{"alt":47,"src":61717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[42,61719,61721],{"className":55717,"code":61720,"language":55719,"meta":47,"style":47},"\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",[49,61722,61723,61727,61737,61751,61755,61763,61778,61798,61818,61831,61839,61844,61849,61853,61857,61862,61867,61872,61877,61881,61885,61890,61895,61900,61904,61908,61913,61917,61922,61927,61931,61935,61940,61945,61950,61955,61960,61964,61968,61973,61978,61983,61988,61993,61997,62001,62006,62011,62016,62021,62026,62031,62036,62041,62046,62051,62055,62059,62064,62069,62073,62077,62082,62087,62091,62096,62101,62105,62109,62114,62118,62123,62128,62132,62137,62141,62145,62150,62155,62160,62165,62170,62175,62180,62184,62188,62192,62197,62202,62207,62212,62216,62224,62232,62236,62244,62259,62273,62294,62302,62316,62329,62344,62363,62375,62387,62399,62411,62423,62435,62447,62455,62470,62494,62518,62526,62534,62542,62550,62555,62560,62565,62570,62575,62580,62585,62590,62595,62600,62604,62609,62614,62619,62624,62629,62634,62639,62644,62649,62653,62658,62663,62668,62673,62678,62683,62688,62693,62698,62703,62708,62713,62717,62721,62726,62731,62736,62740,62745,62750,62755,62760,62765,62769,62774,62778,62782,62786,62790,62794,62798,62803,62808,62813,62818,62823,62828,62833,62838,62843,62847,62851,62856,62861,62866,62871,62876,62880,62885,62890,62895,62900,62905,62910,62914,62918,62923,62927,62932,62936,62941,62946,62951,62956,62961,62966,62970,62978,62986,62990],{"__ignoreMap":47},[52,61724,61725],{"class":54,"line":55},[52,61726,123],{"emptyLinePlaceholder":122},[52,61728,61729,61731,61733,61735],{"class":54,"line":66},[52,61730,53947],{"class":79},[52,61732,53951],{"class":58},[52,61734,53954],{"class":308},[52,61736,53957],{"class":79},[52,61738,61739,61741,61743,61745,61747,61749],{"class":54,"line":83},[52,61740,698],{"class":79},[52,61742,53285],{"class":53950},[52,61744,53966],{"class":75},[52,61746,292],{"class":79},[52,61748,53971],{"class":62},[52,61750,53957],{"class":79},[52,61752,61753],{"class":54,"line":91},[52,61754,123],{"emptyLinePlaceholder":122},[52,61756,61757,61759,61761],{"class":54,"line":98},[52,61758,698],{"class":79},[52,61760,53984],{"class":53950},[52,61762,53957],{"class":79},[52,61764,61765,61767,61769,61771,61773,61775],{"class":54,"line":107},[52,61766,54794],{"class":79},[52,61768,53994],{"class":53950},[52,61770,53997],{"class":75},[52,61772,292],{"class":79},[52,61774,54002],{"class":62},[52,61776,61777],{"class":79}," \u002F>\n",[52,61779,61780,61782,61784,61786,61788,61790,61792,61794,61796],{"class":54,"line":113},[52,61781,54794],{"class":79},[52,61783,53994],{"class":53950},[52,61785,54013],{"class":75},[52,61787,292],{"class":79},[52,61789,54018],{"class":62},[52,61791,54021],{"class":75},[52,61793,292],{"class":79},[52,61795,54026],{"class":62},[52,61797,61777],{"class":79},[52,61799,61800,61802,61804,61806,61808,61810,61812,61814,61816],{"class":54,"line":119},[52,61801,54794],{"class":79},[52,61803,53994],{"class":53950},[52,61805,17568],{"class":75},[52,61807,292],{"class":79},[52,61809,54041],{"class":62},[52,61811,54021],{"class":75},[52,61813,292],{"class":79},[52,61815,54048],{"class":62},[52,61817,61777],{"class":79},[52,61819,61820,61822,61824,61827,61829],{"class":54,"line":126},[52,61821,54794],{"class":79},[52,61823,54057],{"class":53950},[52,61825,61826],{"class":79},">轮播图点击切换\u003C\u002F",[52,61828,54057],{"class":53950},[52,61830,53957],{"class":79},[52,61832,61833,61835,61837],{"class":54,"line":132},[52,61834,54794],{"class":79},[52,61836,3141],{"class":53950},[52,61838,53957],{"class":79},[52,61840,61841],{"class":54,"line":138},[52,61842,61843],{"class":79},"    * {\n",[52,61845,61846],{"class":54,"line":144},[52,61847,61848],{"class":79},"      box-sizing: border-box;\n",[52,61850,61851],{"class":54,"line":153},[52,61852,616],{"class":79},[52,61854,61855],{"class":54,"line":159},[52,61856,123],{"emptyLinePlaceholder":122},[52,61858,61859],{"class":54,"line":167},[52,61860,61861],{"class":79},"    .slider {\n",[52,61863,61864],{"class":54,"line":173},[52,61865,61866],{"class":79},"      width: 560px;\n",[52,61868,61869],{"class":54,"line":181},[52,61870,61871],{"class":79},"      height: 400px;\n",[52,61873,61874],{"class":54,"line":186},[52,61875,61876],{"class":79},"      overflow: hidden;\n",[52,61878,61879],{"class":54,"line":191},[52,61880,616],{"class":79},[52,61882,61883],{"class":54,"line":196},[52,61884,123],{"emptyLinePlaceholder":122},[52,61886,61887],{"class":54,"line":201},[52,61888,61889],{"class":79},"    .slider-wrapper {\n",[52,61891,61892],{"class":54,"line":206},[52,61893,61894],{"class":79},"      width: 100%;\n",[52,61896,61897],{"class":54,"line":211},[52,61898,61899],{"class":79},"      height: 320px;\n",[52,61901,61902],{"class":54,"line":218},[52,61903,616],{"class":79},[52,61905,61906],{"class":54,"line":223},[52,61907,123],{"emptyLinePlaceholder":122},[52,61909,61910],{"class":54,"line":230},[52,61911,61912],{"class":79},"    .slider-wrapper img {\n",[52,61914,61915],{"class":54,"line":239},[52,61916,61894],{"class":79},[52,61918,61919],{"class":54,"line":251},[52,61920,61921],{"class":79},"      height: 100%;\n",[52,61923,61924],{"class":54,"line":256},[52,61925,61926],{"class":79},"      display: block;\n",[52,61928,61929],{"class":54,"line":262},[52,61930,616],{"class":79},[52,61932,61933],{"class":54,"line":268},[52,61934,123],{"emptyLinePlaceholder":122},[52,61936,61937],{"class":54,"line":280},[52,61938,61939],{"class":79},"    .slider-footer {\n",[52,61941,61942],{"class":54,"line":286},[52,61943,61944],{"class":79},"      height: 80px;\n",[52,61946,61947],{"class":54,"line":300},[52,61948,61949],{"class":79},"      background-color: rgb(100, 67, 68);\n",[52,61951,61952],{"class":54,"line":314},[52,61953,61954],{"class":79},"      padding: 12px 12px 0 12px;\n",[52,61956,61957],{"class":54,"line":327},[52,61958,61959],{"class":79},"      position: relative;\n",[52,61961,61962],{"class":54,"line":333},[52,61963,616],{"class":79},[52,61965,61966],{"class":54,"line":360},[52,61967,123],{"emptyLinePlaceholder":122},[52,61969,61970],{"class":54,"line":365},[52,61971,61972],{"class":79},"    .slider-footer .toggle {\n",[52,61974,61975],{"class":54,"line":371},[52,61976,61977],{"class":79},"      position: absolute;\n",[52,61979,61980],{"class":54,"line":400},[52,61981,61982],{"class":79},"      right: 0;\n",[52,61984,61985],{"class":54,"line":405},[52,61986,61987],{"class":79},"      top: 12px;\n",[52,61989,61990],{"class":54,"line":411},[52,61991,61992],{"class":79},"      display: flex;\n",[52,61994,61995],{"class":54,"line":424},[52,61996,616],{"class":79},[52,61998,61999],{"class":54,"line":436},[52,62000,123],{"emptyLinePlaceholder":122},[52,62002,62003],{"class":54,"line":449},[52,62004,62005],{"class":79},"    .slider-footer .toggle button {\n",[52,62007,62008],{"class":54,"line":2160},[52,62009,62010],{"class":79},"      margin-right: 12px;\n",[52,62012,62013],{"class":54,"line":2186},[52,62014,62015],{"class":79},"      width: 28px;\n",[52,62017,62018],{"class":54,"line":2209},[52,62019,62020],{"class":79},"      height: 28px;\n",[52,62022,62023],{"class":54,"line":2233},[52,62024,62025],{"class":79},"      appearance: none;\n",[52,62027,62028],{"class":54,"line":2238},[52,62029,62030],{"class":79},"      border: none;\n",[52,62032,62033],{"class":54,"line":2243},[52,62034,62035],{"class":79},"      background: rgba(255, 255, 255, 0.1);\n",[52,62037,62038],{"class":54,"line":2248},[52,62039,62040],{"class":79},"      color: #fff;\n",[52,62042,62043],{"class":54,"line":2257},[52,62044,62045],{"class":79},"      border-radius: 4px;\n",[52,62047,62048],{"class":54,"line":2262},[52,62049,62050],{"class":79},"      cursor: pointer;\n",[52,62052,62053],{"class":54,"line":2268},[52,62054,616],{"class":79},[52,62056,62057],{"class":54,"line":2297},[52,62058,123],{"emptyLinePlaceholder":122},[52,62060,62061],{"class":54,"line":2303},[52,62062,62063],{"class":79},"    .slider-footer .toggle button:hover {\n",[52,62065,62066],{"class":54,"line":2318},[52,62067,62068],{"class":79},"      background: rgba(255, 255, 255, 0.2);\n",[52,62070,62071],{"class":54,"line":2324},[52,62072,616],{"class":79},[52,62074,62075],{"class":54,"line":2353},[52,62076,123],{"emptyLinePlaceholder":122},[52,62078,62079],{"class":54,"line":2362},[52,62080,62081],{"class":79},"    .slider-footer p {\n",[52,62083,62084],{"class":54,"line":2368},[52,62085,62086],{"class":79},"      margin: 0;\n",[52,62088,62089],{"class":54,"line":2376},[52,62090,62040],{"class":79},[52,62092,62093],{"class":54,"line":2381},[52,62094,62095],{"class":79},"      font-size: 18px;\n",[52,62097,62098],{"class":54,"line":19252},[52,62099,62100],{"class":79},"      margin-bottom: 10px;\n",[52,62102,62103],{"class":54,"line":19258},[52,62104,616],{"class":79},[52,62106,62107],{"class":54,"line":19281},[52,62108,123],{"emptyLinePlaceholder":122},[52,62110,62111],{"class":54,"line":19287},[52,62112,62113],{"class":79},"    .slider-indicator {\n",[52,62115,62116],{"class":54,"line":19310},[52,62117,62086],{"class":79},[52,62119,62120],{"class":54,"line":19324},[52,62121,62122],{"class":79},"      padding: 0;\n",[52,62124,62125],{"class":54,"line":19344},[52,62126,62127],{"class":79},"      list-style: none;\n",[52,62129,62130],{"class":54,"line":19350},[52,62131,61992],{"class":79},[52,62133,62134],{"class":54,"line":19361},[52,62135,62136],{"class":79},"      align-items: center;\n",[52,62138,62139],{"class":54,"line":19384},[52,62140,616],{"class":79},[52,62142,62143],{"class":54,"line":19406},[52,62144,123],{"emptyLinePlaceholder":122},[52,62146,62147],{"class":54,"line":19411},[52,62148,62149],{"class":79},"    .slider-indicator li {\n",[52,62151,62152],{"class":54,"line":19417},[52,62153,62154],{"class":79},"      width: 8px;\n",[52,62156,62157],{"class":54,"line":19431},[52,62158,62159],{"class":79},"      height: 8px;\n",[52,62161,62162],{"class":54,"line":19444},[52,62163,62164],{"class":79},"      margin: 4px;\n",[52,62166,62167],{"class":54,"line":19449},[52,62168,62169],{"class":79},"      border-radius: 50%;\n",[52,62171,62172],{"class":54,"line":19463},[52,62173,62174],{"class":79},"      background: #fff;\n",[52,62176,62177],{"class":54,"line":19468},[52,62178,62179],{"class":79},"      opacity: 0.4;\n",[52,62181,62182],{"class":54,"line":19474},[52,62183,62050],{"class":79},[52,62185,62186],{"class":54,"line":19479},[52,62187,616],{"class":79},[52,62189,62190],{"class":54,"line":19493},[52,62191,123],{"emptyLinePlaceholder":122},[52,62193,62194],{"class":54,"line":19498},[52,62195,62196],{"class":79},"    .slider-indicator li.active {\n",[52,62198,62199],{"class":54,"line":19503},[52,62200,62201],{"class":79},"      width: 12px;\n",[52,62203,62204],{"class":54,"line":19517},[52,62205,62206],{"class":79},"      height: 12px;\n",[52,62208,62209],{"class":54,"line":19529},[52,62210,62211],{"class":79},"      opacity: 1;\n",[52,62213,62214],{"class":54,"line":19534},[52,62215,616],{"class":79},[52,62217,62218,62220,62222],{"class":54,"line":19547},[52,62219,55067],{"class":79},[52,62221,3141],{"class":53950},[52,62223,53957],{"class":79},[52,62225,62226,62228,62230],{"class":54,"line":19552},[52,62227,54435],{"class":79},[52,62229,53984],{"class":53950},[52,62231,53957],{"class":79},[52,62233,62234],{"class":54,"line":19557},[52,62235,123],{"emptyLinePlaceholder":122},[52,62237,62238,62240,62242],{"class":54,"line":19562},[52,62239,698],{"class":79},[52,62241,54450],{"class":53950},[52,62243,53957],{"class":79},[52,62245,62246,62248,62250,62252,62254,62257],{"class":54,"line":19575},[52,62247,54794],{"class":79},[52,62249,54261],{"class":53950},[52,62251,56136],{"class":75},[52,62253,292],{"class":79},[52,62255,62256],{"class":62},"\"slider\"",[52,62258,53957],{"class":79},[52,62260,62261,62263,62265,62267,62269,62271],{"class":54,"line":19580},[52,62262,53991],{"class":79},[52,62264,54261],{"class":53950},[52,62266,56136],{"class":75},[52,62268,292],{"class":79},[52,62270,57877],{"class":62},[52,62272,53957],{"class":79},[52,62274,62275,62277,62279,62281,62283,62286,62288,62290,62292],{"class":54,"line":35283},[52,62276,57884],{"class":79},[52,62278,4509],{"class":53950},[52,62280,57889],{"class":75},[52,62282,292],{"class":79},[52,62284,62285],{"class":62},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[52,62287,57897],{"class":75},[52,62289,292],{"class":79},[52,62291,10607],{"class":62},[52,62293,61777],{"class":79},[52,62295,62296,62298,62300],{"class":54,"line":35289},[52,62297,54426],{"class":79},[52,62299,54261],{"class":53950},[52,62301,53957],{"class":79},[52,62303,62304,62306,62308,62310,62312,62314],{"class":54,"line":35295},[52,62305,53991],{"class":79},[52,62307,54261],{"class":53950},[52,62309,56136],{"class":75},[52,62311,292],{"class":79},[52,62313,57924],{"class":62},[52,62315,53957],{"class":79},[52,62317,62318,62320,62322,62325,62327],{"class":54,"line":35301},[52,62319,57884],{"class":79},[52,62321,14],{"class":53950},[52,62323,62324],{"class":79},">对人类来说会不会太超前了？\u003C\u002F",[52,62326,14],{"class":53950},[52,62328,53957],{"class":79},[52,62330,62331,62333,62335,62337,62339,62342],{"class":54,"line":35307},[52,62332,57884],{"class":79},[52,62334,29],{"class":53950},[52,62336,56136],{"class":75},[52,62338,292],{"class":79},[52,62340,62341],{"class":62},"\"slider-indicator\"",[52,62343,53957],{"class":79},[52,62345,62346,62348,62350,62352,62354,62357,62359,62361],{"class":54,"line":35318},[52,62347,57952],{"class":79},[52,62349,32],{"class":53950},[52,62351,56136],{"class":75},[52,62353,292],{"class":79},[52,62355,62356],{"class":62},"\"active\"",[52,62358,57964],{"class":79},[52,62360,32],{"class":53950},[52,62362,53957],{"class":79},[52,62364,62365,62367,62369,62371,62373],{"class":54,"line":35324},[52,62366,57952],{"class":79},[52,62368,32],{"class":53950},[52,62370,57964],{"class":79},[52,62372,32],{"class":53950},[52,62374,53957],{"class":79},[52,62376,62377,62379,62381,62383,62385],{"class":54,"line":35344},[52,62378,57952],{"class":79},[52,62380,32],{"class":53950},[52,62382,57964],{"class":79},[52,62384,32],{"class":53950},[52,62386,53957],{"class":79},[52,62388,62389,62391,62393,62395,62397],{"class":54,"line":35350},[52,62390,57952],{"class":79},[52,62392,32],{"class":53950},[52,62394,57964],{"class":79},[52,62396,32],{"class":53950},[52,62398,53957],{"class":79},[52,62400,62401,62403,62405,62407,62409],{"class":54,"line":35361},[52,62402,57952],{"class":79},[52,62404,32],{"class":53950},[52,62406,57964],{"class":79},[52,62408,32],{"class":53950},[52,62410,53957],{"class":79},[52,62412,62413,62415,62417,62419,62421],{"class":54,"line":35367},[52,62414,57952],{"class":79},[52,62416,32],{"class":53950},[52,62418,57964],{"class":79},[52,62420,32],{"class":53950},[52,62422,53957],{"class":79},[52,62424,62425,62427,62429,62431,62433],{"class":54,"line":35373},[52,62426,57952],{"class":79},[52,62428,32],{"class":53950},[52,62430,57964],{"class":79},[52,62432,32],{"class":53950},[52,62434,53957],{"class":79},[52,62436,62437,62439,62441,62443,62445],{"class":54,"line":35379},[52,62438,57952],{"class":79},[52,62440,32],{"class":53950},[52,62442,57964],{"class":79},[52,62444,32],{"class":53950},[52,62446,53957],{"class":79},[52,62448,62449,62451,62453],{"class":54,"line":35385},[52,62450,58057],{"class":79},[52,62452,29],{"class":53950},[52,62454,53957],{"class":79},[52,62456,62457,62459,62461,62463,62465,62468],{"class":54,"line":35391},[52,62458,57884],{"class":79},[52,62460,54261],{"class":53950},[52,62462,56136],{"class":75},[52,62464,292],{"class":79},[52,62466,62467],{"class":62},"\"toggle\"",[52,62469,53957],{"class":79},[52,62471,62472,62474,62476,62478,62480,62483,62485,62488,62490,62492],{"class":54,"line":35397},[52,62473,57952],{"class":79},[52,62475,56537],{"class":53950},[52,62477,56136],{"class":75},[52,62479,292],{"class":79},[52,62481,62482],{"class":62},"\"prev\"",[52,62484,2674],{"class":79},[52,62486,62487],{"class":308},"&lt;",[52,62489,54435],{"class":79},[52,62491,56537],{"class":53950},[52,62493,53957],{"class":79},[52,62495,62496,62498,62500,62502,62504,62507,62509,62512,62514,62516],{"class":54,"line":35403},[52,62497,57952],{"class":79},[52,62499,56537],{"class":53950},[52,62501,56136],{"class":75},[52,62503,292],{"class":79},[52,62505,62506],{"class":62},"\"next\"",[52,62508,2674],{"class":79},[52,62510,62511],{"class":308},"&gt;",[52,62513,54435],{"class":79},[52,62515,56537],{"class":53950},[52,62517,53957],{"class":79},[52,62519,62520,62522,62524],{"class":54,"line":35423},[52,62521,58057],{"class":79},[52,62523,54261],{"class":53950},[52,62525,53957],{"class":79},[52,62527,62528,62530,62532],{"class":54,"line":35429},[52,62529,54426],{"class":79},[52,62531,54261],{"class":53950},[52,62533,53957],{"class":79},[52,62535,62536,62538,62540],{"class":54,"line":35445},[52,62537,55067],{"class":79},[52,62539,54261],{"class":53950},[52,62541,53957],{"class":79},[52,62543,62544,62546,62548],{"class":54,"line":35451},[52,62545,54794],{"class":79},[52,62547,54463],{"class":53950},[52,62549,53957],{"class":79},[52,62551,62552],{"class":54,"line":35465},[52,62553,62554],{"class":79},"    \u002F\u002F 1. 初始数据\n",[52,62556,62557],{"class":54,"line":35471},[52,62558,62559],{"class":79},"    const data = [\n",[52,62561,62562],{"class":54,"line":35486},[52,62563,62564],{"class":79},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[52,62566,62567],{"class":54,"line":35492},[52,62568,62569],{"class":79},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[52,62571,62572],{"class":54,"line":35501},[52,62573,62574],{"class":79},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[52,62576,62577],{"class":54,"line":35507},[52,62578,62579],{"class":79},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[52,62581,62582],{"class":54,"line":35516},[52,62583,62584],{"class":79},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[52,62586,62587],{"class":54,"line":35522},[52,62588,62589],{"class":79},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[52,62591,62592],{"class":54,"line":35528},[52,62593,62594],{"class":79},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[52,62596,62597],{"class":54,"line":35537},[52,62598,62599],{"class":79},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[52,62601,62602],{"class":54,"line":35543},[52,62603,55759],{"class":79},[52,62605,62606],{"class":54,"line":35554},[52,62607,62608],{"class":79},"    \u002F\u002F 获取元素\n",[52,62610,62611],{"class":54,"line":35560},[52,62612,62613],{"class":79},"    const img = document.querySelector('.slider-wrapper img')\n",[52,62615,62616],{"class":54,"line":35579},[52,62617,62618],{"class":79},"    const p = document.querySelector('.slider-footer p')\n",[52,62620,62621],{"class":54,"line":35585},[52,62622,62623],{"class":79},"    const footer = document.querySelector('.slider-footer')\n",[52,62625,62626],{"class":54,"line":35596},[52,62627,62628],{"class":79},"    \u002F\u002F 1. 右按钮业务\n",[52,62630,62631],{"class":54,"line":35602},[52,62632,62633],{"class":79},"    \u002F\u002F 1.1 获取右侧按钮 \n",[52,62635,62636],{"class":54,"line":35622},[52,62637,62638],{"class":79},"    const next = document.querySelector('.next')\n",[52,62640,62641],{"class":54,"line":35638},[52,62642,62643],{"class":79},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[52,62645,62646],{"class":54,"line":35644},[52,62647,62648],{"class":79},"    \u002F\u002F 1.2 注册点击事件\n",[52,62650,62651],{"class":54,"line":35658},[52,62652,123],{"emptyLinePlaceholder":122},[52,62654,62655],{"class":54,"line":35664},[52,62656,62657],{"class":79},"    next.addEventListener('click', function () {\n",[52,62659,62660],{"class":54,"line":35670},[52,62661,62662],{"class":79},"      \u002F\u002F console.log(11)\n",[52,62664,62665],{"class":54,"line":35681},[52,62666,62667],{"class":79},"      i++\n",[52,62669,62670],{"class":54,"line":35687},[52,62671,62672],{"class":79},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[52,62674,62675],{"class":54,"line":35693},[52,62676,62677],{"class":79},"      \u002F\u002F if (i >= 8) {\n",[52,62679,62680],{"class":54,"line":35703},[52,62681,62682],{"class":79},"      \u002F\u002F   i = 0\n",[52,62684,62685],{"class":54,"line":35709},[52,62686,62687],{"class":79},"      \u002F\u002F }\n",[52,62689,62690],{"class":54,"line":35720},[52,62691,62692],{"class":79},"      i = i >= data.length ? 0 : i\n",[52,62694,62695],{"class":54,"line":35726},[52,62696,62697],{"class":79},"      \u002F\u002F 1.3 得到对应的对象\n",[52,62699,62700],{"class":54,"line":35736},[52,62701,62702],{"class":79},"      \u002F\u002F console.log(data[i])\n",[52,62704,62705],{"class":54,"line":35741},[52,62706,62707],{"class":79},"      \u002F\u002F 调用函数\n",[52,62709,62710],{"class":54,"line":35747},[52,62711,62712],{"class":79},"      toggle()\n",[52,62714,62715],{"class":54,"line":35796},[52,62716,36111],{"class":79},[52,62718,62719],{"class":54,"line":35843},[52,62720,123],{"emptyLinePlaceholder":122},[52,62722,62723],{"class":54,"line":35848},[52,62724,62725],{"class":79},"    \u002F\u002F 2. 左侧按钮业务\n",[52,62727,62728],{"class":54,"line":35854},[52,62729,62730],{"class":79},"    \u002F\u002F 2.1 获取左侧按钮 \n",[52,62732,62733],{"class":54,"line":35873},[52,62734,62735],{"class":79},"    const prev = document.querySelector('.prev')\n",[52,62737,62738],{"class":54,"line":35879},[52,62739,62648],{"class":79},[52,62741,62742],{"class":54,"line":35899},[52,62743,62744],{"class":79},"    prev.addEventListener('click', function () {\n",[52,62746,62747],{"class":54,"line":35905},[52,62748,62749],{"class":79},"      i--\n",[52,62751,62752],{"class":54,"line":35911},[52,62753,62754],{"class":79},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[52,62756,62757],{"class":54,"line":35921},[52,62758,62759],{"class":79},"      \u002F\u002F if (i \u003C 0) {\n",[52,62761,62762],{"class":54,"line":35926},[52,62763,62764],{"class":79},"      \u002F\u002F   i = 7\n",[52,62766,62767],{"class":54,"line":35932},[52,62768,62687],{"class":79},[52,62770,62771],{"class":54,"line":35948},[52,62772,62773],{"class":79},"      i = i \u003C 0 ? data.length - 1 : i\n",[52,62775,62776],{"class":54,"line":35993},[52,62777,62697],{"class":79},[52,62779,62780],{"class":54,"line":35999},[52,62781,62702],{"class":79},[52,62783,62784],{"class":54,"line":36005},[52,62785,62707],{"class":79},[52,62787,62788],{"class":54,"line":36011},[52,62789,62712],{"class":79},[52,62791,62792],{"class":54,"line":36022},[52,62793,36111],{"class":79},[52,62795,62796],{"class":54,"line":36028},[52,62797,123],{"emptyLinePlaceholder":122},[52,62799,62800],{"class":54,"line":36034},[52,62801,62802],{"class":79},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[52,62804,62805],{"class":54,"line":36040},[52,62806,62807],{"class":79},"    function toggle() {\n",[52,62809,62810],{"class":54,"line":36058},[52,62811,62812],{"class":79},"      \u002F\u002F 1.4 渲染对应的数据\n",[52,62814,62815],{"class":54,"line":36072},[52,62816,62817],{"class":79},"      img.src = data[i].url\n",[52,62819,62820],{"class":54,"line":36081},[52,62821,62822],{"class":79},"      p.innerHTML = data[i].title\n",[52,62824,62825],{"class":54,"line":36090},[52,62826,62827],{"class":79},"      footer.style.backgroundColor = data[i].color\n",[52,62829,62830],{"class":54,"line":36099},[52,62831,62832],{"class":79},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[52,62834,62835],{"class":54,"line":36108},[52,62836,62837],{"class":79},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[52,62839,62840],{"class":54,"line":36114},[52,62841,62842],{"class":79},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[52,62844,62845],{"class":54,"line":36120},[52,62846,616],{"class":79},[52,62848,62849],{"class":54,"line":36128},[52,62850,123],{"emptyLinePlaceholder":122},[52,62852,62853],{"class":54,"line":36133},[52,62854,62855],{"class":79},"    \u002F\u002F 3. 自动播放模块\n",[52,62857,62858],{"class":54,"line":36139},[52,62859,62860],{"class":79},"    let timerId = setInterval(function () {\n",[52,62862,62863],{"class":54,"line":36150},[52,62864,62865],{"class":79},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[52,62867,62868],{"class":54,"line":36156},[52,62869,62870],{"class":79},"      next.click()\n",[52,62872,62873],{"class":54,"line":36176},[52,62874,62875],{"class":79},"    }, 1000)\n",[52,62877,62878],{"class":54,"line":36182},[52,62879,123],{"emptyLinePlaceholder":122},[52,62881,62882],{"class":54,"line":36188},[52,62883,62884],{"class":79},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[52,62886,62887],{"class":54,"line":36194},[52,62888,62889],{"class":79},"    const slider = document.querySelector('.slider')\n",[52,62891,62892],{"class":54,"line":36211},[52,62893,62894],{"class":79},"    \u002F\u002F 注册事件\n",[52,62896,62897],{"class":54,"line":36217},[52,62898,62899],{"class":79},"    slider.addEventListener('mouseenter', function () {\n",[52,62901,62902],{"class":54,"line":36223},[52,62903,62904],{"class":79},"      \u002F\u002F 停止定时器\n",[52,62906,62907],{"class":54,"line":36229},[52,62908,62909],{"class":79},"      clearInterval(timerId)\n",[52,62911,62912],{"class":54,"line":36235},[52,62913,36111],{"class":79},[52,62915,62916],{"class":54,"line":36241},[52,62917,123],{"emptyLinePlaceholder":122},[52,62919,62920],{"class":54,"line":36268},[52,62921,62922],{"class":79},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[52,62924,62925],{"class":54,"line":36292},[52,62926,62894],{"class":79},[52,62928,62929],{"class":54,"line":36298},[52,62930,62931],{"class":79},"    slider.addEventListener('mouseleave', function () {\n",[52,62933,62934],{"class":54,"line":36304},[52,62935,62904],{"class":79},[52,62937,62938],{"class":54,"line":36310},[52,62939,62940],{"class":79},"      if (timerId) clearInterval(timerId)\n",[52,62942,62943],{"class":54,"line":36321},[52,62944,62945],{"class":79},"      \u002F\u002F 开启定时器\n",[52,62947,62948],{"class":54,"line":36332},[52,62949,62950],{"class":79},"      timerId = setInterval(function () {\n",[52,62952,62953],{"class":54,"line":36338},[52,62954,62955],{"class":79},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[52,62957,62958],{"class":54,"line":36355},[52,62959,62960],{"class":79},"        next.click()\n",[52,62962,62963],{"class":54,"line":36378},[52,62964,62965],{"class":79},"      }, 1000)\n",[52,62967,62968],{"class":54,"line":36401},[52,62969,36111],{"class":79},[52,62971,62972,62974,62976],{"class":54,"line":36407},[52,62973,55067],{"class":79},[52,62975,54463],{"class":53950},[52,62977,53957],{"class":79},[52,62979,62980,62982,62984],{"class":54,"line":36412},[52,62981,54435],{"class":79},[52,62983,54450],{"class":53950},[52,62985,53957],{"class":79},[52,62987,62988],{"class":54,"line":36421},[52,62989,123],{"emptyLinePlaceholder":122},[52,62991,62992,62994,62996],{"class":54,"line":36431},[52,62993,54435],{"class":79},[52,62995,53285],{"class":53950},[52,62997,53957],{"class":79},[24646,62999,63001],{"id":63000},"_3252-焦点事件","3.2.5.2 焦点事件",[14,63003,63004],{},"小米搜索框案例：",[42,63006,63008],{"className":53283,"code":63007,"language":53285,"meta":47,"style":47},"\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",[49,63009,63010,63020,63034,63038,63046,63060,63080,63100,63112,63120,63126,63136,63146,63158,63162,63166,63173,63177,63188,63192,63196,63203,63214,63227,63241,63245,63249,63258,63270,63282,63296,63309,63322,63340,63351,63355,63359,63368,63385,63389,63393,63400,63410,63420,63431,63444,63456,63472,63483,63495,63499,63503,63511,63522,63539,63551,63563,63574,63578,63582,63593,63604,63608,63616,63620,63628,63632,63640,63655,63678,63693,63724,63751,63778,63805,63832,63859,63886,63895,63903,63911,63916,63936,63956,63961,63966,63984,63989,63999,64004,64018,64023,64028,64045,64054,64066,64070,64078,64086,64090],{"__ignoreMap":47},[52,63011,63012,63014,63016,63018],{"class":54,"line":55},[52,63013,53947],{"class":79},[52,63015,53951],{"class":53950},[52,63017,53954],{"class":75},[52,63019,53957],{"class":79},[52,63021,63022,63024,63026,63028,63030,63032],{"class":54,"line":66},[52,63023,698],{"class":79},[52,63025,53285],{"class":53950},[52,63027,53966],{"class":75},[52,63029,292],{"class":79},[52,63031,53971],{"class":62},[52,63033,53957],{"class":79},[52,63035,63036],{"class":54,"line":83},[52,63037,123],{"emptyLinePlaceholder":122},[52,63039,63040,63042,63044],{"class":54,"line":91},[52,63041,698],{"class":79},[52,63043,53984],{"class":53950},[52,63045,53957],{"class":79},[52,63047,63048,63050,63052,63054,63056,63058],{"class":54,"line":98},[52,63049,53991],{"class":79},[52,63051,53994],{"class":53950},[52,63053,53997],{"class":75},[52,63055,292],{"class":79},[52,63057,54002],{"class":62},[52,63059,53957],{"class":79},[52,63061,63062,63064,63066,63068,63070,63072,63074,63076,63078],{"class":54,"line":107},[52,63063,53991],{"class":79},[52,63065,53994],{"class":53950},[52,63067,54013],{"class":75},[52,63069,292],{"class":79},[52,63071,54018],{"class":62},[52,63073,54021],{"class":75},[52,63075,292],{"class":79},[52,63077,54026],{"class":62},[52,63079,53957],{"class":79},[52,63081,63082,63084,63086,63088,63090,63092,63094,63096,63098],{"class":54,"line":113},[52,63083,53991],{"class":79},[52,63085,53994],{"class":53950},[52,63087,17568],{"class":75},[52,63089,292],{"class":79},[52,63091,54041],{"class":62},[52,63093,54021],{"class":75},[52,63095,292],{"class":79},[52,63097,54048],{"class":62},[52,63099,53957],{"class":79},[52,63101,63102,63104,63106,63108,63110],{"class":54,"line":119},[52,63103,53991],{"class":79},[52,63105,54057],{"class":53950},[52,63107,54060],{"class":79},[52,63109,54057],{"class":53950},[52,63111,53957],{"class":79},[52,63113,63114,63116,63118],{"class":54,"line":126},[52,63115,53991],{"class":79},[52,63117,3141],{"class":53950},[52,63119,53957],{"class":79},[52,63121,63122,63124],{"class":54,"line":132},[52,63123,54077],{"class":53950},[52,63125,18220],{"class":79},[52,63127,63128,63130,63132,63134],{"class":54,"line":138},[52,63129,54084],{"class":308},[52,63131,54087],{"class":79},[52,63133,692],{"class":308},[52,63135,80],{"class":79},[52,63137,63138,63140,63142,63144],{"class":54,"line":144},[52,63139,54096],{"class":308},[52,63141,54087],{"class":79},[52,63143,692],{"class":308},[52,63145,80],{"class":79},[52,63147,63148,63151,63153,63156],{"class":54,"line":153},[52,63149,63150],{"class":308},"            box-sizing",[52,63152,54087],{"class":79},[52,63154,63155],{"class":308},"border-box",[52,63157,80],{"class":79},[52,63159,63160],{"class":54,"line":159},[52,63161,2039],{"class":79},[52,63163,63164],{"class":54,"line":167},[52,63165,123],{"emptyLinePlaceholder":122},[52,63167,63168,63171],{"class":54,"line":173},[52,63169,63170],{"class":53950},"        ul",[52,63172,18220],{"class":79},[52,63174,63175],{"class":54,"line":181},[52,63176,123],{"emptyLinePlaceholder":122},[52,63178,63179,63182,63184,63186],{"class":54,"line":186},[52,63180,63181],{"class":308},"            list-style",[52,63183,54087],{"class":79},[52,63185,57387],{"class":308},[52,63187,80],{"class":79},[52,63189,63190],{"class":54,"line":191},[52,63191,2039],{"class":79},[52,63193,63194],{"class":54,"line":196},[52,63195,123],{"emptyLinePlaceholder":122},[52,63197,63198,63201],{"class":54,"line":201},[52,63199,63200],{"class":75},"        .mi",[52,63202,18220],{"class":79},[52,63204,63205,63208,63210,63212],{"class":54,"line":206},[52,63206,63207],{"class":308},"            position",[52,63209,54087],{"class":79},[52,63211,57414],{"class":308},[52,63213,80],{"class":79},[52,63215,63216,63218,63220,63223,63225],{"class":54,"line":211},[52,63217,54134],{"class":308},[52,63219,54087],{"class":79},[52,63221,63222],{"class":308},"223",[52,63224,54142],{"class":58},[52,63226,80],{"class":79},[52,63228,63229,63231,63233,63235,63237,63239],{"class":54,"line":218},[52,63230,54084],{"class":308},[52,63232,54087],{"class":79},[52,63234,591],{"class":308},[52,63236,54142],{"class":58},[52,63238,54206],{"class":308},[52,63240,80],{"class":79},[52,63242,63243],{"class":54,"line":223},[52,63244,2039],{"class":79},[52,63246,63247],{"class":54,"line":230},[52,63248,123],{"emptyLinePlaceholder":122},[52,63250,63251,63253,63256],{"class":54,"line":239},[52,63252,63200],{"class":75},[52,63254,63255],{"class":53950}," input",[52,63257,18220],{"class":79},[52,63259,63260,63262,63264,63266,63268],{"class":54,"line":251},[52,63261,54134],{"class":308},[52,63263,54087],{"class":79},[52,63265,63222],{"class":308},[52,63267,54142],{"class":58},[52,63269,80],{"class":79},[52,63271,63272,63274,63276,63278,63280],{"class":54,"line":256},[52,63273,54149],{"class":308},[52,63275,54087],{"class":79},[52,63277,3804],{"class":308},[52,63279,54142],{"class":58},[52,63281,80],{"class":79},[52,63283,63284,63286,63288,63290,63292,63294],{"class":54,"line":262},[52,63285,54096],{"class":308},[52,63287,54087],{"class":79},[52,63289,692],{"class":308},[52,63291,5051],{"class":308},[52,63293,54142],{"class":58},[52,63295,80],{"class":79},[52,63297,63298,63301,63303,63305,63307],{"class":54,"line":268},[52,63299,63300],{"class":308},"            font-size",[52,63302,54087],{"class":79},[52,63304,3748],{"class":308},[52,63306,54142],{"class":58},[52,63308,80],{"class":79},[52,63310,63311,63314,63316,63318,63320],{"class":54,"line":280},[52,63312,63313],{"class":308},"            line-height",[52,63315,54087],{"class":79},[52,63317,3804],{"class":308},[52,63319,54142],{"class":58},[52,63321,80],{"class":79},[52,63323,63324,63327,63329,63331,63333,63335,63338],{"class":54,"line":286},[52,63325,63326],{"class":308},"            border",[52,63328,54087],{"class":79},[52,63330,629],{"class":308},[52,63332,54142],{"class":58},[52,63334,54171],{"class":308},[52,63336,63337],{"class":308}," #e0e0e0",[52,63339,80],{"class":79},[52,63341,63342,63345,63347,63349],{"class":54,"line":300},[52,63343,63344],{"class":308},"            outline",[52,63346,54087],{"class":79},[52,63348,57387],{"class":308},[52,63350,80],{"class":79},[52,63352,63353],{"class":54,"line":314},[52,63354,2039],{"class":79},[52,63356,63357],{"class":54,"line":327},[52,63358,123],{"emptyLinePlaceholder":122},[52,63360,63361,63363,63366],{"class":54,"line":333},[52,63362,63200],{"class":75},[52,63364,63365],{"class":75}," .search",[52,63367,18220],{"class":79},[52,63369,63370,63372,63374,63376,63378,63380,63383],{"class":54,"line":360},[52,63371,63326],{"class":308},[52,63373,54087],{"class":79},[52,63375,629],{"class":308},[52,63377,54142],{"class":58},[52,63379,54171],{"class":308},[52,63381,63382],{"class":308}," #ff6700",[52,63384,80],{"class":79},[52,63386,63387],{"class":54,"line":365},[52,63388,2039],{"class":79},[52,63390,63391],{"class":54,"line":371},[52,63392,123],{"emptyLinePlaceholder":122},[52,63394,63395,63398],{"class":54,"line":400},[52,63396,63397],{"class":75},"        .result-list",[52,63399,18220],{"class":79},[52,63401,63402,63404,63406,63408],{"class":54,"line":405},[52,63403,54122],{"class":308},[52,63405,54087],{"class":79},[52,63407,57387],{"class":308},[52,63409,80],{"class":79},[52,63411,63412,63414,63416,63418],{"class":54,"line":411},[52,63413,63207],{"class":308},[52,63415,54087],{"class":79},[52,63417,57481],{"class":308},[52,63419,80],{"class":79},[52,63421,63422,63425,63427,63429],{"class":54,"line":424},[52,63423,63424],{"class":308},"            left",[52,63426,54087],{"class":79},[52,63428,692],{"class":308},[52,63430,80],{"class":79},[52,63432,63433,63436,63438,63440,63442],{"class":54,"line":436},[52,63434,63435],{"class":308},"            top",[52,63437,54087],{"class":79},[52,63439,3804],{"class":308},[52,63441,54142],{"class":58},[52,63443,80],{"class":79},[52,63445,63446,63448,63450,63452,63454],{"class":54,"line":449},[52,63447,54134],{"class":308},[52,63449,54087],{"class":79},[52,63451,63222],{"class":308},[52,63453,54142],{"class":58},[52,63455,80],{"class":79},[52,63457,63458,63460,63462,63464,63466,63468,63470],{"class":54,"line":2160},[52,63459,63326],{"class":308},[52,63461,54087],{"class":79},[52,63463,629],{"class":308},[52,63465,54142],{"class":58},[52,63467,54171],{"class":308},[52,63469,63382],{"class":308},[52,63471,80],{"class":79},[52,63473,63474,63477,63479,63481],{"class":54,"line":2186},[52,63475,63476],{"class":308},"            border-top",[52,63478,54087],{"class":79},[52,63480,692],{"class":308},[52,63482,80],{"class":79},[52,63484,63485,63488,63490,63493],{"class":54,"line":2209},[52,63486,63487],{"class":308},"            background",[52,63489,54087],{"class":79},[52,63491,63492],{"class":308},"#fff",[52,63494,80],{"class":79},[52,63496,63497],{"class":54,"line":2233},[52,63498,2039],{"class":79},[52,63500,63501],{"class":54,"line":2238},[52,63502,123],{"emptyLinePlaceholder":122},[52,63504,63505,63507,63509],{"class":54,"line":2243},[52,63506,63397],{"class":75},[52,63508,4446],{"class":53950},[52,63510,18220],{"class":79},[52,63512,63513,63515,63517,63520],{"class":54,"line":2248},[52,63514,54122],{"class":308},[52,63516,54087],{"class":79},[52,63518,63519],{"class":308},"block",[52,63521,80],{"class":79},[52,63523,63524,63526,63528,63530,63532,63535,63537],{"class":54,"line":2257},[52,63525,54096],{"class":308},[52,63527,54087],{"class":79},[52,63529,1125],{"class":308},[52,63531,54142],{"class":58},[52,63533,63534],{"class":308}," 15",[52,63536,54142],{"class":58},[52,63538,80],{"class":79},[52,63540,63541,63543,63545,63547,63549],{"class":54,"line":2262},[52,63542,63300],{"class":308},[52,63544,54087],{"class":79},[52,63546,3698],{"class":308},[52,63548,54142],{"class":58},[52,63550,80],{"class":79},[52,63552,63553,63556,63558,63561],{"class":54,"line":2268},[52,63554,63555],{"class":308},"            color",[52,63557,54087],{"class":79},[52,63559,63560],{"class":308},"#424242",[52,63562,80],{"class":79},[52,63564,63565,63568,63570,63572],{"class":54,"line":2297},[52,63566,63567],{"class":308},"            text-decoration",[52,63569,54087],{"class":79},[52,63571,57387],{"class":308},[52,63573,80],{"class":79},[52,63575,63576],{"class":54,"line":2303},[52,63577,2039],{"class":79},[52,63579,63580],{"class":54,"line":2318},[52,63581,123],{"emptyLinePlaceholder":122},[52,63583,63584,63586,63588,63591],{"class":54,"line":2324},[52,63585,63397],{"class":75},[52,63587,4446],{"class":53950},[52,63589,63590],{"class":75},":hover",[52,63592,18220],{"class":79},[52,63594,63595,63597,63599,63602],{"class":54,"line":2353},[52,63596,54290],{"class":308},[52,63598,54087],{"class":79},[52,63600,63601],{"class":308},"#eee",[52,63603,80],{"class":79},[52,63605,63606],{"class":54,"line":2362},[52,63607,2039],{"class":79},[52,63609,63610,63612,63614],{"class":54,"line":2368},[52,63611,54426],{"class":79},[52,63613,3141],{"class":53950},[52,63615,53957],{"class":79},[52,63617,63618],{"class":54,"line":2376},[52,63619,123],{"emptyLinePlaceholder":122},[52,63621,63622,63624,63626],{"class":54,"line":2381},[52,63623,54435],{"class":79},[52,63625,53984],{"class":53950},[52,63627,53957],{"class":79},[52,63629,63630],{"class":54,"line":19252},[52,63631,123],{"emptyLinePlaceholder":122},[52,63633,63634,63636,63638],{"class":54,"line":19258},[52,63635,698],{"class":79},[52,63637,54450],{"class":53950},[52,63639,53957],{"class":79},[52,63641,63642,63644,63646,63648,63650,63653],{"class":54,"line":19281},[52,63643,53991],{"class":79},[52,63645,54261],{"class":53950},[52,63647,56136],{"class":75},[52,63649,292],{"class":79},[52,63651,63652],{"class":62},"\"mi\"",[52,63654,53957],{"class":79},[52,63656,63657,63659,63661,63663,63665,63668,63671,63673,63676],{"class":54,"line":19287},[52,63658,57952],{"class":79},[52,63660,56471],{"class":53950},[52,63662,56474],{"class":75},[52,63664,292],{"class":79},[52,63666,63667],{"class":62},"\"search\"",[52,63669,63670],{"class":75}," placeholder",[52,63672,292],{"class":79},[52,63674,63675],{"class":62},"\"小米笔记本\"",[52,63677,53957],{"class":79},[52,63679,63680,63682,63684,63686,63688,63691],{"class":54,"line":19310},[52,63681,57952],{"class":79},[52,63683,29],{"class":53950},[52,63685,56136],{"class":75},[52,63687,292],{"class":79},[52,63689,63690],{"class":62},"\"result-list\"",[52,63692,53957],{"class":79},[52,63694,63695,63698,63700,63703,63705,63708,63710,63713,63716,63718,63720,63722],{"class":54,"line":19324},[52,63696,63697],{"class":79},"            \u003C",[52,63699,32],{"class":53950},[52,63701,63702],{"class":79},">\u003C",[52,63704,3451],{"class":53950},[52,63706,63707],{"class":75}," href",[52,63709,292],{"class":79},[52,63711,63712],{"class":62},"\"#\"",[52,63714,63715],{"class":79},">全部商品\u003C\u002F",[52,63717,3451],{"class":53950},[52,63719,57964],{"class":79},[52,63721,32],{"class":53950},[52,63723,53957],{"class":79},[52,63725,63726,63728,63730,63732,63734,63736,63738,63740,63743,63745,63747,63749],{"class":54,"line":19344},[52,63727,63697],{"class":79},[52,63729,32],{"class":53950},[52,63731,63702],{"class":79},[52,63733,3451],{"class":53950},[52,63735,63707],{"class":75},[52,63737,292],{"class":79},[52,63739,63712],{"class":62},[52,63741,63742],{"class":79},">小米11\u003C\u002F",[52,63744,3451],{"class":53950},[52,63746,57964],{"class":79},[52,63748,32],{"class":53950},[52,63750,53957],{"class":79},[52,63752,63753,63755,63757,63759,63761,63763,63765,63767,63770,63772,63774,63776],{"class":54,"line":19350},[52,63754,63697],{"class":79},[52,63756,32],{"class":53950},[52,63758,63702],{"class":79},[52,63760,3451],{"class":53950},[52,63762,63707],{"class":75},[52,63764,292],{"class":79},[52,63766,63712],{"class":62},[52,63768,63769],{"class":79},">小米10S\u003C\u002F",[52,63771,3451],{"class":53950},[52,63773,57964],{"class":79},[52,63775,32],{"class":53950},[52,63777,53957],{"class":79},[52,63779,63780,63782,63784,63786,63788,63790,63792,63794,63797,63799,63801,63803],{"class":54,"line":19361},[52,63781,63697],{"class":79},[52,63783,32],{"class":53950},[52,63785,63702],{"class":79},[52,63787,3451],{"class":53950},[52,63789,63707],{"class":75},[52,63791,292],{"class":79},[52,63793,63712],{"class":62},[52,63795,63796],{"class":79},">小米笔记本\u003C\u002F",[52,63798,3451],{"class":53950},[52,63800,57964],{"class":79},[52,63802,32],{"class":53950},[52,63804,53957],{"class":79},[52,63806,63807,63809,63811,63813,63815,63817,63819,63821,63824,63826,63828,63830],{"class":54,"line":19384},[52,63808,63697],{"class":79},[52,63810,32],{"class":53950},[52,63812,63702],{"class":79},[52,63814,3451],{"class":53950},[52,63816,63707],{"class":75},[52,63818,292],{"class":79},[52,63820,63712],{"class":62},[52,63822,63823],{"class":79},">小米手机\u003C\u002F",[52,63825,3451],{"class":53950},[52,63827,57964],{"class":79},[52,63829,32],{"class":53950},[52,63831,53957],{"class":79},[52,63833,63834,63836,63838,63840,63842,63844,63846,63848,63851,63853,63855,63857],{"class":54,"line":19406},[52,63835,63697],{"class":79},[52,63837,32],{"class":53950},[52,63839,63702],{"class":79},[52,63841,3451],{"class":53950},[52,63843,63707],{"class":75},[52,63845,292],{"class":79},[52,63847,63712],{"class":62},[52,63849,63850],{"class":79},">黑鲨4\u003C\u002F",[52,63852,3451],{"class":53950},[52,63854,57964],{"class":79},[52,63856,32],{"class":53950},[52,63858,53957],{"class":79},[52,63860,63861,63863,63865,63867,63869,63871,63873,63875,63878,63880,63882,63884],{"class":54,"line":19411},[52,63862,63697],{"class":79},[52,63864,32],{"class":53950},[52,63866,63702],{"class":79},[52,63868,3451],{"class":53950},[52,63870,63707],{"class":75},[52,63872,292],{"class":79},[52,63874,63712],{"class":62},[52,63876,63877],{"class":79},">空调\u003C\u002F",[52,63879,3451],{"class":53950},[52,63881,57964],{"class":79},[52,63883,32],{"class":53950},[52,63885,53957],{"class":79},[52,63887,63888,63891,63893],{"class":54,"line":19417},[52,63889,63890],{"class":79},"        \u003C\u002F",[52,63892,29],{"class":53950},[52,63894,53957],{"class":79},[52,63896,63897,63899,63901],{"class":54,"line":19431},[52,63898,54426],{"class":79},[52,63900,54261],{"class":53950},[52,63902,53957],{"class":79},[52,63904,63905,63907,63909],{"class":54,"line":19444},[52,63906,53991],{"class":79},[52,63908,54463],{"class":53950},[52,63910,53957],{"class":79},[52,63912,63913],{"class":54,"line":19449},[52,63914,63915],{"class":94},"        \u002F\u002F 1. 获取元素\n",[52,63917,63918,63921,63923,63925,63927,63929,63931,63934],{"class":54,"line":19463},[52,63919,63920],{"class":58},"        const",[52,63922,63255],{"class":308},[52,63924,16212],{"class":58},[52,63926,57046],{"class":79},[52,63928,57049],{"class":75},[52,63930,1216],{"class":79},[52,63932,63933],{"class":62},"'[type=search]'",[52,63935,708],{"class":79},[52,63937,63938,63940,63943,63945,63947,63949,63951,63954],{"class":54,"line":19468},[52,63939,63920],{"class":58},[52,63941,63942],{"class":308}," ul",[52,63944,16212],{"class":58},[52,63946,57046],{"class":79},[52,63948,57049],{"class":75},[52,63950,1216],{"class":79},[52,63952,63953],{"class":62},"'.result-list'",[52,63955,708],{"class":79},[52,63957,63958],{"class":54,"line":19474},[52,63959,63960],{"class":94},"        \u002F\u002F console.log(input)\n",[52,63962,63963],{"class":54,"line":19479},[52,63964,63965],{"class":94},"        \u002F\u002F 2. 监听事件 获得焦点\n",[52,63967,63968,63971,63973,63975,63978,63980,63982],{"class":54,"line":19493},[52,63969,63970],{"class":79},"        input.",[52,63972,60463],{"class":75},[52,63974,1216],{"class":79},[52,63976,63977],{"class":62},"'focus'",[52,63979,15083],{"class":79},[52,63981,57099],{"class":58},[52,63983,57102],{"class":79},[52,63985,63986],{"class":54,"line":19498},[52,63987,63988],{"class":94},"            \u002F\u002F ul显示\n",[52,63990,63991,63994,63996],{"class":54,"line":19503},[52,63992,63993],{"class":79},"            ul.style.display ",[52,63995,292],{"class":58},[52,63997,63998],{"class":62}," 'block'\n",[52,64000,64001],{"class":54,"line":19517},[52,64002,64003],{"class":94},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[52,64005,64006,64009,64011,64013,64016],{"class":54,"line":19529},[52,64007,64008],{"class":79},"            input.classList.",[52,64010,8300],{"class":75},[52,64012,1216],{"class":79},[52,64014,64015],{"class":62},"'search'",[52,64017,708],{"class":79},[52,64019,64020],{"class":54,"line":19534},[52,64021,64022],{"class":79},"        })\n",[52,64024,64025],{"class":54,"line":19547},[52,64026,64027],{"class":94},"        \u002F\u002F 3. 监听事件 失去焦点\n",[52,64029,64030,64032,64034,64036,64039,64041,64043],{"class":54,"line":19552},[52,64031,63970],{"class":79},[52,64033,60463],{"class":75},[52,64035,1216],{"class":79},[52,64037,64038],{"class":62},"'blur'",[52,64040,15083],{"class":79},[52,64042,57099],{"class":58},[52,64044,57102],{"class":79},[52,64046,64047,64049,64051],{"class":54,"line":19557},[52,64048,63993],{"class":79},[52,64050,292],{"class":58},[52,64052,64053],{"class":62}," 'none'\n",[52,64055,64056,64058,64060,64062,64064],{"class":54,"line":19562},[52,64057,64008],{"class":79},[52,64059,59656],{"class":75},[52,64061,1216],{"class":79},[52,64063,64015],{"class":62},[52,64065,708],{"class":79},[52,64067,64068],{"class":54,"line":19575},[52,64069,64022],{"class":79},[52,64071,64072,64074,64076],{"class":54,"line":19580},[52,64073,54426],{"class":79},[52,64075,54463],{"class":53950},[52,64077,53957],{"class":79},[52,64079,64080,64082,64084],{"class":54,"line":35283},[52,64081,54435],{"class":79},[52,64083,54450],{"class":53950},[52,64085,53957],{"class":79},[52,64087,64088],{"class":54,"line":35289},[52,64089,123],{"emptyLinePlaceholder":122},[52,64091,64092,64094,64096],{"class":54,"line":35295},[52,64093,54435],{"class":79},[52,64095,53285],{"class":53950},[52,64097,53957],{"class":79},[24646,64099,64101],{"id":64100},"_3253-键盘事件","3.2.5.3 键盘事件",[14,64103,64104],{},"评论字数统计案例",[14,64106,64107],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,64109,64110],{},"牢记focus伪类选择器",[53994,64112],{"charSet":64113},"UTF-8",[53994,64115],{"name":64116,"content":64117},"viewport","width=device-width, initial-scale=1.0",[54057,64119,64120],{},"Document",[3141,64122,64123],{},"\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",[56471,64125],{"type":8154},[29,64127,64128,64131],{},[32,64129,64130],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[32,64132,64133],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[42,64135,64137],{"className":53283,"code":64136,"language":53285,"meta":47,"style":47},"\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",[49,64138,64139,64149,64163,64167,64175,64189,64209,64229,64242,64250,64257,64270,64284,64294,64304,64308,64312,64319,64331,64343,64355,64367,64396,64409,64413,64417,64426,64437,64449,64460,64471,64483,64494,64506,64522,64534,64538,64542,64553,64564,64574,64586,64590,64594,64602,64613,64623,64634,64646,64659,64671,64683,64687,64691,64700,64712,64723,64736,64747,64761,64765,64769,64776,64788,64800,64810,64814,64818,64827,64839,64849,64853,64857,64868,64878,64897,64910,64914,64918,64928,64938,64942,64946,64957,64968,64980,64992,64996,65000,65011,65022,65036,65040,65044,65055,65065,65077,65081,65089,65097,65101,65109,65124,65143,65183,65196,65204,65218,65238,65246,65261,65284,65302,65317,65337,65357,65377,65385,65393,65401,65409,65429,65449,65454,65471,65480,65484,65489,65505,65513,65517,65522,65539,65544,65569,65573,65577,65582,65587,65595,65603,65607],{"__ignoreMap":47},[52,64140,64141,64143,64145,64147],{"class":54,"line":55},[52,64142,53947],{"class":79},[52,64144,53951],{"class":53950},[52,64146,53954],{"class":75},[52,64148,53957],{"class":79},[52,64150,64151,64153,64155,64157,64159,64161],{"class":54,"line":66},[52,64152,698],{"class":79},[52,64154,53285],{"class":53950},[52,64156,53966],{"class":75},[52,64158,292],{"class":79},[52,64160,53971],{"class":62},[52,64162,53957],{"class":79},[52,64164,64165],{"class":54,"line":83},[52,64166,123],{"emptyLinePlaceholder":122},[52,64168,64169,64171,64173],{"class":54,"line":91},[52,64170,698],{"class":79},[52,64172,53984],{"class":53950},[52,64174,53957],{"class":79},[52,64176,64177,64179,64181,64183,64185,64187],{"class":54,"line":98},[52,64178,54794],{"class":79},[52,64180,53994],{"class":53950},[52,64182,53997],{"class":75},[52,64184,292],{"class":79},[52,64186,54002],{"class":62},[52,64188,53957],{"class":79},[52,64190,64191,64193,64195,64197,64199,64201,64203,64205,64207],{"class":54,"line":107},[52,64192,54794],{"class":79},[52,64194,53994],{"class":53950},[52,64196,54013],{"class":75},[52,64198,292],{"class":79},[52,64200,54018],{"class":62},[52,64202,54021],{"class":75},[52,64204,292],{"class":79},[52,64206,54026],{"class":62},[52,64208,53957],{"class":79},[52,64210,64211,64213,64215,64217,64219,64221,64223,64225,64227],{"class":54,"line":113},[52,64212,54794],{"class":79},[52,64214,53994],{"class":53950},[52,64216,17568],{"class":75},[52,64218,292],{"class":79},[52,64220,54041],{"class":62},[52,64222,54021],{"class":75},[52,64224,292],{"class":79},[52,64226,54048],{"class":62},[52,64228,53957],{"class":79},[52,64230,64231,64233,64235,64238,64240],{"class":54,"line":119},[52,64232,54794],{"class":79},[52,64234,54057],{"class":53950},[52,64236,64237],{"class":79},">评论回车发布\u003C\u002F",[52,64239,54057],{"class":53950},[52,64241,53957],{"class":79},[52,64243,64244,64246,64248],{"class":54,"line":126},[52,64245,54794],{"class":79},[52,64247,3141],{"class":53950},[52,64249,53957],{"class":79},[52,64251,64252,64255],{"class":54,"line":132},[52,64253,64254],{"class":75},"    .wrapper",[52,64256,18220],{"class":79},[52,64258,64259,64262,64264,64266,64268],{"class":54,"line":138},[52,64260,64261],{"class":308},"      min-width",[52,64263,54087],{"class":79},[52,64265,6965],{"class":308},[52,64267,54142],{"class":58},[52,64269,80],{"class":79},[52,64271,64272,64275,64277,64280,64282],{"class":54,"line":144},[52,64273,64274],{"class":308},"      max-width",[52,64276,54087],{"class":79},[52,64278,64279],{"class":308},"800",[52,64281,54142],{"class":58},[52,64283,80],{"class":79},[52,64285,64286,64288,64290,64292],{"class":54,"line":153},[52,64287,57659],{"class":308},[52,64289,54087],{"class":79},[52,64291,54127],{"class":308},[52,64293,80],{"class":79},[52,64295,64296,64298,64300,64302],{"class":54,"line":159},[52,64297,57670],{"class":308},[52,64299,54087],{"class":79},[52,64301,54230],{"class":308},[52,64303,80],{"class":79},[52,64305,64306],{"class":54,"line":167},[52,64307,616],{"class":79},[52,64309,64310],{"class":54,"line":173},[52,64311,123],{"emptyLinePlaceholder":122},[52,64313,64314,64317],{"class":54,"line":181},[52,64315,64316],{"class":75},"    .avatar",[52,64318,18220],{"class":79},[52,64320,64321,64323,64325,64327,64329],{"class":54,"line":186},[52,64322,57421],{"class":308},[52,64324,54087],{"class":79},[52,64326,3804],{"class":308},[52,64328,54142],{"class":58},[52,64330,80],{"class":79},[52,64332,64333,64335,64337,64339,64341],{"class":54,"line":191},[52,64334,57435],{"class":308},[52,64336,54087],{"class":79},[52,64338,3804],{"class":308},[52,64340,54142],{"class":58},[52,64342,80],{"class":79},[52,64344,64345,64347,64349,64351,64353],{"class":54,"line":196},[52,64346,57784],{"class":308},[52,64348,54087],{"class":79},[52,64350,3852],{"class":308},[52,64352,1998],{"class":58},[52,64354,80],{"class":79},[52,64356,64357,64360,64362,64365],{"class":54,"line":201},[52,64358,64359],{"class":308},"      overflow",[52,64361,54087],{"class":79},[52,64363,64364],{"class":308},"hidden",[52,64366,80],{"class":79},[52,64368,64369,64372,64374,64377,64379,64382,64384,64387,64389,64391,64394],{"class":54,"line":206},[52,64370,64371],{"class":308},"      background",[52,64373,54087],{"class":79},[52,64375,64376],{"class":308},"url",[52,64378,1216],{"class":79},[52,64380,64381],{"class":1223},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[52,64383,16362],{"class":79},[52,64385,64386],{"class":308},"no-repeat",[52,64388,19792],{"class":308},[52,64390,27628],{"class":79},[52,64392,64393],{"class":308},"cover",[52,64395,80],{"class":79},[52,64397,64398,64401,64403,64405,64407],{"class":54,"line":211},[52,64399,64400],{"class":308},"      margin-right",[52,64402,54087],{"class":79},[52,64404,444],{"class":308},[52,64406,54142],{"class":58},[52,64408,80],{"class":79},[52,64410,64411],{"class":54,"line":218},[52,64412,616],{"class":79},[52,64414,64415],{"class":54,"line":223},[52,64416,123],{"emptyLinePlaceholder":122},[52,64418,64419,64421,64424],{"class":54,"line":230},[52,64420,64254],{"class":75},[52,64422,64423],{"class":53950}," textarea",[52,64425,18220],{"class":79},[52,64427,64428,64431,64433,64435],{"class":54,"line":239},[52,64429,64430],{"class":308},"      outline",[52,64432,54087],{"class":79},[52,64434,57387],{"class":308},[52,64436,80],{"class":79},[52,64438,64439,64442,64444,64447],{"class":54,"line":251},[52,64440,64441],{"class":308},"      border-color",[52,64443,54087],{"class":79},[52,64445,64446],{"class":308},"transparent",[52,64448,80],{"class":79},[52,64450,64451,64454,64456,64458],{"class":54,"line":256},[52,64452,64453],{"class":308},"      resize",[52,64455,54087],{"class":79},[52,64457,57387],{"class":308},[52,64459,80],{"class":79},[52,64461,64462,64464,64466,64469],{"class":54,"line":262},[52,64463,64371],{"class":308},[52,64465,54087],{"class":79},[52,64467,64468],{"class":308},"#f5f5f5",[52,64470,80],{"class":79},[52,64472,64473,64475,64477,64479,64481],{"class":54,"line":268},[52,64474,57784],{"class":308},[52,64476,54087],{"class":79},[52,64478,3504],{"class":308},[52,64480,54142],{"class":58},[52,64482,80],{"class":79},[52,64484,64485,64488,64490,64492],{"class":54,"line":280},[52,64486,64487],{"class":308},"      flex",[52,64489,54087],{"class":79},[52,64491,629],{"class":308},[52,64493,80],{"class":79},[52,64495,64496,64498,64500,64502,64504],{"class":54,"line":286},[52,64497,57345],{"class":308},[52,64499,54087],{"class":79},[52,64501,3649],{"class":308},[52,64503,54142],{"class":58},[52,64505,80],{"class":79},[52,64507,64508,64511,64513,64515,64518,64520],{"class":54,"line":300},[52,64509,64510],{"class":308},"      transition",[52,64512,54087],{"class":79},[52,64514,30771],{"class":308},[52,64516,64517],{"class":308}," 0.5",[52,64519,1291],{"class":58},[52,64521,80],{"class":79},[52,64523,64524,64526,64528,64530,64532],{"class":54,"line":314},[52,64525,57435],{"class":308},[52,64527,54087],{"class":79},[52,64529,4137],{"class":308},[52,64531,54142],{"class":58},[52,64533,80],{"class":79},[52,64535,64536],{"class":54,"line":327},[52,64537,616],{"class":79},[52,64539,64540],{"class":54,"line":333},[52,64541,123],{"emptyLinePlaceholder":122},[52,64543,64544,64546,64548,64551],{"class":54,"line":360},[52,64545,64254],{"class":75},[52,64547,64423],{"class":53950},[52,64549,64550],{"class":75},":focus",[52,64552,18220],{"class":79},[52,64554,64555,64557,64559,64562],{"class":54,"line":365},[52,64556,64441],{"class":308},[52,64558,54087],{"class":79},[52,64560,64561],{"class":308},"#e4e4e4",[52,64563,80],{"class":79},[52,64565,64566,64568,64570,64572],{"class":54,"line":371},[52,64567,64371],{"class":308},[52,64569,54087],{"class":79},[52,64571,63492],{"class":308},[52,64573,80],{"class":79},[52,64575,64576,64578,64580,64582,64584],{"class":54,"line":400},[52,64577,57435],{"class":308},[52,64579,54087],{"class":79},[52,64581,3852],{"class":308},[52,64583,54142],{"class":58},[52,64585,80],{"class":79},[52,64587,64588],{"class":54,"line":405},[52,64589,616],{"class":79},[52,64591,64592],{"class":54,"line":411},[52,64593,123],{"emptyLinePlaceholder":122},[52,64595,64596,64598,64600],{"class":54,"line":424},[52,64597,64254],{"class":75},[52,64599,60117],{"class":53950},[52,64601,18220],{"class":79},[52,64603,64604,64606,64608,64611],{"class":54,"line":436},[52,64605,64371],{"class":308},[52,64607,54087],{"class":79},[52,64609,64610],{"class":308},"#00aeec",[52,64612,80],{"class":79},[52,64614,64615,64617,64619,64621],{"class":54,"line":449},[52,64616,60066],{"class":308},[52,64618,54087],{"class":79},[52,64620,63492],{"class":308},[52,64622,80],{"class":79},[52,64624,64625,64628,64630,64632],{"class":54,"line":2160},[52,64626,64627],{"class":308},"      border",[52,64629,54087],{"class":79},[52,64631,57387],{"class":308},[52,64633,80],{"class":79},[52,64635,64636,64638,64640,64642,64644],{"class":54,"line":2186},[52,64637,57784],{"class":308},[52,64639,54087],{"class":79},[52,64641,3504],{"class":308},[52,64643,54142],{"class":58},[52,64645,80],{"class":79},[52,64647,64648,64651,64653,64655,64657],{"class":54,"line":2209},[52,64649,64650],{"class":308},"      margin-left",[52,64652,54087],{"class":79},[52,64654,3649],{"class":308},[52,64656,54142],{"class":58},[52,64658,80],{"class":79},[52,64660,64661,64663,64665,64667,64669],{"class":54,"line":2233},[52,64662,57421],{"class":308},[52,64664,54087],{"class":79},[52,64666,3562],{"class":308},[52,64668,54142],{"class":58},[52,64670,80],{"class":79},[52,64672,64673,64676,64678,64681],{"class":54,"line":2238},[52,64674,64675],{"class":308},"      cursor",[52,64677,54087],{"class":79},[52,64679,64680],{"class":308},"pointer",[52,64682,80],{"class":79},[52,64684,64685],{"class":54,"line":2243},[52,64686,616],{"class":79},[52,64688,64689],{"class":54,"line":2248},[52,64690,123],{"emptyLinePlaceholder":122},[52,64692,64693,64695,64698],{"class":54,"line":2257},[52,64694,64254],{"class":75},[52,64696,64697],{"class":75}," .total",[52,64699,18220],{"class":79},[52,64701,64702,64704,64706,64708,64710],{"class":54,"line":2262},[52,64703,64400],{"class":308},[52,64705,54087],{"class":79},[52,64707,3809],{"class":308},[52,64709,54142],{"class":58},[52,64711,80],{"class":79},[52,64713,64714,64716,64718,64721],{"class":54,"line":2268},[52,64715,60066],{"class":308},[52,64717,54087],{"class":79},[52,64719,64720],{"class":308},"#999",[52,64722,80],{"class":79},[52,64724,64725,64728,64730,64732,64734],{"class":54,"line":2297},[52,64726,64727],{"class":308},"      margin-top",[52,64729,54087],{"class":79},[52,64731,1805],{"class":308},[52,64733,54142],{"class":58},[52,64735,80],{"class":79},[52,64737,64738,64741,64743,64745],{"class":54,"line":2303},[52,64739,64740],{"class":308},"      opacity",[52,64742,54087],{"class":79},[52,64744,692],{"class":308},[52,64746,80],{"class":79},[52,64748,64749,64751,64753,64755,64757,64759],{"class":54,"line":2318},[52,64750,64510],{"class":308},[52,64752,54087],{"class":79},[52,64754,30771],{"class":308},[52,64756,64517],{"class":308},[52,64758,1291],{"class":58},[52,64760,80],{"class":79},[52,64762,64763],{"class":54,"line":2324},[52,64764,616],{"class":79},[52,64766,64767],{"class":54,"line":2353},[52,64768,123],{"emptyLinePlaceholder":122},[52,64770,64771,64774],{"class":54,"line":2362},[52,64772,64773],{"class":75},"    .list",[52,64775,18220],{"class":79},[52,64777,64778,64780,64782,64784,64786],{"class":54,"line":2368},[52,64779,64261],{"class":308},[52,64781,54087],{"class":79},[52,64783,6965],{"class":308},[52,64785,54142],{"class":58},[52,64787,80],{"class":79},[52,64789,64790,64792,64794,64796,64798],{"class":54,"line":2376},[52,64791,64274],{"class":308},[52,64793,54087],{"class":79},[52,64795,64279],{"class":308},[52,64797,54142],{"class":58},[52,64799,80],{"class":79},[52,64801,64802,64804,64806,64808],{"class":54,"line":2381},[52,64803,57659],{"class":308},[52,64805,54087],{"class":79},[52,64807,54127],{"class":308},[52,64809,80],{"class":79},[52,64811,64812],{"class":54,"line":19252},[52,64813,616],{"class":79},[52,64815,64816],{"class":54,"line":19258},[52,64817,123],{"emptyLinePlaceholder":122},[52,64819,64820,64822,64825],{"class":54,"line":19281},[52,64821,64773],{"class":75},[52,64823,64824],{"class":75}," .item",[52,64826,18220],{"class":79},[52,64828,64829,64831,64833,64835,64837],{"class":54,"line":19287},[52,64830,57421],{"class":308},[52,64832,54087],{"class":79},[52,64834,591],{"class":308},[52,64836,1998],{"class":58},[52,64838,80],{"class":79},[52,64840,64841,64843,64845,64847],{"class":54,"line":19310},[52,64842,57659],{"class":308},[52,64844,54087],{"class":79},[52,64846,54127],{"class":308},[52,64848,80],{"class":79},[52,64850,64851],{"class":54,"line":19324},[52,64852,616],{"class":79},[52,64854,64855],{"class":54,"line":19344},[52,64856,123],{"emptyLinePlaceholder":122},[52,64858,64859,64861,64863,64866],{"class":54,"line":19350},[52,64860,64773],{"class":75},[52,64862,64824],{"class":75},[52,64864,64865],{"class":75}," .info",[52,64867,18220],{"class":79},[52,64869,64870,64872,64874,64876],{"class":54,"line":19361},[52,64871,64487],{"class":308},[52,64873,54087],{"class":79},[52,64875,629],{"class":308},[52,64877,80],{"class":79},[52,64879,64880,64883,64885,64887,64889,64892,64895],{"class":54,"line":19384},[52,64881,64882],{"class":308},"      border-bottom",[52,64884,54087],{"class":79},[52,64886,629],{"class":308},[52,64888,54142],{"class":58},[52,64890,64891],{"class":308}," dashed",[52,64893,64894],{"class":308}," #e4e4e4",[52,64896,80],{"class":79},[52,64898,64899,64902,64904,64906,64908],{"class":54,"line":19406},[52,64900,64901],{"class":308},"      padding-bottom",[52,64903,54087],{"class":79},[52,64905,3649],{"class":308},[52,64907,54142],{"class":58},[52,64909,80],{"class":79},[52,64911,64912],{"class":54,"line":19411},[52,64913,616],{"class":79},[52,64915,64916],{"class":54,"line":19417},[52,64917,123],{"emptyLinePlaceholder":122},[52,64919,64920,64922,64924,64926],{"class":54,"line":19431},[52,64921,64773],{"class":75},[52,64923,64824],{"class":75},[52,64925,9785],{"class":53950},[52,64927,18220],{"class":79},[52,64929,64930,64932,64934,64936],{"class":54,"line":19444},[52,64931,57356],{"class":308},[52,64933,54087],{"class":79},[52,64935,692],{"class":308},[52,64937,80],{"class":79},[52,64939,64940],{"class":54,"line":19449},[52,64941,616],{"class":79},[52,64943,64944],{"class":54,"line":19463},[52,64945,123],{"emptyLinePlaceholder":122},[52,64947,64948,64950,64952,64955],{"class":54,"line":19468},[52,64949,64773],{"class":75},[52,64951,64824],{"class":75},[52,64953,64954],{"class":75}," .name",[52,64956,18220],{"class":79},[52,64958,64959,64961,64963,64966],{"class":54,"line":19474},[52,64960,60066],{"class":308},[52,64962,54087],{"class":79},[52,64964,64965],{"class":308},"#FB7299",[52,64967,80],{"class":79},[52,64969,64970,64972,64974,64976,64978],{"class":54,"line":19479},[52,64971,57572],{"class":308},[52,64973,54087],{"class":79},[52,64975,3748],{"class":308},[52,64977,54142],{"class":58},[52,64979,80],{"class":79},[52,64981,64982,64985,64987,64990],{"class":54,"line":19493},[52,64983,64984],{"class":308},"      font-weight",[52,64986,54087],{"class":79},[52,64988,64989],{"class":308},"bold",[52,64991,80],{"class":79},[52,64993,64994],{"class":54,"line":19498},[52,64995,616],{"class":79},[52,64997,64998],{"class":54,"line":19503},[52,64999,123],{"emptyLinePlaceholder":122},[52,65001,65002,65004,65006,65009],{"class":54,"line":19517},[52,65003,64773],{"class":75},[52,65005,64824],{"class":75},[52,65007,65008],{"class":75}," .text",[52,65010,18220],{"class":79},[52,65012,65013,65015,65017,65020],{"class":54,"line":19529},[52,65014,60066],{"class":308},[52,65016,54087],{"class":79},[52,65018,65019],{"class":308},"#333",[52,65021,80],{"class":79},[52,65023,65024,65026,65028,65030,65032,65034],{"class":54,"line":19534},[52,65025,57345],{"class":308},[52,65027,54087],{"class":79},[52,65029,3649],{"class":308},[52,65031,54142],{"class":58},[52,65033,1444],{"class":308},[52,65035,80],{"class":79},[52,65037,65038],{"class":54,"line":19547},[52,65039,616],{"class":79},[52,65041,65042],{"class":54,"line":19552},[52,65043,123],{"emptyLinePlaceholder":122},[52,65045,65046,65048,65050,65053],{"class":54,"line":19557},[52,65047,64773],{"class":75},[52,65049,64824],{"class":75},[52,65051,65052],{"class":75}," .time",[52,65054,18220],{"class":79},[52,65056,65057,65059,65061,65063],{"class":54,"line":19562},[52,65058,60066],{"class":308},[52,65060,54087],{"class":79},[52,65062,64720],{"class":308},[52,65064,80],{"class":79},[52,65066,65067,65069,65071,65073,65075],{"class":54,"line":19575},[52,65068,57572],{"class":308},[52,65070,54087],{"class":79},[52,65072,3698],{"class":308},[52,65074,54142],{"class":58},[52,65076,80],{"class":79},[52,65078,65079],{"class":54,"line":19580},[52,65080,616],{"class":79},[52,65082,65083,65085,65087],{"class":54,"line":35283},[52,65084,55067],{"class":79},[52,65086,3141],{"class":53950},[52,65088,53957],{"class":79},[52,65090,65091,65093,65095],{"class":54,"line":35289},[52,65092,54435],{"class":79},[52,65094,53984],{"class":53950},[52,65096,53957],{"class":79},[52,65098,65099],{"class":54,"line":35295},[52,65100,123],{"emptyLinePlaceholder":122},[52,65102,65103,65105,65107],{"class":54,"line":35301},[52,65104,698],{"class":79},[52,65106,54450],{"class":53950},[52,65108,53957],{"class":79},[52,65110,65111,65113,65115,65117,65119,65122],{"class":54,"line":35307},[52,65112,54794],{"class":79},[52,65114,54261],{"class":53950},[52,65116,56136],{"class":75},[52,65118,292],{"class":79},[52,65120,65121],{"class":62},"\"wrapper\"",[52,65123,53957],{"class":79},[52,65125,65126,65128,65130,65132,65134,65137,65139,65141],{"class":54,"line":35318},[52,65127,53991],{"class":79},[52,65129,3644],{"class":53950},[52,65131,56136],{"class":75},[52,65133,292],{"class":79},[52,65135,65136],{"class":62},"\"avatar\"",[52,65138,57964],{"class":79},[52,65140,3644],{"class":53950},[52,65142,53957],{"class":79},[52,65144,65145,65147,65149,65151,65153,65156,65158,65160,65163,65165,65167,65169,65172,65174,65177,65179,65181],{"class":54,"line":35324},[52,65146,53991],{"class":79},[52,65148,56938],{"class":53950},[52,65150,17607],{"class":75},[52,65152,292],{"class":79},[52,65154,65155],{"class":62},"\"tx\"",[52,65157,63670],{"class":75},[52,65159,292],{"class":79},[52,65161,65162],{"class":62},"\"发一条友善的评论\"",[52,65164,56961],{"class":75},[52,65166,292],{"class":79},[52,65168,637],{"class":62},[52,65170,65171],{"class":75}," maxlength",[52,65173,292],{"class":79},[52,65175,65176],{"class":62},"\"200\"",[52,65178,57964],{"class":79},[52,65180,56938],{"class":53950},[52,65182,53957],{"class":79},[52,65184,65185,65187,65189,65192,65194],{"class":54,"line":35344},[52,65186,53991],{"class":79},[52,65188,56537],{"class":53950},[52,65190,65191],{"class":79},">发布\u003C\u002F",[52,65193,56537],{"class":53950},[52,65195,53957],{"class":79},[52,65197,65198,65200,65202],{"class":54,"line":35350},[52,65199,55067],{"class":79},[52,65201,54261],{"class":53950},[52,65203,53957],{"class":79},[52,65205,65206,65208,65210,65212,65214,65216],{"class":54,"line":35361},[52,65207,54794],{"class":79},[52,65209,54261],{"class":53950},[52,65211,56136],{"class":75},[52,65213,292],{"class":79},[52,65215,65121],{"class":62},[52,65217,53957],{"class":79},[52,65219,65220,65222,65224,65226,65228,65231,65234,65236],{"class":54,"line":35367},[52,65221,53991],{"class":79},[52,65223,52],{"class":53950},[52,65225,56136],{"class":75},[52,65227,292],{"class":79},[52,65229,65230],{"class":62},"\"total\"",[52,65232,65233],{"class":79},">0\u002F200字\u003C\u002F",[52,65235,52],{"class":53950},[52,65237,53957],{"class":79},[52,65239,65240,65242,65244],{"class":54,"line":35373},[52,65241,55067],{"class":79},[52,65243,54261],{"class":53950},[52,65245,53957],{"class":79},[52,65247,65248,65250,65252,65254,65256,65259],{"class":54,"line":35379},[52,65249,54794],{"class":79},[52,65251,54261],{"class":53950},[52,65253,56136],{"class":75},[52,65255,292],{"class":79},[52,65257,65258],{"class":62},"\"list\"",[52,65260,53957],{"class":79},[52,65262,65263,65265,65267,65269,65271,65274,65277,65279,65282],{"class":54,"line":35385},[52,65264,53991],{"class":79},[52,65266,54261],{"class":53950},[52,65268,56136],{"class":75},[52,65270,292],{"class":79},[52,65272,65273],{"class":62},"\"item\"",[52,65275,65276],{"class":75}," style",[52,65278,292],{"class":79},[52,65280,65281],{"class":62},"\"display: none;\"",[52,65283,53957],{"class":79},[52,65285,65286,65288,65290,65292,65294,65296,65298,65300],{"class":54,"line":35391},[52,65287,57884],{"class":79},[52,65289,3644],{"class":53950},[52,65291,56136],{"class":75},[52,65293,292],{"class":79},[52,65295,65136],{"class":62},[52,65297,57964],{"class":79},[52,65299,3644],{"class":53950},[52,65301,53957],{"class":79},[52,65303,65304,65306,65308,65310,65312,65315],{"class":54,"line":35397},[52,65305,57884],{"class":79},[52,65307,54261],{"class":53950},[52,65309,56136],{"class":75},[52,65311,292],{"class":79},[52,65313,65314],{"class":62},"\"info\"",[52,65316,53957],{"class":79},[52,65318,65319,65321,65323,65325,65327,65330,65333,65335],{"class":54,"line":35403},[52,65320,57952],{"class":79},[52,65322,14],{"class":53950},[52,65324,56136],{"class":75},[52,65326,292],{"class":79},[52,65328,65329],{"class":62},"\"name\"",[52,65331,65332],{"class":79},">清风徐来\u003C\u002F",[52,65334,14],{"class":53950},[52,65336,53957],{"class":79},[52,65338,65339,65341,65343,65345,65347,65350,65353,65355],{"class":54,"line":35423},[52,65340,57952],{"class":79},[52,65342,14],{"class":53950},[52,65344,56136],{"class":75},[52,65346,292],{"class":79},[52,65348,65349],{"class":62},"\"text\"",[52,65351,65352],{"class":79},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[52,65354,14],{"class":53950},[52,65356,53957],{"class":79},[52,65358,65359,65361,65363,65365,65367,65370,65373,65375],{"class":54,"line":35429},[52,65360,57952],{"class":79},[52,65362,14],{"class":53950},[52,65364,56136],{"class":75},[52,65366,292],{"class":79},[52,65368,65369],{"class":62},"\"time\"",[52,65371,65372],{"class":79},">2022-10-10 20:29:21\u003C\u002F",[52,65374,14],{"class":53950},[52,65376,53957],{"class":79},[52,65378,65379,65381,65383],{"class":54,"line":35445},[52,65380,58057],{"class":79},[52,65382,54261],{"class":53950},[52,65384,53957],{"class":79},[52,65386,65387,65389,65391],{"class":54,"line":35451},[52,65388,54426],{"class":79},[52,65390,54261],{"class":53950},[52,65392,53957],{"class":79},[52,65394,65395,65397,65399],{"class":54,"line":35465},[52,65396,55067],{"class":79},[52,65398,54261],{"class":53950},[52,65400,53957],{"class":79},[52,65402,65403,65405,65407],{"class":54,"line":35471},[52,65404,54794],{"class":79},[52,65406,54463],{"class":53950},[52,65408,53957],{"class":79},[52,65410,65411,65413,65416,65418,65420,65422,65424,65427],{"class":54,"line":35486},[52,65412,13869],{"class":58},[52,65414,65415],{"class":308}," tx",[52,65417,16212],{"class":58},[52,65419,57046],{"class":79},[52,65421,57049],{"class":75},[52,65423,1216],{"class":79},[52,65425,65426],{"class":62},"'#tx'",[52,65428,708],{"class":79},[52,65430,65431,65433,65436,65438,65440,65442,65444,65447],{"class":54,"line":35492},[52,65432,13869],{"class":58},[52,65434,65435],{"class":308}," total",[52,65437,16212],{"class":58},[52,65439,57046],{"class":79},[52,65441,57049],{"class":75},[52,65443,1216],{"class":79},[52,65445,65446],{"class":62},"'.total'",[52,65448,708],{"class":79},[52,65450,65451],{"class":54,"line":35501},[52,65452,65453],{"class":94},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[52,65455,65456,65459,65461,65463,65465,65467,65469],{"class":54,"line":35507},[52,65457,65458],{"class":79},"    tx.",[52,65460,60463],{"class":75},[52,65462,1216],{"class":79},[52,65464,63977],{"class":62},[52,65466,15083],{"class":79},[52,65468,57099],{"class":58},[52,65470,57102],{"class":79},[52,65472,65473,65476,65478],{"class":54,"line":35516},[52,65474,65475],{"class":79},"      total.style.opacity ",[52,65477,292],{"class":58},[52,65479,58349],{"class":308},[52,65481,65482],{"class":54,"line":35522},[52,65483,36111],{"class":79},[52,65485,65486],{"class":54,"line":35528},[52,65487,65488],{"class":94},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[52,65490,65491,65493,65495,65497,65499,65501,65503],{"class":54,"line":35537},[52,65492,65458],{"class":79},[52,65494,60463],{"class":75},[52,65496,1216],{"class":79},[52,65498,64038],{"class":62},[52,65500,15083],{"class":79},[52,65502,57099],{"class":58},[52,65504,57102],{"class":79},[52,65506,65507,65509,65511],{"class":54,"line":35543},[52,65508,65475],{"class":79},[52,65510,292],{"class":58},[52,65512,49983],{"class":308},[52,65514,65515],{"class":54,"line":35554},[52,65516,36111],{"class":79},[52,65518,65519],{"class":54,"line":35560},[52,65520,65521],{"class":94},"    \u002F\u002F 3. 检测用户输入\n",[52,65523,65524,65526,65528,65530,65533,65535,65537],{"class":54,"line":35579},[52,65525,65458],{"class":79},[52,65527,60463],{"class":75},[52,65529,1216],{"class":79},[52,65531,65532],{"class":62},"'input'",[52,65534,15083],{"class":79},[52,65536,57099],{"class":58},[52,65538,57102],{"class":79},[52,65540,65541],{"class":54,"line":35585},[52,65542,65543],{"class":94},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[52,65545,65546,65549,65551,65554,65557,65559,65562,65564,65566],{"class":54,"line":35596},[52,65547,65548],{"class":79},"      total.innerHTML ",[52,65550,292],{"class":58},[52,65552,65553],{"class":62}," `${",[52,65555,65556],{"class":79},"tx",[52,65558,3757],{"class":62},[52,65560,65561],{"class":79},"value",[52,65563,3757],{"class":62},[52,65565,54618],{"class":308},[52,65567,65568],{"class":62},"}\u002F200字`\n",[52,65570,65571],{"class":54,"line":35602},[52,65572,36111],{"class":79},[52,65574,65575],{"class":54,"line":35622},[52,65576,123],{"emptyLinePlaceholder":122},[52,65578,65579],{"class":54,"line":35638},[52,65580,65581],{"class":94},"    \u002F\u002F const str = 'andy'\n",[52,65583,65584],{"class":54,"line":35644},[52,65585,65586],{"class":94},"    \u002F\u002F console.log(str.length)\n",[52,65588,65589,65591,65593],{"class":54,"line":35658},[52,65590,55067],{"class":79},[52,65592,54463],{"class":53950},[52,65594,53957],{"class":79},[52,65596,65597,65599,65601],{"class":54,"line":35664},[52,65598,54435],{"class":79},[52,65600,54450],{"class":53950},[52,65602,53957],{"class":79},[52,65604,65605],{"class":54,"line":35670},[52,65606,123],{"emptyLinePlaceholder":122},[52,65608,65609,65611,65613],{"class":54,"line":35681},[52,65610,54435],{"class":79},[52,65612,53285],{"class":53950},[52,65614,53957],{"class":79},[24646,65616,65618],{"id":65617},"_3254-change事件","3.2.5.4 change事件",[14,65620,65621],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,65623,65624],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,65626,65627],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[42,65629,65631],{"className":53283,"code":65630,"language":53285,"meta":47,"style":47},"\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",[49,65632,65633,65643,65657,65661,65669,65683,65703,65715,65723,65727,65735,65749,65757,65775,65793,65805,65809,65817,65825,65829],{"__ignoreMap":47},[52,65634,65635,65637,65639,65641],{"class":54,"line":55},[52,65636,53947],{"class":79},[52,65638,53951],{"class":53950},[52,65640,53954],{"class":75},[52,65642,53957],{"class":79},[52,65644,65645,65647,65649,65651,65653,65655],{"class":54,"line":66},[52,65646,698],{"class":79},[52,65648,53285],{"class":53950},[52,65650,53966],{"class":75},[52,65652,292],{"class":79},[52,65654,53971],{"class":62},[52,65656,53957],{"class":79},[52,65658,65659],{"class":54,"line":83},[52,65660,123],{"emptyLinePlaceholder":122},[52,65662,65663,65665,65667],{"class":54,"line":91},[52,65664,698],{"class":79},[52,65666,53984],{"class":53950},[52,65668,53957],{"class":79},[52,65670,65671,65673,65675,65677,65679,65681],{"class":54,"line":98},[52,65672,54794],{"class":79},[52,65674,53994],{"class":53950},[52,65676,53997],{"class":75},[52,65678,292],{"class":79},[52,65680,54002],{"class":62},[52,65682,53957],{"class":79},[52,65684,65685,65687,65689,65691,65693,65695,65697,65699,65701],{"class":54,"line":107},[52,65686,54794],{"class":79},[52,65688,53994],{"class":53950},[52,65690,17568],{"class":75},[52,65692,292],{"class":79},[52,65694,54041],{"class":62},[52,65696,54021],{"class":75},[52,65698,292],{"class":79},[52,65700,54048],{"class":62},[52,65702,53957],{"class":79},[52,65704,65705,65707,65709,65711,65713],{"class":54,"line":113},[52,65706,54794],{"class":79},[52,65708,54057],{"class":53950},[52,65710,54060],{"class":79},[52,65712,54057],{"class":53950},[52,65714,53957],{"class":79},[52,65716,65717,65719,65721],{"class":54,"line":119},[52,65718,54435],{"class":79},[52,65720,53984],{"class":53950},[52,65722,53957],{"class":79},[52,65724,65725],{"class":54,"line":126},[52,65726,123],{"emptyLinePlaceholder":122},[52,65728,65729,65731,65733],{"class":54,"line":132},[52,65730,698],{"class":79},[52,65732,54450],{"class":53950},[52,65734,53957],{"class":79},[52,65736,65737,65739,65741,65743,65745,65747],{"class":54,"line":138},[52,65738,54794],{"class":79},[52,65740,56471],{"class":53950},[52,65742,56474],{"class":75},[52,65744,292],{"class":79},[52,65746,65349],{"class":62},[52,65748,53957],{"class":79},[52,65750,65751,65753,65755],{"class":54,"line":144},[52,65752,54794],{"class":79},[52,65754,54463],{"class":53950},[52,65756,53957],{"class":79},[52,65758,65759,65761,65763,65765,65767,65769,65771,65773],{"class":54,"line":153},[52,65760,13869],{"class":58},[52,65762,63255],{"class":308},[52,65764,16212],{"class":58},[52,65766,57046],{"class":79},[52,65768,57049],{"class":75},[52,65770,1216],{"class":79},[52,65772,65532],{"class":62},[52,65774,708],{"class":79},[52,65776,65777,65780,65782,65784,65787,65789,65791],{"class":54,"line":159},[52,65778,65779],{"class":79},"    input.",[52,65781,60463],{"class":75},[52,65783,1216],{"class":79},[52,65785,65786],{"class":62},"'change'",[52,65788,15083],{"class":79},[52,65790,57099],{"class":58},[52,65792,57102],{"class":79},[52,65794,65795,65797,65799,65801,65803],{"class":54,"line":167},[52,65796,60894],{"class":79},[52,65798,60897],{"class":75},[52,65800,1216],{"class":79},[52,65802,3790],{"class":308},[52,65804,708],{"class":79},[52,65806,65807],{"class":54,"line":173},[52,65808,36111],{"class":79},[52,65810,65811,65813,65815],{"class":54,"line":181},[52,65812,55067],{"class":79},[52,65814,54463],{"class":53950},[52,65816,53957],{"class":79},[52,65818,65819,65821,65823],{"class":54,"line":186},[52,65820,54435],{"class":79},[52,65822,54450],{"class":53950},[52,65824,53957],{"class":79},[52,65826,65827],{"class":54,"line":191},[52,65828,123],{"emptyLinePlaceholder":122},[52,65830,65831,65833,65835],{"class":54,"line":196},[52,65832,54435],{"class":79},[52,65834,53285],{"class":53950},[52,65836,53957],{"class":79},[14,65838,65839],{},"总结：内容发生改变才回去触发",[3195,65841,65843],{"id":65842},"_326-事件对象","3.2.6 事件对象",[24646,65845,65847],{"id":65846},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,65849,65850],{},[4509,65851],{"alt":47,"src":65852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,65854,65855],{},[4509,65856],{"alt":47,"src":65857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,65859,65860],{},"点击一次，就输出了事件对象，它是个对象",[14,65862,65863],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,65865,65866],{},[4509,65867],{"alt":47,"src":65868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[24646,65870,65872],{"id":65871},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,65874,65875],{},[4509,65876],{"alt":47,"src":65877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,65879,65880],{},"实现按特殊字符才是实现打印输出效果：",[42,65882,65884],{"className":55717,"code":65883,"language":55719,"meta":47,"style":47},"\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",[49,65885,65886,65894,65899,65913,65921,65926,65931,65936,65941,65946,65951,65956,65961,65966,65970,65974,65982],{"__ignoreMap":47},[52,65887,65888,65890,65892],{"class":54,"line":55},[52,65889,698],{"class":79},[52,65891,54450],{"class":53950},[52,65893,53957],{"class":79},[52,65895,65896],{"class":54,"line":66},[52,65897,65898],{"class":94},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[52,65900,65901,65903,65905,65907,65909,65911],{"class":54,"line":83},[52,65902,54794],{"class":79},[52,65904,56471],{"class":53950},[52,65906,56474],{"class":75},[52,65908,292],{"class":79},[52,65910,65349],{"class":62},[52,65912,53957],{"class":79},[52,65914,65915,65917,65919],{"class":54,"line":91},[52,65916,54794],{"class":79},[52,65918,54463],{"class":53950},[52,65920,53957],{"class":79},[52,65922,65923],{"class":54,"line":98},[52,65924,65925],{"class":79},"    \u002F\u002F const btn = document.querySelector('button')\n",[52,65927,65928],{"class":54,"line":107},[52,65929,65930],{"class":79},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[52,65932,65933],{"class":54,"line":113},[52,65934,65935],{"class":79},"    \u002F\u002F   console.log(e);\n",[52,65937,65938],{"class":54,"line":119},[52,65939,65940],{"class":79},"    \u002F\u002F })\n",[52,65942,65943],{"class":54,"line":126},[52,65944,65945],{"class":79},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[52,65947,65948],{"class":54,"line":132},[52,65949,65950],{"class":79},"    const input = document.querySelector('input')\n",[52,65952,65953],{"class":54,"line":138},[52,65954,65955],{"class":79},"    input.addEventListener('keyup', function (e) {\n",[52,65957,65958],{"class":54,"line":144},[52,65959,65960],{"class":79},"      if (e.key === 'Enter') {\n",[52,65962,65963],{"class":54,"line":153},[52,65964,65965],{"class":79},"        console.log('我按下了回车键')\n",[52,65967,65968],{"class":54,"line":159},[52,65969,55048],{"class":79},[52,65971,65972],{"class":54,"line":167},[52,65973,36111],{"class":79},[52,65975,65976,65978,65980],{"class":54,"line":173},[52,65977,55067],{"class":79},[52,65979,54463],{"class":53950},[52,65981,53957],{"class":79},[52,65983,65984,65986,65988],{"class":54,"line":181},[52,65985,54435],{"class":79},[52,65987,54450],{"class":53950},[52,65989,53957],{"class":79},[24646,65991,65993],{"id":65992},"_3263-trim方法","3.2.6.3 trim方法",[14,65995,65996],{},[4509,65997],{"alt":47,"src":65998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,66000,66001],{},[4509,66002],{"alt":47,"src":66003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,66005,66006],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,66008,66009],{},"str.trim()",[3195,66011,66013],{"id":66012},"_327-环境对象","3.2.7 环境对象",[14,66015,66016],{},[4509,66017],{"alt":47,"src":66018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,66020,66021],{},[4509,66022],{"alt":47,"src":66023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,66025,66026],{},[4509,66027],{"alt":47,"src":66028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,66030,66031],{},"实际函数调用是window.fn()",[14,66033,66034],{},"普通函数里面this指向的是window",[29,66036,66037,66040,66043],{},[32,66038,66039],{},"在普通函数下，this指向的是window",[32,66041,66042],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[32,66044,66045],{},"箭头函数没有this",[14,66047,66048],{},"粗略记法就是：谁调用，this就指向谁",[14,66050,66051],{},[4509,66052],{"alt":47,"src":66053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,66055,66056],{},[4509,66057],{"alt":47,"src":66058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,66060,66061],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,66063,66064],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[42,66066,66068],{"className":55717,"code":66067,"language":55719,"meta":47,"style":47},"\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",[49,66069,66070,66078,66090,66098,66103,66108,66113,66118,66122,66130],{"__ignoreMap":47},[52,66071,66072,66074,66076],{"class":54,"line":55},[52,66073,698],{"class":79},[52,66075,54450],{"class":53950},[52,66077,53957],{"class":79},[52,66079,66080,66082,66084,66086,66088],{"class":54,"line":66},[52,66081,54794],{"class":79},[52,66083,56537],{"class":53950},[52,66085,56543],{"class":79},[52,66087,56537],{"class":53950},[52,66089,53957],{"class":79},[52,66091,66092,66094,66096],{"class":54,"line":83},[52,66093,54794],{"class":79},[52,66095,54463],{"class":53950},[52,66097,53957],{"class":79},[52,66099,66100],{"class":54,"line":91},[52,66101,66102],{"class":79},"    const button = document.querySelector('button')\n",[52,66104,66105],{"class":54,"line":98},[52,66106,66107],{"class":79},"    button.addEventListener('click', function () {\n",[52,66109,66110],{"class":54,"line":107},[52,66111,66112],{"class":79},"      \u002F\u002F console.log(this);\n",[52,66114,66115],{"class":54,"line":113},[52,66116,66117],{"class":79},"      this.style.color = 'pink'\n",[52,66119,66120],{"class":54,"line":119},[52,66121,36111],{"class":79},[52,66123,66124,66126,66128],{"class":54,"line":126},[52,66125,55067],{"class":79},[52,66127,54463],{"class":53950},[52,66129,53957],{"class":79},[52,66131,66132,66134,66136],{"class":54,"line":132},[52,66133,54435],{"class":79},[52,66135,54450],{"class":53950},[52,66137,53957],{"class":79},[3195,66139,66141],{"id":66140},"_328-回调函数","3.2.8 回调函数",[14,66143,66144],{},[4509,66145],{"alt":47,"src":66146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,66148,66149],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,66151,13980],{},[29,66153,66154,66157,66160],{},[32,66155,66156],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[32,66158,66159],{},"回调函数本质还是函数，只不过把它当成参数使用",[32,66161,66162],{},"使用匿名函数做为回调函数比较常见",[3195,66164,66166],{"id":66165},"_329-tab栏切换","3.2.9 tab栏切换",[14,66168,66169],{},[4509,66170],{"alt":47,"src":66171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[42,66173,66175],{"className":53283,"code":66174,"language":53285,"meta":47,"style":47},"\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",[49,66176,66177,66187,66201,66205,66213,66227,66247,66267,66280,66288,66294,66304,66314,66318,66322,66329,66342,66355,66367,66383,66387,66391,66398,66410,66422,66434,66444,66454,66458,66462,66471,66483,66494,66506,66510,66514,66522,66532,66542,66552,66556,66560,66570,66584,66596,66600,66604,66616,66627,66644,66654,66658,66662,66677,66688,66698,66702,66706,66713,66728,66732,66736,66744,66754,66758,66762,66771,66781,66785,66793,66801,66805,66813,66828,66843,66856,66864,66898,66925,66952,66979,67006,67014,67022,67037,67074,67109,67144,67179,67214,67222,67230,67238,67243,67248,67268,67273,67302,67307,67312,67330,67335,67340,67345,67367,67372,67388,67392,67397,67402,67423,67428,67457,67461,67466,67470,67478,67486,67490],{"__ignoreMap":47},[52,66178,66179,66181,66183,66185],{"class":54,"line":55},[52,66180,53947],{"class":79},[52,66182,53951],{"class":53950},[52,66184,53954],{"class":75},[52,66186,53957],{"class":79},[52,66188,66189,66191,66193,66195,66197,66199],{"class":54,"line":66},[52,66190,698],{"class":79},[52,66192,53285],{"class":53950},[52,66194,53966],{"class":75},[52,66196,292],{"class":79},[52,66198,53971],{"class":62},[52,66200,53957],{"class":79},[52,66202,66203],{"class":54,"line":83},[52,66204,123],{"emptyLinePlaceholder":122},[52,66206,66207,66209,66211],{"class":54,"line":91},[52,66208,698],{"class":79},[52,66210,53984],{"class":53950},[52,66212,53957],{"class":79},[52,66214,66215,66217,66219,66221,66223,66225],{"class":54,"line":98},[52,66216,54794],{"class":79},[52,66218,53994],{"class":53950},[52,66220,53997],{"class":75},[52,66222,292],{"class":79},[52,66224,54002],{"class":62},[52,66226,61777],{"class":79},[52,66228,66229,66231,66233,66235,66237,66239,66241,66243,66245],{"class":54,"line":107},[52,66230,54794],{"class":79},[52,66232,53994],{"class":53950},[52,66234,54013],{"class":75},[52,66236,292],{"class":79},[52,66238,54018],{"class":62},[52,66240,54021],{"class":75},[52,66242,292],{"class":79},[52,66244,54026],{"class":62},[52,66246,61777],{"class":79},[52,66248,66249,66251,66253,66255,66257,66259,66261,66263,66265],{"class":54,"line":113},[52,66250,54794],{"class":79},[52,66252,53994],{"class":53950},[52,66254,17568],{"class":75},[52,66256,292],{"class":79},[52,66258,54041],{"class":62},[52,66260,54021],{"class":75},[52,66262,292],{"class":79},[52,66264,54048],{"class":62},[52,66266,61777],{"class":79},[52,66268,66269,66271,66273,66276,66278],{"class":54,"line":119},[52,66270,54794],{"class":79},[52,66272,54057],{"class":53950},[52,66274,66275],{"class":79},">tab栏切换\u003C\u002F",[52,66277,54057],{"class":53950},[52,66279,53957],{"class":79},[52,66281,66282,66284,66286],{"class":54,"line":126},[52,66283,54794],{"class":79},[52,66285,3141],{"class":53950},[52,66287,53957],{"class":79},[52,66289,66290,66292],{"class":54,"line":132},[52,66291,9366],{"class":53950},[52,66293,18220],{"class":79},[52,66295,66296,66298,66300,66302],{"class":54,"line":138},[52,66297,57356],{"class":308},[52,66299,54087],{"class":79},[52,66301,692],{"class":308},[52,66303,80],{"class":79},[52,66305,66306,66308,66310,66312],{"class":54,"line":144},[52,66307,57345],{"class":308},[52,66309,54087],{"class":79},[52,66311,692],{"class":308},[52,66313,80],{"class":79},[52,66315,66316],{"class":54,"line":153},[52,66317,616],{"class":79},[52,66319,66320],{"class":54,"line":159},[52,66321,123],{"emptyLinePlaceholder":122},[52,66323,66324,66327],{"class":54,"line":167},[52,66325,66326],{"class":75},"    .tab",[52,66328,18220],{"class":79},[52,66330,66331,66333,66335,66338,66340],{"class":54,"line":173},[52,66332,57421],{"class":308},[52,66334,54087],{"class":79},[52,66336,66337],{"class":308},"590",[52,66339,54142],{"class":58},[52,66341,80],{"class":79},[52,66343,66344,66346,66348,66351,66353],{"class":54,"line":181},[52,66345,57435],{"class":308},[52,66347,54087],{"class":79},[52,66349,66350],{"class":308},"340",[52,66352,54142],{"class":58},[52,66354,80],{"class":79},[52,66356,66357,66359,66361,66363,66365],{"class":54,"line":186},[52,66358,57356],{"class":308},[52,66360,54087],{"class":79},[52,66362,444],{"class":308},[52,66364,54142],{"class":58},[52,66366,80],{"class":79},[52,66368,66369,66371,66373,66375,66377,66379,66381],{"class":54,"line":191},[52,66370,64627],{"class":308},[52,66372,54087],{"class":79},[52,66374,629],{"class":308},[52,66376,54142],{"class":58},[52,66378,54171],{"class":308},[52,66380,64894],{"class":308},[52,66382,80],{"class":79},[52,66384,66385],{"class":54,"line":196},[52,66386,616],{"class":79},[52,66388,66389],{"class":54,"line":201},[52,66390,123],{"emptyLinePlaceholder":122},[52,66392,66393,66396],{"class":54,"line":206},[52,66394,66395],{"class":75},"    .tab-nav",[52,66397,18220],{"class":79},[52,66399,66400,66402,66404,66406,66408],{"class":54,"line":211},[52,66401,57421],{"class":308},[52,66403,54087],{"class":79},[52,66405,591],{"class":308},[52,66407,1998],{"class":58},[52,66409,80],{"class":79},[52,66411,66412,66414,66416,66418,66420],{"class":54,"line":218},[52,66413,57435],{"class":308},[52,66415,54087],{"class":79},[52,66417,2001],{"class":308},[52,66419,54142],{"class":58},[52,66421,80],{"class":79},[52,66423,66424,66426,66428,66430,66432],{"class":54,"line":223},[52,66425,60009],{"class":308},[52,66427,54087],{"class":79},[52,66429,2001],{"class":308},[52,66431,54142],{"class":58},[52,66433,80],{"class":79},[52,66435,66436,66438,66440,66442],{"class":54,"line":230},[52,66437,57659],{"class":308},[52,66439,54087],{"class":79},[52,66441,54127],{"class":308},[52,66443,80],{"class":79},[52,66445,66446,66448,66450,66452],{"class":54,"line":239},[52,66447,57670],{"class":308},[52,66449,54087],{"class":79},[52,66451,54318],{"class":308},[52,66453,80],{"class":79},[52,66455,66456],{"class":54,"line":251},[52,66457,616],{"class":79},[52,66459,66460],{"class":54,"line":256},[52,66461,123],{"emptyLinePlaceholder":122},[52,66463,66464,66466,66469],{"class":54,"line":262},[52,66465,66395],{"class":75},[52,66467,66468],{"class":53950}," h3",[52,66470,18220],{"class":79},[52,66472,66473,66475,66477,66479,66481],{"class":54,"line":268},[52,66474,57572],{"class":308},[52,66476,54087],{"class":79},[52,66478,3990],{"class":308},[52,66480,54142],{"class":58},[52,66482,80],{"class":79},[52,66484,66485,66487,66489,66492],{"class":54,"line":280},[52,66486,64984],{"class":308},[52,66488,54087],{"class":79},[52,66490,66491],{"class":308},"normal",[52,66493,80],{"class":79},[52,66495,66496,66498,66500,66502,66504],{"class":54,"line":286},[52,66497,64650],{"class":308},[52,66499,54087],{"class":79},[52,66501,444],{"class":308},[52,66503,54142],{"class":58},[52,66505,80],{"class":79},[52,66507,66508],{"class":54,"line":300},[52,66509,616],{"class":79},[52,66511,66512],{"class":54,"line":314},[52,66513,123],{"emptyLinePlaceholder":122},[52,66515,66516,66518,66520],{"class":54,"line":327},[52,66517,66395],{"class":75},[52,66519,63942],{"class":53950},[52,66521,18220],{"class":79},[52,66523,66524,66526,66528,66530],{"class":54,"line":333},[52,66525,57382],{"class":308},[52,66527,54087],{"class":79},[52,66529,57387],{"class":308},[52,66531,80],{"class":79},[52,66533,66534,66536,66538,66540],{"class":54,"line":360},[52,66535,57659],{"class":308},[52,66537,54087],{"class":79},[52,66539,54127],{"class":308},[52,66541,80],{"class":79},[52,66543,66544,66546,66548,66550],{"class":54,"line":365},[52,66545,57670],{"class":308},[52,66547,54087],{"class":79},[52,66549,54230],{"class":308},[52,66551,80],{"class":79},[52,66553,66554],{"class":54,"line":371},[52,66555,616],{"class":79},[52,66557,66558],{"class":54,"line":400},[52,66559,123],{"emptyLinePlaceholder":122},[52,66561,66562,66564,66566,66568],{"class":54,"line":405},[52,66563,66395],{"class":75},[52,66565,63942],{"class":53950},[52,66567,57725],{"class":53950},[52,66569,18220],{"class":79},[52,66571,66572,66574,66576,66578,66580,66582],{"class":54,"line":411},[52,66573,57356],{"class":308},[52,66575,54087],{"class":79},[52,66577,692],{"class":308},[52,66579,1375],{"class":308},[52,66581,54142],{"class":58},[52,66583,80],{"class":79},[52,66585,66586,66588,66590,66592,66594],{"class":54,"line":424},[52,66587,57572],{"class":308},[52,66589,54087],{"class":79},[52,66591,3748],{"class":308},[52,66593,54142],{"class":58},[52,66595,80],{"class":79},[52,66597,66598],{"class":54,"line":436},[52,66599,616],{"class":79},[52,66601,66602],{"class":54,"line":449},[52,66603,123],{"emptyLinePlaceholder":122},[52,66605,66606,66608,66610,66612,66614],{"class":54,"line":2160},[52,66607,66395],{"class":75},[52,66609,63942],{"class":53950},[52,66611,57725],{"class":53950},[52,66613,4446],{"class":53950},[52,66615,18220],{"class":79},[52,66617,66618,66621,66623,66625],{"class":54,"line":2186},[52,66619,66620],{"class":308},"      text-decoration",[52,66622,54087],{"class":79},[52,66624,57387],{"class":308},[52,66626,80],{"class":79},[52,66628,66629,66631,66633,66635,66637,66639,66642],{"class":54,"line":2209},[52,66630,64882],{"class":308},[52,66632,54087],{"class":79},[52,66634,564],{"class":308},[52,66636,54142],{"class":58},[52,66638,54171],{"class":308},[52,66640,66641],{"class":308}," transparent",[52,66643,80],{"class":79},[52,66645,66646,66648,66650,66652],{"class":54,"line":2233},[52,66647,60066],{"class":308},[52,66649,54087],{"class":79},[52,66651,65019],{"class":308},[52,66653,80],{"class":79},[52,66655,66656],{"class":54,"line":2238},[52,66657,616],{"class":79},[52,66659,66660],{"class":54,"line":2243},[52,66661,123],{"emptyLinePlaceholder":122},[52,66663,66664,66666,66668,66670,66672,66675],{"class":54,"line":2248},[52,66665,66395],{"class":75},[52,66667,63942],{"class":53950},[52,66669,57725],{"class":53950},[52,66671,4446],{"class":53950},[52,66673,66674],{"class":75},".active",[52,66676,18220],{"class":79},[52,66678,66679,66681,66683,66686],{"class":54,"line":2257},[52,66680,64441],{"class":308},[52,66682,54087],{"class":79},[52,66684,66685],{"class":308},"#e1251b",[52,66687,80],{"class":79},[52,66689,66690,66692,66694,66696],{"class":54,"line":2262},[52,66691,60066],{"class":308},[52,66693,54087],{"class":79},[52,66695,66685],{"class":308},[52,66697,80],{"class":79},[52,66699,66700],{"class":54,"line":2268},[52,66701,616],{"class":79},[52,66703,66704],{"class":54,"line":2297},[52,66705,123],{"emptyLinePlaceholder":122},[52,66707,66708,66711],{"class":54,"line":2303},[52,66709,66710],{"class":75},"    .tab-content",[52,66712,18220],{"class":79},[52,66714,66715,66717,66719,66721,66724,66726],{"class":54,"line":2318},[52,66716,57345],{"class":308},[52,66718,54087],{"class":79},[52,66720,692],{"class":308},[52,66722,66723],{"class":308}," 16",[52,66725,54142],{"class":58},[52,66727,80],{"class":79},[52,66729,66730],{"class":54,"line":2324},[52,66731,616],{"class":79},[52,66733,66734],{"class":54,"line":2353},[52,66735,123],{"emptyLinePlaceholder":122},[52,66737,66738,66740,66742],{"class":54,"line":2362},[52,66739,66710],{"class":75},[52,66741,64824],{"class":75},[52,66743,18220],{"class":79},[52,66745,66746,66748,66750,66752],{"class":54,"line":2368},[52,66747,57659],{"class":308},[52,66749,54087],{"class":79},[52,66751,57387],{"class":308},[52,66753,80],{"class":79},[52,66755,66756],{"class":54,"line":2376},[52,66757,616],{"class":79},[52,66759,66760],{"class":54,"line":2381},[52,66761,123],{"emptyLinePlaceholder":122},[52,66763,66764,66766,66769],{"class":54,"line":19252},[52,66765,66710],{"class":75},[52,66767,66768],{"class":75}," .item.active",[52,66770,18220],{"class":79},[52,66772,66773,66775,66777,66779],{"class":54,"line":19258},[52,66774,57659],{"class":308},[52,66776,54087],{"class":79},[52,66778,63519],{"class":308},[52,66780,80],{"class":79},[52,66782,66783],{"class":54,"line":19281},[52,66784,616],{"class":79},[52,66786,66787,66789,66791],{"class":54,"line":19287},[52,66788,55067],{"class":79},[52,66790,3141],{"class":53950},[52,66792,53957],{"class":79},[52,66794,66795,66797,66799],{"class":54,"line":19310},[52,66796,54435],{"class":79},[52,66798,53984],{"class":53950},[52,66800,53957],{"class":79},[52,66802,66803],{"class":54,"line":19324},[52,66804,123],{"emptyLinePlaceholder":122},[52,66806,66807,66809,66811],{"class":54,"line":19344},[52,66808,698],{"class":79},[52,66810,54450],{"class":53950},[52,66812,53957],{"class":79},[52,66814,66815,66817,66819,66821,66823,66826],{"class":54,"line":19350},[52,66816,54794],{"class":79},[52,66818,54261],{"class":53950},[52,66820,56136],{"class":75},[52,66822,292],{"class":79},[52,66824,66825],{"class":62},"\"tab\"",[52,66827,53957],{"class":79},[52,66829,66830,66832,66834,66836,66838,66841],{"class":54,"line":19361},[52,66831,53991],{"class":79},[52,66833,54261],{"class":53950},[52,66835,56136],{"class":75},[52,66837,292],{"class":79},[52,66839,66840],{"class":62},"\"tab-nav\"",[52,66842,53957],{"class":79},[52,66844,66845,66847,66849,66852,66854],{"class":54,"line":19384},[52,66846,57884],{"class":79},[52,66848,3195],{"class":53950},[52,66850,66851],{"class":79},">每日特价\u003C\u002F",[52,66853,3195],{"class":53950},[52,66855,53957],{"class":79},[52,66857,66858,66860,66862],{"class":54,"line":19406},[52,66859,57884],{"class":79},[52,66861,29],{"class":53950},[52,66863,53957],{"class":79},[52,66865,66866,66868,66870,66872,66874,66876,66878,66880,66882,66884,66887,66890,66892,66894,66896],{"class":54,"line":19411},[52,66867,57952],{"class":79},[52,66869,32],{"class":53950},[52,66871,63702],{"class":79},[52,66873,3451],{"class":53950},[52,66875,56136],{"class":75},[52,66877,292],{"class":79},[52,66879,62356],{"class":62},[52,66881,63707],{"class":75},[52,66883,292],{"class":79},[52,66885,66886],{"class":62},"\"javascript:;\"",[52,66888,66889],{"class":79},">精选\u003C\u002F",[52,66891,3451],{"class":53950},[52,66893,57964],{"class":79},[52,66895,32],{"class":53950},[52,66897,53957],{"class":79},[52,66899,66900,66902,66904,66906,66908,66910,66912,66914,66917,66919,66921,66923],{"class":54,"line":19417},[52,66901,57952],{"class":79},[52,66903,32],{"class":53950},[52,66905,63702],{"class":79},[52,66907,3451],{"class":53950},[52,66909,63707],{"class":75},[52,66911,292],{"class":79},[52,66913,66886],{"class":62},[52,66915,66916],{"class":79},">美食\u003C\u002F",[52,66918,3451],{"class":53950},[52,66920,57964],{"class":79},[52,66922,32],{"class":53950},[52,66924,53957],{"class":79},[52,66926,66927,66929,66931,66933,66935,66937,66939,66941,66944,66946,66948,66950],{"class":54,"line":19431},[52,66928,57952],{"class":79},[52,66930,32],{"class":53950},[52,66932,63702],{"class":79},[52,66934,3451],{"class":53950},[52,66936,63707],{"class":75},[52,66938,292],{"class":79},[52,66940,66886],{"class":62},[52,66942,66943],{"class":79},">百货\u003C\u002F",[52,66945,3451],{"class":53950},[52,66947,57964],{"class":79},[52,66949,32],{"class":53950},[52,66951,53957],{"class":79},[52,66953,66954,66956,66958,66960,66962,66964,66966,66968,66971,66973,66975,66977],{"class":54,"line":19444},[52,66955,57952],{"class":79},[52,66957,32],{"class":53950},[52,66959,63702],{"class":79},[52,66961,3451],{"class":53950},[52,66963,63707],{"class":75},[52,66965,292],{"class":79},[52,66967,66886],{"class":62},[52,66969,66970],{"class":79},">个护\u003C\u002F",[52,66972,3451],{"class":53950},[52,66974,57964],{"class":79},[52,66976,32],{"class":53950},[52,66978,53957],{"class":79},[52,66980,66981,66983,66985,66987,66989,66991,66993,66995,66998,67000,67002,67004],{"class":54,"line":19449},[52,66982,57952],{"class":79},[52,66984,32],{"class":53950},[52,66986,63702],{"class":79},[52,66988,3451],{"class":53950},[52,66990,63707],{"class":75},[52,66992,292],{"class":79},[52,66994,66886],{"class":62},[52,66996,66997],{"class":79},">预告\u003C\u002F",[52,66999,3451],{"class":53950},[52,67001,57964],{"class":79},[52,67003,32],{"class":53950},[52,67005,53957],{"class":79},[52,67007,67008,67010,67012],{"class":54,"line":19463},[52,67009,58057],{"class":79},[52,67011,29],{"class":53950},[52,67013,53957],{"class":79},[52,67015,67016,67018,67020],{"class":54,"line":19468},[52,67017,54426],{"class":79},[52,67019,54261],{"class":53950},[52,67021,53957],{"class":79},[52,67023,67024,67026,67028,67030,67032,67035],{"class":54,"line":19474},[52,67025,53991],{"class":79},[52,67027,54261],{"class":53950},[52,67029,56136],{"class":75},[52,67031,292],{"class":79},[52,67033,67034],{"class":62},"\"tab-content\"",[52,67036,53957],{"class":79},[52,67038,67039,67041,67043,67045,67047,67050,67052,67054,67056,67058,67061,67063,67065,67067,67070,67072],{"class":54,"line":19479},[52,67040,57884],{"class":79},[52,67042,54261],{"class":53950},[52,67044,56136],{"class":75},[52,67046,292],{"class":79},[52,67048,67049],{"class":62},"\"item active\"",[52,67051,63702],{"class":79},[52,67053,4509],{"class":53950},[52,67055,57889],{"class":75},[52,67057,292],{"class":79},[52,67059,67060],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[52,67062,57897],{"class":75},[52,67064,292],{"class":79},[52,67066,10607],{"class":62},[52,67068,67069],{"class":79}," \u002F>\u003C\u002F",[52,67071,54261],{"class":53950},[52,67073,53957],{"class":79},[52,67075,67076,67078,67080,67082,67084,67086,67088,67090,67092,67094,67097,67099,67101,67103,67105,67107],{"class":54,"line":19493},[52,67077,57884],{"class":79},[52,67079,54261],{"class":53950},[52,67081,56136],{"class":75},[52,67083,292],{"class":79},[52,67085,65273],{"class":62},[52,67087,63702],{"class":79},[52,67089,4509],{"class":53950},[52,67091,57889],{"class":75},[52,67093,292],{"class":79},[52,67095,67096],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[52,67098,57897],{"class":75},[52,67100,292],{"class":79},[52,67102,10607],{"class":62},[52,67104,67069],{"class":79},[52,67106,54261],{"class":53950},[52,67108,53957],{"class":79},[52,67110,67111,67113,67115,67117,67119,67121,67123,67125,67127,67129,67132,67134,67136,67138,67140,67142],{"class":54,"line":19498},[52,67112,57884],{"class":79},[52,67114,54261],{"class":53950},[52,67116,56136],{"class":75},[52,67118,292],{"class":79},[52,67120,65273],{"class":62},[52,67122,63702],{"class":79},[52,67124,4509],{"class":53950},[52,67126,57889],{"class":75},[52,67128,292],{"class":79},[52,67130,67131],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[52,67133,57897],{"class":75},[52,67135,292],{"class":79},[52,67137,10607],{"class":62},[52,67139,67069],{"class":79},[52,67141,54261],{"class":53950},[52,67143,53957],{"class":79},[52,67145,67146,67148,67150,67152,67154,67156,67158,67160,67162,67164,67167,67169,67171,67173,67175,67177],{"class":54,"line":19503},[52,67147,57884],{"class":79},[52,67149,54261],{"class":53950},[52,67151,56136],{"class":75},[52,67153,292],{"class":79},[52,67155,65273],{"class":62},[52,67157,63702],{"class":79},[52,67159,4509],{"class":53950},[52,67161,57889],{"class":75},[52,67163,292],{"class":79},[52,67165,67166],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[52,67168,57897],{"class":75},[52,67170,292],{"class":79},[52,67172,10607],{"class":62},[52,67174,67069],{"class":79},[52,67176,54261],{"class":53950},[52,67178,53957],{"class":79},[52,67180,67181,67183,67185,67187,67189,67191,67193,67195,67197,67199,67202,67204,67206,67208,67210,67212],{"class":54,"line":19517},[52,67182,57884],{"class":79},[52,67184,54261],{"class":53950},[52,67186,56136],{"class":75},[52,67188,292],{"class":79},[52,67190,65273],{"class":62},[52,67192,63702],{"class":79},[52,67194,4509],{"class":53950},[52,67196,57889],{"class":75},[52,67198,292],{"class":79},[52,67200,67201],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[52,67203,57897],{"class":75},[52,67205,292],{"class":79},[52,67207,10607],{"class":62},[52,67209,67069],{"class":79},[52,67211,54261],{"class":53950},[52,67213,53957],{"class":79},[52,67215,67216,67218,67220],{"class":54,"line":19529},[52,67217,54426],{"class":79},[52,67219,54261],{"class":53950},[52,67221,53957],{"class":79},[52,67223,67224,67226,67228],{"class":54,"line":19534},[52,67225,55067],{"class":79},[52,67227,54261],{"class":53950},[52,67229,53957],{"class":79},[52,67231,67232,67234,67236],{"class":54,"line":19547},[52,67233,54794],{"class":79},[52,67235,54463],{"class":53950},[52,67237,53957],{"class":79},[52,67239,67240],{"class":54,"line":19552},[52,67241,67242],{"class":94},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[52,67244,67245],{"class":54,"line":19557},[52,67246,67247],{"class":94},"    \u002F\u002F 1.1 获取 a 元素 \n",[52,67249,67250,67252,67255,67257,67259,67261,67263,67266],{"class":54,"line":19562},[52,67251,13869],{"class":58},[52,67253,67254],{"class":308}," as",[52,67256,16212],{"class":58},[52,67258,57046],{"class":79},[52,67260,58331],{"class":75},[52,67262,1216],{"class":79},[52,67264,67265],{"class":62},"'.tab-nav a'",[52,67267,708],{"class":79},[52,67269,67270],{"class":54,"line":19575},[52,67271,67272],{"class":94},"    \u002F\u002F console.log(as) \n",[52,67274,67275,67277,67279,67281,67283,67285,67287,67289,67291,67294,67296,67298,67300],{"class":54,"line":19580},[52,67276,679],{"class":58},[52,67278,682],{"class":79},[52,67280,54497],{"class":58},[52,67282,1871],{"class":79},[52,67284,292],{"class":58},[52,67286,1444],{"class":308},[52,67288,1878],{"class":79},[52,67290,698],{"class":58},[52,67292,67293],{"class":79}," as.",[52,67295,54618],{"class":308},[52,67297,6200],{"class":79},[52,67299,705],{"class":58},[52,67301,15090],{"class":79},[52,67303,67304],{"class":54,"line":35283},[52,67305,67306],{"class":94},"      \u002F\u002F console.log(as[i])\n",[52,67308,67309],{"class":54,"line":35289},[52,67310,67311],{"class":94},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[52,67313,67314,67317,67319,67321,67324,67326,67328],{"class":54,"line":35295},[52,67315,67316],{"class":79},"      as[i].",[52,67318,60463],{"class":75},[52,67320,1216],{"class":79},[52,67322,67323],{"class":62},"'mouseenter'",[52,67325,15083],{"class":79},[52,67327,57099],{"class":58},[52,67329,57102],{"class":79},[52,67331,67332],{"class":54,"line":35301},[52,67333,67334],{"class":94},"        \u002F\u002F console.log('鼠标经过')\n",[52,67336,67337],{"class":54,"line":35307},[52,67338,67339],{"class":94},"        \u002F\u002F 排他思想  \n",[52,67341,67342],{"class":54,"line":35318},[52,67343,67344],{"class":94},"        \u002F\u002F 干掉别人 移除类active\n",[52,67346,67347,67349,67351,67353,67356,67358,67360,67362,67365],{"class":54,"line":35324},[52,67348,54575],{"class":79},[52,67350,57049],{"class":75},[52,67352,1216],{"class":79},[52,67354,67355],{"class":62},"'.tab-nav .active'",[52,67357,59653],{"class":79},[52,67359,59656],{"class":75},[52,67361,1216],{"class":79},[52,67363,67364],{"class":62},"'active'",[52,67366,708],{"class":79},[52,67368,67369],{"class":54,"line":35344},[52,67370,67371],{"class":94},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[52,67373,67374,67377,67380,67382,67384,67386],{"class":54,"line":35350},[52,67375,67376],{"class":308},"        this",[52,67378,67379],{"class":79},".classList.",[52,67381,8300],{"class":75},[52,67383,1216],{"class":79},[52,67385,67364],{"class":62},[52,67387,708],{"class":79},[52,67389,67390],{"class":54,"line":35361},[52,67391,123],{"emptyLinePlaceholder":122},[52,67393,67394],{"class":54,"line":35367},[52,67395,67396],{"class":94},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[52,67398,67399],{"class":54,"line":35373},[52,67400,67401],{"class":94},"        \u002F\u002F 干掉别人\n",[52,67403,67404,67406,67408,67410,67413,67415,67417,67419,67421],{"class":54,"line":35379},[52,67405,54575],{"class":79},[52,67407,57049],{"class":75},[52,67409,1216],{"class":79},[52,67411,67412],{"class":62},"'.tab-content .active'",[52,67414,59653],{"class":79},[52,67416,59656],{"class":75},[52,67418,1216],{"class":79},[52,67420,67364],{"class":62},[52,67422,708],{"class":79},[52,67424,67425],{"class":54,"line":35385},[52,67426,67427],{"class":94},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[52,67429,67430,67432,67434,67436,67439,67441,67443,67445,67447,67449,67451,67453,67455],{"class":54,"line":35391},[52,67431,54575],{"class":79},[52,67433,57049],{"class":75},[52,67435,1216],{"class":79},[52,67437,67438],{"class":62},"`.tab-content .item:nth-child(${",[52,67440,3644],{"class":79},[52,67442,48216],{"class":58},[52,67444,27768],{"class":308},[52,67446,59682],{"class":62},[52,67448,59653],{"class":79},[52,67450,8300],{"class":75},[52,67452,1216],{"class":79},[52,67454,67364],{"class":62},[52,67456,708],{"class":79},[52,67458,67459],{"class":54,"line":35397},[52,67460,123],{"emptyLinePlaceholder":122},[52,67462,67463],{"class":54,"line":35403},[52,67464,67465],{"class":79},"      })\n",[52,67467,67468],{"class":54,"line":35423},[52,67469,616],{"class":79},[52,67471,67472,67474,67476],{"class":54,"line":35429},[52,67473,55067],{"class":79},[52,67475,54463],{"class":53950},[52,67477,53957],{"class":79},[52,67479,67480,67482,67484],{"class":54,"line":35445},[52,67481,54435],{"class":79},[52,67483,54450],{"class":53950},[52,67485,53957],{"class":79},[52,67487,67488],{"class":54,"line":35451},[52,67489,123],{"emptyLinePlaceholder":122},[52,67491,67492,67494,67496],{"class":54,"line":35465},[52,67493,54435],{"class":79},[52,67495,53285],{"class":53950},[52,67497,53957],{"class":79},[14,67499,67500],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,67502,67503],{},"在监听事件中，this指向的就是他的调用者",[14,67505,67506],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,67508,56370],{},[14,67510,67511],{},"(function () {",[14,67513,67514],{},"const list = document.querySelector('.xtx-elevator-list')",[14,67516,67517],{},"list.addEventListener('click', function (e) {",[14,67519,67520],{},"if (e.target.tagName === 'A') {",[14,67522,67523],{},"\u002F\u002F 排他思想",[14,67525,67526],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,67528,67529],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,67531,67532],{},"\u002F\u002F console.log(old);",[14,67534,67535],{},"\u002F\u002F 判断",[14,67537,67538],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,67540,67541],{},"if (old) old.classList.remove('active')",[14,67543,67544],{},"e.target.classList.add('active')",[14,67546,4132],{},[14,67548,55114],{},[14,67550,67551],{},"})();",[3195,67553,67555],{"id":67554},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[42,67557,67559],{"className":53283,"code":67558,"language":53285,"meta":47,"style":47},"\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",[49,67560,67561,67571,67575,67583,67587,67601,67615,67627,67635,67641,67651,67661,67665,67669,67676,67688,67699,67716,67729,67743,67753,67757,67761,67768,67779,67797,67807,67819,67823,67827,67834,67851,67862,67874,67878,67882,67889,67901,67905,67913,67921,67925,67933,67941,67949,67964,68008,68016,68029,68042,68055,68063,68071,68079,68107,68115,68127,68140,68153,68161,68169,68177,68203,68211,68224,68236,68249,68257,68265,68273,68299,68307,68320,68332,68345,68353,68361,68369,68374,68394,68399,68419,68424,68441,68446,68454,68459,68488,68501,68505,68509,68514,68518,68546,68551,68568,68573,68578,68583,68588,68614,68618,68622,68630,68638,68642],{"__ignoreMap":47},[52,67562,67563,67565,67567,67569],{"class":54,"line":55},[52,67564,53947],{"class":79},[52,67566,53951],{"class":53950},[52,67568,53954],{"class":75},[52,67570,53957],{"class":79},[52,67572,67573],{"class":54,"line":66},[52,67574,123],{"emptyLinePlaceholder":122},[52,67576,67577,67579,67581],{"class":54,"line":83},[52,67578,698],{"class":79},[52,67580,53285],{"class":53950},[52,67582,53957],{"class":79},[52,67584,67585],{"class":54,"line":91},[52,67586,123],{"emptyLinePlaceholder":122},[52,67588,67589,67591,67593,67595,67597,67599],{"class":54,"line":98},[52,67590,698],{"class":79},[52,67592,53984],{"class":53950},[52,67594,53966],{"class":75},[52,67596,292],{"class":79},[52,67598,53971],{"class":62},[52,67600,53957],{"class":79},[52,67602,67603,67605,67607,67609,67611,67613],{"class":54,"line":107},[52,67604,54794],{"class":79},[52,67606,53994],{"class":53950},[52,67608,53997],{"class":75},[52,67610,292],{"class":79},[52,67612,54002],{"class":62},[52,67614,53957],{"class":79},[52,67616,67617,67619,67621,67623,67625],{"class":54,"line":113},[52,67618,54794],{"class":79},[52,67620,54057],{"class":53950},[52,67622,57964],{"class":79},[52,67624,54057],{"class":53950},[52,67626,53957],{"class":79},[52,67628,67629,67631,67633],{"class":54,"line":119},[52,67630,54794],{"class":79},[52,67632,3141],{"class":53950},[52,67634,53957],{"class":79},[52,67636,67637,67639],{"class":54,"line":126},[52,67638,9366],{"class":53950},[52,67640,18220],{"class":79},[52,67642,67643,67645,67647,67649],{"class":54,"line":132},[52,67644,57356],{"class":308},[52,67646,54087],{"class":79},[52,67648,692],{"class":308},[52,67650,80],{"class":79},[52,67652,67653,67655,67657,67659],{"class":54,"line":138},[52,67654,57345],{"class":308},[52,67656,54087],{"class":79},[52,67658,692],{"class":308},[52,67660,80],{"class":79},[52,67662,67663],{"class":54,"line":144},[52,67664,616],{"class":79},[52,67666,67667],{"class":54,"line":153},[52,67668,123],{"emptyLinePlaceholder":122},[52,67670,67671,67674],{"class":54,"line":159},[52,67672,67673],{"class":53950},"    table",[52,67675,18220],{"class":79},[52,67677,67678,67681,67683,67686],{"class":54,"line":167},[52,67679,67680],{"class":308},"      border-collapse",[52,67682,54087],{"class":79},[52,67684,67685],{"class":308},"collapse",[52,67687,80],{"class":79},[52,67689,67690,67693,67695,67697],{"class":54,"line":173},[52,67691,67692],{"class":308},"      border-spacing",[52,67694,54087],{"class":79},[52,67696,692],{"class":308},[52,67698,80],{"class":79},[52,67700,67701,67703,67705,67707,67709,67711,67714],{"class":54,"line":181},[52,67702,64627],{"class":308},[52,67704,54087],{"class":79},[52,67706,629],{"class":308},[52,67708,54142],{"class":58},[52,67710,54171],{"class":308},[52,67712,67713],{"class":308}," #c0c0c0",[52,67715,80],{"class":79},[52,67717,67718,67720,67722,67725,67727],{"class":54,"line":186},[52,67719,57421],{"class":308},[52,67721,54087],{"class":79},[52,67723,67724],{"class":308},"500",[52,67726,54142],{"class":58},[52,67728,80],{"class":79},[52,67730,67731,67733,67735,67737,67739,67741],{"class":54,"line":191},[52,67732,57356],{"class":308},[52,67734,54087],{"class":79},[52,67736,591],{"class":308},[52,67738,54142],{"class":58},[52,67740,54206],{"class":308},[52,67742,80],{"class":79},[52,67744,67745,67747,67749,67751],{"class":54,"line":196},[52,67746,59936],{"class":308},[52,67748,54087],{"class":79},[52,67750,54242],{"class":308},[52,67752,80],{"class":79},[52,67754,67755],{"class":54,"line":201},[52,67756,616],{"class":79},[52,67758,67759],{"class":54,"line":206},[52,67760,123],{"emptyLinePlaceholder":122},[52,67762,67763,67766],{"class":54,"line":211},[52,67764,67765],{"class":53950},"    th",[52,67767,18220],{"class":79},[52,67769,67770,67772,67774,67777],{"class":54,"line":218},[52,67771,57534],{"class":308},[52,67773,54087],{"class":79},[52,67775,67776],{"class":308},"#09c",[52,67778,80],{"class":79},[52,67780,67781,67784,67786,67788,67790,67792,67795],{"class":54,"line":223},[52,67782,67783],{"class":308},"      font",[52,67785,54087],{"class":79},[52,67787,64989],{"class":308},[52,67789,66723],{"class":308},[52,67791,54142],{"class":58},[52,67793,67794],{"class":62}," \"微软雅黑\"",[52,67796,80],{"class":79},[52,67798,67799,67801,67803,67805],{"class":54,"line":230},[52,67800,60066],{"class":308},[52,67802,54087],{"class":79},[52,67804,63492],{"class":308},[52,67806,80],{"class":79},[52,67808,67809,67811,67813,67815,67817],{"class":54,"line":239},[52,67810,57435],{"class":308},[52,67812,54087],{"class":79},[52,67814,3990],{"class":308},[52,67816,54142],{"class":58},[52,67818,80],{"class":79},[52,67820,67821],{"class":54,"line":251},[52,67822,616],{"class":79},[52,67824,67825],{"class":54,"line":256},[52,67826,123],{"emptyLinePlaceholder":122},[52,67828,67829,67832],{"class":54,"line":262},[52,67830,67831],{"class":53950},"    td",[52,67833,18220],{"class":79},[52,67835,67836,67838,67840,67842,67844,67846,67849],{"class":54,"line":268},[52,67837,64627],{"class":308},[52,67839,54087],{"class":79},[52,67841,629],{"class":308},[52,67843,54142],{"class":58},[52,67845,54171],{"class":308},[52,67847,67848],{"class":308}," #d0d0d0",[52,67850,80],{"class":79},[52,67852,67853,67855,67857,67860],{"class":54,"line":280},[52,67854,60066],{"class":308},[52,67856,54087],{"class":79},[52,67858,67859],{"class":308},"#404060",[52,67861,80],{"class":79},[52,67863,67864,67866,67868,67870,67872],{"class":54,"line":286},[52,67865,57345],{"class":308},[52,67867,54087],{"class":79},[52,67869,3649],{"class":308},[52,67871,54142],{"class":58},[52,67873,80],{"class":79},[52,67875,67876],{"class":54,"line":300},[52,67877,616],{"class":79},[52,67879,67880],{"class":54,"line":314},[52,67881,123],{"emptyLinePlaceholder":122},[52,67883,67884,67887],{"class":54,"line":327},[52,67885,67886],{"class":75},"    .allCheck",[52,67888,18220],{"class":79},[52,67890,67891,67893,67895,67897,67899],{"class":54,"line":333},[52,67892,57421],{"class":308},[52,67894,54087],{"class":79},[52,67896,3809],{"class":308},[52,67898,54142],{"class":58},[52,67900,80],{"class":79},[52,67902,67903],{"class":54,"line":360},[52,67904,616],{"class":79},[52,67906,67907,67909,67911],{"class":54,"line":365},[52,67908,55067],{"class":79},[52,67910,3141],{"class":53950},[52,67912,53957],{"class":79},[52,67914,67915,67917,67919],{"class":54,"line":371},[52,67916,54435],{"class":79},[52,67918,53984],{"class":53950},[52,67920,53957],{"class":79},[52,67922,67923],{"class":54,"line":400},[52,67924,123],{"emptyLinePlaceholder":122},[52,67926,67927,67929,67931],{"class":54,"line":405},[52,67928,698],{"class":79},[52,67930,54450],{"class":53950},[52,67932,53957],{"class":79},[52,67934,67935,67937,67939],{"class":54,"line":411},[52,67936,54794],{"class":79},[52,67938,3353],{"class":53950},[52,67940,53957],{"class":79},[52,67942,67943,67945,67947],{"class":54,"line":424},[52,67944,53991],{"class":79},[52,67946,3359],{"class":53950},[52,67948,53957],{"class":79},[52,67950,67951,67953,67955,67957,67959,67962],{"class":54,"line":436},[52,67952,57884],{"class":79},[52,67954,3362],{"class":53950},[52,67956,56136],{"class":75},[52,67958,292],{"class":79},[52,67960,67961],{"class":62},"\"allCheck\"",[52,67963,53957],{"class":79},[52,67965,67966,67968,67970,67972,67974,67976,67978,67980,67982,67984,67986,67989,67992,67994,67996,67998,68001,68004,68006],{"class":54,"line":449},[52,67967,57952],{"class":79},[52,67969,56471],{"class":53950},[52,67971,56474],{"class":75},[52,67973,292],{"class":79},[52,67975,56479],{"class":62},[52,67977,17568],{"class":75},[52,67979,292],{"class":79},[52,67981,10607],{"class":62},[52,67983,17607],{"class":75},[52,67985,292],{"class":79},[52,67987,67988],{"class":62},"\"checkAll\"",[52,67990,67991],{"class":79},"> \u003C",[52,67993,52],{"class":53950},[52,67995,56136],{"class":75},[52,67997,292],{"class":79},[52,67999,68000],{"class":62},"\"all\"",[52,68002,68003],{"class":79},">全选\u003C\u002F",[52,68005,52],{"class":53950},[52,68007,53957],{"class":79},[52,68009,68010,68012,68014],{"class":54,"line":2160},[52,68011,58057],{"class":79},[52,68013,3362],{"class":53950},[52,68015,53957],{"class":79},[52,68017,68018,68020,68022,68025,68027],{"class":54,"line":2186},[52,68019,57884],{"class":79},[52,68021,3362],{"class":53950},[52,68023,68024],{"class":79},">商品\u003C\u002F",[52,68026,3362],{"class":53950},[52,68028,53957],{"class":79},[52,68030,68031,68033,68035,68038,68040],{"class":54,"line":2209},[52,68032,57884],{"class":79},[52,68034,3362],{"class":53950},[52,68036,68037],{"class":79},">商家\u003C\u002F",[52,68039,3362],{"class":53950},[52,68041,53957],{"class":79},[52,68043,68044,68046,68048,68051,68053],{"class":54,"line":2233},[52,68045,57884],{"class":79},[52,68047,3362],{"class":53950},[52,68049,68050],{"class":79},">价格\u003C\u002F",[52,68052,3362],{"class":53950},[52,68054,53957],{"class":79},[52,68056,68057,68059,68061],{"class":54,"line":2238},[52,68058,54426],{"class":79},[52,68060,3359],{"class":53950},[52,68062,53957],{"class":79},[52,68064,68065,68067,68069],{"class":54,"line":2243},[52,68066,53991],{"class":79},[52,68068,3359],{"class":53950},[52,68070,53957],{"class":79},[52,68072,68073,68075,68077],{"class":54,"line":2248},[52,68074,57884],{"class":79},[52,68076,3404],{"class":53950},[52,68078,53957],{"class":79},[52,68080,68081,68083,68085,68087,68089,68091,68093,68095,68098,68100,68102,68105],{"class":54,"line":2257},[52,68082,57952],{"class":79},[52,68084,56471],{"class":53950},[52,68086,56474],{"class":75},[52,68088,292],{"class":79},[52,68090,56479],{"class":62},[52,68092,17568],{"class":75},[52,68094,292],{"class":79},[52,68096,68097],{"class":62},"\"check\"",[52,68099,56136],{"class":75},[52,68101,292],{"class":79},[52,68103,68104],{"class":62},"\"ck\"",[52,68106,53957],{"class":79},[52,68108,68109,68111,68113],{"class":54,"line":2262},[52,68110,58057],{"class":79},[52,68112,3404],{"class":53950},[52,68114,53957],{"class":79},[52,68116,68117,68119,68121,68123,68125],{"class":54,"line":2268},[52,68118,57884],{"class":79},[52,68120,3404],{"class":53950},[52,68122,63823],{"class":79},[52,68124,3404],{"class":53950},[52,68126,53957],{"class":79},[52,68128,68129,68131,68133,68136,68138],{"class":54,"line":2297},[52,68130,57884],{"class":79},[52,68132,3404],{"class":53950},[52,68134,68135],{"class":79},">小米\u003C\u002F",[52,68137,3404],{"class":53950},[52,68139,53957],{"class":79},[52,68141,68142,68144,68146,68149,68151],{"class":54,"line":2303},[52,68143,57884],{"class":79},[52,68145,3404],{"class":53950},[52,68147,68148],{"class":79},">￥1999\u003C\u002F",[52,68150,3404],{"class":53950},[52,68152,53957],{"class":79},[52,68154,68155,68157,68159],{"class":54,"line":2318},[52,68156,54426],{"class":79},[52,68158,3359],{"class":53950},[52,68160,53957],{"class":79},[52,68162,68163,68165,68167],{"class":54,"line":2324},[52,68164,53991],{"class":79},[52,68166,3359],{"class":53950},[52,68168,53957],{"class":79},[52,68170,68171,68173,68175],{"class":54,"line":2353},[52,68172,57884],{"class":79},[52,68174,3404],{"class":53950},[52,68176,53957],{"class":79},[52,68178,68179,68181,68183,68185,68187,68189,68191,68193,68195,68197,68199,68201],{"class":54,"line":2362},[52,68180,57952],{"class":79},[52,68182,56471],{"class":53950},[52,68184,56474],{"class":75},[52,68186,292],{"class":79},[52,68188,56479],{"class":62},[52,68190,17568],{"class":75},[52,68192,292],{"class":79},[52,68194,68097],{"class":62},[52,68196,56136],{"class":75},[52,68198,292],{"class":79},[52,68200,68104],{"class":62},[52,68202,53957],{"class":79},[52,68204,68205,68207,68209],{"class":54,"line":2368},[52,68206,58057],{"class":79},[52,68208,3404],{"class":53950},[52,68210,53957],{"class":79},[52,68212,68213,68215,68217,68220,68222],{"class":54,"line":2376},[52,68214,57884],{"class":79},[52,68216,3404],{"class":53950},[52,68218,68219],{"class":79},">小米净水器\u003C\u002F",[52,68221,3404],{"class":53950},[52,68223,53957],{"class":79},[52,68225,68226,68228,68230,68232,68234],{"class":54,"line":2381},[52,68227,57884],{"class":79},[52,68229,3404],{"class":53950},[52,68231,68135],{"class":79},[52,68233,3404],{"class":53950},[52,68235,53957],{"class":79},[52,68237,68238,68240,68242,68245,68247],{"class":54,"line":19252},[52,68239,57884],{"class":79},[52,68241,3404],{"class":53950},[52,68243,68244],{"class":79},">￥4999\u003C\u002F",[52,68246,3404],{"class":53950},[52,68248,53957],{"class":79},[52,68250,68251,68253,68255],{"class":54,"line":19258},[52,68252,54426],{"class":79},[52,68254,3359],{"class":53950},[52,68256,53957],{"class":79},[52,68258,68259,68261,68263],{"class":54,"line":19281},[52,68260,53991],{"class":79},[52,68262,3359],{"class":53950},[52,68264,53957],{"class":79},[52,68266,68267,68269,68271],{"class":54,"line":19287},[52,68268,57884],{"class":79},[52,68270,3404],{"class":53950},[52,68272,53957],{"class":79},[52,68274,68275,68277,68279,68281,68283,68285,68287,68289,68291,68293,68295,68297],{"class":54,"line":19310},[52,68276,57952],{"class":79},[52,68278,56471],{"class":53950},[52,68280,56474],{"class":75},[52,68282,292],{"class":79},[52,68284,56479],{"class":62},[52,68286,17568],{"class":75},[52,68288,292],{"class":79},[52,68290,68097],{"class":62},[52,68292,56136],{"class":75},[52,68294,292],{"class":79},[52,68296,68104],{"class":62},[52,68298,53957],{"class":79},[52,68300,68301,68303,68305],{"class":54,"line":19324},[52,68302,58057],{"class":79},[52,68304,3404],{"class":53950},[52,68306,53957],{"class":79},[52,68308,68309,68311,68313,68316,68318],{"class":54,"line":19344},[52,68310,57884],{"class":79},[52,68312,3404],{"class":53950},[52,68314,68315],{"class":79},">小米电视\u003C\u002F",[52,68317,3404],{"class":53950},[52,68319,53957],{"class":79},[52,68321,68322,68324,68326,68328,68330],{"class":54,"line":19350},[52,68323,57884],{"class":79},[52,68325,3404],{"class":53950},[52,68327,68135],{"class":79},[52,68329,3404],{"class":53950},[52,68331,53957],{"class":79},[52,68333,68334,68336,68338,68341,68343],{"class":54,"line":19361},[52,68335,57884],{"class":79},[52,68337,3404],{"class":53950},[52,68339,68340],{"class":79},">￥5999\u003C\u002F",[52,68342,3404],{"class":53950},[52,68344,53957],{"class":79},[52,68346,68347,68349,68351],{"class":54,"line":19384},[52,68348,54426],{"class":79},[52,68350,3359],{"class":53950},[52,68352,53957],{"class":79},[52,68354,68355,68357,68359],{"class":54,"line":19406},[52,68356,55067],{"class":79},[52,68358,3353],{"class":53950},[52,68360,53957],{"class":79},[52,68362,68363,68365,68367],{"class":54,"line":19411},[52,68364,54794],{"class":79},[52,68366,54463],{"class":53950},[52,68368,53957],{"class":79},[52,68370,68371],{"class":54,"line":19417},[52,68372,68373],{"class":94},"    \u002F\u002F 1. 获取大复选框\n",[52,68375,68376,68378,68381,68383,68385,68387,68389,68392],{"class":54,"line":19431},[52,68377,13869],{"class":58},[52,68379,68380],{"class":308}," checkAll",[52,68382,16212],{"class":58},[52,68384,57046],{"class":79},[52,68386,57049],{"class":75},[52,68388,1216],{"class":79},[52,68390,68391],{"class":62},"'#checkAll'",[52,68393,708],{"class":79},[52,68395,68396],{"class":54,"line":19444},[52,68397,68398],{"class":94},"    \u002F\u002F 2. 获取所有的小复选框\n",[52,68400,68401,68403,68406,68408,68410,68412,68414,68417],{"class":54,"line":19449},[52,68402,13869],{"class":58},[52,68404,68405],{"class":308}," cks",[52,68407,16212],{"class":58},[52,68409,57046],{"class":79},[52,68411,58331],{"class":75},[52,68413,1216],{"class":79},[52,68415,68416],{"class":62},"'.ck'",[52,68418,708],{"class":79},[52,68420,68421],{"class":54,"line":19463},[52,68422,68423],{"class":94},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[52,68425,68426,68429,68431,68433,68435,68437,68439],{"class":54,"line":19468},[52,68427,68428],{"class":79},"    checkAll.",[52,68430,60463],{"class":75},[52,68432,1216],{"class":79},[52,68434,60468],{"class":62},[52,68436,15083],{"class":79},[52,68438,57099],{"class":58},[52,68440,57102],{"class":79},[52,68442,68443],{"class":54,"line":19474},[52,68444,68445],{"class":94},"      \u002F\u002F 得到当前大复选框的选中状态\n",[52,68447,68448,68451],{"class":54,"line":19479},[52,68449,68450],{"class":94},"      \u002F\u002F console.log(checkAll.checked)",[52,68452,68453],{"class":94},"  \u002F\u002F 得到 是 true 或者是 false\n",[52,68455,68456],{"class":54,"line":19493},[52,68457,68458],{"class":94},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[52,68460,68461,68463,68465,68467,68469,68471,68473,68475,68477,68480,68482,68484,68486],{"class":54,"line":19498},[52,68462,54934],{"class":58},[52,68464,682],{"class":79},[52,68466,54497],{"class":58},[52,68468,1871],{"class":79},[52,68470,292],{"class":58},[52,68472,1444],{"class":308},[52,68474,1878],{"class":79},[52,68476,698],{"class":58},[52,68478,68479],{"class":79}," cks.",[52,68481,54618],{"class":308},[52,68483,6200],{"class":79},[52,68485,705],{"class":58},[52,68487,15090],{"class":79},[52,68489,68490,68493,68495,68498],{"class":54,"line":19503},[52,68491,68492],{"class":79},"        cks[i].checked ",[52,68494,292],{"class":58},[52,68496,68497],{"class":308}," this",[52,68499,68500],{"class":79},".checked\n",[52,68502,68503],{"class":54,"line":19517},[52,68504,55048],{"class":79},[52,68506,68507],{"class":54,"line":19529},[52,68508,36111],{"class":79},[52,68510,68511],{"class":54,"line":19534},[52,68512,68513],{"class":94},"    \u002F\u002F 5. 小复选框控制大复选框\n",[52,68515,68516],{"class":54,"line":19547},[52,68517,123],{"emptyLinePlaceholder":122},[52,68519,68520,68522,68524,68526,68528,68530,68532,68534,68536,68538,68540,68542,68544],{"class":54,"line":19552},[52,68521,679],{"class":58},[52,68523,682],{"class":79},[52,68525,54497],{"class":58},[52,68527,1871],{"class":79},[52,68529,292],{"class":58},[52,68531,1444],{"class":308},[52,68533,1878],{"class":79},[52,68535,698],{"class":58},[52,68537,68479],{"class":79},[52,68539,54618],{"class":308},[52,68541,6200],{"class":79},[52,68543,705],{"class":58},[52,68545,15090],{"class":79},[52,68547,68548],{"class":54,"line":19557},[52,68549,68550],{"class":94},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[52,68552,68553,68556,68558,68560,68562,68564,68566],{"class":54,"line":19562},[52,68554,68555],{"class":79},"      cks[i].",[52,68557,60463],{"class":75},[52,68559,1216],{"class":79},[52,68561,60468],{"class":62},[52,68563,15083],{"class":79},[52,68565,57099],{"class":58},[52,68567,57102],{"class":79},[52,68569,68570],{"class":54,"line":19575},[52,68571,68572],{"class":94},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[52,68574,68575],{"class":54,"line":19580},[52,68576,68577],{"class":94},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[52,68579,68580],{"class":54,"line":35283},[52,68581,68582],{"class":94},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[52,68584,68585],{"class":54,"line":35289},[52,68586,68587],{"class":94},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[52,68589,68590,68593,68595,68597,68599,68601,68604,68606,68608,68610,68612],{"class":54,"line":35295},[52,68591,68592],{"class":79},"        checkAll.checked ",[52,68594,292],{"class":58},[52,68596,57046],{"class":79},[52,68598,58331],{"class":75},[52,68600,1216],{"class":79},[52,68602,68603],{"class":62},"'.ck:checked'",[52,68605,33476],{"class":79},[52,68607,54618],{"class":308},[52,68609,60556],{"class":58},[52,68611,68479],{"class":79},[52,68613,58481],{"class":308},[52,68615,68616],{"class":54,"line":35301},[52,68617,67465],{"class":79},[52,68619,68620],{"class":54,"line":35307},[52,68621,616],{"class":79},[52,68623,68624,68626,68628],{"class":54,"line":35318},[52,68625,55067],{"class":79},[52,68627,54463],{"class":53950},[52,68629,53957],{"class":79},[52,68631,68632,68634,68636],{"class":54,"line":35324},[52,68633,54435],{"class":79},[52,68635,54450],{"class":53950},[52,68637,53957],{"class":79},[52,68639,68640],{"class":54,"line":35344},[52,68641,123],{"emptyLinePlaceholder":122},[52,68643,68644,68646,68648],{"class":54,"line":35350},[52,68645,54435],{"class":79},[52,68647,53285],{"class":53950},[52,68649,53957],{"class":79},[14,68651,68652],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,68654,68655],{},"用好之间比较得到的布尔值！！！",[14,68657,68658,68659,68662,68663,682,68666,2340,68668,68671],{},"在 JS 里访问的时候，",[49,68660,68661],{},"checkbox.checked"," 是一个 ",[2389,68664,68665],{},"布尔值",[49,68667,4410],{},[49,68669,68670],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,68673,68674,68675,68678,68679],{},"HTML 的 ",[49,68676,68677],{},"checked=\"checked\""," 只是 ",[2389,68680,68681,68682,68685],{},"初始值；JS 的 ",[49,68683,68684],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,68687,68688],{},"：checked是一个伪类选择器",[14,68690,68691],{},[4509,68692],{"alt":47,"src":68693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,68695,68696,68699],{},[68697,68698],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,68701,68702],{},[4509,68703],{"alt":47,"src":68704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[18,68706,68708],{"id":68707},"_33-dom事件进阶","3.3 DOM事件进阶",[3195,68710,68712],{"id":68711},"_331-事件流","3.3.1 事件流",[14,68714,68715],{},[4509,68716],{"alt":47,"src":68717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[24646,68719,68721],{"id":68720},"_3311-事件捕获","3.3.1.1 事件捕获",[14,68723,68724],{},[4509,68725],{"alt":47,"src":68726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[42,68728,68730],{"className":53283,"code":68729,"language":53285,"meta":47,"style":47},"\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",[49,68731,68732,68742,68756,68760,68768,68782,68802,68814,68822,68829,68841,68853,68863,68867,68871,68878,68890,68902,68912,68916,68924,68932,68936,68944,68959,68978,68986,68994,69014,69034,69050,69061,69069,69086,69097,69105,69122,69133,69141,69149,69157,69161],{"__ignoreMap":47},[52,68733,68734,68736,68738,68740],{"class":54,"line":55},[52,68735,53947],{"class":79},[52,68737,53951],{"class":53950},[52,68739,53954],{"class":75},[52,68741,53957],{"class":79},[52,68743,68744,68746,68748,68750,68752,68754],{"class":54,"line":66},[52,68745,698],{"class":79},[52,68747,53285],{"class":53950},[52,68749,53966],{"class":75},[52,68751,292],{"class":79},[52,68753,53971],{"class":62},[52,68755,53957],{"class":79},[52,68757,68758],{"class":54,"line":83},[52,68759,123],{"emptyLinePlaceholder":122},[52,68761,68762,68764,68766],{"class":54,"line":91},[52,68763,698],{"class":79},[52,68765,53984],{"class":53950},[52,68767,53957],{"class":79},[52,68769,68770,68772,68774,68776,68778,68780],{"class":54,"line":98},[52,68771,54794],{"class":79},[52,68773,53994],{"class":53950},[52,68775,53997],{"class":75},[52,68777,292],{"class":79},[52,68779,54002],{"class":62},[52,68781,53957],{"class":79},[52,68783,68784,68786,68788,68790,68792,68794,68796,68798,68800],{"class":54,"line":107},[52,68785,54794],{"class":79},[52,68787,53994],{"class":53950},[52,68789,17568],{"class":75},[52,68791,292],{"class":79},[52,68793,54041],{"class":62},[52,68795,54021],{"class":75},[52,68797,292],{"class":79},[52,68799,54048],{"class":62},[52,68801,53957],{"class":79},[52,68803,68804,68806,68808,68810,68812],{"class":54,"line":113},[52,68805,54794],{"class":79},[52,68807,54057],{"class":53950},[52,68809,54060],{"class":79},[52,68811,54057],{"class":53950},[52,68813,53957],{"class":79},[52,68815,68816,68818,68820],{"class":54,"line":119},[52,68817,54794],{"class":79},[52,68819,3141],{"class":53950},[52,68821,53957],{"class":79},[52,68823,68824,68827],{"class":54,"line":126},[52,68825,68826],{"class":75},"    .father",[52,68828,18220],{"class":79},[52,68830,68831,68833,68835,68837,68839],{"class":54,"line":132},[52,68832,57421],{"class":308},[52,68834,54087],{"class":79},[52,68836,67724],{"class":308},[52,68838,54142],{"class":58},[52,68840,80],{"class":79},[52,68842,68843,68845,68847,68849,68851],{"class":54,"line":138},[52,68844,57435],{"class":308},[52,68846,54087],{"class":79},[52,68848,67724],{"class":308},[52,68850,54142],{"class":58},[52,68852,80],{"class":79},[52,68854,68855,68857,68859,68861],{"class":54,"line":144},[52,68856,57534],{"class":308},[52,68858,54087],{"class":79},[52,68860,54295],{"class":308},[52,68862,80],{"class":79},[52,68864,68865],{"class":54,"line":153},[52,68866,616],{"class":79},[52,68868,68869],{"class":54,"line":159},[52,68870,123],{"emptyLinePlaceholder":122},[52,68872,68873,68876],{"class":54,"line":167},[52,68874,68875],{"class":75},"    .son",[52,68877,18220],{"class":79},[52,68879,68880,68882,68884,68886,68888],{"class":54,"line":173},[52,68881,57421],{"class":308},[52,68883,54087],{"class":79},[52,68885,856],{"class":308},[52,68887,54142],{"class":58},[52,68889,80],{"class":79},[52,68891,68892,68894,68896,68898,68900],{"class":54,"line":181},[52,68893,57435],{"class":308},[52,68895,54087],{"class":79},[52,68897,856],{"class":308},[52,68899,54142],{"class":58},[52,68901,80],{"class":79},[52,68903,68904,68906,68908,68910],{"class":54,"line":186},[52,68905,57534],{"class":308},[52,68907,54087],{"class":79},[52,68909,57539],{"class":308},[52,68911,80],{"class":79},[52,68913,68914],{"class":54,"line":191},[52,68915,616],{"class":79},[52,68917,68918,68920,68922],{"class":54,"line":196},[52,68919,55067],{"class":79},[52,68921,3141],{"class":53950},[52,68923,53957],{"class":79},[52,68925,68926,68928,68930],{"class":54,"line":201},[52,68927,54435],{"class":79},[52,68929,53984],{"class":53950},[52,68931,53957],{"class":79},[52,68933,68934],{"class":54,"line":206},[52,68935,123],{"emptyLinePlaceholder":122},[52,68937,68938,68940,68942],{"class":54,"line":211},[52,68939,698],{"class":79},[52,68941,54450],{"class":53950},[52,68943,53957],{"class":79},[52,68945,68946,68948,68950,68952,68954,68957],{"class":54,"line":218},[52,68947,54794],{"class":79},[52,68949,54261],{"class":53950},[52,68951,56136],{"class":75},[52,68953,292],{"class":79},[52,68955,68956],{"class":62},"\"father\"",[52,68958,53957],{"class":79},[52,68960,68961,68963,68965,68967,68969,68972,68974,68976],{"class":54,"line":223},[52,68962,53991],{"class":79},[52,68964,54261],{"class":53950},[52,68966,56136],{"class":75},[52,68968,292],{"class":79},[52,68970,68971],{"class":62},"\"son\"",[52,68973,57964],{"class":79},[52,68975,54261],{"class":53950},[52,68977,53957],{"class":79},[52,68979,68980,68982,68984],{"class":54,"line":230},[52,68981,55067],{"class":79},[52,68983,54261],{"class":53950},[52,68985,53957],{"class":79},[52,68987,68988,68990,68992],{"class":54,"line":239},[52,68989,54794],{"class":79},[52,68991,54463],{"class":53950},[52,68993,53957],{"class":79},[52,68995,68996,68998,69001,69003,69005,69007,69009,69012],{"class":54,"line":251},[52,68997,13869],{"class":58},[52,68999,69000],{"class":308}," fa",[52,69002,16212],{"class":58},[52,69004,57046],{"class":79},[52,69006,57049],{"class":75},[52,69008,1216],{"class":79},[52,69010,69011],{"class":62},"'.father'",[52,69013,708],{"class":79},[52,69015,69016,69018,69021,69023,69025,69027,69029,69032],{"class":54,"line":256},[52,69017,13869],{"class":58},[52,69019,69020],{"class":308}," son",[52,69022,16212],{"class":58},[52,69024,57046],{"class":79},[52,69026,57049],{"class":75},[52,69028,1216],{"class":79},[52,69030,69031],{"class":62},"'.son'",[52,69033,708],{"class":79},[52,69035,69036,69038,69040,69042,69044,69046,69048],{"class":54,"line":262},[52,69037,55057],{"class":79},[52,69039,60463],{"class":75},[52,69041,1216],{"class":79},[52,69043,60468],{"class":62},[52,69045,15083],{"class":79},[52,69047,57099],{"class":58},[52,69049,57102],{"class":79},[52,69051,69052,69054,69056,69059],{"class":54,"line":268},[52,69053,61575],{"class":75},[52,69055,1216],{"class":79},[52,69057,69058],{"class":62},"'woshiu1'",[52,69060,708],{"class":79},[52,69062,69063,69065,69067],{"class":54,"line":280},[52,69064,57185],{"class":79},[52,69066,4410],{"class":308},[52,69068,708],{"class":79},[52,69070,69071,69074,69076,69078,69080,69082,69084],{"class":54,"line":286},[52,69072,69073],{"class":79},"    fa.",[52,69075,60463],{"class":75},[52,69077,1216],{"class":79},[52,69079,60468],{"class":62},[52,69081,15083],{"class":79},[52,69083,57099],{"class":58},[52,69085,57102],{"class":79},[52,69087,69088,69090,69092,69095],{"class":54,"line":300},[52,69089,61575],{"class":75},[52,69091,1216],{"class":79},[52,69093,69094],{"class":62},"'1'",[52,69096,708],{"class":79},[52,69098,69099,69101,69103],{"class":54,"line":314},[52,69100,57185],{"class":79},[52,69102,4410],{"class":308},[52,69104,708],{"class":79},[52,69106,69107,69110,69112,69114,69116,69118,69120],{"class":54,"line":327},[52,69108,69109],{"class":79},"    son.",[52,69111,60463],{"class":75},[52,69113,1216],{"class":79},[52,69115,60468],{"class":62},[52,69117,15083],{"class":79},[52,69119,57099],{"class":58},[52,69121,57102],{"class":79},[52,69123,69124,69126,69128,69131],{"class":54,"line":333},[52,69125,61575],{"class":75},[52,69127,1216],{"class":79},[52,69129,69130],{"class":62},"'2'",[52,69132,708],{"class":79},[52,69134,69135,69137,69139],{"class":54,"line":360},[52,69136,57185],{"class":79},[52,69138,4410],{"class":308},[52,69140,708],{"class":79},[52,69142,69143,69145,69147],{"class":54,"line":365},[52,69144,55067],{"class":79},[52,69146,54463],{"class":53950},[52,69148,53957],{"class":79},[52,69150,69151,69153,69155],{"class":54,"line":371},[52,69152,54435],{"class":79},[52,69154,54450],{"class":53950},[52,69156,53957],{"class":79},[52,69158,69159],{"class":54,"line":400},[52,69160,123],{"emptyLinePlaceholder":122},[52,69162,69163,69165,69167],{"class":54,"line":405},[52,69164,54435],{"class":79},[52,69166,53285],{"class":53950},[52,69168,53957],{"class":79},[14,69170,69171],{},[4509,69172],{"alt":47,"src":69173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,69175,69176],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[24646,69178,69180],{"id":69179},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,69182,69183],{},[4509,69184],{"alt":47,"src":69185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,69187,69188],{},"反着来",[14,69190,69191],{},"注意是同名事件，比如都是‘click’",[24646,69193,69195],{"id":69194},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,69197,69198],{},[4509,69199],{"alt":47,"src":69200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[24646,69202,69204],{"id":69203},"_3314-解绑事件","3.3.1.4 解绑事件",[14,69206,69207],{},[4509,69208],{"alt":47,"src":69209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,69211,69212],{},[4509,69213],{"alt":47,"src":69214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[24646,69216,69218],{"id":69217},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[1696,69220,69221],{},[32,69222,69223],{},"事件类型的区别",[14,69225,69226],{},[4509,69227],{"alt":47,"src":69228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,69230,69231],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[1696,69233,69234],{"start":66},[32,69235,69236],{},"注册事件的区别",[14,69238,69239],{},[4509,69240],{"alt":47,"src":69241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[24646,69243,69245],{"id":69244},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,69247,69248],{},[4509,69249],{"alt":47,"src":69250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,69252,69253],{},[4509,69254],{"alt":47,"src":69255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[42,69257,69259],{"className":55717,"code":69258,"language":55719,"meta":47,"style":47},"\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",[49,69260,69261,69269,69286,69309,69317,69322,69327,69332,69336,69344,69352],{"__ignoreMap":47},[52,69262,69263,69265,69267],{"class":54,"line":55},[52,69264,698],{"class":79},[52,69266,54450],{"class":53950},[52,69268,53957],{"class":79},[52,69270,69271,69273,69276,69279,69281,69284],{"class":54,"line":66},[52,69272,54794],{"class":79},[52,69274,69275],{"class":53950},"form",[52,69277,69278],{"class":75}," action",[52,69280,292],{"class":79},[52,69282,69283],{"class":62},"\"http:\u002F\u002Fwww.itcast.cn\"",[52,69285,53957],{"class":79},[52,69287,69288,69290,69292,69294,69296,69299,69302,69304,69307],{"class":54,"line":83},[52,69289,53991],{"class":79},[52,69291,56471],{"class":53950},[52,69293,56474],{"class":75},[52,69295,292],{"class":79},[52,69297,69298],{"class":62},"\"submit\"",[52,69300,69301],{"class":75}," value",[52,69303,292],{"class":79},[52,69305,69306],{"class":62},"\"免费注册\"",[52,69308,53957],{"class":79},[52,69310,69311,69313,69315],{"class":54,"line":91},[52,69312,53991],{"class":79},[52,69314,54463],{"class":53950},[52,69316,53957],{"class":79},[52,69318,69319],{"class":54,"line":98},[52,69320,69321],{"class":79},"      const form = document.querySelector('form')\n",[52,69323,69324],{"class":54,"line":107},[52,69325,69326],{"class":79},"      form.addEventListener('submit', function (e) {\n",[52,69328,69329],{"class":54,"line":113},[52,69330,69331],{"class":79},"        e.preventDefault()\n",[52,69333,69334],{"class":54,"line":119},[52,69335,67465],{"class":79},[52,69337,69338,69340,69342],{"class":54,"line":126},[52,69339,54426],{"class":79},[52,69341,54463],{"class":53950},[52,69343,53957],{"class":79},[52,69345,69346,69348,69350],{"class":54,"line":132},[52,69347,55067],{"class":79},[52,69349,69275],{"class":53950},[52,69351,53957],{"class":79},[52,69353,69354,69356,69358],{"class":54,"line":138},[52,69355,54435],{"class":79},[52,69357,54450],{"class":53950},[52,69359,53957],{"class":79},[14,69361,69362],{},"点击不在跳转！！！",[3195,69364,69366],{"id":69365},"_332-事件委托","3.3.2 事件委托",[14,69368,69369],{},[4509,69370],{"alt":47,"src":69371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[42,69373,69375],{"className":53283,"code":69374,"language":53285,"meta":47,"style":47},"\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",[49,69376,69377,69387,69401,69405,69413,69427,69447,69459,69467,69471,69479,69487,69499,69511,69523,69535,69547,69560,69568,69576,69581,69600,69621,69626,69631,69636,69641,69650,69654,69664,69668,69673,69678,69692,69702,69706,69710,69718,69726,69730],{"__ignoreMap":47},[52,69378,69379,69381,69383,69385],{"class":54,"line":55},[52,69380,53947],{"class":79},[52,69382,53951],{"class":53950},[52,69384,53954],{"class":75},[52,69386,53957],{"class":79},[52,69388,69389,69391,69393,69395,69397,69399],{"class":54,"line":66},[52,69390,698],{"class":79},[52,69392,53285],{"class":53950},[52,69394,53966],{"class":75},[52,69396,292],{"class":79},[52,69398,53971],{"class":62},[52,69400,53957],{"class":79},[52,69402,69403],{"class":54,"line":83},[52,69404,123],{"emptyLinePlaceholder":122},[52,69406,69407,69409,69411],{"class":54,"line":91},[52,69408,698],{"class":79},[52,69410,53984],{"class":53950},[52,69412,53957],{"class":79},[52,69414,69415,69417,69419,69421,69423,69425],{"class":54,"line":98},[52,69416,54794],{"class":79},[52,69418,53994],{"class":53950},[52,69420,53997],{"class":75},[52,69422,292],{"class":79},[52,69424,54002],{"class":62},[52,69426,53957],{"class":79},[52,69428,69429,69431,69433,69435,69437,69439,69441,69443,69445],{"class":54,"line":107},[52,69430,54794],{"class":79},[52,69432,53994],{"class":53950},[52,69434,17568],{"class":75},[52,69436,292],{"class":79},[52,69438,54041],{"class":62},[52,69440,54021],{"class":75},[52,69442,292],{"class":79},[52,69444,54048],{"class":62},[52,69446,53957],{"class":79},[52,69448,69449,69451,69453,69455,69457],{"class":54,"line":113},[52,69450,54794],{"class":79},[52,69452,54057],{"class":53950},[52,69454,54060],{"class":79},[52,69456,54057],{"class":53950},[52,69458,53957],{"class":79},[52,69460,69461,69463,69465],{"class":54,"line":119},[52,69462,54435],{"class":79},[52,69464,53984],{"class":53950},[52,69466,53957],{"class":79},[52,69468,69469],{"class":54,"line":126},[52,69470,123],{"emptyLinePlaceholder":122},[52,69472,69473,69475,69477],{"class":54,"line":132},[52,69474,698],{"class":79},[52,69476,54450],{"class":53950},[52,69478,53957],{"class":79},[52,69480,69481,69483,69485],{"class":54,"line":138},[52,69482,54794],{"class":79},[52,69484,29],{"class":53950},[52,69486,53957],{"class":79},[52,69488,69489,69491,69493,69495,69497],{"class":54,"line":144},[52,69490,53991],{"class":79},[52,69492,32],{"class":53950},[52,69494,56616],{"class":79},[52,69496,32],{"class":53950},[52,69498,53957],{"class":79},[52,69500,69501,69503,69505,69507,69509],{"class":54,"line":153},[52,69502,53991],{"class":79},[52,69504,32],{"class":53950},[52,69506,56635],{"class":79},[52,69508,32],{"class":53950},[52,69510,53957],{"class":79},[52,69512,69513,69515,69517,69519,69521],{"class":54,"line":159},[52,69514,53991],{"class":79},[52,69516,32],{"class":53950},[52,69518,56654],{"class":79},[52,69520,32],{"class":53950},[52,69522,53957],{"class":79},[52,69524,69525,69527,69529,69531,69533],{"class":54,"line":167},[52,69526,53991],{"class":79},[52,69528,32],{"class":53950},[52,69530,56673],{"class":79},[52,69532,32],{"class":53950},[52,69534,53957],{"class":79},[52,69536,69537,69539,69541,69543,69545],{"class":54,"line":173},[52,69538,53991],{"class":79},[52,69540,32],{"class":53950},[52,69542,56692],{"class":79},[52,69544,32],{"class":53950},[52,69546,53957],{"class":79},[52,69548,69549,69551,69553,69556,69558],{"class":54,"line":181},[52,69550,53991],{"class":79},[52,69552,14],{"class":53950},[52,69554,69555],{"class":79},">我不需要变色\u003C\u002F",[52,69557,14],{"class":53950},[52,69559,53957],{"class":79},[52,69561,69562,69564,69566],{"class":54,"line":186},[52,69563,55067],{"class":79},[52,69565,29],{"class":53950},[52,69567,53957],{"class":79},[52,69569,69570,69572,69574],{"class":54,"line":191},[52,69571,54794],{"class":79},[52,69573,54463],{"class":53950},[52,69575,53957],{"class":79},[52,69577,69578],{"class":54,"line":196},[52,69579,69580],{"class":94},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[52,69582,69583,69585,69587,69589,69591,69593,69595,69598],{"class":54,"line":201},[52,69584,13869],{"class":58},[52,69586,63942],{"class":308},[52,69588,16212],{"class":58},[52,69590,57046],{"class":79},[52,69592,57049],{"class":75},[52,69594,1216],{"class":79},[52,69596,69597],{"class":62},"'ul'",[52,69599,708],{"class":79},[52,69601,69602,69605,69607,69609,69611,69613,69615,69617,69619],{"class":54,"line":206},[52,69603,69604],{"class":79},"    ul.",[52,69606,60463],{"class":75},[52,69608,1216],{"class":79},[52,69610,60468],{"class":62},[52,69612,15083],{"class":79},[52,69614,57099],{"class":58},[52,69616,682],{"class":79},[52,69618,3292],{"class":1223},[52,69620,15090],{"class":79},[52,69622,69623],{"class":54,"line":211},[52,69624,69625],{"class":94},"      \u002F\u002F alert(1)\n",[52,69627,69628],{"class":54,"line":218},[52,69629,69630],{"class":94},"      \u002F\u002F e.target就是我们点击的对象\n",[52,69632,69633],{"class":54,"line":223},[52,69634,69635],{"class":94},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[52,69637,69638],{"class":54,"line":230},[52,69639,69640],{"class":94},"      \u002F\u002F e.target.style.color = 'red'\n",[52,69642,69643,69645,69647],{"class":54,"line":239},[52,69644,60894],{"class":79},[52,69646,60897],{"class":75},[52,69648,69649],{"class":79},"(e)\n",[52,69651,69652],{"class":54,"line":251},[52,69653,123],{"emptyLinePlaceholder":122},[52,69655,69656,69658,69661],{"class":54,"line":256},[52,69657,60894],{"class":79},[52,69659,69660],{"class":75},"dir",[52,69662,69663],{"class":79},"(e.target)\n",[52,69665,69666],{"class":54,"line":262},[52,69667,123],{"emptyLinePlaceholder":122},[52,69669,69670],{"class":54,"line":268},[52,69671,69672],{"class":94},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[52,69674,69675],{"class":54,"line":280},[52,69676,69677],{"class":94},"      \u002F\u002F 通过tagName来进行判断\n",[52,69679,69680,69682,69685,69687,69690],{"class":54,"line":286},[52,69681,57130],{"class":58},[52,69683,69684],{"class":79}," (e.target.tagName ",[52,69686,57136],{"class":58},[52,69688,69689],{"class":62}," 'LI'",[52,69691,15090],{"class":79},[52,69693,69694,69697,69699],{"class":54,"line":300},[52,69695,69696],{"class":79},"        e.target.style.color ",[52,69698,292],{"class":58},[52,69700,69701],{"class":62}," 'red'\n",[52,69703,69704],{"class":54,"line":314},[52,69705,55048],{"class":79},[52,69707,69708],{"class":54,"line":327},[52,69709,36111],{"class":79},[52,69711,69712,69714,69716],{"class":54,"line":333},[52,69713,55067],{"class":79},[52,69715,54463],{"class":53950},[52,69717,53957],{"class":79},[52,69719,69720,69722,69724],{"class":54,"line":360},[52,69721,54435],{"class":79},[52,69723,54450],{"class":53950},[52,69725,53957],{"class":79},[52,69727,69728],{"class":54,"line":365},[52,69729,123],{"emptyLinePlaceholder":122},[52,69731,69732,69734,69736],{"class":54,"line":371},[52,69733,54435],{"class":79},[52,69735,53285],{"class":53950},[52,69737,53957],{"class":79},[14,69739,69740],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,69742,69743],{},"if(e.target.ragName==='P') {}",[14,69745,69746],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,69748,69749],{},"通过事件委托的方式实现tab栏切换改造：",[14,69751,69752],{},"一定要记住自定义属性！！！！！！",[14,69754,69755],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,69757,69758],{},"id是自定义的属性名",[14,69760,69761],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[42,69763,69765],{"className":53283,"code":69764,"language":53285,"meta":47,"style":47},"\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",[49,69766,69767,69777,69791,69795,69803,69817,69837,69857,69869,69877,69883,69893,69903,69907,69911,69917,69929,69941,69953,69969,69973,69977,69983,69995,70007,70019,70029,70039,70043,70047,70055,70067,70077,70089,70093,70097,70105,70115,70125,70135,70139,70143,70153,70167,70179,70183,70187,70199,70209,70225,70235,70239,70243,70257,70267,70277,70281,70285,70291,70305,70309,70313,70321,70331,70335,70339,70348,70358,70362,70370,70378,70382,70390,70404,70418,70430,70438,70477,70509,70541,70573,70605,70613,70621,70635,70669,70703,70737,70771,70805,70813,70821,70829,70834,70839,70858,70863,70883,70891,70896,70909,70930,70943,70947,70952,70957,70970,70990,71018,71022,71026,71030,71038,71046,71050],{"__ignoreMap":47},[52,69768,69769,69771,69773,69775],{"class":54,"line":55},[52,69770,53947],{"class":79},[52,69772,53951],{"class":53950},[52,69774,53954],{"class":75},[52,69776,53957],{"class":79},[52,69778,69779,69781,69783,69785,69787,69789],{"class":54,"line":66},[52,69780,698],{"class":79},[52,69782,53285],{"class":53950},[52,69784,53966],{"class":75},[52,69786,292],{"class":79},[52,69788,53971],{"class":62},[52,69790,53957],{"class":79},[52,69792,69793],{"class":54,"line":83},[52,69794,123],{"emptyLinePlaceholder":122},[52,69796,69797,69799,69801],{"class":54,"line":91},[52,69798,698],{"class":79},[52,69800,53984],{"class":53950},[52,69802,53957],{"class":79},[52,69804,69805,69807,69809,69811,69813,69815],{"class":54,"line":98},[52,69806,54794],{"class":79},[52,69808,53994],{"class":53950},[52,69810,53997],{"class":75},[52,69812,292],{"class":79},[52,69814,54002],{"class":62},[52,69816,61777],{"class":79},[52,69818,69819,69821,69823,69825,69827,69829,69831,69833,69835],{"class":54,"line":107},[52,69820,54794],{"class":79},[52,69822,53994],{"class":53950},[52,69824,54013],{"class":75},[52,69826,292],{"class":79},[52,69828,54018],{"class":62},[52,69830,54021],{"class":75},[52,69832,292],{"class":79},[52,69834,54026],{"class":62},[52,69836,61777],{"class":79},[52,69838,69839,69841,69843,69845,69847,69849,69851,69853,69855],{"class":54,"line":113},[52,69840,54794],{"class":79},[52,69842,53994],{"class":53950},[52,69844,17568],{"class":75},[52,69846,292],{"class":79},[52,69848,54041],{"class":62},[52,69850,54021],{"class":75},[52,69852,292],{"class":79},[52,69854,54048],{"class":62},[52,69856,61777],{"class":79},[52,69858,69859,69861,69863,69865,69867],{"class":54,"line":119},[52,69860,54794],{"class":79},[52,69862,54057],{"class":53950},[52,69864,66275],{"class":79},[52,69866,54057],{"class":53950},[52,69868,53957],{"class":79},[52,69870,69871,69873,69875],{"class":54,"line":126},[52,69872,54794],{"class":79},[52,69874,3141],{"class":53950},[52,69876,53957],{"class":79},[52,69878,69879,69881],{"class":54,"line":132},[52,69880,9366],{"class":53950},[52,69882,18220],{"class":79},[52,69884,69885,69887,69889,69891],{"class":54,"line":138},[52,69886,57356],{"class":308},[52,69888,54087],{"class":79},[52,69890,692],{"class":308},[52,69892,80],{"class":79},[52,69894,69895,69897,69899,69901],{"class":54,"line":144},[52,69896,57345],{"class":308},[52,69898,54087],{"class":79},[52,69900,692],{"class":308},[52,69902,80],{"class":79},[52,69904,69905],{"class":54,"line":153},[52,69906,616],{"class":79},[52,69908,69909],{"class":54,"line":159},[52,69910,123],{"emptyLinePlaceholder":122},[52,69912,69913,69915],{"class":54,"line":167},[52,69914,66326],{"class":75},[52,69916,18220],{"class":79},[52,69918,69919,69921,69923,69925,69927],{"class":54,"line":173},[52,69920,57421],{"class":308},[52,69922,54087],{"class":79},[52,69924,66337],{"class":308},[52,69926,54142],{"class":58},[52,69928,80],{"class":79},[52,69930,69931,69933,69935,69937,69939],{"class":54,"line":181},[52,69932,57435],{"class":308},[52,69934,54087],{"class":79},[52,69936,66350],{"class":308},[52,69938,54142],{"class":58},[52,69940,80],{"class":79},[52,69942,69943,69945,69947,69949,69951],{"class":54,"line":186},[52,69944,57356],{"class":308},[52,69946,54087],{"class":79},[52,69948,444],{"class":308},[52,69950,54142],{"class":58},[52,69952,80],{"class":79},[52,69954,69955,69957,69959,69961,69963,69965,69967],{"class":54,"line":191},[52,69956,64627],{"class":308},[52,69958,54087],{"class":79},[52,69960,629],{"class":308},[52,69962,54142],{"class":58},[52,69964,54171],{"class":308},[52,69966,64894],{"class":308},[52,69968,80],{"class":79},[52,69970,69971],{"class":54,"line":196},[52,69972,616],{"class":79},[52,69974,69975],{"class":54,"line":201},[52,69976,123],{"emptyLinePlaceholder":122},[52,69978,69979,69981],{"class":54,"line":206},[52,69980,66395],{"class":75},[52,69982,18220],{"class":79},[52,69984,69985,69987,69989,69991,69993],{"class":54,"line":211},[52,69986,57421],{"class":308},[52,69988,54087],{"class":79},[52,69990,591],{"class":308},[52,69992,1998],{"class":58},[52,69994,80],{"class":79},[52,69996,69997,69999,70001,70003,70005],{"class":54,"line":218},[52,69998,57435],{"class":308},[52,70000,54087],{"class":79},[52,70002,2001],{"class":308},[52,70004,54142],{"class":58},[52,70006,80],{"class":79},[52,70008,70009,70011,70013,70015,70017],{"class":54,"line":223},[52,70010,60009],{"class":308},[52,70012,54087],{"class":79},[52,70014,2001],{"class":308},[52,70016,54142],{"class":58},[52,70018,80],{"class":79},[52,70020,70021,70023,70025,70027],{"class":54,"line":230},[52,70022,57659],{"class":308},[52,70024,54087],{"class":79},[52,70026,54127],{"class":308},[52,70028,80],{"class":79},[52,70030,70031,70033,70035,70037],{"class":54,"line":239},[52,70032,57670],{"class":308},[52,70034,54087],{"class":79},[52,70036,54318],{"class":308},[52,70038,80],{"class":79},[52,70040,70041],{"class":54,"line":251},[52,70042,616],{"class":79},[52,70044,70045],{"class":54,"line":256},[52,70046,123],{"emptyLinePlaceholder":122},[52,70048,70049,70051,70053],{"class":54,"line":262},[52,70050,66395],{"class":75},[52,70052,66468],{"class":53950},[52,70054,18220],{"class":79},[52,70056,70057,70059,70061,70063,70065],{"class":54,"line":268},[52,70058,57572],{"class":308},[52,70060,54087],{"class":79},[52,70062,3990],{"class":308},[52,70064,54142],{"class":58},[52,70066,80],{"class":79},[52,70068,70069,70071,70073,70075],{"class":54,"line":280},[52,70070,64984],{"class":308},[52,70072,54087],{"class":79},[52,70074,66491],{"class":308},[52,70076,80],{"class":79},[52,70078,70079,70081,70083,70085,70087],{"class":54,"line":286},[52,70080,64650],{"class":308},[52,70082,54087],{"class":79},[52,70084,444],{"class":308},[52,70086,54142],{"class":58},[52,70088,80],{"class":79},[52,70090,70091],{"class":54,"line":300},[52,70092,616],{"class":79},[52,70094,70095],{"class":54,"line":314},[52,70096,123],{"emptyLinePlaceholder":122},[52,70098,70099,70101,70103],{"class":54,"line":327},[52,70100,66395],{"class":75},[52,70102,63942],{"class":53950},[52,70104,18220],{"class":79},[52,70106,70107,70109,70111,70113],{"class":54,"line":333},[52,70108,57382],{"class":308},[52,70110,54087],{"class":79},[52,70112,57387],{"class":308},[52,70114,80],{"class":79},[52,70116,70117,70119,70121,70123],{"class":54,"line":360},[52,70118,57659],{"class":308},[52,70120,54087],{"class":79},[52,70122,54127],{"class":308},[52,70124,80],{"class":79},[52,70126,70127,70129,70131,70133],{"class":54,"line":365},[52,70128,57670],{"class":308},[52,70130,54087],{"class":79},[52,70132,54230],{"class":308},[52,70134,80],{"class":79},[52,70136,70137],{"class":54,"line":371},[52,70138,616],{"class":79},[52,70140,70141],{"class":54,"line":400},[52,70142,123],{"emptyLinePlaceholder":122},[52,70144,70145,70147,70149,70151],{"class":54,"line":405},[52,70146,66395],{"class":75},[52,70148,63942],{"class":53950},[52,70150,57725],{"class":53950},[52,70152,18220],{"class":79},[52,70154,70155,70157,70159,70161,70163,70165],{"class":54,"line":411},[52,70156,57356],{"class":308},[52,70158,54087],{"class":79},[52,70160,692],{"class":308},[52,70162,1375],{"class":308},[52,70164,54142],{"class":58},[52,70166,80],{"class":79},[52,70168,70169,70171,70173,70175,70177],{"class":54,"line":424},[52,70170,57572],{"class":308},[52,70172,54087],{"class":79},[52,70174,3748],{"class":308},[52,70176,54142],{"class":58},[52,70178,80],{"class":79},[52,70180,70181],{"class":54,"line":436},[52,70182,616],{"class":79},[52,70184,70185],{"class":54,"line":449},[52,70186,123],{"emptyLinePlaceholder":122},[52,70188,70189,70191,70193,70195,70197],{"class":54,"line":2160},[52,70190,66395],{"class":75},[52,70192,63942],{"class":53950},[52,70194,57725],{"class":53950},[52,70196,4446],{"class":53950},[52,70198,18220],{"class":79},[52,70200,70201,70203,70205,70207],{"class":54,"line":2186},[52,70202,66620],{"class":308},[52,70204,54087],{"class":79},[52,70206,57387],{"class":308},[52,70208,80],{"class":79},[52,70210,70211,70213,70215,70217,70219,70221,70223],{"class":54,"line":2209},[52,70212,64882],{"class":308},[52,70214,54087],{"class":79},[52,70216,564],{"class":308},[52,70218,54142],{"class":58},[52,70220,54171],{"class":308},[52,70222,66641],{"class":308},[52,70224,80],{"class":79},[52,70226,70227,70229,70231,70233],{"class":54,"line":2233},[52,70228,60066],{"class":308},[52,70230,54087],{"class":79},[52,70232,65019],{"class":308},[52,70234,80],{"class":79},[52,70236,70237],{"class":54,"line":2238},[52,70238,616],{"class":79},[52,70240,70241],{"class":54,"line":2243},[52,70242,123],{"emptyLinePlaceholder":122},[52,70244,70245,70247,70249,70251,70253,70255],{"class":54,"line":2248},[52,70246,66395],{"class":75},[52,70248,63942],{"class":53950},[52,70250,57725],{"class":53950},[52,70252,4446],{"class":53950},[52,70254,66674],{"class":75},[52,70256,18220],{"class":79},[52,70258,70259,70261,70263,70265],{"class":54,"line":2257},[52,70260,64441],{"class":308},[52,70262,54087],{"class":79},[52,70264,66685],{"class":308},[52,70266,80],{"class":79},[52,70268,70269,70271,70273,70275],{"class":54,"line":2262},[52,70270,60066],{"class":308},[52,70272,54087],{"class":79},[52,70274,66685],{"class":308},[52,70276,80],{"class":79},[52,70278,70279],{"class":54,"line":2268},[52,70280,616],{"class":79},[52,70282,70283],{"class":54,"line":2297},[52,70284,123],{"emptyLinePlaceholder":122},[52,70286,70287,70289],{"class":54,"line":2303},[52,70288,66710],{"class":75},[52,70290,18220],{"class":79},[52,70292,70293,70295,70297,70299,70301,70303],{"class":54,"line":2318},[52,70294,57345],{"class":308},[52,70296,54087],{"class":79},[52,70298,692],{"class":308},[52,70300,66723],{"class":308},[52,70302,54142],{"class":58},[52,70304,80],{"class":79},[52,70306,70307],{"class":54,"line":2324},[52,70308,616],{"class":79},[52,70310,70311],{"class":54,"line":2353},[52,70312,123],{"emptyLinePlaceholder":122},[52,70314,70315,70317,70319],{"class":54,"line":2362},[52,70316,66710],{"class":75},[52,70318,64824],{"class":75},[52,70320,18220],{"class":79},[52,70322,70323,70325,70327,70329],{"class":54,"line":2368},[52,70324,57659],{"class":308},[52,70326,54087],{"class":79},[52,70328,57387],{"class":308},[52,70330,80],{"class":79},[52,70332,70333],{"class":54,"line":2376},[52,70334,616],{"class":79},[52,70336,70337],{"class":54,"line":2381},[52,70338,123],{"emptyLinePlaceholder":122},[52,70340,70341,70343,70346],{"class":54,"line":19252},[52,70342,66710],{"class":75},[52,70344,70345],{"class":75}," .active",[52,70347,18220],{"class":79},[52,70349,70350,70352,70354,70356],{"class":54,"line":19258},[52,70351,57659],{"class":308},[52,70353,54087],{"class":79},[52,70355,63519],{"class":308},[52,70357,80],{"class":79},[52,70359,70360],{"class":54,"line":19281},[52,70361,616],{"class":79},[52,70363,70364,70366,70368],{"class":54,"line":19287},[52,70365,55067],{"class":79},[52,70367,3141],{"class":53950},[52,70369,53957],{"class":79},[52,70371,70372,70374,70376],{"class":54,"line":19310},[52,70373,54435],{"class":79},[52,70375,53984],{"class":53950},[52,70377,53957],{"class":79},[52,70379,70380],{"class":54,"line":19324},[52,70381,123],{"emptyLinePlaceholder":122},[52,70383,70384,70386,70388],{"class":54,"line":19344},[52,70385,698],{"class":79},[52,70387,54450],{"class":53950},[52,70389,53957],{"class":79},[52,70391,70392,70394,70396,70398,70400,70402],{"class":54,"line":19350},[52,70393,54794],{"class":79},[52,70395,54261],{"class":53950},[52,70397,56136],{"class":75},[52,70399,292],{"class":79},[52,70401,66825],{"class":62},[52,70403,53957],{"class":79},[52,70405,70406,70408,70410,70412,70414,70416],{"class":54,"line":19361},[52,70407,53991],{"class":79},[52,70409,54261],{"class":53950},[52,70411,56136],{"class":75},[52,70413,292],{"class":79},[52,70415,66840],{"class":62},[52,70417,53957],{"class":79},[52,70419,70420,70422,70424,70426,70428],{"class":54,"line":19384},[52,70421,57884],{"class":79},[52,70423,3195],{"class":53950},[52,70425,66851],{"class":79},[52,70427,3195],{"class":53950},[52,70429,53957],{"class":79},[52,70431,70432,70434,70436],{"class":54,"line":19406},[52,70433,57884],{"class":79},[52,70435,29],{"class":53950},[52,70437,53957],{"class":79},[52,70439,70440,70442,70444,70446,70448,70450,70452,70454,70456,70458,70460,70462,70464,70467,70469,70471,70473,70475],{"class":54,"line":19411},[52,70441,57952],{"class":79},[52,70443,32],{"class":53950},[52,70445,63702],{"class":79},[52,70447,3451],{"class":53950},[52,70449,56136],{"class":75},[52,70451,292],{"class":79},[52,70453,62356],{"class":62},[52,70455,63707],{"class":75},[52,70457,292],{"class":79},[52,70459,66886],{"class":62},[52,70461,56601],{"class":75},[52,70463,292],{"class":79},[52,70465,70466],{"class":62},"\"0\"",[52,70468,66889],{"class":79},[52,70470,3451],{"class":53950},[52,70472,57964],{"class":79},[52,70474,32],{"class":53950},[52,70476,53957],{"class":79},[52,70478,70479,70481,70483,70485,70487,70489,70491,70493,70495,70497,70499,70501,70503,70505,70507],{"class":54,"line":19417},[52,70480,57952],{"class":79},[52,70482,32],{"class":53950},[52,70484,63702],{"class":79},[52,70486,3451],{"class":53950},[52,70488,63707],{"class":75},[52,70490,292],{"class":79},[52,70492,66886],{"class":62},[52,70494,56601],{"class":75},[52,70496,292],{"class":79},[52,70498,419],{"class":62},[52,70500,66916],{"class":79},[52,70502,3451],{"class":53950},[52,70504,57964],{"class":79},[52,70506,32],{"class":53950},[52,70508,53957],{"class":79},[52,70510,70511,70513,70515,70517,70519,70521,70523,70525,70527,70529,70531,70533,70535,70537,70539],{"class":54,"line":19431},[52,70512,57952],{"class":79},[52,70514,32],{"class":53950},[52,70516,63702],{"class":79},[52,70518,3451],{"class":53950},[52,70520,63707],{"class":75},[52,70522,292],{"class":79},[52,70524,66886],{"class":62},[52,70526,56601],{"class":75},[52,70528,292],{"class":79},[52,70530,637],{"class":62},[52,70532,66943],{"class":79},[52,70534,3451],{"class":53950},[52,70536,57964],{"class":79},[52,70538,32],{"class":53950},[52,70540,53957],{"class":79},[52,70542,70543,70545,70547,70549,70551,70553,70555,70557,70559,70561,70563,70565,70567,70569,70571],{"class":54,"line":19444},[52,70544,57952],{"class":79},[52,70546,32],{"class":53950},[52,70548,63702],{"class":79},[52,70550,3451],{"class":53950},[52,70552,63707],{"class":75},[52,70554,292],{"class":79},[52,70556,66886],{"class":62},[52,70558,56601],{"class":75},[52,70560,292],{"class":79},[52,70562,6693],{"class":62},[52,70564,66970],{"class":79},[52,70566,3451],{"class":53950},[52,70568,57964],{"class":79},[52,70570,32],{"class":53950},[52,70572,53957],{"class":79},[52,70574,70575,70577,70579,70581,70583,70585,70587,70589,70591,70593,70595,70597,70599,70601,70603],{"class":54,"line":19449},[52,70576,57952],{"class":79},[52,70578,32],{"class":53950},[52,70580,63702],{"class":79},[52,70582,3451],{"class":53950},[52,70584,63707],{"class":75},[52,70586,292],{"class":79},[52,70588,66886],{"class":62},[52,70590,56601],{"class":75},[52,70592,292],{"class":79},[52,70594,6706],{"class":62},[52,70596,66997],{"class":79},[52,70598,3451],{"class":53950},[52,70600,57964],{"class":79},[52,70602,32],{"class":53950},[52,70604,53957],{"class":79},[52,70606,70607,70609,70611],{"class":54,"line":19463},[52,70608,58057],{"class":79},[52,70610,29],{"class":53950},[52,70612,53957],{"class":79},[52,70614,70615,70617,70619],{"class":54,"line":19468},[52,70616,54426],{"class":79},[52,70618,54261],{"class":53950},[52,70620,53957],{"class":79},[52,70622,70623,70625,70627,70629,70631,70633],{"class":54,"line":19474},[52,70624,53991],{"class":79},[52,70626,54261],{"class":53950},[52,70628,56136],{"class":75},[52,70630,292],{"class":79},[52,70632,67034],{"class":62},[52,70634,53957],{"class":79},[52,70636,70637,70639,70641,70643,70645,70647,70649,70651,70653,70655,70657,70659,70661,70663,70665,70667],{"class":54,"line":19479},[52,70638,57884],{"class":79},[52,70640,54261],{"class":53950},[52,70642,56136],{"class":75},[52,70644,292],{"class":79},[52,70646,67049],{"class":62},[52,70648,63702],{"class":79},[52,70650,4509],{"class":53950},[52,70652,57889],{"class":75},[52,70654,292],{"class":79},[52,70656,67060],{"class":62},[52,70658,57897],{"class":75},[52,70660,292],{"class":79},[52,70662,10607],{"class":62},[52,70664,67069],{"class":79},[52,70666,54261],{"class":53950},[52,70668,53957],{"class":79},[52,70670,70671,70673,70675,70677,70679,70681,70683,70685,70687,70689,70691,70693,70695,70697,70699,70701],{"class":54,"line":19493},[52,70672,57884],{"class":79},[52,70674,54261],{"class":53950},[52,70676,56136],{"class":75},[52,70678,292],{"class":79},[52,70680,65273],{"class":62},[52,70682,63702],{"class":79},[52,70684,4509],{"class":53950},[52,70686,57889],{"class":75},[52,70688,292],{"class":79},[52,70690,67096],{"class":62},[52,70692,57897],{"class":75},[52,70694,292],{"class":79},[52,70696,10607],{"class":62},[52,70698,67069],{"class":79},[52,70700,54261],{"class":53950},[52,70702,53957],{"class":79},[52,70704,70705,70707,70709,70711,70713,70715,70717,70719,70721,70723,70725,70727,70729,70731,70733,70735],{"class":54,"line":19498},[52,70706,57884],{"class":79},[52,70708,54261],{"class":53950},[52,70710,56136],{"class":75},[52,70712,292],{"class":79},[52,70714,65273],{"class":62},[52,70716,63702],{"class":79},[52,70718,4509],{"class":53950},[52,70720,57889],{"class":75},[52,70722,292],{"class":79},[52,70724,67131],{"class":62},[52,70726,57897],{"class":75},[52,70728,292],{"class":79},[52,70730,10607],{"class":62},[52,70732,67069],{"class":79},[52,70734,54261],{"class":53950},[52,70736,53957],{"class":79},[52,70738,70739,70741,70743,70745,70747,70749,70751,70753,70755,70757,70759,70761,70763,70765,70767,70769],{"class":54,"line":19503},[52,70740,57884],{"class":79},[52,70742,54261],{"class":53950},[52,70744,56136],{"class":75},[52,70746,292],{"class":79},[52,70748,65273],{"class":62},[52,70750,63702],{"class":79},[52,70752,4509],{"class":53950},[52,70754,57889],{"class":75},[52,70756,292],{"class":79},[52,70758,67166],{"class":62},[52,70760,57897],{"class":75},[52,70762,292],{"class":79},[52,70764,10607],{"class":62},[52,70766,67069],{"class":79},[52,70768,54261],{"class":53950},[52,70770,53957],{"class":79},[52,70772,70773,70775,70777,70779,70781,70783,70785,70787,70789,70791,70793,70795,70797,70799,70801,70803],{"class":54,"line":19517},[52,70774,57884],{"class":79},[52,70776,54261],{"class":53950},[52,70778,56136],{"class":75},[52,70780,292],{"class":79},[52,70782,65273],{"class":62},[52,70784,63702],{"class":79},[52,70786,4509],{"class":53950},[52,70788,57889],{"class":75},[52,70790,292],{"class":79},[52,70792,67201],{"class":62},[52,70794,57897],{"class":75},[52,70796,292],{"class":79},[52,70798,10607],{"class":62},[52,70800,67069],{"class":79},[52,70802,54261],{"class":53950},[52,70804,53957],{"class":79},[52,70806,70807,70809,70811],{"class":54,"line":19529},[52,70808,54426],{"class":79},[52,70810,54261],{"class":53950},[52,70812,53957],{"class":79},[52,70814,70815,70817,70819],{"class":54,"line":19534},[52,70816,55067],{"class":79},[52,70818,54261],{"class":53950},[52,70820,53957],{"class":79},[52,70822,70823,70825,70827],{"class":54,"line":19547},[52,70824,54794],{"class":79},[52,70826,54463],{"class":53950},[52,70828,53957],{"class":79},[52,70830,70831],{"class":54,"line":19552},[52,70832,70833],{"class":94},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[52,70835,70836],{"class":54,"line":19557},[52,70837,70838],{"class":94},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[52,70840,70841,70843,70845,70847,70849,70851,70853,70856],{"class":54,"line":19562},[52,70842,13869],{"class":58},[52,70844,63942],{"class":308},[52,70846,16212],{"class":58},[52,70848,57046],{"class":79},[52,70850,57049],{"class":75},[52,70852,1216],{"class":79},[52,70854,70855],{"class":62},"'.tab-nav ul'",[52,70857,708],{"class":79},[52,70859,70860],{"class":54,"line":19575},[52,70861,70862],{"class":94},"    \u002F\u002F 2.添加事件\n",[52,70864,70865,70867,70869,70871,70873,70875,70877,70879,70881],{"class":54,"line":19580},[52,70866,69604],{"class":79},[52,70868,60463],{"class":75},[52,70870,1216],{"class":79},[52,70872,60468],{"class":62},[52,70874,15083],{"class":79},[52,70876,57099],{"class":58},[52,70878,682],{"class":79},[52,70880,3292],{"class":1223},[52,70882,15090],{"class":79},[52,70884,70885,70887,70889],{"class":54,"line":35283},[52,70886,60894],{"class":79},[52,70888,69660],{"class":75},[52,70890,69663],{"class":79},[52,70892,70893],{"class":54,"line":35289},[52,70894,70895],{"class":94},"      \u002F\u002Fe.targer是我们点击的对象\n",[52,70897,70898,70900,70902,70904,70907],{"class":54,"line":35295},[52,70899,57130],{"class":58},[52,70901,69684],{"class":79},[52,70903,57136],{"class":58},[52,70905,70906],{"class":62}," 'A'",[52,70908,15090],{"class":79},[52,70910,70911,70913,70915,70917,70920,70922,70924,70926,70928],{"class":54,"line":35301},[52,70912,54575],{"class":79},[52,70914,57049],{"class":75},[52,70916,1216],{"class":79},[52,70918,70919],{"class":62},"'.active'",[52,70921,59653],{"class":79},[52,70923,59656],{"class":75},[52,70925,1216],{"class":79},[52,70927,67364],{"class":62},[52,70929,708],{"class":79},[52,70931,70932,70935,70937,70939,70941],{"class":54,"line":35307},[52,70933,70934],{"class":79},"        e.target.classList.",[52,70936,8300],{"class":75},[52,70938,1216],{"class":79},[52,70940,67364],{"class":62},[52,70942,708],{"class":79},[52,70944,70945],{"class":54,"line":35318},[52,70946,123],{"emptyLinePlaceholder":122},[52,70948,70949],{"class":54,"line":35324},[52,70950,70951],{"class":94},"        \u002F\u002F 下面大盒子模块\n",[52,70953,70954],{"class":54,"line":35344},[52,70955,70956],{"class":94},"        \u002F\u002F console.log(e.target.dataset.id)\n",[52,70958,70959,70961,70963,70965,70967],{"class":54,"line":35350},[52,70960,63920],{"class":58},[52,70962,687],{"class":308},[52,70964,16212],{"class":58},[52,70966,48216],{"class":58},[52,70968,70969],{"class":79},"e.target.dataset.id\n",[52,70971,70972,70974,70976,70978,70980,70982,70984,70986,70988],{"class":54,"line":35361},[52,70973,54575],{"class":79},[52,70975,57049],{"class":75},[52,70977,1216],{"class":79},[52,70979,67412],{"class":62},[52,70981,59653],{"class":79},[52,70983,59656],{"class":75},[52,70985,1216],{"class":79},[52,70987,67364],{"class":62},[52,70989,708],{"class":79},[52,70991,70992,70994,70996,70998,71000,71002,71004,71006,71008,71010,71012,71014,71016],{"class":54,"line":35367},[52,70993,54575],{"class":79},[52,70995,57049],{"class":75},[52,70997,1216],{"class":79},[52,70999,67438],{"class":62},[52,71001,3644],{"class":79},[52,71003,48216],{"class":58},[52,71005,27768],{"class":308},[52,71007,59682],{"class":62},[52,71009,59653],{"class":79},[52,71011,8300],{"class":75},[52,71013,1216],{"class":79},[52,71015,67364],{"class":62},[52,71017,708],{"class":79},[52,71019,71020],{"class":54,"line":35373},[52,71021,123],{"emptyLinePlaceholder":122},[52,71023,71024],{"class":54,"line":35379},[52,71025,55048],{"class":79},[52,71027,71028],{"class":54,"line":35385},[52,71029,36111],{"class":79},[52,71031,71032,71034,71036],{"class":54,"line":35391},[52,71033,55067],{"class":79},[52,71035,54463],{"class":53950},[52,71037,53957],{"class":79},[52,71039,71040,71042,71044],{"class":54,"line":35397},[52,71041,54435],{"class":79},[52,71043,54450],{"class":53950},[52,71045,53957],{"class":79},[52,71047,71048],{"class":54,"line":35403},[52,71049,123],{"emptyLinePlaceholder":122},[52,71051,71052,71054,71056],{"class":54,"line":35423},[52,71053,54435],{"class":79},[52,71055,53285],{"class":53950},[52,71057,53957],{"class":79},[3195,71059,71061],{"id":71060},"_333-页面加载事件","3.3.3 页面加载事件",[1696,71063,71064],{},[32,71065,71066],{},"load",[14,71068,71069],{},[4509,71070],{"alt":47,"src":71071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,71073,71074],{},"window代表整个窗口，比document还要大",[14,71076,71077],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,71079,71080],{},"img.addEventListener('load', function () {",[14,71082,71083],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,71085,55114],{},[1696,71087,71088],{"start":66},[32,71089,71090],{},"DOMContentLoaded",[14,71092,71093],{},[4509,71094],{"alt":47,"src":71095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,71097,71098],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[3195,71100,71102],{"id":71101},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,71104,71105],{},[4509,71106],{"alt":47,"src":71107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,71109,71110],{},[4509,71111],{"alt":47,"src":71112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,71114,71115],{},[4509,71116],{"alt":47,"src":71117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,71119,71120],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,71122,71123],{},"获得的是数字型数据，不带单位",[14,71125,71126],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,71128,71129],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,71131,71132],{},"它是通过document.documentElement来获取",[14,71134,71135],{},[4509,71136],{"alt":47,"src":71137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,71139,71140],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[3195,71142,71144],{"id":71143},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,71146,71147],{},[4509,71148],{"alt":47,"src":71149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,71151,71152],{},[4509,71153],{"alt":47,"src":71154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[3195,71156,71158],{"id":71157},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,71160,71161],{},[4509,71162],{"alt":47,"src":71163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,71165,71166],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,71168,71169],{},[4509,71170],{"alt":47,"src":71171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,71173,71174],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,71176,71177],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,71179,71180],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,71182,71183],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,71185,71186],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,71188,71189],{},[4509,71190],{"alt":47,"src":71191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,71193,71194],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,71196,71197],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,71199,71200],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,71202,71203],{},"e.pageX-box.getBoundingClientRect()",[3195,71205,71207],{"id":71206},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,71209,71210],{},[4509,71211],{"alt":47,"src":71212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,71214,71215],{},"这个是相对于视口来说的，它是个方法，不是属性值",[3195,71217,71219],{"id":71218},"_338-总结","3.3.8 总结",[14,71221,71222],{},[4509,71223],{"alt":47,"src":71224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,71226,71227],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,71229,71230],{},"修改盒子的宽高只能通过width和height来实现",[3195,71232,71234],{"id":71233},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[42,71236,71238],{"className":53283,"code":71237,"language":53285,"meta":47,"style":47},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[49,71239,71240,71245,71250,71255,71260],{"__ignoreMap":47},[52,71241,71242],{"class":54,"line":55},[52,71243,71244],{"class":79},"\u002F* 页面滑动 *\u002F\n",[52,71246,71247],{"class":54,"line":66},[52,71248,71249],{"class":79},"html {\n",[52,71251,71252],{"class":54,"line":83},[52,71253,71254],{"class":79},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[52,71256,71257],{"class":54,"line":91},[52,71258,71259],{"class":79},"  scroll-behavior: smooth;\n",[52,71261,71262],{"class":54,"line":98},[52,71263,452],{"class":79},[14,71265,71266],{},"默认是auto",[3195,71268,71270],{"id":71269},"_3310-日期对象","3.3.10 日期对象",[24646,71272,71274],{"id":71273},"_33101-实例化","3.3.10.1 实例化",[14,71276,71277],{},[4509,71278],{"alt":47,"src":71279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[24646,71281,71283],{"id":71282},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,71285,71286],{},[4509,71287],{"alt":47,"src":71288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,71290,71291],{},"月份+1",[14,71293,71294],{},"老外认为第一天为0，星期天",[14,71296,71297],{},"方法使用的时候必须要跟括号",[14,71299,71300],{},"快速获得日期",[14,71302,71303],{},"\u002F\u002F 得到年月日",[14,71305,71306],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,71308,71309],{},"\u002F\u002F 得到当地日期",[14,71311,71312],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,71314,71315],{},"\u002F\u002F 得到当地时间",[14,71317,71318],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,71320,71321],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,71323,71324],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[54463,71326,71327],{},"\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,71329,71330],{},"学会去封装函数！",[24646,71332,71334],{"id":71333},"_33103-时间戳","3.3.10.3 时间戳",[14,71336,71337],{},[4509,71338],{"alt":47,"src":71339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,71341,71342],{},[4509,71343],{"alt":47,"src":71344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,71346,71347],{},"三种方法记住一个就可以",[3195,71349,71351],{"id":71350},"_3311-节点操作","3.3.11 节点操作",[24646,71353,71355],{"id":71354},"_33111-dom节点","3.3.11.1 DOM节点",[14,71357,71358],{},[4509,71359],{"alt":47,"src":71360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,71362,71363],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[24646,71365,71367],{"id":71366},"_33112-查找节点","3.3.11.2 查找节点",[14,71369,71370],{},"前边的document.querySelector()是获取的元素",[14,71372,71373],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,71375,71376],{},[4509,71377],{"alt":47,"src":71378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[1696,71380,71381],{},[32,71382,71383],{},"父节点",[14,71385,71386],{},[4509,71387],{"alt":47,"src":71388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[1696,71390,71391],{"start":66},[32,71392,71393],{},"子节点",[14,71395,71396],{},[4509,71397],{"alt":47,"src":71398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,71400,71401],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,71403,71404],{},"children获得的是伪数组，是亲儿子",[1696,71406,71407],{"start":83},[32,71408,71409],{},"兄弟节点",[14,71411,71412],{},[4509,71413],{"alt":47,"src":71414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[24646,71416,71418],{"id":71417},"_33113-增加节点","3.3.11.3 增加节点",[14,71420,71421],{},[4509,71422],{"alt":47,"src":71423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,71425,71426],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,71428,71429],{},[4509,71430],{"alt":47,"src":71431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,71433,71434],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,71436,71437],{},"下面是写法的部分展示，就按照下边的格式来写",[14,71439,71440],{},"例：",[54463,71442,71443],{},"\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,71445,71446],{},[4509,71447],{"alt":47,"src":71448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,71450,71451],{},"false只克隆标签，里边的内容不会克隆过来",[42,71453,71455],{"className":53283,"code":71454,"language":53285,"meta":47,"style":47},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[49,71456,71457],{"__ignoreMap":47},[52,71458,71459],{"class":54,"line":55},[52,71460,71454],{"class":79},[24646,71462,71464],{"id":71463},"_33114-删除节点","3.3.11.4 删除节点",[14,71466,71467],{},[4509,71468],{"alt":47,"src":71469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,71471,71472],{},"父亲删儿子",[14,71474,71475],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[3195,71477,71479],{"id":71478},"_3312-m端事件","3.3.12 M端事件",[14,71481,71482],{},"M端就是移动端",[14,71484,71485],{},[4509,71486],{"alt":47,"src":71487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[3195,71489,71491],{"id":71490},"_3313-插件","3.3.13 插件",[14,71493,71494],{},"要熟悉官网！！！",[14,71496,71497],{},[3451,71498,71499],{"href":71499,"rel":71500},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[26514],[14,71502,71503],{},[3451,71504,71505],{"href":71505,"rel":71506},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[26514],[3195,71508,71510],{"id":71509},"_3314-学生信息表","3.3.14 学生信息表",[1696,71512,71513,71516,71519,71522,71525,71528,71531,71534],{},[32,71514,71515],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[32,71517,71518],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[32,71520,71521],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[32,71523,71524],{},"用好表单元素自带的属性，value,name等",[32,71526,71527],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[32,71529,71530],{},"不要忘记事件对象",[32,71532,71533],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[32,71535,71536],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,71538,71539],{},"结构：",[42,71541,71543],{"className":53283,"code":71542,"language":53285,"meta":47,"style":47},"\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",[49,71544,71545,71555,71569,71573,71581,71595,71615,71636,71649,71673,71681,71685,71693,71706,71727,71755,71783,71788,71810,71830,71849,71857,71885,71907,71927,71947,71967,71987,72007,72015,72035,72043,72047,72060,72068,72076,72084,72097,72110,72123,72136,72149,72162,72175,72183,72191,72199,72204,72209,72214,72219,72224,72229,72234,72239,72244,72249,72254,72259,72264,72272,72280,72288,72292,72312,72331,72351,72371,72391,72411,72415,72420,72440,72445,72455,72460,72465,72485,72507,72512,72522,72526,72530,72535,72540,72569,72583,72598,72602,72606,72610,72615,72626,72639,72644,72649,72654,72659,72664,72668,72673,72678,72687,72692,72697,72709,72714,72721,72725,72730,72740,72745,72755,72760,72788,72809,72819,72839,72857,72874,72891,72908,72925,72929,72939,72944,72949,72954,72965,72969,72973,72977,72982,72987,73008,73020,73025,73030,73035,73049,73054,73061,73065,73069,73077,73081,73089,73093],{"__ignoreMap":47},[52,71546,71547,71549,71551,71553],{"class":54,"line":55},[52,71548,53947],{"class":79},[52,71550,53951],{"class":53950},[52,71552,53954],{"class":75},[52,71554,53957],{"class":79},[52,71556,71557,71559,71561,71563,71565,71567],{"class":54,"line":66},[52,71558,698],{"class":79},[52,71560,53285],{"class":53950},[52,71562,53966],{"class":75},[52,71564,292],{"class":79},[52,71566,53971],{"class":62},[52,71568,53957],{"class":79},[52,71570,71571],{"class":54,"line":83},[52,71572,123],{"emptyLinePlaceholder":122},[52,71574,71575,71577,71579],{"class":54,"line":91},[52,71576,698],{"class":79},[52,71578,53984],{"class":53950},[52,71580,53957],{"class":79},[52,71582,71583,71585,71587,71589,71591,71593],{"class":54,"line":98},[52,71584,54794],{"class":79},[52,71586,53994],{"class":53950},[52,71588,53997],{"class":75},[52,71590,292],{"class":79},[52,71592,54002],{"class":62},[52,71594,61777],{"class":79},[52,71596,71597,71599,71601,71603,71605,71607,71609,71611,71613],{"class":54,"line":107},[52,71598,54794],{"class":79},[52,71600,53994],{"class":53950},[52,71602,17568],{"class":75},[52,71604,292],{"class":79},[52,71606,54041],{"class":62},[52,71608,54021],{"class":75},[52,71610,292],{"class":79},[52,71612,54048],{"class":62},[52,71614,61777],{"class":79},[52,71616,71617,71619,71621,71623,71625,71627,71629,71631,71634],{"class":54,"line":113},[52,71618,54794],{"class":79},[52,71620,53994],{"class":53950},[52,71622,54013],{"class":75},[52,71624,292],{"class":79},[52,71626,54018],{"class":62},[52,71628,54021],{"class":75},[52,71630,292],{"class":79},[52,71632,71633],{"class":62},"\"ie=edge\"",[52,71635,61777],{"class":79},[52,71637,71638,71640,71642,71645,71647],{"class":54,"line":119},[52,71639,54794],{"class":79},[52,71641,54057],{"class":53950},[52,71643,71644],{"class":79},">学生信息管理\u003C\u002F",[52,71646,54057],{"class":53950},[52,71648,53957],{"class":79},[52,71650,71651,71653,71656,71659,71661,71664,71666,71668,71671],{"class":54,"line":126},[52,71652,54794],{"class":79},[52,71654,71655],{"class":53950},"link",[52,71657,71658],{"class":75}," rel",[52,71660,292],{"class":79},[52,71662,71663],{"class":62},"\"stylesheet\"",[52,71665,63707],{"class":75},[52,71667,292],{"class":79},[52,71669,71670],{"class":62},"\"css\u002Findex.css\"",[52,71672,61777],{"class":79},[52,71674,71675,71677,71679],{"class":54,"line":132},[52,71676,54435],{"class":79},[52,71678,53984],{"class":53950},[52,71680,53957],{"class":79},[52,71682,71683],{"class":54,"line":138},[52,71684,123],{"emptyLinePlaceholder":122},[52,71686,71687,71689,71691],{"class":54,"line":144},[52,71688,698],{"class":79},[52,71690,54450],{"class":53950},[52,71692,53957],{"class":79},[52,71694,71695,71697,71699,71702,71704],{"class":54,"line":153},[52,71696,54794],{"class":79},[52,71698,10],{"class":53950},[52,71700,71701],{"class":79},">新增学员\u003C\u002F",[52,71703,10],{"class":53950},[52,71705,53957],{"class":79},[52,71707,71708,71710,71712,71714,71716,71718,71721,71723,71725],{"class":54,"line":159},[52,71709,54794],{"class":79},[52,71711,69275],{"class":53950},[52,71713,56136],{"class":75},[52,71715,292],{"class":79},[52,71717,65314],{"class":62},[52,71719,71720],{"class":75}," autocomplete",[52,71722,292],{"class":79},[52,71724,34426],{"class":62},[52,71726,53957],{"class":79},[52,71728,71729,71732,71734,71736,71738,71740,71742,71744,71747,71749,71751,71753],{"class":54,"line":167},[52,71730,71731],{"class":79},"    姓名：\u003C",[52,71733,56471],{"class":53950},[52,71735,56474],{"class":75},[52,71737,292],{"class":79},[52,71739,65349],{"class":62},[52,71741,56136],{"class":75},[52,71743,292],{"class":79},[52,71745,71746],{"class":62},"\"uname\"",[52,71748,17568],{"class":75},[52,71750,292],{"class":79},[52,71752,71746],{"class":62},[52,71754,61777],{"class":79},[52,71756,71757,71760,71762,71764,71766,71768,71770,71772,71775,71777,71779,71781],{"class":54,"line":173},[52,71758,71759],{"class":79},"    年龄：\u003C",[52,71761,56471],{"class":53950},[52,71763,56474],{"class":75},[52,71765,292],{"class":79},[52,71767,65349],{"class":62},[52,71769,56136],{"class":75},[52,71771,292],{"class":79},[52,71773,71774],{"class":62},"\"age\"",[52,71776,17568],{"class":75},[52,71778,292],{"class":79},[52,71780,71774],{"class":62},[52,71782,61777],{"class":79},[52,71784,71785],{"class":54,"line":181},[52,71786,71787],{"class":79},"    性别:\n",[52,71789,71790,71792,71795,71797,71799,71802,71804,71806,71808],{"class":54,"line":186},[52,71791,53991],{"class":79},[52,71793,71794],{"class":53950},"select",[52,71796,17568],{"class":75},[52,71798,292],{"class":79},[52,71800,71801],{"class":62},"\"gender\"",[52,71803,56136],{"class":75},[52,71805,292],{"class":79},[52,71807,71801],{"class":62},[52,71809,53957],{"class":79},[52,71811,71812,71814,71817,71819,71821,71823,71826,71828],{"class":54,"line":191},[52,71813,57884],{"class":79},[52,71815,71816],{"class":53950},"option",[52,71818,69301],{"class":75},[52,71820,292],{"class":79},[52,71822,2419],{"class":62},[52,71824,71825],{"class":79},">男\u003C\u002F",[52,71827,71816],{"class":53950},[52,71829,53957],{"class":79},[52,71831,71832,71834,71836,71838,71840,71842,71845,71847],{"class":54,"line":196},[52,71833,57884],{"class":79},[52,71835,71816],{"class":53950},[52,71837,69301],{"class":75},[52,71839,292],{"class":79},[52,71841,2491],{"class":62},[52,71843,71844],{"class":79},">女\u003C\u002F",[52,71846,71816],{"class":53950},[52,71848,53957],{"class":79},[52,71850,71851,71853,71855],{"class":54,"line":201},[52,71852,54426],{"class":79},[52,71854,71794],{"class":53950},[52,71856,53957],{"class":79},[52,71858,71859,71862,71864,71866,71868,71870,71872,71874,71877,71879,71881,71883],{"class":54,"line":206},[52,71860,71861],{"class":79},"    薪资：\u003C",[52,71863,56471],{"class":53950},[52,71865,56474],{"class":75},[52,71867,292],{"class":79},[52,71869,65349],{"class":62},[52,71871,56136],{"class":75},[52,71873,292],{"class":79},[52,71875,71876],{"class":62},"\"salary\"",[52,71878,17568],{"class":75},[52,71880,292],{"class":79},[52,71882,71876],{"class":62},[52,71884,61777],{"class":79},[52,71886,71887,71890,71892,71894,71896,71899,71901,71903,71905],{"class":54,"line":211},[52,71888,71889],{"class":79},"    就业城市：\u003C",[52,71891,71794],{"class":53950},[52,71893,17568],{"class":75},[52,71895,292],{"class":79},[52,71897,71898],{"class":62},"\"city\"",[52,71900,56136],{"class":75},[52,71902,292],{"class":79},[52,71904,71898],{"class":62},[52,71906,53957],{"class":79},[52,71908,71909,71911,71913,71915,71917,71920,71923,71925],{"class":54,"line":218},[52,71910,57884],{"class":79},[52,71912,71816],{"class":53950},[52,71914,69301],{"class":75},[52,71916,292],{"class":79},[52,71918,71919],{"class":62},"\"北京\"",[52,71921,71922],{"class":79},">北京\u003C\u002F",[52,71924,71816],{"class":53950},[52,71926,53957],{"class":79},[52,71928,71929,71931,71933,71935,71937,71940,71943,71945],{"class":54,"line":223},[52,71930,57884],{"class":79},[52,71932,71816],{"class":53950},[52,71934,69301],{"class":75},[52,71936,292],{"class":79},[52,71938,71939],{"class":62},"\"上海\"",[52,71941,71942],{"class":79},">上海\u003C\u002F",[52,71944,71816],{"class":53950},[52,71946,53957],{"class":79},[52,71948,71949,71951,71953,71955,71957,71960,71963,71965],{"class":54,"line":230},[52,71950,57884],{"class":79},[52,71952,71816],{"class":53950},[52,71954,69301],{"class":75},[52,71956,292],{"class":79},[52,71958,71959],{"class":62},"\"广州\"",[52,71961,71962],{"class":79},">广州\u003C\u002F",[52,71964,71816],{"class":53950},[52,71966,53957],{"class":79},[52,71968,71969,71971,71973,71975,71977,71980,71983,71985],{"class":54,"line":239},[52,71970,57884],{"class":79},[52,71972,71816],{"class":53950},[52,71974,69301],{"class":75},[52,71976,292],{"class":79},[52,71978,71979],{"class":62},"\"深圳\"",[52,71981,71982],{"class":79},">深圳\u003C\u002F",[52,71984,71816],{"class":53950},[52,71986,53957],{"class":79},[52,71988,71989,71991,71993,71995,71997,72000,72003,72005],{"class":54,"line":251},[52,71990,57884],{"class":79},[52,71992,71816],{"class":53950},[52,71994,69301],{"class":75},[52,71996,292],{"class":79},[52,71998,71999],{"class":62},"\"曹县\"",[52,72001,72002],{"class":79},">曹县\u003C\u002F",[52,72004,71816],{"class":53950},[52,72006,53957],{"class":79},[52,72008,72009,72011,72013],{"class":54,"line":256},[52,72010,54426],{"class":79},[52,72012,71794],{"class":53950},[52,72014,53957],{"class":79},[52,72016,72017,72019,72021,72023,72025,72028,72031,72033],{"class":54,"line":262},[52,72018,53991],{"class":79},[52,72020,56537],{"class":53950},[52,72022,56136],{"class":75},[52,72024,292],{"class":79},[52,72026,72027],{"class":62},"\"add\"",[52,72029,72030],{"class":79},">录入\u003C\u002F",[52,72032,56537],{"class":53950},[52,72034,53957],{"class":79},[52,72036,72037,72039,72041],{"class":54,"line":268},[52,72038,55067],{"class":79},[52,72040,69275],{"class":53950},[52,72042,53957],{"class":79},[52,72044,72045],{"class":54,"line":280},[52,72046,123],{"emptyLinePlaceholder":122},[52,72048,72049,72051,72053,72056,72058],{"class":54,"line":286},[52,72050,54794],{"class":79},[52,72052,10],{"class":53950},[52,72054,72055],{"class":79},">就业榜\u003C\u002F",[52,72057,10],{"class":53950},[52,72059,53957],{"class":79},[52,72061,72062,72064,72066],{"class":54,"line":300},[52,72063,54794],{"class":79},[52,72065,3353],{"class":53950},[52,72067,53957],{"class":79},[52,72069,72070,72072,72074],{"class":54,"line":314},[52,72071,53991],{"class":79},[52,72073,3356],{"class":53950},[52,72075,53957],{"class":79},[52,72077,72078,72080,72082],{"class":54,"line":327},[52,72079,57884],{"class":79},[52,72081,3359],{"class":53950},[52,72083,53957],{"class":79},[52,72085,72086,72088,72090,72093,72095],{"class":54,"line":333},[52,72087,57952],{"class":79},[52,72089,3362],{"class":53950},[52,72091,72092],{"class":79},">序号\u003C\u002F",[52,72094,3362],{"class":53950},[52,72096,53957],{"class":79},[52,72098,72099,72101,72103,72106,72108],{"class":54,"line":360},[52,72100,57952],{"class":79},[52,72102,3362],{"class":53950},[52,72104,72105],{"class":79},">姓名\u003C\u002F",[52,72107,3362],{"class":53950},[52,72109,53957],{"class":79},[52,72111,72112,72114,72116,72119,72121],{"class":54,"line":365},[52,72113,57952],{"class":79},[52,72115,3362],{"class":53950},[52,72117,72118],{"class":79},">年龄\u003C\u002F",[52,72120,3362],{"class":53950},[52,72122,53957],{"class":79},[52,72124,72125,72127,72129,72132,72134],{"class":54,"line":371},[52,72126,57952],{"class":79},[52,72128,3362],{"class":53950},[52,72130,72131],{"class":79},">性别\u003C\u002F",[52,72133,3362],{"class":53950},[52,72135,53957],{"class":79},[52,72137,72138,72140,72142,72145,72147],{"class":54,"line":400},[52,72139,57952],{"class":79},[52,72141,3362],{"class":53950},[52,72143,72144],{"class":79},">薪资\u003C\u002F",[52,72146,3362],{"class":53950},[52,72148,53957],{"class":79},[52,72150,72151,72153,72155,72158,72160],{"class":54,"line":405},[52,72152,57952],{"class":79},[52,72154,3362],{"class":53950},[52,72156,72157],{"class":79},">就业城市\u003C\u002F",[52,72159,3362],{"class":53950},[52,72161,53957],{"class":79},[52,72163,72164,72166,72168,72171,72173],{"class":54,"line":411},[52,72165,57952],{"class":79},[52,72167,3362],{"class":53950},[52,72169,72170],{"class":79},">操作\u003C\u002F",[52,72172,3362],{"class":53950},[52,72174,53957],{"class":79},[52,72176,72177,72179,72181],{"class":54,"line":424},[52,72178,58057],{"class":79},[52,72180,3359],{"class":53950},[52,72182,53957],{"class":79},[52,72184,72185,72187,72189],{"class":54,"line":436},[52,72186,54426],{"class":79},[52,72188,3356],{"class":53950},[52,72190,53957],{"class":79},[52,72192,72193,72195,72197],{"class":54,"line":449},[52,72194,53991],{"class":79},[52,72196,3399],{"class":53950},[52,72198,53957],{"class":79},[52,72200,72201],{"class":54,"line":2160},[52,72202,72203],{"class":94},"      \u003C!-- \n",[52,72205,72206],{"class":54,"line":2186},[52,72207,72208],{"class":94},"        \u003Ctr>\n",[52,72210,72211],{"class":54,"line":2209},[52,72212,72213],{"class":94},"          \u003Ctd>1001\u003C\u002Ftd>\n",[52,72215,72216],{"class":54,"line":2233},[52,72217,72218],{"class":94},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[52,72220,72221],{"class":54,"line":2238},[52,72222,72223],{"class":94},"          \u003Ctd>19\u003C\u002Ftd>\n",[52,72225,72226],{"class":54,"line":2243},[52,72227,72228],{"class":94},"          \u003Ctd>男\u003C\u002Ftd>\n",[52,72230,72231],{"class":54,"line":2248},[52,72232,72233],{"class":94},"          \u003Ctd>15000\u003C\u002Ftd>\n",[52,72235,72236],{"class":54,"line":2257},[52,72237,72238],{"class":94},"          \u003Ctd>上海\u003C\u002Ftd>\n",[52,72240,72241],{"class":54,"line":2262},[52,72242,72243],{"class":94},"          \u003Ctd>\n",[52,72245,72246],{"class":54,"line":2268},[52,72247,72248],{"class":94},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[52,72250,72251],{"class":54,"line":2297},[52,72252,72253],{"class":94},"          \u003C\u002Ftd>\n",[52,72255,72256],{"class":54,"line":2303},[52,72257,72258],{"class":94},"        \u003C\u002Ftr> \n",[52,72260,72261],{"class":54,"line":2318},[52,72262,72263],{"class":94},"        -->\n",[52,72265,72266,72268,72270],{"class":54,"line":2324},[52,72267,54426],{"class":79},[52,72269,3399],{"class":53950},[52,72271,53957],{"class":79},[52,72273,72274,72276,72278],{"class":54,"line":2353},[52,72275,55067],{"class":79},[52,72277,3353],{"class":53950},[52,72279,53957],{"class":79},[52,72281,72282,72284,72286],{"class":54,"line":2362},[52,72283,54794],{"class":79},[52,72285,54463],{"class":53950},[52,72287,53957],{"class":79},[52,72289,72290],{"class":54,"line":2368},[52,72291,62608],{"class":94},[52,72293,72294,72296,72299,72301,72303,72305,72307,72310],{"class":54,"line":2376},[52,72295,13869],{"class":58},[52,72297,72298],{"class":308}," uname",[52,72300,16212],{"class":58},[52,72302,57046],{"class":79},[52,72304,57049],{"class":75},[52,72306,1216],{"class":79},[52,72308,72309],{"class":62},"'.uname'",[52,72311,708],{"class":79},[52,72313,72314,72316,72318,72320,72322,72324,72326,72329],{"class":54,"line":2381},[52,72315,13869],{"class":58},[52,72317,18337],{"class":308},[52,72319,16212],{"class":58},[52,72321,57046],{"class":79},[52,72323,57049],{"class":75},[52,72325,1216],{"class":79},[52,72327,72328],{"class":62},"'.age'",[52,72330,708],{"class":79},[52,72332,72333,72335,72338,72340,72342,72344,72346,72349],{"class":54,"line":19252},[52,72334,13869],{"class":58},[52,72336,72337],{"class":308}," gender",[52,72339,16212],{"class":58},[52,72341,57046],{"class":79},[52,72343,57049],{"class":75},[52,72345,1216],{"class":79},[52,72347,72348],{"class":62},"'.gender'",[52,72350,708],{"class":79},[52,72352,72353,72355,72358,72360,72362,72364,72366,72369],{"class":54,"line":19258},[52,72354,13869],{"class":58},[52,72356,72357],{"class":308}," salary",[52,72359,16212],{"class":58},[52,72361,57046],{"class":79},[52,72363,57049],{"class":75},[52,72365,1216],{"class":79},[52,72367,72368],{"class":62},"'.salary'",[52,72370,708],{"class":79},[52,72372,72373,72375,72378,72380,72382,72384,72386,72389],{"class":54,"line":19281},[52,72374,13869],{"class":58},[52,72376,72377],{"class":308}," city",[52,72379,16212],{"class":58},[52,72381,57046],{"class":79},[52,72383,57049],{"class":75},[52,72385,1216],{"class":79},[52,72387,72388],{"class":62},"'.city'",[52,72390,708],{"class":79},[52,72392,72393,72395,72398,72400,72402,72404,72406,72409],{"class":54,"line":19287},[52,72394,13869],{"class":58},[52,72396,72397],{"class":308}," tbody",[52,72399,16212],{"class":58},[52,72401,57046],{"class":79},[52,72403,57049],{"class":75},[52,72405,1216],{"class":79},[52,72407,72408],{"class":62},"'tbody'",[52,72410,708],{"class":79},[52,72412,72413],{"class":54,"line":19310},[52,72414,123],{"emptyLinePlaceholder":122},[52,72416,72417],{"class":54,"line":19324},[52,72418,72419],{"class":94},"    \u002F\u002F 获取所有带有name属性的元素\n",[52,72421,72422,72424,72427,72429,72431,72433,72435,72438],{"class":54,"line":19344},[52,72423,13869],{"class":58},[52,72425,72426],{"class":308}," items",[52,72428,16212],{"class":58},[52,72430,57046],{"class":79},[52,72432,58331],{"class":75},[52,72434,1216],{"class":79},[52,72436,72437],{"class":62},"'[name]'",[52,72439,708],{"class":79},[52,72441,72442],{"class":54,"line":19350},[52,72443,72444],{"class":94},"    \u002F\u002F 声明一个空的数组\n",[52,72446,72447,72449,72451,72453],{"class":54,"line":19361},[52,72448,13869],{"class":58},[52,72450,60345],{"class":308},[52,72452,16212],{"class":58},[52,72454,54488],{"class":79},[52,72456,72457],{"class":54,"line":19384},[52,72458,72459],{"class":94},"    \u002F\u002F 1.录入模块\n",[52,72461,72462],{"class":54,"line":19406},[52,72463,72464],{"class":94},"    \u002F\u002F 1.1这是一个表单提交事件\n",[52,72466,72467,72469,72472,72474,72476,72478,72480,72483],{"class":54,"line":19411},[52,72468,13869],{"class":58},[52,72470,72471],{"class":308}," info",[52,72473,16212],{"class":58},[52,72475,57046],{"class":79},[52,72477,57049],{"class":75},[52,72479,1216],{"class":79},[52,72481,72482],{"class":62},"'.info'",[52,72484,708],{"class":79},[52,72486,72487,72490,72492,72494,72497,72499,72501,72503,72505],{"class":54,"line":19417},[52,72488,72489],{"class":79},"    info.",[52,72491,60463],{"class":75},[52,72493,1216],{"class":79},[52,72495,72496],{"class":62},"'submit'",[52,72498,15083],{"class":79},[52,72500,57099],{"class":58},[52,72502,682],{"class":79},[52,72504,3292],{"class":1223},[52,72506,15090],{"class":79},[52,72508,72509],{"class":54,"line":19431},[52,72510,72511],{"class":94},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[52,72513,72514,72517,72520],{"class":54,"line":19444},[52,72515,72516],{"class":79},"      e.",[52,72518,72519],{"class":75},"preventDefault",[52,72521,248],{"class":79},[52,72523,72524],{"class":54,"line":19449},[52,72525,62662],{"class":94},[52,72527,72528],{"class":54,"line":19463},[52,72529,123],{"emptyLinePlaceholder":122},[52,72531,72532],{"class":54,"line":19468},[52,72533,72534],{"class":94},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[52,72536,72537],{"class":54,"line":19474},[52,72538,72539],{"class":94},"      \u002F\u002F 先遍历循环\n",[52,72541,72542,72544,72546,72548,72550,72552,72554,72556,72558,72561,72563,72565,72567],{"class":54,"line":19479},[52,72543,54934],{"class":58},[52,72545,682],{"class":79},[52,72547,54497],{"class":58},[52,72549,1871],{"class":79},[52,72551,292],{"class":58},[52,72553,1444],{"class":308},[52,72555,1878],{"class":79},[52,72557,698],{"class":58},[52,72559,72560],{"class":79}," items.",[52,72562,54618],{"class":308},[52,72564,6200],{"class":79},[52,72566,705],{"class":58},[52,72568,15090],{"class":79},[52,72570,72571,72573,72576,72578,72581],{"class":54,"line":19493},[52,72572,5497],{"class":58},[52,72574,72575],{"class":79}," (items[i].value ",[52,72577,57136],{"class":58},[52,72579,72580],{"class":62}," ''",[52,72582,15090],{"class":79},[52,72584,72585,72588,72591,72593,72596],{"class":54,"line":19498},[52,72586,72587],{"class":58},"          return",[52,72589,72590],{"class":75}," alert",[52,72592,1216],{"class":79},[52,72594,72595],{"class":62},"'输入内容不能为空'",[52,72597,708],{"class":79},[52,72599,72600],{"class":54,"line":19503},[52,72601,2039],{"class":79},[52,72603,72604],{"class":54,"line":19517},[52,72605,55048],{"class":79},[52,72607,72608],{"class":54,"line":19529},[52,72609,123],{"emptyLinePlaceholder":122},[52,72611,72612],{"class":54,"line":19534},[52,72613,72614],{"class":94},"      \u002F\u002F 创建新的对象\n",[52,72616,72617,72619,72622,72624],{"class":54,"line":19547},[52,72618,60878],{"class":58},[52,72620,72621],{"class":308}," obj",[52,72623,16212],{"class":58},[52,72625,18220],{"class":79},[52,72627,72628,72631,72633,72635,72637],{"class":54,"line":19552},[52,72629,72630],{"class":79},"        stuID: arr.",[52,72632,54618],{"class":308},[52,72634,48216],{"class":58},[52,72636,27768],{"class":308},[52,72638,34116],{"class":79},[52,72640,72641],{"class":54,"line":19557},[52,72642,72643],{"class":79},"        uname: uname.value,\n",[52,72645,72646],{"class":54,"line":19562},[52,72647,72648],{"class":79},"        age: age.value,\n",[52,72650,72651],{"class":54,"line":19575},[52,72652,72653],{"class":79},"        gender: gender.value,\n",[52,72655,72656],{"class":54,"line":19580},[52,72657,72658],{"class":79},"        salary: salary.value,\n",[52,72660,72661],{"class":54,"line":35283},[52,72662,72663],{"class":79},"        city: city.value\n",[52,72665,72666],{"class":54,"line":35289},[52,72667,55048],{"class":79},[52,72669,72670],{"class":54,"line":35295},[52,72671,72672],{"class":94},"      \u002F\u002F console.log(obj);\n",[52,72674,72675],{"class":54,"line":35301},[52,72676,72677],{"class":94},"      \u002F\u002F 追加到数组里面\n",[52,72679,72680,72682,72684],{"class":54,"line":35307},[52,72681,60657],{"class":79},[52,72683,54534],{"class":75},[52,72685,72686],{"class":79},"(obj)\n",[52,72688,72689],{"class":54,"line":35318},[52,72690,72691],{"class":94},"      \u002F\u002F console.log(arr);\n",[52,72693,72694],{"class":54,"line":35324},[52,72695,72696],{"class":94},"      \u002F\u002F 清空表单  reset重置表单\n",[52,72698,72699,72702,72704,72707],{"class":54,"line":35344},[52,72700,72701],{"class":308},"      this",[52,72703,3757],{"class":79},[52,72705,72706],{"class":75},"reset",[52,72708,248],{"class":79},[52,72710,72711],{"class":54,"line":35350},[52,72712,72713],{"class":94},"      \u002F\u002F 调用渲染函数\n",[52,72715,72716,72719],{"class":54,"line":35361},[52,72717,72718],{"class":75},"      render",[52,72720,248],{"class":79},[52,72722,72723],{"class":54,"line":35367},[52,72724,36111],{"class":79},[52,72726,72727],{"class":54,"line":35373},[52,72728,72729],{"class":94},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[52,72731,72732,72735,72738],{"class":54,"line":35379},[52,72733,72734],{"class":58},"    function",[52,72736,72737],{"class":75}," render",[52,72739,13501],{"class":79},[52,72741,72742],{"class":54,"line":35385},[52,72743,72744],{"class":94},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[52,72746,72747,72750,72752],{"class":54,"line":35391},[52,72748,72749],{"class":79},"      tbody.innerHTML ",[52,72751,292],{"class":58},[52,72753,72754],{"class":62}," ''\n",[52,72756,72757],{"class":54,"line":35397},[52,72758,72759],{"class":94},"      \u002F\u002F 遍历数组\n",[52,72761,72762,72764,72766,72768,72770,72772,72774,72776,72778,72780,72782,72784,72786],{"class":54,"line":35403},[52,72763,54934],{"class":58},[52,72765,682],{"class":79},[52,72767,54497],{"class":58},[52,72769,1871],{"class":79},[52,72771,292],{"class":58},[52,72773,1444],{"class":308},[52,72775,1878],{"class":79},[52,72777,698],{"class":58},[52,72779,54615],{"class":79},[52,72781,54618],{"class":308},[52,72783,6200],{"class":79},[52,72785,705],{"class":58},[52,72787,15090],{"class":79},[52,72789,72790,72792,72795,72797,72799,72802,72804,72807],{"class":54,"line":35423},[52,72791,63920],{"class":58},[52,72793,72794],{"class":308}," tr",[52,72796,16212],{"class":58},[52,72798,57046],{"class":79},[52,72800,72801],{"class":75},"createElement",[52,72803,1216],{"class":79},[52,72805,72806],{"class":62},"'tr'",[52,72808,708],{"class":79},[52,72810,72811,72814,72816],{"class":54,"line":35429},[52,72812,72813],{"class":79},"        tr.innerHTML ",[52,72815,292],{"class":58},[52,72817,72818],{"class":62}," `\n",[52,72820,72821,72824,72826,72828,72830,72833,72836],{"class":54,"line":35445},[52,72822,72823],{"class":62},"        \u003Ctd>${",[52,72825,6858],{"class":79},[52,72827,4080],{"class":62},[52,72829,3644],{"class":79},[52,72831,72832],{"class":62},"].",[52,72834,72835],{"class":79},"stuID",[52,72837,72838],{"class":62},"}\u003C\u002Ftd>\n",[52,72840,72841,72844,72846,72848,72850,72852,72855],{"class":54,"line":35451},[52,72842,72843],{"class":62},"          \u003Ctd>${",[52,72845,6858],{"class":79},[52,72847,4080],{"class":62},[52,72849,3644],{"class":79},[52,72851,72832],{"class":62},[52,72853,72854],{"class":79},"uname",[52,72856,72838],{"class":62},[52,72858,72859,72861,72863,72865,72867,72869,72872],{"class":54,"line":35465},[52,72860,72843],{"class":62},[52,72862,6858],{"class":79},[52,72864,4080],{"class":62},[52,72866,3644],{"class":79},[52,72868,72832],{"class":62},[52,72870,72871],{"class":79},"age",[52,72873,72838],{"class":62},[52,72875,72876,72878,72880,72882,72884,72886,72889],{"class":54,"line":35471},[52,72877,72843],{"class":62},[52,72879,6858],{"class":79},[52,72881,4080],{"class":62},[52,72883,3644],{"class":79},[52,72885,72832],{"class":62},[52,72887,72888],{"class":79},"gender",[52,72890,72838],{"class":62},[52,72892,72893,72895,72897,72899,72901,72903,72906],{"class":54,"line":35486},[52,72894,72843],{"class":62},[52,72896,6858],{"class":79},[52,72898,4080],{"class":62},[52,72900,3644],{"class":79},[52,72902,72832],{"class":62},[52,72904,72905],{"class":79},"salary",[52,72907,72838],{"class":62},[52,72909,72910,72912,72914,72916,72918,72920,72923],{"class":54,"line":35492},[52,72911,72843],{"class":62},[52,72913,6858],{"class":79},[52,72915,4080],{"class":62},[52,72917,3644],{"class":79},[52,72919,72832],{"class":62},[52,72921,72922],{"class":79},"city",[52,72924,72838],{"class":62},[52,72926,72927],{"class":54,"line":35501},[52,72928,72243],{"class":62},[52,72930,72931,72934,72936],{"class":54,"line":35507},[52,72932,72933],{"class":62},"            \u003Ca href=\"javascript:\" data-id=${",[52,72935,3644],{"class":79},[52,72937,72938],{"class":62},"}>删除\u003C\u002Fa>\n",[52,72940,72941],{"class":54,"line":35516},[52,72942,72943],{"class":62},"          \u003C\u002Ftd> \n",[52,72945,72946],{"class":54,"line":35522},[52,72947,72948],{"class":62},"          `\n",[52,72950,72951],{"class":54,"line":35528},[52,72952,72953],{"class":94},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[52,72955,72956,72959,72962],{"class":54,"line":35537},[52,72957,72958],{"class":79},"        tbody.",[52,72960,72961],{"class":75},"appendChild",[52,72963,72964],{"class":79},"(tr)\n",[52,72966,72967],{"class":54,"line":35543},[52,72968,55048],{"class":79},[52,72970,72971],{"class":54,"line":35554},[52,72972,616],{"class":79},[52,72974,72975],{"class":54,"line":35560},[52,72976,123],{"emptyLinePlaceholder":122},[52,72978,72979],{"class":54,"line":35579},[52,72980,72981],{"class":94},"    \u002F\u002F 3.删除委托\n",[52,72983,72984],{"class":54,"line":35585},[52,72985,72986],{"class":94},"    \u002F\u002F 3.1 事件委托 tbody\n",[52,72988,72989,72992,72994,72996,72998,73000,73002,73004,73006],{"class":54,"line":35596},[52,72990,72991],{"class":79},"    tbody.",[52,72993,60463],{"class":75},[52,72995,1216],{"class":79},[52,72997,60468],{"class":62},[52,72999,15083],{"class":79},[52,73001,57099],{"class":58},[52,73003,682],{"class":79},[52,73005,3292],{"class":1223},[52,73007,15090],{"class":79},[52,73009,73010,73012,73014,73016,73018],{"class":54,"line":35602},[52,73011,57130],{"class":58},[52,73013,69684],{"class":79},[52,73015,57136],{"class":58},[52,73017,70906],{"class":62},[52,73019,15090],{"class":79},[52,73021,73022],{"class":54,"line":35622},[52,73023,73024],{"class":94},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[52,73026,73027],{"class":54,"line":35638},[52,73028,73029],{"class":94},"        \u002F\u002F console.log(e.target.dataset.id);\n",[52,73031,73032],{"class":54,"line":35644},[52,73033,73034],{"class":94},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[52,73036,73037,73040,73042,73045,73047],{"class":54,"line":35658},[52,73038,73039],{"class":79},"        arr.",[52,73041,60660],{"class":75},[52,73043,73044],{"class":79},"(e.target.dataset.id, ",[52,73046,629],{"class":308},[52,73048,708],{"class":79},[52,73050,73051],{"class":54,"line":35664},[52,73052,73053],{"class":94},"        \u002F\u002F 重新渲染一次\n",[52,73055,73056,73059],{"class":54,"line":35670},[52,73057,73058],{"class":75},"        render",[52,73060,248],{"class":79},[52,73062,73063],{"class":54,"line":35681},[52,73064,55048],{"class":79},[52,73066,73067],{"class":54,"line":35687},[52,73068,36111],{"class":79},[52,73070,73071,73073,73075],{"class":54,"line":35693},[52,73072,55067],{"class":79},[52,73074,54463],{"class":53950},[52,73076,53957],{"class":79},[52,73078,73079],{"class":54,"line":35703},[52,73080,123],{"emptyLinePlaceholder":122},[52,73082,73083,73085,73087],{"class":54,"line":35709},[52,73084,54435],{"class":79},[52,73086,54450],{"class":53950},[52,73088,53957],{"class":79},[52,73090,73091],{"class":54,"line":35720},[52,73092,123],{"emptyLinePlaceholder":122},[52,73094,73095,73097,73099],{"class":54,"line":35726},[52,73096,54435],{"class":79},[52,73098,53285],{"class":53950},[52,73100,53957],{"class":79},[14,73102,73103],{},"样式：",[42,73105,73109],{"className":73106,"code":73107,"language":73108,"meta":47,"style":47},"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",[49,73110,73111,73116,73126,73135,73139,73143,73148,73158,73163,73167,73172,73182,73187,73196,73200,73204,73209,73214,73224,73234,73239,73243,73248,73257,73267,73272,73282,73292,73296,73301,73309,73313,73318,73323,73328,73336,73345,73349,73354,73363,73367,73372,73381,73385,73390,73399,73408,73416,73420,73425,73434,73444,73453,73463,73469,73478,73488,73498,73502,73507,73516,73524,73534,73542,73551,73560,73570,73578,73582,73587,73596],{"__ignoreMap":47},[52,73112,73113],{"class":54,"line":55},[52,73114,73115],{"class":79},"* {\n",[52,73117,73118,73121,73123],{"class":54,"line":66},[52,73119,73120],{"class":53950},"  margin",[52,73122,54087],{"class":79},[52,73124,73125],{"class":62},"0;\n",[52,73127,73128,73131,73133],{"class":54,"line":83},[52,73129,73130],{"class":62},"  padding",[52,73132,54087],{"class":79},[52,73134,73125],{"class":62},[52,73136,73137],{"class":54,"line":91},[52,73138,452],{"class":79},[52,73140,73141],{"class":54,"line":98},[52,73142,123],{"emptyLinePlaceholder":122},[52,73144,73145],{"class":54,"line":107},[52,73146,73147],{"class":62},"a {\n",[52,73149,73150,73153,73155],{"class":54,"line":113},[52,73151,73152],{"class":53950},"  text-decoration",[52,73154,54087],{"class":79},[52,73156,73157],{"class":62},"none;\n",[52,73159,73160],{"class":54,"line":119},[52,73161,73162],{"class":62},"  color:#721c24;\n",[52,73164,73165],{"class":54,"line":126},[52,73166,452],{"class":79},[52,73168,73169],{"class":54,"line":132},[52,73170,73171],{"class":62},"h1 {\n",[52,73173,73174,73177,73179],{"class":54,"line":138},[52,73175,73176],{"class":53950},"  text-align",[52,73178,54087],{"class":79},[52,73180,73181],{"class":62},"center;\n",[52,73183,73184],{"class":54,"line":144},[52,73185,73186],{"class":62},"  color:#333;\n",[52,73188,73189,73191,73193],{"class":54,"line":153},[52,73190,73120],{"class":53950},[52,73192,54087],{"class":79},[52,73194,73195],{"class":62},"20px 0;\n",[52,73197,73198],{"class":54,"line":159},[52,73199,963],{"class":79},[52,73201,73202],{"class":54,"line":167},[52,73203,452],{"class":79},[52,73205,73206],{"class":54,"line":173},[52,73207,73208],{"class":62},"table {\n",[52,73210,73211],{"class":54,"line":181},[52,73212,73213],{"class":62},"  margin:0 auto;\n",[52,73215,73216,73219,73221],{"class":54,"line":186},[52,73217,73218],{"class":53950},"  width",[52,73220,54087],{"class":79},[52,73222,73223],{"class":62},"800px;\n",[52,73225,73226,73229,73231],{"class":54,"line":191},[52,73227,73228],{"class":53950},"  border-collapse",[52,73230,54087],{"class":79},[52,73232,73233],{"class":62},"collapse;\n",[52,73235,73236],{"class":54,"line":196},[52,73237,73238],{"class":62},"  color:#004085;\n",[52,73240,73241],{"class":54,"line":201},[52,73242,452],{"class":79},[52,73244,73245],{"class":54,"line":206},[52,73246,73247],{"class":62},"th {\n",[52,73249,73250,73252,73254],{"class":54,"line":211},[52,73251,73130],{"class":53950},[52,73253,54087],{"class":79},[52,73255,73256],{"class":62},"10px;\n",[52,73258,73259,73262,73264],{"class":54,"line":218},[52,73260,73261],{"class":53950},"  background",[52,73263,54087],{"class":79},[52,73265,73266],{"class":94},"#cfe5ff;\n",[52,73268,73269],{"class":54,"line":223},[52,73270,73271],{"class":79},"  \n",[52,73273,73274,73277,73279],{"class":54,"line":230},[52,73275,73276],{"class":53950},"  font-size",[52,73278,54087],{"class":79},[52,73280,73281],{"class":62},"20px;\n",[52,73283,73284,73287,73289],{"class":54,"line":239},[52,73285,73286],{"class":53950},"  font-weight",[52,73288,54087],{"class":79},[52,73290,73291],{"class":62},"400;\n",[52,73293,73294],{"class":54,"line":251},[52,73295,452],{"class":79},[52,73297,73298],{"class":54,"line":256},[52,73299,73300],{"class":62},"td,th {\n",[52,73302,73303,73306],{"class":54,"line":262},[52,73304,73305],{"class":62},"  border:1px solid",[52,73307,73308],{"class":94}," #b8daff;\n",[52,73310,73311],{"class":54,"line":268},[52,73312,452],{"class":79},[52,73314,73315],{"class":54,"line":280},[52,73316,73317],{"class":62},"td {\n",[52,73319,73320],{"class":54,"line":286},[52,73321,73322],{"class":62},"  padding:10px;\n",[52,73324,73325],{"class":54,"line":300},[52,73326,73327],{"class":62},"  color:#666;\n",[52,73329,73330,73332,73334],{"class":54,"line":314},[52,73331,73176],{"class":53950},[52,73333,54087],{"class":79},[52,73335,73181],{"class":62},[52,73337,73338,73340,73342],{"class":54,"line":327},[52,73339,73276],{"class":53950},[52,73341,54087],{"class":79},[52,73343,73344],{"class":62},"16px;\n",[52,73346,73347],{"class":54,"line":333},[52,73348,452],{"class":79},[52,73350,73351],{"class":54,"line":360},[52,73352,73353],{"class":62},"tbody tr {\n",[52,73355,73356,73358,73360],{"class":54,"line":365},[52,73357,73261],{"class":53950},[52,73359,54087],{"class":79},[52,73361,73362],{"class":94},"#fff;\n",[52,73364,73365],{"class":54,"line":371},[52,73366,452],{"class":79},[52,73368,73369],{"class":54,"line":400},[52,73370,73371],{"class":62},"tbody tr:hover {\n",[52,73373,73374,73376,73378],{"class":54,"line":405},[52,73375,73261],{"class":53950},[52,73377,54087],{"class":79},[52,73379,73380],{"class":94},"#e1ecf8;\n",[52,73382,73383],{"class":54,"line":411},[52,73384,452],{"class":79},[52,73386,73387],{"class":54,"line":424},[52,73388,73389],{"class":62},".info {\n",[52,73391,73392,73394,73396],{"class":54,"line":436},[52,73393,73218],{"class":53950},[52,73395,54087],{"class":79},[52,73397,73398],{"class":62},"900px;\n",[52,73400,73401,73403,73405],{"class":54,"line":449},[52,73402,73120],{"class":53950},[52,73404,54087],{"class":79},[52,73406,73407],{"class":62},"50px auto;\n",[52,73409,73410,73412,73414],{"class":54,"line":2160},[52,73411,73176],{"class":53950},[52,73413,54087],{"class":79},[52,73415,73181],{"class":62},[52,73417,73418],{"class":54,"line":2186},[52,73419,452],{"class":79},[52,73421,73422],{"class":54,"line":2209},[52,73423,73424],{"class":62},".info  input, .info select {\n",[52,73426,73427,73429,73431],{"class":54,"line":2233},[52,73428,73218],{"class":53950},[52,73430,54087],{"class":79},[52,73432,73433],{"class":62},"80px;\n",[52,73435,73436,73439,73441],{"class":54,"line":2238},[52,73437,73438],{"class":53950},"  height",[52,73440,54087],{"class":79},[52,73442,73443],{"class":62},"27px;\n",[52,73445,73446,73449,73451],{"class":54,"line":2243},[52,73447,73448],{"class":53950},"  outline",[52,73450,54087],{"class":79},[52,73452,73157],{"class":62},[52,73454,73455,73458,73460],{"class":54,"line":2248},[52,73456,73457],{"class":53950},"  border-radius",[52,73459,54087],{"class":79},[52,73461,73462],{"class":62},"5px;\n",[52,73464,73465,73467],{"class":54,"line":2257},[52,73466,73305],{"class":62},[52,73468,73308],{"class":94},[52,73470,73471,73474,73476],{"class":54,"line":2262},[52,73472,73473],{"class":53950},"  padding-left",[52,73475,54087],{"class":79},[52,73477,73462],{"class":62},[52,73479,73480,73483,73485],{"class":54,"line":2268},[52,73481,73482],{"class":53950},"  box-sizing",[52,73484,54087],{"class":79},[52,73486,73487],{"class":62},"border-box;\n",[52,73489,73490,73493,73495],{"class":54,"line":2297},[52,73491,73492],{"class":53950},"  margin-right",[52,73494,54087],{"class":79},[52,73496,73497],{"class":62},"15px;\n",[52,73499,73500],{"class":54,"line":2303},[52,73501,452],{"class":79},[52,73503,73504],{"class":54,"line":2318},[52,73505,73506],{"class":62},".info button {\n",[52,73508,73509,73511,73513],{"class":54,"line":2324},[52,73510,73218],{"class":53950},[52,73512,54087],{"class":79},[52,73514,73515],{"class":62},"60px;\n",[52,73517,73518,73520,73522],{"class":54,"line":2353},[52,73519,73438],{"class":53950},[52,73521,54087],{"class":79},[52,73523,73443],{"class":62},[52,73525,73526,73529,73531],{"class":54,"line":2362},[52,73527,73528],{"class":53950},"  background-color",[52,73530,54087],{"class":79},[52,73532,73533],{"class":94},"#004085;\n",[52,73535,73536,73538,73540],{"class":54,"line":2368},[52,73537,73448],{"class":53950},[52,73539,54087],{"class":79},[52,73541,73157],{"class":62},[52,73543,73544,73547,73549],{"class":54,"line":2376},[52,73545,73546],{"class":53950},"  border",[52,73548,54087],{"class":79},[52,73550,73125],{"class":62},[52,73552,73553,73556,73558],{"class":54,"line":2381},[52,73554,73555],{"class":53950},"  color",[52,73557,54087],{"class":79},[52,73559,73362],{"class":94},[52,73561,73562,73565,73567],{"class":54,"line":19252},[52,73563,73564],{"class":53950},"  cursor",[52,73566,54087],{"class":79},[52,73568,73569],{"class":62},"pointer;\n",[52,73571,73572,73574,73576],{"class":54,"line":19258},[52,73573,73457],{"class":53950},[52,73575,54087],{"class":79},[52,73577,73462],{"class":62},[52,73579,73580],{"class":54,"line":19281},[52,73581,452],{"class":79},[52,73583,73584],{"class":54,"line":19287},[52,73585,73586],{"class":62},".info .age {\n",[52,73588,73589,73591,73593],{"class":54,"line":19310},[52,73590,73218],{"class":53950},[52,73592,54087],{"class":79},[52,73594,73595],{"class":62},"50px;\n",[52,73597,73598],{"class":54,"line":19324},[52,73599,452],{"class":79},[14,73601,73602],{},"思路：",[14,73604,73605],{},[4509,73606],{"alt":47,"src":73607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,73609,73610],{},[4509,73611],{"alt":47,"src":73612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,73614,73615],{},[4509,73616],{"alt":47,"src":73617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[3195,73619,73621],{"id":73620},"_3315-重绘回流","3.3.15 重绘回流",[14,73623,73624],{},[4509,73625],{"alt":47,"src":73626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,73628,73629],{},[4509,73630],{"alt":47,"src":73631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,73633,73634],{},[4509,73635],{"alt":47,"src":73636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[18,73638,73640],{"id":73639},"_34-bom","3.4 BOM",[14,73642,73643],{},[4509,73644],{"alt":47,"src":73645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,73647,73648],{},"平时写的document省略了window而已，实际上是window.document",[14,73650,73651],{},"函数也是这样，调用的时候实际为window.fn()",[14,73653,73654],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,73656,73657],{},"window大部分情况下可以省略",[3195,73659,73661],{"id":73660},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,73663,73664],{},"只执行一次",[14,73666,73667],{},[4509,73668],{"alt":47,"src":73669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,73671,73672],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,73674,73675],{},[4509,73676],{"alt":47,"src":73677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[3195,73679,73681],{"id":73680},"_342-js执行机制","3.4.2 JS执行机制",[14,73683,73684],{},[4509,73685],{"alt":47,"src":73686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,73688,73689],{},"两个的结果都是1111 3333 2222",[14,73691,73692],{},[4509,73693],{"alt":47,"src":73694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,73696,73697],{},[4509,73698],{"alt":47,"src":73699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,73701,73702],{},[4509,73703],{"alt":47,"src":73704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,73706,73707],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,73709,73710],{},"工作流程：",[14,73712,73713],{},[4509,73714],{"alt":47,"src":73715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,73717,73718],{},[4509,73719],{"alt":47,"src":73720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,73722,73723],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,73725,73726],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[3195,73728,73730],{"id":73729},"_343-location对象","3.4.3 location对象",[14,73732,73733],{},"location对象属于window这个全局对象下的，可以 省略window",[14,73735,73736],{},[4509,73737],{"alt":47,"src":73738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,73740,73741],{},"href可以跳转页面",[1696,73743,73744],{},[32,73745,73746],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,73748,73749],{},"search得到提交信息之后网站后边的地址",[14,73751,73752],{},[4509,73753],{"alt":47,"src":73754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,73756,73757],{},[4509,73758],{"alt":47,"src":73759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[1696,73761,73762],{"start":66},[32,73763,73764],{},"hash:这个获取单页面应用#后边的地址",[14,73766,73767],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,73769,73770],{},[4509,73771],{"alt":47,"src":73772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[42,73774,73776],{"className":55717,"code":73775,"language":55719,"meta":47,"style":47},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[49,73777,73778,73798,73818],{"__ignoreMap":47},[52,73779,73780,73782,73784,73786,73788,73791,73794,73796],{"class":54,"line":55},[52,73781,54794],{"class":79},[52,73783,3451],{"class":53950},[52,73785,63707],{"class":75},[52,73787,292],{"class":79},[52,73789,73790],{"class":62},"\"#\u002Fmy\"",[52,73792,73793],{"class":79},">我的\u003C\u002F",[52,73795,3451],{"class":53950},[52,73797,53957],{"class":79},[52,73799,73800,73802,73804,73806,73808,73811,73814,73816],{"class":54,"line":66},[52,73801,54794],{"class":79},[52,73803,3451],{"class":53950},[52,73805,63707],{"class":75},[52,73807,292],{"class":79},[52,73809,73810],{"class":62},"\"#\u002Ffriend\"",[52,73812,73813],{"class":79},">关注\u003C\u002F",[52,73815,3451],{"class":53950},[52,73817,53957],{"class":79},[52,73819,73820,73822,73824,73826,73828,73831,73834,73836],{"class":54,"line":83},[52,73821,54794],{"class":79},[52,73823,3451],{"class":53950},[52,73825,63707],{"class":75},[52,73827,292],{"class":79},[52,73829,73830],{"class":62},"\"#\u002Fdownload\"",[52,73832,73833],{"class":79},">下载\u003C\u002F",[52,73835,3451],{"class":53950},[52,73837,53957],{"class":79},[14,73839,73840],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[1696,73842,73843],{"start":83},[32,73844,73845,73846,73848,73849,73851],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[56366,73847],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[56366,73850],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[3195,73853,73855],{"id":73854},"_345-navigator对象","3.4.5 navigator对象",[14,73857,73858],{},[4509,73859],{"alt":47,"src":73860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[42,73862,73866],{"className":73863,"code":73864,"language":73865,"meta":47,"style":47},"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",[49,73867,73868,73873,73884,73896,73901,73952,73993,73998,74011,74023,74028],{"__ignoreMap":47},[52,73869,73870],{"class":54,"line":55},[52,73871,73872],{"class":94},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[52,73874,73875,73877,73879,73881],{"class":54,"line":66},[52,73876,3439],{"class":58},[52,73878,1216],{"class":79},[52,73880,57099],{"class":58},[52,73882,73883],{"class":79}," () { \n",[52,73885,73886,73888,73891,73893],{"class":54,"line":83},[52,73887,1648],{"class":58},[52,73889,73890],{"class":308}," userAgent",[52,73892,16212],{"class":58},[52,73894,73895],{"class":79}," navigator.userAgent \n",[52,73897,73898],{"class":54,"line":91},[52,73899,73900],{"class":94},"\u002F\u002F 验证是否为Android或iPhone \n",[52,73902,73903,73905,73908,73910,73913,73916,73918,73920,73923,73925,73928,73932,73934,73936,73938,73941,73943,73945,73947,73949],{"class":54,"line":98},[52,73904,1648],{"class":58},[52,73906,73907],{"class":308}," android",[52,73909,16212],{"class":58},[52,73911,73912],{"class":79}," userAgent.",[52,73914,73915],{"class":75},"match",[52,73917,1216],{"class":79},[52,73919,2340],{"class":62},[52,73921,73922],{"class":50627},"(Android);",[52,73924,4171],{"class":58},[52,73926,73927],{"class":308},"[\\s",[52,73929,73931],{"class":73930},"snhLl","\\\u002F",[52,73933,567],{"class":308},[52,73935,2004],{"class":58},[52,73937,1216],{"class":50627},[52,73939,73940],{"class":308},"[\\d.]",[52,73942,2004],{"class":58},[52,73944,2283],{"class":50627},[52,73946,4171],{"class":58},[52,73948,2340],{"class":62},[52,73950,73951],{"class":79},") \n",[52,73953,73954,73956,73959,73961,73963,73965,73967,73969,73972,73975,73978,73980,73982,73985,73987,73989,73991],{"class":54,"line":107},[52,73955,1648],{"class":58},[52,73957,73958],{"class":308}," iphone",[52,73960,16212],{"class":58},[52,73962,73912],{"class":79},[52,73964,73915],{"class":75},[52,73966,1216],{"class":79},[52,73968,2340],{"class":62},[52,73970,73971],{"class":50627},"(iPhone",[52,73973,73974],{"class":308},"\\s",[52,73976,73977],{"class":50627},"OS)",[52,73979,73974],{"class":308},[52,73981,1216],{"class":50627},[52,73983,73984],{"class":308},"[\\d_]",[52,73986,2004],{"class":58},[52,73988,2283],{"class":50627},[52,73990,2340],{"class":62},[52,73992,73951],{"class":79},[52,73994,73995],{"class":54,"line":113},[52,73996,73997],{"class":94},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[52,73999,74000,74002,74005,74008],{"class":54,"line":119},[52,74001,4578],{"class":58},[52,74003,74004],{"class":79}," (android ",[52,74006,74007],{"class":58},"||",[52,74009,74010],{"class":79}," iphone) { \n",[52,74012,74013,74016,74018,74021],{"class":54,"line":126},[52,74014,74015],{"class":79},"location.href ",[52,74017,292],{"class":58},[52,74019,74020],{"class":62}," 'http:\u002F\u002Fm.itcast.cn'",[52,74022,963],{"class":79},[52,74024,74025],{"class":54,"line":132},[52,74026,74027],{"class":79},"} \n",[52,74029,74030],{"class":54,"line":138},[52,74031,74032],{"class":79},"})()\n",[3195,74034,74036],{"id":74035},"_346-histroy对象","3.4.6 histroy对象",[14,74038,74039],{},[4509,74040],{"alt":47,"src":74041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,74043,74044],{},"浏览器地址的前进与后退!!!",[14,74046,74047],{},"history.back() 等效于 history.go(-1)",[14,74049,74050],{},"history.forward() 等效于 history.go(1)",[18,74052,74054],{"id":74053},"_35-本地存储","3.5 本地存储",[1696,74056,74057,74060,74063],{},[32,74058,74059],{},"数据存储在用户浏览器中",[32,74061,74062],{},"设置、读取方便、甚至页面刷新不丢失数据",[32,74064,74065],{},"容量较大，sessionStorage和localStorage约 5M 左右",[3195,74067,74069],{"id":74068},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,74071,74072],{},"只能存储字符串",[14,74074,74075],{},[4509,74076],{"alt":47,"src":74077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,74079,74080],{},[4509,74081],{"alt":47,"src":74082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,74084,74085],{},"键值对要加引号,不然就会当变量来看了",[14,74087,74088],{},"localStorage.setItem('uname', 'pink')",[14,74090,74091],{},"刷新之后信息不再丢失",[14,74093,74094],{},"操作key,value会跟着变",[14,74096,74097],{},"删除只删除键就可以,即名字",[14,74099,74088],{},[14,74101,74102],{},"改:",[14,74104,74105],{},"localStorage.setItem('uname','red')",[14,74107,74108],{},"有这个键就是改,没有这个键就是改",[14,74110,74111],{},[4509,74112],{"alt":47,"src":74113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,74115,74116],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,74118,74119],{},[4509,74120],{"alt":47,"src":74121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,74123,74124],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[3195,74126,74128],{"id":74127},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,74130,74131],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,74133,74134],{},"特性:",[1696,74136,74137,74140,74143,74146],{},[32,74138,74139],{},"生命周期为关闭浏览器窗口",[32,74141,74142],{},"在同一个窗口(页面)下数据可以共享",[32,74144,74145],{},"以键值对的形式存储使用",[32,74147,74148],{},"用法跟localStorage 基本相同",[3195,74150,74152],{"id":74151},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,74154,74155],{},"本地只能存储字符串,无法直接存储复杂数据类型",[42,74157,74159],{"className":55717,"code":74158,"language":55719,"meta":47,"style":47},"\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",[49,74160,74161,74169,74174,74179,74184,74189,74193,74198,74203],{"__ignoreMap":47},[52,74162,74163,74165,74167],{"class":54,"line":55},[52,74164,698],{"class":79},[52,74166,54463],{"class":53950},[52,74168,53957],{"class":79},[52,74170,74171],{"class":54,"line":66},[52,74172,74173],{"class":79},"    const obj = {\n",[52,74175,74176],{"class":54,"line":83},[52,74177,74178],{"class":79},"      uname: 'pink老师',\n",[52,74180,74181],{"class":54,"line":91},[52,74182,74183],{"class":79},"      age: 18,\n",[52,74185,74186],{"class":54,"line":98},[52,74187,74188],{"class":79},"      gender: '女'\n",[52,74190,74191],{"class":54,"line":107},[52,74192,616],{"class":79},[52,74194,74195],{"class":54,"line":113},[52,74196,74197],{"class":79},"    \u002F\u002F 存储复杂数据类型\n",[52,74199,74200],{"class":54,"line":119},[52,74201,74202],{"class":79},"    localStorage.setItem('obj', obj)\n",[52,74204,74205,74207,74209],{"class":54,"line":126},[52,74206,55067],{"class":79},[52,74208,54463],{"class":53950},[52,74210,53957],{"class":79},[14,74212,74213],{},[4509,74214],{"alt":47,"src":74215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,74217,74218],{},"如果获取一下数据:",[14,74220,74221],{},"log(localStorage.getItem('obj'))",[14,74223,74224],{},[4509,74225],{"alt":47,"src":74226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,74228,74229],{},"发现直接存对象是使用不了的!!!",[24646,74231,74233],{"id":74232},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,74235,74236],{},[4509,74237],{"alt":47,"src":74238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[42,74240,74242],{"className":53283,"code":74241,"language":53285,"meta":47,"style":47},"\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",[49,74243,74244,74252,74262,74272,74281,74289,74293,74297,74323,74342,74350,74354,74359,74364],{"__ignoreMap":47},[52,74245,74246,74248,74250],{"class":54,"line":55},[52,74247,698],{"class":79},[52,74249,54463],{"class":53950},[52,74251,53957],{"class":79},[52,74253,74254,74256,74258,74260],{"class":54,"line":66},[52,74255,13869],{"class":58},[52,74257,72621],{"class":308},[52,74259,16212],{"class":58},[52,74261,18220],{"class":79},[52,74263,74264,74267,74270],{"class":54,"line":83},[52,74265,74266],{"class":79},"      uname: ",[52,74268,74269],{"class":62},"'pink老师'",[52,74271,34116],{"class":79},[52,74273,74274,74277,74279],{"class":54,"line":91},[52,74275,74276],{"class":79},"      age: ",[52,74278,309],{"class":308},[52,74280,34116],{"class":79},[52,74282,74283,74286],{"class":54,"line":98},[52,74284,74285],{"class":79},"      gender: ",[52,74287,74288],{"class":62},"'女'\n",[52,74290,74291],{"class":54,"line":107},[52,74292,616],{"class":79},[52,74294,74295],{"class":54,"line":113},[52,74296,74197],{"class":94},[52,74298,74299,74302,74305,74307,74310,74312,74315,74317,74320],{"class":54,"line":119},[52,74300,74301],{"class":79},"  localStorage.",[52,74303,74304],{"class":75},"setItem",[52,74306,1216],{"class":79},[52,74308,74309],{"class":62},"'obj'",[52,74311,15083],{"class":79},[52,74313,74314],{"class":308},"JSON",[52,74316,3757],{"class":79},[52,74318,74319],{"class":75},"stringify",[52,74321,74322],{"class":79},"(obj))\n",[52,74324,74325,74328,74330,74333,74336,74338,74340],{"class":54,"line":126},[52,74326,74327],{"class":79},"  console.",[52,74329,60897],{"class":75},[52,74331,74332],{"class":79},"(localStorage.",[52,74334,74335],{"class":75},"getItem",[52,74337,1216],{"class":79},[52,74339,74309],{"class":62},[52,74341,33147],{"class":79},[52,74343,74344,74346,74348],{"class":54,"line":132},[52,74345,55067],{"class":79},[52,74347,54463],{"class":53950},[52,74349,53957],{"class":79},[52,74351,74352],{"class":54,"line":138},[52,74353,73271],{"class":79},[52,74355,74356],{"class":54,"line":144},[52,74357,74358],{"class":79},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[52,74360,74361],{"class":54,"line":153},[52,74362,74363],{"class":79},"  类型是字符串的\n",[52,74365,74366],{"class":54,"line":159},[52,74367,74368],{"class":79},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[24646,74370,74372],{"id":74371},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,74374,74375],{},[4509,74376],{"alt":47,"src":74377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,74379,74380],{},[4509,74381],{"alt":47,"src":74382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[42,74384,74386],{"className":55717,"code":74385,"language":55719,"meta":47,"style":47},"  \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",[49,74387,74388,74396,74400,74404,74408,74412,74416,74421,74426,74431,74436,74441,74446,74451,74456],{"__ignoreMap":47},[52,74389,74390,74392,74394],{"class":54,"line":55},[52,74391,54794],{"class":79},[52,74393,54463],{"class":53950},[52,74395,53957],{"class":79},[52,74397,74398],{"class":54,"line":66},[52,74399,74173],{"class":79},[52,74401,74402],{"class":54,"line":83},[52,74403,74178],{"class":79},[52,74405,74406],{"class":54,"line":91},[52,74407,74183],{"class":79},[52,74409,74410],{"class":54,"line":98},[52,74411,74188],{"class":79},[52,74413,74414],{"class":54,"line":107},[52,74415,616],{"class":79},[52,74417,74418],{"class":54,"line":113},[52,74419,74420],{"class":79},"    \u002F\u002F 1.存储复杂数据类型\n",[52,74422,74423],{"class":54,"line":119},[52,74424,74425],{"class":79},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[52,74427,74428],{"class":54,"line":126},[52,74429,74430],{"class":79},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[52,74432,74433],{"class":54,"line":132},[52,74434,74435],{"class":79},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[52,74437,74438],{"class":54,"line":138},[52,74439,74440],{"class":79},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[52,74442,74443],{"class":54,"line":144},[52,74444,74445],{"class":79},"    \u002F\u002F 取\n",[52,74447,74448],{"class":54,"line":153},[52,74449,74450],{"class":79},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[52,74452,74453],{"class":54,"line":159},[52,74454,74455],{"class":79},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[52,74457,74458,74460,74462],{"class":54,"line":167},[52,74459,55067],{"class":79},[52,74461,54463],{"class":53950},[52,74463,53957],{"class":79},[14,74465,74466],{},[4509,74467],{"alt":47,"src":74468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[3195,74470,74472],{"id":74471},"_356-数组map方法","3.5.6 数组map方法",[14,74474,74475],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,74477,74478],{},[4509,74479],{"alt":47,"src":74480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,74482,74483],{},[4509,74484],{"alt":47,"src":74485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,74487,74488,74491],{},[2389,74489,74490],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,74493,74494],{},"map有返回值，但是forEach没有返回值",[14,74496,74497],{},"map是个方法。用的时候要加 ()",[14,74499,74500],{},"map返回的是一个数组",[3195,74502,74504],{"id":74503},"_357-数组中join方法","3.5.7 数组中join方法",[14,74506,74507],{},[4509,74508],{"alt":47,"src":74509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,74511,74512],{},"类似于python中拼接字符串一样！",[1696,74514,74515,74518,74521],{},[32,74516,74517],{},"小括号为空则逗号分开",[32,74519,74520],{},"小括号为空字符串 ''，则元素之间没有分隔符",[32,74522,74523],{},"小括号用啥符号就用进行分割",[3195,74525,74527],{"id":74526},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[1696,74529,74530,74533,74536,74539,74542],{},[32,74531,74532],{},"记住本地时间获取快速方式：new Date().toDateString()",[32,74534,74535],{},"尽量减少DOM操作，用好map+join的渲染方式",[32,74537,74538],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[32,74540,74541],{},"return可以实现函数的结束",[32,74543,74544],{},"禁止跳转是 preventDefault() 不要忘记",[42,74546,74548],{"className":53283,"code":74547,"language":53285,"meta":47,"style":47},"\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",[49,74549,74550,74560,74574,74578,74586,74600,74620,74632,74640,74646,74656,74666,74670,74674,74680,74690,74702,74706,74710,74717,74729,74743,74753,74757,74761,74768,74775,74782,74794,74806,74816,74828,74832,74836,74843,74850,74862,74874,74884,74896,74926,74930,74934,74941,74953,74965,74989,74999,75009,75013,75017,75025,75036,75048,75060,75072,75089,75101,75113,75117,75121,75128,75140,75152,75164,75175,75193,75206,75218,75242,75253,75257,75261,75269,75279,75283,75287,75293,75305,75316,75326,75330,75334,75340,75362,75366,75370,75376,75382,75394,75404,75416,75446,75459,75476,75480,75484,75495,75517,75527,75531,75535,75548,75558,75570,75582,75594,75606,75616,75626,75636,75647,75660,75664,75672,75680,75684,75692,75705,75725,75758,75791,75824,75850,75868,75886,75894,75920,75938,75956,75974,75992,76010,76018,76026,76044,76052,76081,76089,76097,76105,76118,76130,76142,76154,76166,76178,76191,76203,76211,76219,76227,76232,76237,76241,76245,76249,76253,76257,76261,76266,76271,76276,76281,76289,76297,76305,76310,76315,76320,76325,76330,76335,76340,76345,76350,76355,76360,76365,76370,76375,76379,76384,76389,76399,76408,76412,76417,76426,76442,76484,76524,76563,76628,76636,76640,76645,76663,76671,76676,76681,76711,76717,76722,76735,76747,76759,76771,76783,76795,76807,76811,76821,76825,76830,76835,76839,76848,76852,76857,76862,76881,76886,76906,76910,76915,76919,76924,76942,76960,76978,76997,77016,77035,77040,77046,77067,77073,77082,77088,77094,77100,77127,77140,77145,77155,77161,77167,77173,77179,77184,77190,77196,77202,77208,77241,77246,77251,77256,77261,77267,77273,77279,77290,77295,77301,77308,77322,77328,77352,77357,77362,77368,77374,77395,77401,77414,77420,77426,77432,77438,77443,77449,77455,77461,77479,77493,77499,77507,77513,77535,77540,77545,77550,77555,77560,77569,77578,77583],{"__ignoreMap":47},[52,74551,74552,74554,74556,74558],{"class":54,"line":55},[52,74553,53947],{"class":79},[52,74555,53951],{"class":53950},[52,74557,53954],{"class":75},[52,74559,53957],{"class":79},[52,74561,74562,74564,74566,74568,74570,74572],{"class":54,"line":66},[52,74563,698],{"class":79},[52,74565,53285],{"class":53950},[52,74567,53966],{"class":75},[52,74569,292],{"class":79},[52,74571,53971],{"class":62},[52,74573,53957],{"class":79},[52,74575,74576],{"class":54,"line":83},[52,74577,123],{"emptyLinePlaceholder":122},[52,74579,74580,74582,74584],{"class":54,"line":91},[52,74581,698],{"class":79},[52,74583,53984],{"class":53950},[52,74585,53957],{"class":79},[52,74587,74588,74590,74592,74594,74596,74598],{"class":54,"line":98},[52,74589,54794],{"class":79},[52,74591,53994],{"class":53950},[52,74593,53997],{"class":75},[52,74595,292],{"class":79},[52,74597,54002],{"class":62},[52,74599,53957],{"class":79},[52,74601,74602,74604,74606,74608,74610,74612,74614,74616,74618],{"class":54,"line":107},[52,74603,54794],{"class":79},[52,74605,53994],{"class":53950},[52,74607,17568],{"class":75},[52,74609,292],{"class":79},[52,74611,54041],{"class":62},[52,74613,54021],{"class":75},[52,74615,292],{"class":79},[52,74617,54048],{"class":62},[52,74619,53957],{"class":79},[52,74621,74622,74624,74626,74628,74630],{"class":54,"line":113},[52,74623,54794],{"class":79},[52,74625,54057],{"class":53950},[52,74627,54060],{"class":79},[52,74629,54057],{"class":53950},[52,74631,53957],{"class":79},[52,74633,74634,74636,74638],{"class":54,"line":119},[52,74635,54794],{"class":79},[52,74637,3141],{"class":53950},[52,74639,53957],{"class":79},[52,74641,74642,74644],{"class":54,"line":126},[52,74643,9366],{"class":53950},[52,74645,18220],{"class":79},[52,74647,74648,74650,74652,74654],{"class":54,"line":132},[52,74649,57345],{"class":308},[52,74651,54087],{"class":79},[52,74653,692],{"class":308},[52,74655,80],{"class":79},[52,74657,74658,74660,74662,74664],{"class":54,"line":138},[52,74659,57356],{"class":308},[52,74661,54087],{"class":79},[52,74663,692],{"class":308},[52,74665,80],{"class":79},[52,74667,74668],{"class":54,"line":144},[52,74669,616],{"class":79},[52,74671,74672],{"class":54,"line":153},[52,74673,123],{"emptyLinePlaceholder":122},[52,74675,74676,74678],{"class":54,"line":159},[52,74677,59929],{"class":53950},[52,74679,18220],{"class":79},[52,74681,74682,74684,74686,74688],{"class":54,"line":167},[52,74683,59936],{"class":308},[52,74685,54087],{"class":79},[52,74687,54242],{"class":308},[52,74689,80],{"class":79},[52,74691,74692,74694,74696,74698,74700],{"class":54,"line":173},[52,74693,64727],{"class":308},[52,74695,54087],{"class":79},[52,74697,444],{"class":308},[52,74699,54142],{"class":58},[52,74701,80],{"class":79},[52,74703,74704],{"class":54,"line":181},[52,74705,616],{"class":79},[52,74707,74708],{"class":54,"line":186},[52,74709,123],{"emptyLinePlaceholder":122},[52,74711,74712,74715],{"class":54,"line":191},[52,74713,74714],{"class":75},"    .info",[52,74716,18220],{"class":79},[52,74718,74719,74721,74723,74725,74727],{"class":54,"line":196},[52,74720,57421],{"class":308},[52,74722,54087],{"class":79},[52,74724,54139],{"class":308},[52,74726,54142],{"class":58},[52,74728,80],{"class":79},[52,74730,74731,74733,74735,74737,74739,74741],{"class":54,"line":201},[52,74732,57356],{"class":308},[52,74734,54087],{"class":79},[52,74736,3649],{"class":308},[52,74738,54142],{"class":58},[52,74740,54206],{"class":308},[52,74742,80],{"class":79},[52,74744,74745,74747,74749,74751],{"class":54,"line":206},[52,74746,59936],{"class":308},[52,74748,54087],{"class":79},[52,74750,54242],{"class":308},[52,74752,80],{"class":79},[52,74754,74755],{"class":54,"line":211},[52,74756,616],{"class":79},[52,74758,74759],{"class":54,"line":218},[52,74760,123],{"emptyLinePlaceholder":122},[52,74762,74763,74766],{"class":54,"line":223},[52,74764,74765],{"class":75},"    .uname",[52,74767,34116],{"class":79},[52,74769,74770,74773],{"class":54,"line":230},[52,74771,74772],{"class":75},"    .age",[52,74774,34116],{"class":79},[52,74776,74777,74780],{"class":54,"line":239},[52,74778,74779],{"class":75},"    .salary",[52,74781,18220],{"class":79},[52,74783,74784,74786,74788,74790,74792],{"class":54,"line":251},[52,74785,57421],{"class":308},[52,74787,54087],{"class":79},[52,74789,591],{"class":308},[52,74791,54142],{"class":58},[52,74793,80],{"class":79},[52,74795,74796,74798,74800,74802,74804],{"class":54,"line":256},[52,74797,57435],{"class":308},[52,74799,54087],{"class":79},[52,74801,444],{"class":308},[52,74803,54142],{"class":58},[52,74805,80],{"class":79},[52,74807,74808,74810,74812,74814],{"class":54,"line":262},[52,74809,64430],{"class":308},[52,74811,54087],{"class":79},[52,74813,57387],{"class":308},[52,74815,80],{"class":79},[52,74817,74818,74820,74822,74824,74826],{"class":54,"line":268},[52,74819,64400],{"class":308},[52,74821,54087],{"class":79},[52,74823,605],{"class":308},[52,74825,54142],{"class":58},[52,74827,80],{"class":79},[52,74829,74830],{"class":54,"line":280},[52,74831,616],{"class":79},[52,74833,74834],{"class":54,"line":286},[52,74835,123],{"emptyLinePlaceholder":122},[52,74837,74838,74841],{"class":54,"line":300},[52,74839,74840],{"class":75},"    .gender",[52,74842,34116],{"class":79},[52,74844,74845,74848],{"class":54,"line":314},[52,74846,74847],{"class":75},"    .city",[52,74849,18220],{"class":79},[52,74851,74852,74854,74856,74858,74860],{"class":54,"line":327},[52,74853,57421],{"class":308},[52,74855,54087],{"class":79},[52,74857,591],{"class":308},[52,74859,54142],{"class":58},[52,74861,80],{"class":79},[52,74863,74864,74866,74868,74870,74872],{"class":54,"line":333},[52,74865,57435],{"class":308},[52,74867,54087],{"class":79},[52,74869,4015],{"class":308},[52,74871,54142],{"class":58},[52,74873,80],{"class":79},[52,74875,74876,74878,74880,74882],{"class":54,"line":360},[52,74877,64430],{"class":308},[52,74879,54087],{"class":79},[52,74881,57387],{"class":308},[52,74883,80],{"class":79},[52,74885,74886,74888,74890,74892,74894],{"class":54,"line":365},[52,74887,64400],{"class":308},[52,74889,54087],{"class":79},[52,74891,605],{"class":308},[52,74893,54142],{"class":58},[52,74895,80],{"class":79},[52,74897,74898,74900,74902,74904,74906,74908,74911,74913,74915,74917,74920,74922,74924],{"class":54,"line":371},[52,74899,64627],{"class":308},[52,74901,54087],{"class":79},[52,74903,629],{"class":308},[52,74905,54142],{"class":58},[52,74907,54171],{"class":308},[52,74909,74910],{"class":308}," rgb",[52,74912,1216],{"class":79},[52,74914,856],{"class":308},[52,74916,15083],{"class":79},[52,74918,74919],{"class":308},"197",[52,74921,15083],{"class":79},[52,74923,74919],{"class":308},[52,74925,2737],{"class":79},[52,74927,74928],{"class":54,"line":400},[52,74929,616],{"class":79},[52,74931,74932],{"class":54,"line":405},[52,74933,123],{"emptyLinePlaceholder":122},[52,74935,74936,74939],{"class":54,"line":411},[52,74937,74938],{"class":53950},"    button",[52,74940,18220],{"class":79},[52,74942,74943,74945,74947,74949,74951],{"class":54,"line":424},[52,74944,57435],{"class":308},[52,74946,54087],{"class":79},[52,74948,4015],{"class":308},[52,74950,54142],{"class":58},[52,74952,80],{"class":79},[52,74954,74955,74957,74959,74961,74963],{"class":54,"line":436},[52,74956,57421],{"class":308},[52,74958,54087],{"class":79},[52,74960,3684],{"class":308},[52,74962,54142],{"class":58},[52,74964,80],{"class":79},[52,74966,74967,74969,74971,74974,74976,74978,74980,74983,74985,74987],{"class":54,"line":449},[52,74968,57534],{"class":308},[52,74970,54087],{"class":79},[52,74972,74973],{"class":308},"rgb",[52,74975,1216],{"class":79},[52,74977,4154],{"class":308},[52,74979,15083],{"class":79},[52,74981,74982],{"class":308},"187",[52,74984,15083],{"class":79},[52,74986,3510],{"class":308},[52,74988,2737],{"class":79},[52,74990,74991,74993,74995,74997],{"class":54,"line":2160},[52,74992,60066],{"class":308},[52,74994,54087],{"class":79},[52,74996,63492],{"class":308},[52,74998,80],{"class":79},[52,75000,75001,75003,75005,75007],{"class":54,"line":2186},[52,75002,64627],{"class":308},[52,75004,54087],{"class":79},[52,75006,692],{"class":308},[52,75008,80],{"class":79},[52,75010,75011],{"class":54,"line":2209},[52,75012,616],{"class":79},[52,75014,75015],{"class":54,"line":2233},[52,75016,123],{"emptyLinePlaceholder":122},[52,75018,75019,75021,75023],{"class":54,"line":2238},[52,75020,74938],{"class":53950},[52,75022,54338],{"class":53950},[52,75024,18220],{"class":79},[52,75026,75027,75029,75031,75034],{"class":54,"line":2243},[52,75028,57659],{"class":308},[52,75030,54087],{"class":79},[52,75032,75033],{"class":308},"inline-block",[52,75035,80],{"class":79},[52,75037,75038,75040,75042,75044,75046],{"class":54,"line":2248},[52,75039,57421],{"class":308},[52,75041,54087],{"class":79},[52,75043,3649],{"class":308},[52,75045,54142],{"class":58},[52,75047,80],{"class":79},[52,75049,75050,75052,75054,75056,75058],{"class":54,"line":2257},[52,75051,57435],{"class":308},[52,75053,54087],{"class":79},[52,75055,3649],{"class":308},[52,75057,54142],{"class":58},[52,75059,80],{"class":79},[52,75061,75062,75064,75066,75068,75070],{"class":54,"line":2262},[52,75063,60009],{"class":308},[52,75065,54087],{"class":79},[52,75067,3673],{"class":308},[52,75069,54142],{"class":58},[52,75071,80],{"class":79},[52,75073,75074,75076,75078,75080,75082,75084,75087],{"class":54,"line":2268},[52,75075,64627],{"class":308},[52,75077,54087],{"class":79},[52,75079,629],{"class":308},[52,75081,54142],{"class":58},[52,75083,54171],{"class":308},[52,75085,75086],{"class":308}," #fff",[52,75088,80],{"class":79},[52,75090,75091,75093,75095,75097,75099],{"class":54,"line":2297},[52,75092,57784],{"class":308},[52,75094,54087],{"class":79},[52,75096,1805],{"class":308},[52,75098,54142],{"class":58},[52,75100,80],{"class":79},[52,75102,75103,75105,75107,75109,75111],{"class":54,"line":2303},[52,75104,64400],{"class":308},[52,75106,54087],{"class":79},[52,75108,629],{"class":308},[52,75110,54142],{"class":58},[52,75112,80],{"class":79},[52,75114,75115],{"class":54,"line":2318},[52,75116,616],{"class":79},[52,75118,75119],{"class":54,"line":2324},[52,75120,123],{"emptyLinePlaceholder":122},[52,75122,75123,75126],{"class":54,"line":2353},[52,75124,75125],{"class":75},"    .total",[52,75127,18220],{"class":79},[52,75129,75130,75132,75134,75136,75138],{"class":54,"line":2362},[52,75131,57421],{"class":308},[52,75133,54087],{"class":79},[52,75135,64279],{"class":308},[52,75137,54142],{"class":58},[52,75139,80],{"class":79},[52,75141,75142,75144,75146,75148,75150],{"class":54,"line":2368},[52,75143,57435],{"class":308},[52,75145,54087],{"class":79},[52,75147,2007],{"class":308},[52,75149,54142],{"class":58},[52,75151,80],{"class":79},[52,75153,75154,75156,75158,75160,75162],{"class":54,"line":2376},[52,75155,60009],{"class":308},[52,75157,54087],{"class":79},[52,75159,2007],{"class":308},[52,75161,54142],{"class":58},[52,75163,80],{"class":79},[52,75165,75166,75168,75170,75173],{"class":54,"line":2381},[52,75167,59936],{"class":308},[52,75169,54087],{"class":79},[52,75171,75172],{"class":308},"right",[52,75174,80],{"class":79},[52,75176,75177,75179,75181,75183,75185,75187,75189,75191],{"class":54,"line":19252},[52,75178,57356],{"class":308},[52,75180,54087],{"class":79},[52,75182,2007],{"class":308},[52,75184,54142],{"class":58},[52,75186,54206],{"class":308},[52,75188,5051],{"class":308},[52,75190,54142],{"class":58},[52,75192,80],{"class":79},[52,75194,75195,75198,75200,75202,75204],{"class":54,"line":19258},[52,75196,75197],{"class":308},"      padding-right",[52,75199,54087],{"class":79},[52,75201,3649],{"class":308},[52,75203,54142],{"class":58},[52,75205,80],{"class":79},[52,75207,75208,75210,75212,75214,75216],{"class":54,"line":19281},[52,75209,57572],{"class":308},[52,75211,54087],{"class":79},[52,75213,3723],{"class":308},[52,75215,54142],{"class":58},[52,75217,80],{"class":79},[52,75219,75220,75222,75224,75226,75228,75231,75233,75236,75238,75240],{"class":54,"line":19287},[52,75221,57534],{"class":308},[52,75223,54087],{"class":79},[52,75225,74973],{"class":308},[52,75227,1216],{"class":79},[52,75229,75230],{"class":308},"237",[52,75232,15083],{"class":79},[52,75234,75235],{"class":308},"235",[52,75237,15083],{"class":79},[52,75239,75235],{"class":308},[52,75241,2737],{"class":79},[52,75243,75244,75247,75249,75251],{"class":54,"line":19310},[52,75245,75246],{"class":308},"      box-sizing",[52,75248,54087],{"class":79},[52,75250,63155],{"class":308},[52,75252,80],{"class":79},[52,75254,75255],{"class":54,"line":19324},[52,75256,616],{"class":79},[52,75258,75259],{"class":54,"line":19344},[52,75260,123],{"emptyLinePlaceholder":122},[52,75262,75263,75265,75267],{"class":54,"line":19350},[52,75264,75125],{"class":75},[52,75266,54338],{"class":53950},[52,75268,18220],{"class":79},[52,75270,75271,75273,75275,75277],{"class":54,"line":19361},[52,75272,60066],{"class":308},[52,75274,54087],{"class":79},[52,75276,60071],{"class":308},[52,75278,80],{"class":79},[52,75280,75281],{"class":54,"line":19384},[52,75282,616],{"class":79},[52,75284,75285],{"class":54,"line":19406},[52,75286,123],{"emptyLinePlaceholder":122},[52,75288,75289,75291],{"class":54,"line":19411},[52,75290,67673],{"class":53950},[52,75292,18220],{"class":79},[52,75294,75295,75297,75299,75301,75303],{"class":54,"line":19417},[52,75296,57421],{"class":308},[52,75298,54087],{"class":79},[52,75300,64279],{"class":308},[52,75302,54142],{"class":58},[52,75304,80],{"class":79},[52,75306,75307,75309,75311,75314],{"class":54,"line":19431},[52,75308,57356],{"class":308},[52,75310,54087],{"class":79},[52,75312,75313],{"class":308},"auto",[52,75315,80],{"class":79},[52,75317,75318,75320,75322,75324],{"class":54,"line":19444},[52,75319,67680],{"class":308},[52,75321,54087],{"class":79},[52,75323,67685],{"class":308},[52,75325,80],{"class":79},[52,75327,75328],{"class":54,"line":19449},[52,75329,616],{"class":79},[52,75331,75332],{"class":54,"line":19463},[52,75333,123],{"emptyLinePlaceholder":122},[52,75335,75336,75338],{"class":54,"line":19468},[52,75337,67765],{"class":53950},[52,75339,18220],{"class":79},[52,75341,75342,75344,75346,75348,75350,75352,75354,75356,75358,75360],{"class":54,"line":19474},[52,75343,57534],{"class":308},[52,75345,54087],{"class":79},[52,75347,74973],{"class":308},[52,75349,1216],{"class":79},[52,75351,75230],{"class":308},[52,75353,15083],{"class":79},[52,75355,75235],{"class":308},[52,75357,15083],{"class":79},[52,75359,75235],{"class":308},[52,75361,2737],{"class":79},[52,75363,75364],{"class":54,"line":19479},[52,75365,616],{"class":79},[52,75367,75368],{"class":54,"line":19493},[52,75369,123],{"emptyLinePlaceholder":122},[52,75371,75372,75374],{"class":54,"line":19498},[52,75373,67765],{"class":53950},[52,75375,34116],{"class":79},[52,75377,75378,75380],{"class":54,"line":19503},[52,75379,67831],{"class":53950},[52,75381,18220],{"class":79},[52,75383,75384,75386,75388,75390,75392],{"class":54,"line":19517},[52,75385,57435],{"class":308},[52,75387,54087],{"class":79},[52,75389,3484],{"class":308},[52,75391,54142],{"class":58},[52,75393,80],{"class":79},[52,75395,75396,75398,75400,75402],{"class":54,"line":19529},[52,75397,59936],{"class":308},[52,75399,54087],{"class":79},[52,75401,26385],{"class":308},[52,75403,80],{"class":79},[52,75405,75406,75408,75410,75412,75414],{"class":54,"line":19534},[52,75407,57572],{"class":308},[52,75409,54087],{"class":79},[52,75411,3748],{"class":308},[52,75413,54142],{"class":58},[52,75415,80],{"class":79},[52,75417,75418,75420,75422,75424,75426,75428,75430,75432,75435,75437,75440,75442,75444],{"class":54,"line":19547},[52,75419,64627],{"class":308},[52,75421,54087],{"class":79},[52,75423,629],{"class":308},[52,75425,54142],{"class":58},[52,75427,54171],{"class":308},[52,75429,74910],{"class":308},[52,75431,1216],{"class":79},[52,75433,75434],{"class":308},"228",[52,75436,15083],{"class":79},[52,75438,75439],{"class":308},"225",[52,75441,15083],{"class":79},[52,75443,75439],{"class":308},[52,75445,2737],{"class":79},[52,75447,75448,75451,75453,75455,75457],{"class":54,"line":19552},[52,75449,75450],{"class":308},"      padding-left",[52,75452,54087],{"class":79},[52,75454,1805],{"class":308},[52,75456,54142],{"class":58},[52,75458,80],{"class":79},[52,75460,75461,75463,75465,75467,75470,75472,75474],{"class":54,"line":19557},[52,75462,64510],{"class":308},[52,75464,54087],{"class":79},[52,75466,30771],{"class":308},[52,75468,75469],{"class":308}," linear",[52,75471,64517],{"class":308},[52,75473,1291],{"class":58},[52,75475,80],{"class":79},[52,75477,75478],{"class":54,"line":19562},[52,75479,616],{"class":79},[52,75481,75482],{"class":54,"line":19575},[52,75483,123],{"emptyLinePlaceholder":122},[52,75485,75486,75489,75491,75493],{"class":54,"line":19580},[52,75487,75488],{"class":53950},"    tbody",[52,75490,72794],{"class":53950},[52,75492,63590],{"class":75},[52,75494,18220],{"class":79},[52,75496,75497,75499,75501,75503,75505,75507,75509,75511,75513,75515],{"class":54,"line":35283},[52,75498,57534],{"class":308},[52,75500,54087],{"class":79},[52,75502,74973],{"class":308},[52,75504,1216],{"class":79},[52,75506,75230],{"class":308},[52,75508,15083],{"class":79},[52,75510,75235],{"class":308},[52,75512,15083],{"class":79},[52,75514,75235],{"class":308},[52,75516,2737],{"class":79},[52,75518,75519,75521,75523,75525],{"class":54,"line":35289},[52,75520,64675],{"class":308},[52,75522,54087],{"class":79},[52,75524,64680],{"class":308},[52,75526,80],{"class":79},[52,75528,75529],{"class":54,"line":35295},[52,75530,616],{"class":79},[52,75532,75533],{"class":54,"line":35301},[52,75534,123],{"emptyLinePlaceholder":122},[52,75536,75537,75539,75541,75544,75546],{"class":54,"line":35307},[52,75538,75488],{"class":53950},[52,75540,72794],{"class":53950},[52,75542,75543],{"class":53950}," td",[52,75545,4446],{"class":53950},[52,75547,18220],{"class":79},[52,75549,75550,75552,75554,75556],{"class":54,"line":35318},[52,75551,57659],{"class":308},[52,75553,54087],{"class":79},[52,75555,63519],{"class":308},[52,75557,80],{"class":79},[52,75559,75560,75562,75564,75566,75568],{"class":54,"line":35324},[52,75561,57421],{"class":308},[52,75563,54087],{"class":79},[52,75565,2001],{"class":308},[52,75567,54142],{"class":58},[52,75569,80],{"class":79},[52,75571,75572,75574,75576,75578,75580],{"class":54,"line":35344},[52,75573,57435],{"class":308},[52,75575,54087],{"class":79},[52,75577,4015],{"class":308},[52,75579,54142],{"class":58},[52,75581,80],{"class":79},[52,75583,75584,75586,75588,75590,75592],{"class":54,"line":35350},[52,75585,60009],{"class":308},[52,75587,54087],{"class":79},[52,75589,4015],{"class":308},[52,75591,54142],{"class":58},[52,75593,80],{"class":79},[52,75595,75596,75598,75600,75602,75604],{"class":54,"line":35361},[52,75597,64727],{"class":308},[52,75599,54087],{"class":79},[52,75601,564],{"class":308},[52,75603,54142],{"class":58},[52,75605,80],{"class":79},[52,75607,75608,75610,75612,75614],{"class":54,"line":35367},[52,75609,60066],{"class":308},[52,75611,54087],{"class":79},[52,75613,63492],{"class":308},[52,75615,80],{"class":79},[52,75617,75618,75620,75622,75624],{"class":54,"line":35373},[52,75619,59936],{"class":308},[52,75621,54087],{"class":79},[52,75623,54242],{"class":308},[52,75625,80],{"class":79},[52,75627,75628,75630,75632,75634],{"class":54,"line":35379},[52,75629,66620],{"class":308},[52,75631,54087],{"class":79},[52,75633,57387],{"class":308},[52,75635,80],{"class":79},[52,75637,75638,75640,75642,75645],{"class":54,"line":35385},[52,75639,57534],{"class":308},[52,75641,54087],{"class":79},[52,75643,75644],{"class":308},"orange",[52,75646,80],{"class":79},[52,75648,75649,75651,75653,75656,75658],{"class":54,"line":35391},[52,75650,57784],{"class":308},[52,75652,54087],{"class":79},[52,75654,75655],{"class":308},"12.5",[52,75657,54142],{"class":58},[52,75659,80],{"class":79},[52,75661,75662],{"class":54,"line":35397},[52,75663,616],{"class":79},[52,75665,75666,75668,75670],{"class":54,"line":35403},[52,75667,55067],{"class":79},[52,75669,3141],{"class":53950},[52,75671,53957],{"class":79},[52,75673,75674,75676,75678],{"class":54,"line":35423},[52,75675,54435],{"class":79},[52,75677,53984],{"class":53950},[52,75679,53957],{"class":79},[52,75681,75682],{"class":54,"line":35429},[52,75683,123],{"emptyLinePlaceholder":122},[52,75685,75686,75688,75690],{"class":54,"line":35445},[52,75687,698],{"class":79},[52,75689,54450],{"class":53950},[52,75691,53957],{"class":79},[52,75693,75694,75696,75698,75701,75703],{"class":54,"line":35451},[52,75695,54794],{"class":79},[52,75697,18],{"class":53950},[52,75699,75700],{"class":79},">学生就业统计表\u003C\u002F",[52,75702,18],{"class":53950},[52,75704,53957],{"class":79},[52,75706,75707,75709,75711,75713,75715,75717,75719,75721,75723],{"class":54,"line":35465},[52,75708,54794],{"class":79},[52,75710,69275],{"class":53950},[52,75712,56136],{"class":75},[52,75714,292],{"class":79},[52,75716,65314],{"class":62},[52,75718,71720],{"class":75},[52,75720,292],{"class":79},[52,75722,34426],{"class":62},[52,75724,53957],{"class":79},[52,75726,75727,75729,75731,75733,75735,75737,75739,75741,75743,75745,75747,75750,75752,75754,75756],{"class":54,"line":35471},[52,75728,53991],{"class":79},[52,75730,56471],{"class":53950},[52,75732,56474],{"class":75},[52,75734,292],{"class":79},[52,75736,65349],{"class":62},[52,75738,17568],{"class":75},[52,75740,292],{"class":79},[52,75742,71746],{"class":62},[52,75744,63670],{"class":75},[52,75746,292],{"class":79},[52,75748,75749],{"class":62},"\"姓名\"",[52,75751,56136],{"class":75},[52,75753,292],{"class":79},[52,75755,71746],{"class":62},[52,75757,53957],{"class":79},[52,75759,75760,75762,75764,75766,75768,75770,75772,75774,75776,75778,75780,75783,75785,75787,75789],{"class":54,"line":35486},[52,75761,53991],{"class":79},[52,75763,56471],{"class":53950},[52,75765,56474],{"class":75},[52,75767,292],{"class":79},[52,75769,65349],{"class":62},[52,75771,17568],{"class":75},[52,75773,292],{"class":79},[52,75775,71774],{"class":62},[52,75777,63670],{"class":75},[52,75779,292],{"class":79},[52,75781,75782],{"class":62},"\"年龄\"",[52,75784,56136],{"class":75},[52,75786,292],{"class":79},[52,75788,71774],{"class":62},[52,75790,53957],{"class":79},[52,75792,75793,75795,75797,75799,75801,75803,75805,75807,75809,75811,75813,75816,75818,75820,75822],{"class":54,"line":35492},[52,75794,53991],{"class":79},[52,75796,56471],{"class":53950},[52,75798,56474],{"class":75},[52,75800,292],{"class":79},[52,75802,65349],{"class":62},[52,75804,17568],{"class":75},[52,75806,292],{"class":79},[52,75808,71876],{"class":62},[52,75810,63670],{"class":75},[52,75812,292],{"class":79},[52,75814,75815],{"class":62},"\"薪资\"",[52,75817,56136],{"class":75},[52,75819,292],{"class":79},[52,75821,71876],{"class":62},[52,75823,53957],{"class":79},[52,75825,75826,75828,75830,75832,75834,75836,75838,75840,75842,75844,75846,75848],{"class":54,"line":35501},[52,75827,53991],{"class":79},[52,75829,71794],{"class":53950},[52,75831,17568],{"class":75},[52,75833,292],{"class":79},[52,75835,71801],{"class":62},[52,75837,17607],{"class":75},[52,75839,292],{"class":79},[52,75841,10607],{"class":62},[52,75843,56136],{"class":75},[52,75845,292],{"class":79},[52,75847,71801],{"class":62},[52,75849,53957],{"class":79},[52,75851,75852,75854,75856,75858,75860,75862,75864,75866],{"class":54,"line":35507},[52,75853,57884],{"class":79},[52,75855,71816],{"class":53950},[52,75857,69301],{"class":75},[52,75859,292],{"class":79},[52,75861,2419],{"class":62},[52,75863,71825],{"class":79},[52,75865,71816],{"class":53950},[52,75867,53957],{"class":79},[52,75869,75870,75872,75874,75876,75878,75880,75882,75884],{"class":54,"line":35516},[52,75871,57884],{"class":79},[52,75873,71816],{"class":53950},[52,75875,69301],{"class":75},[52,75877,292],{"class":79},[52,75879,2491],{"class":62},[52,75881,71844],{"class":79},[52,75883,71816],{"class":53950},[52,75885,53957],{"class":79},[52,75887,75888,75890,75892],{"class":54,"line":35522},[52,75889,54426],{"class":79},[52,75891,71794],{"class":53950},[52,75893,53957],{"class":79},[52,75895,75896,75898,75900,75902,75904,75906,75908,75910,75912,75914,75916,75918],{"class":54,"line":35528},[52,75897,53991],{"class":79},[52,75899,71794],{"class":53950},[52,75901,17568],{"class":75},[52,75903,292],{"class":79},[52,75905,71898],{"class":62},[52,75907,17607],{"class":75},[52,75909,292],{"class":79},[52,75911,10607],{"class":62},[52,75913,56136],{"class":75},[52,75915,292],{"class":79},[52,75917,71898],{"class":62},[52,75919,53957],{"class":79},[52,75921,75922,75924,75926,75928,75930,75932,75934,75936],{"class":54,"line":35537},[52,75923,57884],{"class":79},[52,75925,71816],{"class":53950},[52,75927,69301],{"class":75},[52,75929,292],{"class":79},[52,75931,71919],{"class":62},[52,75933,71922],{"class":79},[52,75935,71816],{"class":53950},[52,75937,53957],{"class":79},[52,75939,75940,75942,75944,75946,75948,75950,75952,75954],{"class":54,"line":35543},[52,75941,57884],{"class":79},[52,75943,71816],{"class":53950},[52,75945,69301],{"class":75},[52,75947,292],{"class":79},[52,75949,71939],{"class":62},[52,75951,71942],{"class":79},[52,75953,71816],{"class":53950},[52,75955,53957],{"class":79},[52,75957,75958,75960,75962,75964,75966,75968,75970,75972],{"class":54,"line":35554},[52,75959,57884],{"class":79},[52,75961,71816],{"class":53950},[52,75963,69301],{"class":75},[52,75965,292],{"class":79},[52,75967,71959],{"class":62},[52,75969,71962],{"class":79},[52,75971,71816],{"class":53950},[52,75973,53957],{"class":79},[52,75975,75976,75978,75980,75982,75984,75986,75988,75990],{"class":54,"line":35560},[52,75977,57884],{"class":79},[52,75979,71816],{"class":53950},[52,75981,69301],{"class":75},[52,75983,292],{"class":79},[52,75985,71979],{"class":62},[52,75987,71982],{"class":79},[52,75989,71816],{"class":53950},[52,75991,53957],{"class":79},[52,75993,75994,75996,75998,76000,76002,76004,76006,76008],{"class":54,"line":35579},[52,75995,57884],{"class":79},[52,75997,71816],{"class":53950},[52,75999,69301],{"class":75},[52,76001,292],{"class":79},[52,76003,71999],{"class":62},[52,76005,72002],{"class":79},[52,76007,71816],{"class":53950},[52,76009,53957],{"class":79},[52,76011,76012,76014,76016],{"class":54,"line":35585},[52,76013,54426],{"class":79},[52,76015,71794],{"class":53950},[52,76017,53957],{"class":79},[52,76019,76020,76022,76024],{"class":54,"line":35596},[52,76021,53991],{"class":79},[52,76023,56537],{"class":53950},[52,76025,53957],{"class":79},[52,76027,76028,76030,76032,76035,76037,76040,76042],{"class":54,"line":35602},[52,76029,57884],{"class":79},[52,76031,52],{"class":53950},[52,76033,76034],{"class":79},">+\u003C\u002F",[52,76036,52],{"class":53950},[52,76038,76039],{"class":79},">添加\u003C\u002F",[52,76041,56537],{"class":53950},[52,76043,53957],{"class":79},[52,76045,76046,76048,76050],{"class":54,"line":35622},[52,76047,55067],{"class":79},[52,76049,69275],{"class":53950},[52,76051,53957],{"class":79},[52,76053,76054,76056,76058,76060,76062,76064,76067,76069,76072,76074,76077,76079],{"class":54,"line":35638},[52,76055,54794],{"class":79},[52,76057,54261],{"class":53950},[52,76059,56136],{"class":75},[52,76061,292],{"class":79},[52,76063,65230],{"class":62},[52,76065,76066],{"class":79},">共有数据 \u003C",[52,76068,52],{"class":53950},[52,76070,76071],{"class":79},">0\u003C\u002F",[52,76073,52],{"class":53950},[52,76075,76076],{"class":79},"> 条\u003C\u002F",[52,76078,54261],{"class":53950},[52,76080,53957],{"class":79},[52,76082,76083,76085,76087],{"class":54,"line":35644},[52,76084,54794],{"class":79},[52,76086,3353],{"class":53950},[52,76088,53957],{"class":79},[52,76090,76091,76093,76095],{"class":54,"line":35658},[52,76092,53991],{"class":79},[52,76094,3356],{"class":53950},[52,76096,53957],{"class":79},[52,76098,76099,76101,76103],{"class":54,"line":35664},[52,76100,57884],{"class":79},[52,76102,3359],{"class":53950},[52,76104,53957],{"class":79},[52,76106,76107,76109,76111,76114,76116],{"class":54,"line":35670},[52,76108,57952],{"class":79},[52,76110,3362],{"class":53950},[52,76112,76113],{"class":79},">ID\u003C\u002F",[52,76115,3362],{"class":53950},[52,76117,53957],{"class":79},[52,76119,76120,76122,76124,76126,76128],{"class":54,"line":35681},[52,76121,57952],{"class":79},[52,76123,3362],{"class":53950},[52,76125,72105],{"class":79},[52,76127,3362],{"class":53950},[52,76129,53957],{"class":79},[52,76131,76132,76134,76136,76138,76140],{"class":54,"line":35687},[52,76133,57952],{"class":79},[52,76135,3362],{"class":53950},[52,76137,72118],{"class":79},[52,76139,3362],{"class":53950},[52,76141,53957],{"class":79},[52,76143,76144,76146,76148,76150,76152],{"class":54,"line":35693},[52,76145,57952],{"class":79},[52,76147,3362],{"class":53950},[52,76149,72131],{"class":79},[52,76151,3362],{"class":53950},[52,76153,53957],{"class":79},[52,76155,76156,76158,76160,76162,76164],{"class":54,"line":35703},[52,76157,57952],{"class":79},[52,76159,3362],{"class":53950},[52,76161,72144],{"class":79},[52,76163,3362],{"class":53950},[52,76165,53957],{"class":79},[52,76167,76168,76170,76172,76174,76176],{"class":54,"line":35709},[52,76169,57952],{"class":79},[52,76171,3362],{"class":53950},[52,76173,72157],{"class":79},[52,76175,3362],{"class":53950},[52,76177,53957],{"class":79},[52,76179,76180,76182,76184,76187,76189],{"class":54,"line":35720},[52,76181,57952],{"class":79},[52,76183,3362],{"class":53950},[52,76185,76186],{"class":79},">录入时间\u003C\u002F",[52,76188,3362],{"class":53950},[52,76190,53957],{"class":79},[52,76192,76193,76195,76197,76199,76201],{"class":54,"line":35726},[52,76194,57952],{"class":79},[52,76196,3362],{"class":53950},[52,76198,72170],{"class":79},[52,76200,3362],{"class":53950},[52,76202,53957],{"class":79},[52,76204,76205,76207,76209],{"class":54,"line":35736},[52,76206,58057],{"class":79},[52,76208,3359],{"class":53950},[52,76210,53957],{"class":79},[52,76212,76213,76215,76217],{"class":54,"line":35741},[52,76214,54426],{"class":79},[52,76216,3356],{"class":53950},[52,76218,53957],{"class":79},[52,76220,76221,76223,76225],{"class":54,"line":35747},[52,76222,53991],{"class":79},[52,76224,3399],{"class":53950},[52,76226,53957],{"class":79},[52,76228,76229],{"class":54,"line":35796},[52,76230,76231],{"class":94},"      \u003C!-- \u003Ctr>\n",[52,76233,76234],{"class":54,"line":35843},[52,76235,76236],{"class":94},"        \u003Ctd>1\u003C\u002Ftd>\n",[52,76238,76239],{"class":54,"line":35848},[52,76240,76236],{"class":94},[52,76242,76243],{"class":54,"line":35854},[52,76244,76236],{"class":94},[52,76246,76247],{"class":54,"line":35873},[52,76248,76236],{"class":94},[52,76250,76251],{"class":54,"line":35879},[52,76252,76236],{"class":94},[52,76254,76255],{"class":54,"line":35899},[52,76256,76236],{"class":94},[52,76258,76259],{"class":54,"line":35905},[52,76260,76236],{"class":94},[52,76262,76263],{"class":54,"line":35911},[52,76264,76265],{"class":94},"        \u003Ctd>\n",[52,76267,76268],{"class":54,"line":35921},[52,76269,76270],{"class":94},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[52,76272,76273],{"class":54,"line":35926},[52,76274,76275],{"class":94},"        \u003C\u002Ftd>\n",[52,76277,76278],{"class":54,"line":35932},[52,76279,76280],{"class":94},"      \u003C\u002Ftr> -->\n",[52,76282,76283,76285,76287],{"class":54,"line":35948},[52,76284,54426],{"class":79},[52,76286,3399],{"class":53950},[52,76288,53957],{"class":79},[52,76290,76291,76293,76295],{"class":54,"line":35993},[52,76292,55067],{"class":79},[52,76294,3353],{"class":53950},[52,76296,53957],{"class":79},[52,76298,76299,76301,76303],{"class":54,"line":35999},[52,76300,54794],{"class":79},[52,76302,54463],{"class":53950},[52,76304,53957],{"class":79},[52,76306,76307],{"class":54,"line":36005},[52,76308,76309],{"class":94},"    \u002F\u002F const initData = [{\n",[52,76311,76312],{"class":54,"line":36011},[52,76313,76314],{"class":94},"    \u002F\u002F   unameId: 1,\n",[52,76316,76317],{"class":54,"line":36022},[52,76318,76319],{"class":94},"    \u002F\u002F   uname: '华晨宇',\n",[52,76321,76322],{"class":54,"line":36028},[52,76323,76324],{"class":94},"    \u002F\u002F   age: 22,\n",[52,76326,76327],{"class":54,"line":36034},[52,76328,76329],{"class":94},"    \u002F\u002F   salary: 12000,\n",[52,76331,76332],{"class":54,"line":36040},[52,76333,76334],{"class":94},"    \u002F\u002F   gender: '男',\n",[52,76336,76337],{"class":54,"line":36058},[52,76338,76339],{"class":94},"    \u002F\u002F   city: '北京',\n",[52,76341,76342],{"class":54,"line":36072},[52,76343,76344],{"class":94},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[52,76346,76347],{"class":54,"line":36081},[52,76348,76349],{"class":94},"    \u002F\u002F }]\n",[52,76351,76352],{"class":54,"line":36090},[52,76353,76354],{"class":94},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[52,76356,76357],{"class":54,"line":36099},[52,76358,76359],{"class":94},"    \u002F\u002F 1.渲染业务\n",[52,76361,76362],{"class":54,"line":36108},[52,76363,76364],{"class":94},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[52,76366,76367],{"class":54,"line":36114},[52,76368,76369],{"class":94},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[52,76371,76372],{"class":54,"line":36120},[52,76373,76374],{"class":94},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[52,76376,76377],{"class":54,"line":36128},[52,76378,123],{"emptyLinePlaceholder":122},[52,76380,76381],{"class":54,"line":36133},[52,76382,76383],{"class":94},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[52,76385,76386],{"class":54,"line":36139},[52,76387,76388],{"class":94},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[52,76390,76391,76393,76395,76397],{"class":54,"line":36150},[52,76392,13869],{"class":58},[52,76394,60345],{"class":308},[52,76396,16212],{"class":58},[52,76398,54488],{"class":79},[52,76400,76401,76404,76406],{"class":54,"line":36156},[52,76402,76403],{"class":79},"    console.",[52,76405,60897],{"class":75},[52,76407,55062],{"class":79},[52,76409,76410],{"class":54,"line":36176},[52,76411,123],{"emptyLinePlaceholder":122},[52,76413,76414],{"class":54,"line":36182},[52,76415,76416],{"class":94},"    \u002F\u002F 时间函数\n",[52,76418,76419,76421,76424],{"class":54,"line":36188},[52,76420,72734],{"class":58},[52,76422,76423],{"class":75}," getTime",[52,76425,13501],{"class":79},[52,76427,76428,76430,76433,76435,76437,76440],{"class":54,"line":36194},[52,76429,60878],{"class":58},[52,76431,76432],{"class":308}," date",[52,76434,16212],{"class":58},[52,76436,14226],{"class":58},[52,76438,76439],{"class":75}," Date",[52,76441,248],{"class":79},[52,76443,76444,76446,76448,76450,76453,76456,76458,76460,76462,76465,76468,76470,76472,76474,76476,76478,76480,76482],{"class":54,"line":36211},[52,76445,60878],{"class":58},[52,76447,18739],{"class":308},[52,76449,16212],{"class":58},[52,76451,76452],{"class":79}," date.",[52,76454,76455],{"class":75},"getHours",[52,76457,15698],{"class":79},[52,76459,698],{"class":58},[52,76461,5051],{"class":308},[52,76463,76464],{"class":58}," ?",[52,76466,76467],{"class":62}," '0'",[52,76469,48216],{"class":58},[52,76471,76452],{"class":79},[52,76473,76455],{"class":75},[52,76475,15698],{"class":79},[52,76477,4049],{"class":58},[52,76479,76452],{"class":79},[52,76481,76455],{"class":75},[52,76483,248],{"class":79},[52,76485,76486,76488,76491,76493,76495,76498,76500,76502,76504,76506,76508,76510,76512,76514,76516,76518,76520,76522],{"class":54,"line":36217},[52,76487,60878],{"class":58},[52,76489,76490],{"class":308}," m",[52,76492,16212],{"class":58},[52,76494,76452],{"class":79},[52,76496,76497],{"class":75},"getMinutes",[52,76499,15698],{"class":79},[52,76501,698],{"class":58},[52,76503,5051],{"class":308},[52,76505,76464],{"class":58},[52,76507,76467],{"class":62},[52,76509,48216],{"class":58},[52,76511,76452],{"class":79},[52,76513,76497],{"class":75},[52,76515,15698],{"class":79},[52,76517,4049],{"class":58},[52,76519,76452],{"class":79},[52,76521,76497],{"class":75},[52,76523,248],{"class":79},[52,76525,76526,76528,76530,76532,76534,76537,76539,76541,76543,76545,76547,76549,76551,76553,76555,76557,76559,76561],{"class":54,"line":36223},[52,76527,60878],{"class":58},[52,76529,841],{"class":308},[52,76531,16212],{"class":58},[52,76533,76452],{"class":79},[52,76535,76536],{"class":75},"getSeconds",[52,76538,15698],{"class":79},[52,76540,698],{"class":58},[52,76542,5051],{"class":308},[52,76544,76464],{"class":58},[52,76546,76467],{"class":62},[52,76548,48216],{"class":58},[52,76550,76452],{"class":79},[52,76552,76536],{"class":75},[52,76554,15698],{"class":79},[52,76556,4049],{"class":58},[52,76558,76452],{"class":79},[52,76560,76536],{"class":75},[52,76562,248],{"class":79},[52,76564,76565,76567,76570,76572,76574,76577,76579,76582,76584,76587,76589,76591,76594,76596,76598,76600,76602,76604,76606,76609,76611,76614,76616,76619,76621,76623,76625],{"class":54,"line":36229},[52,76566,60878],{"class":58},[52,76568,76569],{"class":308}," str",[52,76571,16212],{"class":58},[52,76573,65553],{"class":62},[52,76575,76576],{"class":79},"date",[52,76578,3757],{"class":62},[52,76580,76581],{"class":75},"getFullYear",[52,76583,1995],{"class":62},[52,76585,76586],{"class":62},"}\u002F${",[52,76588,76576],{"class":79},[52,76590,3757],{"class":62},[52,76592,76593],{"class":75},"getMonth",[52,76595,15698],{"class":62},[52,76597,2004],{"class":58},[52,76599,27768],{"class":308},[52,76601,76586],{"class":62},[52,76603,76576],{"class":79},[52,76605,3757],{"class":62},[52,76607,76608],{"class":75},"getDate",[52,76610,1995],{"class":62},[52,76612,76613],{"class":62},"} ${",[52,76615,3619],{"class":79},[52,76617,76618],{"class":62},"}:${",[52,76620,3743],{"class":79},[52,76622,76618],{"class":62},[52,76624,1291],{"class":79},[52,76626,76627],{"class":62},"}`\n",[52,76629,76630,76633],{"class":54,"line":36235},[52,76631,76632],{"class":58},"      return",[52,76634,76635],{"class":79}," str\n",[52,76637,76638],{"class":54,"line":36241},[52,76639,616],{"class":79},[52,76641,76642],{"class":54,"line":36268},[52,76643,76644],{"class":94},"    \u002F\u002F 渲染函数\n",[52,76646,76647,76649,76651,76653,76655,76657,76659,76661],{"class":54,"line":36292},[52,76648,13869],{"class":58},[52,76650,72397],{"class":308},[52,76652,16212],{"class":58},[52,76654,57046],{"class":79},[52,76656,57049],{"class":75},[52,76658,1216],{"class":79},[52,76660,72408],{"class":62},[52,76662,708],{"class":79},[52,76664,76665,76667,76669],{"class":54,"line":36298},[52,76666,72734],{"class":58},[52,76668,72737],{"class":75},[52,76670,13501],{"class":79},[52,76672,76673],{"class":54,"line":36304},[52,76674,76675],{"class":94},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[52,76677,76678],{"class":54,"line":36310},[52,76679,76680],{"class":94},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[52,76682,76683,76685,76688,76690,76692,76695,76697,76699,76701,76704,76706,76709],{"class":54,"line":36321},[52,76684,60878],{"class":58},[52,76686,76687],{"class":308}," trArr",[52,76689,16212],{"class":58},[52,76691,54615],{"class":79},[52,76693,76694],{"class":75},"map",[52,76696,1216],{"class":79},[52,76698,57099],{"class":58},[52,76700,682],{"class":79},[52,76702,76703],{"class":1223},"ele",[52,76705,15083],{"class":79},[52,76707,76708],{"class":1223},"index",[52,76710,15090],{"class":79},[52,76712,76713,76715],{"class":54,"line":36332},[52,76714,17400],{"class":58},[52,76716,72818],{"class":62},[52,76718,76719],{"class":54,"line":36338},[52,76720,76721],{"class":62},"      \u003Ctr>\n",[52,76723,76724,76726,76728,76730,76733],{"class":54,"line":36355},[52,76725,72823],{"class":62},[52,76727,76703],{"class":79},[52,76729,3757],{"class":62},[52,76731,76732],{"class":79},"unameId",[52,76734,72838],{"class":62},[52,76736,76737,76739,76741,76743,76745],{"class":54,"line":36378},[52,76738,72823],{"class":62},[52,76740,76703],{"class":79},[52,76742,3757],{"class":62},[52,76744,72854],{"class":79},[52,76746,72838],{"class":62},[52,76748,76749,76751,76753,76755,76757],{"class":54,"line":36401},[52,76750,72823],{"class":62},[52,76752,76703],{"class":79},[52,76754,3757],{"class":62},[52,76756,72871],{"class":79},[52,76758,72838],{"class":62},[52,76760,76761,76763,76765,76767,76769],{"class":54,"line":36407},[52,76762,72823],{"class":62},[52,76764,76703],{"class":79},[52,76766,3757],{"class":62},[52,76768,72888],{"class":79},[52,76770,72838],{"class":62},[52,76772,76773,76775,76777,76779,76781],{"class":54,"line":36412},[52,76774,72823],{"class":62},[52,76776,76703],{"class":79},[52,76778,3757],{"class":62},[52,76780,72905],{"class":79},[52,76782,72838],{"class":62},[52,76784,76785,76787,76789,76791,76793],{"class":54,"line":36421},[52,76786,72823],{"class":62},[52,76788,76703],{"class":79},[52,76790,3757],{"class":62},[52,76792,72922],{"class":79},[52,76794,72838],{"class":62},[52,76796,76797,76799,76801,76803,76805],{"class":54,"line":36431},[52,76798,72823],{"class":62},[52,76800,76703],{"class":79},[52,76802,3757],{"class":62},[52,76804,2286],{"class":79},[52,76806,72838],{"class":62},[52,76808,76809],{"class":54,"line":36437},[52,76810,76265],{"class":62},[52,76812,76813,76816,76818],{"class":54,"line":36442},[52,76814,76815],{"class":62},"          \u003Ca href=\"#\" data-id=\"${",[52,76817,76708],{"class":79},[52,76819,76820],{"class":62},"}\">删除\u003C\u002Fa>\n",[52,76822,76823],{"class":54,"line":36448},[52,76824,76275],{"class":62},[52,76826,76827],{"class":54,"line":36461},[52,76828,76829],{"class":62},"      \u003C\u002Ftr>\n",[52,76831,76832],{"class":54,"line":36467},[52,76833,76834],{"class":62},"  `\n",[52,76836,76837],{"class":54,"line":36478},[52,76838,67465],{"class":79},[52,76840,76841,76843,76845],{"class":54,"line":36489},[52,76842,60894],{"class":79},[52,76844,60897],{"class":75},[52,76846,76847],{"class":79},"(trArr)\n",[52,76849,76850],{"class":54,"line":36508},[52,76851,123],{"emptyLinePlaceholder":122},[52,76853,76854],{"class":54,"line":52168},[52,76855,76856],{"class":94},"      \u002F\u002F (2) 把数组转换为字符串join\n",[52,76858,76859],{"class":54,"line":52173},[52,76860,76861],{"class":94},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[52,76863,76864,76866,76868,76871,76874,76876,76879],{"class":54,"line":52182},[52,76865,72749],{"class":79},[52,76867,292],{"class":58},[52,76869,76870],{"class":79}," trArr.",[52,76872,76873],{"class":75},"join",[52,76875,1216],{"class":79},[52,76877,76878],{"class":62},"''",[52,76880,708],{"class":79},[52,76882,76883],{"class":54,"line":52191},[52,76884,76885],{"class":94},"      \u002F\u002F 显示共有几条\n",[52,76887,76888,76890,76892,76894,76897,76900,76902,76904],{"class":54,"line":52196},[52,76889,58421],{"class":79},[52,76891,57049],{"class":75},[52,76893,1216],{"class":79},[52,76895,76896],{"class":62},"'.total span'",[52,76898,76899],{"class":79},").innerHTML ",[52,76901,292],{"class":58},[52,76903,54615],{"class":79},[52,76905,58481],{"class":308},[52,76907,76908],{"class":54,"line":52201},[52,76909,616],{"class":79},[52,76911,76912],{"class":54,"line":52206},[52,76913,76914],{"class":94},"    \u002F\u002F render()\n",[52,76916,76917],{"class":54,"line":52219},[52,76918,123],{"emptyLinePlaceholder":122},[52,76920,76921],{"class":54,"line":52224},[52,76922,76923],{"class":94},"    \u002F\u002F 获取DOM对象\n",[52,76925,76926,76928,76930,76932,76934,76936,76938,76940],{"class":54,"line":52233},[52,76927,13869],{"class":58},[52,76929,72471],{"class":308},[52,76931,16212],{"class":58},[52,76933,57046],{"class":79},[52,76935,57049],{"class":75},[52,76937,1216],{"class":79},[52,76939,72482],{"class":62},[52,76941,708],{"class":79},[52,76943,76944,76946,76948,76950,76952,76954,76956,76958],{"class":54,"line":52242},[52,76945,13869],{"class":58},[52,76947,72298],{"class":308},[52,76949,16212],{"class":58},[52,76951,57046],{"class":79},[52,76953,57049],{"class":75},[52,76955,1216],{"class":79},[52,76957,72309],{"class":62},[52,76959,708],{"class":79},[52,76961,76962,76964,76966,76968,76970,76972,76974,76976],{"class":54,"line":52259},[52,76963,13869],{"class":58},[52,76965,18337],{"class":308},[52,76967,16212],{"class":58},[52,76969,57046],{"class":79},[52,76971,57049],{"class":75},[52,76973,1216],{"class":79},[52,76975,72328],{"class":62},[52,76977,708],{"class":79},[52,76979,76981,76983,76985,76987,76989,76991,76993,76995],{"class":54,"line":76980},231,[52,76982,13869],{"class":58},[52,76984,72357],{"class":308},[52,76986,16212],{"class":58},[52,76988,57046],{"class":79},[52,76990,57049],{"class":75},[52,76992,1216],{"class":79},[52,76994,72368],{"class":62},[52,76996,708],{"class":79},[52,76998,77000,77002,77004,77006,77008,77010,77012,77014],{"class":54,"line":76999},232,[52,77001,13869],{"class":58},[52,77003,72337],{"class":308},[52,77005,16212],{"class":58},[52,77007,57046],{"class":79},[52,77009,57049],{"class":75},[52,77011,1216],{"class":79},[52,77013,72348],{"class":62},[52,77015,708],{"class":79},[52,77017,77019,77021,77023,77025,77027,77029,77031,77033],{"class":54,"line":77018},233,[52,77020,13869],{"class":58},[52,77022,72377],{"class":308},[52,77024,16212],{"class":58},[52,77026,57046],{"class":79},[52,77028,57049],{"class":75},[52,77030,1216],{"class":79},[52,77032,72388],{"class":62},[52,77034,708],{"class":79},[52,77036,77038],{"class":54,"line":77037},234,[52,77039,123],{"emptyLinePlaceholder":122},[52,77041,77043],{"class":54,"line":77042},235,[52,77044,77045],{"class":94},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[52,77047,77049,77051,77053,77055,77057,77059,77061,77063,77065],{"class":54,"line":77048},236,[52,77050,72489],{"class":79},[52,77052,60463],{"class":75},[52,77054,1216],{"class":79},[52,77056,72496],{"class":62},[52,77058,15083],{"class":79},[52,77060,57099],{"class":58},[52,77062,682],{"class":79},[52,77064,3292],{"class":1223},[52,77066,15090],{"class":79},[52,77068,77070],{"class":54,"line":77069},237,[52,77071,77072],{"class":94},"      \u002F\u002F 禁止浏览器跳转\n",[52,77074,77076,77078,77080],{"class":54,"line":77075},238,[52,77077,72516],{"class":79},[52,77079,72519],{"class":75},[52,77081,248],{"class":79},[52,77083,77085],{"class":54,"line":77084},239,[52,77086,77087],{"class":94},"      \u002F\u002F 非空判断\n",[52,77089,77091],{"class":54,"line":77090},240,[52,77092,77093],{"class":94},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[52,77095,77097],{"class":54,"line":77096},241,[52,77098,77099],{"class":94},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[52,77101,77103,77105,77107,77109,77112,77114,77117,77120,77122,77124],{"class":54,"line":77102},242,[52,77104,57130],{"class":58},[52,77106,682],{"class":79},[52,77108,3439],{"class":58},[52,77110,77111],{"class":79},"uname.value ",[52,77113,74007],{"class":58},[52,77115,77116],{"class":58}," !",[52,77118,77119],{"class":79},"age.value ",[52,77121,74007],{"class":58},[52,77123,77116],{"class":58},[52,77125,77126],{"class":79},"salary.value) {\n",[52,77128,77130,77132,77134,77136,77138],{"class":54,"line":77129},243,[52,77131,17400],{"class":58},[52,77133,72590],{"class":75},[52,77135,1216],{"class":79},[52,77137,72595],{"class":62},[52,77139,708],{"class":79},[52,77141,77143],{"class":54,"line":77142},244,[52,77144,55048],{"class":79},[52,77146,77148,77150,77152],{"class":54,"line":77147},245,[52,77149,60657],{"class":79},[52,77151,54534],{"class":75},[52,77153,77154],{"class":79},"({\n",[52,77156,77158],{"class":54,"line":77157},246,[52,77159,77160],{"class":94},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[52,77162,77164],{"class":54,"line":77163},247,[52,77165,77166],{"class":94},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[52,77168,77170],{"class":54,"line":77169},248,[52,77171,77172],{"class":94},"        \u002F\u002F 对象的序号应为数组长度+1\n",[52,77174,77176],{"class":54,"line":77175},249,[52,77177,77178],{"class":94},"        \u002F\u002F unameId: arr.length + 1,\n",[52,77180,77182],{"class":54,"line":77181},250,[52,77183,123],{"emptyLinePlaceholder":122},[52,77185,77187],{"class":54,"line":77186},251,[52,77188,77189],{"class":94},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[52,77191,77193],{"class":54,"line":77192},252,[52,77194,77195],{"class":94},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[52,77197,77199],{"class":54,"line":77198},253,[52,77200,77201],{"class":94},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[52,77203,77205],{"class":54,"line":77204},254,[52,77206,77207],{"class":94},"        \u002F\u002F 0当假看\n",[52,77209,77211,77214,77216,77218,77221,77223,77225,77227,77230,77232,77234,77237,77239],{"class":54,"line":77210},255,[52,77212,77213],{"class":79},"        unameId: arr.",[52,77215,54618],{"class":308},[52,77217,76464],{"class":58},[52,77219,77220],{"class":79}," arr[arr.",[52,77222,54618],{"class":308},[52,77224,54921],{"class":58},[52,77226,27768],{"class":308},[52,77228,77229],{"class":79},"].unameId ",[52,77231,2004],{"class":58},[52,77233,27768],{"class":308},[52,77235,77236],{"class":58}," :",[52,77238,27768],{"class":308},[52,77240,34116],{"class":79},[52,77242,77244],{"class":54,"line":77243},256,[52,77245,72643],{"class":79},[52,77247,77249],{"class":54,"line":77248},257,[52,77250,72648],{"class":79},[52,77252,77254],{"class":54,"line":77253},258,[52,77255,72658],{"class":79},[52,77257,77259],{"class":54,"line":77258},259,[52,77260,72653],{"class":79},[52,77262,77264],{"class":54,"line":77263},260,[52,77265,77266],{"class":79},"        city: city.value,\n",[52,77268,77270],{"class":54,"line":77269},261,[52,77271,77272],{"class":94},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[52,77274,77276],{"class":54,"line":77275},262,[52,77277,77278],{"class":94},"        \u002F\u002F time: new Date().toDateString()\n",[52,77280,77282,77285,77288],{"class":54,"line":77281},263,[52,77283,77284],{"class":79},"        time: ",[52,77286,77287],{"class":75},"getTime",[52,77289,248],{"class":79},[52,77291,77293],{"class":54,"line":77292},264,[52,77294,67465],{"class":79},[52,77296,77298],{"class":54,"line":77297},265,[52,77299,77300],{"class":94},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[52,77302,77304,77306],{"class":54,"line":77303},266,[52,77305,72718],{"class":75},[52,77307,248],{"class":79},[52,77309,77311,77313,77315,77317,77319],{"class":54,"line":77310},267,[52,77312,72701],{"class":308},[52,77314,3757],{"class":79},[52,77316,72706],{"class":75},[52,77318,15698],{"class":79},[52,77320,77321],{"class":94},"\u002F\u002F重置表单\n",[52,77323,77325],{"class":54,"line":77324},268,[52,77326,77327],{"class":94},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[52,77329,77331,77334,77336,77338,77341,77343,77345,77347,77349],{"class":54,"line":77330},269,[52,77332,77333],{"class":79},"      localStorage.",[52,77335,74304],{"class":75},[52,77337,1216],{"class":79},[52,77339,77340],{"class":62},"'data'",[52,77342,15083],{"class":79},[52,77344,74314],{"class":308},[52,77346,3757],{"class":79},[52,77348,74319],{"class":75},[52,77350,77351],{"class":79},"(arr))\n",[52,77353,77355],{"class":54,"line":77354},270,[52,77356,36111],{"class":79},[52,77358,77360],{"class":54,"line":77359},271,[52,77361,123],{"emptyLinePlaceholder":122},[52,77363,77365],{"class":54,"line":77364},272,[52,77366,77367],{"class":94},"    \u002F\u002F 3.删除业务\n",[52,77369,77371],{"class":54,"line":77370},273,[52,77372,77373],{"class":94},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[52,77375,77377,77379,77381,77383,77385,77387,77389,77391,77393],{"class":54,"line":77376},274,[52,77378,72991],{"class":79},[52,77380,60463],{"class":75},[52,77382,1216],{"class":79},[52,77384,60468],{"class":62},[52,77386,15083],{"class":79},[52,77388,57099],{"class":58},[52,77390,682],{"class":79},[52,77392,3292],{"class":1223},[52,77394,15090],{"class":79},[52,77396,77398],{"class":54,"line":77397},275,[52,77399,77400],{"class":94},"      \u002F\u002F 判断是否点击的是删除按钮\n",[52,77402,77404,77406,77408,77410,77412],{"class":54,"line":77403},276,[52,77405,57130],{"class":58},[52,77407,69684],{"class":79},[52,77409,57136],{"class":58},[52,77411,70906],{"class":62},[52,77413,15090],{"class":79},[52,77415,77417],{"class":54,"line":77416},277,[52,77418,77419],{"class":94},"        \u002F\u002F alert(1)\n",[52,77421,77423],{"class":54,"line":77422},278,[52,77424,77425],{"class":94},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[52,77427,77429],{"class":54,"line":77428},279,[52,77430,77431],{"class":94},"        \u002F\u002F console.log(e.target)\n",[52,77433,77435],{"class":54,"line":77434},280,[52,77436,77437],{"class":94},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[52,77439,77441],{"class":54,"line":77440},281,[52,77442,123],{"emptyLinePlaceholder":122},[52,77444,77446],{"class":54,"line":77445},282,[52,77447,77448],{"class":94},"        \u002F\u002F 确认框，确然是否真的要删除\n",[52,77450,77452],{"class":54,"line":77451},283,[52,77453,77454],{"class":94},"        \u002F\u002F confirm()为确认框\n",[52,77456,77458],{"class":54,"line":77457},284,[52,77459,77460],{"class":94},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[52,77462,77464,77466,77468,77471,77473,77476],{"class":54,"line":77463},285,[52,77465,5497],{"class":58},[52,77467,682],{"class":79},[52,77469,77470],{"class":75},"confirm",[52,77472,1216],{"class":79},[52,77474,77475],{"class":62},"'您确定要删除这条数据吗？'",[52,77477,77478],{"class":79},")) {\n",[52,77480,77482,77485,77487,77489,77491],{"class":54,"line":77481},286,[52,77483,77484],{"class":79},"          arr.",[52,77486,60660],{"class":75},[52,77488,73044],{"class":79},[52,77490,629],{"class":308},[52,77492,708],{"class":79},[52,77494,77496],{"class":54,"line":77495},287,[52,77497,77498],{"class":94},"          \u002F\u002F 3.4 重新渲染页面\n",[52,77500,77502,77505],{"class":54,"line":77501},288,[52,77503,77504],{"class":75},"          render",[52,77506,248],{"class":79},[52,77508,77510],{"class":54,"line":77509},289,[52,77511,77512],{"class":94},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[52,77514,77516,77519,77521,77523,77525,77527,77529,77531,77533],{"class":54,"line":77515},290,[52,77517,77518],{"class":79},"          localStorage.",[52,77520,74304],{"class":75},[52,77522,1216],{"class":79},[52,77524,77340],{"class":62},[52,77526,15083],{"class":79},[52,77528,74314],{"class":308},[52,77530,3757],{"class":79},[52,77532,74319],{"class":75},[52,77534,77351],{"class":79},[52,77536,77538],{"class":54,"line":77537},291,[52,77539,2039],{"class":79},[52,77541,77543],{"class":54,"line":77542},292,[52,77544,55048],{"class":79},[52,77546,77548],{"class":54,"line":77547},293,[52,77549,123],{"emptyLinePlaceholder":122},[52,77551,77553],{"class":54,"line":77552},294,[52,77554,36111],{"class":79},[52,77556,77558],{"class":54,"line":77557},295,[52,77559,123],{"emptyLinePlaceholder":122},[52,77561,77563,77565,77567],{"class":54,"line":77562},296,[52,77564,55067],{"class":79},[52,77566,54463],{"class":53950},[52,77568,53957],{"class":79},[52,77570,77572,77574,77576],{"class":54,"line":77571},297,[52,77573,54435],{"class":79},[52,77575,54450],{"class":53950},[52,77577,53957],{"class":79},[52,77579,77581],{"class":54,"line":77580},298,[52,77582,123],{"emptyLinePlaceholder":122},[52,77584,77586,77588,77590],{"class":54,"line":77585},299,[52,77587,54435],{"class":79},[52,77589,53285],{"class":53950},[52,77591,53957],{"class":79},[18,77593,77595],{"id":77594},"_36-正则表达式","3.6 正则表达式",[14,77597,77598],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,77600,77601],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,77603,77604],{},"正则表达式的作用：",[29,77606,77607,77614,77620],{},[32,77608,77609,77610,77613],{},"表单验证（ ",[2389,77611,77612],{},"匹配"," ）",[32,77615,77616,77617,77613],{},"过滤敏感词（ ",[2389,77618,77619],{},"替换",[32,77621,77622,77623,77613],{},"字符串中提取我们想要的部分（ ",[2389,77624,77625],{},"提取",[3195,77627,77629],{"id":77628},"_361-语法","3.6.1 语法",[14,77631,77632],{},"正则表达式使用步骤：",[1696,77634,77635,77638],{},[32,77636,77637],{},"定义规则",[32,77639,77640],{},"查找是否匹配",[14,77642,77643],{},"正则表达式里边不需要写引号",[14,77645,77646],{},[4509,77647],{"alt":47,"src":77648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,77650,77651],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,77653,77654],{},"reg.test(str)",[14,77656,77657],{},[4509,77658],{"alt":47,"src":77659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,77661,77662],{},[4509,77663],{"alt":47,"src":77664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[3195,77666,77668],{"id":77667},"_362-元字符","3.6.2 元字符",[1696,77670,77671,77674,77677,77680,77687],{},[32,77672,77673],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[32,77675,77676],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[32,77678,77679],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[32,77681,77682,77683],{},"正则验证工具：",[3451,77684,77685],{"href":77685,"rel":77686},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[26514],[32,77688,77689],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[24646,77691,77693],{"id":77692},"_3621-边界符","3.6.2.1 边界符",[14,77695,77696],{},[4509,77697],{"alt":47,"src":77698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,77700,77701],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,77703,77704],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,77706,77707],{},"只匹配一次",[14,77709,77710],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[24646,77712,77714],{"id":77713},"_3622-量词","3.6.2.2 量词",[14,77716,77717],{},[4509,77718],{"alt":47,"src":77719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,77721,77722],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[24646,77724,77726],{"id":77725},"_3623-元字符","3.6.2.3 元字符",[14,77728,77729],{},[4509,77730],{"alt":47,"src":77731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,77733,77734],{},"匹配的是a或b或c []只选一个",[14,77736,77737],{},[4509,77738],{"alt":47,"src":77739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,77741,77742],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,77744,77745],{},[4509,77746],{"alt":47,"src":77747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,77749,77750],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,77752,77753],{},[4509,77754],{"alt":47,"src":77755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[42,77757,77759],{"className":53283,"code":77758,"language":53285,"meta":47,"style":47},"\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",[49,77760,77761,77771,77785,77789,77797,77811,77831,77843,77851,77855,77863,77871,77876,77907,77934,77962,77966,77971,77999,78030,78035,78040,78071,78103,78135,78139,78144,78175,78205,78235,78239,78244,78275,78306,78336,78366,78370,78375,78408,78412,78417,78448,78479,78483,78488,78519,78549,78580,78584,78589,78621,78652,78683,78710,78741,78773,78806,78837,78868,78900,78931,78939,78947,78951],{"__ignoreMap":47},[52,77762,77763,77765,77767,77769],{"class":54,"line":55},[52,77764,53947],{"class":79},[52,77766,53951],{"class":53950},[52,77768,53954],{"class":75},[52,77770,53957],{"class":79},[52,77772,77773,77775,77777,77779,77781,77783],{"class":54,"line":66},[52,77774,698],{"class":79},[52,77776,53285],{"class":53950},[52,77778,53966],{"class":75},[52,77780,292],{"class":79},[52,77782,53971],{"class":62},[52,77784,53957],{"class":79},[52,77786,77787],{"class":54,"line":83},[52,77788,123],{"emptyLinePlaceholder":122},[52,77790,77791,77793,77795],{"class":54,"line":91},[52,77792,698],{"class":79},[52,77794,53984],{"class":53950},[52,77796,53957],{"class":79},[52,77798,77799,77801,77803,77805,77807,77809],{"class":54,"line":98},[52,77800,54794],{"class":79},[52,77802,53994],{"class":53950},[52,77804,53997],{"class":75},[52,77806,292],{"class":79},[52,77808,54002],{"class":62},[52,77810,53957],{"class":79},[52,77812,77813,77815,77817,77819,77821,77823,77825,77827,77829],{"class":54,"line":107},[52,77814,54794],{"class":79},[52,77816,53994],{"class":53950},[52,77818,17568],{"class":75},[52,77820,292],{"class":79},[52,77822,54041],{"class":62},[52,77824,54021],{"class":75},[52,77826,292],{"class":79},[52,77828,54048],{"class":62},[52,77830,53957],{"class":79},[52,77832,77833,77835,77837,77839,77841],{"class":54,"line":113},[52,77834,54794],{"class":79},[52,77836,54057],{"class":53950},[52,77838,54060],{"class":79},[52,77840,54057],{"class":53950},[52,77842,53957],{"class":79},[52,77844,77845,77847,77849],{"class":54,"line":119},[52,77846,54435],{"class":79},[52,77848,53984],{"class":53950},[52,77850,53957],{"class":79},[52,77852,77853],{"class":54,"line":126},[52,77854,123],{"emptyLinePlaceholder":122},[52,77856,77857,77859,77861],{"class":54,"line":132},[52,77858,698],{"class":79},[52,77860,54450],{"class":53950},[52,77862,53957],{"class":79},[52,77864,77865,77867,77869],{"class":54,"line":138},[52,77866,54794],{"class":79},[52,77868,54463],{"class":53950},[52,77870,53957],{"class":79},[52,77872,77873],{"class":54,"line":144},[52,77874,77875],{"class":94},"    \u002F\u002F 元字符中\n",[52,77877,77878,77880,77882,77884,77886,77889,77891,77893,77896,77898,77901,77904],{"class":54,"line":153},[52,77879,76403],{"class":79},[52,77881,60897],{"class":75},[52,77883,1216],{"class":79},[52,77885,2340],{"class":62},[52,77887,77888],{"class":50627},"哈",[52,77890,2340],{"class":62},[52,77892,3757],{"class":79},[52,77894,77895],{"class":75},"test",[52,77897,1216],{"class":79},[52,77899,77900],{"class":62},"'哈'",[52,77902,77903],{"class":79},"))  ",[52,77905,77906],{"class":94},"\u002F\u002Ftrue\n",[52,77908,77909,77911,77913,77915,77917,77919,77921,77923,77925,77927,77930,77932],{"class":54,"line":159},[52,77910,76403],{"class":79},[52,77912,60897],{"class":75},[52,77914,1216],{"class":79},[52,77916,2340],{"class":62},[52,77918,77888],{"class":50627},[52,77920,2340],{"class":62},[52,77922,3757],{"class":79},[52,77924,77895],{"class":75},[52,77926,1216],{"class":79},[52,77928,77929],{"class":62},"'哈哈'",[52,77931,77903],{"class":79},[52,77933,77906],{"class":94},[52,77935,77936,77938,77940,77942,77944,77946,77948,77950,77952,77954,77957,77960],{"class":54,"line":167},[52,77937,76403],{"class":79},[52,77939,60897],{"class":75},[52,77941,1216],{"class":79},[52,77943,2340],{"class":62},[52,77945,77888],{"class":50627},[52,77947,2340],{"class":62},[52,77949,3757],{"class":79},[52,77951,77895],{"class":75},[52,77953,1216],{"class":79},[52,77955,77956],{"class":62},"'二哈'",[52,77958,77959],{"class":79},"))   ",[52,77961,77906],{"class":94},[52,77963,77964],{"class":54,"line":173},[52,77965,123],{"emptyLinePlaceholder":122},[52,77967,77968],{"class":54,"line":181},[52,77969,77970],{"class":94},"    \u002F\u002F 1.边界符\n",[52,77972,77973,77975,77977,77979,77981,77983,77985,77987,77989,77991,77993,77995,77997],{"class":54,"line":186},[52,77974,76403],{"class":79},[52,77976,60897],{"class":75},[52,77978,1216],{"class":79},[52,77980,2340],{"class":62},[52,77982,4151],{"class":58},[52,77984,77888],{"class":50627},[52,77986,2340],{"class":62},[52,77988,3757],{"class":79},[52,77990,77895],{"class":75},[52,77992,1216],{"class":79},[52,77994,77900],{"class":62},[52,77996,77903],{"class":79},[52,77998,77906],{"class":94},[52,78000,78001,78003,78005,78007,78009,78011,78013,78015,78017,78019,78021,78023,78025,78027],{"class":54,"line":191},[52,78002,76403],{"class":79},[52,78004,60897],{"class":75},[52,78006,1216],{"class":79},[52,78008,2340],{"class":62},[52,78010,4151],{"class":58},[52,78012,77888],{"class":50627},[52,78014,3513],{"class":58},[52,78016,2340],{"class":62},[52,78018,3757],{"class":79},[52,78020,77895],{"class":75},[52,78022,1216],{"class":79},[52,78024,77929],{"class":62},[52,78026,77903],{"class":79},[52,78028,78029],{"class":94},"\u002F\u002Ffalse\n",[52,78031,78032],{"class":54,"line":196},[52,78033,78034],{"class":94},"    \u002F\u002F 2.量词\n",[52,78036,78037],{"class":54,"line":201},[52,78038,78039],{"class":94},"    \u002F\u002F 量词 * 类似于 >= 0\n",[52,78041,78042,78044,78046,78048,78050,78052,78054,78057,78059,78061,78063,78065,78067,78069],{"class":54,"line":206},[52,78043,76403],{"class":79},[52,78045,60897],{"class":75},[52,78047,1216],{"class":79},[52,78049,2340],{"class":62},[52,78051,4151],{"class":58},[52,78053,77888],{"class":50627},[52,78055,78056],{"class":58},"*$",[52,78058,2340],{"class":62},[52,78060,3757],{"class":79},[52,78062,77895],{"class":75},[52,78064,1216],{"class":79},[52,78066,77929],{"class":62},[52,78068,77903],{"class":79},[52,78070,77906],{"class":94},[52,78072,78073,78075,78077,78079,78081,78083,78085,78087,78089,78091,78093,78095,78098,78100],{"class":54,"line":211},[52,78074,76403],{"class":79},[52,78076,60897],{"class":75},[52,78078,1216],{"class":79},[52,78080,2340],{"class":62},[52,78082,4151],{"class":58},[52,78084,77888],{"class":50627},[52,78086,78056],{"class":58},[52,78088,2340],{"class":62},[52,78090,3757],{"class":79},[52,78092,77895],{"class":75},[52,78094,1216],{"class":79},[52,78096,78097],{"class":62},"'二哈好傻'",[52,78099,77903],{"class":79},[52,78101,78102],{"class":94},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[52,78104,78105,78107,78109,78111,78113,78115,78117,78119,78121,78123,78125,78127,78130,78132],{"class":54,"line":218},[52,78106,76403],{"class":79},[52,78108,60897],{"class":75},[52,78110,1216],{"class":79},[52,78112,2340],{"class":62},[52,78114,4151],{"class":58},[52,78116,77888],{"class":50627},[52,78118,78056],{"class":58},[52,78120,2340],{"class":62},[52,78122,3757],{"class":79},[52,78124,77895],{"class":75},[52,78126,1216],{"class":79},[52,78128,78129],{"class":62},"'哈好哈'",[52,78131,77959],{"class":79},[52,78133,78134],{"class":94},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[52,78136,78137],{"class":54,"line":223},[52,78138,123],{"emptyLinePlaceholder":122},[52,78140,78141],{"class":54,"line":230},[52,78142,78143],{"class":94},"    \u002F\u002F +类似于>=1\n",[52,78145,78146,78148,78150,78152,78154,78156,78158,78161,78163,78165,78167,78169,78171,78173],{"class":54,"line":239},[52,78147,76403],{"class":79},[52,78149,60897],{"class":75},[52,78151,1216],{"class":79},[52,78153,2340],{"class":62},[52,78155,4151],{"class":58},[52,78157,77888],{"class":50627},[52,78159,78160],{"class":58},"+$",[52,78162,2340],{"class":62},[52,78164,3757],{"class":79},[52,78166,77895],{"class":75},[52,78168,1216],{"class":79},[52,78170,77929],{"class":62},[52,78172,77903],{"class":79},[52,78174,77906],{"class":94},[52,78176,78177,78179,78181,78183,78185,78187,78189,78191,78193,78195,78197,78199,78201,78203],{"class":54,"line":251},[52,78178,76403],{"class":79},[52,78180,60897],{"class":75},[52,78182,1216],{"class":79},[52,78184,2340],{"class":62},[52,78186,4151],{"class":58},[52,78188,77888],{"class":50627},[52,78190,78160],{"class":58},[52,78192,2340],{"class":62},[52,78194,3757],{"class":79},[52,78196,77895],{"class":75},[52,78198,1216],{"class":79},[52,78200,78097],{"class":62},[52,78202,77903],{"class":79},[52,78204,78102],{"class":94},[52,78206,78207,78209,78211,78213,78215,78217,78219,78221,78223,78225,78227,78229,78231,78233],{"class":54,"line":256},[52,78208,76403],{"class":79},[52,78210,60897],{"class":75},[52,78212,1216],{"class":79},[52,78214,2340],{"class":62},[52,78216,4151],{"class":58},[52,78218,77888],{"class":50627},[52,78220,78160],{"class":58},[52,78222,2340],{"class":62},[52,78224,3757],{"class":79},[52,78226,77895],{"class":75},[52,78228,1216],{"class":79},[52,78230,78129],{"class":62},[52,78232,77959],{"class":79},[52,78234,78029],{"class":94},[52,78236,78237],{"class":54,"line":262},[52,78238,123],{"emptyLinePlaceholder":122},[52,78240,78241],{"class":54,"line":268},[52,78242,78243],{"class":94},"    \u002F\u002F ?类似于0次或一次\n",[52,78245,78246,78248,78250,78252,78254,78256,78259,78261,78263,78265,78267,78269,78271,78273],{"class":54,"line":280},[52,78247,76403],{"class":79},[52,78249,60897],{"class":75},[52,78251,1216],{"class":79},[52,78253,2340],{"class":62},[52,78255,4151],{"class":58},[52,78257,78258],{"class":50627},"哈？",[52,78260,3513],{"class":58},[52,78262,2340],{"class":62},[52,78264,3757],{"class":79},[52,78266,77895],{"class":75},[52,78268,1216],{"class":79},[52,78270,76878],{"class":62},[52,78272,77959],{"class":79},[52,78274,77906],{"class":94},[52,78276,78277,78279,78281,78283,78285,78287,78289,78292,78294,78296,78298,78300,78302,78304],{"class":54,"line":286},[52,78278,76403],{"class":79},[52,78280,60897],{"class":75},[52,78282,1216],{"class":79},[52,78284,2340],{"class":62},[52,78286,4151],{"class":58},[52,78288,77888],{"class":50627},[52,78290,78291],{"class":58},"?$",[52,78293,2340],{"class":62},[52,78295,3757],{"class":79},[52,78297,77895],{"class":75},[52,78299,1216],{"class":79},[52,78301,77929],{"class":62},[52,78303,77903],{"class":79},[52,78305,78029],{"class":94},[52,78307,78308,78310,78312,78314,78316,78318,78320,78322,78324,78326,78328,78330,78332,78334],{"class":54,"line":300},[52,78309,76403],{"class":79},[52,78311,60897],{"class":75},[52,78313,1216],{"class":79},[52,78315,2340],{"class":62},[52,78317,4151],{"class":58},[52,78319,77888],{"class":50627},[52,78321,78291],{"class":58},[52,78323,2340],{"class":62},[52,78325,3757],{"class":79},[52,78327,77895],{"class":75},[52,78329,1216],{"class":79},[52,78331,78097],{"class":62},[52,78333,77903],{"class":79},[52,78335,78102],{"class":94},[52,78337,78338,78340,78342,78344,78346,78348,78350,78352,78354,78356,78358,78360,78362,78364],{"class":54,"line":314},[52,78339,76403],{"class":79},[52,78341,60897],{"class":75},[52,78343,1216],{"class":79},[52,78345,2340],{"class":62},[52,78347,4151],{"class":58},[52,78349,77888],{"class":50627},[52,78351,78291],{"class":58},[52,78353,2340],{"class":62},[52,78355,3757],{"class":79},[52,78357,77895],{"class":75},[52,78359,1216],{"class":79},[52,78361,78129],{"class":62},[52,78363,77903],{"class":79},[52,78365,78029],{"class":94},[52,78367,78368],{"class":54,"line":327},[52,78369,123],{"emptyLinePlaceholder":122},[52,78371,78372],{"class":54,"line":333},[52,78373,78374],{"class":94},"    \u002F\u002F {n}写几，就必须出现几次\n",[52,78376,78377,78379,78381,78383,78385,78387,78389,78392,78394,78396,78398,78400,78403,78406],{"class":54,"line":360},[52,78378,76403],{"class":79},[52,78380,60897],{"class":75},[52,78382,1216],{"class":79},[52,78384,2340],{"class":62},[52,78386,4151],{"class":58},[52,78388,77888],{"class":50627},[52,78390,78391],{"class":58},"{4}$",[52,78393,2340],{"class":62},[52,78395,3757],{"class":79},[52,78397,77895],{"class":75},[52,78399,1216],{"class":79},[52,78401,78402],{"class":62},"'哈哈哈哈'",[52,78404,78405],{"class":79},")) ",[52,78407,77906],{"class":94},[52,78409,78410],{"class":54,"line":365},[52,78411,123],{"emptyLinePlaceholder":122},[52,78413,78414],{"class":54,"line":371},[52,78415,78416],{"class":94},"    \u002F\u002F {n,}大于等于n次\n",[52,78418,78419,78421,78423,78425,78427,78429,78431,78434,78436,78438,78440,78442,78444,78446],{"class":54,"line":400},[52,78420,76403],{"class":79},[52,78422,60897],{"class":75},[52,78424,1216],{"class":79},[52,78426,2340],{"class":62},[52,78428,4151],{"class":58},[52,78430,77888],{"class":50627},[52,78432,78433],{"class":58},"{4,}$",[52,78435,2340],{"class":62},[52,78437,3757],{"class":79},[52,78439,77895],{"class":75},[52,78441,1216],{"class":79},[52,78443,78402],{"class":62},[52,78445,78405],{"class":79},[52,78447,77906],{"class":94},[52,78449,78450,78452,78454,78456,78458,78460,78462,78464,78466,78468,78470,78472,78475,78477],{"class":54,"line":405},[52,78451,76403],{"class":79},[52,78453,60897],{"class":75},[52,78455,1216],{"class":79},[52,78457,2340],{"class":62},[52,78459,4151],{"class":58},[52,78461,77888],{"class":50627},[52,78463,78433],{"class":58},[52,78465,2340],{"class":62},[52,78467,3757],{"class":79},[52,78469,77895],{"class":75},[52,78471,1216],{"class":79},[52,78473,78474],{"class":62},"'哈哈哈哈哈'",[52,78476,78405],{"class":79},[52,78478,77906],{"class":94},[52,78480,78481],{"class":54,"line":411},[52,78482,123],{"emptyLinePlaceholder":122},[52,78484,78485],{"class":54,"line":424},[52,78486,78487],{"class":94},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[52,78489,78490,78492,78494,78496,78498,78500,78502,78505,78507,78509,78511,78513,78515,78517],{"class":54,"line":436},[52,78491,76403],{"class":79},[52,78493,60897],{"class":75},[52,78495,1216],{"class":79},[52,78497,2340],{"class":62},[52,78499,4151],{"class":58},[52,78501,77888],{"class":50627},[52,78503,78504],{"class":58},"{4,6}$",[52,78506,2340],{"class":62},[52,78508,3757],{"class":79},[52,78510,77895],{"class":75},[52,78512,1216],{"class":79},[52,78514,78402],{"class":62},[52,78516,78405],{"class":79},[52,78518,77906],{"class":94},[52,78520,78521,78523,78525,78527,78529,78531,78533,78535,78537,78539,78541,78543,78545,78547],{"class":54,"line":449},[52,78522,76403],{"class":79},[52,78524,60897],{"class":75},[52,78526,1216],{"class":79},[52,78528,2340],{"class":62},[52,78530,4151],{"class":58},[52,78532,77888],{"class":50627},[52,78534,78504],{"class":58},[52,78536,2340],{"class":62},[52,78538,3757],{"class":79},[52,78540,77895],{"class":75},[52,78542,1216],{"class":79},[52,78544,78474],{"class":62},[52,78546,78405],{"class":79},[52,78548,77906],{"class":94},[52,78550,78551,78553,78555,78557,78559,78561,78563,78565,78567,78569,78571,78573,78576,78578],{"class":54,"line":2160},[52,78552,76403],{"class":79},[52,78554,60897],{"class":75},[52,78556,1216],{"class":79},[52,78558,2340],{"class":62},[52,78560,4151],{"class":58},[52,78562,77888],{"class":50627},[52,78564,78504],{"class":58},[52,78566,2340],{"class":62},[52,78568,3757],{"class":79},[52,78570,77895],{"class":75},[52,78572,1216],{"class":79},[52,78574,78575],{"class":62},"'哈哈哈哈哈哈哈'",[52,78577,78405],{"class":79},[52,78579,78029],{"class":94},[52,78581,78582],{"class":54,"line":2186},[52,78583,123],{"emptyLinePlaceholder":122},[52,78585,78586],{"class":54,"line":2209},[52,78587,78588],{"class":94},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[52,78590,78591,78593,78595,78597,78599,78601,78604,78606,78608,78610,78612,78614,78617,78619],{"class":54,"line":2233},[52,78592,76403],{"class":79},[52,78594,60897],{"class":75},[52,78596,1216],{"class":79},[52,78598,2340],{"class":62},[52,78600,4151],{"class":58},[52,78602,78603],{"class":308},"[abc]",[52,78605,3513],{"class":58},[52,78607,2340],{"class":62},[52,78609,3757],{"class":79},[52,78611,77895],{"class":75},[52,78613,1216],{"class":79},[52,78615,78616],{"class":62},"'a'",[52,78618,77903],{"class":79},[52,78620,77906],{"class":94},[52,78622,78623,78625,78627,78629,78631,78633,78635,78637,78639,78641,78643,78645,78648,78650],{"class":54,"line":2238},[52,78624,76403],{"class":79},[52,78626,60897],{"class":75},[52,78628,1216],{"class":79},[52,78630,2340],{"class":62},[52,78632,4151],{"class":58},[52,78634,78603],{"class":308},[52,78636,3513],{"class":58},[52,78638,2340],{"class":62},[52,78640,3757],{"class":79},[52,78642,77895],{"class":75},[52,78644,1216],{"class":79},[52,78646,78647],{"class":62},"'b'",[52,78649,77903],{"class":79},[52,78651,77906],{"class":94},[52,78653,78654,78656,78658,78660,78662,78664,78666,78668,78670,78672,78674,78676,78679,78681],{"class":54,"line":2243},[52,78655,76403],{"class":79},[52,78657,60897],{"class":75},[52,78659,1216],{"class":79},[52,78661,2340],{"class":62},[52,78663,4151],{"class":58},[52,78665,78603],{"class":308},[52,78667,3513],{"class":58},[52,78669,2340],{"class":62},[52,78671,3757],{"class":79},[52,78673,77895],{"class":75},[52,78675,1216],{"class":79},[52,78677,78678],{"class":62},"'c'",[52,78680,77903],{"class":79},[52,78682,77906],{"class":94},[52,78684,78685,78687,78689,78691,78693,78695,78697,78699,78701,78703,78706,78708],{"class":54,"line":2248},[52,78686,76403],{"class":79},[52,78688,60897],{"class":75},[52,78690,1216],{"class":79},[52,78692,2340],{"class":62},[52,78694,78603],{"class":308},[52,78696,2340],{"class":62},[52,78698,3757],{"class":79},[52,78700,77895],{"class":75},[52,78702,1216],{"class":79},[52,78704,78705],{"class":62},"'ab'",[52,78707,77903],{"class":79},[52,78709,77906],{"class":94},[52,78711,78712,78714,78716,78718,78720,78722,78724,78726,78728,78730,78732,78734,78736,78738],{"class":54,"line":2257},[52,78713,76403],{"class":79},[52,78715,60897],{"class":75},[52,78717,1216],{"class":79},[52,78719,2340],{"class":62},[52,78721,4151],{"class":58},[52,78723,78603],{"class":308},[52,78725,3513],{"class":58},[52,78727,2340],{"class":62},[52,78729,3757],{"class":79},[52,78731,77895],{"class":75},[52,78733,1216],{"class":79},[52,78735,78705],{"class":62},[52,78737,77903],{"class":79},[52,78739,78740],{"class":94},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[52,78742,78743,78745,78747,78749,78751,78753,78755,78758,78760,78762,78764,78766,78768,78770],{"class":54,"line":2262},[52,78744,76403],{"class":79},[52,78746,60897],{"class":75},[52,78748,1216],{"class":79},[52,78750,2340],{"class":62},[52,78752,4151],{"class":58},[52,78754,78603],{"class":308},[52,78756,78757],{"class":58},"{2}$",[52,78759,2340],{"class":62},[52,78761,3757],{"class":79},[52,78763,77895],{"class":75},[52,78765,1216],{"class":79},[52,78767,78705],{"class":62},[52,78769,77903],{"class":79},[52,78771,78772],{"class":94},"\u002F\u002Ftrue   可以选两个\n",[52,78774,78775,78777,78779,78781,78783,78785,78788,78790,78792,78794,78796,78798,78801,78803],{"class":54,"line":2268},[52,78776,76403],{"class":79},[52,78778,60897],{"class":75},[52,78780,1216],{"class":79},[52,78782,2340],{"class":62},[52,78784,4151],{"class":58},[52,78786,78787],{"class":308},"[a-z]",[52,78789,3513],{"class":58},[52,78791,2340],{"class":62},[52,78793,3757],{"class":79},[52,78795,77895],{"class":75},[52,78797,1216],{"class":79},[52,78799,78800],{"class":62},"'p'",[52,78802,77959],{"class":79},[52,78804,78805],{"class":94},"\u002F\u002Ftrue   依然只能选一个\n",[52,78807,78808,78810,78812,78814,78816,78818,78821,78823,78825,78827,78829,78831,78833,78835],{"class":54,"line":2297},[52,78809,76403],{"class":79},[52,78811,60897],{"class":75},[52,78813,1216],{"class":79},[52,78815,2340],{"class":62},[52,78817,4151],{"class":58},[52,78819,78820],{"class":308},"[A-Z]",[52,78822,3513],{"class":58},[52,78824,2340],{"class":62},[52,78826,3757],{"class":79},[52,78828,77895],{"class":75},[52,78830,1216],{"class":79},[52,78832,78800],{"class":62},[52,78834,77959],{"class":79},[52,78836,78029],{"class":94},[52,78838,78839,78841,78843,78845,78847,78849,78851,78853,78855,78857,78859,78861,78864,78866],{"class":54,"line":2303},[52,78840,76403],{"class":79},[52,78842,60897],{"class":75},[52,78844,1216],{"class":79},[52,78846,2340],{"class":62},[52,78848,4151],{"class":58},[52,78850,78820],{"class":308},[52,78852,3513],{"class":58},[52,78854,2340],{"class":62},[52,78856,3757],{"class":79},[52,78858,77895],{"class":75},[52,78860,1216],{"class":79},[52,78862,78863],{"class":62},"'P'",[52,78865,77959],{"class":79},[52,78867,77906],{"class":94},[52,78869,78870,78872,78874,78876,78878,78880,78883,78885,78887,78889,78891,78893,78896,78898],{"class":54,"line":2318},[52,78871,76403],{"class":79},[52,78873,60897],{"class":75},[52,78875,1216],{"class":79},[52,78877,2340],{"class":62},[52,78879,4151],{"class":58},[52,78881,78882],{"class":308},"[0-9]",[52,78884,3513],{"class":58},[52,78886,2340],{"class":62},[52,78888,3757],{"class":79},[52,78890,77895],{"class":75},[52,78892,1216],{"class":79},[52,78894,78895],{"class":62},"'0'",[52,78897,77959],{"class":79},[52,78899,77906],{"class":94},[52,78901,78902,78904,78906,78908,78910,78912,78915,78917,78919,78921,78923,78925,78927,78929],{"class":54,"line":2324},[52,78903,76403],{"class":79},[52,78905,60897],{"class":75},[52,78907,1216],{"class":79},[52,78909,2340],{"class":62},[52,78911,4151],{"class":58},[52,78913,78914],{"class":308},"[a-zA-Z0-9]",[52,78916,3513],{"class":58},[52,78918,2340],{"class":62},[52,78920,3757],{"class":79},[52,78922,77895],{"class":75},[52,78924,1216],{"class":79},[52,78926,78800],{"class":62},[52,78928,77903],{"class":79},[52,78930,77906],{"class":94},[52,78932,78933,78935,78937],{"class":54,"line":2353},[52,78934,55067],{"class":79},[52,78936,54463],{"class":53950},[52,78938,53957],{"class":79},[52,78940,78941,78943,78945],{"class":54,"line":2362},[52,78942,54435],{"class":79},[52,78944,54450],{"class":53950},[52,78946,53957],{"class":79},[52,78948,78949],{"class":54,"line":2368},[52,78950,123],{"emptyLinePlaceholder":122},[52,78952,78953,78955,78957],{"class":54,"line":2376},[52,78954,54435],{"class":79},[52,78956,53285],{"class":53950},[52,78958,53957],{"class":79},[24646,78960,78962],{"id":78961},"_3624-修饰符","3.6.2.4 修饰符",[14,78964,78965],{},[4509,78966],{"alt":47,"src":78967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,78969,78970],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,78972,78973],{},[4509,78974],{"alt":47,"src":78975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[42,78977,78979],{"className":53283,"code":78978,"language":53285,"meta":47,"style":47},"\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",[49,78980,78981,78991,79005,79013,79027,79047,79059,79067,79075,79083,79115,79146,79151,79183,79194,79227,79236,79244,79252],{"__ignoreMap":47},[52,78982,78983,78985,78987,78989],{"class":54,"line":55},[52,78984,53947],{"class":79},[52,78986,53951],{"class":53950},[52,78988,53954],{"class":75},[52,78990,53957],{"class":79},[52,78992,78993,78995,78997,78999,79001,79003],{"class":54,"line":66},[52,78994,698],{"class":79},[52,78996,53285],{"class":53950},[52,78998,53966],{"class":75},[52,79000,292],{"class":79},[52,79002,53971],{"class":62},[52,79004,53957],{"class":79},[52,79006,79007,79009,79011],{"class":54,"line":83},[52,79008,698],{"class":79},[52,79010,53984],{"class":53950},[52,79012,53957],{"class":79},[52,79014,79015,79017,79019,79021,79023,79025],{"class":54,"line":91},[52,79016,54794],{"class":79},[52,79018,53994],{"class":53950},[52,79020,53997],{"class":75},[52,79022,292],{"class":79},[52,79024,54002],{"class":62},[52,79026,53957],{"class":79},[52,79028,79029,79031,79033,79035,79037,79039,79041,79043,79045],{"class":54,"line":98},[52,79030,54794],{"class":79},[52,79032,53994],{"class":53950},[52,79034,17568],{"class":75},[52,79036,292],{"class":79},[52,79038,54041],{"class":62},[52,79040,54021],{"class":75},[52,79042,292],{"class":79},[52,79044,54048],{"class":62},[52,79046,53957],{"class":79},[52,79048,79049,79051,79053,79055,79057],{"class":54,"line":107},[52,79050,54794],{"class":79},[52,79052,54057],{"class":53950},[52,79054,54060],{"class":79},[52,79056,54057],{"class":53950},[52,79058,53957],{"class":79},[52,79060,79061,79063,79065],{"class":54,"line":113},[52,79062,54435],{"class":79},[52,79064,53984],{"class":53950},[52,79066,53957],{"class":79},[52,79068,79069,79071,79073],{"class":54,"line":119},[52,79070,698],{"class":79},[52,79072,54450],{"class":53950},[52,79074,53957],{"class":79},[52,79076,79077,79079,79081],{"class":54,"line":126},[52,79078,54794],{"class":79},[52,79080,54463],{"class":53950},[52,79082,53957],{"class":79},[52,79084,79085,79087,79089,79091,79093,79095,79098,79100,79102,79104,79106,79108,79111,79113],{"class":54,"line":132},[52,79086,76403],{"class":79},[52,79088,60897],{"class":75},[52,79090,1216],{"class":79},[52,79092,2340],{"class":62},[52,79094,4151],{"class":58},[52,79096,79097],{"class":50627},"java",[52,79099,3513],{"class":58},[52,79101,2340],{"class":62},[52,79103,3757],{"class":79},[52,79105,77895],{"class":75},[52,79107,1216],{"class":79},[52,79109,79110],{"class":62},"'java'",[52,79112,78405],{"class":79},[52,79114,77906],{"class":94},[52,79116,79117,79119,79121,79123,79125,79127,79129,79131,79133,79135,79137,79139,79142,79144],{"class":54,"line":138},[52,79118,76403],{"class":79},[52,79120,60897],{"class":75},[52,79122,1216],{"class":79},[52,79124,2340],{"class":62},[52,79126,4151],{"class":58},[52,79128,79097],{"class":50627},[52,79130,3513],{"class":58},[52,79132,2340],{"class":62},[52,79134,3757],{"class":79},[52,79136,77895],{"class":75},[52,79138,1216],{"class":79},[52,79140,79141],{"class":62},"'Java'",[52,79143,78405],{"class":79},[52,79145,78029],{"class":94},[52,79147,79148],{"class":54,"line":144},[52,79149,79150],{"class":94},"    \u002F\u002F 不区分大小写、\n",[52,79152,79153,79155,79157,79159,79161,79163,79165,79167,79169,79171,79173,79175,79177,79179,79181],{"class":54,"line":153},[52,79154,76403],{"class":79},[52,79156,60897],{"class":75},[52,79158,1216],{"class":79},[52,79160,2340],{"class":62},[52,79162,4151],{"class":58},[52,79164,79097],{"class":50627},[52,79166,3513],{"class":58},[52,79168,2340],{"class":62},[52,79170,3644],{"class":58},[52,79172,3757],{"class":79},[52,79174,77895],{"class":75},[52,79176,1216],{"class":79},[52,79178,79141],{"class":62},[52,79180,78405],{"class":79},[52,79182,77906],{"class":94},[52,79184,79185,79187,79189,79191],{"class":54,"line":159},[52,79186,13869],{"class":58},[52,79188,76569],{"class":308},[52,79190,16212],{"class":58},[52,79192,79193],{"class":62}," 'java是一门编程语言，学完java工资很高'\n",[52,79195,79196,79198,79201,79203,79206,79209,79211,79213,79215,79217,79220,79222,79225],{"class":54,"line":167},[52,79197,13869],{"class":58},[52,79199,79200],{"class":308}," result",[52,79202,16212],{"class":58},[52,79204,79205],{"class":79}," str.",[52,79207,79208],{"class":75},"replace",[52,79210,1216],{"class":79},[52,79212,2340],{"class":62},[52,79214,79097],{"class":50627},[52,79216,2340],{"class":62},[52,79218,79219],{"class":58},"ig",[52,79221,15083],{"class":79},[52,79223,79224],{"class":62},"'前端'",[52,79226,708],{"class":79},[52,79228,79229,79231,79233],{"class":54,"line":173},[52,79230,76403],{"class":79},[52,79232,60897],{"class":75},[52,79234,79235],{"class":79},"(result)\n",[52,79237,79238,79240,79242],{"class":54,"line":181},[52,79239,55067],{"class":79},[52,79241,54463],{"class":53950},[52,79243,53957],{"class":79},[52,79245,79246,79248,79250],{"class":54,"line":186},[52,79247,54435],{"class":79},[52,79249,54450],{"class":53950},[52,79251,53957],{"class":79},[52,79253,79254,79256,79258],{"class":54,"line":191},[52,79255,54435],{"class":79},[52,79257,53285],{"class":53950},[52,79259,53957],{"class":79},[3141,79261,79262],{},"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":47,"searchDepth":66,"depth":66,"links":79264},[79265,79275,79287,79304,79311,79319],{"id":56010,"depth":66,"text":56011,"children":79266},[79267,79268,79269,79270,79271,79272,79273,79274],{"id":56014,"depth":83,"text":56015},{"id":56047,"depth":83,"text":56048},{"id":56086,"depth":83,"text":56087},{"id":56244,"depth":83,"text":56245},{"id":56292,"depth":83,"text":56293},{"id":56429,"depth":83,"text":56430},{"id":56751,"depth":83,"text":56752},{"id":59739,"depth":83,"text":59740},{"id":59767,"depth":66,"text":59768,"children":79276},[79277,79278,79279,79280,79281,79282,79283,79284,79285,79286],{"id":59771,"depth":83,"text":59772},{"id":59794,"depth":83,"text":59795},{"id":60709,"depth":83,"text":60710},{"id":61399,"depth":83,"text":61400},{"id":61681,"depth":83,"text":61682},{"id":65842,"depth":83,"text":65843},{"id":66012,"depth":83,"text":66013},{"id":66140,"depth":83,"text":66141},{"id":66165,"depth":83,"text":66166},{"id":67554,"depth":83,"text":67555},{"id":68707,"depth":66,"text":68708,"children":79288},[79289,79290,79291,79292,79293,79294,79295,79296,79297,79298,79299,79300,79301,79302,79303],{"id":68711,"depth":83,"text":68712},{"id":69365,"depth":83,"text":69366},{"id":71060,"depth":83,"text":71061},{"id":71101,"depth":83,"text":71102},{"id":71143,"depth":83,"text":71144},{"id":71157,"depth":83,"text":71158},{"id":71206,"depth":83,"text":71207},{"id":71218,"depth":83,"text":71219},{"id":71233,"depth":83,"text":71234},{"id":71269,"depth":83,"text":71270},{"id":71350,"depth":83,"text":71351},{"id":71478,"depth":83,"text":71479},{"id":71490,"depth":83,"text":71491},{"id":71509,"depth":83,"text":71510},{"id":73620,"depth":83,"text":73621},{"id":73639,"depth":66,"text":73640,"children":79305},[79306,79307,79308,79309,79310],{"id":73660,"depth":83,"text":73661},{"id":73680,"depth":83,"text":73681},{"id":73729,"depth":83,"text":73730},{"id":73854,"depth":83,"text":73855},{"id":74035,"depth":83,"text":74036},{"id":74053,"depth":66,"text":74054,"children":79312},[79313,79314,79315,79316,79317,79318],{"id":74068,"depth":83,"text":74069},{"id":74127,"depth":83,"text":74128},{"id":74151,"depth":83,"text":74152},{"id":74471,"depth":83,"text":74472},{"id":74503,"depth":83,"text":74504},{"id":74526,"depth":83,"text":74527},{"id":77594,"depth":66,"text":77595,"children":79320},[79321,79322],{"id":77628,"depth":83,"text":77629},{"id":77667,"depth":83,"text":77668},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55982,"description":26025},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":79329,"title":79330,"body":79331,"description":26025,"extension":3153,"meta":95468,"navigation":122,"path":95469,"seo":95470,"stem":95471,"__hash__":95472},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":79332,"toc":95404},[79333,79336,79339,79343,79347,79352,79357,79368,79372,79377,79380,79384,79387,79392,79396,79400,79403,79408,79411,79415,79418,79426,79429,79433,79438,79443,79446,79450,79455,79460,79463,79467,79472,79475,79480,79483,79488,79491,79496,79501,79504,79507,79511,79516,79521,79524,79528,79532,79535,79538,79541,79545,79549,79554,79559,79562,79566,79571,79576,79579,79582,79585,79588,79591,79594,79597,79600,79603,79608,79612,79617,79622,79625,79628,79631,79634,79637,79640,79643,79646,79650,79654,79657,79660,79663,79668,79670,79673,79676,79679,79682,79685,79688,79691,79694,79697,79700,79703,79706,79709,79714,79719,79724,79727,79731,79734,79739,79743,79745,79756,79761,79862,79865,79868,79871,79874,79877,79880,79883,79886,79888,79891,79894,79897,79900,79903,79905,79908,79911,79914,79917,79920,79923,79925,79928,79930,79932,79935,79939,79943,79946,79949,79952,79955,79958,79961,79964,79967,79970,79975,80095,80098,80101,80106,80109,80112,80115,80118,80123,80126,80129,80132,80135,80140,80143,80243,80308,80382,80386,80389,80392,80396,80399,80413,80442,80445,80448,80451,80454,80457,80460,80463,80465,80468,80471,80474,80477,80481,80486,80490,80495,80570,80573,80756,80759,80762,80765,80768,80771,80773,80776,80779,80782,80785,80788,80791,80793,80797,80800,80805,80808,80811,80814,80817,80819,80824,80827,80830,80833,80836,80838,80843,80846,80849,80851,80853,80856,80860,80863,80866,80871,80874,80877,80880,80930,80935,80939,80944,80947,81016,81019,81028,81032,81037,81040,81043,81051,81054,81071,82873,82877,82881,82886,82889,82893,82899,82905,83057,83062,83067,83070,83073,83076,83079,83082,83085,83088,83091,83094,83097,83100,83103,83108,83112,83115,83126,83130,83135,83138,83141,83144,83147,83150,83152,83155,83158,83161,83164,83166,83183,83186,83190,83193,83198,83203,83206,83209,83213,83216,83219,83228,83231,83235,83238,83243,83248,83315,83319,83322,83325,83330,83335,83421,83426,83430,83433,83436,83451,83454,83459,83463,83468,83577,83580,83591,83741,83745,83750,83859,83863,83868,83873,83878,83881,83888,83908,83944,84108,84113,84116,84121,84128,84131,84134,84137,84196,84252,84308,84312,84317,84632,84635,84639,84642,84647,84756,84761,84765,84770,84774,84845,84849,84851,84854,84857,84895,85171,85175,85192,85258,85292,85296,85299,85304,85333,85340,85349,85354,85369,85374,85383,85386,85523,85527,85589,85593,85598,85843,85847,85852,85855,85858,85861,85864,85868,85873,87454,87458,87462,87468,87471,87476,87480,87483,87488,87491,87502,87506,87511,87515,87520,87525,87528,87533,87537,87541,87544,87549,87554,87557,87560,87563,87685,87690,87792,87795,87798,87802,87807,87979,87984,87988,87991,87996,88062,88067,88070,88201,88204,88209,88212,88215,88306,88311,88314,88317,88320,88323,88328,88333,88336,88341,88346,88351,88355,88358,88361,88366,88371,88376,88381,88435,88438,88441,88446,88449,88452,88457,88462,88467,88471,88476,88490,88495,88498,88503,88507,88512,88517,88522,88527,88532,88537,88542,88547,88550,88554,88559,88562,88565,88568,88573,88578,88581,88584,88588,88591,88594,88599,88604,88609,88614,88617,88622,88627,88688,88693,88696,88701,89942,89947,89951,89955,89960,89963,89968,89973,89976,89981,89983,89988,89992,89995,89998,90009,90013,90018,90023,90078,90083,90088,90093,90304,90309,90313,90318,90321,90323,90326,90329,90776,90781,90788,90794,90797,90800,91064,91069,91073,91338,91343,91347,91352,91357,91362,91367,91698,91701,91706,91711,91714,91718,91722,91727,91732,91737,91742,91747,91752,91756,91759,91764,91769,91772,91846,91851,91856,91861,91863,91866,92236,92241,92246,92251,92254,92257,92359,92364,92369,92472,92476,92481,92485,92489,92494,92499,92502,92507,92510,92513,92906,92911,92914,92917,92920,92923,93443,93447,93452,93457,93462,93465,93470,93473,93476,93858,93863,93865,93867,93870,93873,94385,94389,94450,94453,94456,94459,94463,94466,94471,94476,95401],[10,79334,79330],{"id":79335},"_4js进阶",[14,79337,79338],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[18,79340,79342],{"id":79341},"_41-作用域","4.1 作用域",[3195,79344,79346],{"id":79345},"_411-局部作用域","4.1.1 局部作用域",[14,79348,79349],{},[4509,79350],{"alt":47,"src":79351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,79353,79354],{},[4509,79355],{"alt":47,"src":79356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[29,79358,79359,79362,79365],{},[32,79360,79361],{},"函数作用域在函数内部",[32,79363,79364],{},"块级作用域在{}",[32,79366,79367],{},"对象的那个{}不是作用域，不是块作用域",[3195,79369,79371],{"id":79370},"_412-全局作用域","4.1.2 全局作用域",[14,79373,79374],{},[4509,79375],{"alt":47,"src":79376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,79378,79379],{},"window.a=10不要这样写",[3195,79381,79383],{"id":79382},"_413-作用域链","4.1.3 作用域链",[14,79385,79386],{},"变量查找机制",[14,79388,79389],{},[4509,79390],{"alt":47,"src":79391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[18,79393,79395],{"id":79394},"_42-垃圾回收机制","4.2 垃圾回收机制",[3195,79397,79399],{"id":79398},"_421-大体介绍","4.2.1 大体介绍",[14,79401,79402],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,79404,79405],{},[4509,79406],{"alt":47,"src":79407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,79409,79410],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[3195,79412,79414],{"id":79413},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,79416,79417],{},"堆栈空间分配区别：",[1696,79419,79420,79423],{},[32,79421,79422],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[32,79424,79425],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,79427,79428],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[24646,79430,79432],{"id":79431},"_4221-引用计数","4.2.2.1 引用计数",[14,79434,79435],{},[4509,79436],{"alt":47,"src":79437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,79439,79440],{},[4509,79441],{"alt":47,"src":79442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,79444,79445],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[24646,79447,79449],{"id":79448},"_4222-标记清除法","4.2.2.2 标记清除法",[14,79451,79452],{},[4509,79453],{"alt":47,"src":79454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,79456,79457],{},[4509,79458],{"alt":47,"src":79459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,79461,79462],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[18,79464,79466],{"id":79465},"_43-闭包","4.3 闭包",[14,79468,79469],{},[4509,79470],{"alt":47,"src":79471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,79473,79474],{},"闭包：内层函数+外层函数的变量",[14,79476,79477],{},[4509,79478],{"alt":47,"src":79479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,79481,79482],{},"closure就是闭包",[14,79484,79485],{},[4509,79486],{"alt":47,"src":79487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,79489,79490],{},"内层函数必须包含外层函数的变量才是闭包",[14,79492,79493],{},[4509,79494],{"alt":47,"src":79495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,79497,79498],{},[4509,79499],{"alt":47,"src":79500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,79502,79503],{},"闭包可能会引起内存泄漏",[14,79505,79506],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[18,79508,79510],{"id":79509},"_44-变量提升","4.4 变量提升",[14,79512,79513],{},[4509,79514],{"alt":47,"src":79515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,79517,79518],{},[4509,79519],{"alt":47,"src":79520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,79522,79523],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[18,79525,79527],{"id":79526},"_45-函数进阶","4.5 函数进阶",[3195,79529,79531],{"id":79530},"_451-函数提升","4.5.1 函数提升",[14,79533,79534],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,79536,79537],{},"只提升函数声明，不提升函数调用",[54463,79539,79540],{},"\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",[3195,79542,79544],{"id":79543},"_452-函数参数","4.5.2 函数参数",[24646,79546,79548],{"id":79547},"_4521-动态参数","4.5.2.1 动态参数",[14,79550,79551],{},[4509,79552],{"alt":47,"src":79553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,79555,79556],{},[4509,79557],{"alt":47,"src":79558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,79560,79561],{},"箭头函数里边没有arguments",[24646,79563,79565],{"id":79564},"_4522-剩余参数","4.5.2.2 剩余参数",[14,79567,79568],{},[4509,79569],{"alt":47,"src":79570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,79572,79573],{},[4509,79574],{"alt":47,"src":79575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,79577,79578],{},"剩余参数使用的时候不需要写...",[14,79580,79581],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,79583,79584],{},"  function getSum(a,b,...arr) {",[14,79586,79587],{},"  console.log(11)",[14,79589,79590],{},"  }",[14,79592,79593],{},"  getSum(1,2,3,4)",[14,79595,79596],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,79598,79599],{},"  getSum(1,2)",[14,79601,79602],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,79604,79605],{},[4509,79606],{"alt":47,"src":79607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[24646,79609,79611],{"id":79610},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,79613,79614],{},[4509,79615],{"alt":47,"src":79616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,79618,79619],{},[4509,79620],{"alt":47,"src":79621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,79623,79624],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,79626,79627],{},"展开运算符可以用于数组之间的合并：",[14,79629,79630],{},"const arr1 = [1, 2, 3]",[14,79632,79633],{},"const arr2 = [3, 4, 5]",[14,79635,79636],{},"const arr = [...arr1, ...arr2]",[14,79638,79639],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,79641,79642],{},"剩余参数：函数参数使用，得到真数组",[14,79644,79645],{},"展开运算符：数组中使用，数组展开",[3195,79647,79649],{"id":79648},"_453-箭头函数","4.5.3 箭头函数",[24646,79651,79653],{"id":79652},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,79655,79656],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,79658,79659],{},"它不是万能的！！！",[14,79661,79662],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,79664,79665],{},[4509,79666],{"alt":47,"src":79667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,79669,3252],{},[14,79671,79672],{},"① 只有一个形参的时候，可以省略小括号：",[14,79674,79675],{},"const fn=x=>{console.log(x)}",[14,79677,79678],{},"② 只有一行代码时可以省略大括号：",[14,79680,79681],{},"const fn=x=>console.log(11)",[14,79683,79684],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,79686,79687],{},"const fn=x=>x+x",[14,79689,79690],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,79692,79693],{},"⑤ 阻止表单默认提交：",[14,79695,79696],{},"const form = document.querySelector('form')",[14,79698,79699],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,79701,79702],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,79704,79705],{},"const fn=uname=>({uname:uname})",[14,79707,79708],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,79710,79711],{},[4509,79712],{"alt":47,"src":79713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,79715,79716],{},[4509,79717],{"alt":47,"src":79718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,79720,79721],{},[4509,79722],{"alt":47,"src":79723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,79725,79726],{},"一定不要忘记用()，有()就理解为自带return",[24646,79728,79730],{"id":79729},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,79732,79733],{},"箭头函数是没有动态参数的arguments",[14,79735,79736],{},[4509,79737],{"alt":47,"src":79738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[24646,79740,79742],{"id":79741},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,79744,13980],{},[1696,79746,79747,79750,79753],{},[32,79748,79749],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[32,79751,79752],{},"事件回调函数使用箭头函数时，this 为全局的 window",[32,79754,79755],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,79757,79758],{},[4509,79759],{"alt":47,"src":79760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[42,79762,79764],{"className":55717,"code":79763,"language":55719,"meta":47,"style":47},"  \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",[49,79765,79766,79774,79779,79784,79789,79794,79799,79803,79808,79812,79816,79821,79826,79831,79835,79839,79844,79849,79854],{"__ignoreMap":47},[52,79767,79768,79770,79772],{"class":54,"line":55},[52,79769,54794],{"class":79},[52,79771,54463],{"class":53950},[52,79773,53957],{"class":79},[52,79775,79776],{"class":54,"line":66},[52,79777,79778],{"class":79},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[52,79780,79781],{"class":54,"line":83},[52,79782,79783],{"class":79},"    console.log(this) \u002F\u002F指向window\n",[52,79785,79786],{"class":54,"line":91},[52,79787,79788],{"class":79},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[52,79790,79791],{"class":54,"line":98},[52,79792,79793],{"class":79},"    function fn() {\n",[52,79795,79796],{"class":54,"line":107},[52,79797,79798],{"class":79},"      console.log(this)  \u002F\u002F指向window\n",[52,79800,79801],{"class":54,"line":113},[52,79802,616],{"class":79},[52,79804,79805],{"class":54,"line":119},[52,79806,79807],{"class":79},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[52,79809,79810],{"class":54,"line":126},[52,79811,123],{"emptyLinePlaceholder":122},[52,79813,79814],{"class":54,"line":132},[52,79815,74173],{"class":79},[52,79817,79818],{"class":54,"line":138},[52,79819,79820],{"class":79},"      name: 'andy',\n",[52,79822,79823],{"class":54,"line":144},[52,79824,79825],{"class":79},"      sayHai: function () {\n",[52,79827,79828],{"class":54,"line":153},[52,79829,79830],{"class":79},"        console.log(this)\n",[52,79832,79833],{"class":54,"line":159},[52,79834,55048],{"class":79},[52,79836,79837],{"class":54,"line":167},[52,79838,616],{"class":79},[52,79840,79841],{"class":54,"line":173},[52,79842,79843],{"class":79},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[52,79845,79846],{"class":54,"line":181},[52,79847,79848],{"class":79},"    \u002F\u002F 2.箭头函数的this\n",[52,79850,79851],{"class":54,"line":186},[52,79852,79853],{"class":79},"    const fn = () => console.log(this)\n",[52,79855,79856,79858,79860],{"class":54,"line":191},[52,79857,55067],{"class":79},[52,79859,54463],{"class":53950},[52,79861,53957],{"class":79},[14,79863,79864],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,79866,79867],{},"const fn = () => console.log(this)",[14,79869,79870],{},"fn() \u002F\u002F指向window",[14,79872,79873],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,79875,79876],{},"①",[14,79878,79879],{},"const obj = {",[14,79881,79882],{},"uname: 'pink老师',",[14,79884,79885],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,79887,4132],{},[14,79889,79890],{},"调用对象里边的函数",[14,79892,79893],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,79895,79896],{},"obj.sayHai()",[14,79898,79899],{},"②",[14,79901,79902],{},"const obj1 = {",[14,79904,79882],{},[14,79906,79907],{},"sayHai: function () {",[14,79909,79910],{},"let i = 10",[14,79912,79913],{},"const count = () => {",[14,79915,79916],{},"console.log(this)",[14,79918,79919],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,79921,79922],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,79924,4132],{},[14,79926,79927],{},"count()",[14,79929,4132],{},[14,79931,4132],{},[14,79933,79934],{},"obj1.sayHai()",[18,79936,79938],{"id":79937},"_46-解构赋值","4.6 解构赋值",[3195,79940,79942],{"id":79941},"_461-数组解构","4.6.1 数组解构",[14,79944,79945],{},"以前要是使用数组中的值的话：",[14,79947,79948],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,79950,79951],{},"const arr=[100,60,80]",[14,79953,79954],{},"const max=arr[0]",[14,79956,79957],{},"const min=arr[1]",[14,79959,79960],{},"const avg=arr[2]",[14,79962,79963],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,79965,79966],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,79968,79969],{},"这个写法就类似于上边的那种用很多const的方法",[14,79971,79972],{},[4509,79973],{"alt":47,"src":79974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[42,79976,79978],{"className":53283,"code":79977,"language":53285,"meta":47,"style":47},"①变量之间交换值:\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",[49,79979,79980,79985,79990,79995,80000,80005,80009,80013,80018,80022,80027,80032,80036,80041,80046,80057,80067,80072,80077,80082,80086,80090],{"__ignoreMap":47},[52,79981,79982],{"class":54,"line":55},[52,79983,79984],{"class":79},"①变量之间交换值:\n",[52,79986,79987],{"class":54,"line":66},[52,79988,79989],{"class":79},"let a=1\n",[52,79991,79992],{"class":54,"line":83},[52,79993,79994],{"class":79},"let b=2;\n",[52,79996,79997],{"class":54,"line":91},[52,79998,79999],{"class":79},"必须加这行代码，不然就会报错\n",[52,80001,80002],{"class":54,"line":98},[52,80003,80004],{"class":79},"[b,a]=[a,b]\n",[52,80006,80007],{"class":54,"line":107},[52,80008,123],{"emptyLinePlaceholder":122},[52,80010,80011],{"class":54,"line":113},[52,80012,123],{"emptyLinePlaceholder":122},[52,80014,80015],{"class":54,"line":119},[52,80016,80017],{"class":79},"可以写成下面的方式：\n",[52,80019,80020],{"class":54,"line":126},[52,80021,79989],{"class":79},[52,80023,80024],{"class":54,"line":132},[52,80025,80026],{"class":79},"let b=2\n",[52,80028,80029],{"class":54,"line":138},[52,80030,80031],{"class":79},";[b,a]=[a,b]\n",[52,80033,80034],{"class":54,"line":144},[52,80035,123],{"emptyLinePlaceholder":122},[52,80037,80038],{"class":54,"line":153},[52,80039,80040],{"class":79},"②排序\n",[52,80042,80043],{"class":54,"line":159},[52,80044,80045],{"class":79},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[52,80047,80048,80051,80054],{"class":54,"line":167},[52,80049,80050],{"class":79},"for (let i = 0; i ",[52,80052,698],{"class":80053},"s7hpK",[52,80055,80056],{"class":79}," arr1.length; i++) {\n",[52,80058,80059,80062,80064],{"class":54,"line":173},[52,80060,80061],{"class":79},"   for (let j = 0; j ",[52,80063,698],{"class":80053},[52,80065,80066],{"class":79}," arr1.length - 1; j++) {\n",[52,80068,80069],{"class":54,"line":181},[52,80070,80071],{"class":79},"      if (arr1[j] > arr1[j + 1]) {\n",[52,80073,80074],{"class":54,"line":186},[52,80075,80076],{"class":79},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[52,80078,80079],{"class":54,"line":191},[52,80080,80081],{"class":79},"       }\n",[52,80083,80084],{"class":54,"line":196},[52,80085,7281],{"class":79},[52,80087,80088],{"class":54,"line":201},[52,80089,452],{"class":79},[52,80091,80092],{"class":54,"line":206},[52,80093,80094],{"class":79},"console.log(arr1)\n",[14,80096,80097],{},"数组解构的细节：",[14,80099,80100],{},"①变量多，单元值少",[14,80102,80103],{},[4509,80104],{"alt":47,"src":80105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,80107,80108],{},"防止出现undefined的方法：",[14,80110,80111],{},"const [a=0,b=0] =[1]",[14,80113,80114],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,80116,80117],{},"②变量少，单元值多",[14,80119,80120],{},[4509,80121],{"alt":47,"src":80122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,80124,80125],{},"此时可以使用剩余参数来接收多余的值",[14,80127,80128],{},"const [a,b,...c]=[1,2,3,4]",[14,80130,80131],{},"console.log(c) 输出[3,4]",[14,80133,80134],{},"③可以按需导入，忽略某些返回值",[14,80136,80137],{},[4509,80138],{"alt":47,"src":80139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,80141,80142],{},"④支持多维数组的结构",[42,80144,80148],{"className":80145,"code":80146,"language":80147,"meta":47,"style":47},"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",[49,80149,80150,80178,80194,80209,80224],{"__ignoreMap":47},[52,80151,80152,80154,80156,80158,80160,80162,80164,80166,80169,80171,80173,80175],{"class":54,"line":55},[52,80153,1648],{"class":58},[52,80155,54483],{"class":79},[52,80157,292],{"class":58},[52,80159,54876],{"class":79},[52,80161,629],{"class":308},[52,80163,15083],{"class":79},[52,80165,564],{"class":308},[52,80167,80168],{"class":79},", [",[52,80170,2313],{"class":308},[52,80172,15083],{"class":79},[52,80174,3504],{"class":308},[52,80176,80177],{"class":79},"]]\n",[52,80179,80180,80183,80185,80187,80189,80191],{"class":54,"line":66},[52,80181,80182],{"class":79},"console.",[52,80184,60897],{"class":75},[52,80186,6830],{"class":79},[52,80188,692],{"class":308},[52,80190,7189],{"class":79},[52,80192,80193],{"class":94},"  \u002F\u002F1\n",[52,80195,80196,80198,80200,80202,80204,80206],{"class":54,"line":83},[52,80197,80182],{"class":79},[52,80199,60897],{"class":75},[52,80201,6830],{"class":79},[52,80203,629],{"class":308},[52,80205,7189],{"class":79},[52,80207,80208],{"class":94},"  \u002F\u002F2\n",[52,80210,80211,80213,80215,80217,80219,80221],{"class":54,"line":91},[52,80212,80182],{"class":79},[52,80214,60897],{"class":75},[52,80216,6830],{"class":79},[52,80218,564],{"class":308},[52,80220,7189],{"class":79},[52,80222,80223],{"class":94},"  \u002F\u002F[3,4]\n",[52,80225,80226,80228,80230,80232,80234,80236,80238,80240],{"class":54,"line":98},[52,80227,80182],{"class":79},[52,80229,60897],{"class":75},[52,80231,6830],{"class":79},[52,80233,564],{"class":308},[52,80235,7872],{"class":79},[52,80237,692],{"class":308},[52,80239,7189],{"class":79},[52,80241,80242],{"class":94},"  \u002F\u002F3\n",[42,80244,80246],{"className":80145,"code":80245,"language":80147,"meta":47,"style":47},"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",[49,80247,80248,80275,80286,80297],{"__ignoreMap":47},[52,80249,80250,80252,80255,80257,80259,80261,80263,80265,80267,80269,80271,80273],{"class":54,"line":55},[52,80251,1648],{"class":58},[52,80253,80254],{"class":79}," [a, b, c] ",[52,80256,292],{"class":58},[52,80258,54876],{"class":79},[52,80260,629],{"class":308},[52,80262,15083],{"class":79},[52,80264,564],{"class":308},[52,80266,80168],{"class":79},[52,80268,2313],{"class":308},[52,80270,15083],{"class":79},[52,80272,3504],{"class":308},[52,80274,80177],{"class":79},[52,80276,80277,80279,80281,80284],{"class":54,"line":66},[52,80278,80182],{"class":79},[52,80280,60897],{"class":75},[52,80282,80283],{"class":79},"(a)",[52,80285,80193],{"class":94},[52,80287,80288,80290,80292,80295],{"class":54,"line":83},[52,80289,80182],{"class":79},[52,80291,60897],{"class":75},[52,80293,80294],{"class":79},"(b)",[52,80296,80208],{"class":94},[52,80298,80299,80301,80303,80306],{"class":54,"line":91},[52,80300,80182],{"class":79},[52,80302,60897],{"class":75},[52,80304,80305],{"class":79},"(c)",[52,80307,80223],{"class":94},[42,80309,80311],{"className":80145,"code":80310,"language":80147,"meta":47,"style":47},"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",[49,80312,80313,80340,80350,80360,80370],{"__ignoreMap":47},[52,80314,80315,80317,80320,80322,80324,80326,80328,80330,80332,80334,80336,80338],{"class":54,"line":55},[52,80316,1648],{"class":58},[52,80318,80319],{"class":79}," [a, b, [c, d]] ",[52,80321,292],{"class":58},[52,80323,54876],{"class":79},[52,80325,629],{"class":308},[52,80327,15083],{"class":79},[52,80329,564],{"class":308},[52,80331,80168],{"class":79},[52,80333,2313],{"class":308},[52,80335,15083],{"class":79},[52,80337,3504],{"class":308},[52,80339,80177],{"class":79},[52,80341,80342,80344,80346,80348],{"class":54,"line":66},[52,80343,80182],{"class":79},[52,80345,60897],{"class":75},[52,80347,80283],{"class":79},[52,80349,80193],{"class":94},[52,80351,80352,80354,80356,80358],{"class":54,"line":83},[52,80353,80182],{"class":79},[52,80355,60897],{"class":75},[52,80357,80294],{"class":79},[52,80359,80208],{"class":94},[52,80361,80362,80364,80366,80368],{"class":54,"line":91},[52,80363,80182],{"class":79},[52,80365,60897],{"class":75},[52,80367,80305],{"class":79},[52,80369,80242],{"class":94},[52,80371,80372,80374,80376,80379],{"class":54,"line":98},[52,80373,80182],{"class":79},[52,80375,60897],{"class":75},[52,80377,80378],{"class":79},"(d)",[52,80380,80381],{"class":94},"  \u002F\u002F4\n",[3195,80383,80385],{"id":80384},"_462-对象解构","4.6.2 对象解构",[14,80387,80388],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,80390,80391],{},"用的非常非常多！！！！！！",[24646,80393,80395],{"id":80394},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,80397,80398],{},"基本语法：",[1696,80400,80401,80404,80407,80410],{},[32,80402,80403],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[32,80405,80406],{},"对象属性的值将被赋值给与属性名相同的变量",[32,80408,80409],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[32,80411,80412],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[42,80414,80416],{"className":53283,"code":80415,"language":53285,"meta":47,"style":47},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[49,80417,80418,80423,80428,80433,80437],{"__ignoreMap":47},[52,80419,80420],{"class":54,"line":55},[52,80421,80422],{"class":79},"const obj = {\n",[52,80424,80425],{"class":54,"line":66},[52,80426,80427],{"class":79},"   uname: 'pink老师',\n",[52,80429,80430],{"class":54,"line":83},[52,80431,80432],{"class":79},"   age: 18,\n",[52,80434,80435],{"class":54,"line":91},[52,80436,452],{"class":79},[52,80438,80439],{"class":54,"line":98},[52,80440,80441],{"class":79},"const { uname, age } = obj\n",[14,80443,80444],{},"上方代码这样写等价于：",[14,80446,80447],{},"const uname等价于obj.uname",[14,80449,80450],{},"变量名可以重新改名：",[14,80452,80453],{},"const uname='red老师'",[14,80455,80456],{},"const user={",[14,80458,80459],{},"  uname:'pink老师',",[14,80461,80462],{},"  age:18",[14,80464,4132],{},[14,80466,80467],{},"const {uname,age}=user",[14,80469,80470],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,80472,80473],{},"const {旧变量名：新变量名}=对象",[14,80475,80476],{},"const {uname:username,age}=user",[24646,80478,80480],{"id":80479},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,80482,80483],{},[4509,80484],{"alt":47,"src":80485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[24646,80487,80489],{"id":80488},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,80491,80492],{},[4509,80493],{"alt":47,"src":80494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[42,80496,80498],{"className":55717,"code":80497,"language":55719,"meta":47,"style":47},"  \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",[49,80499,80500,80508,80513,80518,80523,80528,80533,80538,80543,80548,80552,80557,80562],{"__ignoreMap":47},[52,80501,80502,80504,80506],{"class":54,"line":55},[52,80503,54794],{"class":79},[52,80505,54463],{"class":53950},[52,80507,53957],{"class":79},[52,80509,80510],{"class":54,"line":66},[52,80511,80512],{"class":79},"    const pig = {\n",[52,80514,80515],{"class":54,"line":83},[52,80516,80517],{"class":79},"      name: '佩奇',\n",[52,80519,80520],{"class":54,"line":91},[52,80521,80522],{"class":79},"      family: {\n",[52,80524,80525],{"class":54,"line":98},[52,80526,80527],{"class":79},"        mother: '猪妈妈',\n",[52,80529,80530],{"class":54,"line":107},[52,80531,80532],{"class":79},"        father: '猪爸爸',\n",[52,80534,80535],{"class":54,"line":113},[52,80536,80537],{"class":79},"        sister: '乔治'\n",[52,80539,80540],{"class":54,"line":119},[52,80541,80542],{"class":79},"      },\n",[52,80544,80545],{"class":54,"line":126},[52,80546,80547],{"class":79},"      age: 6\n",[52,80549,80550],{"class":54,"line":132},[52,80551,616],{"class":79},[52,80553,80554],{"class":54,"line":138},[52,80555,80556],{"class":79},"    \u002F\u002F 多级对象解构\n",[52,80558,80559],{"class":54,"line":144},[52,80560,80561],{"class":79},"    const { name, family: { mother, father, sister }, age } = pig\n",[52,80563,80564,80566,80568],{"class":54,"line":153},[52,80565,55067],{"class":79},[52,80567,54463],{"class":53950},[52,80569,53957],{"class":79},[14,80571,80572],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[42,80574,80577],{"className":80575,"code":80576,"language":79097,"meta":47,"style":47},"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",[49,80578,80579,80584,80595,80607,80619,80628,80632,80643,80655,80665,80670,80674,80684,80695,80704,80708,80712,80723,80734,80743,80747,80752],{"__ignoreMap":47},[52,80580,80581],{"class":54,"line":55},[52,80582,80583],{"class":94},"    \u002F\u002F 这是后台传递过来的数据\n",[52,80585,80586,80588,80591,80593],{"class":54,"line":66},[52,80587,13869],{"class":58},[52,80589,80590],{"class":79}," msg ",[52,80592,292],{"class":58},[52,80594,18220],{"class":79},[52,80596,80597,80600,80602,80605],{"class":54,"line":83},[52,80598,80599],{"class":62},"      \"code\"",[52,80601,4049],{"class":58},[52,80603,80604],{"class":308}," 200",[52,80606,34116],{"class":79},[52,80608,80609,80612,80614,80617],{"class":54,"line":91},[52,80610,80611],{"class":62},"      \"msg\"",[52,80613,4049],{"class":58},[52,80615,80616],{"class":62}," \"获取新闻列表成功\"",[52,80618,34116],{"class":79},[52,80620,80621,80624,80626],{"class":54,"line":98},[52,80622,80623],{"class":62},"      \"data\"",[52,80625,4049],{"class":58},[52,80627,58097],{"class":79},[52,80629,80630],{"class":54,"line":107},[52,80631,1958],{"class":79},[52,80633,80634,80637,80639,80641],{"class":54,"line":113},[52,80635,80636],{"class":62},"          \"id\"",[52,80638,4049],{"class":58},[52,80640,27768],{"class":308},[52,80642,34116],{"class":79},[52,80644,80645,80648,80650,80653],{"class":54,"line":119},[52,80646,80647],{"class":62},"          \"title\"",[52,80649,4049],{"class":58},[52,80651,80652],{"class":62}," \"5G商用自己，三大运用商收入下降\"",[52,80654,34116],{"class":79},[52,80656,80657,80660,80662],{"class":54,"line":126},[52,80658,80659],{"class":62},"          \"count\"",[52,80661,4049],{"class":58},[52,80663,80664],{"class":308}," 58\n",[52,80666,80667],{"class":54,"line":132},[52,80668,80669],{"class":79},"        },\n",[52,80671,80672],{"class":54,"line":138},[52,80673,1958],{"class":79},[52,80675,80676,80678,80680,80682],{"class":54,"line":144},[52,80677,80636],{"class":62},[52,80679,4049],{"class":58},[52,80681,17403],{"class":308},[52,80683,34116],{"class":79},[52,80685,80686,80688,80690,80693],{"class":54,"line":153},[52,80687,80647],{"class":62},[52,80689,4049],{"class":58},[52,80691,80692],{"class":62}," \"国际媒体头条速览\"",[52,80694,34116],{"class":79},[52,80696,80697,80699,80701],{"class":54,"line":159},[52,80698,80659],{"class":62},[52,80700,4049],{"class":58},[52,80702,80703],{"class":308}," 56\n",[52,80705,80706],{"class":54,"line":167},[52,80707,80669],{"class":79},[52,80709,80710],{"class":54,"line":173},[52,80711,1958],{"class":79},[52,80713,80714,80716,80718,80721],{"class":54,"line":181},[52,80715,80636],{"class":62},[52,80717,4049],{"class":58},[52,80719,80720],{"class":308}," 3",[52,80722,34116],{"class":79},[52,80724,80725,80727,80729,80732],{"class":54,"line":186},[52,80726,80647],{"class":62},[52,80728,4049],{"class":58},[52,80730,80731],{"class":62}," \"乌克兰和俄罗斯持续冲突\"",[52,80733,34116],{"class":79},[52,80735,80736,80738,80740],{"class":54,"line":191},[52,80737,80659],{"class":62},[52,80739,4049],{"class":58},[52,80741,80742],{"class":308}," 1669\n",[52,80744,80745],{"class":54,"line":196},[52,80746,80669],{"class":79},[52,80748,80749],{"class":54,"line":201},[52,80750,80751],{"class":79},"      ]\n",[52,80753,80754],{"class":54,"line":206},[52,80755,616],{"class":79},[14,80757,80758],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,80760,80761],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,80763,80764],{},"\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,80766,80767],{},"function({data}) {",[14,80769,80770],{},"console.log(data)",[14,80772,4132],{},[14,80774,80775],{},"render(msg)",[14,80777,80778],{},"实参传递给形参的时候解构了",[14,80780,80781],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,80783,80784],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,80786,80787],{},"function render({data:mydata}) {",[14,80789,80790],{},"  console.log(data)",[14,80792,4132],{},[3195,80794,80796],{"id":80795},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,80798,80799],{},"有两种情况：一个是数组结构，一个是立即执行函数",[1696,80801,80802],{},[32,80803,80804],{},"如果对一个数组进行遍历，有两种方式：",[14,80806,80807],{},"①法1",[14,80809,80810],{},"const arr=[1,2,3]",[14,80812,80813],{},"arr.map(function(item,index) {",[14,80815,80816],{},"  console.log(item)",[14,80818,55114],{},[14,80820,80821],{},[4509,80822],{"alt":47,"src":80823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,80825,80826],{},"②法2",[14,80828,80829],{},"const str='pink'",[14,80831,80832],{},"[1,2,3].map(function(item,index) {",[14,80834,80835],{},"console.log(item)",[14,80837,55114],{},[14,80839,80840],{},[4509,80841],{"alt":47,"src":80842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,80844,80845],{},"此时会报错",[14,80847,80848],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,80850,80835],{},[14,80852,55114],{},[14,80854,80855],{},"内部会当成这样处理，所以我们用分号进行隔开",[18,80857,80859],{"id":80858},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,80861,80862],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,80864,80865],{},"可以理解为加强版的for循环",[14,80867,80868],{},[4509,80869],{"alt":47,"src":80870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,80872,80873],{},"里边不写return，不返回数组，只遍历不返回",[14,80875,80876],{},"map是返回数组",[14,80878,80879],{},"forEach主要用于遍历数组对象",[42,80881,80883],{"className":55717,"code":80882,"language":55719,"meta":47,"style":47},"  \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",[49,80884,80885,80893,80898,80903,80908,80913,80917,80922],{"__ignoreMap":47},[52,80886,80887,80889,80891],{"class":54,"line":55},[52,80888,54794],{"class":79},[52,80890,54463],{"class":53950},[52,80892,53957],{"class":79},[52,80894,80895],{"class":54,"line":66},[52,80896,80897],{"class":79},"    const arr = ['red', 'green', 'pink']\n",[52,80899,80900],{"class":54,"line":83},[52,80901,80902],{"class":79},"    const result = arr.forEach(function (item, index) {\n",[52,80904,80905],{"class":54,"line":91},[52,80906,80907],{"class":79},"      console.log(item)\n",[52,80909,80910],{"class":54,"line":98},[52,80911,80912],{"class":79},"      console.log(index)\n",[52,80914,80915],{"class":54,"line":107},[52,80916,36111],{"class":79},[52,80918,80919],{"class":54,"line":113},[52,80920,80921],{"class":79},"    console.log(result)\n",[52,80923,80924,80926,80928],{"class":54,"line":119},[52,80925,55067],{"class":79},[52,80927,54463],{"class":53950},[52,80929,53957],{"class":79},[14,80931,80932],{},[4509,80933],{"alt":47,"src":80934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[18,80936,80938],{"id":80937},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,80940,80941],{},[4509,80942],{"alt":47,"src":80943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,80945,80946],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[42,80948,80950],{"className":55717,"code":80949,"language":55719,"meta":47,"style":47},"\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",[49,80951,80952,80960,80968,80973,80978,80982,80986,80991,80995,81000,81008],{"__ignoreMap":47},[52,80953,80954,80956,80958],{"class":54,"line":55},[52,80955,698],{"class":79},[52,80957,54450],{"class":53950},[52,80959,53957],{"class":79},[52,80961,80962,80964,80966],{"class":54,"line":66},[52,80963,54794],{"class":79},[52,80965,54463],{"class":53950},[52,80967,53957],{"class":79},[52,80969,80970],{"class":54,"line":83},[52,80971,80972],{"class":79},"    const arr = [10, 20, 30]\n",[52,80974,80975],{"class":54,"line":91},[52,80976,80977],{"class":79},"    const newArr = arr.filter(function (item, index) {\n",[52,80979,80980],{"class":54,"line":98},[52,80981,80907],{"class":79},[52,80983,80984],{"class":54,"line":107},[52,80985,80912],{"class":79},[52,80987,80988],{"class":54,"line":113},[52,80989,80990],{"class":79},"      return item >= 20\n",[52,80992,80993],{"class":54,"line":119},[52,80994,36111],{"class":79},[52,80996,80997],{"class":54,"line":126},[52,80998,80999],{"class":79},"    console.log(newArr)\n",[52,81001,81002,81004,81006],{"class":54,"line":132},[52,81003,55067],{"class":79},[52,81005,54463],{"class":53950},[52,81007,53957],{"class":79},[52,81009,81010,81012,81014],{"class":54,"line":138},[52,81011,54435],{"class":79},[52,81013,54450],{"class":53950},[52,81015,53957],{"class":79},[14,81017,81018],{},"这个也可以写成箭头函数：",[42,81020,81022],{"className":53283,"code":81021,"language":53285,"meta":47,"style":47},"const newArr = arr.filter(item => item >= 20)\n",[49,81023,81024],{"__ignoreMap":47},[52,81025,81026],{"class":54,"line":55},[52,81027,81021],{"class":79},[18,81029,81031],{"id":81030},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,81033,81034],{},[4509,81035],{"alt":47,"src":81036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,81038,81039],{},"步骤：",[14,81041,81042],{},"①：渲染页面模块",[29,81044,81045,81048],{},[32,81046,81047],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[32,81049,81050],{},"用forEach+字符串的形式",[14,81052,81053],{},"②：点击不同需求，显示不同页面内容",[29,81055,81056,81059,81062,81065,81068],{},[32,81057,81058],{},"点击采取事件委托方式 .filter",[32,81060,81061],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[32,81063,81064],{},"筛选条件是根据点击的 data-index 来判断",[32,81066,81067],{},"可以使用对象解构，把事件对象解构",[32,81069,81070],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[42,81072,81074],{"className":53283,"code":81073,"language":53285,"meta":47,"style":47},"\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",[49,81075,81076,81086,81100,81104,81112,81126,81146,81158,81166,81172,81182,81192,81202,81206,81210,81216,81229,81241,81251,81263,81267,81271,81278,81291,81303,81320,81338,81351,81355,81359,81371,81381,81385,81389,81396,81437,81464,81474,81478,81482,81490,81502,81506,81510,81518,81530,81542,81553,81557,81561,81570,81582,81593,81597,81601,81610,81622,81634,81638,81642,81649,81659,81671,81683,81698,81702,81706,81714,81730,81740,81750,81760,81772,81776,81780,81790,81801,81811,81815,81823,81831,81835,81843,81858,81884,81909,81934,81953,81961,81975,81980,81985,81990,81995,82000,82008,82016,82021,82032,82037,82047,82057,82067,82077,82081,82085,82094,82103,82112,82121,82125,82129,82138,82147,82156,82165,82169,82173,82182,82191,82200,82209,82213,82217,82226,82235,82244,82253,82257,82261,82270,82279,82288,82297,82301,82305,82314,82323,82332,82341,82345,82349,82358,82367,82375,82384,82388,82392,82396,82401,82413,82418,82430,82434,82451,82479,82488,82493,82503,82513,82522,82527,82532,82536,82541,82558,82562,82567,82575,82580,82607,82612,82632,82637,82649,82654,82659,82664,82675,82689,82726,82744,82777,82794,82818,82822,82827,82833,82837,82841,82845,82853,82861,82865],{"__ignoreMap":47},[52,81077,81078,81080,81082,81084],{"class":54,"line":55},[52,81079,53947],{"class":79},[52,81081,53951],{"class":53950},[52,81083,53954],{"class":75},[52,81085,53957],{"class":79},[52,81087,81088,81090,81092,81094,81096,81098],{"class":54,"line":66},[52,81089,698],{"class":79},[52,81091,53285],{"class":53950},[52,81093,53966],{"class":75},[52,81095,292],{"class":79},[52,81097,53971],{"class":62},[52,81099,53957],{"class":79},[52,81101,81102],{"class":54,"line":83},[52,81103,123],{"emptyLinePlaceholder":122},[52,81105,81106,81108,81110],{"class":54,"line":91},[52,81107,698],{"class":79},[52,81109,53984],{"class":53950},[52,81111,53957],{"class":79},[52,81113,81114,81116,81118,81120,81122,81124],{"class":54,"line":98},[52,81115,54794],{"class":79},[52,81117,53994],{"class":53950},[52,81119,53997],{"class":75},[52,81121,292],{"class":79},[52,81123,54002],{"class":62},[52,81125,53957],{"class":79},[52,81127,81128,81130,81132,81134,81136,81138,81140,81142,81144],{"class":54,"line":107},[52,81129,54794],{"class":79},[52,81131,53994],{"class":53950},[52,81133,17568],{"class":75},[52,81135,292],{"class":79},[52,81137,54041],{"class":62},[52,81139,54021],{"class":75},[52,81141,292],{"class":79},[52,81143,54048],{"class":62},[52,81145,53957],{"class":79},[52,81147,81148,81150,81152,81154,81156],{"class":54,"line":113},[52,81149,54794],{"class":79},[52,81151,54057],{"class":53950},[52,81153,54060],{"class":79},[52,81155,54057],{"class":53950},[52,81157,53957],{"class":79},[52,81159,81160,81162,81164],{"class":54,"line":119},[52,81161,54794],{"class":79},[52,81163,3141],{"class":53950},[52,81165,53957],{"class":79},[52,81167,81168,81170],{"class":54,"line":126},[52,81169,9366],{"class":53950},[52,81171,18220],{"class":79},[52,81173,81174,81176,81178,81180],{"class":54,"line":132},[52,81175,57345],{"class":308},[52,81177,54087],{"class":79},[52,81179,692],{"class":308},[52,81181,80],{"class":79},[52,81183,81184,81186,81188,81190],{"class":54,"line":138},[52,81185,57356],{"class":308},[52,81187,54087],{"class":79},[52,81189,692],{"class":308},[52,81191,80],{"class":79},[52,81193,81194,81196,81198,81200],{"class":54,"line":144},[52,81195,75246],{"class":308},[52,81197,54087],{"class":79},[52,81199,63155],{"class":308},[52,81201,80],{"class":79},[52,81203,81204],{"class":54,"line":153},[52,81205,616],{"class":79},[52,81207,81208],{"class":54,"line":159},[52,81209,123],{"emptyLinePlaceholder":122},[52,81211,81212,81214],{"class":54,"line":167},[52,81213,64773],{"class":75},[52,81215,18220],{"class":79},[52,81217,81218,81220,81222,81225,81227],{"class":54,"line":173},[52,81219,57421],{"class":308},[52,81221,54087],{"class":79},[52,81223,81224],{"class":308},"990",[52,81226,54142],{"class":58},[52,81228,80],{"class":79},[52,81230,81231,81233,81235,81237,81239],{"class":54,"line":181},[52,81232,57356],{"class":308},[52,81234,54087],{"class":79},[52,81236,692],{"class":308},[52,81238,54206],{"class":308},[52,81240,80],{"class":79},[52,81242,81243,81245,81247,81249],{"class":54,"line":186},[52,81244,57659],{"class":308},[52,81246,54087],{"class":79},[52,81248,54127],{"class":308},[52,81250,80],{"class":79},[52,81252,81253,81256,81258,81261],{"class":54,"line":191},[52,81254,81255],{"class":308},"      flex-wrap",[52,81257,54087],{"class":79},[52,81259,81260],{"class":308},"wrap",[52,81262,80],{"class":79},[52,81264,81265],{"class":54,"line":196},[52,81266,616],{"class":79},[52,81268,81269],{"class":54,"line":201},[52,81270,123],{"emptyLinePlaceholder":122},[52,81272,81273,81276],{"class":54,"line":206},[52,81274,81275],{"class":75},"    .item",[52,81277,18220],{"class":79},[52,81279,81280,81282,81284,81287,81289],{"class":54,"line":211},[52,81281,57421],{"class":308},[52,81283,54087],{"class":79},[52,81285,81286],{"class":308},"240",[52,81288,54142],{"class":58},[52,81290,80],{"class":79},[52,81292,81293,81295,81297,81299,81301],{"class":54,"line":218},[52,81294,64650],{"class":308},[52,81296,54087],{"class":79},[52,81298,3649],{"class":308},[52,81300,54142],{"class":58},[52,81302,80],{"class":79},[52,81304,81305,81307,81309,81311,81313,81316,81318],{"class":54,"line":223},[52,81306,57345],{"class":308},[52,81308,54087],{"class":79},[52,81310,444],{"class":308},[52,81312,54142],{"class":58},[52,81314,81315],{"class":308}," 30",[52,81317,54142],{"class":58},[52,81319,80],{"class":79},[52,81321,81322,81324,81326,81328,81331,81334,81336],{"class":54,"line":230},[52,81323,64510],{"class":308},[52,81325,54087],{"class":79},[52,81327,30771],{"class":308},[52,81329,81330],{"class":308}," ease",[52,81332,81333],{"class":308}," .5",[52,81335,1291],{"class":58},[52,81337,80],{"class":79},[52,81339,81340,81343,81345,81347,81349],{"class":54,"line":239},[52,81341,81342],{"class":308},"      margin-bottom",[52,81344,54087],{"class":79},[52,81346,444],{"class":308},[52,81348,54142],{"class":58},[52,81350,80],{"class":79},[52,81352,81353],{"class":54,"line":251},[52,81354,616],{"class":79},[52,81356,81357],{"class":54,"line":256},[52,81358,123],{"emptyLinePlaceholder":122},[52,81360,81361,81364,81366,81369],{"class":54,"line":262},[52,81362,81363],{"class":75},"    .item:nth-child",[52,81365,1216],{"class":79},[52,81367,81368],{"class":308},"4n",[52,81370,15090],{"class":79},[52,81372,81373,81375,81377,81379],{"class":54,"line":268},[52,81374,64650],{"class":308},[52,81376,54087],{"class":79},[52,81378,692],{"class":308},[52,81380,80],{"class":79},[52,81382,81383],{"class":54,"line":280},[52,81384,616],{"class":79},[52,81386,81387],{"class":54,"line":286},[52,81388,123],{"emptyLinePlaceholder":122},[52,81390,81391,81394],{"class":54,"line":300},[52,81392,81393],{"class":75},"    .item:hover",[52,81395,18220],{"class":79},[52,81397,81398,81401,81403,81405,81407,81409,81411,81413,81415,81418,81420,81422,81424,81426,81428,81430,81432,81435],{"class":54,"line":314},[52,81399,81400],{"class":308},"      box-shadow",[52,81402,54087],{"class":79},[52,81404,692],{"class":308},[52,81406,54142],{"class":58},[52,81408,1444],{"class":308},[52,81410,54142],{"class":58},[52,81412,1946],{"class":308},[52,81414,54142],{"class":58},[52,81416,81417],{"class":308}," rgba",[52,81419,1216],{"class":79},[52,81421,692],{"class":308},[52,81423,15083],{"class":79},[52,81425,692],{"class":308},[52,81427,15083],{"class":79},[52,81429,692],{"class":308},[52,81431,15083],{"class":79},[52,81433,81434],{"class":308},".2",[52,81436,2737],{"class":79},[52,81438,81439,81442,81444,81447,81449,81451,81453,81456,81458,81460,81462],{"class":54,"line":327},[52,81440,81441],{"class":308},"      transform",[52,81443,54087],{"class":79},[52,81445,81446],{"class":308},"translate3d",[52,81448,1216],{"class":79},[52,81450,692],{"class":308},[52,81452,15083],{"class":79},[52,81454,81455],{"class":308},"-4",[52,81457,54142],{"class":58},[52,81459,15083],{"class":79},[52,81461,692],{"class":308},[52,81463,2737],{"class":79},[52,81465,81466,81468,81470,81472],{"class":54,"line":333},[52,81467,64675],{"class":308},[52,81469,54087],{"class":79},[52,81471,64680],{"class":308},[52,81473,80],{"class":79},[52,81475,81476],{"class":54,"line":360},[52,81477,616],{"class":79},[52,81479,81480],{"class":54,"line":365},[52,81481,123],{"emptyLinePlaceholder":122},[52,81483,81484,81486,81488],{"class":54,"line":371},[52,81485,81275],{"class":75},[52,81487,58265],{"class":53950},[52,81489,18220],{"class":79},[52,81491,81492,81494,81496,81498,81500],{"class":54,"line":400},[52,81493,57421],{"class":308},[52,81495,54087],{"class":79},[52,81497,591],{"class":308},[52,81499,1998],{"class":58},[52,81501,80],{"class":79},[52,81503,81504],{"class":54,"line":405},[52,81505,616],{"class":79},[52,81507,81508],{"class":54,"line":411},[52,81509,123],{"emptyLinePlaceholder":122},[52,81511,81512,81514,81516],{"class":54,"line":424},[52,81513,81275],{"class":75},[52,81515,64954],{"class":75},[52,81517,18220],{"class":79},[52,81519,81520,81522,81524,81526,81528],{"class":54,"line":436},[52,81521,57572],{"class":308},[52,81523,54087],{"class":79},[52,81525,309],{"class":308},[52,81527,54142],{"class":58},[52,81529,80],{"class":79},[52,81531,81532,81534,81536,81538,81540],{"class":54,"line":449},[52,81533,81342],{"class":308},[52,81535,54087],{"class":79},[52,81537,3649],{"class":308},[52,81539,54142],{"class":58},[52,81541,80],{"class":79},[52,81543,81544,81546,81548,81551],{"class":54,"line":2160},[52,81545,60066],{"class":308},[52,81547,54087],{"class":79},[52,81549,81550],{"class":308},"#666",[52,81552,80],{"class":79},[52,81554,81555],{"class":54,"line":2186},[52,81556,616],{"class":79},[52,81558,81559],{"class":54,"line":2209},[52,81560,123],{"emptyLinePlaceholder":122},[52,81562,81563,81565,81568],{"class":54,"line":2233},[52,81564,81275],{"class":75},[52,81566,81567],{"class":75}," .price",[52,81569,18220],{"class":79},[52,81571,81572,81574,81576,81578,81580],{"class":54,"line":2238},[52,81573,57572],{"class":308},[52,81575,54087],{"class":79},[52,81577,2433],{"class":308},[52,81579,54142],{"class":58},[52,81581,80],{"class":79},[52,81583,81584,81586,81588,81591],{"class":54,"line":2243},[52,81585,60066],{"class":308},[52,81587,54087],{"class":79},[52,81589,81590],{"class":308},"firebrick",[52,81592,80],{"class":79},[52,81594,81595],{"class":54,"line":2248},[52,81596,616],{"class":79},[52,81598,81599],{"class":54,"line":2257},[52,81600,123],{"emptyLinePlaceholder":122},[52,81602,81603,81605,81608],{"class":54,"line":2262},[52,81604,81275],{"class":75},[52,81606,81607],{"class":75}," .price::before",[52,81609,18220],{"class":79},[52,81611,81612,81615,81617,81620],{"class":54,"line":2268},[52,81613,81614],{"class":308},"      content",[52,81616,54087],{"class":79},[52,81618,81619],{"class":62},"'￥'",[52,81621,80],{"class":79},[52,81623,81624,81626,81628,81630,81632],{"class":54,"line":2297},[52,81625,57572],{"class":308},[52,81627,54087],{"class":79},[52,81629,3748],{"class":308},[52,81631,54142],{"class":58},[52,81633,80],{"class":79},[52,81635,81636],{"class":54,"line":2303},[52,81637,616],{"class":79},[52,81639,81640],{"class":54,"line":2318},[52,81641,123],{"emptyLinePlaceholder":122},[52,81643,81644,81647],{"class":54,"line":2324},[52,81645,81646],{"class":75},"    .filter",[52,81648,18220],{"class":79},[52,81650,81651,81653,81655,81657],{"class":54,"line":2353},[52,81652,57659],{"class":308},[52,81654,54087],{"class":79},[52,81656,54127],{"class":308},[52,81658,80],{"class":79},[52,81660,81661,81663,81665,81667,81669],{"class":54,"line":2362},[52,81662,57421],{"class":308},[52,81664,54087],{"class":79},[52,81666,81224],{"class":308},[52,81668,54142],{"class":58},[52,81670,80],{"class":79},[52,81672,81673,81675,81677,81679,81681],{"class":54,"line":2368},[52,81674,57356],{"class":308},[52,81676,54087],{"class":79},[52,81678,692],{"class":308},[52,81680,54206],{"class":308},[52,81682,80],{"class":79},[52,81684,81685,81687,81689,81691,81693,81695],{"class":54,"line":2376},[52,81686,57345],{"class":308},[52,81688,54087],{"class":79},[52,81690,3852],{"class":308},[52,81692,54142],{"class":58},[52,81694,81315],{"class":308},[52,81696,81697],{"class":58},"px\n",[52,81699,81700],{"class":54,"line":2381},[52,81701,616],{"class":79},[52,81703,81704],{"class":54,"line":19252},[52,81705,123],{"emptyLinePlaceholder":122},[52,81707,81708,81710,81712],{"class":54,"line":19258},[52,81709,81646],{"class":75},[52,81711,4446],{"class":53950},[52,81713,18220],{"class":79},[52,81715,81716,81718,81720,81722,81724,81726,81728],{"class":54,"line":19281},[52,81717,57345],{"class":308},[52,81719,54087],{"class":79},[52,81721,3649],{"class":308},[52,81723,54142],{"class":58},[52,81725,1375],{"class":308},[52,81727,54142],{"class":58},[52,81729,80],{"class":79},[52,81731,81732,81734,81736,81738],{"class":54,"line":19287},[52,81733,64371],{"class":308},[52,81735,54087],{"class":79},[52,81737,64468],{"class":308},[52,81739,80],{"class":79},[52,81741,81742,81744,81746,81748],{"class":54,"line":19310},[52,81743,60066],{"class":308},[52,81745,54087],{"class":79},[52,81747,81550],{"class":308},[52,81749,80],{"class":79},[52,81751,81752,81754,81756,81758],{"class":54,"line":19324},[52,81753,66620],{"class":308},[52,81755,54087],{"class":79},[52,81757,57387],{"class":308},[52,81759,80],{"class":79},[52,81761,81762,81764,81766,81768,81770],{"class":54,"line":19344},[52,81763,64400],{"class":308},[52,81765,54087],{"class":79},[52,81767,444],{"class":308},[52,81769,54142],{"class":58},[52,81771,80],{"class":79},[52,81773,81774],{"class":54,"line":19350},[52,81775,616],{"class":79},[52,81777,81778],{"class":54,"line":19361},[52,81779,123],{"emptyLinePlaceholder":122},[52,81781,81782,81784,81786,81788],{"class":54,"line":19384},[52,81783,81646],{"class":75},[52,81785,4446],{"class":53950},[52,81787,64550],{"class":75},[52,81789,18220],{"class":79},[52,81791,81792,81794,81796,81799],{"class":54,"line":19406},[52,81793,57534],{"class":308},[52,81795,54087],{"class":79},[52,81797,81798],{"class":308},"#05943c",[52,81800,80],{"class":79},[52,81802,81803,81805,81807,81809],{"class":54,"line":19411},[52,81804,60066],{"class":308},[52,81806,54087],{"class":79},[52,81808,63492],{"class":308},[52,81810,80],{"class":79},[52,81812,81813],{"class":54,"line":19417},[52,81814,616],{"class":79},[52,81816,81817,81819,81821],{"class":54,"line":19431},[52,81818,55067],{"class":79},[52,81820,3141],{"class":53950},[52,81822,53957],{"class":79},[52,81824,81825,81827,81829],{"class":54,"line":19444},[52,81826,54435],{"class":79},[52,81828,53984],{"class":53950},[52,81830,53957],{"class":79},[52,81832,81833],{"class":54,"line":19449},[52,81834,123],{"emptyLinePlaceholder":122},[52,81836,81837,81839,81841],{"class":54,"line":19463},[52,81838,698],{"class":79},[52,81840,54450],{"class":53950},[52,81842,53957],{"class":79},[52,81844,81845,81847,81849,81851,81853,81856],{"class":54,"line":19468},[52,81846,54794],{"class":79},[52,81848,54261],{"class":53950},[52,81850,56136],{"class":75},[52,81852,292],{"class":79},[52,81854,81855],{"class":62},"\"filter\"",[52,81857,53957],{"class":79},[52,81859,81860,81862,81864,81866,81868,81870,81873,81875,81877,81880,81882],{"class":54,"line":19474},[52,81861,53991],{"class":79},[52,81863,3451],{"class":53950},[52,81865,63707],{"class":75},[52,81867,292],{"class":79},[52,81869,63712],{"class":62},[52,81871,81872],{"class":75}," data-index",[52,81874,292],{"class":79},[52,81876,419],{"class":62},[52,81878,81879],{"class":79},">0-100元\u003C\u002F",[52,81881,3451],{"class":53950},[52,81883,53957],{"class":79},[52,81885,81886,81888,81890,81892,81894,81896,81898,81900,81902,81905,81907],{"class":54,"line":19479},[52,81887,53991],{"class":79},[52,81889,3451],{"class":53950},[52,81891,63707],{"class":75},[52,81893,292],{"class":79},[52,81895,63712],{"class":62},[52,81897,81872],{"class":75},[52,81899,292],{"class":79},[52,81901,637],{"class":62},[52,81903,81904],{"class":79},">100-300元\u003C\u002F",[52,81906,3451],{"class":53950},[52,81908,53957],{"class":79},[52,81910,81911,81913,81915,81917,81919,81921,81923,81925,81927,81930,81932],{"class":54,"line":19493},[52,81912,53991],{"class":79},[52,81914,3451],{"class":53950},[52,81916,63707],{"class":75},[52,81918,292],{"class":79},[52,81920,63712],{"class":62},[52,81922,81872],{"class":75},[52,81924,292],{"class":79},[52,81926,6693],{"class":62},[52,81928,81929],{"class":79},">300元以上\u003C\u002F",[52,81931,3451],{"class":53950},[52,81933,53957],{"class":79},[52,81935,81936,81938,81940,81942,81944,81946,81949,81951],{"class":54,"line":19498},[52,81937,53991],{"class":79},[52,81939,3451],{"class":53950},[52,81941,63707],{"class":75},[52,81943,292],{"class":79},[52,81945,63712],{"class":62},[52,81947,81948],{"class":79},">全部区间\u003C\u002F",[52,81950,3451],{"class":53950},[52,81952,53957],{"class":79},[52,81954,81955,81957,81959],{"class":54,"line":19503},[52,81956,55067],{"class":79},[52,81958,54261],{"class":53950},[52,81960,53957],{"class":79},[52,81962,81963,81965,81967,81969,81971,81973],{"class":54,"line":19517},[52,81964,54794],{"class":79},[52,81966,54261],{"class":53950},[52,81968,56136],{"class":75},[52,81970,292],{"class":79},[52,81972,65258],{"class":62},[52,81974,53957],{"class":79},[52,81976,81977],{"class":54,"line":19529},[52,81978,81979],{"class":94},"    \u003C!-- \u003Cdiv class=\"item\">\n",[52,81981,81982],{"class":54,"line":19534},[52,81983,81984],{"class":94},"      \u003Cimg src=\"\" alt=\"\">\n",[52,81986,81987],{"class":54,"line":19547},[52,81988,81989],{"class":94},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[52,81991,81992],{"class":54,"line":19552},[52,81993,81994],{"class":94},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[52,81996,81997],{"class":54,"line":19557},[52,81998,81999],{"class":94},"    \u003C\u002Fdiv> -->\n",[52,82001,82002,82004,82006],{"class":54,"line":19562},[52,82003,55067],{"class":79},[52,82005,54261],{"class":53950},[52,82007,53957],{"class":79},[52,82009,82010,82012,82014],{"class":54,"line":19575},[52,82011,54794],{"class":79},[52,82013,54463],{"class":53950},[52,82015,53957],{"class":79},[52,82017,82018],{"class":54,"line":19580},[52,82019,82020],{"class":94},"    \u002F\u002F 2. 初始化数据\n",[52,82022,82023,82025,82028,82030],{"class":54,"line":35283},[52,82024,13869],{"class":58},[52,82026,82027],{"class":308}," goodsList",[52,82029,16212],{"class":58},[52,82031,58097],{"class":79},[52,82033,82034],{"class":54,"line":35289},[52,82035,82036],{"class":79},"      {\n",[52,82038,82039,82042,82045],{"class":54,"line":35295},[52,82040,82041],{"class":79},"        id: ",[52,82043,82044],{"class":62},"'4001172'",[52,82046,34116],{"class":79},[52,82048,82049,82052,82055],{"class":54,"line":35301},[52,82050,82051],{"class":79},"        name: ",[52,82053,82054],{"class":62},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[52,82056,34116],{"class":79},[52,82058,82059,82062,82065],{"class":54,"line":35307},[52,82060,82061],{"class":79},"        price: ",[52,82063,82064],{"class":62},"'289.00'",[52,82066,34116],{"class":79},[52,82068,82069,82072,82075],{"class":54,"line":35318},[52,82070,82071],{"class":79},"        picture: ",[52,82073,82074],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[52,82076,34116],{"class":79},[52,82078,82079],{"class":54,"line":35324},[52,82080,80542],{"class":79},[52,82082,82083],{"class":54,"line":35344},[52,82084,82036],{"class":79},[52,82086,82087,82089,82092],{"class":54,"line":35350},[52,82088,82041],{"class":79},[52,82090,82091],{"class":62},"'4001594'",[52,82093,34116],{"class":79},[52,82095,82096,82098,82101],{"class":54,"line":35361},[52,82097,82051],{"class":79},[52,82099,82100],{"class":62},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[52,82102,34116],{"class":79},[52,82104,82105,82107,82110],{"class":54,"line":35367},[52,82106,82061],{"class":79},[52,82108,82109],{"class":62},"'288.00'",[52,82111,34116],{"class":79},[52,82113,82114,82116,82119],{"class":54,"line":35373},[52,82115,82071],{"class":79},[52,82117,82118],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[52,82120,34116],{"class":79},[52,82122,82123],{"class":54,"line":35379},[52,82124,80542],{"class":79},[52,82126,82127],{"class":54,"line":35385},[52,82128,82036],{"class":79},[52,82130,82131,82133,82136],{"class":54,"line":35391},[52,82132,82041],{"class":79},[52,82134,82135],{"class":62},"'4001009'",[52,82137,34116],{"class":79},[52,82139,82140,82142,82145],{"class":54,"line":35397},[52,82141,82051],{"class":79},[52,82143,82144],{"class":62},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[52,82146,34116],{"class":79},[52,82148,82149,82151,82154],{"class":54,"line":35403},[52,82150,82061],{"class":79},[52,82152,82153],{"class":62},"'109.00'",[52,82155,34116],{"class":79},[52,82157,82158,82160,82163],{"class":54,"line":35423},[52,82159,82071],{"class":79},[52,82161,82162],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[52,82164,34116],{"class":79},[52,82166,82167],{"class":54,"line":35429},[52,82168,80542],{"class":79},[52,82170,82171],{"class":54,"line":35445},[52,82172,82036],{"class":79},[52,82174,82175,82177,82180],{"class":54,"line":35451},[52,82176,82041],{"class":79},[52,82178,82179],{"class":62},"'4001874'",[52,82181,34116],{"class":79},[52,82183,82184,82186,82189],{"class":54,"line":35465},[52,82185,82051],{"class":79},[52,82187,82188],{"class":62},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[52,82190,34116],{"class":79},[52,82192,82193,82195,82198],{"class":54,"line":35471},[52,82194,82061],{"class":79},[52,82196,82197],{"class":62},"'488.00'",[52,82199,34116],{"class":79},[52,82201,82202,82204,82207],{"class":54,"line":35486},[52,82203,82071],{"class":79},[52,82205,82206],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[52,82208,34116],{"class":79},[52,82210,82211],{"class":54,"line":35492},[52,82212,80542],{"class":79},[52,82214,82215],{"class":54,"line":35501},[52,82216,82036],{"class":79},[52,82218,82219,82221,82224],{"class":54,"line":35507},[52,82220,82041],{"class":79},[52,82222,82223],{"class":62},"'4001649'",[52,82225,34116],{"class":79},[52,82227,82228,82230,82233],{"class":54,"line":35516},[52,82229,82051],{"class":79},[52,82231,82232],{"class":62},"'大师监制龙泉青瓷茶叶罐'",[52,82234,34116],{"class":79},[52,82236,82237,82239,82242],{"class":54,"line":35522},[52,82238,82061],{"class":79},[52,82240,82241],{"class":62},"'139.00'",[52,82243,34116],{"class":79},[52,82245,82246,82248,82251],{"class":54,"line":35528},[52,82247,82071],{"class":79},[52,82249,82250],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[52,82252,34116],{"class":79},[52,82254,82255],{"class":54,"line":35537},[52,82256,80542],{"class":79},[52,82258,82259],{"class":54,"line":35543},[52,82260,82036],{"class":79},[52,82262,82263,82265,82268],{"class":54,"line":35554},[52,82264,82041],{"class":79},[52,82266,82267],{"class":62},"'3997185'",[52,82269,34116],{"class":79},[52,82271,82272,82274,82277],{"class":54,"line":35560},[52,82273,82051],{"class":79},[52,82275,82276],{"class":62},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[52,82278,34116],{"class":79},[52,82280,82281,82283,82286],{"class":54,"line":35579},[52,82282,82061],{"class":79},[52,82284,82285],{"class":62},"'108.00'",[52,82287,34116],{"class":79},[52,82289,82290,82292,82295],{"class":54,"line":35585},[52,82291,82071],{"class":79},[52,82293,82294],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[52,82296,34116],{"class":79},[52,82298,82299],{"class":54,"line":35596},[52,82300,80542],{"class":79},[52,82302,82303],{"class":54,"line":35602},[52,82304,82036],{"class":79},[52,82306,82307,82309,82312],{"class":54,"line":35622},[52,82308,82041],{"class":79},[52,82310,82311],{"class":62},"'3997403'",[52,82313,34116],{"class":79},[52,82315,82316,82318,82321],{"class":54,"line":35638},[52,82317,82051],{"class":79},[52,82319,82320],{"class":62},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[52,82322,34116],{"class":79},[52,82324,82325,82327,82330],{"class":54,"line":35644},[52,82326,82061],{"class":79},[52,82328,82329],{"class":62},"'100.00'",[52,82331,34116],{"class":79},[52,82333,82334,82336,82339],{"class":54,"line":35658},[52,82335,82071],{"class":79},[52,82337,82338],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[52,82340,34116],{"class":79},[52,82342,82343],{"class":54,"line":35664},[52,82344,80542],{"class":79},[52,82346,82347],{"class":54,"line":35670},[52,82348,82036],{"class":79},[52,82350,82351,82353,82356],{"class":54,"line":35681},[52,82352,82041],{"class":79},[52,82354,82355],{"class":62},"'3998274'",[52,82357,34116],{"class":79},[52,82359,82360,82362,82365],{"class":54,"line":35687},[52,82361,82051],{"class":79},[52,82363,82364],{"class":62},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[52,82366,34116],{"class":79},[52,82368,82369,82371,82373],{"class":54,"line":35693},[52,82370,82061],{"class":79},[52,82372,82241],{"class":62},[52,82374,34116],{"class":79},[52,82376,82377,82379,82382],{"class":54,"line":35703},[52,82378,82071],{"class":79},[52,82380,82381],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[52,82383,34116],{"class":79},[52,82385,82386],{"class":54,"line":35709},[52,82387,80542],{"class":79},[52,82389,82390],{"class":54,"line":35720},[52,82391,55759],{"class":79},[52,82393,82394],{"class":54,"line":35726},[52,82395,123],{"emptyLinePlaceholder":122},[52,82397,82398],{"class":54,"line":35736},[52,82399,82400],{"class":94},"    \u002F\u002F 1.渲染函数\n",[52,82402,82403,82405,82407,82409,82411],{"class":54,"line":35741},[52,82404,72734],{"class":58},[52,82406,72737],{"class":75},[52,82408,1216],{"class":79},[52,82410,6858],{"class":1223},[52,82412,15090],{"class":79},[52,82414,82415],{"class":54,"line":35747},[52,82416,82417],{"class":94},"      \u002F\u002F 声明空字符串\n",[52,82419,82420,82423,82426,82428],{"class":54,"line":35796},[52,82421,82422],{"class":58},"      let",[52,82424,82425],{"class":79}," str ",[52,82427,292],{"class":58},[52,82429,72754],{"class":62},[52,82431,82432],{"class":54,"line":35843},[52,82433,72759],{"class":94},[52,82435,82436,82438,82441,82443,82446,82449],{"class":54,"line":35848},[52,82437,60657],{"class":79},[52,82439,82440],{"class":75},"forEach",[52,82442,1216],{"class":79},[52,82444,82445],{"class":1223},"item",[52,82447,82448],{"class":58}," =>",[52,82450,18220],{"class":79},[52,82452,82453,82455,82458,82461,82463,82466,82468,82471,82474,82476],{"class":54,"line":35854},[52,82454,63920],{"class":58},[52,82456,82457],{"class":79}," { ",[52,82459,82460],{"class":308},"name",[52,82462,15083],{"class":79},[52,82464,82465],{"class":308},"price",[52,82467,15083],{"class":79},[52,82469,82470],{"class":308},"picture",[52,82472,82473],{"class":79}," } ",[52,82475,292],{"class":58},[52,82477,82478],{"class":79}," item\n",[52,82480,82481,82484,82486],{"class":54,"line":35873},[52,82482,82483],{"class":79},"        str ",[52,82485,1910],{"class":58},[52,82487,72818],{"class":62},[52,82489,82490],{"class":54,"line":35879},[52,82491,82492],{"class":62},"          \u003Cdiv class=\"item\">\n",[52,82494,82495,82498,82500],{"class":54,"line":35899},[52,82496,82497],{"class":62},"            \u003Cimg src=\"${",[52,82499,82470],{"class":79},[52,82501,82502],{"class":62},"}\" alt=\"\">\n",[52,82504,82505,82508,82510],{"class":54,"line":35905},[52,82506,82507],{"class":62},"            \u003Cp class=\"name\">${",[52,82509,82460],{"class":79},[52,82511,82512],{"class":62},"}\u003C\u002Fp>\n",[52,82514,82515,82518,82520],{"class":54,"line":35911},[52,82516,82517],{"class":62},"            \u003Cp class=\"price\">${",[52,82519,82465],{"class":79},[52,82521,82512],{"class":62},[52,82523,82524],{"class":54,"line":35921},[52,82525,82526],{"class":62},"          \u003C\u002Fdiv>\n",[52,82528,82529],{"class":54,"line":35926},[52,82530,82531],{"class":62},"        `\n",[52,82533,82534],{"class":54,"line":35932},[52,82535,67465],{"class":79},[52,82537,82538],{"class":54,"line":35948},[52,82539,82540],{"class":94},"      \u002F\u002F 追加给List\n",[52,82542,82543,82545,82547,82549,82552,82554,82556],{"class":54,"line":35993},[52,82544,58421],{"class":79},[52,82546,57049],{"class":75},[52,82548,1216],{"class":79},[52,82550,82551],{"class":62},"'.list'",[52,82553,76899],{"class":79},[52,82555,292],{"class":58},[52,82557,76635],{"class":79},[52,82559,82560],{"class":54,"line":35999},[52,82561,616],{"class":79},[52,82563,82564],{"class":54,"line":36005},[52,82565,82566],{"class":94},"    \u002F\u002F 页面一打开就需要渲染\n",[52,82568,82569,82572],{"class":54,"line":36011},[52,82570,82571],{"class":75},"    render",[52,82573,82574],{"class":79},"(goodsList)\n",[52,82576,82577],{"class":54,"line":36022},[52,82578,82579],{"class":94},"    \u002F\u002F 2.过滤筛选\n",[52,82581,82582,82584,82586,82588,82591,82593,82595,82597,82599,82601,82603,82605],{"class":54,"line":36028},[52,82583,55057],{"class":79},[52,82585,57049],{"class":75},[52,82587,1216],{"class":79},[52,82589,82590],{"class":62},"'.filter'",[52,82592,33476],{"class":79},[52,82594,60463],{"class":75},[52,82596,1216],{"class":79},[52,82598,60468],{"class":62},[52,82600,15083],{"class":79},[52,82602,3292],{"class":1223},[52,82604,82448],{"class":58},[52,82606,18220],{"class":79},[52,82608,82609],{"class":54,"line":36034},[52,82610,82611],{"class":94},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[52,82613,82614,82616,82618,82621,82623,82625,82627,82629],{"class":54,"line":36040},[52,82615,60878],{"class":58},[52,82617,82457],{"class":79},[52,82619,82620],{"class":308},"tagName",[52,82622,15083],{"class":79},[52,82624,34187],{"class":308},[52,82626,82473],{"class":79},[52,82628,292],{"class":58},[52,82630,82631],{"class":79}," e.target\n",[52,82633,82634],{"class":54,"line":36058},[52,82635,82636],{"class":94},"      \u002F\u002F 判断\n",[52,82638,82639,82641,82643,82645,82647],{"class":54,"line":36072},[52,82640,57130],{"class":58},[52,82642,69684],{"class":79},[52,82644,57136],{"class":58},[52,82646,70906],{"class":62},[52,82648,15090],{"class":79},[52,82650,82651],{"class":54,"line":36081},[52,82652,82653],{"class":94},"        \u002F\u002F console.log(11)\n",[52,82655,82656],{"class":54,"line":36090},[52,82657,82658],{"class":94},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[52,82660,82661],{"class":54,"line":36099},[52,82662,82663],{"class":94},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[52,82665,82666,82668,82670,82672],{"class":54,"line":36108},[52,82667,54480],{"class":58},[52,82669,54483],{"class":79},[52,82671,292],{"class":58},[52,82673,82674],{"class":79}," goodsList\n",[52,82676,82677,82679,82682,82684,82687],{"class":54,"line":36114},[52,82678,5497],{"class":58},[52,82680,82681],{"class":79}," (dataset.index ",[52,82683,57136],{"class":58},[52,82685,82686],{"class":62}," '1'",[52,82688,15090],{"class":79},[52,82690,82691,82694,82696,82699,82702,82704,82706,82708,82711,82713,82715,82718,82720,82722,82724],{"class":54,"line":36120},[52,82692,82693],{"class":79},"          arr ",[52,82695,292],{"class":58},[52,82697,82698],{"class":79}," goodsList.",[52,82700,82701],{"class":75},"filter",[52,82703,1216],{"class":79},[52,82705,82445],{"class":1223},[52,82707,82448],{"class":58},[52,82709,82710],{"class":79}," item.price ",[52,82712,4742],{"class":58},[52,82714,1444],{"class":308},[52,82716,82717],{"class":58}," &&",[52,82719,82710],{"class":79},[52,82721,4632],{"class":58},[52,82723,8719],{"class":308},[52,82725,708],{"class":79},[52,82727,82728,82731,82733,82735,82737,82739,82742],{"class":54,"line":36128},[52,82729,82730],{"class":79},"        } ",[52,82732,4733],{"class":58},[52,82734,4736],{"class":58},[52,82736,82681],{"class":79},[52,82738,57136],{"class":58},[52,82740,82741],{"class":62}," '2'",[52,82743,15090],{"class":79},[52,82745,82746,82748,82750,82752,82754,82756,82758,82760,82762,82764,82766,82768,82770,82772,82775],{"class":54,"line":36133},[52,82747,82693],{"class":79},[52,82749,292],{"class":58},[52,82751,82698],{"class":79},[52,82753,82701],{"class":75},[52,82755,1216],{"class":79},[52,82757,82445],{"class":1223},[52,82759,82448],{"class":58},[52,82761,82710],{"class":79},[52,82763,4742],{"class":58},[52,82765,8719],{"class":308},[52,82767,82717],{"class":58},[52,82769,82710],{"class":79},[52,82771,4632],{"class":58},[52,82773,82774],{"class":308}," 300",[52,82776,708],{"class":79},[52,82778,82779,82781,82783,82785,82787,82789,82792],{"class":54,"line":36139},[52,82780,82730],{"class":79},[52,82782,4733],{"class":58},[52,82784,4736],{"class":58},[52,82786,82681],{"class":79},[52,82788,57136],{"class":58},[52,82790,82791],{"class":62}," '3'",[52,82793,15090],{"class":79},[52,82795,82796,82798,82800,82802,82804,82806,82808,82810,82812,82814,82816],{"class":54,"line":36150},[52,82797,82693],{"class":79},[52,82799,292],{"class":58},[52,82801,82698],{"class":79},[52,82803,82701],{"class":75},[52,82805,1216],{"class":79},[52,82807,82445],{"class":1223},[52,82809,82448],{"class":58},[52,82811,82710],{"class":79},[52,82813,4742],{"class":58},[52,82815,82774],{"class":308},[52,82817,708],{"class":79},[52,82819,82820],{"class":54,"line":36156},[52,82821,2039],{"class":79},[52,82823,82824],{"class":54,"line":36176},[52,82825,82826],{"class":94},"        \u002F\u002F 渲染函数\n",[52,82828,82829,82831],{"class":54,"line":36182},[52,82830,73058],{"class":75},[52,82832,55062],{"class":79},[52,82834,82835],{"class":54,"line":36188},[52,82836,55048],{"class":79},[52,82838,82839],{"class":54,"line":36194},[52,82840,123],{"emptyLinePlaceholder":122},[52,82842,82843],{"class":54,"line":36211},[52,82844,36111],{"class":79},[52,82846,82847,82849,82851],{"class":54,"line":36217},[52,82848,55067],{"class":79},[52,82850,54463],{"class":53950},[52,82852,53957],{"class":79},[52,82854,82855,82857,82859],{"class":54,"line":36223},[52,82856,54435],{"class":79},[52,82858,54450],{"class":53950},[52,82860,53957],{"class":79},[52,82862,82863],{"class":54,"line":36229},[52,82864,123],{"emptyLinePlaceholder":122},[52,82866,82867,82869,82871],{"class":54,"line":36235},[52,82868,54435],{"class":79},[52,82870,53285],{"class":53950},[52,82872,53957],{"class":79},[18,82874,82876],{"id":82875},"_410-深入了解对象","4.10 深入了解对象",[3195,82878,82880],{"id":82879},"_4101-创建对象","4.10.1 创建对象",[14,82882,82883],{},[4509,82884],{"alt":47,"src":82885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,82887,82888],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[3195,82890,82892],{"id":82891},"_4102-构造函数","4.10.2 构造函数",[14,82894,82895,82898],{},[2389,82896,82897],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,82900,82901,82904],{},[2389,82902,82903],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[42,82906,82908],{"className":53283,"code":82907,"language":53285,"meta":47,"style":47},"\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",[49,82909,82910,82918,82923,82944,82957,82969,82981,82985,82990,83017,83022,83049],{"__ignoreMap":47},[52,82911,82912,82914,82916],{"class":54,"line":55},[52,82913,698],{"class":79},[52,82915,54463],{"class":53950},[52,82917,53957],{"class":79},[52,82919,82920],{"class":54,"line":66},[52,82921,82922],{"class":94},"\u002F\u002F例：\n",[52,82924,82925,82927,82930,82932,82934,82936,82938,82940,82942],{"class":54,"line":83},[52,82926,57099],{"class":58},[52,82928,82929],{"class":75}," Pig",[52,82931,1216],{"class":79},[52,82933,82460],{"class":1223},[52,82935,389],{"class":79},[52,82937,72871],{"class":1223},[52,82939,389],{"class":79},[52,82941,72888],{"class":1223},[52,82943,15090],{"class":79},[52,82945,82946,82949,82952,82954],{"class":54,"line":91},[52,82947,82948],{"class":308},"    this",[52,82950,82951],{"class":79},".name",[52,82953,292],{"class":58},[52,82955,82956],{"class":79},"name\n",[52,82958,82959,82961,82964,82966],{"class":54,"line":98},[52,82960,82948],{"class":308},[52,82962,82963],{"class":79},".age",[52,82965,292],{"class":58},[52,82967,82968],{"class":79},"age\n",[52,82970,82971,82973,82976,82978],{"class":54,"line":107},[52,82972,82948],{"class":308},[52,82974,82975],{"class":79},".gender",[52,82977,292],{"class":58},[52,82979,82980],{"class":79},"gender    \n",[52,82982,82983],{"class":54,"line":113},[52,82984,452],{"class":79},[52,82986,82987],{"class":54,"line":119},[52,82988,82989],{"class":94},"\u002F\u002F创建佩奇对象\n",[52,82991,82992,82994,82997,82999,83001,83003,83006,83008,83010,83012,83015],{"class":54,"line":126},[52,82993,1648],{"class":58},[52,82995,82996],{"class":308}," Peppa",[52,82998,14365],{"class":58},[52,83000,82929],{"class":75},[52,83002,1216],{"class":79},[52,83004,83005],{"class":62},"'佩奇'",[52,83007,389],{"class":79},[52,83009,1125],{"class":308},[52,83011,389],{"class":79},[52,83013,83014],{"class":62},"'女'",[52,83016,708],{"class":79},[52,83018,83019],{"class":54,"line":132},[52,83020,83021],{"class":94},"\u002F\u002F创建乔治对象\n",[52,83023,83024,83026,83029,83031,83033,83035,83038,83040,83042,83044,83047],{"class":54,"line":138},[52,83025,1648],{"class":58},[52,83027,83028],{"class":308}," George",[52,83030,14365],{"class":58},[52,83032,82929],{"class":75},[52,83034,1216],{"class":79},[52,83036,83037],{"class":62},"'乔治'",[52,83039,389],{"class":79},[52,83041,2313],{"class":308},[52,83043,389],{"class":79},[52,83045,83046],{"class":62},"'男'",[52,83048,708],{"class":79},[52,83050,83051,83053,83055],{"class":54,"line":144},[52,83052,54435],{"class":79},[52,83054,54463],{"class":53950},[52,83056,53957],{"class":79},[14,83058,83059],{},[4509,83060],{"alt":47,"src":83061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,83063,83064],{},[4509,83065],{"alt":47,"src":83066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,83068,83069],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,83071,83072],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,83074,83075],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,83077,83078],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,83080,83081],{},"这里用等号是因为：对象.属性=值",[14,83083,83084],{},"①利用对象字面量创建对象",[14,83086,83087],{},"const o={",[14,83089,83090],{},"name:'pink'",[14,83092,83093],{},"} ②利用new Object创建对象",[14,83095,83096],{},"const o=new Object({name:'pink'})",[14,83098,83099],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,83101,83102],{},"构造函数创建对象的执行过程：",[14,83104,83105],{},[4509,83106],{"alt":47,"src":83107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[3195,83109,83111],{"id":83110},"_4103-实例成员","4.10.3 实例成员",[14,83113,83114],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[1696,83116,83117,83120,83123],{},[32,83118,83119],{},"实例对象的属性和方法即为实例成员",[32,83121,83122],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[32,83124,83125],{},"构造函数创建的实例对象彼此独立互不影响",[3195,83127,83129],{"id":83128},"_4104-静态成员","4.10.4 静态成员",[14,83131,83132],{},[4509,83133],{"alt":47,"src":83134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,83136,83137],{},"静态成员有Date.now() Math.PI Math.random()",[14,83139,83140],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,83142,83143],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,83145,83146],{},"function Pig(name) n {",[14,83148,83149],{},"this.name=name",[14,83151,4132],{},[14,83153,83154],{},"Pig.eyes=2",[14,83156,83157],{},"Pig.sayHai=function () { console.log(this) }",[14,83159,83160],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,83162,83163],{},"console.log(Pig.eyes) \u002F\u002F2",[14,83165,13980],{},[1696,83167,83168,83171,83174,83177,83180],{},[32,83169,83170],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[32,83172,83173],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[32,83175,83176],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[32,83178,83179],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[32,83181,83182],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,83184,83185],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[3195,83187,83189],{"id":83188},"_4105-内置构造函数","4.10.5 内置构造函数",[14,83191,83192],{},"内置构造函数包含：",[14,83194,83195],{},[4509,83196],{"alt":47,"src":83197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,83199,83200],{},[4509,83201],{"alt":47,"src":83202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,83204,83205],{},"这些基本数据类型，js对他们进行了包装",[54463,83207,83208],{},"\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",[24646,83210,83212],{"id":83211},"_41051-object","4.10.5.1 Object",[14,83214,83215],{},"Object 是内置的构造函数，用于创建普通对象",[14,83217,83218],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[42,83220,83222],{"className":53283,"code":83221,"language":53285,"meta":47,"style":47},"const user=new Object({name:'小明',age:15})\n",[49,83223,83224],{"__ignoreMap":47},[52,83225,83226],{"class":54,"line":55},[52,83227,83221],{"class":79},[14,83229,83230],{},"三个常用的静态方法：",[25558,83232,83234],{"id":83233},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,83236,83237],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,83239,83240],{},[4509,83241],{"alt":47,"src":83242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,83244,83245],{},[4509,83246],{"alt":47,"src":83247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[42,83249,83251],{"className":55717,"code":83250,"language":55719,"meta":47,"style":47},"\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",[49,83252,83253,83261,83269,83274,83279,83284,83289,83294,83299,83307],{"__ignoreMap":47},[52,83254,83255,83257,83259],{"class":54,"line":55},[52,83256,698],{"class":79},[52,83258,54450],{"class":53950},[52,83260,53957],{"class":79},[52,83262,83263,83265,83267],{"class":54,"line":66},[52,83264,54794],{"class":79},[52,83266,54463],{"class":53950},[52,83268,53957],{"class":79},[52,83270,83271],{"class":54,"line":83},[52,83272,83273],{"class":79},"    const o = { name: 'pink', age: 6 }\n",[52,83275,83276],{"class":54,"line":91},[52,83277,83278],{"class":79},"    \u002F\u002F 获得所有属性名\n",[52,83280,83281],{"class":54,"line":98},[52,83282,83283],{"class":79},"    const arr = Object.keys(o)\n",[52,83285,83286],{"class":54,"line":107},[52,83287,83288],{"class":79},"    console.log(arr)\n",[52,83290,83291],{"class":54,"line":113},[52,83292,83293],{"class":79},"    \u002F\u002F 获得所有属性值\n",[52,83295,83296],{"class":54,"line":119},[52,83297,83298],{"class":79},"    console.log(Object.values(o))\n",[52,83300,83301,83303,83305],{"class":54,"line":126},[52,83302,55067],{"class":79},[52,83304,54463],{"class":53950},[52,83306,53957],{"class":79},[52,83308,83309,83311,83313],{"class":54,"line":132},[52,83310,54435],{"class":79},[52,83312,54450],{"class":53950},[52,83314,53957],{"class":79},[25558,83316,83318],{"id":83317},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,83320,83321],{},"Object.assign(oo,o)",[14,83323,83324],{},"后的东西添加给前 是追加",[14,83326,83327],{},[4509,83328],{"alt":47,"src":83329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,83331,83332],{},[4509,83333],{"alt":47,"src":83334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[42,83336,83338],{"className":55717,"code":83337,"language":55719,"meta":47,"style":47},"\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",[49,83339,83340,83348,83356,83360,83364,83368,83372,83376,83380,83385,83390,83395,83400,83405,83413],{"__ignoreMap":47},[52,83341,83342,83344,83346],{"class":54,"line":55},[52,83343,698],{"class":79},[52,83345,54450],{"class":53950},[52,83347,53957],{"class":79},[52,83349,83350,83352,83354],{"class":54,"line":66},[52,83351,54794],{"class":79},[52,83353,54463],{"class":53950},[52,83355,53957],{"class":79},[52,83357,83358],{"class":54,"line":83},[52,83359,83273],{"class":79},[52,83361,83362],{"class":54,"line":91},[52,83363,83278],{"class":79},[52,83365,83366],{"class":54,"line":98},[52,83367,83283],{"class":79},[52,83369,83370],{"class":54,"line":107},[52,83371,83288],{"class":79},[52,83373,83374],{"class":54,"line":113},[52,83375,83293],{"class":79},[52,83377,83378],{"class":54,"line":119},[52,83379,83298],{"class":79},[52,83381,83382],{"class":54,"line":126},[52,83383,83384],{"class":79},"    const oo = {}\n",[52,83386,83387],{"class":54,"line":132},[52,83388,83389],{"class":79},"    Object.assign(oo, o)\n",[52,83391,83392],{"class":54,"line":138},[52,83393,83394],{"class":79},"    console.log(oo)\n",[52,83396,83397],{"class":54,"line":144},[52,83398,83399],{"class":79},"    Object.assign(o, { gender: '女' })\n",[52,83401,83402],{"class":54,"line":153},[52,83403,83404],{"class":79},"    console.log(o)\n",[52,83406,83407,83409,83411],{"class":54,"line":159},[52,83408,55067],{"class":79},[52,83410,54463],{"class":53950},[52,83412,53957],{"class":79},[52,83414,83415,83417,83419],{"class":54,"line":167},[52,83416,54435],{"class":79},[52,83418,54450],{"class":53950},[52,83420,53957],{"class":79},[14,83422,83423],{},[4509,83424],{"alt":47,"src":83425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[24646,83427,83429],{"id":83428},"_41052-array","4.10.5.2 Array",[14,83431,83432],{},"Array 是内置的构造函数，用于创建数组",[14,83434,83435],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[42,83437,83439],{"className":53283,"code":83438,"language":53285,"meta":47,"style":47},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[49,83440,83441,83446],{"__ignoreMap":47},[52,83442,83443],{"class":54,"line":55},[52,83444,83445],{"class":79},"const arr=new Array(3,5)\n",[52,83447,83448],{"class":54,"line":66},[52,83449,83450],{"class":79},"console.log(arr)  \u002F\u002F[3,5]\n",[14,83452,83453],{},"Array的实例方法，这个方法是实例成员",[14,83455,83456],{},[4509,83457],{"alt":47,"src":83458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[25558,83460,83462],{"id":83461},"_410521-reduce","4.10.5.2.1 reduce",[14,83464,83465],{},[4509,83466],{"alt":47,"src":83467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[42,83469,83471],{"className":55717,"code":83470,"language":55719,"meta":47,"style":47},"\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",[49,83472,83473,83481,83489,83494,83499,83504,83509,83513,83518,83523,83528,83532,83537,83542,83546,83551,83556,83561,83569],{"__ignoreMap":47},[52,83474,83475,83477,83479],{"class":54,"line":55},[52,83476,698],{"class":79},[52,83478,54450],{"class":53950},[52,83480,53957],{"class":79},[52,83482,83483,83485,83487],{"class":54,"line":66},[52,83484,54794],{"class":79},[52,83486,54463],{"class":53950},[52,83488,53957],{"class":79},[52,83490,83491],{"class":54,"line":83},[52,83492,83493],{"class":79},"    const arr = [1, 5, 8]\n",[52,83495,83496],{"class":54,"line":91},[52,83497,83498],{"class":79},"    \u002F\u002F 1.没有初始值\n",[52,83500,83501],{"class":54,"line":98},[52,83502,83503],{"class":79},"    const total = arr.reduce(function (prev, current) {\n",[52,83505,83506],{"class":54,"line":107},[52,83507,83508],{"class":79},"      return prev + current\n",[52,83510,83511],{"class":54,"line":113},[52,83512,36111],{"class":79},[52,83514,83515],{"class":54,"line":119},[52,83516,83517],{"class":79},"    console.log(total)   \u002F\u002F14\n",[52,83519,83520],{"class":54,"line":126},[52,83521,83522],{"class":79},"    \u002F\u002F 2.有初始值\n",[52,83524,83525],{"class":54,"line":132},[52,83526,83527],{"class":79},"    const total1 = arr.reduce(function (prev, current) {\n",[52,83529,83530],{"class":54,"line":138},[52,83531,83508],{"class":79},[52,83533,83534],{"class":54,"line":144},[52,83535,83536],{"class":79},"    }, 10)\n",[52,83538,83539],{"class":54,"line":153},[52,83540,83541],{"class":79},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[52,83543,83544],{"class":54,"line":159},[52,83545,123],{"emptyLinePlaceholder":122},[52,83547,83548],{"class":54,"line":167},[52,83549,83550],{"class":79},"    \u002F\u002F 3.箭头函数写法\n",[52,83552,83553],{"class":54,"line":173},[52,83554,83555],{"class":79},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[52,83557,83558],{"class":54,"line":181},[52,83559,83560],{"class":79},"    console.log(total2)   \u002F\u002F24\n",[52,83562,83563,83565,83567],{"class":54,"line":186},[52,83564,55067],{"class":79},[52,83566,54463],{"class":53950},[52,83568,53957],{"class":79},[52,83570,83571,83573,83575],{"class":54,"line":191},[52,83572,54435],{"class":79},[52,83574,54450],{"class":53950},[52,83576,53957],{"class":79},[14,83578,83579],{},"执行过程：",[1696,83581,83582,83585,83588],{},[32,83583,83584],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[32,83586,83587],{},"每一次循环，把返回值给作为下一次循环的上一次值",[32,83589,83590],{},"如果有起始值，则起始值作为上一次值",[42,83592,83594],{"className":55717,"code":83593,"language":55719,"meta":47,"style":47},"\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",[49,83595,83596,83604,83612,83616,83620,83624,83628,83632,83636,83641,83646,83651,83656,83661,83665,83669,83673,83677,83681,83685,83690,83694,83699,83703,83708,83713,83717,83721,83725,83733],{"__ignoreMap":47},[52,83597,83598,83600,83602],{"class":54,"line":55},[52,83599,698],{"class":79},[52,83601,54450],{"class":53950},[52,83603,53957],{"class":79},[52,83605,83606,83608,83610],{"class":54,"line":66},[52,83607,54794],{"class":79},[52,83609,54463],{"class":53950},[52,83611,53957],{"class":79},[52,83613,83614],{"class":54,"line":83},[52,83615,83493],{"class":79},[52,83617,83618],{"class":54,"line":91},[52,83619,83498],{"class":79},[52,83621,83622],{"class":54,"line":98},[52,83623,83503],{"class":79},[52,83625,83626],{"class":54,"line":107},[52,83627,83508],{"class":79},[52,83629,83630],{"class":54,"line":113},[52,83631,36111],{"class":79},[52,83633,83634],{"class":54,"line":119},[52,83635,83517],{"class":79},[52,83637,83638],{"class":54,"line":126},[52,83639,83640],{"class":79},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[52,83642,83643],{"class":54,"line":132},[52,83644,83645],{"class":79},"    \u002F\u002F     1              5                    6\n",[52,83647,83648],{"class":54,"line":138},[52,83649,83650],{"class":79},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[52,83652,83653],{"class":54,"line":144},[52,83654,83655],{"class":79},"    \u002F\u002F     6              8                    14\n",[52,83657,83658],{"class":54,"line":153},[52,83659,83660],{"class":79},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[52,83662,83663],{"class":54,"line":159},[52,83664,83522],{"class":79},[52,83666,83667],{"class":54,"line":167},[52,83668,83527],{"class":79},[52,83670,83671],{"class":54,"line":173},[52,83672,83508],{"class":79},[52,83674,83675],{"class":54,"line":181},[52,83676,83536],{"class":79},[52,83678,83679],{"class":54,"line":186},[52,83680,83541],{"class":79},[52,83682,83683],{"class":54,"line":191},[52,83684,83640],{"class":79},[52,83686,83687],{"class":54,"line":196},[52,83688,83689],{"class":79},"    \u002F\u002F     10             1                     11\n",[52,83691,83692],{"class":54,"line":201},[52,83693,83650],{"class":79},[52,83695,83696],{"class":54,"line":206},[52,83697,83698],{"class":79},"    \u002F\u002F     11             5                    16\n",[52,83700,83701],{"class":54,"line":211},[52,83702,83650],{"class":79},[52,83704,83705],{"class":54,"line":218},[52,83706,83707],{"class":79},"    \u002F\u002F     16             8                    24\n",[52,83709,83710],{"class":54,"line":223},[52,83711,83712],{"class":79},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[52,83714,83715],{"class":54,"line":230},[52,83716,83550],{"class":79},[52,83718,83719],{"class":54,"line":239},[52,83720,83555],{"class":79},[52,83722,83723],{"class":54,"line":251},[52,83724,83560],{"class":79},[52,83726,83727,83729,83731],{"class":54,"line":256},[52,83728,55067],{"class":79},[52,83730,54463],{"class":53950},[52,83732,53957],{"class":79},[52,83734,83735,83737,83739],{"class":54,"line":262},[52,83736,54435],{"class":79},[52,83738,54450],{"class":53950},[52,83740,53957],{"class":79},[25558,83742,83744],{"id":83743},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,83746,83747],{},[4509,83748],{"alt":47,"src":83749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[42,83751,83753],{"className":55717,"code":83752,"language":55719,"meta":47,"style":47},"\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",[49,83754,83755,83763,83771,83776,83781,83786,83791,83795,83800,83805,83810,83815,83820,83825,83829,83834,83838,83843,83851],{"__ignoreMap":47},[52,83756,83757,83759,83761],{"class":54,"line":55},[52,83758,698],{"class":79},[52,83760,54450],{"class":53950},[52,83762,53957],{"class":79},[52,83764,83765,83767,83769],{"class":54,"line":66},[52,83766,54794],{"class":79},[52,83768,54463],{"class":53950},[52,83770,53957],{"class":79},[52,83772,83773],{"class":54,"line":83},[52,83774,83775],{"class":79},"    const arr = [\n",[52,83777,83778],{"class":54,"line":91},[52,83779,83780],{"class":79},"      { name: '张三', salary: 10000 },\n",[52,83782,83783],{"class":54,"line":98},[52,83784,83785],{"class":79},"      { name: '李四', salary: 10000 },\n",[52,83787,83788],{"class":54,"line":107},[52,83789,83790],{"class":79},"      { name: '王五', salary: 10000 }\n",[52,83792,83793],{"class":54,"line":113},[52,83794,55759],{"class":79},[52,83796,83797],{"class":54,"line":119},[52,83798,83799],{"class":79},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[52,83801,83802],{"class":54,"line":126},[52,83803,83804],{"class":79},"    \u002F\u002F prev是累计值\n",[52,83806,83807],{"class":54,"line":132},[52,83808,83809],{"class":79},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[52,83811,83812],{"class":54,"line":138},[52,83813,83814],{"class":79},"    console.log(total)\n",[52,83816,83817],{"class":54,"line":144},[52,83818,83819],{"class":79},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[52,83821,83822],{"class":54,"line":153},[52,83823,83824],{"class":79},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[52,83826,83827],{"class":54,"line":159},[52,83828,83819],{"class":79},[52,83830,83831],{"class":54,"line":167},[52,83832,83833],{"class":79},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[52,83835,83836],{"class":54,"line":173},[52,83837,83819],{"class":79},[52,83839,83840],{"class":54,"line":181},[52,83841,83842],{"class":79},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[52,83844,83845,83847,83849],{"class":54,"line":186},[52,83846,55067],{"class":79},[52,83848,54463],{"class":53950},[52,83850,53957],{"class":79},[52,83852,83853,83855,83857],{"class":54,"line":191},[52,83854,54435],{"class":79},[52,83856,54450],{"class":53950},[52,83858,53957],{"class":79},[25558,83860,83862],{"id":83861},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,83864,83865],{},[4509,83866],{"alt":47,"src":83867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,83869,83870],{},[4509,83871],{"alt":47,"src":83872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[1696,83874,83875],{},[32,83876,83877],{},"find()",[14,83879,83880],{},"循环查找，找到第一个就ok",[14,83882,83883],{},[3451,83884,83887],{"href":83885,"rel":83886},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[26514],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[42,83889,83891],{"className":53283,"code":83890,"language":53285,"meta":47,"style":47},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[49,83892,83893,83898,83903],{"__ignoreMap":47},[52,83894,83895],{"class":54,"line":55},[52,83896,83897],{"class":79},"const array1 = [5, 12, 8, 130, 44]\n",[52,83899,83900],{"class":54,"line":66},[52,83901,83902],{"class":79},"const found = array1.find((element) => element > 10)\n",[52,83904,83905],{"class":54,"line":83},[52,83906,83907],{"class":79},"console.log(found)  \u002F\u002F12\n",[14,83909,83910,83912,83913,83918,83919,83922,83923,83925,83926,83931,83932,83934,83935,83937,83938,83940,83941],{},[49,83911,83877],{}," 方法是一个",[3451,83914,83917],{"href":83915,"rel":83916},"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",[26514],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[49,83920,83921],{},"callbackFn"," 函数，直到 ",[49,83924,83921],{}," 返回一个",[3451,83927,83930],{"href":83928,"rel":83929},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[26514],"真值","。然后 ",[49,83933,83877],{}," 返回该元素并停止迭代数组。如果 ",[49,83936,83921],{}," 从未返回真值，则 ",[49,83939,83877],{}," 返回 ",[49,83942,83943],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[42,83945,83947],{"className":55717,"code":83946,"language":55719,"meta":47,"style":47},"\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",[49,83948,83949,83957,83965,83970,83975,83980,83984,83989,83994,83998,84003,84008,84012,84016,84021,84026,84030,84034,84039,84044,84049,84054,84059,84063,84068,84073,84078,84083,84087,84092,84100],{"__ignoreMap":47},[52,83950,83951,83953,83955],{"class":54,"line":55},[52,83952,698],{"class":79},[52,83954,54450],{"class":53950},[52,83956,53957],{"class":79},[52,83958,83959,83961,83963],{"class":54,"line":66},[52,83960,54794],{"class":79},[52,83962,54463],{"class":53950},[52,83964,53957],{"class":79},[52,83966,83967],{"class":54,"line":83},[52,83968,83969],{"class":79},"    const arr = ['red', 'blue', 'green']\n",[52,83971,83972],{"class":54,"line":91},[52,83973,83974],{"class":79},"    const found = arr.find(item => item === 'pink')\n",[52,83976,83977],{"class":54,"line":98},[52,83978,83979],{"class":79},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[52,83981,83982],{"class":54,"line":107},[52,83983,123],{"emptyLinePlaceholder":122},[52,83985,83986],{"class":54,"line":113},[52,83987,83988],{"class":79},"    \u002F\u002F 使用场景，用于查找数据\n",[52,83990,83991],{"class":54,"line":119},[52,83992,83993],{"class":79},"    const arr1 = [\n",[52,83995,83996],{"class":54,"line":126},[52,83997,82036],{"class":79},[52,83999,84000],{"class":54,"line":132},[52,84001,84002],{"class":79},"        name: '小米',\n",[52,84004,84005],{"class":54,"line":138},[52,84006,84007],{"class":79},"        price: 1999\n",[52,84009,84010],{"class":54,"line":144},[52,84011,80542],{"class":79},[52,84013,84014],{"class":54,"line":153},[52,84015,82036],{"class":79},[52,84017,84018],{"class":54,"line":159},[52,84019,84020],{"class":79},"        name: '华为',\n",[52,84022,84023],{"class":54,"line":167},[52,84024,84025],{"class":79},"        price: 3999\n",[52,84027,84028],{"class":54,"line":173},[52,84029,55048],{"class":79},[52,84031,84032],{"class":54,"line":181},[52,84033,55759],{"class":79},[52,84035,84036],{"class":54,"line":186},[52,84037,84038],{"class":79},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[52,84040,84041],{"class":54,"line":191},[52,84042,84043],{"class":79},"    \u002F\u002F const found1 = arr1.find(item => {\n",[52,84045,84046],{"class":54,"line":196},[52,84047,84048],{"class":79},"    \u002F\u002F   if (item.name === '小米') {\n",[52,84050,84051],{"class":54,"line":201},[52,84052,84053],{"class":79},"    \u002F\u002F     return item\n",[52,84055,84056],{"class":54,"line":206},[52,84057,84058],{"class":79},"    \u002F\u002F   }\n",[52,84060,84061],{"class":54,"line":211},[52,84062,65940],{"class":79},[52,84064,84065],{"class":54,"line":218},[52,84066,84067],{"class":79},"    \u002F\u002F 另一种写法\n",[52,84069,84070],{"class":54,"line":223},[52,84071,84072],{"class":79},"    const found1 = arr1.find(item => {\n",[52,84074,84075],{"class":54,"line":230},[52,84076,84077],{"class":79},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[52,84079,84080],{"class":54,"line":239},[52,84081,84082],{"class":79},"      return item.name = '小米'\n",[52,84084,84085],{"class":54,"line":251},[52,84086,36111],{"class":79},[52,84088,84089],{"class":54,"line":256},[52,84090,84091],{"class":79},"    console.log(found1)\n",[52,84093,84094,84096,84098],{"class":54,"line":262},[52,84095,55067],{"class":79},[52,84097,54463],{"class":53950},[52,84099,53957],{"class":79},[52,84101,84102,84104,84106],{"class":54,"line":268},[52,84103,54435],{"class":79},[52,84105,54450],{"class":53950},[52,84107,53957],{"class":79},[14,84109,84110],{},[4509,84111],{"alt":47,"src":84112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,84114,84115],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[1696,84117,84118],{"start":66},[32,84119,84120],{},"every()返回的是布尔值",[14,84122,84123],{},[3451,84124,84127],{"href":84125,"rel":84126},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[26514],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,84129,84130],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,84132,84133],{},"some是只有有一个就没问题",[14,84135,84136],{},"every是必须全是才行",[42,84138,84142],{"className":84139,"code":84140,"language":84141,"meta":47,"style":47},"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",[49,84143,84144,84160,84174,84178,84187],{"__ignoreMap":47},[52,84145,84146,84148,84151,84153,84155,84158],{"class":54,"line":55},[52,84147,57099],{"class":58},[52,84149,84150],{"class":79}," isBigEnough(element, ",[52,84152,76708],{"class":58},[52,84154,15083],{"class":79},[52,84156,84157],{"class":58},"array",[52,84159,15090],{"class":79},[52,84161,84162,84165,84168,84170,84172],{"class":54,"line":66},[52,84163,84164],{"class":58},"  return",[52,84166,84167],{"class":79}," element ",[52,84169,4742],{"class":58},[52,84171,5051],{"class":308},[52,84173,80],{"class":79},[52,84175,84176],{"class":54,"line":83},[52,84177,452],{"class":79},[52,84179,84180,84183,84185],{"class":54,"line":91},[52,84181,84182],{"class":79},"[12, 5, 8, 130, 44].every(isBigEnough); ",[52,84184,35979],{"class":58},[52,84186,57166],{"class":79},[52,84188,84189,84192,84194],{"class":54,"line":98},[52,84190,84191],{"class":79},"[12, 54, 18, 130, 44].every(isBigEnough); ",[52,84193,35979],{"class":58},[52,84195,60590],{"class":79},[42,84197,84199],{"className":55717,"code":84198,"language":55719,"meta":47,"style":47},"\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",[49,84200,84201,84209,84217,84222,84226,84231,84236,84244],{"__ignoreMap":47},[52,84202,84203,84205,84207],{"class":54,"line":55},[52,84204,698],{"class":79},[52,84206,54450],{"class":53950},[52,84208,53957],{"class":79},[52,84210,84211,84213,84215],{"class":54,"line":66},[52,84212,54794],{"class":79},[52,84214,54463],{"class":53950},[52,84216,53957],{"class":79},[52,84218,84219],{"class":54,"line":83},[52,84220,84221],{"class":79},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[52,84223,84224],{"class":54,"line":91},[52,84225,80972],{"class":79},[52,84227,84228],{"class":54,"line":98},[52,84229,84230],{"class":79},"    const flag = arr.every(item => item >= 10)\n",[52,84232,84233],{"class":54,"line":107},[52,84234,84235],{"class":79},"    console.log(flag)    \u002F\u002Ftrue\n",[52,84237,84238,84240,84242],{"class":54,"line":113},[52,84239,55067],{"class":79},[52,84241,54463],{"class":53950},[52,84243,53957],{"class":79},[52,84245,84246,84248,84250],{"class":54,"line":119},[52,84247,54435],{"class":79},[52,84249,54450],{"class":53950},[52,84251,53957],{"class":79},[42,84253,84255],{"className":55717,"code":84254,"language":55719,"meta":47,"style":47},"\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",[49,84256,84257,84265,84273,84277,84282,84287,84292,84300],{"__ignoreMap":47},[52,84258,84259,84261,84263],{"class":54,"line":55},[52,84260,698],{"class":79},[52,84262,54450],{"class":53950},[52,84264,53957],{"class":79},[52,84266,84267,84269,84271],{"class":54,"line":66},[52,84268,54794],{"class":79},[52,84270,54463],{"class":53950},[52,84272,53957],{"class":79},[52,84274,84275],{"class":54,"line":83},[52,84276,84221],{"class":79},[52,84278,84279],{"class":54,"line":91},[52,84280,84281],{"class":79},"    const arr = [10, 0, 5]\n",[52,84283,84284],{"class":54,"line":98},[52,84285,84286],{"class":79},"    const flag = arr.some(item => item >= 10)\n",[52,84288,84289],{"class":54,"line":107},[52,84290,84291],{"class":79},"    console.log(flag)   \u002F\u002Ftrue\n",[52,84293,84294,84296,84298],{"class":54,"line":113},[52,84295,55067],{"class":79},[52,84297,54463],{"class":53950},[52,84299,53957],{"class":79},[52,84301,84302,84304,84306],{"class":54,"line":119},[52,84303,54435],{"class":79},[52,84305,54450],{"class":53950},[52,84307,53957],{"class":79},[25558,84309,84311],{"id":84310},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,84313,84314],{},[4509,84315],{"alt":47,"src":84316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[42,84318,84320],{"className":53283,"code":84319,"language":53285,"meta":47,"style":47},"\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",[49,84321,84322,84332,84346,84350,84358,84372,84392,84404,84412,84419,84431,84443,84455,84467,84477,84487,84491,84499,84507,84511,84519,84531,84539,84561,84566,84571,84604,84612,84620,84624],{"__ignoreMap":47},[52,84323,84324,84326,84328,84330],{"class":54,"line":55},[52,84325,53947],{"class":79},[52,84327,53951],{"class":53950},[52,84329,53954],{"class":75},[52,84331,53957],{"class":79},[52,84333,84334,84336,84338,84340,84342,84344],{"class":54,"line":66},[52,84335,698],{"class":79},[52,84337,53285],{"class":53950},[52,84339,53966],{"class":75},[52,84341,292],{"class":79},[52,84343,53971],{"class":62},[52,84345,53957],{"class":79},[52,84347,84348],{"class":54,"line":83},[52,84349,123],{"emptyLinePlaceholder":122},[52,84351,84352,84354,84356],{"class":54,"line":91},[52,84353,698],{"class":79},[52,84355,53984],{"class":53950},[52,84357,53957],{"class":79},[52,84359,84360,84362,84364,84366,84368,84370],{"class":54,"line":98},[52,84361,54794],{"class":79},[52,84363,53994],{"class":53950},[52,84365,53997],{"class":75},[52,84367,292],{"class":79},[52,84369,54002],{"class":62},[52,84371,53957],{"class":79},[52,84373,84374,84376,84378,84380,84382,84384,84386,84388,84390],{"class":54,"line":107},[52,84375,54794],{"class":79},[52,84377,53994],{"class":53950},[52,84379,17568],{"class":75},[52,84381,292],{"class":79},[52,84383,54041],{"class":62},[52,84385,54021],{"class":75},[52,84387,292],{"class":79},[52,84389,54048],{"class":62},[52,84391,53957],{"class":79},[52,84393,84394,84396,84398,84400,84402],{"class":54,"line":113},[52,84395,54794],{"class":79},[52,84397,54057],{"class":53950},[52,84399,54060],{"class":79},[52,84401,54057],{"class":53950},[52,84403,53957],{"class":79},[52,84405,84406,84408,84410],{"class":54,"line":119},[52,84407,54794],{"class":79},[52,84409,3141],{"class":53950},[52,84411,53957],{"class":79},[52,84413,84414,84417],{"class":54,"line":126},[52,84415,84416],{"class":53950},"    div",[52,84418,18220],{"class":79},[52,84420,84421,84423,84425,84427,84429],{"class":54,"line":132},[52,84422,57421],{"class":308},[52,84424,54087],{"class":79},[52,84426,856],{"class":308},[52,84428,54142],{"class":58},[52,84430,80],{"class":79},[52,84432,84433,84435,84437,84439,84441],{"class":54,"line":138},[52,84434,57435],{"class":308},[52,84436,54087],{"class":79},[52,84438,2007],{"class":308},[52,84440,54142],{"class":58},[52,84442,80],{"class":79},[52,84444,84445,84447,84449,84451,84453],{"class":54,"line":144},[52,84446,60009],{"class":308},[52,84448,54087],{"class":79},[52,84450,2007],{"class":308},[52,84452,54142],{"class":58},[52,84454,80],{"class":79},[52,84456,84457,84459,84461,84463,84465],{"class":54,"line":153},[52,84458,67783],{"class":308},[52,84460,54087],{"class":79},[52,84462,3698],{"class":308},[52,84464,54142],{"class":58},[52,84466,80],{"class":79},[52,84468,84469,84471,84473,84475],{"class":54,"line":159},[52,84470,59936],{"class":308},[52,84472,54087],{"class":79},[52,84474,54242],{"class":308},[52,84476,80],{"class":79},[52,84478,84479,84481,84483,84485],{"class":54,"line":167},[52,84480,57534],{"class":308},[52,84482,54087],{"class":79},[52,84484,54295],{"class":308},[52,84486,80],{"class":79},[52,84488,84489],{"class":54,"line":173},[52,84490,616],{"class":79},[52,84492,84493,84495,84497],{"class":54,"line":181},[52,84494,55067],{"class":79},[52,84496,3141],{"class":53950},[52,84498,53957],{"class":79},[52,84500,84501,84503,84505],{"class":54,"line":186},[52,84502,54435],{"class":79},[52,84504,53984],{"class":53950},[52,84506,53957],{"class":79},[52,84508,84509],{"class":54,"line":191},[52,84510,123],{"emptyLinePlaceholder":122},[52,84512,84513,84515,84517],{"class":54,"line":196},[52,84514,698],{"class":79},[52,84516,54450],{"class":53950},[52,84518,53957],{"class":79},[52,84520,84521,84523,84525,84527,84529],{"class":54,"line":201},[52,84522,54794],{"class":79},[52,84524,54261],{"class":53950},[52,84526,57964],{"class":79},[52,84528,54261],{"class":53950},[52,84530,53957],{"class":79},[52,84532,84533,84535,84537],{"class":54,"line":206},[52,84534,54794],{"class":79},[52,84536,54463],{"class":53950},[52,84538,53957],{"class":79},[52,84540,84541,84543,84546,84548,84551,84554,84556,84559],{"class":54,"line":211},[52,84542,13869],{"class":58},[52,84544,84545],{"class":308}," spec",[52,84547,16212],{"class":58},[52,84549,84550],{"class":79}," { size: ",[52,84552,84553],{"class":62},"'40cm*40cm'",[52,84555,58114],{"class":79},[52,84557,84558],{"class":62},"'黑色'",[52,84560,58254],{"class":79},[52,84562,84563],{"class":54,"line":218},[52,84564,84565],{"class":94},"    \u002F\u002F const arr = Object.values(spec)\n",[52,84567,84568],{"class":54,"line":223},[52,84569,84570],{"class":94},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[52,84572,84573,84575,84577,84579,84582,84584,84586,84589,84592,84595,84597,84599,84602],{"class":54,"line":230},[52,84574,55057],{"class":79},[52,84576,57049],{"class":75},[52,84578,1216],{"class":79},[52,84580,84581],{"class":62},"'div'",[52,84583,76899],{"class":79},[52,84585,292],{"class":58},[52,84587,84588],{"class":79}," Object.",[52,84590,84591],{"class":75},"values",[52,84593,84594],{"class":79},"(spec).",[52,84596,76873],{"class":75},[52,84598,1216],{"class":79},[52,84600,84601],{"class":62},"'\u002F'",[52,84603,708],{"class":79},[52,84605,84606,84608,84610],{"class":54,"line":239},[52,84607,55067],{"class":79},[52,84609,54463],{"class":53950},[52,84611,53957],{"class":79},[52,84613,84614,84616,84618],{"class":54,"line":251},[52,84615,54435],{"class":79},[52,84617,54450],{"class":53950},[52,84619,53957],{"class":79},[52,84621,84622],{"class":54,"line":256},[52,84623,123],{"emptyLinePlaceholder":122},[52,84625,84626,84628,84630],{"class":54,"line":262},[52,84627,54435],{"class":79},[52,84629,53285],{"class":53950},[52,84631,53957],{"class":79},[14,84633,84634],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[25558,84636,84638],{"id":84637},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,84640,84641],{},"静态方法，将伪数组转换为真数组",[14,84643,84644],{},[4509,84645],{"alt":47,"src":84646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[42,84648,84650],{"className":55717,"code":84649,"language":55719,"meta":47,"style":47},"\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",[49,84651,84652,84660,84668,84680,84692,84704,84712,84720,84725,84730,84735,84740,84748],{"__ignoreMap":47},[52,84653,84654,84656,84658],{"class":54,"line":55},[52,84655,698],{"class":79},[52,84657,54450],{"class":53950},[52,84659,53957],{"class":79},[52,84661,84662,84664,84666],{"class":54,"line":66},[52,84663,54794],{"class":79},[52,84665,29],{"class":53950},[52,84667,53957],{"class":79},[52,84669,84670,84672,84674,84676,84678],{"class":54,"line":83},[52,84671,53991],{"class":79},[52,84673,32],{"class":53950},[52,84675,57964],{"class":79},[52,84677,32],{"class":53950},[52,84679,53957],{"class":79},[52,84681,84682,84684,84686,84688,84690],{"class":54,"line":91},[52,84683,53991],{"class":79},[52,84685,32],{"class":53950},[52,84687,57964],{"class":79},[52,84689,32],{"class":53950},[52,84691,53957],{"class":79},[52,84693,84694,84696,84698,84700,84702],{"class":54,"line":98},[52,84695,53991],{"class":79},[52,84697,32],{"class":53950},[52,84699,57964],{"class":79},[52,84701,32],{"class":53950},[52,84703,53957],{"class":79},[52,84705,84706,84708,84710],{"class":54,"line":107},[52,84707,55067],{"class":79},[52,84709,29],{"class":53950},[52,84711,53957],{"class":79},[52,84713,84714,84716,84718],{"class":54,"line":113},[52,84715,54794],{"class":79},[52,84717,54463],{"class":53950},[52,84719,53957],{"class":79},[52,84721,84722],{"class":54,"line":119},[52,84723,84724],{"class":79},"    const lis = document.querySelectorAll('li')\n",[52,84726,84727],{"class":54,"line":126},[52,84728,84729],{"class":79},"    const liss = Array.from(lis)\n",[52,84731,84732],{"class":54,"line":132},[52,84733,84734],{"class":79},"    liss.pop()\n",[52,84736,84737],{"class":54,"line":138},[52,84738,84739],{"class":79},"    console.log(liss)\n",[52,84741,84742,84744,84746],{"class":54,"line":144},[52,84743,55067],{"class":79},[52,84745,54463],{"class":53950},[52,84747,53957],{"class":79},[52,84749,84750,84752,84754],{"class":54,"line":153},[52,84751,54435],{"class":79},[52,84753,54450],{"class":53950},[52,84755,53957],{"class":79},[14,84757,84758],{},[4509,84759],{"alt":47,"src":84760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[24646,84762,84764],{"id":84763},"_41053-string","4.10.5.3 String",[14,84766,84767],{},[4509,84768],{"alt":47,"src":84769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[25558,84771,84773],{"id":84772},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[42,84775,84777],{"className":55717,"code":84776,"language":55719,"meta":47,"style":47},"\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",[49,84778,84779,84787,84795,84800,84805,84810,84814,84819,84824,84829,84837],{"__ignoreMap":47},[52,84780,84781,84783,84785],{"class":54,"line":55},[52,84782,698],{"class":79},[52,84784,54450],{"class":53950},[52,84786,53957],{"class":79},[52,84788,84789,84791,84793],{"class":54,"line":66},[52,84790,54794],{"class":79},[52,84792,54463],{"class":53950},[52,84794,53957],{"class":79},[52,84796,84797],{"class":54,"line":83},[52,84798,84799],{"class":79},"    \u002F\u002F 把字符串转化为数组\n",[52,84801,84802],{"class":54,"line":91},[52,84803,84804],{"class":79},"    const str = 'pink,red'\n",[52,84806,84807],{"class":54,"line":98},[52,84808,84809],{"class":79},"    const arr = str.split(',')\n",[52,84811,84812],{"class":54,"line":107},[52,84813,83288],{"class":79},[52,84815,84816],{"class":54,"line":113},[52,84817,84818],{"class":79},"    const str1 = '2025-8-25'\n",[52,84820,84821],{"class":54,"line":119},[52,84822,84823],{"class":79},"    const arr1 = str1.split('-')\n",[52,84825,84826],{"class":54,"line":126},[52,84827,84828],{"class":79},"    console.log(arr1)\n",[52,84830,84831,84833,84835],{"class":54,"line":132},[52,84832,55067],{"class":79},[52,84834,54463],{"class":53950},[52,84836,53957],{"class":79},[52,84838,84839,84841,84843],{"class":54,"line":138},[52,84840,54435],{"class":79},[52,84842,54450],{"class":53950},[52,84844,53957],{"class":79},[25558,84846,84848],{"id":84847},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,84850,8148],{},[14,84852,84853],{},"substring(indexStart)",[14,84855,84856],{},"substring(indexStart, indexEnd)",[29,84858,84859,84870,84882,84892],{},[32,84860,84861,84862,84865,84866,84869],{},"如果省略了 ",[49,84863,84864],{},"indexEnd","，则 ",[49,84867,84868],{},"substring()"," 提取字符直到字符串的末尾",[32,84871,84872,84873,84876,84877,84865,84879,84881],{},"如果 ",[49,84874,84875],{},"indexStart"," 等于 ",[49,84878,84864],{},[49,84880,84868],{}," 返回一个空字符串",[32,84883,84872,84884,84886,84887,84865,84889,84891],{},[49,84885,84875],{}," 大于 ",[49,84888,84864],{},[49,84890,84868],{}," 的效果就像交换了这两个参数一样",[32,84893,84894],{},"结束的索引号不包含想要截取的部分",[42,84896,84898],{"className":84139,"code":84897,"language":84141,"meta":47,"style":47},"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",[49,84899,84900,84912,84916,84950,84980,84984,85015,85019,85046,85076,85106,85110,85141],{"__ignoreMap":47},[52,84901,84902,84905,84907,84910],{"class":54,"line":55},[52,84903,84904],{"class":79},"const anyString ",[52,84906,292],{"class":58},[52,84908,84909],{"class":62}," \"Mozilla\"",[52,84911,80],{"class":79},[52,84913,84914],{"class":54,"line":66},[52,84915,123],{"emptyLinePlaceholder":122},[52,84917,84918,84921,84923,84925,84927,84930,84932,84935,84937,84939,84941,84943,84945,84947],{"class":54,"line":83},[52,84919,84920],{"class":308},"console",[52,84922,3757],{"class":79},[52,84924,60897],{"class":308},[52,84926,1216],{"class":79},[52,84928,84929],{"class":308},"anyString",[52,84931,3757],{"class":79},[52,84933,84934],{"class":308},"substring",[52,84936,1216],{"class":79},[52,84938,692],{"class":308},[52,84940,15083],{"class":79},[52,84942,629],{"class":308},[52,84944,77903],{"class":79},[52,84946,35979],{"class":58},[52,84948,84949],{"class":62}," 'M'\n",[52,84951,84952,84954,84956,84958,84960,84962,84964,84966,84968,84970,84972,84974,84976,84978],{"class":54,"line":91},[52,84953,84920],{"class":308},[52,84955,3757],{"class":79},[52,84957,60897],{"class":308},[52,84959,1216],{"class":79},[52,84961,84929],{"class":308},[52,84963,3757],{"class":79},[52,84965,84934],{"class":308},[52,84967,1216],{"class":79},[52,84969,629],{"class":308},[52,84971,15083],{"class":79},[52,84973,692],{"class":308},[52,84975,77903],{"class":79},[52,84977,35979],{"class":58},[52,84979,84949],{"class":62},[52,84981,84982],{"class":54,"line":98},[52,84983,123],{"emptyLinePlaceholder":122},[52,84985,84986,84988,84990,84992,84994,84996,84998,85000,85002,85004,85006,85008,85010,85012],{"class":54,"line":107},[52,84987,84920],{"class":308},[52,84989,3757],{"class":79},[52,84991,60897],{"class":308},[52,84993,1216],{"class":79},[52,84995,84929],{"class":308},[52,84997,3757],{"class":79},[52,84999,84934],{"class":308},[52,85001,1216],{"class":79},[52,85003,692],{"class":308},[52,85005,15083],{"class":79},[52,85007,1125],{"class":308},[52,85009,77903],{"class":79},[52,85011,35979],{"class":58},[52,85013,85014],{"class":62}," 'Mozill'\n",[52,85016,85017],{"class":54,"line":113},[52,85018,123],{"emptyLinePlaceholder":122},[52,85020,85021,85023,85025,85027,85029,85031,85033,85035,85037,85039,85041,85043],{"class":54,"line":119},[52,85022,84920],{"class":308},[52,85024,3757],{"class":79},[52,85026,60897],{"class":308},[52,85028,1216],{"class":79},[52,85030,84929],{"class":308},[52,85032,3757],{"class":79},[52,85034,84934],{"class":308},[52,85036,1216],{"class":79},[52,85038,3504],{"class":308},[52,85040,77903],{"class":79},[52,85042,35979],{"class":58},[52,85044,85045],{"class":62}," 'lla'\n",[52,85047,85048,85050,85052,85054,85056,85058,85060,85062,85064,85066,85068,85070,85072,85074],{"class":54,"line":126},[52,85049,84920],{"class":308},[52,85051,3757],{"class":79},[52,85053,60897],{"class":308},[52,85055,1216],{"class":79},[52,85057,84929],{"class":308},[52,85059,3757],{"class":79},[52,85061,84934],{"class":308},[52,85063,1216],{"class":79},[52,85065,3504],{"class":308},[52,85067,15083],{"class":79},[52,85069,3575],{"class":308},[52,85071,77959],{"class":79},[52,85073,35979],{"class":58},[52,85075,85045],{"class":62},[52,85077,85078,85080,85082,85084,85086,85088,85090,85092,85094,85096,85098,85100,85102,85104],{"class":54,"line":132},[52,85079,84920],{"class":308},[52,85081,3757],{"class":79},[52,85083,60897],{"class":308},[52,85085,1216],{"class":79},[52,85087,84929],{"class":308},[52,85089,3757],{"class":79},[52,85091,84934],{"class":308},[52,85093,1216],{"class":79},[52,85095,3575],{"class":308},[52,85097,15083],{"class":79},[52,85099,3504],{"class":308},[52,85101,77903],{"class":79},[52,85103,35979],{"class":58},[52,85105,85045],{"class":62},[52,85107,85108],{"class":54,"line":138},[52,85109,123],{"emptyLinePlaceholder":122},[52,85111,85112,85114,85116,85118,85120,85122,85124,85126,85128,85130,85132,85134,85136,85138],{"class":54,"line":144},[52,85113,84920],{"class":308},[52,85115,3757],{"class":79},[52,85117,60897],{"class":308},[52,85119,1216],{"class":79},[52,85121,84929],{"class":308},[52,85123,3757],{"class":79},[52,85125,84934],{"class":308},[52,85127,1216],{"class":79},[52,85129,692],{"class":308},[52,85131,15083],{"class":79},[52,85133,3575],{"class":308},[52,85135,77903],{"class":79},[52,85137,35979],{"class":58},[52,85139,85140],{"class":62}," 'Mozilla'\n",[52,85142,85143,85145,85147,85149,85151,85153,85155,85157,85159,85161,85163,85165,85167,85169],{"class":54,"line":153},[52,85144,84920],{"class":308},[52,85146,3757],{"class":79},[52,85148,60897],{"class":308},[52,85150,1216],{"class":79},[52,85152,84929],{"class":308},[52,85154,3757],{"class":79},[52,85156,84934],{"class":308},[52,85158,1216],{"class":79},[52,85160,692],{"class":308},[52,85162,15083],{"class":79},[52,85164,3649],{"class":308},[52,85166,77903],{"class":79},[52,85168,35979],{"class":58},[52,85170,85140],{"class":62},[25558,85172,85174],{"id":85173},"_410533-startswith","4.10.5.3.3 startsWith",[14,85176,85177,85180,85181,85186,85187,85189,85190],{},[49,85178,85179],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[2389,85182,85183],{},[49,85184,85185],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[49,85188,4410],{}," 或 ",[49,85191,68670],{},[42,85193,85195],{"className":80145,"code":85194,"language":80147,"meta":47,"style":47},"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",[49,85196,85197,85209,85228,85233,85253],{"__ignoreMap":47},[52,85198,85199,85201,85204,85206],{"class":54,"line":55},[52,85200,1648],{"class":58},[52,85202,85203],{"class":79}," str1 ",[52,85205,292],{"class":58},[52,85207,85208],{"class":62}," \"Saturday night plans\"\n",[52,85210,85211,85213,85215,85218,85221,85223,85226],{"class":54,"line":66},[52,85212,80182],{"class":79},[52,85214,60897],{"class":75},[52,85216,85217],{"class":79},"(str1.",[52,85219,85220],{"class":75},"startsWith",[52,85222,1216],{"class":79},[52,85224,85225],{"class":62},"\"Sat\"",[52,85227,33147],{"class":79},[52,85229,85230],{"class":54,"line":83},[52,85231,85232],{"class":94},"\u002F\u002F Expected output: true\n",[52,85234,85235,85237,85239,85241,85243,85245,85247,85249,85251],{"class":54,"line":91},[52,85236,80182],{"class":79},[52,85238,60897],{"class":75},[52,85240,85217],{"class":79},[52,85242,85220],{"class":75},[52,85244,1216],{"class":79},[52,85246,85225],{"class":62},[52,85248,15083],{"class":79},[52,85250,2313],{"class":308},[52,85252,33147],{"class":79},[52,85254,85255],{"class":54,"line":98},[52,85256,85257],{"class":94},"\u002F\u002F Expected output: false\n",[42,85259,85261],{"className":53283,"code":85260,"language":53285,"meta":47,"style":47},"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",[49,85262,85263,85268,85273,85277,85282,85287],{"__ignoreMap":47},[52,85264,85265],{"class":54,"line":55},[52,85266,85267],{"class":79},"startsWith(searchString)\n",[52,85269,85270],{"class":54,"line":66},[52,85271,85272],{"class":79},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[52,85274,85275],{"class":54,"line":83},[52,85276,123],{"emptyLinePlaceholder":122},[52,85278,85279],{"class":54,"line":91},[52,85280,85281],{"class":79},"const str3 = 'pink老师上课中'\n",[52,85283,85284],{"class":54,"line":98},[52,85285,85286],{"class":79},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[52,85288,85289],{"class":54,"line":107},[52,85290,85291],{"class":79},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[25558,85293,85295],{"id":85294},"_410534-includes","4.10.5.3.4 includes",[14,85297,85298],{},"includes(searchString) includes(searchString, position)",[1696,85300,85301],{},[32,85302,85303],{},"searchString:",[14,85305,85306,85307,85309,85310,85315,85316,85321,85322,24148,85325,85328,85329,85332],{},"一个要在 ",[49,85308,4350],{}," 中查找的字符串。",[3451,85311,85314],{"href":85312,"rel":85313},"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",[26514],"不能是正则表达式","。所有非正则表达式的值都会被",[3451,85317,85320],{"href":85318,"rel":85319},"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",[26514],"强制转换为字符串","，因此如果该参数被省略或传入 ",[49,85323,85324],{},"undefined",[49,85326,85327],{},"includes()"," 方法会在字符串中搜索 ",[49,85330,85331],{},"\"undefined\"","，这通常不是你想要的",[1696,85334,85335],{"start":66},[32,85336,85337,4049],{},[49,85338,85339],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,85341,85342,85343,85346,85347],{},"在字符串中开始搜索 ",[49,85344,85345],{},"searchString"," 的位置。默认值为 ",[49,85348,692],{},[1696,85350,85351],{"start":83},[32,85352,85353],{},"返回值：",[14,85355,85356,85357,85359,85360,85364,85365],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[49,85358,85345],{}," 为空字符串的情况），则返回 ",[2389,85361,85362],{},[49,85363,4410],{}," ，否则返回 ",[2389,85366,85367],{},[49,85368,68670],{},[1696,85370,85371],{"start":91},[32,85372,85373],{},"异常：",[14,85375,84872,85376,16443,85378,85382],{},[49,85377,85345],{},[3451,85379,85381],{"href":85312,"rel":85380},[26514],"是一个正则表达式","，则会抛出",[14,85384,85385],{},"只要是有就是true，不需要非得以谁开头结尾",[42,85387,85389],{"className":80145,"code":85388,"language":80147,"meta":47,"style":47},"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",[49,85390,85391,85402,85425,85444,85464,85486,85505],{"__ignoreMap":47},[52,85392,85393,85395,85397,85399],{"class":54,"line":55},[52,85394,1648],{"class":58},[52,85396,82425],{"class":79},[52,85398,292],{"class":58},[52,85400,85401],{"class":62}," \"To be, or not to be, that is the question.\"\n",[52,85403,85404,85406,85408,85411,85414,85416,85419,85422],{"class":54,"line":66},[52,85405,80182],{"class":79},[52,85407,60897],{"class":75},[52,85409,85410],{"class":79},"(str.",[52,85412,85413],{"class":75},"includes",[52,85415,1216],{"class":79},[52,85417,85418],{"class":62},"\"To be\"",[52,85420,85421],{"class":79},"))",[52,85423,85424],{"class":94},"  \u002F\u002F true\n",[52,85426,85427,85429,85431,85433,85435,85437,85440,85442],{"class":54,"line":83},[52,85428,80182],{"class":79},[52,85430,60897],{"class":75},[52,85432,85410],{"class":79},[52,85434,85413],{"class":75},[52,85436,1216],{"class":79},[52,85438,85439],{"class":62},"\"question\"",[52,85441,85421],{"class":79},[52,85443,85424],{"class":94},[52,85445,85446,85448,85450,85452,85454,85456,85459,85461],{"class":54,"line":91},[52,85447,80182],{"class":79},[52,85449,60897],{"class":75},[52,85451,85410],{"class":79},[52,85453,85413],{"class":75},[52,85455,1216],{"class":79},[52,85457,85458],{"class":62},"\"nonexistent\"",[52,85460,85421],{"class":79},[52,85462,85463],{"class":94},"  \u002F\u002F false\n",[52,85465,85466,85468,85470,85472,85474,85476,85478,85480,85482,85484],{"class":54,"line":98},[52,85467,80182],{"class":79},[52,85469,60897],{"class":75},[52,85471,85410],{"class":79},[52,85473,85413],{"class":75},[52,85475,1216],{"class":79},[52,85477,85418],{"class":62},[52,85479,15083],{"class":79},[52,85481,629],{"class":308},[52,85483,85421],{"class":79},[52,85485,85463],{"class":94},[52,85487,85488,85490,85492,85494,85496,85498,85501,85503],{"class":54,"line":107},[52,85489,80182],{"class":79},[52,85491,60897],{"class":75},[52,85493,85410],{"class":79},[52,85495,85413],{"class":75},[52,85497,1216],{"class":79},[52,85499,85500],{"class":62},"\"TO BE\"",[52,85502,85421],{"class":79},[52,85504,85463],{"class":94},[52,85506,85507,85509,85511,85513,85515,85517,85519,85521],{"class":54,"line":113},[52,85508,80182],{"class":79},[52,85510,60897],{"class":75},[52,85512,85410],{"class":79},[52,85514,85413],{"class":75},[52,85516,1216],{"class":79},[52,85518,10607],{"class":62},[52,85520,85421],{"class":79},[52,85522,85424],{"class":94},[25558,85524,85526],{"id":85525},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[42,85528,85530],{"className":55717,"code":85529,"language":55719,"meta":47,"style":47},"\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",[49,85531,85532,85540,85548,85553,85558,85563,85568,85573,85581],{"__ignoreMap":47},[52,85533,85534,85536,85538],{"class":54,"line":55},[52,85535,698],{"class":79},[52,85537,54450],{"class":53950},[52,85539,53957],{"class":79},[52,85541,85542,85544,85546],{"class":54,"line":66},[52,85543,54794],{"class":79},[52,85545,54463],{"class":53950},[52,85547,53957],{"class":79},[52,85549,85550],{"class":54,"line":83},[52,85551,85552],{"class":79},"    const num = 10\n",[52,85554,85555],{"class":54,"line":91},[52,85556,85557],{"class":79},"    \u002F\u002F 强制转换\n",[52,85559,85560],{"class":54,"line":98},[52,85561,85562],{"class":79},"    console.log(String(num))\n",[52,85564,85565],{"class":54,"line":107},[52,85566,85567],{"class":79},"    \u002F\u002F toString()方法转换\n",[52,85569,85570],{"class":54,"line":113},[52,85571,85572],{"class":79},"    console.log(num.toString())\n",[52,85574,85575,85577,85579],{"class":54,"line":119},[52,85576,55067],{"class":79},[52,85578,54463],{"class":53950},[52,85580,53957],{"class":79},[52,85582,85583,85585,85587],{"class":54,"line":126},[52,85584,54435],{"class":79},[52,85586,54450],{"class":53950},[52,85588,53957],{"class":79},[25558,85590,85592],{"id":85591},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,85594,85595],{},[4509,85596],{"alt":47,"src":85597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[42,85599,85601],{"className":53283,"code":85600,"language":53285,"meta":47,"style":47},"\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",[49,85602,85603,85613,85627,85631,85639,85653,85673,85685,85693,85697,85705,85717,85725,85737,85742,85747,85752,85799,85815,85823,85831,85835],{"__ignoreMap":47},[52,85604,85605,85607,85609,85611],{"class":54,"line":55},[52,85606,53947],{"class":79},[52,85608,53951],{"class":53950},[52,85610,53954],{"class":75},[52,85612,53957],{"class":79},[52,85614,85615,85617,85619,85621,85623,85625],{"class":54,"line":66},[52,85616,698],{"class":79},[52,85618,53285],{"class":53950},[52,85620,53966],{"class":75},[52,85622,292],{"class":79},[52,85624,53971],{"class":62},[52,85626,53957],{"class":79},[52,85628,85629],{"class":54,"line":83},[52,85630,123],{"emptyLinePlaceholder":122},[52,85632,85633,85635,85637],{"class":54,"line":91},[52,85634,698],{"class":79},[52,85636,53984],{"class":53950},[52,85638,53957],{"class":79},[52,85640,85641,85643,85645,85647,85649,85651],{"class":54,"line":98},[52,85642,54794],{"class":79},[52,85644,53994],{"class":53950},[52,85646,53997],{"class":75},[52,85648,292],{"class":79},[52,85650,54002],{"class":62},[52,85652,53957],{"class":79},[52,85654,85655,85657,85659,85661,85663,85665,85667,85669,85671],{"class":54,"line":107},[52,85656,54794],{"class":79},[52,85658,53994],{"class":53950},[52,85660,17568],{"class":75},[52,85662,292],{"class":79},[52,85664,54041],{"class":62},[52,85666,54021],{"class":75},[52,85668,292],{"class":79},[52,85670,54048],{"class":62},[52,85672,53957],{"class":79},[52,85674,85675,85677,85679,85681,85683],{"class":54,"line":113},[52,85676,54794],{"class":79},[52,85678,54057],{"class":53950},[52,85680,54060],{"class":79},[52,85682,54057],{"class":53950},[52,85684,53957],{"class":79},[52,85686,85687,85689,85691],{"class":54,"line":119},[52,85688,54435],{"class":79},[52,85690,53984],{"class":53950},[52,85692,53957],{"class":79},[52,85694,85695],{"class":54,"line":126},[52,85696,123],{"emptyLinePlaceholder":122},[52,85698,85699,85701,85703],{"class":54,"line":132},[52,85700,698],{"class":79},[52,85702,54450],{"class":53950},[52,85704,53957],{"class":79},[52,85706,85707,85709,85711,85713,85715],{"class":54,"line":138},[52,85708,54794],{"class":79},[52,85710,54261],{"class":53950},[52,85712,57964],{"class":79},[52,85714,54261],{"class":53950},[52,85716,53957],{"class":79},[52,85718,85719,85721,85723],{"class":54,"line":144},[52,85720,54794],{"class":79},[52,85722,54463],{"class":53950},[52,85724,53957],{"class":79},[52,85726,85727,85729,85732,85734],{"class":54,"line":153},[52,85728,13869],{"class":58},[52,85730,85731],{"class":308}," gift",[52,85733,16212],{"class":58},[52,85735,85736],{"class":62}," '50g的茶叶，清洗球'\n",[52,85738,85739],{"class":54,"line":159},[52,85740,85741],{"class":94},"    \u002F\u002F 1.把字符串拆分为数组\n",[52,85743,85744],{"class":54,"line":167},[52,85745,85746],{"class":94},"    \u002F\u002F console.log(gift.split(','))\n",[52,85748,85749],{"class":54,"line":173},[52,85750,85751],{"class":94},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[52,85753,85754,85756,85758,85760,85763,85766,85768,85771,85773,85775,85777,85779,85781,85784,85786,85789,85791,85793,85795,85797],{"class":54,"line":181},[52,85755,13869],{"class":58},[52,85757,76569],{"class":308},[52,85759,16212],{"class":58},[52,85761,85762],{"class":79}," gift.",[52,85764,85765],{"class":75},"split",[52,85767,1216],{"class":79},[52,85769,85770],{"class":62},"'，'",[52,85772,33476],{"class":79},[52,85774,76694],{"class":75},[52,85776,1216],{"class":79},[52,85778,82445],{"class":1223},[52,85780,82448],{"class":58},[52,85782,85783],{"class":62}," `\u003Cspan>【赠品】${",[52,85785,82445],{"class":79},[52,85787,85788],{"class":62},"}\u003C\u002Fspan>\u003Cbr>`",[52,85790,33476],{"class":79},[52,85792,76873],{"class":75},[52,85794,1216],{"class":79},[52,85796,76878],{"class":62},[52,85798,708],{"class":79},[52,85800,85801,85803,85805,85807,85809,85811,85813],{"class":54,"line":186},[52,85802,55057],{"class":79},[52,85804,57049],{"class":75},[52,85806,1216],{"class":79},[52,85808,84581],{"class":62},[52,85810,76899],{"class":79},[52,85812,292],{"class":58},[52,85814,76635],{"class":79},[52,85816,85817,85819,85821],{"class":54,"line":191},[52,85818,55067],{"class":79},[52,85820,54463],{"class":53950},[52,85822,53957],{"class":79},[52,85824,85825,85827,85829],{"class":54,"line":196},[52,85826,54435],{"class":79},[52,85828,54450],{"class":53950},[52,85830,53957],{"class":79},[52,85832,85833],{"class":54,"line":201},[52,85834,123],{"emptyLinePlaceholder":122},[52,85836,85837,85839,85841],{"class":54,"line":206},[52,85838,54435],{"class":79},[52,85840,53285],{"class":53950},[52,85842,53957],{"class":79},[24646,85844,85846],{"id":85845},"_41054-number","4.10.5.4 Number",[14,85848,85849],{},[4509,85850],{"alt":47,"src":85851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,85853,85854],{},"整数也可以进行toFixed来保留小数",[14,85856,85857],{},"比如：",[14,85859,85860],{},"const price=10",[14,85862,85863],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[24646,85865,85867],{"id":85866},"_41055-购物车展示","4.10.5.5 购物车展示",[14,85869,85870],{},[4509,85871],{"alt":47,"src":85872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[42,85874,85876],{"className":53283,"code":85875,"language":53285,"meta":47,"style":47},"\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",[49,85877,85878,85888,85902,85906,85914,85928,85948,85960,85968,85974,85984,85994,86004,86008,86012,86018,86030,86044,86048,86052,86058,86070,86086,86096,86112,86116,86120,86126,86136,86146,86150,86154,86162,86174,86186,86198,86202,86206,86214,86226,86230,86234,86245,86255,86267,86279,86289,86293,86297,86305,86314,86326,86336,86346,86350,86354,86362,86371,86378,86388,86400,86404,86408,86417,86427,86438,86450,86462,86466,86470,86479,86489,86500,86504,86508,86514,86526,86538,86548,86558,86576,86588,86592,86596,86605,86617,86627,86637,86649,86653,86661,86669,86673,86681,86695,86703,86717,86745,86753,86761,86771,86775,86783,86791,86800,86808,86817,86827,86831,86835,86843,86851,86860,86868,86876,86889,86893,86897,86905,86913,86922,86930,86938,86953,86957,86961,86969,86977,86986,86994,87002,87016,87024,87028,87032,87037,87063,87068,87105,87110,87133,87138,87192,87197,87233,87237,87243,87248,87257,87271,87280,87299,87308,87318,87323,87328,87341,87346,87400,87426,87434,87442,87446],{"__ignoreMap":47},[52,85879,85880,85882,85884,85886],{"class":54,"line":55},[52,85881,53947],{"class":79},[52,85883,53951],{"class":53950},[52,85885,53954],{"class":75},[52,85887,53957],{"class":79},[52,85889,85890,85892,85894,85896,85898,85900],{"class":54,"line":66},[52,85891,698],{"class":79},[52,85893,53285],{"class":53950},[52,85895,53966],{"class":75},[52,85897,292],{"class":79},[52,85899,53971],{"class":62},[52,85901,53957],{"class":79},[52,85903,85904],{"class":54,"line":83},[52,85905,123],{"emptyLinePlaceholder":122},[52,85907,85908,85910,85912],{"class":54,"line":91},[52,85909,698],{"class":79},[52,85911,53984],{"class":53950},[52,85913,53957],{"class":79},[52,85915,85916,85918,85920,85922,85924,85926],{"class":54,"line":98},[52,85917,54794],{"class":79},[52,85919,53994],{"class":53950},[52,85921,53997],{"class":75},[52,85923,292],{"class":79},[52,85925,54002],{"class":62},[52,85927,53957],{"class":79},[52,85929,85930,85932,85934,85936,85938,85940,85942,85944,85946],{"class":54,"line":107},[52,85931,54794],{"class":79},[52,85933,53994],{"class":53950},[52,85935,17568],{"class":75},[52,85937,292],{"class":79},[52,85939,54041],{"class":62},[52,85941,54021],{"class":75},[52,85943,292],{"class":79},[52,85945,54048],{"class":62},[52,85947,53957],{"class":79},[52,85949,85950,85952,85954,85956,85958],{"class":54,"line":113},[52,85951,54794],{"class":79},[52,85953,54057],{"class":53950},[52,85955,54060],{"class":79},[52,85957,54057],{"class":53950},[52,85959,53957],{"class":79},[52,85961,85962,85964,85966],{"class":54,"line":119},[52,85963,54794],{"class":79},[52,85965,3141],{"class":53950},[52,85967,53957],{"class":79},[52,85969,85970,85972],{"class":54,"line":126},[52,85971,9366],{"class":53950},[52,85973,18220],{"class":79},[52,85975,85976,85978,85980,85982],{"class":54,"line":132},[52,85977,57345],{"class":308},[52,85979,54087],{"class":79},[52,85981,692],{"class":308},[52,85983,80],{"class":79},[52,85985,85986,85988,85990,85992],{"class":54,"line":138},[52,85987,57356],{"class":308},[52,85989,54087],{"class":79},[52,85991,692],{"class":308},[52,85993,80],{"class":79},[52,85995,85996,85998,86000,86002],{"class":54,"line":144},[52,85997,75246],{"class":308},[52,85999,54087],{"class":79},[52,86001,63155],{"class":308},[52,86003,80],{"class":79},[52,86005,86006],{"class":54,"line":153},[52,86007,616],{"class":79},[52,86009,86010],{"class":54,"line":159},[52,86011,123],{"emptyLinePlaceholder":122},[52,86013,86014,86016],{"class":54,"line":167},[52,86015,64773],{"class":75},[52,86017,18220],{"class":79},[52,86019,86020,86022,86024,86026,86028],{"class":54,"line":173},[52,86021,57421],{"class":308},[52,86023,54087],{"class":79},[52,86025,81224],{"class":308},[52,86027,54142],{"class":58},[52,86029,80],{"class":79},[52,86031,86032,86034,86036,86038,86040,86042],{"class":54,"line":181},[52,86033,57356],{"class":308},[52,86035,54087],{"class":79},[52,86037,591],{"class":308},[52,86039,54142],{"class":58},[52,86041,54206],{"class":308},[52,86043,80],{"class":79},[52,86045,86046],{"class":54,"line":186},[52,86047,616],{"class":79},[52,86049,86050],{"class":54,"line":191},[52,86051,123],{"emptyLinePlaceholder":122},[52,86053,86054,86056],{"class":54,"line":196},[52,86055,81275],{"class":75},[52,86057,18220],{"class":79},[52,86059,86060,86062,86064,86066,86068],{"class":54,"line":201},[52,86061,57345],{"class":308},[52,86063,54087],{"class":79},[52,86065,605],{"class":308},[52,86067,54142],{"class":58},[52,86069,80],{"class":79},[52,86071,86072,86074,86076,86078,86080,86082,86084],{"class":54,"line":206},[52,86073,64510],{"class":308},[52,86075,54087],{"class":79},[52,86077,30771],{"class":308},[52,86079,81330],{"class":308},[52,86081,81333],{"class":308},[52,86083,1291],{"class":58},[52,86085,80],{"class":79},[52,86087,86088,86090,86092,86094],{"class":54,"line":211},[52,86089,57659],{"class":308},[52,86091,54087],{"class":79},[52,86093,54127],{"class":308},[52,86095,80],{"class":79},[52,86097,86098,86100,86102,86104,86106,86108,86110],{"class":54,"line":218},[52,86099,64627],{"class":308},[52,86101,54087],{"class":79},[52,86103,629],{"class":308},[52,86105,54142],{"class":58},[52,86107,54171],{"class":308},[52,86109,64894],{"class":308},[52,86111,80],{"class":79},[52,86113,86114],{"class":54,"line":223},[52,86115,616],{"class":79},[52,86117,86118],{"class":54,"line":230},[52,86119,123],{"emptyLinePlaceholder":122},[52,86121,86122,86124],{"class":54,"line":239},[52,86123,81393],{"class":75},[52,86125,18220],{"class":79},[52,86127,86128,86130,86132,86134],{"class":54,"line":251},[52,86129,64675],{"class":308},[52,86131,54087],{"class":79},[52,86133,64680],{"class":308},[52,86135,80],{"class":79},[52,86137,86138,86140,86142,86144],{"class":54,"line":256},[52,86139,57534],{"class":308},[52,86141,54087],{"class":79},[52,86143,64468],{"class":308},[52,86145,80],{"class":79},[52,86147,86148],{"class":54,"line":262},[52,86149,616],{"class":79},[52,86151,86152],{"class":54,"line":268},[52,86153,123],{"emptyLinePlaceholder":122},[52,86155,86156,86158,86160],{"class":54,"line":280},[52,86157,81275],{"class":75},[52,86159,58265],{"class":53950},[52,86161,18220],{"class":79},[52,86163,86164,86166,86168,86170,86172],{"class":54,"line":286},[52,86165,57421],{"class":308},[52,86167,54087],{"class":79},[52,86169,3809],{"class":308},[52,86171,54142],{"class":58},[52,86173,80],{"class":79},[52,86175,86176,86178,86180,86182,86184],{"class":54,"line":300},[52,86177,57435],{"class":308},[52,86179,54087],{"class":79},[52,86181,3809],{"class":308},[52,86183,54142],{"class":58},[52,86185,80],{"class":79},[52,86187,86188,86190,86192,86194,86196],{"class":54,"line":314},[52,86189,64400],{"class":308},[52,86191,54087],{"class":79},[52,86193,1805],{"class":308},[52,86195,54142],{"class":58},[52,86197,80],{"class":79},[52,86199,86200],{"class":54,"line":327},[52,86201,616],{"class":79},[52,86203,86204],{"class":54,"line":333},[52,86205,123],{"emptyLinePlaceholder":122},[52,86207,86208,86210,86212],{"class":54,"line":360},[52,86209,81275],{"class":75},[52,86211,64954],{"class":75},[52,86213,18220],{"class":79},[52,86215,86216,86218,86220,86222,86224],{"class":54,"line":365},[52,86217,57421],{"class":308},[52,86219,54087],{"class":79},[52,86221,856],{"class":308},[52,86223,54142],{"class":58},[52,86225,80],{"class":79},[52,86227,86228],{"class":54,"line":371},[52,86229,616],{"class":79},[52,86231,86232],{"class":54,"line":400},[52,86233,123],{"emptyLinePlaceholder":122},[52,86235,86236,86238,86240,86243],{"class":54,"line":405},[52,86237,81275],{"class":75},[52,86239,64954],{"class":75},[52,86241,86242],{"class":75}," .tag",[52,86244,18220],{"class":79},[52,86246,86247,86249,86251,86253],{"class":54,"line":411},[52,86248,57659],{"class":308},[52,86250,54087],{"class":79},[52,86252,63519],{"class":308},[52,86254,80],{"class":79},[52,86256,86257,86259,86261,86263,86265],{"class":54,"line":424},[52,86258,57345],{"class":308},[52,86260,54087],{"class":79},[52,86262,564],{"class":308},[52,86264,54142],{"class":58},[52,86266,80],{"class":79},[52,86268,86269,86271,86273,86275,86277],{"class":54,"line":436},[52,86270,57572],{"class":308},[52,86272,54087],{"class":79},[52,86274,3698],{"class":308},[52,86276,54142],{"class":58},[52,86278,80],{"class":79},[52,86280,86281,86283,86285,86287],{"class":54,"line":449},[52,86282,60066],{"class":308},[52,86284,54087],{"class":79},[52,86286,64720],{"class":308},[52,86288,80],{"class":79},[52,86290,86291],{"class":54,"line":2160},[52,86292,616],{"class":79},[52,86294,86295],{"class":54,"line":2186},[52,86296,123],{"emptyLinePlaceholder":122},[52,86298,86299,86301,86303],{"class":54,"line":2209},[52,86300,81275],{"class":75},[52,86302,81567],{"class":75},[52,86304,34116],{"class":79},[52,86306,86307,86309,86312],{"class":54,"line":2233},[52,86308,81275],{"class":75},[52,86310,86311],{"class":75}," .sub-total",[52,86313,18220],{"class":79},[52,86315,86316,86318,86320,86322,86324],{"class":54,"line":2238},[52,86317,57572],{"class":308},[52,86319,54087],{"class":79},[52,86321,309],{"class":308},[52,86323,54142],{"class":58},[52,86325,80],{"class":79},[52,86327,86328,86330,86332,86334],{"class":54,"line":2243},[52,86329,60066],{"class":308},[52,86331,54087],{"class":79},[52,86333,81590],{"class":308},[52,86335,80],{"class":79},[52,86337,86338,86340,86342,86344],{"class":54,"line":2248},[52,86339,64487],{"class":308},[52,86341,54087],{"class":79},[52,86343,629],{"class":308},[52,86345,80],{"class":79},[52,86347,86348],{"class":54,"line":2257},[52,86349,616],{"class":79},[52,86351,86352],{"class":54,"line":2262},[52,86353,123],{"emptyLinePlaceholder":122},[52,86355,86356,86358,86360],{"class":54,"line":2268},[52,86357,81275],{"class":75},[52,86359,81607],{"class":75},[52,86361,34116],{"class":79},[52,86363,86364,86366,86369],{"class":54,"line":2297},[52,86365,81275],{"class":75},[52,86367,86368],{"class":75}," .sub-total::before",[52,86370,34116],{"class":79},[52,86372,86373,86376],{"class":54,"line":2303},[52,86374,86375],{"class":75},"    .amount::before",[52,86377,18220],{"class":79},[52,86379,86380,86382,86384,86386],{"class":54,"line":2318},[52,86381,81614],{"class":308},[52,86383,54087],{"class":79},[52,86385,81619],{"class":62},[52,86387,80],{"class":79},[52,86389,86390,86392,86394,86396,86398],{"class":54,"line":2324},[52,86391,57572],{"class":308},[52,86393,54087],{"class":79},[52,86395,3698],{"class":308},[52,86397,54142],{"class":58},[52,86399,80],{"class":79},[52,86401,86402],{"class":54,"line":2353},[52,86403,616],{"class":79},[52,86405,86406],{"class":54,"line":2362},[52,86407,123],{"emptyLinePlaceholder":122},[52,86409,86410,86412,86415],{"class":54,"line":2368},[52,86411,81275],{"class":75},[52,86413,86414],{"class":75}," .spec",[52,86416,18220],{"class":79},[52,86418,86419,86421,86423,86425],{"class":54,"line":2376},[52,86420,64487],{"class":308},[52,86422,54087],{"class":79},[52,86424,564],{"class":308},[52,86426,80],{"class":79},[52,86428,86429,86431,86433,86436],{"class":54,"line":2381},[52,86430,60066],{"class":308},[52,86432,54087],{"class":79},[52,86434,86435],{"class":308},"#888",[52,86437,80],{"class":79},[52,86439,86440,86442,86444,86446,86448],{"class":54,"line":19252},[52,86441,57572],{"class":308},[52,86443,54087],{"class":79},[52,86445,3748],{"class":308},[52,86447,54142],{"class":58},[52,86449,80],{"class":79},[52,86451,86452,86454,86456,86458,86460],{"class":54,"line":19258},[52,86453,64650],{"class":308},[52,86455,54087],{"class":79},[52,86457,444],{"class":308},[52,86459,54142],{"class":58},[52,86461,80],{"class":79},[52,86463,86464],{"class":54,"line":19281},[52,86465,616],{"class":79},[52,86467,86468],{"class":54,"line":19287},[52,86469,123],{"emptyLinePlaceholder":122},[52,86471,86472,86474,86477],{"class":54,"line":19310},[52,86473,81275],{"class":75},[52,86475,86476],{"class":75}," .count",[52,86478,18220],{"class":79},[52,86480,86481,86483,86485,86487],{"class":54,"line":19324},[52,86482,64487],{"class":308},[52,86484,54087],{"class":79},[52,86486,629],{"class":308},[52,86488,80],{"class":79},[52,86490,86491,86493,86495,86498],{"class":54,"line":19344},[52,86492,60066],{"class":308},[52,86494,54087],{"class":79},[52,86496,86497],{"class":308},"#aaa",[52,86499,80],{"class":79},[52,86501,86502],{"class":54,"line":19350},[52,86503,616],{"class":79},[52,86505,86506],{"class":54,"line":19361},[52,86507,123],{"emptyLinePlaceholder":122},[52,86509,86510,86512],{"class":54,"line":19384},[52,86511,75125],{"class":75},[52,86513,18220],{"class":79},[52,86515,86516,86518,86520,86522,86524],{"class":54,"line":19406},[52,86517,57421],{"class":308},[52,86519,54087],{"class":79},[52,86521,81224],{"class":308},[52,86523,54142],{"class":58},[52,86525,80],{"class":79},[52,86527,86528,86530,86532,86534,86536],{"class":54,"line":19411},[52,86529,57356],{"class":308},[52,86531,54087],{"class":79},[52,86533,692],{"class":308},[52,86535,54206],{"class":308},[52,86537,80],{"class":79},[52,86539,86540,86542,86544,86546],{"class":54,"line":19417},[52,86541,57659],{"class":308},[52,86543,54087],{"class":79},[52,86545,54127],{"class":308},[52,86547,80],{"class":79},[52,86549,86550,86552,86554,86556],{"class":54,"line":19431},[52,86551,57670],{"class":308},[52,86553,54087],{"class":79},[52,86555,54230],{"class":308},[52,86557,80],{"class":79},[52,86559,86560,86563,86565,86567,86569,86571,86574],{"class":54,"line":19444},[52,86561,86562],{"class":308},"      border-top",[52,86564,54087],{"class":79},[52,86566,629],{"class":308},[52,86568,54142],{"class":58},[52,86570,54171],{"class":308},[52,86572,86573],{"class":308}," #4e4e4e",[52,86575,80],{"class":79},[52,86577,86578,86580,86582,86584,86586],{"class":54,"line":19449},[52,86579,57345],{"class":308},[52,86581,54087],{"class":79},[52,86583,444],{"class":308},[52,86585,54142],{"class":58},[52,86587,80],{"class":79},[52,86589,86590],{"class":54,"line":19463},[52,86591,616],{"class":79},[52,86593,86594],{"class":54,"line":19468},[52,86595,123],{"emptyLinePlaceholder":122},[52,86597,86598,86600,86603],{"class":54,"line":19474},[52,86599,75125],{"class":75},[52,86601,86602],{"class":75}," .amount",[52,86604,18220],{"class":79},[52,86606,86607,86609,86611,86613,86615],{"class":54,"line":19479},[52,86608,57572],{"class":308},[52,86610,54087],{"class":79},[52,86612,309],{"class":308},[52,86614,54142],{"class":58},[52,86616,80],{"class":79},[52,86618,86619,86621,86623,86625],{"class":54,"line":19493},[52,86620,60066],{"class":308},[52,86622,54087],{"class":79},[52,86624,81590],{"class":308},[52,86626,80],{"class":79},[52,86628,86629,86631,86633,86635],{"class":54,"line":19498},[52,86630,64984],{"class":308},[52,86632,54087],{"class":79},[52,86634,54139],{"class":308},[52,86636,80],{"class":79},[52,86638,86639,86641,86643,86645,86647],{"class":54,"line":19503},[52,86640,64400],{"class":308},[52,86642,54087],{"class":79},[52,86644,3852],{"class":308},[52,86646,54142],{"class":58},[52,86648,80],{"class":79},[52,86650,86651],{"class":54,"line":19517},[52,86652,616],{"class":79},[52,86654,86655,86657,86659],{"class":54,"line":19529},[52,86656,55067],{"class":79},[52,86658,3141],{"class":53950},[52,86660,53957],{"class":79},[52,86662,86663,86665,86667],{"class":54,"line":19534},[52,86664,54435],{"class":79},[52,86666,53984],{"class":53950},[52,86668,53957],{"class":79},[52,86670,86671],{"class":54,"line":19547},[52,86672,123],{"emptyLinePlaceholder":122},[52,86674,86675,86677,86679],{"class":54,"line":19552},[52,86676,698],{"class":79},[52,86678,54450],{"class":53950},[52,86680,53957],{"class":79},[52,86682,86683,86685,86687,86689,86691,86693],{"class":54,"line":19557},[52,86684,54794],{"class":79},[52,86686,54261],{"class":53950},[52,86688,56136],{"class":75},[52,86690,292],{"class":79},[52,86692,65258],{"class":62},[52,86694,53957],{"class":79},[52,86696,86697,86699,86701],{"class":54,"line":19562},[52,86698,55067],{"class":79},[52,86700,54261],{"class":53950},[52,86702,53957],{"class":79},[52,86704,86705,86707,86709,86711,86713,86715],{"class":54,"line":19575},[52,86706,54794],{"class":79},[52,86708,54261],{"class":53950},[52,86710,56136],{"class":75},[52,86712,292],{"class":79},[52,86714,65230],{"class":62},[52,86716,53957],{"class":79},[52,86718,86719,86721,86723,86726,86728,86730,86732,86735,86737,86739,86741,86743],{"class":54,"line":19580},[52,86720,53991],{"class":79},[52,86722,54261],{"class":53950},[52,86724,86725],{"class":79},">合计：\u003C",[52,86727,52],{"class":53950},[52,86729,56136],{"class":75},[52,86731,292],{"class":79},[52,86733,86734],{"class":62},"\"amount\"",[52,86736,57964],{"class":79},[52,86738,52],{"class":53950},[52,86740,57964],{"class":79},[52,86742,54261],{"class":53950},[52,86744,53957],{"class":79},[52,86746,86747,86749,86751],{"class":54,"line":35283},[52,86748,55067],{"class":79},[52,86750,54261],{"class":53950},[52,86752,53957],{"class":79},[52,86754,86755,86757,86759],{"class":54,"line":35289},[52,86756,54794],{"class":79},[52,86758,54463],{"class":53950},[52,86760,53957],{"class":79},[52,86762,86763,86765,86767,86769],{"class":54,"line":35295},[52,86764,13869],{"class":58},[52,86766,82027],{"class":308},[52,86768,16212],{"class":58},[52,86770,58097],{"class":79},[52,86772,86773],{"class":54,"line":35301},[52,86774,82036],{"class":79},[52,86776,86777,86779,86781],{"class":54,"line":35307},[52,86778,82041],{"class":79},[52,86780,82044],{"class":62},[52,86782,34116],{"class":79},[52,86784,86785,86787,86789],{"class":54,"line":35318},[52,86786,82051],{"class":79},[52,86788,82054],{"class":62},[52,86790,34116],{"class":79},[52,86792,86793,86795,86798],{"class":54,"line":35324},[52,86794,82061],{"class":79},[52,86796,86797],{"class":308},"289.9",[52,86799,34116],{"class":79},[52,86801,86802,86804,86806],{"class":54,"line":35344},[52,86803,82071],{"class":79},[52,86805,82074],{"class":62},[52,86807,34116],{"class":79},[52,86809,86810,86813,86815],{"class":54,"line":35350},[52,86811,86812],{"class":79},"        count: ",[52,86814,564],{"class":308},[52,86816,34116],{"class":79},[52,86818,86819,86822,86825],{"class":54,"line":35361},[52,86820,86821],{"class":79},"        spec: { color: ",[52,86823,86824],{"class":62},"'白色'",[52,86826,58254],{"class":79},[52,86828,86829],{"class":54,"line":35367},[52,86830,80542],{"class":79},[52,86832,86833],{"class":54,"line":35373},[52,86834,82036],{"class":79},[52,86836,86837,86839,86841],{"class":54,"line":35379},[52,86838,82041],{"class":79},[52,86840,82135],{"class":62},[52,86842,34116],{"class":79},[52,86844,86845,86847,86849],{"class":54,"line":35385},[52,86846,82051],{"class":79},[52,86848,82144],{"class":62},[52,86850,34116],{"class":79},[52,86852,86853,86855,86858],{"class":54,"line":35391},[52,86854,82061],{"class":79},[52,86856,86857],{"class":308},"109.8",[52,86859,34116],{"class":79},[52,86861,86862,86864,86866],{"class":54,"line":35397},[52,86863,82071],{"class":79},[52,86865,82162],{"class":62},[52,86867,34116],{"class":79},[52,86869,86870,86872,86874],{"class":54,"line":35403},[52,86871,86812],{"class":79},[52,86873,2313],{"class":308},[52,86875,34116],{"class":79},[52,86877,86878,86881,86883,86885,86887],{"class":54,"line":35423},[52,86879,86880],{"class":79},"        spec: { size: ",[52,86882,84553],{"class":62},[52,86884,58114],{"class":79},[52,86886,84558],{"class":62},[52,86888,58254],{"class":79},[52,86890,86891],{"class":54,"line":35429},[52,86892,80542],{"class":79},[52,86894,86895],{"class":54,"line":35445},[52,86896,82036],{"class":79},[52,86898,86899,86901,86903],{"class":54,"line":35451},[52,86900,82041],{"class":79},[52,86902,82179],{"class":62},[52,86904,34116],{"class":79},[52,86906,86907,86909,86911],{"class":54,"line":35465},[52,86908,82051],{"class":79},[52,86910,82188],{"class":62},[52,86912,34116],{"class":79},[52,86914,86915,86917,86920],{"class":54,"line":35471},[52,86916,82061],{"class":79},[52,86918,86919],{"class":308},"488",[52,86921,34116],{"class":79},[52,86923,86924,86926,86928],{"class":54,"line":35486},[52,86925,82071],{"class":79},[52,86927,82206],{"class":62},[52,86929,34116],{"class":79},[52,86931,86932,86934,86936],{"class":54,"line":35492},[52,86933,86812],{"class":79},[52,86935,629],{"class":308},[52,86937,34116],{"class":79},[52,86939,86940,86942,86945,86948,86951],{"class":54,"line":35501},[52,86941,86821],{"class":79},[52,86943,86944],{"class":62},"'青色'",[52,86946,86947],{"class":79},", sum: ",[52,86949,86950],{"class":62},"'一大四小'",[52,86952,58254],{"class":79},[52,86954,86955],{"class":54,"line":35507},[52,86956,80542],{"class":79},[52,86958,86959],{"class":54,"line":35516},[52,86960,82036],{"class":79},[52,86962,86963,86965,86967],{"class":54,"line":35522},[52,86964,82041],{"class":79},[52,86966,82223],{"class":62},[52,86968,34116],{"class":79},[52,86970,86971,86973,86975],{"class":54,"line":35528},[52,86972,82051],{"class":79},[52,86974,82232],{"class":62},[52,86976,34116],{"class":79},[52,86978,86979,86981,86984],{"class":54,"line":35537},[52,86980,82061],{"class":79},[52,86982,86983],{"class":308},"139",[52,86985,34116],{"class":79},[52,86987,86988,86990,86992],{"class":54,"line":35543},[52,86989,82071],{"class":79},[52,86991,82250],{"class":62},[52,86993,34116],{"class":79},[52,86995,86996,86998,87000],{"class":54,"line":35554},[52,86997,86812],{"class":79},[52,86999,629],{"class":308},[52,87001,34116],{"class":79},[52,87003,87004,87006,87009,87011,87014],{"class":54,"line":35560},[52,87005,86880],{"class":79},[52,87007,87008],{"class":62},"'小号'",[52,87010,58114],{"class":79},[52,87012,87013],{"class":62},"'紫色'",[52,87015,58120],{"class":79},[52,87017,87018,87021],{"class":54,"line":35579},[52,87019,87020],{"class":79},"        gift: ",[52,87022,87023],{"class":62},"'50g茶叶,清洗球'\n",[52,87025,87026],{"class":54,"line":35585},[52,87027,55048],{"class":79},[52,87029,87030],{"class":54,"line":35596},[52,87031,55759],{"class":79},[52,87033,87034],{"class":54,"line":35602},[52,87035,87036],{"class":94},"    \u002F\u002F  1.根据数据渲染页面\n",[52,87038,87039,87041,87043,87045,87047,87049,87051,87053,87055,87057,87059,87061],{"class":54,"line":35622},[52,87040,55057],{"class":79},[52,87042,57049],{"class":75},[52,87044,1216],{"class":79},[52,87046,82551],{"class":62},[52,87048,76899],{"class":79},[52,87050,292],{"class":58},[52,87052,82698],{"class":79},[52,87054,76694],{"class":75},[52,87056,1216],{"class":79},[52,87058,82445],{"class":1223},[52,87060,82448],{"class":58},[52,87062,18220],{"class":79},[52,87064,87065],{"class":54,"line":35638},[52,87066,87067],{"class":94},"      \u002F\u002F 对象解构\n",[52,87069,87070,87072,87074,87076,87078,87080,87082,87085,87087,87089,87091,87094,87096,87099,87101,87103],{"class":54,"line":35644},[52,87071,60878],{"class":58},[52,87073,82457],{"class":79},[52,87075,82470],{"class":308},[52,87077,15083],{"class":79},[52,87079,82460],{"class":308},[52,87081,15083],{"class":79},[52,87083,87084],{"class":308},"count",[52,87086,15083],{"class":79},[52,87088,82465],{"class":308},[52,87090,15083],{"class":79},[52,87092,87093],{"class":308},"spec",[52,87095,15083],{"class":79},[52,87097,87098],{"class":308},"gift",[52,87100,82473],{"class":79},[52,87102,292],{"class":58},[52,87104,82478],{"class":79},[52,87106,87107],{"class":54,"line":35658},[52,87108,87109],{"class":94},"      \u002F\u002F 规格文字模块处理\n",[52,87111,87112,87114,87117,87119,87121,87123,87125,87127,87129,87131],{"class":54,"line":35664},[52,87113,60878],{"class":58},[52,87115,87116],{"class":308}," text",[52,87118,16212],{"class":58},[52,87120,84588],{"class":79},[52,87122,84591],{"class":75},[52,87124,84594],{"class":79},[52,87126,76873],{"class":75},[52,87128,1216],{"class":79},[52,87130,84601],{"class":62},[52,87132,708],{"class":79},[52,87134,87135],{"class":54,"line":35670},[52,87136,87137],{"class":94},"      \u002F\u002F 处理赠品模块\n",[52,87139,87140,87142,87144,87146,87149,87151,87153,87155,87157,87160,87162,87164,87166,87168,87170,87173,87175,87178,87180,87182,87184,87186,87188,87190],{"class":54,"line":35681},[52,87141,60878],{"class":58},[52,87143,76569],{"class":308},[52,87145,16212],{"class":58},[52,87147,87148],{"class":79}," gift ",[52,87150,4171],{"class":58},[52,87152,85762],{"class":79},[52,87154,85765],{"class":75},[52,87156,1216],{"class":79},[52,87158,87159],{"class":62},"','",[52,87161,33476],{"class":79},[52,87163,76694],{"class":75},[52,87165,1216],{"class":79},[52,87167,82445],{"class":1223},[52,87169,82448],{"class":58},[52,87171,87172],{"class":62}," `\u003Cspan class=\"tag\">【赠品】${",[52,87174,82445],{"class":79},[52,87176,87177],{"class":62},"}\u003C\u002Fspan>`",[52,87179,33476],{"class":79},[52,87181,76873],{"class":75},[52,87183,1216],{"class":79},[52,87185,76878],{"class":62},[52,87187,16362],{"class":79},[52,87189,4049],{"class":58},[52,87191,72754],{"class":62},[52,87193,87194],{"class":54,"line":35687},[52,87195,87196],{"class":94},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[52,87198,87199,87201,87204,87206,87209,87211,87213,87215,87218,87220,87222,87224,87227,87229,87231],{"class":54,"line":35693},[52,87200,60878],{"class":58},[52,87202,87203],{"class":308}," subtotal",[52,87205,16212],{"class":58},[52,87207,87208],{"class":79}," ((price ",[52,87210,3053],{"class":58},[52,87212,8719],{"class":308},[52,87214,872],{"class":58},[52,87216,87217],{"class":79}," count) ",[52,87219,2340],{"class":58},[52,87221,8719],{"class":308},[52,87223,33476],{"class":79},[52,87225,87226],{"class":75},"toFixed",[52,87228,1216],{"class":79},[52,87230,564],{"class":308},[52,87232,708],{"class":79},[52,87234,87235],{"class":54,"line":35703},[52,87236,123],{"emptyLinePlaceholder":122},[52,87238,87239,87241],{"class":54,"line":35709},[52,87240,76632],{"class":58},[52,87242,72818],{"class":62},[52,87244,87245],{"class":54,"line":35720},[52,87246,87247],{"class":62},"        \u003Cdiv class=\"item\">\n",[52,87249,87250,87253,87255],{"class":54,"line":35726},[52,87251,87252],{"class":62},"          \u003Cimg src=\"${",[52,87254,82470],{"class":79},[52,87256,82502],{"class":62},[52,87258,87259,87262,87264,87267,87269],{"class":54,"line":35736},[52,87260,87261],{"class":62},"          \u003Cp class=\"name\">${",[52,87263,82460],{"class":79},[52,87265,87266],{"class":62},"}${",[52,87268,4350],{"class":79},[52,87270,82512],{"class":62},[52,87272,87273,87276,87278],{"class":54,"line":35741},[52,87274,87275],{"class":62},"          \u003Cp class=\"spec\">${",[52,87277,8154],{"class":79},[52,87279,82512],{"class":62},[52,87281,87282,87285,87287,87289,87291,87293,87295,87297],{"class":54,"line":35747},[52,87283,87284],{"class":62},"          \u003Cp class=\"price\">${",[52,87286,82465],{"class":79},[52,87288,3757],{"class":62},[52,87290,87226],{"class":75},[52,87292,1216],{"class":62},[52,87294,564],{"class":308},[52,87296,2283],{"class":62},[52,87298,82512],{"class":62},[52,87300,87301,87304,87306],{"class":54,"line":35796},[52,87302,87303],{"class":62},"          \u003Cp class=\"count\">x${",[52,87305,87084],{"class":79},[52,87307,82512],{"class":62},[52,87309,87310,87313,87316],{"class":54,"line":35843},[52,87311,87312],{"class":62},"          \u003Cp class=\"sub-total\">${",[52,87314,87315],{"class":79},"subtotal",[52,87317,82512],{"class":62},[52,87319,87320],{"class":54,"line":35848},[52,87321,87322],{"class":62},"        \u003C\u002Fdiv> \n",[52,87324,87325],{"class":54,"line":35854},[52,87326,87327],{"class":62},"             `\n",[52,87329,87330,87333,87335,87337,87339],{"class":54,"line":35873},[52,87331,87332],{"class":79},"    }).",[52,87334,76873],{"class":75},[52,87336,1216],{"class":79},[52,87338,76878],{"class":62},[52,87340,708],{"class":79},[52,87342,87343],{"class":54,"line":35879},[52,87344,87345],{"class":94},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[52,87347,87348,87350,87352,87354,87356,87359,87361,87364,87366,87368,87370,87373,87376,87378,87381,87383,87385,87387,87390,87392,87394,87396,87398],{"class":54,"line":35899},[52,87349,13869],{"class":58},[52,87351,65435],{"class":308},[52,87353,16212],{"class":58},[52,87355,82698],{"class":79},[52,87357,87358],{"class":75},"reduce",[52,87360,2274],{"class":79},[52,87362,87363],{"class":1223},"prev",[52,87365,15083],{"class":79},[52,87367,82445],{"class":1223},[52,87369,16362],{"class":79},[52,87371,87372],{"class":58},"=>",[52,87374,87375],{"class":79}," prev ",[52,87377,2004],{"class":58},[52,87379,87380],{"class":79}," (item.price ",[52,87382,3053],{"class":58},[52,87384,8719],{"class":308},[52,87386,872],{"class":58},[52,87388,87389],{"class":79}," item.count) ",[52,87391,2340],{"class":58},[52,87393,8719],{"class":308},[52,87395,15083],{"class":79},[52,87397,692],{"class":308},[52,87399,708],{"class":79},[52,87401,87402,87404,87406,87408,87411,87413,87415,87418,87420,87422,87424],{"class":54,"line":35905},[52,87403,55057],{"class":79},[52,87405,57049],{"class":75},[52,87407,1216],{"class":79},[52,87409,87410],{"class":62},"'.amount'",[52,87412,76899],{"class":79},[52,87414,292],{"class":58},[52,87416,87417],{"class":79}," total.",[52,87419,87226],{"class":75},[52,87421,1216],{"class":79},[52,87423,564],{"class":308},[52,87425,708],{"class":79},[52,87427,87428,87430,87432],{"class":54,"line":35911},[52,87429,55067],{"class":79},[52,87431,54463],{"class":53950},[52,87433,53957],{"class":79},[52,87435,87436,87438,87440],{"class":54,"line":35921},[52,87437,54435],{"class":79},[52,87439,54450],{"class":53950},[52,87441,53957],{"class":79},[52,87443,87444],{"class":54,"line":35926},[52,87445,123],{"emptyLinePlaceholder":122},[52,87447,87448,87450,87452],{"class":54,"line":35932},[52,87449,54435],{"class":79},[52,87451,53285],{"class":53950},[52,87453,53957],{"class":79},[18,87455,87457],{"id":87456},"_411-编程思想","4.11 编程思想",[3195,87459,87461],{"id":87460},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,87463,87464,87467],{},[2389,87465,87466],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,87469,87470],{},"调用就可以了",[14,87472,87473],{},[4509,87474],{"alt":47,"src":87475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[3195,87477,87479],{"id":87478},"_4112-面向对象","4.11.2 面向对象",[14,87481,87482],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,87484,87485],{},[4509,87486],{"alt":47,"src":87487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,87489,87490],{},"面向对象的特性：",[29,87492,87493,87496,87499],{},[32,87494,87495],{},"封装性",[32,87497,87498],{},"继承性",[32,87500,87501],{},"多态性",[3195,87503,87505],{"id":87504},"_4113-两者比较","4.11.3 两者比较",[14,87507,87508],{},[4509,87509],{"alt":47,"src":87510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[18,87512,87514],{"id":87513},"_412-构造函数回顾","4.12 构造函数回顾",[14,87516,87517],{},[4509,87518],{"alt":47,"src":87519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,87521,87522],{},[4509,87523],{"alt":47,"src":87524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,87526,87527],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,87529,87530],{},[4509,87531],{"alt":47,"src":87532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[18,87534,87536],{"id":87535},"_413-原型","4.13 原型",[3195,87538,87540],{"id":87539},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,87542,87543],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,87545,87546],{},[4509,87547],{"alt":47,"src":87548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,87550,87551],{},[4509,87552],{"alt":47,"src":87553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,87555,87556],{},"原型是构造函数的属性，它也是一个对象",[14,87558,87559],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,87561,87562],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[42,87564,87566],{"className":55717,"code":87565,"language":55719,"meta":47,"style":47},"\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",[49,87567,87568,87576,87581,87589,87594,87599,87604,87609,87614,87618,87622,87626,87631,87636,87640,87645,87650,87655,87660,87665,87669,87677],{"__ignoreMap":47},[52,87569,87570,87572,87574],{"class":54,"line":55},[52,87571,698],{"class":79},[52,87573,54450],{"class":53950},[52,87575,53957],{"class":79},[52,87577,87578],{"class":54,"line":66},[52,87579,87580],{"class":94},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[52,87582,87583,87585,87587],{"class":54,"line":83},[52,87584,54794],{"class":79},[52,87586,54463],{"class":53950},[52,87588,53957],{"class":79},[52,87590,87591],{"class":54,"line":91},[52,87592,87593],{"class":79},"    function Star(uname, age) {\n",[52,87595,87596],{"class":54,"line":98},[52,87597,87598],{"class":79},"      this.uname = uname,\n",[52,87600,87601],{"class":54,"line":107},[52,87602,87603],{"class":79},"        this.age = age\n",[52,87605,87606],{"class":54,"line":113},[52,87607,87608],{"class":79},"      \u002F\u002F this.sing = function () {\n",[52,87610,87611],{"class":54,"line":119},[52,87612,87613],{"class":79},"      \u002F\u002F   console.log('唱歌')\n",[52,87615,87616],{"class":54,"line":126},[52,87617,123],{"emptyLinePlaceholder":122},[52,87619,87620],{"class":54,"line":132},[52,87621,62687],{"class":79},[52,87623,87624],{"class":54,"line":138},[52,87625,616],{"class":79},[52,87627,87628],{"class":54,"line":144},[52,87629,87630],{"class":79},"    Star.prototype.sing = function () {\n",[52,87632,87633],{"class":54,"line":153},[52,87634,87635],{"class":79},"      console.log('唱歌')\n",[52,87637,87638],{"class":54,"line":159},[52,87639,616],{"class":79},[52,87641,87642],{"class":54,"line":167},[52,87643,87644],{"class":79},"    \u002F\u002F console.dir(Star.prototype)\n",[52,87646,87647],{"class":54,"line":173},[52,87648,87649],{"class":79},"    const pink = new Star('pink', 18)\n",[52,87651,87652],{"class":54,"line":181},[52,87653,87654],{"class":79},"    const red = new Star('red', 20)\n",[52,87656,87657],{"class":54,"line":186},[52,87658,87659],{"class":79},"    pink.sing()\n",[52,87661,87662],{"class":54,"line":191},[52,87663,87664],{"class":79},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[52,87666,87667],{"class":54,"line":196},[52,87668,123],{"emptyLinePlaceholder":122},[52,87670,87671,87673,87675],{"class":54,"line":201},[52,87672,55067],{"class":79},[52,87674,54463],{"class":53950},[52,87676,53957],{"class":79},[52,87678,87679,87681,87683],{"class":54,"line":206},[52,87680,54435],{"class":79},[52,87682,54450],{"class":53950},[52,87684,53957],{"class":79},[14,87686,87687],{},[4509,87688],{"alt":47,"src":87689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[42,87691,87693],{"className":55717,"code":87692,"language":55719,"meta":47,"style":47},"\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",[49,87694,87695,87703,87711,87716,87721,87726,87731,87735,87740,87745,87750,87754,87759,87763,87767,87772,87776,87784],{"__ignoreMap":47},[52,87696,87697,87699,87701],{"class":54,"line":55},[52,87698,698],{"class":79},[52,87700,54450],{"class":53950},[52,87702,53957],{"class":79},[52,87704,87705,87707,87709],{"class":54,"line":66},[52,87706,54794],{"class":79},[52,87708,54463],{"class":53950},[52,87710,53957],{"class":79},[52,87712,87713],{"class":54,"line":83},[52,87714,87715],{"class":79},"    let that\n",[52,87717,87718],{"class":54,"line":91},[52,87719,87720],{"class":79},"    function Star(uname) {\n",[52,87722,87723],{"class":54,"line":98},[52,87724,87725],{"class":79},"      this.uname = uname\n",[52,87727,87728],{"class":54,"line":107},[52,87729,87730],{"class":79},"      that = this\n",[52,87732,87733],{"class":54,"line":113},[52,87734,616],{"class":79},[52,87736,87737],{"class":54,"line":119},[52,87738,87739],{"class":79},"    \u002F\u002F 实例对象是 ldh\n",[52,87741,87742],{"class":54,"line":126},[52,87743,87744],{"class":79},"    const ldh = new Star('刘德华')\n",[52,87746,87747],{"class":54,"line":132},[52,87748,87749],{"class":79},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[52,87751,87752],{"class":54,"line":138},[52,87753,123],{"emptyLinePlaceholder":122},[52,87755,87756],{"class":54,"line":144},[52,87757,87758],{"class":79},"    Star.sing = function () {\n",[52,87760,87761],{"class":54,"line":153},[52,87762,87635],{"class":79},[52,87764,87765],{"class":54,"line":159},[52,87766,616],{"class":79},[52,87768,87769],{"class":54,"line":167},[52,87770,87771],{"class":79},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[52,87773,87774],{"class":54,"line":173},[52,87775,123],{"emptyLinePlaceholder":122},[52,87777,87778,87780,87782],{"class":54,"line":181},[52,87779,55067],{"class":79},[52,87781,54463],{"class":53950},[52,87783,53957],{"class":79},[52,87785,87786,87788,87790],{"class":54,"line":186},[52,87787,54435],{"class":79},[52,87789,54450],{"class":53950},[52,87791,53957],{"class":79},[14,87793,87794],{},"构造函数的this指向的是实例对象；",[14,87796,87797],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[3195,87799,87801],{"id":87800},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,87803,87804],{},[4509,87805],{"alt":47,"src":87806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[42,87808,87810],{"className":55717,"code":87809,"language":55719,"meta":47,"style":47},"\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",[49,87811,87812,87820,87828,87833,87838,87843,87848,87853,87858,87863,87868,87873,87878,87882,87887,87892,87897,87902,87906,87911,87916,87921,87926,87930,87935,87940,87945,87950,87954,87959,87963,87971],{"__ignoreMap":47},[52,87813,87814,87816,87818],{"class":54,"line":55},[52,87815,698],{"class":79},[52,87817,54450],{"class":53950},[52,87819,53957],{"class":79},[52,87821,87822,87824,87826],{"class":54,"line":66},[52,87823,54794],{"class":79},[52,87825,54463],{"class":53950},[52,87827,53957],{"class":79},[52,87829,87830],{"class":54,"line":83},[52,87831,87832],{"class":79},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[52,87834,87835],{"class":54,"line":91},[52,87836,87837],{"class":79},"    const arr = [1, 2, 3]\n",[52,87839,87840],{"class":54,"line":98},[52,87841,87842],{"class":79},"    \u002F\u002F 自己定义数组的扩展方法\n",[52,87844,87845],{"class":54,"line":107},[52,87846,87847],{"class":79},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[52,87849,87850],{"class":54,"line":113},[52,87851,87852],{"class":79},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[52,87854,87855],{"class":54,"line":119},[52,87856,87857],{"class":79},"    \u002F\u002F ①.最大值\n",[52,87859,87860],{"class":54,"line":126},[52,87861,87862],{"class":79},"    Array.prototype.max = function () {\n",[52,87864,87865],{"class":54,"line":132},[52,87866,87867],{"class":79},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[52,87869,87870],{"class":54,"line":138},[52,87871,87872],{"class":79},"      return Math.max(...this)\n",[52,87874,87875],{"class":54,"line":144},[52,87876,87877],{"class":79},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[52,87879,87880],{"class":54,"line":153},[52,87881,616],{"class":79},[52,87883,87884],{"class":54,"line":159},[52,87885,87886],{"class":79},"    console.log(arr.max())\n",[52,87888,87889],{"class":54,"line":167},[52,87890,87891],{"class":79},"    \u002F\u002F ②最小值\n",[52,87893,87894],{"class":54,"line":173},[52,87895,87896],{"class":79},"    Array.prototype.min = function () {\n",[52,87898,87899],{"class":54,"line":181},[52,87900,87901],{"class":79},"      return Math.min(...this)\n",[52,87903,87904],{"class":54,"line":186},[52,87905,616],{"class":79},[52,87907,87908],{"class":54,"line":191},[52,87909,87910],{"class":79},"    console.log(arr.min())\n",[52,87912,87913],{"class":54,"line":196},[52,87914,87915],{"class":79},"    \u002F\u002F③求和\n",[52,87917,87918],{"class":54,"line":201},[52,87919,87920],{"class":79},"    Array.prototype.sum = function () {\n",[52,87922,87923],{"class":54,"line":206},[52,87924,87925],{"class":79},"      return this.reduce((prev, current) => prev + current, 0)\n",[52,87927,87928],{"class":54,"line":211},[52,87929,616],{"class":79},[52,87931,87932],{"class":54,"line":218},[52,87933,87934],{"class":79},"    console.log(arr.sum())\n",[52,87936,87937],{"class":54,"line":223},[52,87938,87939],{"class":79},"    \u002F\u002F ③排序\n",[52,87941,87942],{"class":54,"line":230},[52,87943,87944],{"class":79},"    Array.prototype.rever = function () {\n",[52,87946,87947],{"class":54,"line":239},[52,87948,87949],{"class":79},"      return this.reverse()\n",[52,87951,87952],{"class":54,"line":251},[52,87953,616],{"class":79},[52,87955,87956],{"class":54,"line":256},[52,87957,87958],{"class":79},"    console.log(arr.rever())\n",[52,87960,87961],{"class":54,"line":262},[52,87962,123],{"emptyLinePlaceholder":122},[52,87964,87965,87967,87969],{"class":54,"line":268},[52,87966,55067],{"class":79},[52,87968,54463],{"class":53950},[52,87970,53957],{"class":79},[52,87972,87973,87975,87977],{"class":54,"line":280},[52,87974,54435],{"class":79},[52,87976,54450],{"class":53950},[52,87978,53957],{"class":79},[14,87980,87981],{},[4509,87982],{"alt":47,"src":87983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[3195,87985,87987],{"id":87986},"_4133-constructor-属性","4.13.3 constructor 属性",[14,87989,87990],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,87992,87993],{},[4509,87994],{"alt":47,"src":87995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[42,87997,87999],{"className":55717,"code":87998,"language":55719,"meta":47,"style":47},"\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",[49,88000,88001,88009,88017,88022,88027,88031,88036,88041,88046,88054],{"__ignoreMap":47},[52,88002,88003,88005,88007],{"class":54,"line":55},[52,88004,698],{"class":79},[52,88006,54450],{"class":53950},[52,88008,53957],{"class":79},[52,88010,88011,88013,88015],{"class":54,"line":66},[52,88012,54794],{"class":79},[52,88014,54463],{"class":53950},[52,88016,53957],{"class":79},[52,88018,88019],{"class":54,"line":83},[52,88020,88021],{"class":79},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[52,88023,88024],{"class":54,"line":91},[52,88025,88026],{"class":79},"    function Star() {\n",[52,88028,88029],{"class":54,"line":98},[52,88030,616],{"class":79},[52,88032,88033],{"class":54,"line":107},[52,88034,88035],{"class":79},"    const ldh = new Star()\n",[52,88037,88038],{"class":54,"line":113},[52,88039,88040],{"class":79},"    console.log(Star.prototype)\n",[52,88042,88043],{"class":54,"line":119},[52,88044,88045],{"class":79},"    console.log(Star.prototype.constructor === Star)\n",[52,88047,88048,88050,88052],{"class":54,"line":126},[52,88049,55067],{"class":79},[52,88051,54463],{"class":53950},[52,88053,53957],{"class":79},[52,88055,88056,88058,88060],{"class":54,"line":132},[52,88057,54435],{"class":79},[52,88059,54450],{"class":53950},[52,88061,53957],{"class":79},[14,88063,88064],{},[4509,88065],{"alt":47,"src":88066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,88068,88069],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[42,88071,88073],{"className":55717,"code":88072,"language":55719,"meta":47,"style":47},"  \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",[49,88074,88075,88083,88087,88091,88095,88100,88105,88110,88114,88119,88124,88129,88134,88139,88144,88148,88152,88157,88162,88167,88171,88176,88181,88185,88189,88193],{"__ignoreMap":47},[52,88076,88077,88079,88081],{"class":54,"line":55},[52,88078,54794],{"class":79},[52,88080,54463],{"class":53950},[52,88082,53957],{"class":79},[52,88084,88085],{"class":54,"line":66},[52,88086,88021],{"class":79},[52,88088,88089],{"class":54,"line":83},[52,88090,88026],{"class":79},[52,88092,88093],{"class":54,"line":91},[52,88094,616],{"class":79},[52,88096,88097],{"class":54,"line":98},[52,88098,88099],{"class":79},"    \u002F\u002F const ldh = new Star()\n",[52,88101,88102],{"class":54,"line":107},[52,88103,88104],{"class":79},"    \u002F\u002F console.log(Star.prototype)\n",[52,88106,88107],{"class":54,"line":113},[52,88108,88109],{"class":79},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[52,88111,88112],{"class":54,"line":119},[52,88113,123],{"emptyLinePlaceholder":122},[52,88115,88116],{"class":54,"line":126},[52,88117,88118],{"class":79},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[52,88120,88121],{"class":54,"line":132},[52,88122,88123],{"class":79},"    \u002F\u002F Star.prototype.sing = function () {\n",[52,88125,88126],{"class":54,"line":138},[52,88127,88128],{"class":79},"    \u002F\u002F   console.log('唱歌')\n",[52,88130,88131],{"class":54,"line":144},[52,88132,88133],{"class":79},"    \u002F\u002F }\n",[52,88135,88136],{"class":54,"line":153},[52,88137,88138],{"class":79},"    \u002F\u002F Star.prototype.dance = function () {\n",[52,88140,88141],{"class":54,"line":159},[52,88142,88143],{"class":79},"    \u002F\u002F   console.log('跳舞')\n",[52,88145,88146],{"class":54,"line":167},[52,88147,88133],{"class":79},[52,88149,88150],{"class":54,"line":173},[52,88151,88040],{"class":79},[52,88153,88154],{"class":54,"line":181},[52,88155,88156],{"class":79},"    Star.prototype = {\n",[52,88158,88159],{"class":54,"line":186},[52,88160,88161],{"class":79},"      sing: function () {\n",[52,88163,88164],{"class":54,"line":191},[52,88165,88166],{"class":79},"        console.log('唱歌')\n",[52,88168,88169],{"class":54,"line":196},[52,88170,80542],{"class":79},[52,88172,88173],{"class":54,"line":201},[52,88174,88175],{"class":79},"      dance: function () {\n",[52,88177,88178],{"class":54,"line":206},[52,88179,88180],{"class":79},"        console.log('跳舞')\n",[52,88182,88183],{"class":54,"line":211},[52,88184,55048],{"class":79},[52,88186,88187],{"class":54,"line":218},[52,88188,616],{"class":79},[52,88190,88191],{"class":54,"line":223},[52,88192,88040],{"class":79},[52,88194,88195,88197,88199],{"class":54,"line":230},[52,88196,55067],{"class":79},[52,88198,54463],{"class":53950},[52,88200,53957],{"class":79},[14,88202,88203],{},"进行输出结果后会发现：",[14,88205,88206],{},[4509,88207],{"alt":47,"src":88208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,88210,88211],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,88213,88214],{},"所以，要重新指回创造这个原型对象的构造函数",[42,88216,88218],{"className":73863,"code":88217,"language":73865,"meta":47,"style":47},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[49,88219,88220,88234,88239,88244,88255,88268,88273,88284,88298,88302],{"__ignoreMap":47},[52,88221,88222,88225,88227,88230,88232],{"class":54,"line":55},[52,88223,88224],{"class":308},"Star",[52,88226,3757],{"class":79},[52,88228,88229],{"class":308},"prototype",[52,88231,16212],{"class":58},[52,88233,18220],{"class":79},[52,88235,88236],{"class":54,"line":66},[52,88237,88238],{"class":94},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[52,88240,88241],{"class":54,"line":83},[52,88242,88243],{"class":79},"  constructor: Star,\n",[52,88245,88246,88249,88251,88253],{"class":54,"line":91},[52,88247,88248],{"class":75},"  sing",[52,88250,54087],{"class":79},[52,88252,57099],{"class":58},[52,88254,57102],{"class":79},[52,88256,88257,88259,88261,88263,88266],{"class":54,"line":98},[52,88258,76403],{"class":79},[52,88260,60897],{"class":75},[52,88262,1216],{"class":79},[52,88264,88265],{"class":62},"'唱歌'",[52,88267,708],{"class":79},[52,88269,88270],{"class":54,"line":107},[52,88271,88272],{"class":79},"   },\n",[52,88274,88275,88278,88280,88282],{"class":54,"line":113},[52,88276,88277],{"class":75},"   dance",[52,88279,54087],{"class":79},[52,88281,57099],{"class":58},[52,88283,57102],{"class":79},[52,88285,88286,88289,88291,88293,88296],{"class":54,"line":119},[52,88287,88288],{"class":79},"     console.",[52,88290,60897],{"class":75},[52,88292,1216],{"class":79},[52,88294,88295],{"class":62},"'跳舞'",[52,88297,708],{"class":79},[52,88299,88300],{"class":54,"line":126},[52,88301,7281],{"class":79},[52,88303,88304],{"class":54,"line":132},[52,88305,452],{"class":79},[14,88307,88308],{},[4509,88309],{"alt":47,"src":88310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,88312,88313],{},"总结1：",[14,88315,88316],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,88318,88319],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,88321,88322],{},"constructor指的是他的来源",[14,88324,88325],{},[4509,88326],{"alt":47,"src":88327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,88329,88330],{},[4509,88331],{"alt":47,"src":88332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,88334,88335],{},"总结2：",[14,88337,88338],{},[4509,88339],{"alt":47,"src":88340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,88342,88343],{},[4509,88344],{"alt":47,"src":88345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,88347,88348],{},[4509,88349],{"alt":47,"src":88350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[3195,88352,88354],{"id":88353},"_4134-对象原型","4.13.4 对象原型",[14,88356,88357],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,88359,88360],{},"对象原型就是__proto__这个属性",[14,88362,88363],{},[4509,88364],{"alt":47,"src":88365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,88367,88368],{},[4509,88369],{"alt":47,"src":88370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,88372,88373],{},[4509,88374],{"alt":47,"src":88375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,88377,88378],{},[4509,88379],{"alt":47,"src":88380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[42,88382,88384],{"className":55717,"code":88383,"language":55719,"meta":47,"style":47},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[49,88385,88386,88394,88402,88406,88410,88414,88419,88427],{"__ignoreMap":47},[52,88387,88388,88390,88392],{"class":54,"line":55},[52,88389,698],{"class":79},[52,88391,54450],{"class":53950},[52,88393,53957],{"class":79},[52,88395,88396,88398,88400],{"class":54,"line":66},[52,88397,54794],{"class":79},[52,88399,54463],{"class":53950},[52,88401,53957],{"class":79},[52,88403,88404],{"class":54,"line":83},[52,88405,88026],{"class":79},[52,88407,88408],{"class":54,"line":91},[52,88409,616],{"class":79},[52,88411,88412],{"class":54,"line":98},[52,88413,88035],{"class":79},[52,88415,88416],{"class":54,"line":107},[52,88417,88418],{"class":79},"    console.log(ldh)\n",[52,88420,88421,88423,88425],{"class":54,"line":113},[52,88422,55067],{"class":79},[52,88424,54463],{"class":53950},[52,88426,53957],{"class":79},[52,88428,88429,88431,88433],{"class":54,"line":119},[52,88430,54435],{"class":79},[52,88432,54450],{"class":53950},[52,88434,53957],{"class":79},[14,88436,88437],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,88439,88440],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,88442,88443],{},[4509,88444],{"alt":47,"src":88445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,88447,88448],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,88450,88451],{},"对象原型指向原型对象",[14,88453,88454],{},[4509,88455],{"alt":47,"src":88456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,88458,88459],{},[4509,88460],{"alt":47,"src":88461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,88463,88464],{},[4509,88465],{"alt":47,"src":88466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[3195,88468,88470],{"id":88469},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,88472,88473],{},[4509,88474],{"alt":47,"src":88475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[1696,88477,88478,88481,88484,88487],{},[32,88479,88480],{},"构造函数通过new的形式实例化得到实例对象",[32,88482,88483],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[32,88485,88486],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[32,88488,88489],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,88491,88492],{},[4509,88493],{"alt":47,"src":88494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,88496,88497],{},"题目梳理：",[14,88499,88500],{},[4509,88501],{"alt":47,"src":88502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[3195,88504,88506],{"id":88505},"_4136-原型继承","4.13.6 原型继承",[14,88508,88509],{},[4509,88510],{"alt":47,"src":88511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,88513,88514],{},[4509,88515],{"alt":47,"src":88516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,88518,88519],{},[4509,88520],{"alt":47,"src":88521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,88523,88524],{},[4509,88525],{"alt":47,"src":88526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,88528,88529],{},[4509,88530],{"alt":47,"src":88531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,88533,88534],{},[4509,88535],{"alt":47,"src":88536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,88538,88539],{},[4509,88540],{"alt":47,"src":88541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,88543,88544],{},[4509,88545],{"alt":47,"src":88546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,88548,88549],{},"回顾：构造函数每次new得到对象都是不同的",[3195,88551,88553],{"id":88552},"_4137-原型链","4.13.7 原型链",[14,88555,88556],{},[4509,88557],{"alt":47,"src":88558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,88560,88561],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,88563,88564],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,88566,88567],{},"大哥是Object",[14,88569,88570],{},[4509,88571],{"alt":47,"src":88572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,88574,88575],{},[4509,88576],{"alt":47,"src":88577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,88579,88580],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,88582,88583],{},"万物皆对象",[3195,88585,88587],{"id":88586},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,88589,88590],{},"模态框",[14,88592,88593],{},"以后遇见这个效果直接使用这个就行",[14,88595,88596],{},[4509,88597],{"alt":47,"src":88598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,88600,88601],{},[4509,88602],{"alt":47,"src":88603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,88605,88606],{},[4509,88607],{"alt":47,"src":88608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,88610,88611],{},[4509,88612],{"alt":47,"src":88613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,88615,88616],{},"补充知识点：",[1696,88618,88619],{},[32,88620,88621],{},"append()",[14,88623,88624],{},[4509,88625],{"alt":47,"src":88626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[42,88628,88630],{"className":53283,"code":88629,"language":53285,"meta":47,"style":47},"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",[49,88631,88632,88637,88642,88647,88651,88655,88659,88664,88669,88674,88678],{"__ignoreMap":47},[52,88633,88634],{"class":54,"line":55},[52,88635,88636],{"class":79},"append(param1)\n",[52,88638,88639],{"class":54,"line":66},[52,88640,88641],{"class":79},"append(param1, param2)\n",[52,88643,88644],{"class":54,"line":83},[52,88645,88646],{"class":79},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[52,88648,88649],{"class":54,"line":91},[52,88650,123],{"emptyLinePlaceholder":122},[52,88652,88653],{"class":54,"line":98},[52,88654,123],{"emptyLinePlaceholder":122},[52,88656,88657],{"class":54,"line":107},[52,88658,123],{"emptyLinePlaceholder":122},[52,88660,88661],{"class":54,"line":113},[52,88662,88663],{"class":79},"let div = document.createElement(\"div\");\n",[52,88665,88666],{"class":54,"line":119},[52,88667,88668],{"class":79},"let p = document.createElement(\"p\");\n",[52,88670,88671],{"class":54,"line":126},[52,88672,88673],{"class":79},"div.append(p);\n",[52,88675,88676],{"class":54,"line":132},[52,88677,123],{"emptyLinePlaceholder":122},[52,88679,88680,88683,88685],{"class":54,"line":138},[52,88681,88682],{"class":79},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[52,88684,14],{"class":53950},[52,88686,88687],{"class":79},"> ]\n",[1696,88689,88690],{"start":66},[32,88691,88692],{},"remove()",[14,88694,88695],{},"自己删自己",[14,88697,88698],{},[4509,88699],{"alt":47,"src":88700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[42,88702,88704],{"className":53283,"code":88703,"language":53285,"meta":47,"style":47},"\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",[49,88705,88706,88716,88730,88734,88742,88756,88776,88788,88796,88803,88815,88828,88863,88875,88886,88898,88910,88922,88949,88959,88963,88967,88976,88988,89002,89012,89024,89028,89032,89042,89053,89063,89073,89086,89099,89109,89113,89117,89126,89136,89148,89152,89156,89165,89175,89185,89197,89201,89205,89215,89231,89242,89252,89262,89274,89286,89298,89302,89306,89319,89330,89334,89342,89350,89354,89362,89382,89402,89410,89415,89441,89446,89451,89470,89475,89487,89492,89503,89513,89523,89528,89533,89537,89542,89547,89552,89572,89577,89597,89602,89616,89621,89626,89631,89647,89651,89656,89685,89690,89695,89700,89711,89715,89719,89723,89728,89753,89758,89783,89788,89797,89801,89806,89831,89835,89860,89864,89873,89877,89882,89900,89910,89914,89922,89930,89934],{"__ignoreMap":47},[52,88707,88708,88710,88712,88714],{"class":54,"line":55},[52,88709,53947],{"class":79},[52,88711,53951],{"class":53950},[52,88713,53954],{"class":75},[52,88715,53957],{"class":79},[52,88717,88718,88720,88722,88724,88726,88728],{"class":54,"line":66},[52,88719,698],{"class":79},[52,88721,53285],{"class":53950},[52,88723,53966],{"class":75},[52,88725,292],{"class":79},[52,88727,53971],{"class":62},[52,88729,53957],{"class":79},[52,88731,88732],{"class":54,"line":83},[52,88733,123],{"emptyLinePlaceholder":122},[52,88735,88736,88738,88740],{"class":54,"line":91},[52,88737,698],{"class":79},[52,88739,53984],{"class":53950},[52,88741,53957],{"class":79},[52,88743,88744,88746,88748,88750,88752,88754],{"class":54,"line":98},[52,88745,54794],{"class":79},[52,88747,53994],{"class":53950},[52,88749,53997],{"class":75},[52,88751,292],{"class":79},[52,88753,54002],{"class":62},[52,88755,53957],{"class":79},[52,88757,88758,88760,88762,88764,88766,88768,88770,88772,88774],{"class":54,"line":107},[52,88759,54794],{"class":79},[52,88761,53994],{"class":53950},[52,88763,17568],{"class":75},[52,88765,292],{"class":79},[52,88767,54041],{"class":62},[52,88769,54021],{"class":75},[52,88771,292],{"class":79},[52,88773,54048],{"class":62},[52,88775,53957],{"class":79},[52,88777,88778,88780,88782,88784,88786],{"class":54,"line":113},[52,88779,54794],{"class":79},[52,88781,54057],{"class":53950},[52,88783,54060],{"class":79},[52,88785,54057],{"class":53950},[52,88787,53957],{"class":79},[52,88789,88790,88792,88794],{"class":54,"line":119},[52,88791,54794],{"class":79},[52,88793,3141],{"class":53950},[52,88795,53957],{"class":79},[52,88797,88798,88801],{"class":54,"line":126},[52,88799,88800],{"class":75},"    .modal",[52,88802,18220],{"class":79},[52,88804,88805,88807,88809,88811,88813],{"class":54,"line":132},[52,88806,57421],{"class":308},[52,88808,54087],{"class":79},[52,88810,6951],{"class":308},[52,88812,54142],{"class":58},[52,88814,80],{"class":79},[52,88816,88817,88820,88822,88824,88826],{"class":54,"line":138},[52,88818,88819],{"class":308},"      min-height",[52,88821,54087],{"class":79},[52,88823,591],{"class":308},[52,88825,54142],{"class":58},[52,88827,80],{"class":79},[52,88829,88830,88832,88834,88836,88838,88840,88842,88844,88846,88848,88850,88852,88854,88856,88858,88861],{"class":54,"line":144},[52,88831,81400],{"class":308},[52,88833,54087],{"class":79},[52,88835,692],{"class":308},[52,88837,1444],{"class":308},[52,88839,5051],{"class":308},[52,88841,54142],{"class":58},[52,88843,81417],{"class":308},[52,88845,1216],{"class":79},[52,88847,692],{"class":308},[52,88849,15083],{"class":79},[52,88851,692],{"class":308},[52,88853,15083],{"class":79},[52,88855,692],{"class":308},[52,88857,15083],{"class":79},[52,88859,88860],{"class":308},"0.1",[52,88862,2737],{"class":79},[52,88864,88865,88867,88869,88871,88873],{"class":54,"line":153},[52,88866,57784],{"class":308},[52,88868,54087],{"class":79},[52,88870,3504],{"class":308},[52,88872,54142],{"class":58},[52,88874,80],{"class":79},[52,88876,88877,88879,88881,88884],{"class":54,"line":159},[52,88878,57409],{"class":308},[52,88880,54087],{"class":79},[52,88882,88883],{"class":308},"fixed",[52,88885,80],{"class":79},[52,88887,88888,88891,88893,88896],{"class":54,"line":167},[52,88889,88890],{"class":308},"      z-index",[52,88892,54087],{"class":79},[52,88894,88895],{"class":308},"999",[52,88897,80],{"class":79},[52,88899,88900,88902,88904,88906,88908],{"class":54,"line":173},[52,88901,57488],{"class":308},[52,88903,54087],{"class":79},[52,88905,3852],{"class":308},[52,88907,1998],{"class":58},[52,88909,80],{"class":79},[52,88911,88912,88914,88916,88918,88920],{"class":54,"line":181},[52,88913,57597],{"class":308},[52,88915,54087],{"class":79},[52,88917,3852],{"class":308},[52,88919,1998],{"class":58},[52,88921,80],{"class":79},[52,88923,88924,88926,88928,88930,88932,88935,88937,88939,88941,88943,88945,88947],{"class":54,"line":186},[52,88925,81441],{"class":308},[52,88927,54087],{"class":79},[52,88929,81446],{"class":308},[52,88931,1216],{"class":79},[52,88933,88934],{"class":308},"-50",[52,88936,1998],{"class":58},[52,88938,15083],{"class":79},[52,88940,88934],{"class":308},[52,88942,1998],{"class":58},[52,88944,15083],{"class":79},[52,88946,692],{"class":308},[52,88948,2737],{"class":79},[52,88950,88951,88953,88955,88957],{"class":54,"line":191},[52,88952,57534],{"class":308},[52,88954,54087],{"class":79},[52,88956,63492],{"class":308},[52,88958,80],{"class":79},[52,88960,88961],{"class":54,"line":196},[52,88962,616],{"class":79},[52,88964,88965],{"class":54,"line":201},[52,88966,123],{"emptyLinePlaceholder":122},[52,88968,88969,88971,88974],{"class":54,"line":206},[52,88970,88800],{"class":75},[52,88972,88973],{"class":75}," .header",[52,88975,18220],{"class":79},[52,88977,88978,88980,88982,88984,88986],{"class":54,"line":211},[52,88979,60009],{"class":308},[52,88981,54087],{"class":79},[52,88983,2007],{"class":308},[52,88985,54142],{"class":58},[52,88987,80],{"class":79},[52,88989,88990,88992,88994,88996,88998,89000],{"class":54,"line":218},[52,88991,57345],{"class":308},[52,88993,54087],{"class":79},[52,88995,692],{"class":308},[52,88997,5051],{"class":308},[52,88999,54142],{"class":58},[52,89001,80],{"class":79},[52,89003,89004,89006,89008,89010],{"class":54,"line":223},[52,89005,57409],{"class":308},[52,89007,54087],{"class":79},[52,89009,57414],{"class":308},[52,89011,80],{"class":79},[52,89013,89014,89016,89018,89020,89022],{"class":54,"line":230},[52,89015,57572],{"class":308},[52,89017,54087],{"class":79},[52,89019,444],{"class":308},[52,89021,54142],{"class":58},[52,89023,80],{"class":79},[52,89025,89026],{"class":54,"line":239},[52,89027,616],{"class":79},[52,89029,89030],{"class":54,"line":251},[52,89031,123],{"emptyLinePlaceholder":122},[52,89033,89034,89036,89038,89040],{"class":54,"line":256},[52,89035,88800],{"class":75},[52,89037,88973],{"class":75},[52,89039,687],{"class":53950},[52,89041,18220],{"class":79},[52,89043,89044,89047,89049,89051],{"class":54,"line":262},[52,89045,89046],{"class":308},"      font-style",[52,89048,54087],{"class":79},[52,89050,66491],{"class":308},[52,89052,80],{"class":79},[52,89054,89055,89057,89059,89061],{"class":54,"line":268},[52,89056,60066],{"class":308},[52,89058,54087],{"class":79},[52,89060,64720],{"class":308},[52,89062,80],{"class":79},[52,89064,89065,89067,89069,89071],{"class":54,"line":280},[52,89066,57409],{"class":308},[52,89068,54087],{"class":79},[52,89070,57481],{"class":308},[52,89072,80],{"class":79},[52,89074,89075,89078,89080,89082,89084],{"class":54,"line":286},[52,89076,89077],{"class":308},"      right",[52,89079,54087],{"class":79},[52,89081,605],{"class":308},[52,89083,54142],{"class":58},[52,89085,80],{"class":79},[52,89087,89088,89090,89092,89095,89097],{"class":54,"line":300},[52,89089,57597],{"class":308},[52,89091,54087],{"class":79},[52,89093,89094],{"class":308},"-2",[52,89096,54142],{"class":58},[52,89098,80],{"class":79},[52,89100,89101,89103,89105,89107],{"class":54,"line":314},[52,89102,64675],{"class":308},[52,89104,54087],{"class":79},[52,89106,64680],{"class":308},[52,89108,80],{"class":79},[52,89110,89111],{"class":54,"line":327},[52,89112,616],{"class":79},[52,89114,89115],{"class":54,"line":333},[52,89116,123],{"emptyLinePlaceholder":122},[52,89118,89119,89121,89124],{"class":54,"line":360},[52,89120,88800],{"class":75},[52,89122,89123],{"class":75}," .body",[52,89125,18220],{"class":79},[52,89127,89128,89130,89132,89134],{"class":54,"line":365},[52,89129,59936],{"class":308},[52,89131,54087],{"class":79},[52,89133,54242],{"class":308},[52,89135,80],{"class":79},[52,89137,89138,89140,89142,89144,89146],{"class":54,"line":371},[52,89139,57345],{"class":308},[52,89141,54087],{"class":79},[52,89143,3649],{"class":308},[52,89145,54142],{"class":58},[52,89147,80],{"class":79},[52,89149,89150],{"class":54,"line":400},[52,89151,616],{"class":79},[52,89153,89154],{"class":54,"line":405},[52,89155,123],{"emptyLinePlaceholder":122},[52,89157,89158,89160,89163],{"class":54,"line":411},[52,89159,88800],{"class":75},[52,89161,89162],{"class":75}," .footer",[52,89164,18220],{"class":79},[52,89166,89167,89169,89171,89173],{"class":54,"line":424},[52,89168,57659],{"class":308},[52,89170,54087],{"class":79},[52,89172,54127],{"class":308},[52,89174,80],{"class":79},[52,89176,89177,89179,89181,89183],{"class":54,"line":436},[52,89178,57670],{"class":308},[52,89180,54087],{"class":79},[52,89182,54230],{"class":308},[52,89184,80],{"class":79},[52,89186,89187,89189,89191,89193,89195],{"class":54,"line":449},[52,89188,57345],{"class":308},[52,89190,54087],{"class":79},[52,89192,3649],{"class":308},[52,89194,54142],{"class":58},[52,89196,80],{"class":79},[52,89198,89199],{"class":54,"line":2160},[52,89200,616],{"class":79},[52,89202,89203],{"class":54,"line":2186},[52,89204,123],{"emptyLinePlaceholder":122},[52,89206,89207,89209,89211,89213],{"class":54,"line":2209},[52,89208,88800],{"class":75},[52,89210,89162],{"class":75},[52,89212,4446],{"class":53950},[52,89214,18220],{"class":79},[52,89216,89217,89219,89221,89223,89225,89227,89229],{"class":54,"line":2233},[52,89218,57345],{"class":308},[52,89220,54087],{"class":79},[52,89222,2313],{"class":308},[52,89224,54142],{"class":58},[52,89226,5096],{"class":308},[52,89228,54142],{"class":58},[52,89230,80],{"class":79},[52,89232,89233,89235,89237,89240],{"class":54,"line":2238},[52,89234,64371],{"class":308},[52,89236,54087],{"class":79},[52,89238,89239],{"class":308},"#ccc",[52,89241,80],{"class":79},[52,89243,89244,89246,89248,89250],{"class":54,"line":2243},[52,89245,66620],{"class":308},[52,89247,54087],{"class":79},[52,89249,57387],{"class":308},[52,89251,80],{"class":79},[52,89253,89254,89256,89258,89260],{"class":54,"line":2248},[52,89255,60066],{"class":308},[52,89257,54087],{"class":79},[52,89259,63492],{"class":308},[52,89261,80],{"class":79},[52,89263,89264,89266,89268,89270,89272],{"class":54,"line":2257},[52,89265,57784],{"class":308},[52,89267,54087],{"class":79},[52,89269,564],{"class":308},[52,89271,54142],{"class":58},[52,89273,80],{"class":79},[52,89275,89276,89278,89280,89282,89284],{"class":54,"line":2262},[52,89277,64400],{"class":308},[52,89279,54087],{"class":79},[52,89281,3649],{"class":308},[52,89283,54142],{"class":58},[52,89285,80],{"class":79},[52,89287,89288,89290,89292,89294,89296],{"class":54,"line":2268},[52,89289,57572],{"class":308},[52,89291,54087],{"class":79},[52,89293,3748],{"class":308},[52,89295,54142],{"class":58},[52,89297,80],{"class":79},[52,89299,89300],{"class":54,"line":2297},[52,89301,616],{"class":79},[52,89303,89304],{"class":54,"line":2303},[52,89305,123],{"emptyLinePlaceholder":122},[52,89307,89308,89310,89312,89314,89317],{"class":54,"line":2318},[52,89309,88800],{"class":75},[52,89311,89162],{"class":75},[52,89313,4446],{"class":53950},[52,89315,89316],{"class":75},".submit",[52,89318,18220],{"class":79},[52,89320,89321,89323,89325,89328],{"class":54,"line":2324},[52,89322,57534],{"class":308},[52,89324,54087],{"class":79},[52,89326,89327],{"class":308},"#369",[52,89329,80],{"class":79},[52,89331,89332],{"class":54,"line":2353},[52,89333,616],{"class":79},[52,89335,89336,89338,89340],{"class":54,"line":2362},[52,89337,55067],{"class":79},[52,89339,3141],{"class":53950},[52,89341,53957],{"class":79},[52,89343,89344,89346,89348],{"class":54,"line":2368},[52,89345,54435],{"class":79},[52,89347,53984],{"class":53950},[52,89349,53957],{"class":79},[52,89351,89352],{"class":54,"line":2376},[52,89353,123],{"emptyLinePlaceholder":122},[52,89355,89356,89358,89360],{"class":54,"line":2381},[52,89357,698],{"class":79},[52,89359,54450],{"class":53950},[52,89361,53957],{"class":79},[52,89363,89364,89366,89368,89370,89372,89375,89378,89380],{"class":54,"line":19252},[52,89365,54794],{"class":79},[52,89367,56537],{"class":53950},[52,89369,17607],{"class":75},[52,89371,292],{"class":79},[52,89373,89374],{"class":62},"\"delete\"",[52,89376,89377],{"class":79},">删除\u003C\u002F",[52,89379,56537],{"class":53950},[52,89381,53957],{"class":79},[52,89383,89384,89386,89388,89390,89392,89395,89398,89400],{"class":54,"line":19258},[52,89385,54794],{"class":79},[52,89387,56537],{"class":53950},[52,89389,17607],{"class":75},[52,89391,292],{"class":79},[52,89393,89394],{"class":62},"\"login\"",[52,89396,89397],{"class":79},">登录\u003C\u002F",[52,89399,56537],{"class":53950},[52,89401,53957],{"class":79},[52,89403,89404,89406,89408],{"class":54,"line":19281},[52,89405,54794],{"class":79},[52,89407,54463],{"class":53950},[52,89409,53957],{"class":79},[52,89411,89412],{"class":54,"line":19287},[52,89413,89414],{"class":94},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[52,89416,89417,89419,89422,89424,89426,89428,89430,89432,89435,89437,89439],{"class":54,"line":19310},[52,89418,72734],{"class":58},[52,89420,89421],{"class":75}," Modal",[52,89423,1216],{"class":79},[52,89425,54057],{"class":1223},[52,89427,16212],{"class":58},[52,89429,72580],{"class":62},[52,89431,15083],{"class":79},[52,89433,89434],{"class":1223},"message",[52,89436,16212],{"class":58},[52,89438,72580],{"class":62},[52,89440,15090],{"class":79},[52,89442,89443],{"class":54,"line":19324},[52,89444,89445],{"class":94},"      \u002F\u002F 创建Model 模态框盒子\n",[52,89447,89448],{"class":54,"line":19344},[52,89449,89450],{"class":94},"      \u002F\u002F 1.1 创建div标签\n",[52,89452,89453,89455,89458,89460,89462,89464,89466,89468],{"class":54,"line":19350},[52,89454,72701],{"class":308},[52,89456,89457],{"class":79},".modalBox ",[52,89459,292],{"class":58},[52,89461,57046],{"class":79},[52,89463,72801],{"class":75},[52,89465,1216],{"class":79},[52,89467,84581],{"class":62},[52,89469,708],{"class":79},[52,89471,89472],{"class":54,"line":19361},[52,89473,89474],{"class":94},"      \u002F\u002F 1.2 给div 添加类名为model\n",[52,89476,89477,89479,89482,89484],{"class":54,"line":19384},[52,89478,72701],{"class":308},[52,89480,89481],{"class":79},".modalBox.className ",[52,89483,292],{"class":58},[52,89485,89486],{"class":62}," 'modal'\n",[52,89488,89489],{"class":54,"line":19406},[52,89490,89491],{"class":94},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[52,89493,89494,89496,89499,89501],{"class":54,"line":19411},[52,89495,72701],{"class":308},[52,89497,89498],{"class":79},".modalBox.innerHTML ",[52,89500,292],{"class":58},[52,89502,72818],{"class":62},[52,89504,89505,89508,89510],{"class":54,"line":19417},[52,89506,89507],{"class":62},"        \u003Cdiv class=\"header\">${",[52,89509,54057],{"class":79},[52,89511,89512],{"class":62},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[52,89514,89515,89518,89520],{"class":54,"line":19431},[52,89516,89517],{"class":62},"        \u003Cdiv class=\"body\">${",[52,89519,89434],{"class":79},[52,89521,89522],{"class":62},"}\u003C\u002Fdiv>\n",[52,89524,89525],{"class":54,"line":19444},[52,89526,89527],{"class":62},"      `\n",[52,89529,89530],{"class":54,"line":19449},[52,89531,89532],{"class":94},"      \u002F\u002F console.log(this.modalBox)\n",[52,89534,89535],{"class":54,"line":19463},[52,89536,616],{"class":79},[52,89538,89539],{"class":54,"line":19468},[52,89540,89541],{"class":94},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[52,89543,89544],{"class":54,"line":19474},[52,89545,89546],{"class":94},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[52,89548,89549],{"class":54,"line":19479},[52,89550,89551],{"class":94},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[52,89553,89554,89557,89559,89561,89563,89566,89568,89570],{"class":54,"line":19493},[52,89555,89556],{"class":308},"    Modal",[52,89558,3757],{"class":79},[52,89560,88229],{"class":308},[52,89562,3757],{"class":79},[52,89564,89565],{"class":75},"open",[52,89567,16212],{"class":58},[52,89569,61568],{"class":58},[52,89571,57102],{"class":79},[52,89573,89574],{"class":54,"line":19498},[52,89575,89576],{"class":94},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[52,89578,89579,89581,89584,89586,89588,89590,89592,89595],{"class":54,"line":19503},[52,89580,60878],{"class":58},[52,89582,89583],{"class":308}," box",[52,89585,16212],{"class":58},[52,89587,57046],{"class":79},[52,89589,57049],{"class":75},[52,89591,1216],{"class":79},[52,89593,89594],{"class":62},"'.modal'",[52,89596,708],{"class":79},[52,89598,89599],{"class":54,"line":19517},[52,89600,89601],{"class":94},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[52,89603,89604,89607,89609,89612,89614],{"class":54,"line":19529},[52,89605,89606],{"class":79},"      box ",[52,89608,4747],{"class":58},[52,89610,89611],{"class":79}," box.",[52,89613,59656],{"class":75},[52,89615,248],{"class":79},[52,89617,89618],{"class":54,"line":19534},[52,89619,89620],{"class":94},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[52,89622,89623],{"class":54,"line":19547},[52,89624,89625],{"class":94},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[52,89627,89628],{"class":54,"line":19552},[52,89629,89630],{"class":94},"      \u002F\u002F append可以增加对象\n",[52,89632,89633,89636,89639,89641,89644],{"class":54,"line":19557},[52,89634,89635],{"class":79},"      document.body.",[52,89637,89638],{"class":75},"append",[52,89640,1216],{"class":79},[52,89642,89643],{"class":308},"this",[52,89645,89646],{"class":79},".modalBox)\n",[52,89648,89649],{"class":54,"line":19562},[52,89650,123],{"emptyLinePlaceholder":122},[52,89652,89653],{"class":54,"line":19575},[52,89654,89655],{"class":94},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[52,89657,89658,89660,89663,89665,89667,89670,89672,89674,89676,89678,89681,89683],{"class":54,"line":19580},[52,89659,72701],{"class":308},[52,89661,89662],{"class":79},".modalBox.",[52,89664,57049],{"class":75},[52,89666,1216],{"class":79},[52,89668,89669],{"class":62},"'i'",[52,89671,33476],{"class":79},[52,89673,60463],{"class":75},[52,89675,1216],{"class":79},[52,89677,60468],{"class":62},[52,89679,89680],{"class":79},", () ",[52,89682,87372],{"class":58},[52,89684,18220],{"class":79},[52,89686,89687],{"class":54,"line":35283},[52,89688,89689],{"class":94},"        \u002F\u002F 这个地方需要用到箭头函数\n",[52,89691,89692],{"class":54,"line":35289},[52,89693,89694],{"class":94},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[52,89696,89697],{"class":54,"line":35295},[52,89698,89699],{"class":94},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[52,89701,89702,89704,89706,89709],{"class":54,"line":35301},[52,89703,67376],{"class":308},[52,89705,3757],{"class":79},[52,89707,89708],{"class":75},"close",[52,89710,248],{"class":79},[52,89712,89713],{"class":54,"line":35307},[52,89714,67465],{"class":79},[52,89716,89717],{"class":54,"line":35318},[52,89718,616],{"class":79},[52,89720,89721],{"class":54,"line":35324},[52,89722,123],{"emptyLinePlaceholder":122},[52,89724,89725],{"class":54,"line":35344},[52,89726,89727],{"class":94},"    \u002F\u002F 测试一下 点击 删除按钮\n",[52,89729,89730,89732,89734,89736,89739,89741,89743,89745,89747,89749,89751],{"class":54,"line":35350},[52,89731,55057],{"class":79},[52,89733,57049],{"class":75},[52,89735,1216],{"class":79},[52,89737,89738],{"class":62},"'#delete'",[52,89740,33476],{"class":79},[52,89742,60463],{"class":75},[52,89744,1216],{"class":79},[52,89746,60468],{"class":62},[52,89748,89680],{"class":79},[52,89750,87372],{"class":58},[52,89752,18220],{"class":79},[52,89754,89755],{"class":54,"line":35361},[52,89756,89757],{"class":94},"      \u002F\u002F 先调用Model构造函数\n",[52,89759,89760,89762,89765,89767,89769,89771,89773,89776,89778,89781],{"class":54,"line":35367},[52,89761,60878],{"class":58},[52,89763,89764],{"class":308}," del",[52,89766,16212],{"class":58},[52,89768,14226],{"class":58},[52,89770,89421],{"class":75},[52,89772,1216],{"class":79},[52,89774,89775],{"class":62},"'温馨的提示'",[52,89777,15083],{"class":79},[52,89779,89780],{"class":62},"'您没有删除权限操作'",[52,89782,708],{"class":79},[52,89784,89785],{"class":54,"line":35373},[52,89786,89787],{"class":94},"      \u002F\u002F 实例对象调用open方法\n",[52,89789,89790,89793,89795],{"class":54,"line":35379},[52,89791,89792],{"class":79},"      del.",[52,89794,89565],{"class":75},[52,89796,248],{"class":79},[52,89798,89799],{"class":54,"line":35385},[52,89800,36111],{"class":79},[52,89802,89803],{"class":54,"line":35391},[52,89804,89805],{"class":94},"    \u002F\u002F 测试一下 点击 登录按钮\n",[52,89807,89808,89810,89812,89814,89817,89819,89821,89823,89825,89827,89829],{"class":54,"line":35397},[52,89809,55057],{"class":79},[52,89811,57049],{"class":75},[52,89813,1216],{"class":79},[52,89815,89816],{"class":62},"'#login'",[52,89818,33476],{"class":79},[52,89820,60463],{"class":75},[52,89822,1216],{"class":79},[52,89824,60468],{"class":62},[52,89826,89680],{"class":79},[52,89828,87372],{"class":58},[52,89830,18220],{"class":79},[52,89832,89833],{"class":54,"line":35403},[52,89834,89757],{"class":94},[52,89836,89837,89839,89842,89844,89846,89848,89850,89853,89855,89858],{"class":54,"line":35423},[52,89838,60878],{"class":58},[52,89840,89841],{"class":308}," log",[52,89843,16212],{"class":58},[52,89845,14226],{"class":58},[52,89847,89421],{"class":75},[52,89849,1216],{"class":79},[52,89851,89852],{"class":62},"'友情提示'",[52,89854,15083],{"class":79},[52,89856,89857],{"class":62},"'您还没有登录呢'",[52,89859,708],{"class":79},[52,89861,89862],{"class":54,"line":35429},[52,89863,89787],{"class":94},[52,89865,89866,89869,89871],{"class":54,"line":35445},[52,89867,89868],{"class":79},"      log.",[52,89870,89565],{"class":75},[52,89872,248],{"class":79},[52,89874,89875],{"class":54,"line":35451},[52,89876,36111],{"class":79},[52,89878,89879],{"class":54,"line":35465},[52,89880,89881],{"class":94},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[52,89883,89884,89886,89888,89890,89892,89894,89896,89898],{"class":54,"line":35471},[52,89885,89556],{"class":308},[52,89887,3757],{"class":79},[52,89889,88229],{"class":308},[52,89891,3757],{"class":79},[52,89893,89708],{"class":75},[52,89895,16212],{"class":58},[52,89897,61568],{"class":58},[52,89899,57102],{"class":79},[52,89901,89902,89904,89906,89908],{"class":54,"line":35486},[52,89903,72701],{"class":308},[52,89905,89662],{"class":79},[52,89907,59656],{"class":75},[52,89909,248],{"class":79},[52,89911,89912],{"class":54,"line":35492},[52,89913,616],{"class":79},[52,89915,89916,89918,89920],{"class":54,"line":35501},[52,89917,55067],{"class":79},[52,89919,54463],{"class":53950},[52,89921,53957],{"class":79},[52,89923,89924,89926,89928],{"class":54,"line":35507},[52,89925,54435],{"class":79},[52,89927,54450],{"class":53950},[52,89929,53957],{"class":79},[52,89931,89932],{"class":54,"line":35516},[52,89933,123],{"emptyLinePlaceholder":122},[52,89935,89936,89938,89940],{"class":54,"line":35522},[52,89937,54435],{"class":79},[52,89939,53285],{"class":53950},[52,89941,53957],{"class":79},[14,89943,89944],{},[4509,89945],{"alt":47,"src":89946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[18,89948,89950],{"id":89949},"_414-深浅拷贝","4.14 深浅拷贝",[3195,89952,89954],{"id":89953},"_4141-浅拷贝","4.14.1 浅拷贝",[14,89956,89957],{},[4509,89958],{"alt":47,"src":89959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,89961,89962],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,89964,89965],{},[4509,89966],{"alt":47,"src":89967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,89969,89970],{},[4509,89971],{"alt":47,"src":89972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,89974,89975],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,89977,89978],{},[4509,89979],{"alt":47,"src":89980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,89982,13980],{},[14,89984,89985],{},[4509,89986],{"alt":47,"src":89987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[3195,89989,89991],{"id":89990},"_4142-深拷贝","4.14.2 深拷贝",[14,89993,89994],{},"深拷贝：拷贝的是对象，不是地址",[14,89996,89997],{},"常用的三种方法：",[1696,89999,90000,90003,90006],{},[32,90001,90002],{},"通过递归实现深拷贝",[32,90004,90005],{},"lodash\u002FcloneDeep",[32,90007,90008],{},"通过JSON.stringify()实现",[24646,90010,90012],{"id":90011},"_41421-递归函数","4.14.2.1 递归函数",[14,90014,90015],{},[4509,90016],{"alt":47,"src":90017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[1696,90019,90020],{},[32,90021,90022],{},"死递归占溢出：",[42,90024,90026],{"className":55717,"code":90025,"language":55719,"meta":47,"style":47},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[49,90027,90028,90036,90044,90048,90053,90057,90062,90070],{"__ignoreMap":47},[52,90029,90030,90032,90034],{"class":54,"line":55},[52,90031,698],{"class":79},[52,90033,54450],{"class":53950},[52,90035,53957],{"class":79},[52,90037,90038,90040,90042],{"class":54,"line":66},[52,90039,54794],{"class":79},[52,90041,54463],{"class":53950},[52,90043,53957],{"class":79},[52,90045,90046],{"class":54,"line":83},[52,90047,79793],{"class":79},[52,90049,90050],{"class":54,"line":91},[52,90051,90052],{"class":79},"      fn()\n",[52,90054,90055],{"class":54,"line":98},[52,90056,616],{"class":79},[52,90058,90059],{"class":54,"line":107},[52,90060,90061],{"class":79},"    fn()\n",[52,90063,90064,90066,90068],{"class":54,"line":113},[52,90065,55067],{"class":79},[52,90067,54463],{"class":53950},[52,90069,53957],{"class":79},[52,90071,90072,90074,90076],{"class":54,"line":119},[52,90073,54435],{"class":79},[52,90075,54450],{"class":53950},[52,90077,53957],{"class":79},[1696,90079,90080],{"start":66},[32,90081,90082],{},"递归函数要加判断条件：",[14,90084,90085],{},[4509,90086],{"alt":47,"src":90087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[1696,90089,90090],{"start":83},[32,90091,90092],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[42,90094,90096],{"className":53283,"code":90095,"language":53285,"meta":47,"style":47},"\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",[49,90097,90098,90108,90122,90126,90134,90148,90168,90180,90188,90192,90200,90212,90220,90228,90253,90265,90269,90276,90284,90292,90296],{"__ignoreMap":47},[52,90099,90100,90102,90104,90106],{"class":54,"line":55},[52,90101,53947],{"class":79},[52,90103,53951],{"class":53950},[52,90105,53954],{"class":75},[52,90107,53957],{"class":79},[52,90109,90110,90112,90114,90116,90118,90120],{"class":54,"line":66},[52,90111,698],{"class":79},[52,90113,53285],{"class":53950},[52,90115,53966],{"class":75},[52,90117,292],{"class":79},[52,90119,53971],{"class":62},[52,90121,53957],{"class":79},[52,90123,90124],{"class":54,"line":83},[52,90125,123],{"emptyLinePlaceholder":122},[52,90127,90128,90130,90132],{"class":54,"line":91},[52,90129,698],{"class":79},[52,90131,53984],{"class":53950},[52,90133,53957],{"class":79},[52,90135,90136,90138,90140,90142,90144,90146],{"class":54,"line":98},[52,90137,54794],{"class":79},[52,90139,53994],{"class":53950},[52,90141,53997],{"class":75},[52,90143,292],{"class":79},[52,90145,54002],{"class":62},[52,90147,53957],{"class":79},[52,90149,90150,90152,90154,90156,90158,90160,90162,90164,90166],{"class":54,"line":107},[52,90151,54794],{"class":79},[52,90153,53994],{"class":53950},[52,90155,17568],{"class":75},[52,90157,292],{"class":79},[52,90159,54041],{"class":62},[52,90161,54021],{"class":75},[52,90163,292],{"class":79},[52,90165,54048],{"class":62},[52,90167,53957],{"class":79},[52,90169,90170,90172,90174,90176,90178],{"class":54,"line":113},[52,90171,54794],{"class":79},[52,90173,54057],{"class":53950},[52,90175,54060],{"class":79},[52,90177,54057],{"class":53950},[52,90179,53957],{"class":79},[52,90181,90182,90184,90186],{"class":54,"line":119},[52,90183,54435],{"class":79},[52,90185,53984],{"class":53950},[52,90187,53957],{"class":79},[52,90189,90190],{"class":54,"line":126},[52,90191,123],{"emptyLinePlaceholder":122},[52,90193,90194,90196,90198],{"class":54,"line":132},[52,90195,698],{"class":79},[52,90197,54450],{"class":53950},[52,90199,53957],{"class":79},[52,90201,90202,90204,90206,90208,90210],{"class":54,"line":138},[52,90203,54794],{"class":79},[52,90205,54261],{"class":53950},[52,90207,57964],{"class":79},[52,90209,54261],{"class":53950},[52,90211,53957],{"class":79},[52,90213,90214,90216,90218],{"class":54,"line":144},[52,90215,54794],{"class":79},[52,90217,54463],{"class":53950},[52,90219,53957],{"class":79},[52,90221,90222,90224,90226],{"class":54,"line":153},[52,90223,72734],{"class":58},[52,90225,76423],{"class":75},[52,90227,13501],{"class":79},[52,90229,90230,90232,90234,90236,90238,90240,90242,90244,90246,90248,90251],{"class":54,"line":159},[52,90231,58421],{"class":79},[52,90233,57049],{"class":75},[52,90235,1216],{"class":79},[52,90237,84581],{"class":62},[52,90239,76899],{"class":79},[52,90241,292],{"class":58},[52,90243,14226],{"class":58},[52,90245,76439],{"class":75},[52,90247,19909],{"class":79},[52,90249,90250],{"class":75},"toLocaleString",[52,90252,248],{"class":79},[52,90254,90255,90258,90261,90263],{"class":54,"line":167},[52,90256,90257],{"class":75},"      setTimeout",[52,90259,90260],{"class":79},"(getTime, ",[52,90262,9373],{"class":308},[52,90264,708],{"class":79},[52,90266,90267],{"class":54,"line":173},[52,90268,616],{"class":79},[52,90270,90271,90274],{"class":54,"line":181},[52,90272,90273],{"class":75},"    getTime",[52,90275,248],{"class":79},[52,90277,90278,90280,90282],{"class":54,"line":186},[52,90279,55067],{"class":79},[52,90281,54463],{"class":53950},[52,90283,53957],{"class":79},[52,90285,90286,90288,90290],{"class":54,"line":191},[52,90287,54435],{"class":79},[52,90289,54450],{"class":53950},[52,90291,53957],{"class":79},[52,90293,90294],{"class":54,"line":196},[52,90295,123],{"emptyLinePlaceholder":122},[52,90297,90298,90300,90302],{"class":54,"line":201},[52,90299,54435],{"class":79},[52,90301,53285],{"class":53950},[52,90303,53957],{"class":79},[14,90305,90306],{},[4509,90307],{"alt":47,"src":90308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[1696,90310,90311],{"start":91},[32,90312,90002],{},[14,90314,90315],{},[4509,90316],{"alt":47,"src":90317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,90319,90320],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,90322,41839],{},[14,90324,90325],{},"这个是简易版的递归函数深拷贝",[14,90327,90328],{},"一定要注意先数组再对象，因为万物皆可对象",[42,90330,90332],{"className":53283,"code":90331,"language":53285,"meta":47,"style":47},"\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",[49,90333,90334,90344,90358,90362,90370,90384,90404,90416,90424,90428,90436,90444,90454,90463,90471,90487,90491,90499,90503,90507,90519,90524,90543,90559,90564,90569,90574,90589,90594,90599,90608,90616,90633,90641,90647,90655,90660,90665,90674,90678,90682,90686,90697,90706,90716,90730,90740,90748,90756,90764,90768],{"__ignoreMap":47},[52,90335,90336,90338,90340,90342],{"class":54,"line":55},[52,90337,53947],{"class":79},[52,90339,53951],{"class":53950},[52,90341,53954],{"class":75},[52,90343,53957],{"class":79},[52,90345,90346,90348,90350,90352,90354,90356],{"class":54,"line":66},[52,90347,698],{"class":79},[52,90349,53285],{"class":53950},[52,90351,53966],{"class":75},[52,90353,292],{"class":79},[52,90355,53971],{"class":62},[52,90357,53957],{"class":79},[52,90359,90360],{"class":54,"line":83},[52,90361,123],{"emptyLinePlaceholder":122},[52,90363,90364,90366,90368],{"class":54,"line":91},[52,90365,698],{"class":79},[52,90367,53984],{"class":53950},[52,90369,53957],{"class":79},[52,90371,90372,90374,90376,90378,90380,90382],{"class":54,"line":98},[52,90373,54794],{"class":79},[52,90375,53994],{"class":53950},[52,90377,53997],{"class":75},[52,90379,292],{"class":79},[52,90381,54002],{"class":62},[52,90383,53957],{"class":79},[52,90385,90386,90388,90390,90392,90394,90396,90398,90400,90402],{"class":54,"line":107},[52,90387,54794],{"class":79},[52,90389,53994],{"class":53950},[52,90391,17568],{"class":75},[52,90393,292],{"class":79},[52,90395,54041],{"class":62},[52,90397,54021],{"class":75},[52,90399,292],{"class":79},[52,90401,54048],{"class":62},[52,90403,53957],{"class":79},[52,90405,90406,90408,90410,90412,90414],{"class":54,"line":113},[52,90407,54794],{"class":79},[52,90409,54057],{"class":53950},[52,90411,54060],{"class":79},[52,90413,54057],{"class":53950},[52,90415,53957],{"class":79},[52,90417,90418,90420,90422],{"class":54,"line":119},[52,90419,54435],{"class":79},[52,90421,53984],{"class":53950},[52,90423,53957],{"class":79},[52,90425,90426],{"class":54,"line":126},[52,90427,123],{"emptyLinePlaceholder":122},[52,90429,90430,90432,90434],{"class":54,"line":132},[52,90431,698],{"class":79},[52,90433,54450],{"class":53950},[52,90435,53957],{"class":79},[52,90437,90438,90440,90442],{"class":54,"line":138},[52,90439,54794],{"class":79},[52,90441,54463],{"class":53950},[52,90443,53957],{"class":79},[52,90445,90446,90448,90450,90452],{"class":54,"line":144},[52,90447,13869],{"class":58},[52,90449,72621],{"class":308},[52,90451,16212],{"class":58},[52,90453,18220],{"class":79},[52,90455,90456,90458,90461],{"class":54,"line":153},[52,90457,74266],{"class":79},[52,90459,90460],{"class":62},"'pink'",[52,90462,34116],{"class":79},[52,90464,90465,90467,90469],{"class":54,"line":159},[52,90466,74276],{"class":79},[52,90468,309],{"class":308},[52,90470,34116],{"class":79},[52,90472,90473,90476,90479,90481,90484],{"class":54,"line":167},[52,90474,90475],{"class":79},"      hobby: [",[52,90477,90478],{"class":62},"'乒乓球'",[52,90480,15083],{"class":79},[52,90482,90483],{"class":62},"'足球'",[52,90485,90486],{"class":79},"],\n",[52,90488,90489],{"class":54,"line":173},[52,90490,80522],{"class":79},[52,90492,90493,90496],{"class":54,"line":181},[52,90494,90495],{"class":79},"        baby: ",[52,90497,90498],{"class":62},"'小pink'\n",[52,90500,90501],{"class":54,"line":186},[52,90502,55048],{"class":79},[52,90504,90505],{"class":54,"line":191},[52,90506,616],{"class":79},[52,90508,90509,90511,90514,90516],{"class":54,"line":196},[52,90510,13869],{"class":58},[52,90512,90513],{"class":308}," o",[52,90515,16212],{"class":58},[52,90517,90518],{"class":79}," {}\n",[52,90520,90521],{"class":54,"line":201},[52,90522,90523],{"class":94},"    \u002F\u002F 拷贝函数\n",[52,90525,90526,90528,90531,90533,90536,90538,90541],{"class":54,"line":206},[52,90527,72734],{"class":58},[52,90529,90530],{"class":75}," deepCopy",[52,90532,1216],{"class":79},[52,90534,90535],{"class":1223},"newObj",[52,90537,15083],{"class":79},[52,90539,90540],{"class":1223},"oldObj",[52,90542,15090],{"class":79},[52,90544,90545,90547,90549,90551,90554,90556],{"class":54,"line":211},[52,90546,54934],{"class":58},[52,90548,682],{"class":79},[52,90550,54497],{"class":58},[52,90552,90553],{"class":79}," k ",[52,90555,28693],{"class":58},[52,90557,90558],{"class":79}," oldObj) {\n",[52,90560,90561],{"class":54,"line":218},[52,90562,90563],{"class":94},"        \u002F\u002F 处理数组的问题\n",[52,90565,90566],{"class":54,"line":223},[52,90567,90568],{"class":94},"        \u002F\u002F 判断是否属于数组\n",[52,90570,90571],{"class":54,"line":230},[52,90572,90573],{"class":94},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[52,90575,90576,90578,90581,90584,90587],{"class":54,"line":239},[52,90577,5497],{"class":58},[52,90579,90580],{"class":79}," (oldObj[k] ",[52,90582,90583],{"class":58},"instanceof",[52,90585,90586],{"class":75}," Array",[52,90588,15090],{"class":79},[52,90590,90591],{"class":54,"line":251},[52,90592,90593],{"class":94},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[52,90595,90596],{"class":54,"line":256},[52,90597,90598],{"class":94},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[52,90600,90601,90604,90606],{"class":54,"line":262},[52,90602,90603],{"class":79},"          newObj[k] ",[52,90605,292],{"class":58},[52,90607,54488],{"class":79},[52,90609,90610,90613],{"class":54,"line":268},[52,90611,90612],{"class":75},"          deepCopy",[52,90614,90615],{"class":79},"(newObj[k], oldObj[k])\n",[52,90617,90618,90620,90622,90624,90626,90628,90631],{"class":54,"line":280},[52,90619,82730],{"class":79},[52,90621,4733],{"class":58},[52,90623,4736],{"class":58},[52,90625,90580],{"class":79},[52,90627,90583],{"class":58},[52,90629,90630],{"class":75}," Object",[52,90632,15090],{"class":79},[52,90634,90635,90637,90639],{"class":54,"line":286},[52,90636,90603],{"class":79},[52,90638,292],{"class":58},[52,90640,90518],{"class":79},[52,90642,90643,90645],{"class":54,"line":300},[52,90644,90612],{"class":75},[52,90646,90615],{"class":79},[52,90648,90649,90651,90653],{"class":54,"line":314},[52,90650,82730],{"class":79},[52,90652,4733],{"class":58},[52,90654,18220],{"class":79},[52,90656,90657],{"class":54,"line":327},[52,90658,90659],{"class":94},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[52,90661,90662],{"class":54,"line":333},[52,90663,90664],{"class":94},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[52,90666,90667,90669,90671],{"class":54,"line":360},[52,90668,90603],{"class":79},[52,90670,292],{"class":58},[52,90672,90673],{"class":79}," oldObj[k]\n",[52,90675,90676],{"class":54,"line":365},[52,90677,2039],{"class":79},[52,90679,90680],{"class":54,"line":371},[52,90681,55048],{"class":79},[52,90683,90684],{"class":54,"line":400},[52,90685,616],{"class":79},[52,90687,90688,90691,90694],{"class":54,"line":405},[52,90689,90690],{"class":75},"    deepCopy",[52,90692,90693],{"class":79},"(o, obj) ",[52,90695,90696],{"class":94},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[52,90698,90699,90701,90703],{"class":54,"line":411},[52,90700,76403],{"class":79},[52,90702,60897],{"class":75},[52,90704,90705],{"class":79},"(o)\n",[52,90707,90708,90711,90713],{"class":54,"line":424},[52,90709,90710],{"class":79},"    o.age ",[52,90712,292],{"class":58},[52,90714,90715],{"class":308}," 20\n",[52,90717,90718,90721,90723,90725,90727],{"class":54,"line":436},[52,90719,90720],{"class":79},"    o.hobby[",[52,90722,692],{"class":308},[52,90724,7415],{"class":79},[52,90726,292],{"class":58},[52,90728,90729],{"class":62}," '篮球'\n",[52,90731,90732,90735,90737],{"class":54,"line":449},[52,90733,90734],{"class":79},"    o.family ",[52,90736,292],{"class":58},[52,90738,90739],{"class":62}," '老pink'\n",[52,90741,90742,90744,90746],{"class":54,"line":2160},[52,90743,76403],{"class":79},[52,90745,60897],{"class":75},[52,90747,72686],{"class":79},[52,90749,90750,90752,90754],{"class":54,"line":2186},[52,90751,55067],{"class":79},[52,90753,54463],{"class":53950},[52,90755,53957],{"class":79},[52,90757,90758,90760,90762],{"class":54,"line":2209},[52,90759,54435],{"class":79},[52,90761,54450],{"class":53950},[52,90763,53957],{"class":79},[52,90765,90766],{"class":54,"line":2233},[52,90767,123],{"emptyLinePlaceholder":122},[52,90769,90770,90772,90774],{"class":54,"line":2238},[52,90771,54435],{"class":79},[52,90773,53285],{"class":53950},[52,90775,53957],{"class":79},[14,90777,90778],{},[4509,90779],{"alt":47,"src":90780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[24646,90782,90784,90785],{"id":90783},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2389,90786,90787],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,90789,90790],{},[3451,90791,90792],{"href":90792,"rel":90793},"https:\u002F\u002Fwww.lodashjs.com\u002F",[26514],[14,90795,90796],{},"lodash里边的方法都要加上一个下划线_",[14,90798,90799],{},"_.cloneDeep()",[42,90801,90803],{"className":53283,"code":90802,"language":53285,"meta":47,"style":47},"\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",[49,90804,90805,90815,90829,90833,90841,90855,90875,90887,90895,90899,90907,90912,90931,90939,90949,90957,90965,90977,90981,90987,90991,90995,91011,91019,91028,91036,91044,91052,91056],{"__ignoreMap":47},[52,90806,90807,90809,90811,90813],{"class":54,"line":55},[52,90808,53947],{"class":79},[52,90810,53951],{"class":53950},[52,90812,53954],{"class":75},[52,90814,53957],{"class":79},[52,90816,90817,90819,90821,90823,90825,90827],{"class":54,"line":66},[52,90818,698],{"class":79},[52,90820,53285],{"class":53950},[52,90822,53966],{"class":75},[52,90824,292],{"class":79},[52,90826,53971],{"class":62},[52,90828,53957],{"class":79},[52,90830,90831],{"class":54,"line":83},[52,90832,123],{"emptyLinePlaceholder":122},[52,90834,90835,90837,90839],{"class":54,"line":91},[52,90836,698],{"class":79},[52,90838,53984],{"class":53950},[52,90840,53957],{"class":79},[52,90842,90843,90845,90847,90849,90851,90853],{"class":54,"line":98},[52,90844,54794],{"class":79},[52,90846,53994],{"class":53950},[52,90848,53997],{"class":75},[52,90850,292],{"class":79},[52,90852,54002],{"class":62},[52,90854,53957],{"class":79},[52,90856,90857,90859,90861,90863,90865,90867,90869,90871,90873],{"class":54,"line":107},[52,90858,54794],{"class":79},[52,90860,53994],{"class":53950},[52,90862,17568],{"class":75},[52,90864,292],{"class":79},[52,90866,54041],{"class":62},[52,90868,54021],{"class":75},[52,90870,292],{"class":79},[52,90872,54048],{"class":62},[52,90874,53957],{"class":79},[52,90876,90877,90879,90881,90883,90885],{"class":54,"line":113},[52,90878,54794],{"class":79},[52,90880,54057],{"class":53950},[52,90882,54060],{"class":79},[52,90884,54057],{"class":53950},[52,90886,53957],{"class":79},[52,90888,90889,90891,90893],{"class":54,"line":119},[52,90890,54435],{"class":79},[52,90892,53984],{"class":53950},[52,90894,53957],{"class":79},[52,90896,90897],{"class":54,"line":126},[52,90898,123],{"emptyLinePlaceholder":122},[52,90900,90901,90903,90905],{"class":54,"line":132},[52,90902,698],{"class":79},[52,90904,54450],{"class":53950},[52,90906,53957],{"class":79},[52,90908,90909],{"class":54,"line":138},[52,90910,90911],{"class":94},"  \u003C!-- 先引用这个库 -->\n",[52,90913,90914,90916,90918,90920,90922,90925,90927,90929],{"class":54,"line":144},[52,90915,54794],{"class":79},[52,90917,54463],{"class":53950},[52,90919,57889],{"class":75},[52,90921,292],{"class":79},[52,90923,90924],{"class":62},"\"lodash.min.js\"",[52,90926,57964],{"class":79},[52,90928,54463],{"class":53950},[52,90930,53957],{"class":79},[52,90932,90933,90935,90937],{"class":54,"line":153},[52,90934,54794],{"class":79},[52,90936,54463],{"class":53950},[52,90938,53957],{"class":79},[52,90940,90941,90943,90945,90947],{"class":54,"line":159},[52,90942,13869],{"class":58},[52,90944,72621],{"class":308},[52,90946,16212],{"class":58},[52,90948,18220],{"class":79},[52,90950,90951,90953,90955],{"class":54,"line":167},[52,90952,74266],{"class":79},[52,90954,90460],{"class":62},[52,90956,34116],{"class":79},[52,90958,90959,90961,90963],{"class":54,"line":173},[52,90960,74276],{"class":79},[52,90962,309],{"class":308},[52,90964,34116],{"class":79},[52,90966,90967,90969,90971,90973,90975],{"class":54,"line":181},[52,90968,90475],{"class":79},[52,90970,90478],{"class":62},[52,90972,15083],{"class":79},[52,90974,90483],{"class":62},[52,90976,90486],{"class":79},[52,90978,90979],{"class":54,"line":186},[52,90980,80522],{"class":79},[52,90982,90983,90985],{"class":54,"line":191},[52,90984,90495],{"class":79},[52,90986,90498],{"class":62},[52,90988,90989],{"class":54,"line":196},[52,90990,55048],{"class":79},[52,90992,90993],{"class":54,"line":201},[52,90994,616],{"class":79},[52,90996,90997,90999,91001,91003,91006,91009],{"class":54,"line":206},[52,90998,13869],{"class":58},[52,91000,90513],{"class":308},[52,91002,16212],{"class":58},[52,91004,91005],{"class":79}," _.",[52,91007,91008],{"class":75},"cloneDeep",[52,91010,72686],{"class":79},[52,91012,91013,91015,91017],{"class":54,"line":211},[52,91014,76403],{"class":79},[52,91016,60897],{"class":75},[52,91018,90705],{"class":79},[52,91020,91021,91024,91026],{"class":54,"line":218},[52,91022,91023],{"class":79},"    o.family.baby ",[52,91025,292],{"class":58},[52,91027,90739],{"class":62},[52,91029,91030,91032,91034],{"class":54,"line":223},[52,91031,76403],{"class":79},[52,91033,60897],{"class":75},[52,91035,72686],{"class":79},[52,91037,91038,91040,91042],{"class":54,"line":230},[52,91039,55067],{"class":79},[52,91041,54463],{"class":53950},[52,91043,53957],{"class":79},[52,91045,91046,91048,91050],{"class":54,"line":239},[52,91047,54435],{"class":79},[52,91049,54450],{"class":53950},[52,91051,53957],{"class":79},[52,91053,91054],{"class":54,"line":251},[52,91055,123],{"emptyLinePlaceholder":122},[52,91057,91058,91060,91062],{"class":54,"line":256},[52,91059,54435],{"class":79},[52,91061,53285],{"class":53950},[52,91063,53957],{"class":79},[14,91065,91066],{},[4509,91067],{"alt":47,"src":91068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[24646,91070,91072],{"id":91071},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[42,91074,91076],{"className":53283,"code":91075,"language":53285,"meta":47,"style":47},"\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",[49,91077,91078,91088,91102,91106,91114,91128,91148,91160,91168,91172,91180,91188,91198,91206,91214,91226,91230,91236,91240,91244,91249,91254,91259,91285,91293,91302,91310,91318,91326,91330],{"__ignoreMap":47},[52,91079,91080,91082,91084,91086],{"class":54,"line":55},[52,91081,53947],{"class":79},[52,91083,53951],{"class":53950},[52,91085,53954],{"class":75},[52,91087,53957],{"class":79},[52,91089,91090,91092,91094,91096,91098,91100],{"class":54,"line":66},[52,91091,698],{"class":79},[52,91093,53285],{"class":53950},[52,91095,53966],{"class":75},[52,91097,292],{"class":79},[52,91099,53971],{"class":62},[52,91101,53957],{"class":79},[52,91103,91104],{"class":54,"line":83},[52,91105,123],{"emptyLinePlaceholder":122},[52,91107,91108,91110,91112],{"class":54,"line":91},[52,91109,698],{"class":79},[52,91111,53984],{"class":53950},[52,91113,53957],{"class":79},[52,91115,91116,91118,91120,91122,91124,91126],{"class":54,"line":98},[52,91117,54794],{"class":79},[52,91119,53994],{"class":53950},[52,91121,53997],{"class":75},[52,91123,292],{"class":79},[52,91125,54002],{"class":62},[52,91127,53957],{"class":79},[52,91129,91130,91132,91134,91136,91138,91140,91142,91144,91146],{"class":54,"line":107},[52,91131,54794],{"class":79},[52,91133,53994],{"class":53950},[52,91135,17568],{"class":75},[52,91137,292],{"class":79},[52,91139,54041],{"class":62},[52,91141,54021],{"class":75},[52,91143,292],{"class":79},[52,91145,54048],{"class":62},[52,91147,53957],{"class":79},[52,91149,91150,91152,91154,91156,91158],{"class":54,"line":113},[52,91151,54794],{"class":79},[52,91153,54057],{"class":53950},[52,91155,54060],{"class":79},[52,91157,54057],{"class":53950},[52,91159,53957],{"class":79},[52,91161,91162,91164,91166],{"class":54,"line":119},[52,91163,54435],{"class":79},[52,91165,53984],{"class":53950},[52,91167,53957],{"class":79},[52,91169,91170],{"class":54,"line":126},[52,91171,123],{"emptyLinePlaceholder":122},[52,91173,91174,91176,91178],{"class":54,"line":132},[52,91175,698],{"class":79},[52,91177,54450],{"class":53950},[52,91179,53957],{"class":79},[52,91181,91182,91184,91186],{"class":54,"line":138},[52,91183,54794],{"class":79},[52,91185,54463],{"class":53950},[52,91187,53957],{"class":79},[52,91189,91190,91192,91194,91196],{"class":54,"line":144},[52,91191,13869],{"class":58},[52,91193,72621],{"class":308},[52,91195,16212],{"class":58},[52,91197,18220],{"class":79},[52,91199,91200,91202,91204],{"class":54,"line":153},[52,91201,74266],{"class":79},[52,91203,90460],{"class":62},[52,91205,34116],{"class":79},[52,91207,91208,91210,91212],{"class":54,"line":159},[52,91209,74276],{"class":79},[52,91211,309],{"class":308},[52,91213,34116],{"class":79},[52,91215,91216,91218,91220,91222,91224],{"class":54,"line":167},[52,91217,90475],{"class":79},[52,91219,90478],{"class":62},[52,91221,15083],{"class":79},[52,91223,90483],{"class":62},[52,91225,90486],{"class":79},[52,91227,91228],{"class":54,"line":173},[52,91229,80522],{"class":79},[52,91231,91232,91234],{"class":54,"line":181},[52,91233,90495],{"class":79},[52,91235,90498],{"class":62},[52,91237,91238],{"class":54,"line":186},[52,91239,55048],{"class":79},[52,91241,91242],{"class":54,"line":191},[52,91243,616],{"class":79},[52,91245,91246],{"class":54,"line":196},[52,91247,91248],{"class":94},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[52,91250,91251],{"class":54,"line":201},[52,91252,91253],{"class":94},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[52,91255,91256],{"class":54,"line":206},[52,91257,91258],{"class":94},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[52,91260,91261,91263,91265,91267,91270,91272,91275,91277,91279,91281,91283],{"class":54,"line":211},[52,91262,13869],{"class":58},[52,91264,90513],{"class":308},[52,91266,16212],{"class":58},[52,91268,91269],{"class":308}," JSON",[52,91271,3757],{"class":79},[52,91273,91274],{"class":75},"parse",[52,91276,1216],{"class":79},[52,91278,74314],{"class":308},[52,91280,3757],{"class":79},[52,91282,74319],{"class":75},[52,91284,74322],{"class":79},[52,91286,91287,91289,91291],{"class":54,"line":218},[52,91288,76403],{"class":79},[52,91290,60897],{"class":75},[52,91292,90705],{"class":79},[52,91294,91295,91297,91299],{"class":54,"line":223},[52,91296,91023],{"class":79},[52,91298,292],{"class":58},[52,91300,91301],{"class":62}," '123'\n",[52,91303,91304,91306,91308],{"class":54,"line":230},[52,91305,76403],{"class":79},[52,91307,60897],{"class":75},[52,91309,72686],{"class":79},[52,91311,91312,91314,91316],{"class":54,"line":239},[52,91313,55067],{"class":79},[52,91315,54463],{"class":53950},[52,91317,53957],{"class":79},[52,91319,91320,91322,91324],{"class":54,"line":251},[52,91321,54435],{"class":79},[52,91323,54450],{"class":53950},[52,91325,53957],{"class":79},[52,91327,91328],{"class":54,"line":256},[52,91329,123],{"emptyLinePlaceholder":122},[52,91331,91332,91334,91336],{"class":54,"line":262},[52,91333,54435],{"class":79},[52,91335,53285],{"class":53950},[52,91337,53957],{"class":79},[14,91339,91340],{},[4509,91341],{"alt":47,"src":91342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[18,91344,91346],{"id":91345},"_415-异常处理","4.15 异常处理",[1696,91348,91349],{},[32,91350,91351],{},"throw抛异常",[14,91353,91354],{},[4509,91355],{"alt":47,"src":91356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[1696,91358,91359],{"start":66},[32,91360,91361],{},"try\u002Fcatch 捕获错误信息",[14,91363,91364],{},[4509,91365],{"alt":47,"src":91366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[42,91368,91370],{"className":53283,"code":91369,"language":53285,"meta":47,"style":47},"\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",[49,91371,91372,91382,91396,91400,91408,91422,91442,91454,91462,91466,91474,91486,91494,91503,91510,91515,91534,91543,91554,91559,91569,91574,91579,91584,91601,91605,91610,91617,91629,91633,91645,91649,91653,91658,91663,91670,91678,91686,91690],{"__ignoreMap":47},[52,91373,91374,91376,91378,91380],{"class":54,"line":55},[52,91375,53947],{"class":79},[52,91377,53951],{"class":53950},[52,91379,53954],{"class":75},[52,91381,53957],{"class":79},[52,91383,91384,91386,91388,91390,91392,91394],{"class":54,"line":66},[52,91385,698],{"class":79},[52,91387,53285],{"class":53950},[52,91389,53966],{"class":75},[52,91391,292],{"class":79},[52,91393,53971],{"class":62},[52,91395,53957],{"class":79},[52,91397,91398],{"class":54,"line":83},[52,91399,123],{"emptyLinePlaceholder":122},[52,91401,91402,91404,91406],{"class":54,"line":91},[52,91403,698],{"class":79},[52,91405,53984],{"class":53950},[52,91407,53957],{"class":79},[52,91409,91410,91412,91414,91416,91418,91420],{"class":54,"line":98},[52,91411,54794],{"class":79},[52,91413,53994],{"class":53950},[52,91415,53997],{"class":75},[52,91417,292],{"class":79},[52,91419,54002],{"class":62},[52,91421,53957],{"class":79},[52,91423,91424,91426,91428,91430,91432,91434,91436,91438,91440],{"class":54,"line":107},[52,91425,54794],{"class":79},[52,91427,53994],{"class":53950},[52,91429,17568],{"class":75},[52,91431,292],{"class":79},[52,91433,54041],{"class":62},[52,91435,54021],{"class":75},[52,91437,292],{"class":79},[52,91439,54048],{"class":62},[52,91441,53957],{"class":79},[52,91443,91444,91446,91448,91450,91452],{"class":54,"line":113},[52,91445,54794],{"class":79},[52,91447,54057],{"class":53950},[52,91449,54060],{"class":79},[52,91451,54057],{"class":53950},[52,91453,53957],{"class":79},[52,91455,91456,91458,91460],{"class":54,"line":119},[52,91457,54435],{"class":79},[52,91459,53984],{"class":53950},[52,91461,53957],{"class":79},[52,91463,91464],{"class":54,"line":126},[52,91465,123],{"emptyLinePlaceholder":122},[52,91467,91468,91470,91472],{"class":54,"line":132},[52,91469,698],{"class":79},[52,91471,54450],{"class":53950},[52,91473,53957],{"class":79},[52,91475,91476,91478,91480,91482,91484],{"class":54,"line":138},[52,91477,54794],{"class":79},[52,91479,14],{"class":53950},[52,91481,56144],{"class":79},[52,91483,14],{"class":53950},[52,91485,53957],{"class":79},[52,91487,91488,91490,91492],{"class":54,"line":144},[52,91489,54794],{"class":79},[52,91491,54463],{"class":53950},[52,91493,53957],{"class":79},[52,91495,91496,91498,91501],{"class":54,"line":153},[52,91497,72734],{"class":58},[52,91499,91500],{"class":75}," fn",[52,91502,13501],{"class":79},[52,91504,91505,91508],{"class":54,"line":159},[52,91506,91507],{"class":58},"      try",[52,91509,18220],{"class":79},[52,91511,91512],{"class":54,"line":167},[52,91513,91514],{"class":94},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[52,91516,91517,91519,91521,91523,91525,91527,91529,91532],{"class":54,"line":173},[52,91518,63920],{"class":58},[52,91520,9785],{"class":308},[52,91522,16212],{"class":58},[52,91524,57046],{"class":79},[52,91526,57049],{"class":75},[52,91528,1216],{"class":79},[52,91530,91531],{"class":62},"'.p'",[52,91533,708],{"class":79},[52,91535,91536,91539,91541],{"class":54,"line":181},[52,91537,91538],{"class":79},"        p.style.color ",[52,91540,292],{"class":58},[52,91542,69701],{"class":62},[52,91544,91545,91548,91551],{"class":54,"line":186},[52,91546,91547],{"class":79},"      } ",[52,91549,91550],{"class":58},"catch",[52,91552,91553],{"class":79}," (err) {\n",[52,91555,91556],{"class":54,"line":191},[52,91557,91558],{"class":94},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[52,91560,91561,91564,91566],{"class":54,"line":196},[52,91562,91563],{"class":79},"        console.",[52,91565,60897],{"class":75},[52,91567,91568],{"class":79},"(err.message)\n",[52,91570,91571],{"class":54,"line":201},[52,91572,91573],{"class":94},"        \u002F\u002F 想要中断程序，需要加return\n",[52,91575,91576],{"class":54,"line":206},[52,91577,91578],{"class":94},"        \u002F\u002F return\n",[52,91580,91581],{"class":54,"line":211},[52,91582,91583],{"class":94},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[52,91585,91586,91589,91591,91594,91596,91599],{"class":54,"line":218},[52,91587,91588],{"class":58},"        throw",[52,91590,14226],{"class":58},[52,91592,91593],{"class":75}," Error",[52,91595,1216],{"class":79},[52,91597,91598],{"class":62},"'你看看，选择器错误了吧'",[52,91600,708],{"class":79},[52,91602,91603],{"class":54,"line":223},[52,91604,55048],{"class":79},[52,91606,91607],{"class":54,"line":230},[52,91608,91609],{"class":94},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[52,91611,91612,91615],{"class":54,"line":239},[52,91613,91614],{"class":58},"      finally",[52,91616,18220],{"class":79},[52,91618,91619,91622,91624,91627],{"class":54,"line":251},[52,91620,91621],{"class":75},"        alert",[52,91623,1216],{"class":79},[52,91625,91626],{"class":62},"'弹出对话框'",[52,91628,708],{"class":79},[52,91630,91631],{"class":54,"line":256},[52,91632,55048],{"class":79},[52,91634,91635,91637,91639,91641,91643],{"class":54,"line":262},[52,91636,60894],{"class":79},[52,91638,60897],{"class":75},[52,91640,1216],{"class":79},[52,91642,3673],{"class":308},[52,91644,708],{"class":79},[52,91646,91647],{"class":54,"line":268},[52,91648,123],{"emptyLinePlaceholder":122},[52,91650,91651],{"class":54,"line":280},[52,91652,616],{"class":79},[52,91654,91655],{"class":54,"line":286},[52,91656,91657],{"class":94},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[52,91659,91660],{"class":54,"line":300},[52,91661,91662],{"class":94},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[52,91664,91665,91668],{"class":54,"line":314},[52,91666,91667],{"class":75},"    fn",[52,91669,248],{"class":79},[52,91671,91672,91674,91676],{"class":54,"line":327},[52,91673,55067],{"class":79},[52,91675,54463],{"class":53950},[52,91677,53957],{"class":79},[52,91679,91680,91682,91684],{"class":54,"line":333},[52,91681,54435],{"class":79},[52,91683,54450],{"class":53950},[52,91685,53957],{"class":79},[52,91687,91688],{"class":54,"line":360},[52,91689,123],{"emptyLinePlaceholder":122},[52,91691,91692,91694,91696],{"class":54,"line":365},[52,91693,54435],{"class":79},[52,91695,53285],{"class":53950},[52,91697,53957],{"class":79},[14,91699,91700],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[1696,91702,91703],{"start":83},[32,91704,91705],{},"debugger",[14,91707,91708],{},[4509,91709],{"alt":47,"src":91710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,91712,91713],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[18,91715,91717],{"id":91716},"_416-处理this","4.16 处理this",[3195,91719,91721],{"id":91720},"_4161-this的指向","4.16.1 this的指向",[1696,91723,91724],{},[32,91725,91726],{},"普通函数的this",[14,91728,91729],{},[4509,91730],{"alt":47,"src":91731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[1696,91733,91734],{"start":66},[32,91735,91736],{},"箭头函数的this",[14,91738,91739],{},[4509,91740],{"alt":47,"src":91741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,91743,91744],{},[4509,91745],{"alt":47,"src":91746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,91748,91749],{},[4509,91750],{"alt":47,"src":91751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[3195,91753,91755],{"id":91754},"_4162-this的改变","4.16.2 this的改变",[14,91757,91758],{},"call() apply() bind()",[1696,91760,91761],{},[32,91762,91763],{},"call()",[14,91765,91766],{},[4509,91767],{"alt":47,"src":91768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,91770,91771],{},"两个作用：①调用函数；②改变this指向",[42,91773,91775],{"className":55717,"code":91774,"language":55719,"meta":47,"style":47},"\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",[49,91776,91777,91785,91793,91797,91802,91806,91811,91816,91821,91825,91830,91838],{"__ignoreMap":47},[52,91778,91779,91781,91783],{"class":54,"line":55},[52,91780,698],{"class":79},[52,91782,54450],{"class":53950},[52,91784,53957],{"class":79},[52,91786,91787,91789,91791],{"class":54,"line":66},[52,91788,54794],{"class":79},[52,91790,54463],{"class":53950},[52,91792,53957],{"class":79},[52,91794,91795],{"class":54,"line":83},[52,91796,74173],{"class":79},[52,91798,91799],{"class":54,"line":91},[52,91800,91801],{"class":79},"      uname: 'pink'\n",[52,91803,91804],{"class":54,"line":98},[52,91805,616],{"class":79},[52,91807,91808],{"class":54,"line":107},[52,91809,91810],{"class":79},"    function fn(x, y) {\n",[52,91812,91813],{"class":54,"line":113},[52,91814,91815],{"class":79},"      console.log(this)  \u002F\u002Fwindow\n",[52,91817,91818],{"class":54,"line":119},[52,91819,91820],{"class":79},"      console.log(x + y)\n",[52,91822,91823],{"class":54,"line":126},[52,91824,616],{"class":79},[52,91826,91827],{"class":54,"line":132},[52,91828,91829],{"class":79},"    fn.call(obj, 1, 2)\n",[52,91831,91832,91834,91836],{"class":54,"line":138},[52,91833,55067],{"class":79},[52,91835,54463],{"class":53950},[52,91837,53957],{"class":79},[52,91839,91840,91842,91844],{"class":54,"line":144},[52,91841,54435],{"class":79},[52,91843,54450],{"class":53950},[52,91845,53957],{"class":79},[14,91847,91848],{},[4509,91849],{"alt":47,"src":91850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[1696,91852,91853],{"start":66},[32,91854,91855],{},"apply()",[14,91857,91858],{},[4509,91859],{"alt":47,"src":91860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,91862,91771],{},[14,91864,91865],{},"call传递的是普通参数，而apply必须传递的是数组",[42,91867,91869],{"className":53283,"code":91868,"language":53285,"meta":47,"style":47},"\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",[49,91870,91871,91881,91895,91899,91907,91921,91941,91953,91961,91965,91973,91981,91991,91998,92002,92007,92023,92035,92049,92053,92058,92077,92082,92086,92091,92096,92104,92109,92131,92136,92152,92168,92180,92184,92189,92208,92216,92224,92228],{"__ignoreMap":47},[52,91872,91873,91875,91877,91879],{"class":54,"line":55},[52,91874,53947],{"class":79},[52,91876,53951],{"class":53950},[52,91878,53954],{"class":75},[52,91880,53957],{"class":79},[52,91882,91883,91885,91887,91889,91891,91893],{"class":54,"line":66},[52,91884,698],{"class":79},[52,91886,53285],{"class":53950},[52,91888,53966],{"class":75},[52,91890,292],{"class":79},[52,91892,53971],{"class":62},[52,91894,53957],{"class":79},[52,91896,91897],{"class":54,"line":83},[52,91898,123],{"emptyLinePlaceholder":122},[52,91900,91901,91903,91905],{"class":54,"line":91},[52,91902,698],{"class":79},[52,91904,53984],{"class":53950},[52,91906,53957],{"class":79},[52,91908,91909,91911,91913,91915,91917,91919],{"class":54,"line":98},[52,91910,54794],{"class":79},[52,91912,53994],{"class":53950},[52,91914,53997],{"class":75},[52,91916,292],{"class":79},[52,91918,54002],{"class":62},[52,91920,53957],{"class":79},[52,91922,91923,91925,91927,91929,91931,91933,91935,91937,91939],{"class":54,"line":107},[52,91924,54794],{"class":79},[52,91926,53994],{"class":53950},[52,91928,17568],{"class":75},[52,91930,292],{"class":79},[52,91932,54041],{"class":62},[52,91934,54021],{"class":75},[52,91936,292],{"class":79},[52,91938,54048],{"class":62},[52,91940,53957],{"class":79},[52,91942,91943,91945,91947,91949,91951],{"class":54,"line":113},[52,91944,54794],{"class":79},[52,91946,54057],{"class":53950},[52,91948,54060],{"class":79},[52,91950,54057],{"class":53950},[52,91952,53957],{"class":79},[52,91954,91955,91957,91959],{"class":54,"line":119},[52,91956,54435],{"class":79},[52,91958,53984],{"class":53950},[52,91960,53957],{"class":79},[52,91962,91963],{"class":54,"line":126},[52,91964,123],{"emptyLinePlaceholder":122},[52,91966,91967,91969,91971],{"class":54,"line":132},[52,91968,698],{"class":79},[52,91970,54450],{"class":53950},[52,91972,53957],{"class":79},[52,91974,91975,91977,91979],{"class":54,"line":138},[52,91976,54794],{"class":79},[52,91978,54463],{"class":53950},[52,91980,53957],{"class":79},[52,91982,91983,91985,91987,91989],{"class":54,"line":144},[52,91984,13869],{"class":58},[52,91986,72621],{"class":308},[52,91988,16212],{"class":58},[52,91990,18220],{"class":79},[52,91992,91993,91995],{"class":54,"line":153},[52,91994,74276],{"class":79},[52,91996,91997],{"class":308},"18\n",[52,91999,92000],{"class":54,"line":159},[52,92001,616],{"class":79},[52,92003,92004],{"class":54,"line":167},[52,92005,92006],{"class":94},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[52,92008,92009,92011,92013,92015,92017,92019,92021],{"class":54,"line":173},[52,92010,72734],{"class":58},[52,92012,91500],{"class":75},[52,92014,1216],{"class":79},[52,92016,4010],{"class":1223},[52,92018,15083],{"class":79},[52,92020,4035],{"class":1223},[52,92022,15090],{"class":79},[52,92024,92025,92027,92029,92031,92033],{"class":54,"line":181},[52,92026,60894],{"class":79},[52,92028,60897],{"class":75},[52,92030,1216],{"class":79},[52,92032,89643],{"class":308},[52,92034,708],{"class":79},[52,92036,92037,92039,92041,92044,92046],{"class":54,"line":186},[52,92038,60894],{"class":79},[52,92040,60897],{"class":75},[52,92042,92043],{"class":79},"(x ",[52,92045,2004],{"class":58},[52,92047,92048],{"class":79}," y)\n",[52,92050,92051],{"class":54,"line":191},[52,92052,616],{"class":79},[52,92054,92055],{"class":54,"line":196},[52,92056,92057],{"class":94},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[52,92059,92060,92063,92066,92069,92071,92073,92075],{"class":54,"line":201},[52,92061,92062],{"class":79},"    fn.",[52,92064,92065],{"class":75},"apply",[52,92067,92068],{"class":79},"(obj, [",[52,92070,629],{"class":308},[52,92072,15083],{"class":79},[52,92074,564],{"class":308},[52,92076,7629],{"class":79},[52,92078,92079],{"class":54,"line":206},[52,92080,92081],{"class":94},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[52,92083,92084],{"class":54,"line":211},[52,92085,123],{"emptyLinePlaceholder":122},[52,92087,92088],{"class":54,"line":218},[52,92089,92090],{"class":94},"    \u002F\u002F 使用场景：求数组最大值\n",[52,92092,92093],{"class":54,"line":223},[52,92094,92095],{"class":94},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[52,92097,92098,92101],{"class":54,"line":230},[52,92099,92100],{"class":94},"    \u002F\u002F console.log(max)",[52,92102,92103],{"class":94},"   \u002F\u002F3\n",[52,92105,92106],{"class":54,"line":239},[52,92107,92108],{"class":94},"    \u002F\u002F 指向空或者Math都是可以的\n",[52,92110,92111,92113,92115,92117,92119,92121,92123,92125,92127,92129],{"class":54,"line":251},[52,92112,13869],{"class":58},[52,92114,60345],{"class":308},[52,92116,16212],{"class":58},[52,92118,54876],{"class":79},[52,92120,591],{"class":308},[52,92122,15083],{"class":79},[52,92124,3704],{"class":308},[52,92126,15083],{"class":79},[52,92128,3734],{"class":308},[52,92130,35896],{"class":79},[52,92132,92133],{"class":54,"line":256},[52,92134,92135],{"class":94},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[52,92137,92138,92140,92142,92144,92147,92149],{"class":54,"line":262},[52,92139,13869],{"class":58},[52,92141,8916],{"class":308},[52,92143,16212],{"class":58},[52,92145,92146],{"class":79}," Math.max.",[52,92148,92065],{"class":75},[52,92150,92151],{"class":79},"(Math, arr)\n",[52,92153,92154,92156,92159,92161,92164,92166],{"class":54,"line":268},[52,92155,13869],{"class":58},[52,92157,92158],{"class":308}," min",[52,92160,16212],{"class":58},[52,92162,92163],{"class":79}," Math.min.",[52,92165,92065],{"class":75},[52,92167,92151],{"class":79},[52,92169,92170,92172,92174,92177],{"class":54,"line":280},[52,92171,76403],{"class":79},[52,92173,60897],{"class":75},[52,92175,92176],{"class":79},"(max, min)     ",[52,92178,92179],{"class":94},"\u002F\u002F100,4\n",[52,92181,92182],{"class":54,"line":286},[52,92183,123],{"emptyLinePlaceholder":122},[52,92185,92186],{"class":54,"line":300},[52,92187,92188],{"class":94},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[52,92190,92191,92193,92195,92198,92200,92202,92205],{"class":54,"line":314},[52,92192,76403],{"class":79},[52,92194,60897],{"class":75},[52,92196,92197],{"class":79},"(Max.",[52,92199,8979],{"class":75},[52,92201,1216],{"class":79},[52,92203,92204],{"class":58},"...",[52,92206,92207],{"class":79},"arr))\n",[52,92209,92210,92212,92214],{"class":54,"line":327},[52,92211,55067],{"class":79},[52,92213,54463],{"class":53950},[52,92215,53957],{"class":79},[52,92217,92218,92220,92222],{"class":54,"line":333},[52,92219,54435],{"class":79},[52,92221,54450],{"class":53950},[52,92223,53957],{"class":79},[52,92225,92226],{"class":54,"line":360},[52,92227,123],{"emptyLinePlaceholder":122},[52,92229,92230,92232,92234],{"class":54,"line":365},[52,92231,54435],{"class":79},[52,92233,53285],{"class":53950},[52,92235,53957],{"class":79},[14,92237,92238],{},[4509,92239],{"alt":47,"src":92240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[1696,92242,92243],{"start":83},[32,92244,92245],{},"bind()",[14,92247,92248],{},[4509,92249],{"alt":47,"src":92250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,92252,92253],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,92255,92256],{},"bind的语法跟call很相似",[42,92258,92260],{"className":55717,"code":92259,"language":55719,"meta":47,"style":47},"\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",[49,92261,92262,92270,92278,92282,92287,92291,92295,92300,92304,92309,92314,92319,92324,92329,92334,92339,92343,92351],{"__ignoreMap":47},[52,92263,92264,92266,92268],{"class":54,"line":55},[52,92265,698],{"class":79},[52,92267,54450],{"class":53950},[52,92269,53957],{"class":79},[52,92271,92272,92274,92276],{"class":54,"line":66},[52,92273,54794],{"class":79},[52,92275,54463],{"class":53950},[52,92277,53957],{"class":79},[52,92279,92280],{"class":54,"line":83},[52,92281,74173],{"class":79},[52,92283,92284],{"class":54,"line":91},[52,92285,92286],{"class":79},"      age: 18\n",[52,92288,92289],{"class":54,"line":98},[52,92290,616],{"class":79},[52,92292,92293],{"class":54,"line":107},[52,92294,79793],{"class":79},[52,92296,92297],{"class":54,"line":113},[52,92298,92299],{"class":79},"      console.log(this)\n",[52,92301,92302],{"class":54,"line":119},[52,92303,616],{"class":79},[52,92305,92306],{"class":54,"line":126},[52,92307,92308],{"class":79},"    \u002F\u002F 1.bind 不会调用函数\n",[52,92310,92311],{"class":54,"line":132},[52,92312,92313],{"class":79},"    \u002F\u002F 2.bind能改变this的指向\n",[52,92315,92316],{"class":54,"line":138},[52,92317,92318],{"class":79},"    fn.bind()\n",[52,92320,92321],{"class":54,"line":144},[52,92322,92323],{"class":79},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[52,92325,92326],{"class":54,"line":153},[52,92327,92328],{"class":79},"    const fun = fn.bind(obj)\n",[52,92330,92331],{"class":54,"line":159},[52,92332,92333],{"class":79},"    \u002F\u002F console.log(fun)\n",[52,92335,92336],{"class":54,"line":167},[52,92337,92338],{"class":79},"    \u002F\u002F 调用,查看this的指向\n",[52,92340,92341],{"class":54,"line":173},[52,92342,55301],{"class":79},[52,92344,92345,92347,92349],{"class":54,"line":181},[52,92346,55067],{"class":79},[52,92348,54463],{"class":53950},[52,92350,53957],{"class":79},[52,92352,92353,92355,92357],{"class":54,"line":186},[52,92354,54435],{"class":79},[52,92356,54450],{"class":53950},[52,92358,53957],{"class":79},[14,92360,92361],{},[4509,92362],{"alt":47,"src":92363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[1696,92365,92366],{"start":91},[32,92367,92368],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[42,92370,92372],{"className":55717,"code":92371,"language":55719,"meta":47,"style":47},"\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",[49,92373,92374,92382,92395,92403,92408,92412,92417,92422,92427,92432,92437,92442,92447,92452,92456,92464],{"__ignoreMap":47},[52,92375,92376,92378,92380],{"class":54,"line":55},[52,92377,698],{"class":79},[52,92379,54450],{"class":53950},[52,92381,53957],{"class":79},[52,92383,92384,92386,92388,92391,92393],{"class":54,"line":66},[52,92385,54794],{"class":79},[52,92387,56537],{"class":53950},[52,92389,92390],{"class":79},">禁用\u003C\u002F",[52,92392,56537],{"class":53950},[52,92394,53957],{"class":79},[52,92396,92397,92399,92401],{"class":54,"line":83},[52,92398,54794],{"class":79},[52,92400,54463],{"class":53950},[52,92402,53957],{"class":79},[52,92404,92405],{"class":54,"line":91},[52,92406,92407],{"class":79},"    const btn = document.querySelector('button')\n",[52,92409,92410],{"class":54,"line":98},[52,92411,61666],{"class":79},[52,92413,92414],{"class":54,"line":107},[52,92415,92416],{"class":79},"      this.disabled = true\n",[52,92418,92419],{"class":54,"line":113},[52,92420,92421],{"class":79},"      \u002F\u002F 定时器是window进行调用的\n",[52,92423,92424],{"class":54,"line":119},[52,92425,92426],{"class":79},"      setTimeout(function () {\n",[52,92428,92429],{"class":54,"line":126},[52,92430,92431],{"class":79},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[52,92433,92434],{"class":54,"line":132},[52,92435,92436],{"class":79},"        this.disabled = false\n",[52,92438,92439],{"class":54,"line":138},[52,92440,92441],{"class":79},"      }.bind(this), 2000)\n",[52,92443,92444],{"class":54,"line":144},[52,92445,92446],{"class":79},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[52,92448,92449],{"class":54,"line":153},[52,92450,92451],{"class":79},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[52,92453,92454],{"class":54,"line":159},[52,92455,36111],{"class":79},[52,92457,92458,92460,92462],{"class":54,"line":167},[52,92459,55067],{"class":79},[52,92461,54463],{"class":53950},[52,92463,53957],{"class":79},[52,92465,92466,92468,92470],{"class":54,"line":173},[52,92467,54435],{"class":79},[52,92469,54450],{"class":53950},[52,92471,53957],{"class":79},[1696,92473,92474],{"start":98},[32,92475,24601],{},[14,92477,92478],{},[4509,92479],{"alt":47,"src":92480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[18,92482,92484],{"id":92483},"_417-性能优化","4.17 性能优化",[3195,92486,92488],{"id":92487},"_4171-防抖","4.17.1 防抖",[14,92490,92491],{},[4509,92492],{"alt":47,"src":92493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,92495,92496],{},[2389,92497,92498],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,92500,92501],{},"防抖实现方式：",[29,92503,92504],{},[32,92505,92506],{},"lodash 提供了防抖处理",[14,92508,92509],{},"_.debounce(func,[wait=0],[options={}])",[14,92511,92512],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[42,92514,92516],{"className":53283,"code":92515,"language":53285,"meta":47,"style":47},"\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",[49,92517,92518,92528,92542,92546,92554,92568,92588,92600,92608,92614,92624,92636,92648,92659,92671,92681,92691,92704,92708,92716,92724,92728,92736,92754,92772,92780,92799,92809,92818,92829,92834,92838,92843,92848,92853,92878,92886,92894,92898],{"__ignoreMap":47},[52,92519,92520,92522,92524,92526],{"class":54,"line":55},[52,92521,53947],{"class":79},[52,92523,53951],{"class":53950},[52,92525,53954],{"class":75},[52,92527,53957],{"class":79},[52,92529,92530,92532,92534,92536,92538,92540],{"class":54,"line":66},[52,92531,698],{"class":79},[52,92533,53285],{"class":53950},[52,92535,53966],{"class":75},[52,92537,292],{"class":79},[52,92539,53971],{"class":62},[52,92541,53957],{"class":79},[52,92543,92544],{"class":54,"line":83},[52,92545,123],{"emptyLinePlaceholder":122},[52,92547,92548,92550,92552],{"class":54,"line":91},[52,92549,698],{"class":79},[52,92551,53984],{"class":53950},[52,92553,53957],{"class":79},[52,92555,92556,92558,92560,92562,92564,92566],{"class":54,"line":98},[52,92557,54794],{"class":79},[52,92559,53994],{"class":53950},[52,92561,53997],{"class":75},[52,92563,292],{"class":79},[52,92565,54002],{"class":62},[52,92567,53957],{"class":79},[52,92569,92570,92572,92574,92576,92578,92580,92582,92584,92586],{"class":54,"line":107},[52,92571,54794],{"class":79},[52,92573,53994],{"class":53950},[52,92575,17568],{"class":75},[52,92577,292],{"class":79},[52,92579,54041],{"class":62},[52,92581,54021],{"class":75},[52,92583,292],{"class":79},[52,92585,54048],{"class":62},[52,92587,53957],{"class":79},[52,92589,92590,92592,92594,92596,92598],{"class":54,"line":113},[52,92591,54794],{"class":79},[52,92593,54057],{"class":53950},[52,92595,54060],{"class":79},[52,92597,54057],{"class":53950},[52,92599,53957],{"class":79},[52,92601,92602,92604,92606],{"class":54,"line":119},[52,92603,54794],{"class":79},[52,92605,3141],{"class":53950},[52,92607,53957],{"class":79},[52,92609,92610,92612],{"class":54,"line":126},[52,92611,57402],{"class":75},[52,92613,18220],{"class":79},[52,92615,92616,92618,92620,92622],{"class":54,"line":132},[52,92617,75246],{"class":308},[52,92619,54087],{"class":79},[52,92621,63155],{"class":308},[52,92623,80],{"class":79},[52,92625,92626,92628,92630,92632,92634],{"class":54,"line":138},[52,92627,57421],{"class":308},[52,92629,54087],{"class":79},[52,92631,856],{"class":308},[52,92633,54142],{"class":58},[52,92635,80],{"class":79},[52,92637,92638,92640,92642,92644,92646],{"class":54,"line":144},[52,92639,57435],{"class":308},[52,92641,54087],{"class":79},[52,92643,856],{"class":308},[52,92645,54142],{"class":58},[52,92647,80],{"class":79},[52,92649,92650,92652,92654,92657],{"class":54,"line":153},[52,92651,57534],{"class":308},[52,92653,54087],{"class":79},[52,92655,92656],{"class":308},"gray",[52,92658,80],{"class":79},[52,92660,92661,92663,92665,92667,92669],{"class":54,"line":159},[52,92662,57572],{"class":308},[52,92664,54087],{"class":79},[52,92666,4015],{"class":308},[52,92668,54142],{"class":58},[52,92670,80],{"class":79},[52,92672,92673,92675,92677,92679],{"class":54,"line":167},[52,92674,60066],{"class":308},[52,92676,54087],{"class":79},[52,92678,63492],{"class":308},[52,92680,80],{"class":79},[52,92682,92683,92685,92687,92689],{"class":54,"line":173},[52,92684,59936],{"class":308},[52,92686,54087],{"class":79},[52,92688,54242],{"class":308},[52,92690,80],{"class":79},[52,92692,92693,92696,92698,92700,92702],{"class":54,"line":181},[52,92694,92695],{"class":308},"      padding-top",[52,92697,54087],{"class":79},[52,92699,1805],{"class":308},[52,92701,54142],{"class":58},[52,92703,80],{"class":79},[52,92705,92706],{"class":54,"line":186},[52,92707,616],{"class":79},[52,92709,92710,92712,92714],{"class":54,"line":191},[52,92711,55067],{"class":79},[52,92713,3141],{"class":53950},[52,92715,53957],{"class":79},[52,92717,92718,92720,92722],{"class":54,"line":196},[52,92719,54435],{"class":79},[52,92721,53984],{"class":53950},[52,92723,53957],{"class":79},[52,92725,92726],{"class":54,"line":201},[52,92727,123],{"emptyLinePlaceholder":122},[52,92729,92730,92732,92734],{"class":54,"line":206},[52,92731,698],{"class":79},[52,92733,54450],{"class":53950},[52,92735,53957],{"class":79},[52,92737,92738,92740,92742,92744,92746,92748,92750,92752],{"class":54,"line":211},[52,92739,54794],{"class":79},[52,92741,54261],{"class":53950},[52,92743,56136],{"class":75},[52,92745,292],{"class":79},[52,92747,56141],{"class":62},[52,92749,57964],{"class":79},[52,92751,54261],{"class":53950},[52,92753,53957],{"class":79},[52,92755,92756,92758,92760,92762,92764,92766,92768,92770],{"class":54,"line":218},[52,92757,54794],{"class":79},[52,92759,54463],{"class":53950},[52,92761,57889],{"class":75},[52,92763,292],{"class":79},[52,92765,90924],{"class":62},[52,92767,57964],{"class":79},[52,92769,54463],{"class":53950},[52,92771,53957],{"class":79},[52,92773,92774,92776,92778],{"class":54,"line":223},[52,92775,54794],{"class":79},[52,92777,54463],{"class":53950},[52,92779,53957],{"class":79},[52,92781,92782,92784,92786,92788,92790,92792,92794,92797],{"class":54,"line":230},[52,92783,13869],{"class":58},[52,92785,89583],{"class":308},[52,92787,16212],{"class":58},[52,92789,57046],{"class":79},[52,92791,57049],{"class":75},[52,92793,1216],{"class":79},[52,92795,92796],{"class":62},"'.box'",[52,92798,708],{"class":79},[52,92800,92801,92803,92805,92807],{"class":54,"line":239},[52,92802,54869],{"class":58},[52,92804,1871],{"class":79},[52,92806,292],{"class":58},[52,92808,49983],{"class":308},[52,92810,92811,92813,92816],{"class":54,"line":251},[52,92812,72734],{"class":58},[52,92814,92815],{"class":75}," mouseMove",[52,92817,13501],{"class":79},[52,92819,92820,92823,92825,92827],{"class":54,"line":256},[52,92821,92822],{"class":79},"      box.innerHTML ",[52,92824,292],{"class":58},[52,92826,687],{"class":79},[52,92828,5692],{"class":58},[52,92830,92831],{"class":54,"line":262},[52,92832,92833],{"class":94},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[52,92835,92836],{"class":54,"line":268},[52,92837,616],{"class":79},[52,92839,92840],{"class":54,"line":280},[52,92841,92842],{"class":94},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[52,92844,92845],{"class":54,"line":286},[52,92846,92847],{"class":94},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[52,92849,92850],{"class":54,"line":300},[52,92851,92852],{"class":94},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[52,92854,92855,92858,92860,92862,92865,92868,92871,92874,92876],{"class":54,"line":314},[52,92856,92857],{"class":79},"    box.",[52,92859,60463],{"class":75},[52,92861,1216],{"class":79},[52,92863,92864],{"class":62},"'mousemove'",[52,92866,92867],{"class":79},", _.",[52,92869,92870],{"class":75},"debounce",[52,92872,92873],{"class":79},"(mouseMove, ",[52,92875,67724],{"class":308},[52,92877,33147],{"class":79},[52,92879,92880,92882,92884],{"class":54,"line":327},[52,92881,55067],{"class":79},[52,92883,54463],{"class":53950},[52,92885,53957],{"class":79},[52,92887,92888,92890,92892],{"class":54,"line":333},[52,92889,54435],{"class":79},[52,92891,54450],{"class":53950},[52,92893,53957],{"class":79},[52,92895,92896],{"class":54,"line":360},[52,92897,123],{"emptyLinePlaceholder":122},[52,92899,92900,92902,92904],{"class":54,"line":365},[52,92901,54435],{"class":79},[52,92903,53285],{"class":53950},[52,92905,53957],{"class":79},[29,92907,92908],{},[32,92909,92910],{},"手写一个防抖函数来处理",[14,92912,92913],{},"防抖的核心就是利用定时器来实现的：",[14,92915,92916],{},"①声明一个定时器变量",[14,92918,92919],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,92921,92922],{},"③如果没有定时器则开启定时器，记得存到变量里面",[42,92924,92926],{"className":53283,"code":92925,"language":53285,"meta":47,"style":47},"\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",[49,92927,92928,92938,92952,92956,92964,92978,92998,93010,93018,93024,93034,93046,93058,93068,93080,93090,93100,93112,93116,93124,93132,93136,93144,93162,93180,93188,93206,93216,93224,93234,93238,93242,93246,93251,93256,93261,93266,93271,93276,93294,93301,93306,93314,93319,93332,93348,93358,93363,93367,93371,93391,93395,93400,93405,93410,93415,93423,93431,93435],{"__ignoreMap":47},[52,92929,92930,92932,92934,92936],{"class":54,"line":55},[52,92931,53947],{"class":79},[52,92933,53951],{"class":53950},[52,92935,53954],{"class":75},[52,92937,53957],{"class":79},[52,92939,92940,92942,92944,92946,92948,92950],{"class":54,"line":66},[52,92941,698],{"class":79},[52,92943,53285],{"class":53950},[52,92945,53966],{"class":75},[52,92947,292],{"class":79},[52,92949,53971],{"class":62},[52,92951,53957],{"class":79},[52,92953,92954],{"class":54,"line":83},[52,92955,123],{"emptyLinePlaceholder":122},[52,92957,92958,92960,92962],{"class":54,"line":91},[52,92959,698],{"class":79},[52,92961,53984],{"class":53950},[52,92963,53957],{"class":79},[52,92965,92966,92968,92970,92972,92974,92976],{"class":54,"line":98},[52,92967,54794],{"class":79},[52,92969,53994],{"class":53950},[52,92971,53997],{"class":75},[52,92973,292],{"class":79},[52,92975,54002],{"class":62},[52,92977,53957],{"class":79},[52,92979,92980,92982,92984,92986,92988,92990,92992,92994,92996],{"class":54,"line":107},[52,92981,54794],{"class":79},[52,92983,53994],{"class":53950},[52,92985,17568],{"class":75},[52,92987,292],{"class":79},[52,92989,54041],{"class":62},[52,92991,54021],{"class":75},[52,92993,292],{"class":79},[52,92995,54048],{"class":62},[52,92997,53957],{"class":79},[52,92999,93000,93002,93004,93006,93008],{"class":54,"line":113},[52,93001,54794],{"class":79},[52,93003,54057],{"class":53950},[52,93005,54060],{"class":79},[52,93007,54057],{"class":53950},[52,93009,53957],{"class":79},[52,93011,93012,93014,93016],{"class":54,"line":119},[52,93013,54794],{"class":79},[52,93015,3141],{"class":53950},[52,93017,53957],{"class":79},[52,93019,93020,93022],{"class":54,"line":126},[52,93021,57402],{"class":75},[52,93023,18220],{"class":79},[52,93025,93026,93028,93030,93032],{"class":54,"line":132},[52,93027,75246],{"class":308},[52,93029,54087],{"class":79},[52,93031,63155],{"class":308},[52,93033,80],{"class":79},[52,93035,93036,93038,93040,93042,93044],{"class":54,"line":138},[52,93037,57421],{"class":308},[52,93039,54087],{"class":79},[52,93041,856],{"class":308},[52,93043,54142],{"class":58},[52,93045,80],{"class":79},[52,93047,93048,93050,93052,93054,93056],{"class":54,"line":144},[52,93049,57435],{"class":308},[52,93051,54087],{"class":79},[52,93053,856],{"class":308},[52,93055,54142],{"class":58},[52,93057,80],{"class":79},[52,93059,93060,93062,93064,93066],{"class":54,"line":153},[52,93061,57534],{"class":308},[52,93063,54087],{"class":79},[52,93065,92656],{"class":308},[52,93067,80],{"class":79},[52,93069,93070,93072,93074,93076,93078],{"class":54,"line":159},[52,93071,57572],{"class":308},[52,93073,54087],{"class":79},[52,93075,4015],{"class":308},[52,93077,54142],{"class":58},[52,93079,80],{"class":79},[52,93081,93082,93084,93086,93088],{"class":54,"line":167},[52,93083,60066],{"class":308},[52,93085,54087],{"class":79},[52,93087,63492],{"class":308},[52,93089,80],{"class":79},[52,93091,93092,93094,93096,93098],{"class":54,"line":173},[52,93093,59936],{"class":308},[52,93095,54087],{"class":79},[52,93097,54242],{"class":308},[52,93099,80],{"class":79},[52,93101,93102,93104,93106,93108,93110],{"class":54,"line":181},[52,93103,92695],{"class":308},[52,93105,54087],{"class":79},[52,93107,1805],{"class":308},[52,93109,54142],{"class":58},[52,93111,80],{"class":79},[52,93113,93114],{"class":54,"line":186},[52,93115,616],{"class":79},[52,93117,93118,93120,93122],{"class":54,"line":191},[52,93119,55067],{"class":79},[52,93121,3141],{"class":53950},[52,93123,53957],{"class":79},[52,93125,93126,93128,93130],{"class":54,"line":196},[52,93127,54435],{"class":79},[52,93129,53984],{"class":53950},[52,93131,53957],{"class":79},[52,93133,93134],{"class":54,"line":201},[52,93135,123],{"emptyLinePlaceholder":122},[52,93137,93138,93140,93142],{"class":54,"line":206},[52,93139,698],{"class":79},[52,93141,54450],{"class":53950},[52,93143,53957],{"class":79},[52,93145,93146,93148,93150,93152,93154,93156,93158,93160],{"class":54,"line":211},[52,93147,54794],{"class":79},[52,93149,54261],{"class":53950},[52,93151,56136],{"class":75},[52,93153,292],{"class":79},[52,93155,56141],{"class":62},[52,93157,57964],{"class":79},[52,93159,54261],{"class":53950},[52,93161,53957],{"class":79},[52,93163,93164,93166,93168,93170,93172,93174,93176,93178],{"class":54,"line":218},[52,93165,54794],{"class":79},[52,93167,54463],{"class":53950},[52,93169,57889],{"class":75},[52,93171,292],{"class":79},[52,93173,90924],{"class":62},[52,93175,57964],{"class":79},[52,93177,54463],{"class":53950},[52,93179,53957],{"class":79},[52,93181,93182,93184,93186],{"class":54,"line":223},[52,93183,54794],{"class":79},[52,93185,54463],{"class":53950},[52,93187,53957],{"class":79},[52,93189,93190,93192,93194,93196,93198,93200,93202,93204],{"class":54,"line":230},[52,93191,13869],{"class":58},[52,93193,89583],{"class":308},[52,93195,16212],{"class":58},[52,93197,57046],{"class":79},[52,93199,57049],{"class":75},[52,93201,1216],{"class":79},[52,93203,92796],{"class":62},[52,93205,708],{"class":79},[52,93207,93208,93210,93212,93214],{"class":54,"line":239},[52,93209,54869],{"class":58},[52,93211,1871],{"class":79},[52,93213,292],{"class":58},[52,93215,49983],{"class":308},[52,93217,93218,93220,93222],{"class":54,"line":251},[52,93219,72734],{"class":58},[52,93221,92815],{"class":75},[52,93223,13501],{"class":79},[52,93225,93226,93228,93230,93232],{"class":54,"line":256},[52,93227,92822],{"class":79},[52,93229,292],{"class":58},[52,93231,687],{"class":79},[52,93233,5692],{"class":58},[52,93235,93236],{"class":54,"line":262},[52,93237,92833],{"class":94},[52,93239,93240],{"class":54,"line":268},[52,93241,616],{"class":79},[52,93243,93244],{"class":54,"line":280},[52,93245,92842],{"class":94},[52,93247,93248],{"class":54,"line":286},[52,93249,93250],{"class":94},"    \u002F\u002F 手写防抖函数\n",[52,93252,93253],{"class":54,"line":300},[52,93254,93255],{"class":94},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[52,93257,93258],{"class":54,"line":314},[52,93259,93260],{"class":94},"    \u002F\u002F 1.声明定时器变量\n",[52,93262,93263],{"class":54,"line":327},[52,93264,93265],{"class":94},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[52,93267,93268],{"class":54,"line":333},[52,93269,93270],{"class":94},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[52,93272,93273],{"class":54,"line":360},[52,93274,93275],{"class":94},"    \u002F\u002F 4.定时器里面写函数调用\n",[52,93277,93278,93280,93283,93285,93288,93290,93292],{"class":54,"line":365},[52,93279,72734],{"class":58},[52,93281,93282],{"class":75}," debounce",[52,93284,1216],{"class":79},[52,93286,93287],{"class":1223},"fn",[52,93289,15083],{"class":79},[52,93291,3913],{"class":1223},[52,93293,15090],{"class":79},[52,93295,93296,93298],{"class":54,"line":371},[52,93297,82422],{"class":58},[52,93299,93300],{"class":79}," timer\n",[52,93302,93303],{"class":54,"line":400},[52,93304,93305],{"class":94},"      \u002F\u002F return 返回一个匿名函数\n",[52,93307,93308,93310,93312],{"class":54,"line":405},[52,93309,76632],{"class":58},[52,93311,61568],{"class":58},[52,93313,57102],{"class":79},[52,93315,93316],{"class":54,"line":411},[52,93317,93318],{"class":94},"        \u002F\u002F 这里边写第二三四步\n",[52,93320,93321,93323,93326,93329],{"class":54,"line":424},[52,93322,5497],{"class":58},[52,93324,93325],{"class":79}," (timer) ",[52,93327,93328],{"class":75},"clearTimeout",[52,93330,93331],{"class":79},"(timer)\n",[52,93333,93334,93337,93339,93342,93344,93346],{"class":54,"line":436},[52,93335,93336],{"class":79},"        timer ",[52,93338,292],{"class":58},[52,93340,93341],{"class":75}," setTimeout",[52,93343,1216],{"class":79},[52,93345,57099],{"class":58},[52,93347,57102],{"class":79},[52,93349,93350,93353,93355],{"class":54,"line":449},[52,93351,93352],{"class":75},"          fn",[52,93354,15698],{"class":79},[52,93356,93357],{"class":94},"\u002F\u002F加小括号调用fn }, t)\n",[52,93359,93360],{"class":54,"line":2160},[52,93361,93362],{"class":79},"        }, t)\n",[52,93364,93365],{"class":54,"line":2186},[52,93366,55048],{"class":79},[52,93368,93369],{"class":54,"line":2209},[52,93370,616],{"class":79},[52,93372,93373,93375,93377,93379,93381,93383,93385,93387,93389],{"class":54,"line":2233},[52,93374,92857],{"class":79},[52,93376,60463],{"class":75},[52,93378,1216],{"class":79},[52,93380,92864],{"class":62},[52,93382,15083],{"class":79},[52,93384,92870],{"class":75},[52,93386,92873],{"class":79},[52,93388,67724],{"class":308},[52,93390,33147],{"class":79},[52,93392,93393],{"class":54,"line":2238},[52,93394,123],{"emptyLinePlaceholder":122},[52,93396,93397],{"class":54,"line":2243},[52,93398,93399],{"class":94},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[52,93401,93402],{"class":54,"line":2248},[52,93403,93404],{"class":94},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[52,93406,93407],{"class":54,"line":2257},[52,93408,93409],{"class":94},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[52,93411,93412],{"class":54,"line":2262},[52,93413,93414],{"class":94},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[52,93416,93417,93419,93421],{"class":54,"line":2268},[52,93418,55067],{"class":79},[52,93420,54463],{"class":53950},[52,93422,53957],{"class":79},[52,93424,93425,93427,93429],{"class":54,"line":2297},[52,93426,54435],{"class":79},[52,93428,54450],{"class":53950},[52,93430,53957],{"class":79},[52,93432,93433],{"class":54,"line":2303},[52,93434,123],{"emptyLinePlaceholder":122},[52,93436,93437,93439,93441],{"class":54,"line":2318},[52,93438,54435],{"class":79},[52,93440,53285],{"class":53950},[52,93442,53957],{"class":79},[3195,93444,93446],{"id":93445},"_4172-节流","4.17.2 节流",[14,93448,93449],{},[4509,93450],{"alt":47,"src":93451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,93453,93454],{},[4509,93455],{"alt":47,"src":93456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,93458,93459],{},[2389,93460,93461],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,93463,93464],{},"实现方式：",[29,93466,93467],{},[32,93468,93469],{},"lodash 提供的节流函数来处理",[14,93471,93472],{},"_.throttle(func,[wait=0],[options=])",[14,93474,93475],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[42,93477,93479],{"className":53283,"code":93478,"language":53285,"meta":47,"style":47},"\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",[49,93480,93481,93491,93505,93509,93517,93531,93551,93563,93571,93577,93587,93599,93611,93621,93633,93643,93653,93665,93669,93677,93685,93689,93697,93715,93733,93741,93759,93769,93777,93787,93791,93795,93799,93804,93809,93830,93838,93846,93850],{"__ignoreMap":47},[52,93482,93483,93485,93487,93489],{"class":54,"line":55},[52,93484,53947],{"class":79},[52,93486,53951],{"class":53950},[52,93488,53954],{"class":75},[52,93490,53957],{"class":79},[52,93492,93493,93495,93497,93499,93501,93503],{"class":54,"line":66},[52,93494,698],{"class":79},[52,93496,53285],{"class":53950},[52,93498,53966],{"class":75},[52,93500,292],{"class":79},[52,93502,53971],{"class":62},[52,93504,53957],{"class":79},[52,93506,93507],{"class":54,"line":83},[52,93508,123],{"emptyLinePlaceholder":122},[52,93510,93511,93513,93515],{"class":54,"line":91},[52,93512,698],{"class":79},[52,93514,53984],{"class":53950},[52,93516,53957],{"class":79},[52,93518,93519,93521,93523,93525,93527,93529],{"class":54,"line":98},[52,93520,54794],{"class":79},[52,93522,53994],{"class":53950},[52,93524,53997],{"class":75},[52,93526,292],{"class":79},[52,93528,54002],{"class":62},[52,93530,53957],{"class":79},[52,93532,93533,93535,93537,93539,93541,93543,93545,93547,93549],{"class":54,"line":107},[52,93534,54794],{"class":79},[52,93536,53994],{"class":53950},[52,93538,17568],{"class":75},[52,93540,292],{"class":79},[52,93542,54041],{"class":62},[52,93544,54021],{"class":75},[52,93546,292],{"class":79},[52,93548,54048],{"class":62},[52,93550,53957],{"class":79},[52,93552,93553,93555,93557,93559,93561],{"class":54,"line":113},[52,93554,54794],{"class":79},[52,93556,54057],{"class":53950},[52,93558,54060],{"class":79},[52,93560,54057],{"class":53950},[52,93562,53957],{"class":79},[52,93564,93565,93567,93569],{"class":54,"line":119},[52,93566,54794],{"class":79},[52,93568,3141],{"class":53950},[52,93570,53957],{"class":79},[52,93572,93573,93575],{"class":54,"line":126},[52,93574,57402],{"class":75},[52,93576,18220],{"class":79},[52,93578,93579,93581,93583,93585],{"class":54,"line":132},[52,93580,75246],{"class":308},[52,93582,54087],{"class":79},[52,93584,63155],{"class":308},[52,93586,80],{"class":79},[52,93588,93589,93591,93593,93595,93597],{"class":54,"line":138},[52,93590,57421],{"class":308},[52,93592,54087],{"class":79},[52,93594,856],{"class":308},[52,93596,54142],{"class":58},[52,93598,80],{"class":79},[52,93600,93601,93603,93605,93607,93609],{"class":54,"line":144},[52,93602,57435],{"class":308},[52,93604,54087],{"class":79},[52,93606,856],{"class":308},[52,93608,54142],{"class":58},[52,93610,80],{"class":79},[52,93612,93613,93615,93617,93619],{"class":54,"line":153},[52,93614,57534],{"class":308},[52,93616,54087],{"class":79},[52,93618,92656],{"class":308},[52,93620,80],{"class":79},[52,93622,93623,93625,93627,93629,93631],{"class":54,"line":159},[52,93624,57572],{"class":308},[52,93626,54087],{"class":79},[52,93628,4015],{"class":308},[52,93630,54142],{"class":58},[52,93632,80],{"class":79},[52,93634,93635,93637,93639,93641],{"class":54,"line":167},[52,93636,60066],{"class":308},[52,93638,54087],{"class":79},[52,93640,63492],{"class":308},[52,93642,80],{"class":79},[52,93644,93645,93647,93649,93651],{"class":54,"line":173},[52,93646,59936],{"class":308},[52,93648,54087],{"class":79},[52,93650,54242],{"class":308},[52,93652,80],{"class":79},[52,93654,93655,93657,93659,93661,93663],{"class":54,"line":181},[52,93656,92695],{"class":308},[52,93658,54087],{"class":79},[52,93660,1805],{"class":308},[52,93662,54142],{"class":58},[52,93664,80],{"class":79},[52,93666,93667],{"class":54,"line":186},[52,93668,616],{"class":79},[52,93670,93671,93673,93675],{"class":54,"line":191},[52,93672,55067],{"class":79},[52,93674,3141],{"class":53950},[52,93676,53957],{"class":79},[52,93678,93679,93681,93683],{"class":54,"line":196},[52,93680,54435],{"class":79},[52,93682,53984],{"class":53950},[52,93684,53957],{"class":79},[52,93686,93687],{"class":54,"line":201},[52,93688,123],{"emptyLinePlaceholder":122},[52,93690,93691,93693,93695],{"class":54,"line":206},[52,93692,698],{"class":79},[52,93694,54450],{"class":53950},[52,93696,53957],{"class":79},[52,93698,93699,93701,93703,93705,93707,93709,93711,93713],{"class":54,"line":211},[52,93700,54794],{"class":79},[52,93702,54261],{"class":53950},[52,93704,56136],{"class":75},[52,93706,292],{"class":79},[52,93708,56141],{"class":62},[52,93710,57964],{"class":79},[52,93712,54261],{"class":53950},[52,93714,53957],{"class":79},[52,93716,93717,93719,93721,93723,93725,93727,93729,93731],{"class":54,"line":218},[52,93718,54794],{"class":79},[52,93720,54463],{"class":53950},[52,93722,57889],{"class":75},[52,93724,292],{"class":79},[52,93726,90924],{"class":62},[52,93728,57964],{"class":79},[52,93730,54463],{"class":53950},[52,93732,53957],{"class":79},[52,93734,93735,93737,93739],{"class":54,"line":223},[52,93736,54794],{"class":79},[52,93738,54463],{"class":53950},[52,93740,53957],{"class":79},[52,93742,93743,93745,93747,93749,93751,93753,93755,93757],{"class":54,"line":230},[52,93744,13869],{"class":58},[52,93746,89583],{"class":308},[52,93748,16212],{"class":58},[52,93750,57046],{"class":79},[52,93752,57049],{"class":75},[52,93754,1216],{"class":79},[52,93756,92796],{"class":62},[52,93758,708],{"class":79},[52,93760,93761,93763,93765,93767],{"class":54,"line":239},[52,93762,54869],{"class":58},[52,93764,1871],{"class":79},[52,93766,292],{"class":58},[52,93768,49983],{"class":308},[52,93770,93771,93773,93775],{"class":54,"line":251},[52,93772,72734],{"class":58},[52,93774,92815],{"class":75},[52,93776,13501],{"class":79},[52,93778,93779,93781,93783,93785],{"class":54,"line":256},[52,93780,92822],{"class":79},[52,93782,292],{"class":58},[52,93784,687],{"class":79},[52,93786,5692],{"class":58},[52,93788,93789],{"class":54,"line":262},[52,93790,92833],{"class":94},[52,93792,93793],{"class":54,"line":268},[52,93794,616],{"class":79},[52,93796,93797],{"class":54,"line":280},[52,93798,92842],{"class":94},[52,93800,93801],{"class":54,"line":286},[52,93802,93803],{"class":94},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[52,93805,93806],{"class":54,"line":300},[52,93807,93808],{"class":94},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[52,93810,93811,93813,93815,93817,93819,93821,93824,93826,93828],{"class":54,"line":314},[52,93812,92857],{"class":79},[52,93814,60463],{"class":75},[52,93816,1216],{"class":79},[52,93818,92864],{"class":62},[52,93820,92867],{"class":79},[52,93822,93823],{"class":75},"throttle",[52,93825,92873],{"class":79},[52,93827,67724],{"class":308},[52,93829,33147],{"class":79},[52,93831,93832,93834,93836],{"class":54,"line":327},[52,93833,55067],{"class":79},[52,93835,54463],{"class":53950},[52,93837,53957],{"class":79},[52,93839,93840,93842,93844],{"class":54,"line":333},[52,93841,54435],{"class":79},[52,93843,54450],{"class":53950},[52,93845,53957],{"class":79},[52,93847,93848],{"class":54,"line":360},[52,93849,123],{"emptyLinePlaceholder":122},[52,93851,93852,93854,93856],{"class":54,"line":365},[52,93853,54435],{"class":79},[52,93855,53285],{"class":53950},[52,93857,53957],{"class":79},[29,93859,93860],{},[32,93861,93862],{},"手写一个节流函数来处理",[14,93864,73602],{},[14,93866,92916],{},[14,93868,93869],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,93871,93872],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[42,93874,93876],{"className":53283,"code":93875,"language":53285,"meta":47,"style":47},"\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",[49,93877,93878,93888,93902,93906,93914,93928,93948,93960,93968,93974,93984,93996,94008,94018,94030,94040,94050,94062,94066,94074,94082,94086,94094,94112,94130,94138,94156,94166,94174,94184,94188,94192,94196,94201,94206,94211,94216,94221,94226,94243,94249,94257,94268,94283,94290,94295,94300,94310,94315,94320,94325,94329,94333,94337,94357,94365,94373,94377],{"__ignoreMap":47},[52,93879,93880,93882,93884,93886],{"class":54,"line":55},[52,93881,53947],{"class":79},[52,93883,53951],{"class":53950},[52,93885,53954],{"class":75},[52,93887,53957],{"class":79},[52,93889,93890,93892,93894,93896,93898,93900],{"class":54,"line":66},[52,93891,698],{"class":79},[52,93893,53285],{"class":53950},[52,93895,53966],{"class":75},[52,93897,292],{"class":79},[52,93899,53971],{"class":62},[52,93901,53957],{"class":79},[52,93903,93904],{"class":54,"line":83},[52,93905,123],{"emptyLinePlaceholder":122},[52,93907,93908,93910,93912],{"class":54,"line":91},[52,93909,698],{"class":79},[52,93911,53984],{"class":53950},[52,93913,53957],{"class":79},[52,93915,93916,93918,93920,93922,93924,93926],{"class":54,"line":98},[52,93917,54794],{"class":79},[52,93919,53994],{"class":53950},[52,93921,53997],{"class":75},[52,93923,292],{"class":79},[52,93925,54002],{"class":62},[52,93927,53957],{"class":79},[52,93929,93930,93932,93934,93936,93938,93940,93942,93944,93946],{"class":54,"line":107},[52,93931,54794],{"class":79},[52,93933,53994],{"class":53950},[52,93935,17568],{"class":75},[52,93937,292],{"class":79},[52,93939,54041],{"class":62},[52,93941,54021],{"class":75},[52,93943,292],{"class":79},[52,93945,54048],{"class":62},[52,93947,53957],{"class":79},[52,93949,93950,93952,93954,93956,93958],{"class":54,"line":113},[52,93951,54794],{"class":79},[52,93953,54057],{"class":53950},[52,93955,54060],{"class":79},[52,93957,54057],{"class":53950},[52,93959,53957],{"class":79},[52,93961,93962,93964,93966],{"class":54,"line":119},[52,93963,54794],{"class":79},[52,93965,3141],{"class":53950},[52,93967,53957],{"class":79},[52,93969,93970,93972],{"class":54,"line":126},[52,93971,57402],{"class":75},[52,93973,18220],{"class":79},[52,93975,93976,93978,93980,93982],{"class":54,"line":132},[52,93977,75246],{"class":308},[52,93979,54087],{"class":79},[52,93981,63155],{"class":308},[52,93983,80],{"class":79},[52,93985,93986,93988,93990,93992,93994],{"class":54,"line":138},[52,93987,57421],{"class":308},[52,93989,54087],{"class":79},[52,93991,856],{"class":308},[52,93993,54142],{"class":58},[52,93995,80],{"class":79},[52,93997,93998,94000,94002,94004,94006],{"class":54,"line":144},[52,93999,57435],{"class":308},[52,94001,54087],{"class":79},[52,94003,856],{"class":308},[52,94005,54142],{"class":58},[52,94007,80],{"class":79},[52,94009,94010,94012,94014,94016],{"class":54,"line":153},[52,94011,57534],{"class":308},[52,94013,54087],{"class":79},[52,94015,92656],{"class":308},[52,94017,80],{"class":79},[52,94019,94020,94022,94024,94026,94028],{"class":54,"line":159},[52,94021,57572],{"class":308},[52,94023,54087],{"class":79},[52,94025,4015],{"class":308},[52,94027,54142],{"class":58},[52,94029,80],{"class":79},[52,94031,94032,94034,94036,94038],{"class":54,"line":167},[52,94033,60066],{"class":308},[52,94035,54087],{"class":79},[52,94037,63492],{"class":308},[52,94039,80],{"class":79},[52,94041,94042,94044,94046,94048],{"class":54,"line":173},[52,94043,59936],{"class":308},[52,94045,54087],{"class":79},[52,94047,54242],{"class":308},[52,94049,80],{"class":79},[52,94051,94052,94054,94056,94058,94060],{"class":54,"line":181},[52,94053,92695],{"class":308},[52,94055,54087],{"class":79},[52,94057,1805],{"class":308},[52,94059,54142],{"class":58},[52,94061,80],{"class":79},[52,94063,94064],{"class":54,"line":186},[52,94065,616],{"class":79},[52,94067,94068,94070,94072],{"class":54,"line":191},[52,94069,55067],{"class":79},[52,94071,3141],{"class":53950},[52,94073,53957],{"class":79},[52,94075,94076,94078,94080],{"class":54,"line":196},[52,94077,54435],{"class":79},[52,94079,53984],{"class":53950},[52,94081,53957],{"class":79},[52,94083,94084],{"class":54,"line":201},[52,94085,123],{"emptyLinePlaceholder":122},[52,94087,94088,94090,94092],{"class":54,"line":206},[52,94089,698],{"class":79},[52,94091,54450],{"class":53950},[52,94093,53957],{"class":79},[52,94095,94096,94098,94100,94102,94104,94106,94108,94110],{"class":54,"line":211},[52,94097,54794],{"class":79},[52,94099,54261],{"class":53950},[52,94101,56136],{"class":75},[52,94103,292],{"class":79},[52,94105,56141],{"class":62},[52,94107,57964],{"class":79},[52,94109,54261],{"class":53950},[52,94111,53957],{"class":79},[52,94113,94114,94116,94118,94120,94122,94124,94126,94128],{"class":54,"line":218},[52,94115,54794],{"class":79},[52,94117,54463],{"class":53950},[52,94119,57889],{"class":75},[52,94121,292],{"class":79},[52,94123,90924],{"class":62},[52,94125,57964],{"class":79},[52,94127,54463],{"class":53950},[52,94129,53957],{"class":79},[52,94131,94132,94134,94136],{"class":54,"line":223},[52,94133,54794],{"class":79},[52,94135,54463],{"class":53950},[52,94137,53957],{"class":79},[52,94139,94140,94142,94144,94146,94148,94150,94152,94154],{"class":54,"line":230},[52,94141,13869],{"class":58},[52,94143,89583],{"class":308},[52,94145,16212],{"class":58},[52,94147,57046],{"class":79},[52,94149,57049],{"class":75},[52,94151,1216],{"class":79},[52,94153,92796],{"class":62},[52,94155,708],{"class":79},[52,94157,94158,94160,94162,94164],{"class":54,"line":239},[52,94159,54869],{"class":58},[52,94161,1871],{"class":79},[52,94163,292],{"class":58},[52,94165,49983],{"class":308},[52,94167,94168,94170,94172],{"class":54,"line":251},[52,94169,72734],{"class":58},[52,94171,92815],{"class":75},[52,94173,13501],{"class":79},[52,94175,94176,94178,94180,94182],{"class":54,"line":256},[52,94177,92822],{"class":79},[52,94179,292],{"class":58},[52,94181,687],{"class":79},[52,94183,5692],{"class":58},[52,94185,94186],{"class":54,"line":262},[52,94187,92833],{"class":94},[52,94189,94190],{"class":54,"line":268},[52,94191,616],{"class":79},[52,94193,94194],{"class":54,"line":280},[52,94195,92842],{"class":94},[52,94197,94198],{"class":54,"line":286},[52,94199,94200],{"class":94},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[52,94202,94203],{"class":54,"line":300},[52,94204,94205],{"class":94},"    \u002F\u002F 1.声明一个定时器变量\n",[52,94207,94208],{"class":54,"line":314},[52,94209,94210],{"class":94},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[52,94212,94213],{"class":54,"line":327},[52,94214,94215],{"class":94},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[52,94217,94218],{"class":54,"line":333},[52,94219,94220],{"class":94},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[52,94222,94223],{"class":54,"line":360},[52,94224,94225],{"class":94},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[52,94227,94228,94230,94233,94235,94237,94239,94241],{"class":54,"line":365},[52,94229,72734],{"class":58},[52,94231,94232],{"class":75}," throttle",[52,94234,1216],{"class":79},[52,94236,93287],{"class":1223},[52,94238,15083],{"class":79},[52,94240,3913],{"class":1223},[52,94242,15090],{"class":79},[52,94244,94245,94247],{"class":54,"line":371},[52,94246,82422],{"class":58},[52,94248,93300],{"class":79},[52,94250,94251,94253,94255],{"class":54,"line":400},[52,94252,76632],{"class":58},[52,94254,61568],{"class":58},[52,94256,57102],{"class":79},[52,94258,94259,94261,94263,94265],{"class":54,"line":405},[52,94260,5497],{"class":58},[52,94262,682],{"class":79},[52,94264,3439],{"class":58},[52,94266,94267],{"class":79},"timer) {\n",[52,94269,94270,94273,94275,94277,94279,94281],{"class":54,"line":411},[52,94271,94272],{"class":79},"          timer ",[52,94274,292],{"class":58},[52,94276,93341],{"class":75},[52,94278,1216],{"class":79},[52,94280,57099],{"class":58},[52,94282,57102],{"class":79},[52,94284,94285,94288],{"class":54,"line":424},[52,94286,94287],{"class":75},"            fn",[52,94289,248],{"class":79},[52,94291,94292],{"class":54,"line":436},[52,94293,94294],{"class":94},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[52,94296,94297],{"class":54,"line":449},[52,94298,94299],{"class":94},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[52,94301,94302,94305,94307],{"class":54,"line":2160},[52,94303,94304],{"class":79},"            timer ",[52,94306,292],{"class":58},[52,94308,94309],{"class":308}," null\n",[52,94311,94312],{"class":54,"line":2186},[52,94313,94314],{"class":94},"            \u002F\u002F 不能用clearTimeout(timer)\n",[52,94316,94317],{"class":54,"line":2209},[52,94318,94319],{"class":94},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[52,94321,94322],{"class":54,"line":2233},[52,94323,94324],{"class":79},"          }, t)\n",[52,94326,94327],{"class":54,"line":2238},[52,94328,2039],{"class":79},[52,94330,94331],{"class":54,"line":2243},[52,94332,55048],{"class":79},[52,94334,94335],{"class":54,"line":2248},[52,94336,616],{"class":79},[52,94338,94339,94341,94343,94345,94347,94349,94351,94353,94355],{"class":54,"line":2257},[52,94340,92857],{"class":79},[52,94342,60463],{"class":75},[52,94344,1216],{"class":79},[52,94346,92864],{"class":62},[52,94348,15083],{"class":79},[52,94350,93823],{"class":75},[52,94352,92873],{"class":79},[52,94354,67724],{"class":308},[52,94356,33147],{"class":79},[52,94358,94359,94361,94363],{"class":54,"line":2262},[52,94360,55067],{"class":79},[52,94362,54463],{"class":53950},[52,94364,53957],{"class":79},[52,94366,94367,94369,94371],{"class":54,"line":2268},[52,94368,54435],{"class":79},[52,94370,54450],{"class":53950},[52,94372,53957],{"class":79},[52,94374,94375],{"class":54,"line":2297},[52,94376,123],{"emptyLinePlaceholder":122},[52,94378,94379,94381,94383],{"class":54,"line":2303},[52,94380,54435],{"class":79},[52,94382,53285],{"class":53950},[52,94384,53957],{"class":79},[3195,94386,94388],{"id":94387},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[42,94390,94392],{"className":55717,"code":94391,"language":55719,"meta":47,"style":47},"\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",[49,94393,94394,94402,94410,94415,94420,94425,94430,94434,94442],{"__ignoreMap":47},[52,94395,94396,94398,94400],{"class":54,"line":55},[52,94397,698],{"class":79},[52,94399,54450],{"class":53950},[52,94401,53957],{"class":79},[52,94403,94404,94406,94408],{"class":54,"line":66},[52,94405,54794],{"class":79},[52,94407,54463],{"class":53950},[52,94409,53957],{"class":79},[52,94411,94412],{"class":54,"line":83},[52,94413,94414],{"class":79},"    let timer = null\n",[52,94416,94417],{"class":54,"line":91},[52,94418,94419],{"class":79},"    timer = setTimeout(() => {\n",[52,94421,94422],{"class":54,"line":98},[52,94423,94424],{"class":79},"      clearTimeout(timer)\n",[52,94426,94427],{"class":54,"line":107},[52,94428,94429],{"class":79},"      console.log(timer)\n",[52,94431,94432],{"class":54,"line":113},[52,94433,62875],{"class":79},[52,94435,94436,94438,94440],{"class":54,"line":119},[52,94437,55067],{"class":79},[52,94439,54463],{"class":53950},[52,94441,53957],{"class":79},[52,94443,94444,94446,94448],{"class":54,"line":126},[52,94445,54435],{"class":79},[52,94447,54450],{"class":53950},[52,94449,53957],{"class":79},[14,94451,94452],{},"输出为1",[14,94454,94455],{},"在开启的定时器里边写清除定时器",[14,94457,94458],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[3195,94460,94462],{"id":94461},"_4174-节流综合案例","4.17.4 节流综合案例",[14,94464,94465],{},"页面打开，可以记录上一次的视频播放位置",[14,94467,94468],{},[4509,94469],{"alt":47,"src":94470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,94472,94473],{},[4509,94474],{"alt":47,"src":94475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[42,94477,94479],{"className":53283,"code":94478,"language":53285,"meta":47,"style":47},"\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",[49,94480,94481,94491,94505,94509,94517,94531,94551,94571,94593,94606,94614,94620,94630,94640,94650,94654,94658,94665,94678,94690,94694,94698,94708,94720,94734,94738,94742,94749,94759,94772,94784,94794,94804,94820,94832,94836,94840,94848,94858,94870,94880,94890,94900,94904,94908,94918,94929,94933,94941,94949,94953,94961,94976,94991,95006,95027,95035,95043,95058,95080,95088,95103,95129,95155,95181,95189,95197,95216,95224,95229,95248,95253,95271,95276,95281,95289,95294,95308,95316,95321,95338,95342,95347,95369,95373,95381,95389,95393],{"__ignoreMap":47},[52,94482,94483,94485,94487,94489],{"class":54,"line":55},[52,94484,53947],{"class":79},[52,94486,53951],{"class":53950},[52,94488,53954],{"class":75},[52,94490,53957],{"class":79},[52,94492,94493,94495,94497,94499,94501,94503],{"class":54,"line":66},[52,94494,698],{"class":79},[52,94496,53285],{"class":53950},[52,94498,53966],{"class":75},[52,94500,292],{"class":79},[52,94502,53971],{"class":62},[52,94504,53957],{"class":79},[52,94506,94507],{"class":54,"line":83},[52,94508,123],{"emptyLinePlaceholder":122},[52,94510,94511,94513,94515],{"class":54,"line":91},[52,94512,698],{"class":79},[52,94514,53984],{"class":53950},[52,94516,53957],{"class":79},[52,94518,94519,94521,94523,94525,94527,94529],{"class":54,"line":98},[52,94520,54794],{"class":79},[52,94522,53994],{"class":53950},[52,94524,53997],{"class":75},[52,94526,292],{"class":79},[52,94528,54002],{"class":62},[52,94530,61777],{"class":79},[52,94532,94533,94535,94537,94539,94541,94543,94545,94547,94549],{"class":54,"line":107},[52,94534,54794],{"class":79},[52,94536,53994],{"class":53950},[52,94538,54013],{"class":75},[52,94540,292],{"class":79},[52,94542,54018],{"class":62},[52,94544,54021],{"class":75},[52,94546,292],{"class":79},[52,94548,54026],{"class":62},[52,94550,61777],{"class":79},[52,94552,94553,94555,94557,94559,94561,94563,94565,94567,94569],{"class":54,"line":113},[52,94554,54794],{"class":79},[52,94556,53994],{"class":53950},[52,94558,17568],{"class":75},[52,94560,292],{"class":79},[52,94562,54041],{"class":62},[52,94564,54021],{"class":75},[52,94566,292],{"class":79},[52,94568,54048],{"class":62},[52,94570,61777],{"class":79},[52,94572,94573,94575,94577,94579,94581,94584,94586,94588,94591],{"class":54,"line":119},[52,94574,54794],{"class":79},[52,94576,53994],{"class":53950},[52,94578,17568],{"class":75},[52,94580,292],{"class":79},[52,94582,94583],{"class":62},"\"referrer\"",[52,94585,54021],{"class":75},[52,94587,292],{"class":79},[52,94589,94590],{"class":62},"\"never\"",[52,94592,61777],{"class":79},[52,94594,94595,94597,94599,94602,94604],{"class":54,"line":126},[52,94596,54794],{"class":79},[52,94598,54057],{"class":53950},[52,94600,94601],{"class":79},">综合案例\u003C\u002F",[52,94603,54057],{"class":53950},[52,94605,53957],{"class":79},[52,94607,94608,94610,94612],{"class":54,"line":132},[52,94609,54794],{"class":79},[52,94611,3141],{"class":53950},[52,94613,53957],{"class":79},[52,94615,94616,94618],{"class":54,"line":138},[52,94617,9366],{"class":53950},[52,94619,18220],{"class":79},[52,94621,94622,94624,94626,94628],{"class":54,"line":144},[52,94623,57345],{"class":308},[52,94625,54087],{"class":79},[52,94627,692],{"class":308},[52,94629,80],{"class":79},[52,94631,94632,94634,94636,94638],{"class":54,"line":153},[52,94633,57356],{"class":308},[52,94635,54087],{"class":79},[52,94637,692],{"class":308},[52,94639,80],{"class":79},[52,94641,94642,94644,94646,94648],{"class":54,"line":159},[52,94643,75246],{"class":308},[52,94645,54087],{"class":79},[52,94647,63155],{"class":308},[52,94649,80],{"class":79},[52,94651,94652],{"class":54,"line":167},[52,94653,616],{"class":79},[52,94655,94656],{"class":54,"line":173},[52,94657,123],{"emptyLinePlaceholder":122},[52,94659,94660,94663],{"class":54,"line":181},[52,94661,94662],{"class":75},"    .container",[52,94664,18220],{"class":79},[52,94666,94667,94669,94671,94674,94676],{"class":54,"line":186},[52,94668,57421],{"class":308},[52,94670,54087],{"class":79},[52,94672,94673],{"class":308},"1200",[52,94675,54142],{"class":58},[52,94677,80],{"class":79},[52,94679,94680,94682,94684,94686,94688],{"class":54,"line":191},[52,94681,57356],{"class":308},[52,94683,54087],{"class":79},[52,94685,692],{"class":308},[52,94687,54206],{"class":308},[52,94689,80],{"class":79},[52,94691,94692],{"class":54,"line":196},[52,94693,616],{"class":79},[52,94695,94696],{"class":54,"line":201},[52,94697,123],{"emptyLinePlaceholder":122},[52,94699,94700,94703,94706],{"class":54,"line":206},[52,94701,94702],{"class":75},"    .video",[52,94704,94705],{"class":53950}," video",[52,94707,18220],{"class":79},[52,94709,94710,94712,94714,94716,94718],{"class":54,"line":211},[52,94711,57421],{"class":308},[52,94713,54087],{"class":79},[52,94715,591],{"class":308},[52,94717,1998],{"class":58},[52,94719,80],{"class":79},[52,94721,94722,94724,94726,94728,94730,94732],{"class":54,"line":218},[52,94723,57345],{"class":308},[52,94725,54087],{"class":79},[52,94727,444],{"class":308},[52,94729,54142],{"class":58},[52,94731,1444],{"class":308},[52,94733,80],{"class":79},[52,94735,94736],{"class":54,"line":223},[52,94737,616],{"class":79},[52,94739,94740],{"class":54,"line":230},[52,94741,123],{"emptyLinePlaceholder":122},[52,94743,94744,94747],{"class":54,"line":239},[52,94745,94746],{"class":75},"    .elevator",[52,94748,18220],{"class":79},[52,94750,94751,94753,94755,94757],{"class":54,"line":251},[52,94752,57409],{"class":308},[52,94754,54087],{"class":79},[52,94756,88883],{"class":308},[52,94758,80],{"class":79},[52,94760,94761,94763,94765,94768,94770],{"class":54,"line":256},[52,94762,57597],{"class":308},[52,94764,54087],{"class":79},[52,94766,94767],{"class":308},"280",[52,94769,54142],{"class":58},[52,94771,80],{"class":79},[52,94773,94774,94776,94778,94780,94782],{"class":54,"line":262},[52,94775,89077],{"class":308},[52,94777,54087],{"class":79},[52,94779,444],{"class":308},[52,94781,54142],{"class":58},[52,94783,80],{"class":79},[52,94785,94786,94788,94790,94792],{"class":54,"line":268},[52,94787,88890],{"class":308},[52,94789,54087],{"class":79},[52,94791,88895],{"class":308},[52,94793,80],{"class":79},[52,94795,94796,94798,94800,94802],{"class":54,"line":280},[52,94797,64371],{"class":308},[52,94799,54087],{"class":79},[52,94801,63492],{"class":308},[52,94803,80],{"class":79},[52,94805,94806,94808,94810,94812,94814,94816,94818],{"class":54,"line":286},[52,94807,64627],{"class":308},[52,94809,54087],{"class":79},[52,94811,629],{"class":308},[52,94813,54142],{"class":58},[52,94815,54171],{"class":308},[52,94817,64894],{"class":308},[52,94819,80],{"class":79},[52,94821,94822,94824,94826,94828,94830],{"class":54,"line":300},[52,94823,57421],{"class":308},[52,94825,54087],{"class":79},[52,94827,2001],{"class":308},[52,94829,54142],{"class":58},[52,94831,80],{"class":79},[52,94833,94834],{"class":54,"line":314},[52,94835,616],{"class":79},[52,94837,94838],{"class":54,"line":327},[52,94839,123],{"emptyLinePlaceholder":122},[52,94841,94842,94844,94846],{"class":54,"line":333},[52,94843,94746],{"class":75},[52,94845,4446],{"class":53950},[52,94847,18220],{"class":79},[52,94849,94850,94852,94854,94856],{"class":54,"line":360},[52,94851,57659],{"class":308},[52,94853,54087],{"class":79},[52,94855,63519],{"class":308},[52,94857,80],{"class":79},[52,94859,94860,94862,94864,94866,94868],{"class":54,"line":365},[52,94861,57345],{"class":308},[52,94863,54087],{"class":79},[52,94865,3649],{"class":308},[52,94867,54142],{"class":58},[52,94869,80],{"class":79},[52,94871,94872,94874,94876,94878],{"class":54,"line":371},[52,94873,66620],{"class":308},[52,94875,54087],{"class":79},[52,94877,57387],{"class":308},[52,94879,80],{"class":79},[52,94881,94882,94884,94886,94888],{"class":54,"line":400},[52,94883,59936],{"class":308},[52,94885,54087],{"class":79},[52,94887,54242],{"class":308},[52,94889,80],{"class":79},[52,94891,94892,94894,94896,94898],{"class":54,"line":405},[52,94893,60066],{"class":308},[52,94895,54087],{"class":79},[52,94897,64720],{"class":308},[52,94899,80],{"class":79},[52,94901,94902],{"class":54,"line":411},[52,94903,616],{"class":79},[52,94905,94906],{"class":54,"line":424},[52,94907,123],{"emptyLinePlaceholder":122},[52,94909,94910,94912,94914,94916],{"class":54,"line":436},[52,94911,94746],{"class":75},[52,94913,4446],{"class":53950},[52,94915,66674],{"class":75},[52,94917,18220],{"class":79},[52,94919,94920,94922,94924,94927],{"class":54,"line":449},[52,94921,60066],{"class":308},[52,94923,54087],{"class":79},[52,94925,94926],{"class":308},"#1286ff",[52,94928,80],{"class":79},[52,94930,94931],{"class":54,"line":2160},[52,94932,616],{"class":79},[52,94934,94935,94937,94939],{"class":54,"line":2186},[52,94936,55067],{"class":79},[52,94938,3141],{"class":53950},[52,94940,53957],{"class":79},[52,94942,94943,94945,94947],{"class":54,"line":2209},[52,94944,54435],{"class":79},[52,94946,53984],{"class":53950},[52,94948,53957],{"class":79},[52,94950,94951],{"class":54,"line":2233},[52,94952,123],{"emptyLinePlaceholder":122},[52,94954,94955,94957,94959],{"class":54,"line":2238},[52,94956,698],{"class":79},[52,94958,54450],{"class":53950},[52,94960,53957],{"class":79},[52,94962,94963,94965,94967,94969,94971,94974],{"class":54,"line":2243},[52,94964,54794],{"class":79},[52,94966,54261],{"class":53950},[52,94968,56136],{"class":75},[52,94970,292],{"class":79},[52,94972,94973],{"class":62},"\"container\"",[52,94975,53957],{"class":79},[52,94977,94978,94980,94982,94984,94986,94989],{"class":54,"line":2248},[52,94979,53991],{"class":79},[52,94981,54261],{"class":53950},[52,94983,56136],{"class":75},[52,94985,292],{"class":79},[52,94987,94988],{"class":62},"\"header\"",[52,94990,53957],{"class":79},[52,94992,94993,94995,94997,94999,95001,95004],{"class":54,"line":2257},[52,94994,57884],{"class":79},[52,94996,3451],{"class":53950},[52,94998,63707],{"class":75},[52,95000,292],{"class":79},[52,95002,95003],{"class":62},"\"http:\u002F\u002Fpip.itcast.cn\"",[52,95005,53957],{"class":79},[52,95007,95008,95010,95012,95014,95016,95019,95021,95023,95025],{"class":54,"line":2262},[52,95009,57952],{"class":79},[52,95011,4509],{"class":53950},[52,95013,57889],{"class":75},[52,95015,292],{"class":79},[52,95017,95018],{"class":62},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[52,95020,57897],{"class":75},[52,95022,292],{"class":79},[52,95024,10607],{"class":62},[52,95026,61777],{"class":79},[52,95028,95029,95031,95033],{"class":54,"line":2268},[52,95030,58057],{"class":79},[52,95032,3451],{"class":53950},[52,95034,53957],{"class":79},[52,95036,95037,95039,95041],{"class":54,"line":2297},[52,95038,54426],{"class":79},[52,95040,54261],{"class":53950},[52,95042,53957],{"class":79},[52,95044,95045,95047,95049,95051,95053,95056],{"class":54,"line":2303},[52,95046,53991],{"class":79},[52,95048,54261],{"class":53950},[52,95050,56136],{"class":75},[52,95052,292],{"class":79},[52,95054,95055],{"class":62},"\"video\"",[52,95057,53957],{"class":79},[52,95059,95060,95062,95064,95066,95068,95071,95074,95076,95078],{"class":54,"line":2318},[52,95061,57884],{"class":79},[52,95063,30833],{"class":53950},[52,95065,57889],{"class":75},[52,95067,292],{"class":79},[52,95069,95070],{"class":62},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[52,95072,95073],{"class":75}," controls",[52,95075,57964],{"class":79},[52,95077,30833],{"class":53950},[52,95079,53957],{"class":79},[52,95081,95082,95084,95086],{"class":54,"line":2324},[52,95083,54426],{"class":79},[52,95085,54261],{"class":53950},[52,95087,53957],{"class":79},[52,95089,95090,95092,95094,95096,95098,95101],{"class":54,"line":2353},[52,95091,53991],{"class":79},[52,95093,54261],{"class":53950},[52,95095,56136],{"class":75},[52,95097,292],{"class":79},[52,95099,95100],{"class":62},"\"elevator\"",[52,95102,53957],{"class":79},[52,95104,95105,95107,95109,95111,95113,95115,95118,95120,95122,95125,95127],{"class":54,"line":2362},[52,95106,57884],{"class":79},[52,95108,3451],{"class":53950},[52,95110,63707],{"class":75},[52,95112,292],{"class":79},[52,95114,66886],{"class":62},[52,95116,95117],{"class":75}," data-ref",[52,95119,292],{"class":79},[52,95121,95055],{"class":62},[52,95123,95124],{"class":79},">视频介绍\u003C\u002F",[52,95126,3451],{"class":53950},[52,95128,53957],{"class":79},[52,95130,95131,95133,95135,95137,95139,95141,95143,95145,95148,95151,95153],{"class":54,"line":2368},[52,95132,57884],{"class":79},[52,95134,3451],{"class":53950},[52,95136,63707],{"class":75},[52,95138,292],{"class":79},[52,95140,66886],{"class":62},[52,95142,95117],{"class":75},[52,95144,292],{"class":79},[52,95146,95147],{"class":62},"\"intro\"",[52,95149,95150],{"class":79},">课程简介\u003C\u002F",[52,95152,3451],{"class":53950},[52,95154,53957],{"class":79},[52,95156,95157,95159,95161,95163,95165,95167,95169,95171,95174,95177,95179],{"class":54,"line":2376},[52,95158,57884],{"class":79},[52,95160,3451],{"class":53950},[52,95162,63707],{"class":75},[52,95164,292],{"class":79},[52,95166,66886],{"class":62},[52,95168,95117],{"class":75},[52,95170,292],{"class":79},[52,95172,95173],{"class":62},"\"outline\"",[52,95175,95176],{"class":79},">评论列表\u003C\u002F",[52,95178,3451],{"class":53950},[52,95180,53957],{"class":79},[52,95182,95183,95185,95187],{"class":54,"line":2381},[52,95184,54426],{"class":79},[52,95186,54261],{"class":53950},[52,95188,53957],{"class":79},[52,95190,95191,95193,95195],{"class":54,"line":19252},[52,95192,55067],{"class":79},[52,95194,54261],{"class":53950},[52,95196,53957],{"class":79},[52,95198,95199,95201,95203,95205,95207,95210,95212,95214],{"class":54,"line":19258},[52,95200,54794],{"class":79},[52,95202,54463],{"class":53950},[52,95204,57889],{"class":75},[52,95206,292],{"class":79},[52,95208,95209],{"class":62},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[52,95211,57964],{"class":79},[52,95213,54463],{"class":53950},[52,95215,53957],{"class":79},[52,95217,95218,95220,95222],{"class":54,"line":19281},[52,95219,54794],{"class":79},[52,95221,54463],{"class":53950},[52,95223,53957],{"class":79},[52,95225,95226],{"class":54,"line":19287},[52,95227,95228],{"class":94},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[52,95230,95231,95233,95235,95237,95239,95241,95243,95246],{"class":54,"line":19310},[52,95232,13869],{"class":58},[52,95234,94705],{"class":308},[52,95236,16212],{"class":58},[52,95238,57046],{"class":79},[52,95240,57049],{"class":75},[52,95242,1216],{"class":79},[52,95244,95245],{"class":62},"'video'",[52,95247,708],{"class":79},[52,95249,95250],{"class":54,"line":19324},[52,95251,95252],{"class":94},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[52,95254,95255,95258,95260,95262,95264,95267,95269],{"class":54,"line":19344},[52,95256,95257],{"class":79},"    video.ontimeupdate ",[52,95259,292],{"class":58},[52,95261,91005],{"class":79},[52,95263,93823],{"class":75},[52,95265,95266],{"class":79},"(() ",[52,95268,87372],{"class":58},[52,95270,18220],{"class":79},[52,95272,95273],{"class":54,"line":19350},[52,95274,95275],{"class":94},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[52,95277,95278],{"class":54,"line":19361},[52,95279,95280],{"class":94},"      \u002F\u002F 控制台输出当前的时间\n",[52,95282,95283,95286],{"class":54,"line":19384},[52,95284,95285],{"class":94},"      \u002F\u002F console.log(video.currentTime)",[52,95287,95288],{"class":94},"  \u002F\u002F获得当前的视频时间\n",[52,95290,95291],{"class":54,"line":19406},[52,95292,95293],{"class":94},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[52,95295,95296,95298,95300,95302,95305],{"class":54,"line":19411},[52,95297,77333],{"class":79},[52,95299,74304],{"class":75},[52,95301,1216],{"class":79},[52,95303,95304],{"class":62},"'currentTime'",[52,95306,95307],{"class":79},", video.currentTime)\n",[52,95309,95310,95312,95314],{"class":54,"line":19417},[52,95311,57185],{"class":79},[52,95313,9373],{"class":308},[52,95315,708],{"class":79},[52,95317,95318],{"class":54,"line":19431},[52,95319,95320],{"class":94},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[52,95322,95323,95326,95329,95331,95334,95336],{"class":54,"line":19444},[52,95324,95325],{"class":79},"    video.",[52,95327,95328],{"class":75},"onloadeddata",[52,95330,16212],{"class":58},[52,95332,95333],{"class":79}," () ",[52,95335,87372],{"class":58},[52,95337,18220],{"class":79},[52,95339,95340],{"class":54,"line":19449},[52,95341,62662],{"class":94},[52,95343,95344],{"class":54,"line":19463},[52,95345,95346],{"class":94},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[52,95348,95349,95352,95354,95357,95359,95361,95363,95365,95367],{"class":54,"line":19468},[52,95350,95351],{"class":79},"      video.currentTime ",[52,95353,292],{"class":58},[52,95355,95356],{"class":79}," localStorage.",[52,95358,74335],{"class":75},[52,95360,1216],{"class":79},[52,95362,95304],{"class":62},[52,95364,16362],{"class":79},[52,95366,74007],{"class":58},[52,95368,49983],{"class":308},[52,95370,95371],{"class":54,"line":19474},[52,95372,616],{"class":79},[52,95374,95375,95377,95379],{"class":54,"line":19479},[52,95376,55067],{"class":79},[52,95378,54463],{"class":53950},[52,95380,53957],{"class":79},[52,95382,95383,95385,95387],{"class":54,"line":19493},[52,95384,54435],{"class":79},[52,95386,54450],{"class":53950},[52,95388,53957],{"class":79},[52,95390,95391],{"class":54,"line":19498},[52,95392,123],{"emptyLinePlaceholder":122},[52,95394,95395,95397,95399],{"class":54,"line":19503},[52,95396,54435],{"class":79},[52,95398,53285],{"class":53950},[52,95400,53957],{"class":79},[3141,95402,95403],{},"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":47,"searchDepth":66,"depth":66,"links":95405},[95406,95411,95415,95416,95417,95422,95427,95428,95429,95430,95437,95442,95443,95453,95457,95458,95462],{"id":79341,"depth":66,"text":79342,"children":95407},[95408,95409,95410],{"id":79345,"depth":83,"text":79346},{"id":79370,"depth":83,"text":79371},{"id":79382,"depth":83,"text":79383},{"id":79394,"depth":66,"text":79395,"children":95412},[95413,95414],{"id":79398,"depth":83,"text":79399},{"id":79413,"depth":83,"text":79414},{"id":79465,"depth":66,"text":79466},{"id":79509,"depth":66,"text":79510},{"id":79526,"depth":66,"text":79527,"children":95418},[95419,95420,95421],{"id":79530,"depth":83,"text":79531},{"id":79543,"depth":83,"text":79544},{"id":79648,"depth":83,"text":79649},{"id":79937,"depth":66,"text":79938,"children":95423},[95424,95425,95426],{"id":79941,"depth":83,"text":79942},{"id":80384,"depth":83,"text":80385},{"id":80795,"depth":83,"text":80796},{"id":80858,"depth":66,"text":80859},{"id":80937,"depth":66,"text":80938},{"id":81030,"depth":66,"text":81031},{"id":82875,"depth":66,"text":82876,"children":95431},[95432,95433,95434,95435,95436],{"id":82879,"depth":83,"text":82880},{"id":82891,"depth":83,"text":82892},{"id":83110,"depth":83,"text":83111},{"id":83128,"depth":83,"text":83129},{"id":83188,"depth":83,"text":83189},{"id":87456,"depth":66,"text":87457,"children":95438},[95439,95440,95441],{"id":87460,"depth":83,"text":87461},{"id":87478,"depth":83,"text":87479},{"id":87504,"depth":83,"text":87505},{"id":87513,"depth":66,"text":87514},{"id":87535,"depth":66,"text":87536,"children":95444},[95445,95446,95447,95448,95449,95450,95451,95452],{"id":87539,"depth":83,"text":87540},{"id":87800,"depth":83,"text":87801},{"id":87986,"depth":83,"text":87987},{"id":88353,"depth":83,"text":88354},{"id":88469,"depth":83,"text":88470},{"id":88505,"depth":83,"text":88506},{"id":88552,"depth":83,"text":88553},{"id":88586,"depth":83,"text":88587},{"id":89949,"depth":66,"text":89950,"children":95454},[95455,95456],{"id":89953,"depth":83,"text":89954},{"id":89990,"depth":83,"text":89991},{"id":91345,"depth":66,"text":91346},{"id":91716,"depth":66,"text":91717,"children":95459},[95460,95461],{"id":91720,"depth":83,"text":91721},{"id":91754,"depth":83,"text":91755},{"id":92483,"depth":66,"text":92484,"children":95463},[95464,95465,95466,95467],{"id":92487,"depth":83,"text":92488},{"id":93445,"depth":83,"text":93446},{"id":94387,"depth":83,"text":94388},{"id":94461,"depth":83,"text":94462},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":79330,"description":26025},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":95474,"title":95475,"body":95476,"description":95487,"extension":3153,"meta":95488,"navigation":122,"path":95490,"seo":95491,"stem":95492,"__hash__":95493},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":95477,"toc":95485},[95478],[14,95479,95480,95481],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[3451,95482,95483],{"href":95483,"rel":95484},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[26514],{"title":47,"searchDepth":66,"depth":66,"links":95486},[],"三件套第三套学习",{"category":95489},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":95475,"description":95487},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":95495,"title":95496,"body":95497,"description":26025,"extension":3153,"meta":95602,"navigation":122,"path":95603,"seo":95604,"stem":95605,"__hash__":95606},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":95498,"toc":95597},[95499,95506,95509,95512,95515,95519,95528,95531,95534,95538,95547,95550,95554,95557,95577,95580,95594],[14,95500,95501],{},[3451,95502,95505],{"href":95503,"rel":95504},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[26514],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,95507,95496],{"id":95508},"_1安装",[14,95510,95511],{},"numpy是科学计算基础库,底层是C语言",[14,95513,95514],{},"三种方式：",[18,95516,95518],{"id":95517},"_11-通过pip安装","1.1 通过pip安装",[42,95520,95522],{"className":33028,"code":95521,"language":33030,"meta":47,"style":47},"pip install numpy\n",[49,95523,95524],{"__ignoreMap":47},[52,95525,95526],{"class":54,"line":55},[52,95527,95521],{"class":79},[14,95529,95530],{},"首选方式，自动处理依赖项",[14,95532,95533],{},"在提示系统命令符中使用cmd",[18,95535,95537],{"id":95536},"_12-通过anaconda安装","1.2 通过Anaconda安装",[42,95539,95541],{"className":33028,"code":95540,"language":33030,"meta":47,"style":47},"conda install numpy\n",[49,95542,95543],{"__ignoreMap":47},[52,95544,95545],{"class":54,"line":55},[52,95546,95540],{"class":79},[14,95548,95549],{},"自动解决环境依赖",[18,95551,95553],{"id":95552},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,95555,95556],{},"对于Debian\u002FUbuntu",[42,95558,95560],{"className":33028,"code":95559,"language":33030,"meta":47,"style":47},"sudo apt-get install python3-numpy\n",[49,95561,95562],{"__ignoreMap":47},[52,95563,95564,95567,95569,95572,95574],{"class":54,"line":55},[52,95565,95566],{"class":79},"sudo apt",[52,95568,2642],{"class":58},[52,95570,95571],{"class":79},"get install python3",[52,95573,2642],{"class":58},[52,95575,95576],{"class":79},"numpy\n",[14,95578,95579],{},"对于Fedora:",[42,95581,95583],{"className":33028,"code":95582,"language":33030,"meta":47,"style":47},"sudo dnf install python3-numpy\n",[49,95584,95585],{"__ignoreMap":47},[52,95586,95587,95590,95592],{"class":54,"line":55},[52,95588,95589],{"class":79},"sudo dnf install python3",[52,95591,2642],{"class":58},[52,95593,95576],{"class":79},[3141,95595,95596],{},"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":47,"searchDepth":66,"depth":66,"links":95598},[95599,95600,95601],{"id":95517,"depth":66,"text":95518},{"id":95536,"depth":66,"text":95537},{"id":95552,"depth":66,"text":95553},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":95496,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":95608,"title":95609,"body":95610,"description":26025,"extension":3153,"meta":95723,"navigation":122,"path":95724,"seo":95725,"stem":95726,"__hash__":95727},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":95611,"toc":95721},[95612,95615,95618,95621,95624,95627,95630,95633,95636,95639,95715,95718],[10,95613,95609],{"id":95614},"_10算数函数",[14,95616,95617],{},"加减乘除运算跟python基础语法没区别",[14,95619,95620],{},"除了python那种方法外还可以使用函数",[14,95622,95623],{},"加：np.add(a,b)",[14,95625,95626],{},"减：np.subtract(a,b)",[14,95628,95629],{},"乘：np.multiply(a,b)",[14,95631,95632],{},"除：np.divide(a,b) == a\u002Fb",[14,95634,95635],{},"取余：np.mod(a,b) == a%b",[14,95637,95638],{},"必须会的用法：",[42,95640,95642],{"className":33028,"code":95641,"language":33030,"meta":47,"style":47},"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",[49,95643,95644,95666,95687,95697,95710],{"__ignoreMap":47},[52,95645,95646,95648,95650,95653,95655,95658,95660,95662,95664],{"class":54,"line":55},[52,95647,3451],{"class":79},[52,95649,292],{"class":58},[52,95651,95652],{"class":79},"np.arange(",[52,95654,3624],{"class":308},[52,95656,95657],{"class":79},").reshape(",[52,95659,2313],{"class":308},[52,95661,389],{"class":79},[52,95663,2313],{"class":308},[52,95665,708],{"class":79},[52,95667,95668,95670,95672,95675,95677,95679,95681,95683,95685],{"class":54,"line":66},[52,95669,3474],{"class":79},[52,95671,292],{"class":58},[52,95673,95674],{"class":79},"np.array([",[52,95676,3649],{"class":308},[52,95678,389],{"class":79},[52,95680,3649],{"class":308},[52,95682,389],{"class":79},[52,95684,3649],{"class":308},[52,95686,7629],{"class":79},[52,95688,95689,95692,95694],{"class":54,"line":83},[52,95690,95691],{"class":79},"result",[52,95693,292],{"class":58},[52,95695,95696],{"class":79},"np.empty_like(a)\n",[52,95698,95699,95702,95705,95707],{"class":54,"line":91},[52,95700,95701],{"class":79},"np.add(a,b,",[52,95703,95704],{"class":1223},"out",[52,95706,292],{"class":58},[52,95708,95709],{"class":79},"result)\n",[52,95711,95712],{"class":54,"line":98},[52,95713,95714],{"class":79},"result\n",[14,95716,95717],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[3141,95719,95720],{},"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":47,"searchDepth":66,"depth":66,"links":95722},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":95609,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95729,"title":95730,"body":95731,"description":26025,"extension":3153,"meta":96493,"navigation":122,"path":96494,"seo":96495,"stem":96496,"__hash__":96497},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95732,"toc":96480},[95733,95736,95739,95742,95746,95785,95789,95833,95893,95897,95900,95939,95942,95987,95991,96027,96031,96100,96104,96168,96172,96175,96178,96181,96184,96220,96224,96264,96268,96340,96343,96347,96410,96414,96477],[10,95734,95730],{"id":95735},"_11统计函数",[14,95737,95738],{},"sum max min mean",[14,95740,95741],{},"这些有axis参数，可以指定方向",[18,95743,95745],{"id":95744},"_111-sum求和函数","11.1 sum()求和函数",[42,95747,95749],{"className":33028,"code":95748,"language":33030,"meta":47,"style":47},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[49,95750,95751,95756,95777],{"__ignoreMap":47},[52,95752,95753],{"class":54,"line":55},[52,95754,95755],{"class":94},"#创建一维数组\n",[52,95757,95758,95760,95762,95765,95767,95769,95771,95773,95775],{"class":54,"line":66},[52,95759,3451],{"class":79},[52,95761,292],{"class":58},[52,95763,95764],{"class":79},"np.random.randint(",[52,95766,629],{"class":308},[52,95768,389],{"class":79},[52,95770,591],{"class":308},[52,95772,389],{"class":79},[52,95774,444],{"class":308},[52,95776,708],{"class":79},[52,95778,95779,95782],{"class":54,"line":83},[52,95780,95781],{"class":79},"np.sum(a)",[52,95783,95784],{"class":94},"#求和\n",[18,95786,95788],{"id":95787},"_112-max求最大值函数","11.2 max()求最大值函数",[42,95790,95792],{"className":33028,"code":95791,"language":33030,"meta":47,"style":47},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[49,95793,95794,95798,95818,95823,95828],{"__ignoreMap":47},[52,95795,95796],{"class":54,"line":55},[52,95797,95755],{"class":94},[52,95799,95800,95802,95804,95806,95808,95810,95812,95814,95816],{"class":54,"line":66},[52,95801,3451],{"class":79},[52,95803,292],{"class":58},[52,95805,95764],{"class":79},[52,95807,629],{"class":308},[52,95809,389],{"class":79},[52,95811,591],{"class":308},[52,95813,389],{"class":79},[52,95815,444],{"class":308},[52,95817,708],{"class":79},[52,95819,95820],{"class":54,"line":83},[52,95821,95822],{"class":79},"np.max(a)\n",[52,95824,95825],{"class":54,"line":91},[52,95826,95827],{"class":94},"#最大索引(求最大元素的索引)arg\n",[52,95829,95830],{"class":54,"line":98},[52,95831,95832],{"class":79},"np.argmax(a)\n",[42,95834,95836],{"className":33028,"code":95835,"language":33030,"meta":47,"style":47},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[49,95837,95838,95859,95879,95883],{"__ignoreMap":47},[52,95839,95840,95842,95844,95847,95849,95851,95853,95855,95857],{"class":54,"line":55},[52,95841,13567],{"class":79},[52,95843,292],{"class":58},[52,95845,95846],{"class":79}," np.array([",[52,95848,629],{"class":308},[52,95850,15083],{"class":79},[52,95852,1805],{"class":308},[52,95854,15083],{"class":79},[52,95856,2313],{"class":308},[52,95858,7629],{"class":79},[52,95860,95861,95863,95865,95867,95869,95871,95873,95875,95877],{"class":54,"line":66},[52,95862,13593],{"class":79},[52,95864,292],{"class":58},[52,95866,95846],{"class":79},[52,95868,2313],{"class":308},[52,95870,15083],{"class":79},[52,95872,564],{"class":308},[52,95874,15083],{"class":79},[52,95876,3504],{"class":308},[52,95878,7629],{"class":79},[52,95880,95881],{"class":54,"line":83},[52,95882,123],{"emptyLinePlaceholder":122},[52,95884,95885,95887,95890],{"class":54,"line":91},[52,95886,33065],{"class":308},[52,95888,95889],{"class":79},"(np.maximum(a, b))   ",[52,95891,95892],{"class":94},"# [3 5 4]，每个位置上取较大值\n",[18,95894,95896],{"id":95895},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,95898,95899],{},"①一维数组：",[42,95901,95903],{"className":33028,"code":95902,"language":33030,"meta":47,"style":47},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[49,95904,95905,95909,95929,95934],{"__ignoreMap":47},[52,95906,95907],{"class":54,"line":55},[52,95908,95755],{"class":94},[52,95910,95911,95913,95915,95917,95919,95921,95923,95925,95927],{"class":54,"line":66},[52,95912,3451],{"class":79},[52,95914,292],{"class":58},[52,95916,95764],{"class":79},[52,95918,629],{"class":308},[52,95920,389],{"class":79},[52,95922,591],{"class":308},[52,95924,389],{"class":79},[52,95926,444],{"class":308},[52,95928,708],{"class":79},[52,95930,95931],{"class":54,"line":83},[52,95932,95933],{"class":94},"#求平均值\n",[52,95935,95936],{"class":54,"line":91},[52,95937,95938],{"class":79},"np.mean(a)\n",[14,95940,95941],{},"②二维数组",[42,95943,95945],{"className":33028,"code":95944,"language":33030,"meta":47,"style":47},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[49,95946,95947,95952,95977,95982],{"__ignoreMap":47},[52,95948,95949],{"class":54,"line":55},[52,95950,95951],{"class":94},"#二维数组\n",[52,95953,95954,95957,95959,95961,95963,95965,95967,95969,95971,95973,95975],{"class":54,"line":66},[52,95955,95956],{"class":79},"aa",[52,95958,292],{"class":58},[52,95960,95652],{"class":79},[52,95962,629],{"class":308},[52,95964,389],{"class":79},[52,95966,3723],{"class":308},[52,95968,95657],{"class":79},[52,95970,2313],{"class":308},[52,95972,389],{"class":79},[52,95974,3504],{"class":308},[52,95976,708],{"class":79},[52,95978,95979],{"class":54,"line":83},[52,95980,95981],{"class":94},"#对数组中的所有数求平均\n",[52,95983,95984],{"class":54,"line":91},[52,95985,95986],{"class":79},"np.mean(aa)\n",[18,95988,95990],{"id":95989},"_114-median求中位数函数","11.4 median()求中位数函数",[42,95992,95994],{"className":33028,"code":95993,"language":33030,"meta":47,"style":47},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[49,95995,95996,96001,96017,96022],{"__ignoreMap":47},[52,95997,95998],{"class":54,"line":55},[52,95999,96000],{"class":94},"#求中位数\n",[52,96002,96003,96005,96007,96009,96011,96013,96015],{"class":54,"line":66},[52,96004,3474],{"class":79},[52,96006,292],{"class":58},[52,96008,95652],{"class":79},[52,96010,629],{"class":308},[52,96012,389],{"class":79},[52,96014,3649],{"class":308},[52,96016,708],{"class":79},[52,96018,96019],{"class":54,"line":83},[52,96020,96021],{"class":79},"np.median(b)\n",[52,96023,96024],{"class":54,"line":91},[52,96025,96026],{"class":94},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[18,96028,96030],{"id":96029},"_115-power求幂运算函数","11.5 power()求幂运算函数",[42,96032,96034],{"className":33028,"code":96033,"language":33030,"meta":47,"style":47},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[49,96035,96036,96052,96057,96062,96071,96076,96085],{"__ignoreMap":47},[52,96037,96038,96040,96042,96044,96046,96048,96050],{"class":54,"line":55},[52,96039,3474],{"class":79},[52,96041,292],{"class":58},[52,96043,95652],{"class":79},[52,96045,629],{"class":308},[52,96047,389],{"class":79},[52,96049,3649],{"class":308},[52,96051,708],{"class":79},[52,96053,96054],{"class":54,"line":66},[52,96055,96056],{"class":94},"#幂运算\n",[52,96058,96059],{"class":54,"line":83},[52,96060,96061],{"class":94},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[52,96063,96064,96067,96069],{"class":54,"line":91},[52,96065,96066],{"class":79},"np.power(b,",[52,96068,564],{"class":308},[52,96070,708],{"class":79},[52,96072,96073],{"class":54,"line":98},[52,96074,96075],{"class":94},"#或者以下代码，将数据存储起来\n",[52,96077,96078,96080,96082],{"class":54,"line":107},[52,96079,4035],{"class":79},[52,96081,292],{"class":58},[52,96083,96084],{"class":79},"np.empty_like(b)\n",[52,96086,96087,96089,96091,96093,96095,96097],{"class":54,"line":113},[52,96088,96066],{"class":79},[52,96090,564],{"class":308},[52,96092,389],{"class":79},[52,96094,95704],{"class":1223},[52,96096,292],{"class":58},[52,96098,96099],{"class":79},"y)\n",[18,96101,96103],{"id":96102},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[42,96105,96107],{"className":33028,"code":96106,"language":33030,"meta":47,"style":47},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[49,96108,96109,96125,96130,96135,96139,96157],{"__ignoreMap":47},[52,96110,96111,96113,96115,96117,96119,96121,96123],{"class":54,"line":55},[52,96112,3474],{"class":79},[52,96114,292],{"class":58},[52,96116,95652],{"class":79},[52,96118,629],{"class":308},[52,96120,389],{"class":79},[52,96122,3649],{"class":308},[52,96124,708],{"class":79},[52,96126,96127],{"class":54,"line":66},[52,96128,96129],{"class":94},"#开方\n",[52,96131,96132],{"class":54,"line":83},[52,96133,96134],{"class":79},"np.sqrt(b)\n",[52,96136,96137],{"class":54,"line":91},[52,96138,96075],{"class":94},[52,96140,96141,96143,96145,96148,96151,96153,96155],{"class":54,"line":98},[52,96142,4035],{"class":79},[52,96144,292],{"class":58},[52,96146,96147],{"class":79},"np.empty_like(b,",[52,96149,96150],{"class":1223},"dtype",[52,96152,292],{"class":58},[52,96154,3262],{"class":308},[52,96156,708],{"class":79},[52,96158,96159,96162,96164,96166],{"class":54,"line":107},[52,96160,96161],{"class":79},"np.sqrt(b,",[52,96163,95704],{"class":1223},[52,96165,292],{"class":58},[52,96167,96099],{"class":79},[18,96169,96171],{"id":96170},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,96173,96174],{},"对数组中的元素累计求和，可指定轴",[14,96176,96177],{},"#累计求和的意思是：",[14,96179,96180],{},"a = np.array([1, 2, 3, 4])",[14,96182,96183],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[42,96185,96187],{"className":33028,"code":96186,"language":33030,"meta":47,"style":47},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[49,96188,96189,96205,96210,96215],{"__ignoreMap":47},[52,96190,96191,96193,96195,96197,96199,96201,96203],{"class":54,"line":55},[52,96192,3474],{"class":79},[52,96194,292],{"class":58},[52,96196,95652],{"class":79},[52,96198,629],{"class":308},[52,96200,389],{"class":79},[52,96202,3649],{"class":308},[52,96204,708],{"class":79},[52,96206,96207],{"class":54,"line":66},[52,96208,96209],{"class":79},"np.cumsum(b)\n",[52,96211,96212],{"class":54,"line":83},[52,96213,96214],{"class":94},"#结果：\n",[52,96216,96217],{"class":54,"line":91},[52,96218,96219],{"class":94},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[18,96221,96223],{"id":96222},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[42,96225,96227],{"className":33028,"code":96226,"language":33030,"meta":47,"style":47},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[49,96228,96229,96245,96250,96255,96259],{"__ignoreMap":47},[52,96230,96231,96233,96235,96237,96239,96241,96243],{"class":54,"line":55},[52,96232,3474],{"class":79},[52,96234,292],{"class":58},[52,96236,95652],{"class":79},[52,96238,629],{"class":308},[52,96240,389],{"class":79},[52,96242,3649],{"class":308},[52,96244,708],{"class":79},[52,96246,96247],{"class":54,"line":66},[52,96248,96249],{"class":94},"#对数组中的元素累计求积，可指定轴\n",[52,96251,96252],{"class":54,"line":83},[52,96253,96254],{"class":79},"np.cumprod(b)\n",[52,96256,96257],{"class":54,"line":91},[52,96258,96214],{"class":94},[52,96260,96261],{"class":54,"line":98},[52,96262,96263],{"class":94},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[18,96265,96267],{"id":96266},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[42,96269,96271],{"className":33028,"code":96270,"language":33030,"meta":47,"style":47},"#删除数组中的重复数据，并对数据进行排序\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",[49,96272,96273,96278,96326,96331,96335],{"__ignoreMap":47},[52,96274,96275],{"class":54,"line":55},[52,96276,96277],{"class":94},"#删除数组中的重复数据，并对数据进行排序\n",[52,96279,96280,96282,96284,96286,96288,96290,96292,96294,96296,96298,96300,96302,96304,96306,96308,96310,96312,96314,96316,96318,96320,96322,96324],{"class":54,"line":66},[52,96281,3451],{"class":79},[52,96283,292],{"class":58},[52,96285,95674],{"class":79},[52,96287,629],{"class":308},[52,96289,389],{"class":79},[52,96291,564],{"class":308},[52,96293,389],{"class":79},[52,96295,2313],{"class":308},[52,96297,389],{"class":79},[52,96299,3698],{"class":308},[52,96301,389],{"class":79},[52,96303,2313],{"class":308},[52,96305,389],{"class":79},[52,96307,3649],{"class":308},[52,96309,389],{"class":79},[52,96311,3411],{"class":308},[52,96313,389],{"class":79},[52,96315,692],{"class":308},[52,96317,389],{"class":79},[52,96319,2414],{"class":308},[52,96321,389],{"class":79},[52,96323,3504],{"class":308},[52,96325,7629],{"class":79},[52,96327,96328],{"class":54,"line":83},[52,96329,96330],{"class":79},"np.unique(a)\n",[52,96332,96333],{"class":54,"line":91},[52,96334,96214],{"class":94},[52,96336,96337],{"class":54,"line":98},[52,96338,96339],{"class":94},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,96341,96342],{},"升序形式排序",[18,96344,96346],{"id":96345},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[42,96348,96350],{"className":33028,"code":96349,"language":33030,"meta":47,"style":47},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[49,96351,96352,96400,96405],{"__ignoreMap":47},[52,96353,96354,96356,96358,96360,96362,96364,96366,96368,96370,96372,96374,96376,96378,96380,96382,96384,96386,96388,96390,96392,96394,96396,96398],{"class":54,"line":55},[52,96355,3451],{"class":79},[52,96357,292],{"class":58},[52,96359,95674],{"class":79},[52,96361,629],{"class":308},[52,96363,389],{"class":79},[52,96365,564],{"class":308},[52,96367,389],{"class":79},[52,96369,2313],{"class":308},[52,96371,389],{"class":79},[52,96373,3698],{"class":308},[52,96375,389],{"class":79},[52,96377,2313],{"class":308},[52,96379,389],{"class":79},[52,96381,3649],{"class":308},[52,96383,389],{"class":79},[52,96385,3411],{"class":308},[52,96387,389],{"class":79},[52,96389,692],{"class":308},[52,96391,389],{"class":79},[52,96393,2414],{"class":308},[52,96395,389],{"class":79},[52,96397,3504],{"class":308},[52,96399,7629],{"class":79},[52,96401,96402],{"class":54,"line":66},[52,96403,96404],{"class":94},"#返回数组中非零元素的索引\n",[52,96406,96407],{"class":54,"line":83},[52,96408,96409],{"class":79},"np.nonzero(a)\n",[18,96411,96413],{"id":96412},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[42,96415,96417],{"className":33028,"code":96416,"language":33030,"meta":47,"style":47},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[49,96418,96419,96467,96472],{"__ignoreMap":47},[52,96420,96421,96423,96425,96427,96429,96431,96433,96435,96437,96439,96441,96443,96445,96447,96449,96451,96453,96455,96457,96459,96461,96463,96465],{"class":54,"line":55},[52,96422,3451],{"class":79},[52,96424,292],{"class":58},[52,96426,95674],{"class":79},[52,96428,629],{"class":308},[52,96430,389],{"class":79},[52,96432,564],{"class":308},[52,96434,389],{"class":79},[52,96436,2313],{"class":308},[52,96438,389],{"class":79},[52,96440,3698],{"class":308},[52,96442,389],{"class":79},[52,96444,2313],{"class":308},[52,96446,389],{"class":79},[52,96448,3649],{"class":308},[52,96450,389],{"class":79},[52,96452,3411],{"class":308},[52,96454,389],{"class":79},[52,96456,692],{"class":308},[52,96458,389],{"class":79},[52,96460,2414],{"class":308},[52,96462,389],{"class":79},[52,96464,3504],{"class":308},[52,96466,7629],{"class":79},[52,96468,96469],{"class":54,"line":66},[52,96470,96471],{"class":94},"#计算一组数中最大值与最小值的差，可指定轴\n",[52,96473,96474],{"class":54,"line":83},[52,96475,96476],{"class":79},"np.ptp(a)\n",[3141,96478,96479],{},"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":47,"searchDepth":66,"depth":66,"links":96481},[96482,96483,96484,96485,96486,96487,96488,96489,96490,96491,96492],{"id":95744,"depth":66,"text":95745},{"id":95787,"depth":66,"text":95788},{"id":95895,"depth":66,"text":95896},{"id":95989,"depth":66,"text":95990},{"id":96029,"depth":66,"text":96030},{"id":96102,"depth":66,"text":96103},{"id":96170,"depth":66,"text":96171},{"id":96222,"depth":66,"text":96223},{"id":96266,"depth":66,"text":96267},{"id":96345,"depth":66,"text":96346},{"id":96412,"depth":66,"text":96413},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95730,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":96499,"title":96500,"body":96501,"description":26025,"extension":3153,"meta":97156,"navigation":122,"path":97157,"seo":97158,"stem":97159,"__hash__":97160},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":96502,"toc":97144},[96503,96506,96510,96513,96729,96733,96736,96945,96949,97015,97020,97024,97027,97030,97068,97072,97075,97080,97084,97087,97090,97095,97099,97102,97106,97109,97112,97117,97121,97124,97127,97132,97136,97141],[10,96504,96500],{"id":96505},"_12其他常用函数",[18,96507,96509],{"id":96508},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,96511,96512],{},"将数组的数据按照行列复制扩展",[42,96514,96516],{"className":33028,"code":96515,"language":33030,"meta":47,"style":47},"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",[49,96517,96518,96534,96543,96547,96552,96557,96570,96574,96579,96584,96589,96593,96598,96622,96634,96638,96642,96647,96652,96657,96662,96666,96679,96683,96687,96692,96697,96702,96707,96712,96716,96720,96725],{"__ignoreMap":47},[52,96519,96520,96522,96524,96526,96528,96530,96532],{"class":54,"line":55},[52,96521,3451],{"class":79},[52,96523,292],{"class":58},[52,96525,95652],{"class":79},[52,96527,629],{"class":308},[52,96529,389],{"class":79},[52,96531,1805],{"class":308},[52,96533,708],{"class":79},[52,96535,96536,96539,96541],{"class":54,"line":66},[52,96537,96538],{"class":79},"np.tile(a,",[52,96540,564],{"class":308},[52,96542,708],{"class":79},[52,96544,96545],{"class":54,"line":83},[52,96546,96214],{"class":94},[52,96548,96549],{"class":54,"line":91},[52,96550,96551],{"class":94},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[52,96553,96554],{"class":54,"line":98},[52,96555,96556],{"class":94},"#行复制两次，列复制三次\n",[52,96558,96559,96562,96564,96566,96568],{"class":54,"line":107},[52,96560,96561],{"class":79},"np.tile(a,(",[52,96563,564],{"class":308},[52,96565,389],{"class":79},[52,96567,2313],{"class":308},[52,96569,33147],{"class":79},[52,96571,96572],{"class":54,"line":113},[52,96573,96214],{"class":94},[52,96575,96576],{"class":54,"line":119},[52,96577,96578],{"class":62},"'''\n",[52,96580,96581],{"class":54,"line":126},[52,96582,96583],{"class":62},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[52,96585,96586],{"class":54,"line":132},[52,96587,96588],{"class":62},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[52,96590,96591],{"class":54,"line":138},[52,96592,96578],{"class":62},[52,96594,96595],{"class":54,"line":144},[52,96596,96597],{"class":94},"#创建二维数组\n",[52,96599,96600,96602,96604,96606,96608,96610,96612,96614,96616,96618,96620],{"class":54,"line":153},[52,96601,95956],{"class":79},[52,96603,292],{"class":58},[52,96605,95652],{"class":79},[52,96607,629],{"class":308},[52,96609,389],{"class":79},[52,96611,3723],{"class":308},[52,96613,95657],{"class":79},[52,96615,3504],{"class":308},[52,96617,389],{"class":79},[52,96619,2313],{"class":308},[52,96621,708],{"class":79},[52,96623,96624,96627,96629,96631],{"class":54,"line":159},[52,96625,96626],{"class":79},"np.tile(aa,",[52,96628,564],{"class":308},[52,96630,2283],{"class":79},[52,96632,96633],{"class":94},"#一个数的时候就是行\n",[52,96635,96636],{"class":54,"line":167},[52,96637,96214],{"class":94},[52,96639,96640],{"class":54,"line":173},[52,96641,96578],{"class":62},[52,96643,96644],{"class":54,"line":181},[52,96645,96646],{"class":62},"array([[ 1,  2,  3,  1,  2,  3],\n",[52,96648,96649],{"class":54,"line":186},[52,96650,96651],{"class":62},"       [ 4,  5,  6,  4,  5,  6],\n",[52,96653,96654],{"class":54,"line":191},[52,96655,96656],{"class":62},"       [ 7,  8,  9,  7,  8,  9],\n",[52,96658,96659],{"class":54,"line":196},[52,96660,96661],{"class":62},"       [10, 11, 12, 10, 11, 12]])\n",[52,96663,96664],{"class":54,"line":201},[52,96665,96578],{"class":62},[52,96667,96668,96671,96673,96675,96677],{"class":54,"line":206},[52,96669,96670],{"class":79},"np.tile(aa,(",[52,96672,564],{"class":308},[52,96674,389],{"class":79},[52,96676,2313],{"class":308},[52,96678,33147],{"class":79},[52,96680,96681],{"class":54,"line":211},[52,96682,96214],{"class":94},[52,96684,96685],{"class":54,"line":218},[52,96686,96578],{"class":62},[52,96688,96689],{"class":54,"line":223},[52,96690,96691],{"class":62},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[52,96693,96694],{"class":54,"line":230},[52,96695,96696],{"class":62},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[52,96698,96699],{"class":54,"line":239},[52,96700,96701],{"class":62},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[52,96703,96704],{"class":54,"line":251},[52,96705,96706],{"class":62},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[52,96708,96709],{"class":54,"line":256},[52,96710,96711],{"class":62},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[52,96713,96714],{"class":54,"line":262},[52,96715,96696],{"class":62},[52,96717,96718],{"class":54,"line":268},[52,96719,96701],{"class":62},[52,96721,96722],{"class":54,"line":280},[52,96723,96724],{"class":62},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[52,96726,96727],{"class":54,"line":286},[52,96728,96578],{"class":62},[18,96730,96732],{"id":96731},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,96734,96735],{},"repeat()将数组中的每个元素重复若干次",[42,96737,96739],{"className":33028,"code":96738,"language":33030,"meta":47,"style":47},"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",[49,96740,96741,96757,96766,96770,96775,96799,96804,96813,96817,96822,96826,96831,96847,96851,96855,96860,96865,96870,96874,96879,96883,96888,96893,96897,96913,96917,96921,96926,96931,96936,96941],{"__ignoreMap":47},[52,96742,96743,96745,96747,96749,96751,96753,96755],{"class":54,"line":55},[52,96744,3451],{"class":79},[52,96746,292],{"class":58},[52,96748,95652],{"class":79},[52,96750,629],{"class":308},[52,96752,389],{"class":79},[52,96754,1805],{"class":308},[52,96756,708],{"class":79},[52,96758,96759,96762,96764],{"class":54,"line":66},[52,96760,96761],{"class":79},"np.repeat(a,",[52,96763,2313],{"class":308},[52,96765,708],{"class":79},[52,96767,96768],{"class":54,"line":83},[52,96769,96214],{"class":94},[52,96771,96772],{"class":54,"line":91},[52,96773,96774],{"class":94},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[52,96776,96777,96779,96781,96783,96785,96787,96789,96791,96793,96795,96797],{"class":54,"line":98},[52,96778,95956],{"class":79},[52,96780,292],{"class":58},[52,96782,95652],{"class":79},[52,96784,629],{"class":308},[52,96786,389],{"class":79},[52,96788,3723],{"class":308},[52,96790,95657],{"class":79},[52,96792,3504],{"class":308},[52,96794,389],{"class":79},[52,96796,2313],{"class":308},[52,96798,708],{"class":79},[52,96800,96801],{"class":54,"line":107},[52,96802,96803],{"class":94},"#这个重复之后二维变成一维\n",[52,96805,96806,96809,96811],{"class":54,"line":113},[52,96807,96808],{"class":79},"np.repeat(aa,",[52,96810,564],{"class":308},[52,96812,708],{"class":79},[52,96814,96815],{"class":54,"line":119},[52,96816,96578],{"class":62},[52,96818,96819],{"class":54,"line":126},[52,96820,96821],{"class":62},"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",[52,96823,96824],{"class":54,"line":132},[52,96825,96578],{"class":62},[52,96827,96828],{"class":54,"line":138},[52,96829,96830],{"class":94},"#指定axis\n",[52,96832,96833,96835,96837,96839,96841,96843,96845],{"class":54,"line":144},[52,96834,96808],{"class":79},[52,96836,564],{"class":308},[52,96838,389],{"class":79},[52,96840,50164],{"class":1223},[52,96842,292],{"class":58},[52,96844,692],{"class":308},[52,96846,708],{"class":79},[52,96848,96849],{"class":54,"line":153},[52,96850,96214],{"class":94},[52,96852,96853],{"class":54,"line":159},[52,96854,96578],{"class":62},[52,96856,96857],{"class":54,"line":167},[52,96858,96859],{"class":62},"array([[ 1,  2,  3],\n",[52,96861,96862],{"class":54,"line":173},[52,96863,96864],{"class":62},"       [ 1,  2,  3],\n",[52,96866,96867],{"class":54,"line":181},[52,96868,96869],{"class":62},"       [ 4,  5,  6],\n",[52,96871,96872],{"class":54,"line":186},[52,96873,96869],{"class":62},[52,96875,96876],{"class":54,"line":191},[52,96877,96878],{"class":62},"       [ 7,  8,  9],\n",[52,96880,96881],{"class":54,"line":196},[52,96882,96878],{"class":62},[52,96884,96885],{"class":54,"line":201},[52,96886,96887],{"class":62},"       [10, 11, 12],\n",[52,96889,96890],{"class":54,"line":206},[52,96891,96892],{"class":62},"       [10, 11, 12]])\n",[52,96894,96895],{"class":54,"line":211},[52,96896,96578],{"class":62},[52,96898,96899,96901,96903,96905,96907,96909,96911],{"class":54,"line":218},[52,96900,96808],{"class":79},[52,96902,564],{"class":308},[52,96904,389],{"class":79},[52,96906,50164],{"class":1223},[52,96908,292],{"class":58},[52,96910,629],{"class":308},[52,96912,708],{"class":79},[52,96914,96915],{"class":54,"line":223},[52,96916,96214],{"class":94},[52,96918,96919],{"class":54,"line":230},[52,96920,96578],{"class":62},[52,96922,96923],{"class":54,"line":239},[52,96924,96925],{"class":62},"array([[ 1,  1,  2,  2,  3,  3],\n",[52,96927,96928],{"class":54,"line":251},[52,96929,96930],{"class":62},"       [ 4,  4,  5,  5,  6,  6],\n",[52,96932,96933],{"class":54,"line":256},[52,96934,96935],{"class":62},"       [ 7,  7,  8,  8,  9,  9],\n",[52,96937,96938],{"class":54,"line":262},[52,96939,96940],{"class":62},"       [10, 10, 11, 11, 12, 12]])\n",[52,96942,96943],{"class":54,"line":268},[52,96944,96578],{"class":62},[18,96946,96948],{"id":96947},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[42,96950,96952],{"className":33028,"code":96951,"language":33030,"meta":47,"style":47},"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",[49,96953,96954,96970,96975,96987,96991,96996,97006,97010],{"__ignoreMap":47},[52,96955,96956,96958,96960,96962,96964,96966,96968],{"class":54,"line":55},[52,96957,3451],{"class":79},[52,96959,292],{"class":58},[52,96961,95652],{"class":79},[52,96963,629],{"class":308},[52,96965,389],{"class":79},[52,96967,1805],{"class":308},[52,96969,708],{"class":79},[52,96971,96972],{"class":54,"line":66},[52,96973,96974],{"class":94},"#array([，2，3，4])\n",[52,96976,96977,96980,96982,96984],{"class":54,"line":83},[52,96978,96979],{"class":79},"np.roll(a,",[52,96981,564],{"class":308},[52,96983,2283],{"class":79},[52,96985,96986],{"class":94},"#传正数向后调多少位，传负数向前调多少位\n",[52,96988,96989],{"class":54,"line":91},[52,96990,96214],{"class":94},[52,96992,96993],{"class":54,"line":98},[52,96994,96995],{"class":94},"#array([3, 4, 1, 2])\n",[52,96997,96998,97000,97002,97004],{"class":54,"line":107},[52,96999,96979],{"class":79},[52,97001,2642],{"class":58},[52,97003,629],{"class":308},[52,97005,708],{"class":79},[52,97007,97008],{"class":54,"line":113},[52,97009,96214],{"class":94},[52,97011,97012],{"class":54,"line":119},[52,97013,97014],{"class":94},"#array([2, 3, 4, 1])\n",[14,97016,97017],{},[4509,97018],{"alt":47,"src":97019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[18,97021,97023],{"id":97022},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,97025,97026],{},"resize()重新调整数组的大小",[14,97028,97029],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[42,97031,97033],{"className":33028,"code":97032,"language":33030,"meta":47,"style":47},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[49,97034,97035,97040,97053],{"__ignoreMap":47},[52,97036,97037],{"class":54,"line":55},[52,97038,97039],{"class":94},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[52,97041,97042,97045,97047,97049,97051],{"class":54,"line":66},[52,97043,97044],{"class":79},"np.resize(aa,(",[52,97046,564],{"class":308},[52,97048,389],{"class":79},[52,97050,1125],{"class":308},[52,97052,33147],{"class":79},[52,97054,97055,97057,97059,97061,97063,97065],{"class":54,"line":83},[52,97056,97044],{"class":79},[52,97058,564],{"class":308},[52,97060,389],{"class":79},[52,97062,3624],{"class":308},[52,97064,85421],{"class":79},[52,97066,97067],{"class":94},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[18,97069,97071],{"id":97070},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,97073,97074],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,97076,97077],{},[4509,97078],{"alt":47,"src":97079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[18,97081,97083],{"id":97082},"_126-保存加载文件","12.6 保存加载文件",[14,97085,97086],{},"savetxt():将数据保存到txt文件中",[14,97088,97089],{},"loadtxt():从文件加载数据",[14,97091,97092],{},[4509,97093],{"alt":47,"src":97094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[18,97096,97098],{"id":97097},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,97100,97101],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[18,97103,97105],{"id":97104},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,97107,97108],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,97110,97111],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,97113,97114],{},[4509,97115],{"alt":47,"src":97116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[18,97118,97120],{"id":97119},"_129-where语句","12.9 where语句",[14,97122,97123],{},"np.where(条件,x,y)",[14,97125,97126],{},"如果条件为True,对应值为x,否则对应值为y",[14,97128,97129],{},[4509,97130],{"alt":47,"src":97131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[18,97133,97135],{"id":97134},"_1210-dot矩阵","12.10 dot()矩阵",[14,97137,97138],{},[4509,97139],{"alt":47,"src":97140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[3141,97142,97143],{},"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":47,"searchDepth":66,"depth":66,"links":97145},[97146,97147,97148,97149,97150,97151,97152,97153,97154,97155],{"id":96508,"depth":66,"text":96509},{"id":96731,"depth":66,"text":96732},{"id":96947,"depth":66,"text":96948},{"id":97022,"depth":66,"text":97023},{"id":97070,"depth":66,"text":97071},{"id":97082,"depth":66,"text":97083},{"id":97097,"depth":66,"text":97098},{"id":97104,"depth":66,"text":97105},{"id":97119,"depth":66,"text":97120},{"id":97134,"depth":66,"text":97135},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":96500,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":97162,"title":97163,"body":97164,"description":26025,"extension":3153,"meta":97517,"navigation":122,"path":97518,"seo":97519,"stem":97520,"__hash__":97521},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":97165,"toc":97515},[97166,97169,97172,97175,97178,97181,97246,97248,97512],[10,97167,97163],{"id":97168},"_13数组排序",[14,97170,97171],{},"排序主要用到的方法是np.sort和np.argsort",[14,97173,97174],{},"其中np.sort()对数组直接排序",[14,97176,97177],{},"而np.argsort()是返回排序后的原始索引",[14,97179,97180],{},"①一维数组",[42,97182,97184],{"className":33028,"code":97183,"language":33030,"meta":47,"style":47},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[49,97185,97186,97190,97230,97238],{"__ignoreMap":47},[52,97187,97188],{"class":54,"line":55},[52,97189,95755],{"class":94},[52,97191,97192,97194,97196,97198,97200,97202,97204,97206,97208,97210,97212,97214,97216,97218,97220,97222,97224,97226,97228],{"class":54,"line":66},[52,97193,3451],{"class":79},[52,97195,292],{"class":58},[52,97197,95674],{"class":79},[52,97199,2313],{"class":308},[52,97201,389],{"class":79},[52,97203,3698],{"class":308},[52,97205,389],{"class":79},[52,97207,3600],{"class":308},[52,97209,389],{"class":79},[52,97211,2414],{"class":308},[52,97213,389],{"class":79},[52,97215,3490],{"class":308},[52,97217,389],{"class":79},[52,97219,4083],{"class":308},[52,97221,389],{"class":79},[52,97223,1125],{"class":308},[52,97225,389],{"class":79},[52,97227,3649],{"class":308},[52,97229,7629],{"class":79},[52,97231,97232,97235],{"class":54,"line":83},[52,97233,97234],{"class":79},"np.sort(a)",[52,97236,97237],{"class":94},"#升序排序\n",[52,97239,97240,97243],{"class":54,"line":91},[52,97241,97242],{"class":79},"np.argsort(a)",[52,97244,97245],{"class":94},"#按照元素大小来索引排序\n",[14,97247,95941],{},[42,97249,97251],{"className":33028,"code":97250,"language":33030,"meta":47,"style":47},"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",[49,97252,97253,97265,97291,97296,97300,97305,97310,97315,97320,97324,97332,97336,97341,97346,97351,97356,97360,97365,97378,97382,97387,97392,97397,97402,97406,97411,97423,97427,97431,97435,97439,97443,97447,97452,97467,97472,97481,97486,97490,97494,97499,97503,97508],{"__ignoreMap":47},[52,97254,97255,97258,97260,97262],{"class":54,"line":55},[52,97256,97257],{"class":79},"np.random.seed(",[52,97259,692],{"class":308},[52,97261,2283],{"class":79},[52,97263,97264],{"class":94},"#保证每次值一样\n",[52,97266,97267,97269,97271,97273,97275,97277,97279,97281,97283,97285,97287,97289],{"class":54,"line":66},[52,97268,95956],{"class":79},[52,97270,292],{"class":58},[52,97272,95764],{"class":79},[52,97274,591],{"class":308},[52,97276,389],{"class":79},[52,97278,34146],{"class":1223},[52,97280,292],{"class":58},[52,97282,1216],{"class":79},[52,97284,3504],{"class":308},[52,97286,389],{"class":79},[52,97288,1125],{"class":308},[52,97290,33147],{"class":79},[52,97292,97293],{"class":54,"line":83},[52,97294,97295],{"class":94},"#原数组：\n",[52,97297,97298],{"class":54,"line":91},[52,97299,96578],{"class":62},[52,97301,97302],{"class":54,"line":98},[52,97303,97304],{"class":62},"array([[44, 47, 64, 67, 67,  9],\n",[52,97306,97307],{"class":54,"line":107},[52,97308,97309],{"class":62},"       [83, 21, 36, 87, 70, 88],\n",[52,97311,97312],{"class":54,"line":113},[52,97313,97314],{"class":62},"       [88, 12, 58, 65, 39, 87],\n",[52,97316,97317],{"class":54,"line":119},[52,97318,97319],{"class":62},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[52,97321,97322],{"class":54,"line":126},[52,97323,96578],{"class":62},[52,97325,97326,97329],{"class":54,"line":132},[52,97327,97328],{"class":79},"np.sort(aa)",[52,97330,97331],{"class":94},"#每行进行了排序\n",[52,97333,97334],{"class":54,"line":138},[52,97335,96578],{"class":62},[52,97337,97338],{"class":54,"line":144},[52,97339,97340],{"class":62},"array([[ 9, 44, 47, 64, 67, 67],\n",[52,97342,97343],{"class":54,"line":153},[52,97344,97345],{"class":62},"       [21, 36, 70, 83, 87, 88],\n",[52,97347,97348],{"class":54,"line":159},[52,97349,97350],{"class":62},"       [12, 39, 58, 65, 87, 88],\n",[52,97352,97353],{"class":54,"line":167},[52,97354,97355],{"class":62},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[52,97357,97358],{"class":54,"line":173},[52,97359,96578],{"class":62},[52,97361,97362],{"class":54,"line":181},[52,97363,97364],{"class":94},"#axis=0时\n",[52,97366,97367,97370,97372,97374,97376],{"class":54,"line":186},[52,97368,97369],{"class":79},"np.sort(aa,",[52,97371,50164],{"class":1223},[52,97373,292],{"class":58},[52,97375,692],{"class":308},[52,97377,708],{"class":79},[52,97379,97380],{"class":54,"line":191},[52,97381,96578],{"class":62},[52,97383,97384],{"class":54,"line":196},[52,97385,97386],{"class":62},"array([[44, 12, 36, 37, 25,  9],\n",[52,97388,97389],{"class":54,"line":201},[52,97390,97391],{"class":62},"       [46, 21, 58, 65, 39, 77],\n",[52,97393,97394],{"class":54,"line":206},[52,97395,97396],{"class":62},"       [83, 47, 64, 67, 67, 87],\n",[52,97398,97399],{"class":54,"line":211},[52,97400,97401],{"class":62},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[52,97403,97404],{"class":54,"line":218},[52,97405,96578],{"class":62},[52,97407,97408],{"class":54,"line":223},[52,97409,97410],{"class":94},"#axis=1时,为默认值\n",[52,97412,97413,97415,97417,97419,97421],{"class":54,"line":230},[52,97414,97369],{"class":79},[52,97416,50164],{"class":1223},[52,97418,292],{"class":58},[52,97420,629],{"class":308},[52,97422,708],{"class":79},[52,97424,97425],{"class":54,"line":239},[52,97426,96578],{"class":62},[52,97428,97429],{"class":54,"line":251},[52,97430,97340],{"class":62},[52,97432,97433],{"class":54,"line":256},[52,97434,97345],{"class":62},[52,97436,97437],{"class":54,"line":262},[52,97438,97350],{"class":62},[52,97440,97441],{"class":54,"line":268},[52,97442,97355],{"class":62},[52,97444,97445],{"class":54,"line":280},[52,97446,96578],{"class":62},[52,97448,97449],{"class":54,"line":286},[52,97450,97451],{"class":94},"#按最后一列排序\n",[52,97453,97454,97456,97458,97461,97463,97465],{"class":54,"line":300},[52,97455,3474],{"class":79},[52,97457,292],{"class":58},[52,97459,97460],{"class":79},"aa[:,",[52,97462,2642],{"class":58},[52,97464,629],{"class":308},[52,97466,35896],{"class":79},[52,97468,97469],{"class":54,"line":314},[52,97470,97471],{"class":94},"#获取最后一列排好序的索引\n",[52,97473,97474,97476,97478],{"class":54,"line":327},[52,97475,76708],{"class":79},[52,97477,292],{"class":58},[52,97479,97480],{"class":79},"np.argsort(b)\n",[52,97482,97483],{"class":54,"line":333},[52,97484,97485],{"class":79},"aa[index]\n",[52,97487,97488],{"class":54,"line":360},[52,97489,96578],{"class":62},[52,97491,97492],{"class":54,"line":365},[52,97493,97304],{"class":62},[52,97495,97496],{"class":54,"line":371},[52,97497,97498],{"class":62},"       [46, 88, 81, 37, 25, 77],\n",[52,97500,97501],{"class":54,"line":400},[52,97502,97314],{"class":62},[52,97504,97505],{"class":54,"line":405},[52,97506,97507],{"class":62},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[52,97509,97510],{"class":54,"line":411},[52,97511,96578],{"class":62},[3141,97513,97514],{},"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":47,"searchDepth":66,"depth":66,"links":97516},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":97163,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":97523,"title":97524,"body":97525,"description":26025,"extension":3153,"meta":97555,"navigation":122,"path":97556,"seo":97557,"stem":97558,"__hash__":97559},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":97526,"toc":97553},[97527,97530,97533,97536,97539,97542,97545,97548],[10,97528,97524],{"id":97529},"_14广播机制",[14,97531,97532],{},"广播的规则：",[14,97534,97535],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,97537,97538],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,97540,97541],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,97543,97544],{},"3.如果没有维度形状为1，则会引发异常",[14,97546,97547],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,97549,97550],{},[4509,97551],{"alt":47,"src":97552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":47,"searchDepth":66,"depth":66,"links":97554},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":97524,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":97561,"title":97562,"body":97563,"description":26025,"extension":3153,"meta":97661,"navigation":122,"path":97662,"seo":97663,"stem":97664,"__hash__":97665},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":97564,"toc":97659},[97565,97568,97571,97656],[10,97566,97562],{"id":97567},"_15比较掩码",[14,97569,97570],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[42,97572,97574],{"className":33028,"code":97573,"language":33030,"meta":47,"style":47},"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",[49,97575,97576,97622,97633,97647,97651],{"__ignoreMap":47},[52,97577,97578,97580,97582,97585,97587,97589,97591,97593,97595,97597,97599,97601,97603,97605,97607,97609,97611,97613,97615,97617,97619],{"class":54,"line":55},[52,97579,3451],{"class":79},[52,97581,292],{"class":58},[52,97583,97584],{"class":79},"np.array([[",[52,97586,629],{"class":308},[52,97588,389],{"class":79},[52,97590,564],{"class":308},[52,97592,389],{"class":79},[52,97594,2313],{"class":308},[52,97596,50680],{"class":79},[52,97598,3673],{"class":308},[52,97600,389],{"class":79},[52,97602,3698],{"class":308},[52,97604,389],{"class":79},[52,97606,3723],{"class":308},[52,97608,50680],{"class":79},[52,97610,2468],{"class":308},[52,97612,389],{"class":79},[52,97614,2433],{"class":308},[52,97616,389],{"class":79},[52,97618,2414],{"class":308},[52,97620,97621],{"class":79},"]])\n",[52,97623,97624,97626,97628,97630],{"class":54,"line":66},[52,97625,3451],{"class":79},[52,97627,698],{"class":58},[52,97629,444],{"class":308},[52,97631,97632],{"class":94},"#结果是一个由True,False组成的数组\n",[52,97634,97635,97638,97640,97642,97644],{"class":54,"line":83},[52,97636,97637],{"class":79},"a[a",[52,97639,698],{"class":58},[52,97641,444],{"class":308},[52,97643,567],{"class":79},[52,97645,97646],{"class":94},"#小于20的元素会存到这个数组中\n",[52,97648,97649],{"class":54,"line":91},[52,97650,96214],{"class":94},[52,97652,97653],{"class":54,"line":98},[52,97654,97655],{"class":94},"#array([ 1,  2,  3, 11, 12, 13])\n",[3141,97657,97658],{},"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":47,"searchDepth":66,"depth":66,"links":97660},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":97562,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97667,"title":97668,"body":97669,"description":26025,"extension":3153,"meta":97761,"navigation":122,"path":97762,"seo":97763,"stem":97764,"__hash__":97765},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97670,"toc":97759},[97671,97674,97677,97680,97683,97686,97751,97756],[10,97672,97668],{"id":97673},"_16魔法命令time",[14,97675,97676],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,97678,97679],{},"%:行模式",[14,97681,97682],{},"%%:单元格模式",[14,97684,97685],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[42,97687,97689],{"className":33028,"code":97688,"language":33030,"meta":47,"style":47},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[49,97690,97691,97696,97703,97708,97717,97730,97734,97742],{"__ignoreMap":47},[52,97692,97693],{"class":54,"line":55},[52,97694,97695],{"class":94},"#程序执行时间\n",[52,97697,97698,97700],{"class":54,"line":66},[52,97699,33042],{"class":58},[52,97701,97702],{"class":79}," time \n",[52,97704,97705],{"class":54,"line":83},[52,97706,97707],{"class":94},"#获取时间\n",[52,97709,97710,97713,97715],{"class":54,"line":91},[52,97711,97712],{"class":79},"start",[52,97714,292],{"class":58},[52,97716,35068],{"class":79},[52,97718,97719,97722,97725,97727],{"class":54,"line":98},[52,97720,97721],{"class":79},"time.sleep(",[52,97723,97724],{"class":308},"0.4",[52,97726,2283],{"class":79},[52,97728,97729],{"class":94},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[52,97731,97732],{"class":54,"line":107},[52,97733,97707],{"class":94},[52,97735,97736,97738,97740],{"class":54,"line":113},[52,97737,48451],{"class":79},[52,97739,292],{"class":58},[52,97741,35068],{"class":79},[52,97743,97744,97746,97748],{"class":54,"line":119},[52,97745,48451],{"class":79},[52,97747,2642],{"class":58},[52,97749,97750],{"class":79},"start\n",[14,97752,97753],{},[4509,97754],{"alt":47,"src":97755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[3141,97757,97758],{},"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":47,"searchDepth":66,"depth":66,"links":97760},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97668,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97767,"title":97768,"body":97769,"description":26025,"extension":3153,"meta":97804,"navigation":122,"path":97805,"seo":97806,"stem":97807,"__hash__":97808},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97770,"toc":97802},[97771,97774,97777,97780,97783,97786,97789,97792,97797],[10,97772,97768],{"id":97773},"_17魔法命令timeit",[14,97775,97776],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,97778,97779],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,97781,97782],{},"单元格模式：",[14,97784,97785],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,97787,97788],{},"初始化语句执行次数由轮数来决定",[14,97790,97791],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,97793,97794],{},[4509,97795],{"alt":47,"src":97796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,97798,97799],{},[4509,97800],{"alt":47,"src":97801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":47,"searchDepth":66,"depth":66,"links":97803},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97768,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97810,"title":97811,"body":97812,"description":26025,"extension":3153,"meta":97830,"navigation":122,"path":97831,"seo":97832,"stem":97833,"__hash__":97834},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97813,"toc":97828},[97814,97817,97820,97823],[10,97815,97811],{"id":97816},"_18魔法命令writefile和run",[14,97818,97819],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,97821,97822],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,97824,97825],{},[4509,97826],{"alt":47,"src":97827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":47,"searchDepth":66,"depth":66,"links":97829},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97811,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97836,"title":97837,"body":97838,"description":26025,"extension":3153,"meta":97891,"navigation":122,"path":97892,"seo":97893,"stem":97894,"__hash__":97895},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97839,"toc":97889},[97840,97843,97846,97848,97851,97854,97859,97862,97865,97868,97871,97874,97877,97880,97883,97886],[10,97841,97837],{"id":97842},"_19魔法命令memit",[14,97844,97845],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,97847,27249],{},[14,97849,97850],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,97852,97853],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,97855,97856],{},[4509,97857],{"alt":47,"src":97858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,97860,97861],{},"补充：",[14,97863,97864],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,97866,97867],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,97869,97870],{},"解决方法：",[14,97872,97873],{},"1.cmd",[14,97875,97876],{},"2.依次输入以下代码：",[14,97878,97879],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,97881,97882],{},"pip install --upgrade ipython",[14,97884,97885],{},"#升级 memory_profiler 和 setuptools",[14,97887,97888],{},"pip install --upgrade memory_profiler setuptools",{"title":47,"searchDepth":66,"depth":66,"links":97890},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97837,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97897,"title":97898,"body":97899,"description":26025,"extension":3153,"meta":99545,"navigation":122,"path":99546,"seo":99547,"stem":99548,"__hash__":99549},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97900,"toc":99515},[97901,97904,97908,97912,97973,97976,97981,97985,97990,97995,98000,98005,98008,98013,98017,98021,98054,98057,98060,98063,98115,98118,98154,98157,98199,98203,98224,98226,98263,98265,98270,98272,98277,98281,98284,98312,98316,98320,98373,98377,98469,98473,98477,98480,98485,98489,98514,98519,98523,98526,98529,98532,98535,98538,98541,98544,98556,98560,98564,98567,98599,98602,98625,98628,98654,98657,98683,98686,98720,98723,98785,98789,98792,98796,98799,98825,98828,98831,98836,98839,98908,98910,98915,98976,98979,98990,98996,99001,99005,99008,99021,99025,99040,99042,99065,99067,99093,99096,99099,99102,99150,99152,99157,99161,99165,99192,99196,99223,99226,99231,99236,99326,99330,99388,99393,99396,99399,99441,99445,99501,99506,99509,99512],[10,97902,97898],{"id":97903},"_2创建数组",[18,97905,97907],{"id":97906},"_21-array函数创建数组","2.1 array()函数创建数组",[3195,97909,97911],{"id":97910},"_221-函数语句","2.2.1 函数语句",[42,97913,97915],{"className":33028,"code":97914,"language":33030,"meta":47,"style":47},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[49,97916,97917],{"__ignoreMap":47},[52,97918,97919,97922,97925,97927,97929,97931,97933,97935,97938,97940,97943,97945,97948,97950,97952,97954,97957,97959,97962,97964,97967,97969,97971],{"class":54,"line":55},[52,97920,97921],{"class":79},"numpy.array(",[52,97923,97924],{"class":308},"object",[52,97926,15083],{"class":79},[52,97928,96150],{"class":1223},[52,97930,16212],{"class":58},[52,97932,41583],{"class":308},[52,97934,15083],{"class":79},[52,97936,97937],{"class":1223},"copy",[52,97939,16212],{"class":58},[52,97941,97942],{"class":308}," True",[52,97944,15083],{"class":79},[52,97946,97947],{"class":1223},"order",[52,97949,16212],{"class":58},[52,97951,41583],{"class":308},[52,97953,15083],{"class":79},[52,97955,97956],{"class":1223},"subok",[52,97958,16212],{"class":58},[52,97960,97961],{"class":308}," False",[52,97963,15083],{"class":79},[52,97965,97966],{"class":1223},"ndmin",[52,97968,16212],{"class":58},[52,97970,1444],{"class":308},[52,97972,708],{"class":79},[14,97974,97975],{},"参数：",[14,97977,97978],{},[4509,97979],{"alt":47,"src":97980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[3195,97982,97984],{"id":97983},"_222-实例","2.2.2 实例",[14,97986,97987],{},[4509,97988],{"alt":47,"src":97989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,97991,97992],{},[4509,97993],{"alt":47,"src":97994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,97996,97997],{},[4509,97998],{"alt":47,"src":97999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,98001,98002],{},[4509,98003],{"alt":47,"src":98004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,98006,98007],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,98009,98010],{},[4509,98011],{"alt":47,"src":98012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[18,98014,98016],{"id":98015},"_22-随机数创建数组","2.2 随机数创建数组",[3195,98018,98020],{"id":98019},"_221-random语句","2.2.1 random语句",[42,98022,98024],{"className":33028,"code":98023,"language":33030,"meta":47,"style":47},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[49,98025,98026,98031,98036,98044,98049],{"__ignoreMap":47},[52,98027,98028],{"class":54,"line":55},[52,98029,98030],{"class":94},"#random.random()\n",[52,98032,98033],{"class":54,"line":66},[52,98034,98035],{"class":94},"#确定随机种子,就是每次运行结果是相同的\n",[52,98037,98038,98040,98042],{"class":54,"line":83},[52,98039,97257],{"class":79},[52,98041,692],{"class":308},[52,98043,708],{"class":79},[52,98045,98046],{"class":54,"line":91},[52,98047,98048],{"class":79},"np.random.random()\n",[52,98050,98051],{"class":54,"line":98},[52,98052,98053],{"class":94},"#生成一个随机的数目\n",[14,98055,98056],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,98058,98059],{},"可以指定数组形状 size",[14,98061,98062],{},"①生成一维数组",[42,98064,98066],{"className":33028,"code":98065,"language":33030,"meta":47,"style":47},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[49,98067,98068,98073,98086,98091,98107],{"__ignoreMap":47},[52,98069,98070],{"class":54,"line":55},[52,98071,98072],{"class":94},"#random.random(size())\n",[52,98074,98075,98078,98080,98082,98084],{"class":54,"line":66},[52,98076,98077],{"class":79},"np.random.random(",[52,98079,34146],{"class":1223},[52,98081,292],{"class":58},[52,98083,1805],{"class":308},[52,98085,708],{"class":79},[52,98087,98088],{"class":54,"line":83},[52,98089,98090],{"class":94},"#生成一位的五个元素\n",[52,98092,98093,98095,98097,98099,98101,98103,98105],{"class":54,"line":91},[52,98094,3451],{"class":79},[52,98096,292],{"class":58},[52,98098,98077],{"class":79},[52,98100,34146],{"class":1223},[52,98102,292],{"class":58},[52,98104,3504],{"class":308},[52,98106,708],{"class":79},[52,98108,98109,98112],{"class":54,"line":98},[52,98110,98111],{"class":79},"a.shape ",[52,98113,98114],{"class":94},"#输出数组形状\n",[14,98116,98117],{},"②生成二维数组",[42,98119,98121],{"className":33028,"code":98120,"language":33030,"meta":47,"style":47},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[49,98122,98123,98127,98149],{"__ignoreMap":47},[52,98124,98125],{"class":54,"line":55},[52,98126,95951],{"class":94},[52,98128,98129,98131,98133,98135,98137,98139,98141,98143,98145,98147],{"class":54,"line":66},[52,98130,95956],{"class":79},[52,98132,292],{"class":58},[52,98134,98077],{"class":79},[52,98136,34146],{"class":1223},[52,98138,292],{"class":58},[52,98140,1216],{"class":79},[52,98142,3504],{"class":308},[52,98144,389],{"class":79},[52,98146,1805],{"class":308},[52,98148,33147],{"class":79},[52,98150,98151],{"class":54,"line":83},[52,98152,98153],{"class":94},"#生成四行五列的数组\n",[14,98155,98156],{},"③生成三维数组",[42,98158,98160],{"className":33028,"code":98159,"language":33030,"meta":47,"style":47},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[49,98161,98162,98167,98194],{"__ignoreMap":47},[52,98163,98164],{"class":54,"line":55},[52,98165,98166],{"class":94},"#三维数组\n",[52,98168,98169,98172,98174,98176,98178,98180,98182,98184,98186,98188,98190,98192],{"class":54,"line":66},[52,98170,98171],{"class":79},"aaa",[52,98173,292],{"class":58},[52,98175,98077],{"class":79},[52,98177,34146],{"class":1223},[52,98179,292],{"class":58},[52,98181,1216],{"class":79},[52,98183,564],{"class":308},[52,98185,389],{"class":79},[52,98187,2313],{"class":308},[52,98189,389],{"class":79},[52,98191,3504],{"class":308},[52,98193,33147],{"class":79},[52,98195,98196],{"class":54,"line":83},[52,98197,98198],{"class":79},"aaa.shape\n",[3195,98200,98202],{"id":98201},"_222-randint语句","2.2.2 randint语句",[42,98204,98206],{"className":33028,"code":98205,"language":33030,"meta":47,"style":47},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[49,98207,98208,98213],{"__ignoreMap":47},[52,98209,98210],{"class":54,"line":55},[52,98211,98212],{"class":94},"#生成随机的整数 random.randint(low,high,size)\n",[52,98214,98215,98217,98219,98221],{"class":54,"line":66},[52,98216,95764],{"class":79},[52,98218,1805],{"class":308},[52,98220,16362],{"class":79},[52,98222,98223],{"class":94},"#0~5中的随机一个数\n",[14,98225,98062],{},[42,98227,98229],{"className":33028,"code":98228,"language":33030,"meta":47,"style":47},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[49,98230,98231,98236,98258],{"__ignoreMap":47},[52,98232,98233],{"class":54,"line":55},[52,98234,98235],{"class":94},"#一维\n",[52,98237,98238,98240,98242,98244,98246,98248,98250,98252,98254,98256],{"class":54,"line":66},[52,98239,95764],{"class":79},[52,98241,629],{"class":308},[52,98243,389],{"class":79},[52,98245,3673],{"class":308},[52,98247,389],{"class":79},[52,98249,34146],{"class":1223},[52,98251,292],{"class":58},[52,98253,1216],{"class":79},[52,98255,3649],{"class":308},[52,98257,33147],{"class":79},[52,98259,98260],{"class":54,"line":83},[52,98261,98262],{"class":94},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,98264,98117],{},[14,98266,98267],{},[4509,98268],{"alt":47,"src":98269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,98271,98156],{},[14,98273,98274],{},[4509,98275],{"alt":47,"src":98276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[3195,98278,98280],{"id":98279},"_222-rand语句","2.2.2 rand语句",[14,98282,98283],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[42,98285,98287],{"className":33028,"code":98286,"language":33030,"meta":47,"style":47},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[49,98288,98289,98302,98307],{"__ignoreMap":47},[52,98290,98291,98294,98296,98298,98300],{"class":54,"line":55},[52,98292,98293],{"class":79},"np.random.rand(",[52,98295,591],{"class":308},[52,98297,389],{"class":79},[52,98299,3649],{"class":308},[52,98301,708],{"class":79},[52,98303,98304],{"class":54,"line":66},[52,98305,98306],{"class":94},"#第一个参数100：行数，表示有100个样本\n",[52,98308,98309],{"class":54,"line":83},[52,98310,98311],{"class":94},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[18,98313,98315],{"id":98314},"_23-arange创建数组","2.3 arange()创建数组",[3195,98317,98319],{"id":98318},"_231-函数语句","2.3.1 函数语句",[42,98321,98323],{"className":33028,"code":98322,"language":33030,"meta":47,"style":47},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[49,98324,98325,98339,98344,98349,98354,98359,98364,98369],{"__ignoreMap":47},[52,98326,98327,98330,98332,98334,98337],{"class":54,"line":55},[52,98328,98329],{"class":79},"numpy.arange([start,] stop[, step], ",[52,98331,96150],{"class":1223},[52,98333,292],{"class":58},[52,98335,98336],{"class":308},"None",[52,98338,708],{"class":79},[52,98340,98341],{"class":54,"line":66},[52,98342,98343],{"class":94},"#参数\n",[52,98345,98346],{"class":54,"line":83},[52,98347,98348],{"class":62},"\"\"\"\n",[52,98350,98351],{"class":54,"line":91},[52,98352,98353],{"class":62},"start:起始值，可选，默认从 0 开始。\n",[52,98355,98356],{"class":54,"line":98},[52,98357,98358],{"class":62},"stop:结束值（不包含该值）。\n",[52,98360,98361],{"class":54,"line":107},[52,98362,98363],{"class":62},"step:步长，可选，默认是 1。可以为浮点数。\n",[52,98365,98366],{"class":54,"line":113},[52,98367,98368],{"class":62},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[52,98370,98371],{"class":54,"line":119},[52,98372,98348],{"class":62},[3195,98374,98376],{"id":98375},"_232-实例","2.3.2 实例",[42,98378,98380],{"className":33028,"code":98379,"language":33030,"meta":47,"style":47},"#创建一维数组\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",[49,98381,98382,98386,98410,98415,98420,98424,98447,98451,98455,98460,98465],{"__ignoreMap":47},[52,98383,98384],{"class":54,"line":55},[52,98385,95755],{"class":94},[52,98387,98388,98390,98392,98394,98396,98398,98400,98402,98404,98406,98408],{"class":54,"line":66},[52,98389,95652],{"class":79},[52,98391,629],{"class":308},[52,98393,389],{"class":79},[52,98395,2468],{"class":308},[52,98397,389],{"class":79},[52,98399,629],{"class":308},[52,98401,389],{"class":79},[52,98403,96150],{"class":1223},[52,98405,292],{"class":58},[52,98407,242],{"class":308},[52,98409,708],{"class":79},[52,98411,98412],{"class":54,"line":83},[52,98413,98414],{"class":94},"#输出结果：\n",[52,98416,98417],{"class":54,"line":91},[52,98418,98419],{"class":94},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[52,98421,98422],{"class":54,"line":98},[52,98423,96597],{"class":94},[52,98425,98426,98429,98431,98433,98435,98438,98440,98442,98444],{"class":54,"line":107},[52,98427,98428],{"class":79},"np.array([np.arange(",[52,98430,629],{"class":308},[52,98432,389],{"class":79},[52,98434,3504],{"class":308},[52,98436,98437],{"class":79},"),np.arange(",[52,98439,3504],{"class":308},[52,98441,389],{"class":79},[52,98443,3575],{"class":308},[52,98445,98446],{"class":79},")])\n",[52,98448,98449],{"class":54,"line":113},[52,98450,96214],{"class":94},[52,98452,98453],{"class":54,"line":119},[52,98454,98348],{"class":62},[52,98456,98457],{"class":54,"line":126},[52,98458,98459],{"class":62},"array([[1, 2, 3],\n",[52,98461,98462],{"class":54,"line":132},[52,98463,98464],{"class":62},"       [4, 5, 6]])\n",[52,98466,98467],{"class":54,"line":138},[52,98468,98348],{"class":62},[18,98470,98472],{"id":98471},"_24-生态分布","2.4 生态分布",[3195,98474,98476],{"id":98475},"_241-标准正态分布","2.4.1 标准正态分布",[14,98478,98479],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,98481,98482],{},[4509,98483],{"alt":47,"src":98484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[3195,98486,98488],{"id":98487},"_242-常规正态分布","2.4.2 常规正态分布",[42,98490,98492],{"className":33028,"code":98491,"language":33030,"meta":47,"style":47},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[49,98493,98494,98499,98504,98509],{"__ignoreMap":47},[52,98495,98496],{"class":54,"line":55},[52,98497,98498],{"class":79},"random.normal(loc,scale,size)也可以生成正态分布\n",[52,98500,98501],{"class":54,"line":66},[52,98502,98503],{"class":94},"#loc:期望\n",[52,98505,98506],{"class":54,"line":83},[52,98507,98508],{"class":94},"#scale:方差\n",[52,98510,98511],{"class":54,"line":91},[52,98512,98513],{"class":94},"#size:用于确定是几维的数列\n",[14,98515,98516],{},[4509,98517],{"alt":47,"src":98518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[18,98520,98522],{"id":98521},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,98524,98525],{},"ndim:秩，维度个数",[14,98527,98528],{},"size:数组元素的个数",[14,98530,98531],{},"shape:数组的形状",[14,98533,98534],{},"dtype:数组元素的类型",[14,98536,98537],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,98539,98540],{},"他们都是属性，通过数组.属性的形式来确定",[14,98542,98543],{},"如果需要输出多个可以通过以下方式：",[42,98545,98547],{"className":33028,"code":98546,"language":33030,"meta":47,"style":47},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[49,98548,98549],{"__ignoreMap":47},[52,98550,98551,98553],{"class":54,"line":55},[52,98552,33065],{"class":308},[52,98554,98555],{"class":79},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[18,98557,98559],{"id":98558},"_26-其他方式创建数组","2.6 其他方式创建数组",[3195,98561,98563],{"id":98562},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,98565,98566],{},"①创建一维数组",[42,98568,98570],{"className":33028,"code":98569,"language":33030,"meta":47,"style":47},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[49,98571,98572,98581,98585,98590,98595],{"__ignoreMap":47},[52,98573,98574,98577,98579],{"class":54,"line":55},[52,98575,98576],{"class":79},"np.zeros(",[52,98578,3649],{"class":308},[52,98580,708],{"class":79},[52,98582,98583],{"class":54,"line":66},[52,98584,98348],{"class":62},[52,98586,98587],{"class":54,"line":83},[52,98588,98589],{"class":62},"输出结果：\n",[52,98591,98592],{"class":54,"line":91},[52,98593,98594],{"class":62},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[52,98596,98597],{"class":54,"line":98},[52,98598,98348],{"class":62},[14,98600,98601],{},"上方代码等价于：",[42,98603,98605],{"className":33028,"code":98604,"language":33030,"meta":47,"style":47},"np.zeros(shape=(10))#创建10个元素的0数组\n",[49,98606,98607],{"__ignoreMap":47},[52,98608,98609,98611,98614,98616,98618,98620,98622],{"class":54,"line":55},[52,98610,98576],{"class":79},[52,98612,98613],{"class":1223},"shape",[52,98615,292],{"class":58},[52,98617,1216],{"class":79},[52,98619,3649],{"class":308},[52,98621,85421],{"class":79},[52,98623,98624],{"class":94},"#创建10个元素的0数组\n",[14,98626,98627],{},"也可以指定类型",[42,98629,98631],{"className":33028,"code":98630,"language":33030,"meta":47,"style":47},"#指定类型\nnp.zeros(5,dtype=int)\n",[49,98632,98633,98638],{"__ignoreMap":47},[52,98634,98635],{"class":54,"line":55},[52,98636,98637],{"class":94},"#指定类型\n",[52,98639,98640,98642,98644,98646,98648,98650,98652],{"class":54,"line":66},[52,98641,98576],{"class":79},[52,98643,1805],{"class":308},[52,98645,389],{"class":79},[52,98647,96150],{"class":1223},[52,98649,292],{"class":58},[52,98651,242],{"class":308},[52,98653,708],{"class":79},[14,98655,98656],{},"②创建二维数组",[42,98658,98660],{"className":33028,"code":98659,"language":33030,"meta":47,"style":47},"np.zeros((3,4),dtype=int)\n",[49,98661,98662],{"__ignoreMap":47},[52,98663,98664,98667,98669,98671,98673,98675,98677,98679,98681],{"class":54,"line":55},[52,98665,98666],{"class":79},"np.zeros((",[52,98668,2313],{"class":308},[52,98670,389],{"class":79},[52,98672,3504],{"class":308},[52,98674,44906],{"class":79},[52,98676,96150],{"class":1223},[52,98678,292],{"class":58},[52,98680,242],{"class":308},[52,98682,708],{"class":79},[14,98684,98685],{},"③创建三维数组",[42,98687,98689],{"className":33028,"code":98688,"language":33030,"meta":47,"style":47},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[49,98690,98691,98696],{"__ignoreMap":47},[52,98692,98693],{"class":54,"line":55},[52,98694,98695],{"class":94},"#创建三维数组\n",[52,98697,98698,98700,98702,98704,98706,98708,98710,98712,98714,98716,98718],{"class":54,"line":66},[52,98699,98666],{"class":79},[52,98701,2313],{"class":308},[52,98703,389],{"class":79},[52,98705,3504],{"class":308},[52,98707,389],{"class":79},[52,98709,1805],{"class":308},[52,98711,44906],{"class":79},[52,98713,96150],{"class":1223},[52,98715,292],{"class":58},[52,98717,242],{"class":308},[52,98719,708],{"class":79},[14,98721,98722],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[42,98724,98726],{"className":33028,"code":98725,"language":33030,"meta":47,"style":47},"#使用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",[49,98727,98728,98733,98748,98753,98758,98780],{"__ignoreMap":47},[52,98729,98730],{"class":54,"line":55},[52,98731,98732],{"class":94},"#使用zeros_like将创建的一维数组变成全0的数组\n",[52,98734,98735,98737,98739,98741,98743,98745],{"class":54,"line":66},[52,98736,3451],{"class":79},[52,98738,292],{"class":58},[52,98740,95652],{"class":79},[52,98742,3504],{"class":308},[52,98744,2283],{"class":79},[52,98746,98747],{"class":94},"#这个得到的结果：一维数组0，1，2，3\n",[52,98749,98750],{"class":54,"line":83},[52,98751,98752],{"class":79},"np.zeros_like(a)\n",[52,98754,98755],{"class":54,"line":91},[52,98756,98757],{"class":94},"#使用zeros_like将创建的二维数组变成全0的数组\n",[52,98759,98760,98762,98764,98766,98768,98770,98772,98774,98776,98778],{"class":54,"line":98},[52,98761,95956],{"class":79},[52,98763,292],{"class":58},[52,98765,98077],{"class":79},[52,98767,34146],{"class":1223},[52,98769,292],{"class":58},[52,98771,1216],{"class":79},[52,98773,3504],{"class":308},[52,98775,389],{"class":79},[52,98777,1805],{"class":308},[52,98779,33147],{"class":79},[52,98781,98782],{"class":54,"line":107},[52,98783,98784],{"class":79},"np.zeros_like(aa)\n",[3195,98786,98788],{"id":98787},"_262-ones创建数组","2.6.2 ones()创建数组",[14,98790,98791],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[3195,98793,98795],{"id":98794},"_263-empty创建数组","2.6.3 empty()创建数组",[14,98797,98798],{},"①empty()用法",[42,98800,98802],{"className":33028,"code":98801,"language":33030,"meta":47,"style":47},"numpy.empty(shape,dtype=float,order='c')\n",[49,98803,98804],{"__ignoreMap":47},[52,98805,98806,98809,98811,98813,98815,98817,98819,98821,98823],{"class":54,"line":55},[52,98807,98808],{"class":79},"numpy.empty(shape,",[52,98810,96150],{"class":1223},[52,98812,292],{"class":58},[52,98814,3262],{"class":308},[52,98816,389],{"class":79},[52,98818,97947],{"class":1223},[52,98820,292],{"class":58},[52,98822,78678],{"class":62},[52,98824,708],{"class":79},[14,98826,98827],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,98829,98830],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,98832,98833],{},[4509,98834],{"alt":47,"src":98835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,98837,98838],{},"②empty()用法",[42,98840,98842],{"className":33028,"code":98841,"language":33030,"meta":47,"style":47},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[49,98843,98844,98865,98877,98898,98903],{"__ignoreMap":47},[52,98845,98846,98848,98850,98853,98855,98857,98859,98861,98863],{"class":54,"line":55},[52,98847,4035],{"class":79},[52,98849,292],{"class":58},[52,98851,98852],{"class":79},"np.empty(",[52,98854,3649],{"class":308},[52,98856,389],{"class":79},[52,98858,96150],{"class":1223},[52,98860,292],{"class":58},[52,98862,242],{"class":308},[52,98864,708],{"class":79},[52,98866,98867,98869,98871,98873,98875],{"class":54,"line":66},[52,98868,4010],{"class":79},[52,98870,292],{"class":58},[52,98872,95652],{"class":79},[52,98874,1805],{"class":308},[52,98876,708],{"class":79},[52,98878,98879,98882,98884,98887,98889,98891,98894,98896],{"class":54,"line":83},[52,98880,98881],{"class":79},"np.add(",[52,98883,564],{"class":308},[52,98885,98886],{"class":79},",x,",[52,98888,95704],{"class":1223},[52,98890,292],{"class":58},[52,98892,98893],{"class":79},"y[:",[52,98895,1805],{"class":308},[52,98897,7629],{"class":79},[52,98899,98900],{"class":54,"line":91},[52,98901,98902],{"class":94},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[52,98904,98905],{"class":54,"line":98},[52,98906,98907],{"class":79},"y\n",[14,98909,14162],{},[14,98911,98912],{},[4509,98913],{"alt":47,"src":98914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[42,98916,98918],{"className":33028,"code":98917,"language":33030,"meta":47,"style":47},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[49,98919,98920,98936,98956,98971],{"__ignoreMap":47},[52,98921,98922,98924,98926,98928,98930,98932,98934],{"class":54,"line":55},[52,98923,4010],{"class":79},[52,98925,292],{"class":58},[52,98927,95652],{"class":79},[52,98929,629],{"class":308},[52,98931,389],{"class":79},[52,98933,1125],{"class":308},[52,98935,708],{"class":79},[52,98937,98938,98940,98942,98944,98946,98948,98950,98952,98954],{"class":54,"line":66},[52,98939,4035],{"class":79},[52,98941,292],{"class":58},[52,98943,98852],{"class":79},[52,98945,1805],{"class":308},[52,98947,389],{"class":79},[52,98949,96150],{"class":1223},[52,98951,292],{"class":58},[52,98953,242],{"class":308},[52,98955,708],{"class":79},[52,98957,98958,98961,98963,98965,98967,98969],{"class":54,"line":83},[52,98959,98960],{"class":79},"np.add(x,",[52,98962,564],{"class":308},[52,98964,389],{"class":79},[52,98966,95704],{"class":1223},[52,98968,292],{"class":58},[52,98970,96099],{"class":79},[52,98972,98973],{"class":54,"line":91},[52,98974,98975],{"class":94},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,98977,98978],{},"③empty_like()",[14,98980,98981],{},[2389,98982,98983,98984,98989],{},"创建一个",[2389,98985,98986],{},[2389,98987,98988],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,98991,98992,98995],{},[49,98993,98994],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,98997,98998],{},[4509,98999],{"alt":47,"src":99000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[3195,99002,99004],{"id":99003},"_264-用法","2.6.4 ？？用法",[14,99006,99007],{},"当想查看一个函数的参数时，可以通过？？来实现",[42,99009,99011],{"className":33028,"code":99010,"language":33030,"meta":47,"style":47},"np.full??\n",[49,99012,99013],{"__ignoreMap":47},[52,99014,99015,99018],{"class":54,"line":55},[52,99016,99017],{"class":79},"np.full",[52,99019,99020],{"class":80053},"??\n",[3195,99022,99024],{"id":99023},"_265-full创建数组","2.6.5 full()创建数组",[42,99026,99028],{"className":33028,"code":99027,"language":33030,"meta":47,"style":47},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[49,99029,99030,99035],{"__ignoreMap":47},[52,99031,99032],{"class":54,"line":55},[52,99033,99034],{"class":79},"full(shape,fill_value)\n",[52,99036,99037],{"class":54,"line":66},[52,99038,99039],{"class":79},"创建全为某个指定值的数组\n",[14,99041,97180],{},[42,99043,99045],{"className":33028,"code":99044,"language":33030,"meta":47,"style":47},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[49,99046,99047,99052],{"__ignoreMap":47},[52,99048,99049],{"class":54,"line":55},[52,99050,99051],{"class":94},"#创建一个一维数组,以20进行填充\n",[52,99053,99054,99057,99059,99061,99063],{"class":54,"line":66},[52,99055,99056],{"class":79},"np.full(",[52,99058,3649],{"class":308},[52,99060,389],{"class":79},[52,99062,444],{"class":308},[52,99064,708],{"class":79},[14,99066,95941],{},[42,99068,99070],{"className":33028,"code":99069,"language":33030,"meta":47,"style":47},"#创建二维数组\nnp.full((3,5),11)\n",[49,99071,99072,99076],{"__ignoreMap":47},[52,99073,99074],{"class":54,"line":55},[52,99075,96597],{"class":94},[52,99077,99078,99081,99083,99085,99087,99089,99091],{"class":54,"line":66},[52,99079,99080],{"class":79},"np.full((",[52,99082,2313],{"class":308},[52,99084,389],{"class":79},[52,99086,1805],{"class":308},[52,99088,44906],{"class":79},[52,99090,3673],{"class":308},[52,99092,708],{"class":79},[14,99094,99095],{},"③full_like用法",[14,99097,99098],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,99100,99101],{},"这里是指定填充而已",[42,99103,99105],{"className":33028,"code":99104,"language":33030,"meta":47,"style":47},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[49,99106,99107,99112,99136,99141],{"__ignoreMap":47},[52,99108,99109],{"class":54,"line":55},[52,99110,99111],{"class":94},"#创建一个指定形状数组\n",[52,99113,99114,99116,99118,99120,99122,99124,99126,99128,99130,99132,99134],{"class":54,"line":66},[52,99115,3451],{"class":79},[52,99117,292],{"class":58},[52,99119,95652],{"class":79},[52,99121,629],{"class":308},[52,99123,389],{"class":79},[52,99125,3534],{"class":308},[52,99127,95657],{"class":79},[52,99129,3504],{"class":308},[52,99131,389],{"class":79},[52,99133,3624],{"class":308},[52,99135,708],{"class":79},[52,99137,99138],{"class":54,"line":83},[52,99139,99140],{"class":94},"#进行指定填充\n",[52,99142,99143,99146,99148],{"class":54,"line":91},[52,99144,99145],{"class":79},"np.full_like(a,",[52,99147,3649],{"class":308},[52,99149,708],{"class":79},[14,99151,14162],{},[14,99153,99154],{},[4509,99155],{"alt":47,"src":99156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[3195,99158,99160],{"id":99159},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[24646,99162,99164],{"id":99163},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[42,99166,99168],{"className":33028,"code":99167,"language":33030,"meta":47,"style":47},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[49,99169,99170,99187],{"__ignoreMap":47},[52,99171,99172,99175,99177,99179,99181,99183,99185],{"class":54,"line":55},[52,99173,99174],{"class":79},"np.eye(",[52,99176,3504],{"class":308},[52,99178,389],{"class":79},[52,99180,96150],{"class":1223},[52,99182,292],{"class":58},[52,99184,242],{"class":308},[52,99186,708],{"class":79},[52,99188,99189],{"class":54,"line":66},[52,99190,99191],{"class":94},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24646,99193,99195],{"id":99194},"_2662-法2identity","2.6.6.2 法2：identity()",[42,99197,99199],{"className":33028,"code":99198,"language":33030,"meta":47,"style":47},"#identity()\nnp.identity(5,dtype=int)\n",[49,99200,99201,99206],{"__ignoreMap":47},[52,99202,99203],{"class":54,"line":55},[52,99204,99205],{"class":94},"#identity()\n",[52,99207,99208,99211,99213,99215,99217,99219,99221],{"class":54,"line":66},[52,99209,99210],{"class":79},"np.identity(",[52,99212,1805],{"class":308},[52,99214,389],{"class":79},[52,99216,96150],{"class":1223},[52,99218,292],{"class":58},[52,99220,242],{"class":308},[52,99222,708],{"class":79},[14,99224,99225],{},"两个函数是有区别的",[14,99227,99228],{},[4509,99229],{"alt":47,"src":99230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,99232,99233],{},[4509,99234],{"alt":47,"src":99235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[42,99237,99239],{"className":33028,"code":99238,"language":33030,"meta":47,"style":47},"# 创建一个 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",[49,99240,99241,99246,99258,99263,99268,99273,99278,99282,99287,99307,99311,99316,99321],{"__ignoreMap":47},[52,99242,99243],{"class":54,"line":55},[52,99244,99245],{"class":94},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[52,99247,99248,99250,99252,99254,99256],{"class":54,"line":66},[52,99249,99174],{"class":79},[52,99251,2313],{"class":308},[52,99253,15083],{"class":79},[52,99255,3504],{"class":308},[52,99257,708],{"class":79},[52,99259,99260],{"class":54,"line":83},[52,99261,99262],{"class":94},"# 输出:\n",[52,99264,99265],{"class":54,"line":91},[52,99266,99267],{"class":94},"# [[1. 0. 0. 0.]\n",[52,99269,99270],{"class":54,"line":98},[52,99271,99272],{"class":94},"#  [0. 1. 0. 0.]\n",[52,99274,99275],{"class":54,"line":107},[52,99276,99277],{"class":94},"#  [0. 0. 1. 0.]]\n",[52,99279,99280],{"class":54,"line":113},[52,99281,123],{"emptyLinePlaceholder":122},[52,99283,99284],{"class":54,"line":119},[52,99285,99286],{"class":94},"# 对角线向上偏移1\n",[52,99288,99289,99291,99293,99295,99297,99299,99301,99303,99305],{"class":54,"line":126},[52,99290,99174],{"class":79},[52,99292,2313],{"class":308},[52,99294,15083],{"class":79},[52,99296,3504],{"class":308},[52,99298,15083],{"class":79},[52,99300,3693],{"class":1223},[52,99302,292],{"class":58},[52,99304,629],{"class":308},[52,99306,708],{"class":79},[52,99308,99309],{"class":54,"line":132},[52,99310,99262],{"class":94},[52,99312,99313],{"class":54,"line":138},[52,99314,99315],{"class":94},"# [[0. 1. 0. 0.]\n",[52,99317,99318],{"class":54,"line":144},[52,99319,99320],{"class":94},"#  [0. 0. 1. 0.]\n",[52,99322,99323],{"class":54,"line":153},[52,99324,99325],{"class":94},"#  [0. 0. 0. 1.]]\n",[3195,99327,99329],{"id":99328},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[42,99331,99333],{"className":33028,"code":99332,"language":33030,"meta":47,"style":47},"#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",[49,99334,99335,99340,99344,99349,99354,99359,99364,99369,99374,99379,99384],{"__ignoreMap":47},[52,99336,99337],{"class":54,"line":55},[52,99338,99339],{"class":94},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[52,99341,99342],{"class":54,"line":66},[52,99343,98348],{"class":62},[52,99345,99346],{"class":54,"line":83},[52,99347,99348],{"class":62},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[52,99350,99351],{"class":54,"line":91},[52,99352,99353],{"class":62},"参数介绍：\n",[52,99355,99356],{"class":54,"line":98},[52,99357,99358],{"class":62},"start：序列的起始值\n",[52,99360,99361],{"class":54,"line":107},[52,99362,99363],{"class":62},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[52,99365,99366],{"class":54,"line":113},[52,99367,99368],{"class":62},"num：要生长的等步长的样本数量，默认为50\n",[52,99370,99371],{"class":54,"line":119},[52,99372,99373],{"class":62},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[52,99375,99376],{"class":54,"line":126},[52,99377,99378],{"class":62},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[52,99380,99381],{"class":54,"line":132},[52,99382,99383],{"class":62},"dtype：ndarry的数据类型\n",[52,99385,99386],{"class":54,"line":138},[52,99387,98348],{"class":62},[14,99389,99390],{},[4509,99391],{"alt":47,"src":99392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,99394,99395],{},"这里num=是可以省略的",[14,99397,99398],{},"也就是下方两行代码结果是一模一样的",[42,99400,99402],{"className":33028,"code":99401,"language":33030,"meta":47,"style":47},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[49,99403,99404,99421],{"__ignoreMap":47},[52,99405,99406,99409,99411,99413,99415,99417,99419],{"class":54,"line":55},[52,99407,99408],{"class":79},"np.linspace(",[52,99410,629],{"class":308},[52,99412,389],{"class":79},[52,99414,1805],{"class":308},[52,99416,389],{"class":79},[52,99418,1805],{"class":308},[52,99420,708],{"class":79},[52,99422,99423,99425,99427,99429,99431,99433,99435,99437,99439],{"class":54,"line":66},[52,99424,99408],{"class":79},[52,99426,629],{"class":308},[52,99428,389],{"class":79},[52,99430,1805],{"class":308},[52,99432,389],{"class":79},[52,99434,4701],{"class":1223},[52,99436,292],{"class":58},[52,99438,1805],{"class":308},[52,99440,708],{"class":79},[3195,99442,99444],{"id":99443},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[42,99446,99448],{"className":33028,"code":99447,"language":33030,"meta":47,"style":47},"#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",[49,99449,99450,99455,99459,99464,99469,99474,99479,99483,99488,99493,99497],{"__ignoreMap":47},[52,99451,99452],{"class":54,"line":55},[52,99453,99454],{"class":94},"#logspace函数用于创建一个等比数列，格式如下：\n",[52,99456,99457],{"class":54,"line":66},[52,99458,98348],{"class":62},[52,99460,99461],{"class":54,"line":83},[52,99462,99463],{"class":62},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[52,99465,99466],{"class":54,"line":91},[52,99467,99468],{"class":62},"参数为：\n",[52,99470,99471],{"class":54,"line":98},[52,99472,99473],{"class":62},"start:序列的起始位置为：base**start\n",[52,99475,99476],{"class":54,"line":107},[52,99477,99478],{"class":62},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[52,99480,99481],{"class":54,"line":113},[52,99482,99368],{"class":62},[52,99484,99485],{"class":54,"line":119},[52,99486,99487],{"class":62},"endpoint：是否包含 stop 这个值，默认是 True\n",[52,99489,99490],{"class":54,"line":126},[52,99491,99492],{"class":62},"base：对数的底数，默认是 10（常见对数）\n",[52,99494,99495],{"class":54,"line":132},[52,99496,99383],{"class":62},[52,99498,99499],{"class":54,"line":138},[52,99500,98348],{"class":62},[14,99502,99503],{},[4509,99504],{"alt":47,"src":99505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,99507,99508],{},"logspace()函数中的num参数也是可以不写num=的",[14,99510,99511],{},"endpoint是不可以省略的",[3141,99513,99514],{},"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":47,"searchDepth":66,"depth":66,"links":99516},[99517,99521,99526,99530,99534,99535],{"id":97906,"depth":66,"text":97907,"children":99518},[99519,99520],{"id":97910,"depth":83,"text":97911},{"id":97983,"depth":83,"text":97984},{"id":98015,"depth":66,"text":98016,"children":99522},[99523,99524,99525],{"id":98019,"depth":83,"text":98020},{"id":98201,"depth":83,"text":98202},{"id":98279,"depth":83,"text":98280},{"id":98314,"depth":66,"text":98315,"children":99527},[99528,99529],{"id":98318,"depth":83,"text":98319},{"id":98375,"depth":83,"text":98376},{"id":98471,"depth":66,"text":98472,"children":99531},[99532,99533],{"id":98475,"depth":83,"text":98476},{"id":98487,"depth":83,"text":98488},{"id":98521,"depth":66,"text":98522},{"id":98558,"depth":66,"text":98559,"children":99536},[99537,99538,99539,99540,99541,99542,99543,99544],{"id":98562,"depth":83,"text":98563},{"id":98787,"depth":83,"text":98788},{"id":98794,"depth":83,"text":98795},{"id":99003,"depth":83,"text":99004},{"id":99023,"depth":83,"text":99024},{"id":99159,"depth":83,"text":99160},{"id":99328,"depth":83,"text":99329},{"id":99443,"depth":83,"text":99444},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97898,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":99551,"title":99552,"body":99553,"description":26025,"extension":3153,"meta":99646,"navigation":122,"path":99647,"seo":99648,"stem":99649,"__hash__":99650},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":99554,"toc":99644},[99555,99558,99561,99564,99567,99570,99573,99576,99579,99582,99585,99588,99590,99593,99596,99601,99604,99607,99641],[10,99556,99552],{"id":99557},"_20魔法命令mprun",[14,99559,99560],{},"逐行分析数据内存的使用情况",[14,99562,99563],{},"语法格式：",[14,99565,99566],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,99568,99569],{},"分析结果列如下：",[14,99571,99572],{},"Line行号",[14,99574,99575],{},"Mem usage内存使用大小",[14,99577,99578],{},"increment内存增量",[14,99580,99581],{},"Line content代码内容",[14,99583,99584],{},"补充说明：",[14,99586,99587],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,99589,97853],{},[14,99591,99592],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,99594,99595],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,99597,99598],{},[4509,99599],{"alt":47,"src":99600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,99602,99603],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,99605,99606],{},"这时候需要重新加载模块",[42,99608,99610],{"className":33028,"code":99609,"language":33030,"meta":47,"style":47},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[49,99611,99612,99617,99624,99629],{"__ignoreMap":47},[52,99613,99614],{"class":54,"line":55},[52,99615,99616],{"class":94},"#重新加载模块\n",[52,99618,99619,99621],{"class":54,"line":66},[52,99620,33042],{"class":58},[52,99622,99623],{"class":79}," importlib\n",[52,99625,99626],{"class":54,"line":83},[52,99627,99628],{"class":79},"importlib.reload(mprun_test)\n",[52,99630,99631,99633,99636,99638],{"class":54,"line":91},[52,99632,1998],{"class":58},[52,99634,99635],{"class":79},"mprun ",[52,99637,2642],{"class":58},[52,99639,99640],{"class":79},"f mprun_test.fun_test mprun_test.fun_test()\n",[3141,99642,99643],{},"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":47,"searchDepth":66,"depth":66,"links":99645},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":99552,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":99652,"title":99653,"body":99654,"description":26025,"extension":3153,"meta":99671,"navigation":122,"path":99672,"seo":99673,"stem":99674,"__hash__":99675},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":99655,"toc":99669},[99656,99659,99664],[10,99657,99653],{"id":99658},"_3一维数组的索引和切片",[14,99660,99661],{},[4509,99662],{"alt":47,"src":99663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,99665,99666],{},[4509,99667],{"alt":47,"src":99668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":47,"searchDepth":66,"depth":66,"links":99670},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":99653,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99677,"title":99678,"body":99679,"description":26025,"extension":3153,"meta":100162,"navigation":122,"path":100163,"seo":100164,"stem":100165,"__hash__":100166},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99680,"toc":100160},[99681,99684,99687,99692,99725,99728,99766,99769,99803,99806,99911,99914,99951,99954,100055,100058,100109,100112,100154,100157],[10,99682,99678],{"id":99683},"_4二维数组的索引与切片",[14,99685,99686],{},"①获取指定单个元素",[14,99688,99689],{},[4509,99690],{"alt":47,"src":99691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[42,99693,99695],{"className":33028,"code":99694,"language":33030,"meta":47,"style":47},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[49,99696,99697,99702,99707,99712],{"__ignoreMap":47},[52,99698,99699],{"class":54,"line":55},[52,99700,99701],{"class":94},"#获取元素9\n",[52,99703,99704],{"class":54,"line":66},[52,99705,99706],{"class":94},"#先获取所在行，再获取所在列\n",[52,99708,99709],{"class":54,"line":83},[52,99710,99711],{"class":94},"#数组[行索引号，列索引号]\n",[52,99713,99714,99717,99719,99721,99723],{"class":54,"line":91},[52,99715,99716],{"class":79},"a[",[52,99718,629],{"class":308},[52,99720,389],{"class":79},[52,99722,564],{"class":308},[52,99724,35896],{"class":79},[14,99726,99727],{},"②获取整行元素",[42,99729,99731],{"className":33028,"code":99730,"language":33030,"meta":47,"style":47},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[49,99732,99733,99738,99743,99751,99756],{"__ignoreMap":47},[52,99734,99735],{"class":54,"line":55},[52,99736,99737],{"class":94},"#获取整行 数组[行索引号]\n",[52,99739,99740],{"class":54,"line":66},[52,99741,99742],{"class":94},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[52,99744,99745,99747,99749],{"class":54,"line":83},[52,99746,99716],{"class":79},[52,99748,564],{"class":308},[52,99750,35896],{"class":79},[52,99752,99753],{"class":54,"line":91},[52,99754,99755],{"class":94},"#也可以负索引获取一行\n",[52,99757,99758,99760,99762,99764],{"class":54,"line":98},[52,99759,99716],{"class":79},[52,99761,2642],{"class":58},[52,99763,629],{"class":308},[52,99765,35896],{"class":79},[14,99767,99768],{},"③获取整列元素",[42,99770,99772],{"className":33028,"code":99771,"language":33030,"meta":47,"style":47},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[49,99773,99774,99779,99788,99793],{"__ignoreMap":47},[52,99775,99776],{"class":54,"line":55},[52,99777,99778],{"class":94},"#获取整列 数组名[:,列索引]\n",[52,99780,99781,99784,99786],{"class":54,"line":66},[52,99782,99783],{"class":79},"a[:,",[52,99785,564],{"class":308},[52,99787,35896],{"class":79},[52,99789,99790],{"class":54,"line":83},[52,99791,99792],{"class":94},"#也可以负索引获取一列\n",[52,99794,99795,99797,99799,99801],{"class":54,"line":91},[52,99796,99783],{"class":79},[52,99798,2642],{"class":58},[52,99800,629],{"class":308},[52,99802,35896],{"class":79},[14,99804,99805],{},"④部分行部分列的元素",[42,99807,99809],{"className":33028,"code":99808,"language":33030,"meta":47,"style":47},"#部分行部分列 数组名[行切片，列切片]\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",[49,99810,99811,99816,99826,99830,99834,99839,99844,99848,99860,99864,99868,99873,99878,99883,99888,99892,99897],{"__ignoreMap":47},[52,99812,99813],{"class":54,"line":55},[52,99814,99815],{"class":94},"#部分行部分列 数组名[行切片，列切片]\n",[52,99817,99818,99821,99823],{"class":54,"line":66},[52,99819,99820],{"class":79},"a[:",[52,99822,564],{"class":308},[52,99824,99825],{"class":79},",:]\n",[52,99827,99828],{"class":54,"line":83},[52,99829,96214],{"class":94},[52,99831,99832],{"class":54,"line":91},[52,99833,96578],{"class":62},[52,99835,99836],{"class":54,"line":98},[52,99837,99838],{"class":62},"array([[ 1,  2,  3,  4,  5,  6],\n",[52,99840,99841],{"class":54,"line":107},[52,99842,99843],{"class":62},"       [ 7,  8,  9, 10, 11, 12]])\n",[52,99845,99846],{"class":54,"line":113},[52,99847,96578],{"class":62},[52,99849,99850,99852,99854,99856,99858],{"class":54,"line":119},[52,99851,99783],{"class":79},[52,99853,629],{"class":308},[52,99855,4049],{"class":79},[52,99857,3504],{"class":308},[52,99859,35896],{"class":79},[52,99861,99862],{"class":54,"line":126},[52,99863,96214],{"class":94},[52,99865,99866],{"class":54,"line":132},[52,99867,96578],{"class":62},[52,99869,99870],{"class":54,"line":138},[52,99871,99872],{"class":62},"array([[ 2,  3,  4],\n",[52,99874,99875],{"class":54,"line":144},[52,99876,99877],{"class":62},"       [ 8,  9, 10],\n",[52,99879,99880],{"class":54,"line":153},[52,99881,99882],{"class":62},"       [14, 15, 16],\n",[52,99884,99885],{"class":54,"line":159},[52,99886,99887],{"class":62},"       [20, 21, 22]])\n",[52,99889,99890],{"class":54,"line":167},[52,99891,96578],{"class":62},[52,99893,99894],{"class":54,"line":173},[52,99895,99896],{"class":94},"#对列行同时进行切片，使用了step参数\n",[52,99898,99899,99902,99904,99907,99909],{"class":54,"line":181},[52,99900,99901],{"class":79},"a[::",[52,99903,564],{"class":308},[52,99905,99906],{"class":79},",::",[52,99908,564],{"class":308},[52,99910,35896],{"class":79},[14,99912,99913],{},"⑤同时获取两个元素",[42,99915,99917],{"className":33028,"code":99916,"language":33030,"meta":47,"style":47},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[49,99918,99919,99924,99929],{"__ignoreMap":47},[52,99920,99921],{"class":54,"line":55},[52,99922,99923],{"class":94},"#同时获取第三行第二列，第四行第一列\n",[52,99925,99926],{"class":54,"line":66},[52,99927,99928],{"class":94},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[52,99930,99931,99934,99936,99938,99940,99942,99944,99946,99948],{"class":54,"line":83},[52,99932,99933],{"class":79},"a[(",[52,99935,564],{"class":308},[52,99937,389],{"class":79},[52,99939,2313],{"class":308},[52,99941,44897],{"class":79},[52,99943,629],{"class":308},[52,99945,389],{"class":79},[52,99947,692],{"class":308},[52,99949,99950],{"class":79},")]\n",[14,99952,99953],{},"⑥切片，对行进行反向获取",[42,99955,99957],{"className":33028,"code":99956,"language":33030,"meta":47,"style":47},"#切片 对所有行进行反向获取\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",[49,99958,99959,99964,99974,99978,99982,99987,99992,99997,100002,100006,100011,100027,100031,100036,100041,100046,100051],{"__ignoreMap":47},[52,99960,99961],{"class":54,"line":55},[52,99962,99963],{"class":94},"#切片 对所有行进行反向获取\n",[52,99965,99966,99968,99970,99972],{"class":54,"line":66},[52,99967,99901],{"class":79},[52,99969,2642],{"class":58},[52,99971,629],{"class":308},[52,99973,35896],{"class":79},[52,99975,99976],{"class":54,"line":83},[52,99977,96214],{"class":94},[52,99979,99980],{"class":54,"line":91},[52,99981,96578],{"class":62},[52,99983,99984],{"class":54,"line":98},[52,99985,99986],{"class":62},"array([[19, 20, 21, 22, 23, 24],\n",[52,99988,99989],{"class":54,"line":107},[52,99990,99991],{"class":62},"       [13, 14, 15, 16, 17, 18],\n",[52,99993,99994],{"class":54,"line":113},[52,99995,99996],{"class":62},"       [ 7,  8,  9, 10, 11, 12],\n",[52,99998,99999],{"class":54,"line":119},[52,100000,100001],{"class":62},"       [ 1,  2,  3,  4,  5,  6]])\n",[52,100003,100004],{"class":54,"line":126},[52,100005,96578],{"class":62},[52,100007,100008],{"class":54,"line":132},[52,100009,100010],{"class":94},"#对行列都进行反向切片获取\n",[52,100012,100013,100015,100017,100019,100021,100023,100025],{"class":54,"line":138},[52,100014,99901],{"class":79},[52,100016,2642],{"class":58},[52,100018,629],{"class":308},[52,100020,99906],{"class":79},[52,100022,2642],{"class":58},[52,100024,629],{"class":308},[52,100026,35896],{"class":79},[52,100028,100029],{"class":54,"line":144},[52,100030,96578],{"class":62},[52,100032,100033],{"class":54,"line":153},[52,100034,100035],{"class":62},"array([[24, 23, 22, 21, 20, 19],\n",[52,100037,100038],{"class":54,"line":159},[52,100039,100040],{"class":62},"       [18, 17, 16, 15, 14, 13],\n",[52,100042,100043],{"class":54,"line":167},[52,100044,100045],{"class":62},"       [12, 11, 10,  9,  8,  7],\n",[52,100047,100048],{"class":54,"line":173},[52,100049,100050],{"class":62},"       [ 6,  5,  4,  3,  2,  1]])\n",[52,100052,100053],{"class":54,"line":181},[52,100054,96578],{"class":62},[14,100056,100057],{},"⑦修改元素",[42,100059,100061],{"className":33028,"code":100060,"language":33030,"meta":47,"style":47},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[49,100062,100063,100068,100086,100091],{"__ignoreMap":47},[52,100064,100065],{"class":54,"line":55},[52,100066,100067],{"class":94},"#获取前两行和前两列\n",[52,100069,100070,100073,100075,100077,100079,100082,100084],{"class":54,"line":66},[52,100071,100072],{"class":79},"sub_a",[52,100074,292],{"class":58},[52,100076,99820],{"class":79},[52,100078,564],{"class":308},[52,100080,100081],{"class":79},",:",[52,100083,564],{"class":308},[52,100085,35896],{"class":79},[52,100087,100088],{"class":54,"line":83},[52,100089,100090],{"class":94},"#修改sub_a第一个元素的值\n",[52,100092,100093,100096,100098,100100,100102,100104,100106],{"class":54,"line":91},[52,100094,100095],{"class":79},"sub_a[",[52,100097,692],{"class":308},[52,100099,389],{"class":79},[52,100101,692],{"class":308},[52,100103,567],{"class":79},[52,100105,292],{"class":58},[52,100107,100108],{"class":308},"100\n",[14,100110,100111],{},"⑧数组复制copy()",[42,100113,100115],{"className":33028,"code":100114,"language":33030,"meta":47,"style":47},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[49,100116,100117,100122,100132,100137],{"__ignoreMap":47},[52,100118,100119],{"class":54,"line":55},[52,100120,100121],{"class":94},"#数组复制\n",[52,100123,100124,100127,100129],{"class":54,"line":66},[52,100125,100126],{"class":79},"copy_a",[52,100128,292],{"class":58},[52,100130,100131],{"class":79},"np.copy(sub_a)\n",[52,100133,100134],{"class":54,"line":83},[52,100135,100136],{"class":94},"#修改copy_a后不影响原数组\n",[52,100138,100139,100142,100144,100146,100148,100150,100152],{"class":54,"line":91},[52,100140,100141],{"class":79},"copy_a[",[52,100143,692],{"class":308},[52,100145,389],{"class":79},[52,100147,692],{"class":308},[52,100149,567],{"class":79},[52,100151,292],{"class":58},[52,100153,100108],{"class":308},[14,100155,100156],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[3141,100158,100159],{},"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":47,"searchDepth":66,"depth":66,"links":100161},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99678,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":100168,"title":100169,"body":100170,"description":26025,"extension":3153,"meta":100662,"navigation":122,"path":100663,"seo":100664,"stem":100665,"__hash__":100666},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":100171,"toc":100654},[100172,100175,100179,100182,100185,100238,100241,100266,100269,100288,100308,100311,100327,100331,100377,100381,100423,100427,100430,100433,100436,100439,100442,100504,100564,100568,100571,100628,100632,100637,100646,100651],[10,100173,100169],{"id":100174},"_5改变数组的维度",[18,100176,100178],{"id":100177},"_51-使用reshape","5.1 使用reshape()",[14,100180,100181],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,100183,100184],{},"①一维数组转换为二维数组",[42,100186,100188],{"className":33028,"code":100187,"language":33030,"meta":47,"style":47},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[49,100189,100190,100206,100211,100216,100221],{"__ignoreMap":47},[52,100191,100192,100194,100196,100198,100200,100202,100204],{"class":54,"line":55},[52,100193,3451],{"class":79},[52,100195,292],{"class":58},[52,100197,95652],{"class":79},[52,100199,629],{"class":308},[52,100201,389],{"class":79},[52,100203,3723],{"class":308},[52,100205,708],{"class":79},[52,100207,100208],{"class":54,"line":66},[52,100209,100210],{"class":94},"#将一维数组进行转换\n",[52,100212,100213],{"class":54,"line":83},[52,100214,100215],{"class":94},"#注意点：元素个数不可以变\n",[52,100217,100218],{"class":54,"line":91},[52,100219,100220],{"class":94},"#转换维度要保持一致，不一致就异常！！！\n",[52,100222,100223,100225,100227,100230,100232,100234,100236],{"class":54,"line":98},[52,100224,95956],{"class":79},[52,100226,292],{"class":58},[52,100228,100229],{"class":79},"a.reshape(",[52,100231,564],{"class":308},[52,100233,389],{"class":79},[52,100235,1125],{"class":308},[52,100237,708],{"class":79},[14,100239,100240],{},"②一维数组转换为三维数组",[42,100242,100244],{"className":33028,"code":100243,"language":33030,"meta":47,"style":47},"aaa=a.reshape(2,3,2)\n",[49,100245,100246],{"__ignoreMap":47},[52,100247,100248,100250,100252,100254,100256,100258,100260,100262,100264],{"class":54,"line":55},[52,100249,98171],{"class":79},[52,100251,292],{"class":58},[52,100253,100229],{"class":79},[52,100255,564],{"class":308},[52,100257,389],{"class":79},[52,100259,2313],{"class":308},[52,100261,389],{"class":79},[52,100263,564],{"class":308},[52,100265,708],{"class":79},[14,100267,100268],{},"③二维数组转化为一维数组",[42,100270,100272],{"className":33028,"code":100271,"language":33030,"meta":47,"style":47},"#知道元素个数：\naa.reshape(12)\n",[49,100273,100274,100279],{"__ignoreMap":47},[52,100275,100276],{"class":54,"line":55},[52,100277,100278],{"class":94},"#知道元素个数：\n",[52,100280,100281,100284,100286],{"class":54,"line":66},[52,100282,100283],{"class":79},"aa.reshape(",[52,100285,3698],{"class":308},[52,100287,708],{"class":79},[42,100289,100291],{"className":33028,"code":100290,"language":33030,"meta":47,"style":47},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[49,100292,100293,100298],{"__ignoreMap":47},[52,100294,100295],{"class":54,"line":55},[52,100296,100297],{"class":94},"#不知道元素个数，参数传递-1\n",[52,100299,100300,100302,100304,100306],{"class":54,"line":66},[52,100301,100283],{"class":79},[52,100303,2642],{"class":58},[52,100305,629],{"class":308},[52,100307,708],{"class":79},[14,100309,100310],{},"④三维数组转换为一维数组",[42,100312,100314],{"className":33028,"code":100313,"language":33030,"meta":47,"style":47},"aaa.reshape(-1)\n",[49,100315,100316],{"__ignoreMap":47},[52,100317,100318,100321,100323,100325],{"class":54,"line":55},[52,100319,100320],{"class":79},"aaa.reshape(",[52,100322,2642],{"class":58},[52,100324,629],{"class":308},[52,100326,708],{"class":79},[18,100328,100330],{"id":100329},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[42,100332,100334],{"className":33028,"code":100333,"language":33030,"meta":47,"style":47},"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",[49,100335,100336,100363,100368,100372],{"__ignoreMap":47},[52,100337,100338,100340,100342,100344,100346,100348,100350,100352,100354,100356,100358,100360],{"class":54,"line":55},[52,100339,95956],{"class":79},[52,100341,292],{"class":58},[52,100343,95652],{"class":79},[52,100345,629],{"class":308},[52,100347,389],{"class":79},[52,100349,3723],{"class":308},[52,100351,95657],{"class":79},[52,100353,564],{"class":308},[52,100355,389],{"class":79},[52,100357,1125],{"class":308},[52,100359,2283],{"class":79},[52,100361,100362],{"class":94},"#转换为2行6列的数组\n",[52,100364,100365],{"class":54,"line":66},[52,100366,100367],{"class":79},"aa.revel()\n",[52,100369,100370],{"class":54,"line":83},[52,100371,96214],{"class":94},[52,100373,100374],{"class":54,"line":91},[52,100375,100376],{"class":94},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[18,100378,100380],{"id":100379},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[42,100382,100384],{"className":33028,"code":100383,"language":33030,"meta":47,"style":47},"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",[49,100385,100386,100410,100415,100419],{"__ignoreMap":47},[52,100387,100388,100390,100392,100394,100396,100398,100400,100402,100404,100406,100408],{"class":54,"line":55},[52,100389,95956],{"class":79},[52,100391,292],{"class":58},[52,100393,95652],{"class":79},[52,100395,629],{"class":308},[52,100397,389],{"class":79},[52,100399,3723],{"class":308},[52,100401,95657],{"class":79},[52,100403,564],{"class":308},[52,100405,389],{"class":79},[52,100407,1125],{"class":308},[52,100409,708],{"class":79},[52,100411,100412],{"class":54,"line":66},[52,100413,100414],{"class":79},"aa.flatten()\n",[52,100416,100417],{"class":54,"line":83},[52,100418,96214],{"class":94},[52,100420,100421],{"class":54,"line":91},[52,100422,100376],{"class":94},[18,100424,100426],{"id":100425},"_54-使用resize","5.4 使用resize()",[14,100428,100429],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,100431,100432],{},"通过resize方法可以改变数组的维度",[14,100434,100435],{},"#resize修改数组维度",[14,100437,100438],{},"#以元组的形式指定形状",[14,100440,100441],{},"#改变的是原数组",[42,100443,100445],{"className":33028,"code":100444,"language":33030,"meta":47,"style":47},"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",[49,100446,100447,100463,100483,100496,100500],{"__ignoreMap":47},[52,100448,100449,100451,100453,100455,100457,100459,100461],{"class":54,"line":55},[52,100450,3451],{"class":79},[52,100452,292],{"class":58},[52,100454,95652],{"class":79},[52,100456,629],{"class":308},[52,100458,389],{"class":79},[52,100460,3723],{"class":308},[52,100462,708],{"class":79},[52,100464,100465,100468,100470,100472,100474,100476,100478,100480],{"class":54,"line":66},[52,100466,100467],{"class":79},"a.shape",[52,100469,292],{"class":58},[52,100471,1216],{"class":79},[52,100473,564],{"class":308},[52,100475,389],{"class":79},[52,100477,1125],{"class":308},[52,100479,2283],{"class":79},[52,100481,100482],{"class":94},"#改变了原数组\n",[52,100484,100485,100487,100489,100492,100494],{"class":54,"line":83},[52,100486,3451],{"class":79},[52,100488,292],{"class":58},[52,100490,100491],{"class":79},"resize((",[52,100493,3698],{"class":308},[52,100495,33147],{"class":79},[52,100497,100498],{"class":54,"line":91},[52,100499,96214],{"class":94},[52,100501,100502],{"class":54,"line":98},[52,100503,100376],{"class":94},[42,100505,100507],{"className":33028,"code":100506,"language":33030,"meta":47,"style":47},"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",[49,100508,100509,100522,100526,100530,100535,100540,100545,100550,100555,100560],{"__ignoreMap":47},[52,100510,100511,100514,100516,100518,100520],{"class":54,"line":55},[52,100512,100513],{"class":79},"a.resize((",[52,100515,1125],{"class":308},[52,100517,389],{"class":79},[52,100519,564],{"class":308},[52,100521,33147],{"class":79},[52,100523,100524],{"class":54,"line":66},[52,100525,96214],{"class":94},[52,100527,100528],{"class":54,"line":83},[52,100529,96578],{"class":62},[52,100531,100532],{"class":54,"line":91},[52,100533,100534],{"class":62},"array([[ 1,  2],\n",[52,100536,100537],{"class":54,"line":98},[52,100538,100539],{"class":62},"       [ 3,  4],\n",[52,100541,100542],{"class":54,"line":107},[52,100543,100544],{"class":62},"       [ 5,  6],\n",[52,100546,100547],{"class":54,"line":113},[52,100548,100549],{"class":62},"       [ 7,  8],\n",[52,100551,100552],{"class":54,"line":119},[52,100553,100554],{"class":62},"       [ 9, 10],\n",[52,100556,100557],{"class":54,"line":126},[52,100558,100559],{"class":62},"       [11, 12]])\n",[52,100561,100562],{"class":54,"line":132},[52,100563,96578],{"class":62},[18,100565,100567],{"id":100566},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,100569,100570],{},"改变了原数组",[42,100572,100574],{"className":33028,"code":100573,"language":33030,"meta":47,"style":47},"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",[49,100575,100576,100592,100608,100612,100616,100620,100624],{"__ignoreMap":47},[52,100577,100578,100580,100582,100584,100586,100588,100590],{"class":54,"line":55},[52,100579,3451],{"class":79},[52,100581,292],{"class":58},[52,100583,95652],{"class":79},[52,100585,629],{"class":308},[52,100587,389],{"class":79},[52,100589,3723],{"class":308},[52,100591,708],{"class":79},[52,100593,100594,100596,100598,100600,100602,100604,100606],{"class":54,"line":66},[52,100595,100467],{"class":79},[52,100597,292],{"class":58},[52,100599,1216],{"class":79},[52,100601,564],{"class":308},[52,100603,389],{"class":79},[52,100605,1125],{"class":308},[52,100607,708],{"class":79},[52,100609,100610],{"class":54,"line":83},[52,100611,96214],{"class":94},[52,100613,100614],{"class":54,"line":91},[52,100615,96578],{"class":62},[52,100617,100618],{"class":54,"line":98},[52,100619,99838],{"class":62},[52,100621,100622],{"class":54,"line":107},[52,100623,99843],{"class":62},[52,100625,100626],{"class":54,"line":113},[52,100627,96578],{"class":62},[18,100629,100631],{"id":100630},"_56-重要比较","5.6 重要比较：",[14,100633,100634],{},[4509,100635],{"alt":47,"src":100636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,100638,100639,100640,100642,100643,100645],{},"口诀：NumPy 函数要么用 ",[49,100641,98613],{},"，要么用 ",[49,100644,34146],{},"，创建结构用 shape，造数据用 size",[14,100647,100648],{},[4509,100649],{"alt":47,"src":100650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[3141,100652,100653],{},"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":47,"searchDepth":66,"depth":66,"links":100655},[100656,100657,100658,100659,100660,100661],{"id":100177,"depth":66,"text":100178},{"id":100329,"depth":66,"text":100330},{"id":100379,"depth":66,"text":100380},{"id":100425,"depth":66,"text":100426},{"id":100566,"depth":66,"text":100567},{"id":100630,"depth":66,"text":100631},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":100169,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100668,"title":100669,"body":100670,"description":26025,"extension":3153,"meta":101742,"navigation":122,"path":101743,"seo":101744,"stem":101745,"__hash__":101746},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100671,"toc":101736},[100672,100675,100679,100682,100685,100688,100753,100756,100796,100799,100881,100884,100889,100911,100913,100918,100923,100926,100929,101084,101087,101289,101293,101296,101299,101367,101369,101374,101377,101380,101460,101464,101467,101469,101542,101544,101549,101551,101631,101635,101638,101641,101644,101647,101650,101653,101733],[10,100673,100669],{"id":100674},"_6数组的拼接",[18,100676,100678],{"id":100677},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,100680,100681],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,100683,100684],{},"函数内部传两个数列构成的数列或者元组",[14,100686,100687],{},"①一维数组的拼接",[42,100689,100691],{"className":33028,"code":100690,"language":33030,"meta":47,"style":47},"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",[49,100692,100693,100713,100733,100738,100743,100748],{"__ignoreMap":47},[52,100694,100695,100697,100699,100701,100703,100705,100707,100709,100711],{"class":54,"line":55},[52,100696,3451],{"class":79},[52,100698,292],{"class":58},[52,100700,95674],{"class":79},[52,100702,629],{"class":308},[52,100704,389],{"class":79},[52,100706,564],{"class":308},[52,100708,389],{"class":79},[52,100710,2313],{"class":308},[52,100712,7629],{"class":79},[52,100714,100715,100717,100719,100721,100723,100725,100727,100729,100731],{"class":54,"line":66},[52,100716,3474],{"class":79},[52,100718,292],{"class":58},[52,100720,95674],{"class":79},[52,100722,3504],{"class":308},[52,100724,389],{"class":79},[52,100726,1805],{"class":308},[52,100728,389],{"class":79},[52,100730,1125],{"class":308},[52,100732,7629],{"class":79},[52,100734,100735],{"class":54,"line":83},[52,100736,100737],{"class":94},"#调用concatenate进行数组拼接\n",[52,100739,100740],{"class":54,"line":91},[52,100741,100742],{"class":79},"np.concatenate((a,b))\n",[52,100744,100745],{"class":54,"line":98},[52,100746,100747],{"class":94},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[52,100749,100750],{"class":54,"line":107},[52,100751,100752],{"class":94},"#np.concatenate([a,b])\n",[14,100754,100755],{},"②一维多个数组拼接",[42,100757,100759],{"className":33028,"code":100758,"language":33030,"meta":47,"style":47},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[49,100760,100761,100766,100786,100791],{"__ignoreMap":47},[52,100762,100763],{"class":54,"line":55},[52,100764,100765],{"class":94},"#也可以多个数组进行拼接\n",[52,100767,100768,100770,100772,100774,100776,100778,100780,100782,100784],{"class":54,"line":66},[52,100769,3499],{"class":79},[52,100771,292],{"class":58},[52,100773,95674],{"class":79},[52,100775,3649],{"class":308},[52,100777,389],{"class":79},[52,100779,3673],{"class":308},[52,100781,389],{"class":79},[52,100783,3723],{"class":308},[52,100785,7629],{"class":79},[52,100787,100788],{"class":54,"line":83},[52,100789,100790],{"class":79},"c\n",[52,100792,100793],{"class":54,"line":91},[52,100794,100795],{"class":79},"np.concatenate((a,b,c))\n",[14,100797,100798],{},"③二维数组拼接",[42,100800,100802],{"className":33028,"code":100801,"language":33030,"meta":47,"style":47},"#二维数组使用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",[49,100803,100804,100809,100833,100858,100863,100868],{"__ignoreMap":47},[52,100805,100806],{"class":54,"line":55},[52,100807,100808],{"class":94},"#二维数组使用concatenate进行拼接\n",[52,100810,100811,100813,100815,100817,100819,100821,100823,100825,100827,100829,100831],{"class":54,"line":66},[52,100812,95956],{"class":79},[52,100814,292],{"class":58},[52,100816,95652],{"class":79},[52,100818,629],{"class":308},[52,100820,389],{"class":79},[52,100822,3723],{"class":308},[52,100824,95657],{"class":79},[52,100826,2313],{"class":308},[52,100828,389],{"class":79},[52,100830,3504],{"class":308},[52,100832,708],{"class":79},[52,100834,100835,100838,100840,100842,100844,100846,100848,100850,100852,100854,100856],{"class":54,"line":83},[52,100836,100837],{"class":79},"bb",[52,100839,292],{"class":58},[52,100841,95652],{"class":79},[52,100843,3545],{"class":308},[52,100845,389],{"class":79},[52,100847,3839],{"class":308},[52,100849,95657],{"class":79},[52,100851,2313],{"class":308},[52,100853,389],{"class":79},[52,100855,3504],{"class":308},[52,100857,708],{"class":79},[52,100859,100860],{"class":54,"line":91},[52,100861,100862],{"class":94},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[52,100864,100865],{"class":54,"line":98},[52,100866,100867],{"class":94},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[52,100869,100870,100873,100875,100877,100879],{"class":54,"line":107},[52,100871,100872],{"class":79},"np.concatenate((aa,bb),",[52,100874,50164],{"class":1223},[52,100876,292],{"class":58},[52,100878,692],{"class":308},[52,100880,708],{"class":79},[14,100882,100883],{},"结果：",[14,100885,100886],{},[4509,100887],{"alt":47,"src":100888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[42,100890,100892],{"className":33028,"code":100891,"language":33030,"meta":47,"style":47},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[49,100893,100894,100899],{"__ignoreMap":47},[52,100895,100896],{"class":54,"line":55},[52,100897,100898],{"class":94},"#指定axis为1进行拼接\n",[52,100900,100901,100903,100905,100907,100909],{"class":54,"line":66},[52,100902,100872],{"class":79},[52,100904,50164],{"class":1223},[52,100906,292],{"class":58},[52,100908,629],{"class":308},[52,100910,708],{"class":79},[14,100912,100883],{},[14,100914,100915],{},[4509,100916],{"alt":47,"src":100917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,100919,100920],{},[2389,100921,100922],{},"二维数组总结：0竖着方向，1横着方向",[14,100924,100925],{},"④三维数组拼接",[14,100927,100928],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[42,100930,100932],{"className":33028,"code":100931,"language":33030,"meta":47,"style":47},"#两个三行六列\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",[49,100933,100934,100939,100967,100997,101002,101019,101024,101029,101034,101051,101056,101061,101066,101079],{"__ignoreMap":47},[52,100935,100936],{"class":54,"line":55},[52,100937,100938],{"class":94},"#两个三行六列\n",[52,100940,100941,100943,100945,100947,100949,100951,100953,100955,100957,100959,100961,100963,100965],{"class":54,"line":66},[52,100942,98171],{"class":79},[52,100944,292],{"class":58},[52,100946,95652],{"class":79},[52,100948,629],{"class":308},[52,100950,389],{"class":79},[52,100952,3534],{"class":308},[52,100954,95657],{"class":79},[52,100956,564],{"class":308},[52,100958,389],{"class":79},[52,100960,2313],{"class":308},[52,100962,389],{"class":79},[52,100964,1125],{"class":308},[52,100966,708],{"class":79},[52,100968,100969,100972,100974,100976,100978,100980,100983,100985,100987,100989,100991,100993,100995],{"class":54,"line":83},[52,100970,100971],{"class":79},"bbb",[52,100973,292],{"class":58},[52,100975,95652],{"class":79},[52,100977,3545],{"class":308},[52,100979,389],{"class":79},[52,100981,100982],{"class":308},"137",[52,100984,95657],{"class":79},[52,100986,564],{"class":308},[52,100988,389],{"class":79},[52,100990,2313],{"class":308},[52,100992,389],{"class":79},[52,100994,1125],{"class":308},[52,100996,708],{"class":79},[52,100998,100999],{"class":54,"line":91},[52,101000,101001],{"class":94},"#axis=0\n",[52,101003,101004,101006,101008,101011,101013,101015,101017],{"class":54,"line":98},[52,101005,1291],{"class":79},[52,101007,292],{"class":58},[52,101009,101010],{"class":79},"np.concatenate((aaa,bbb),",[52,101012,50164],{"class":1223},[52,101014,292],{"class":58},[52,101016,692],{"class":308},[52,101018,708],{"class":79},[52,101020,101021],{"class":54,"line":107},[52,101022,101023],{"class":79},"s.shape\n",[52,101025,101026],{"class":54,"line":113},[52,101027,101028],{"class":94},"#输出：(4,3,6)\n",[52,101030,101031],{"class":54,"line":119},[52,101032,101033],{"class":94},"#axis=1\n",[52,101035,101036,101039,101041,101043,101045,101047,101049],{"class":54,"line":126},[52,101037,101038],{"class":79},"ss",[52,101040,292],{"class":58},[52,101042,101010],{"class":79},[52,101044,50164],{"class":1223},[52,101046,292],{"class":58},[52,101048,629],{"class":308},[52,101050,708],{"class":79},[52,101052,101053],{"class":54,"line":132},[52,101054,101055],{"class":79},"ss.shape\n",[52,101057,101058],{"class":54,"line":138},[52,101059,101060],{"class":94},"#输出：(2,6,6)\n",[52,101062,101063],{"class":54,"line":144},[52,101064,101065],{"class":94},"#axis=2\n",[52,101067,101068,101070,101072,101074,101076],{"class":54,"line":153},[52,101069,101010],{"class":79},[52,101071,50164],{"class":1223},[52,101073,292],{"class":58},[52,101075,564],{"class":308},[52,101077,101078],{"class":79},").shape\n",[52,101080,101081],{"class":54,"line":159},[52,101082,101083],{"class":94},"#输出：（2，3，12）\n",[14,101085,101086],{},"⑤四维数组拼接",[42,101088,101090],{"className":33028,"code":101089,"language":33030,"meta":47,"style":47},"#两个三行六列\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",[49,101091,101092,101096,101124,101152,101177,101203,101207,101220,101225,101229,101241,101246,101250,101262,101267,101272,101284],{"__ignoreMap":47},[52,101093,101094],{"class":54,"line":55},[52,101095,100938],{"class":94},[52,101097,101098,101100,101102,101104,101106,101108,101110,101112,101114,101116,101118,101120,101122],{"class":54,"line":66},[52,101099,98171],{"class":79},[52,101101,292],{"class":58},[52,101103,95652],{"class":79},[52,101105,629],{"class":308},[52,101107,389],{"class":79},[52,101109,3534],{"class":308},[52,101111,95657],{"class":79},[52,101113,564],{"class":308},[52,101115,389],{"class":79},[52,101117,2313],{"class":308},[52,101119,389],{"class":79},[52,101121,1125],{"class":308},[52,101123,708],{"class":79},[52,101125,101126,101128,101130,101132,101134,101136,101138,101140,101142,101144,101146,101148,101150],{"class":54,"line":83},[52,101127,100971],{"class":79},[52,101129,292],{"class":58},[52,101131,95652],{"class":79},[52,101133,3545],{"class":308},[52,101135,389],{"class":79},[52,101137,100982],{"class":308},[52,101139,95657],{"class":79},[52,101141,564],{"class":308},[52,101143,389],{"class":79},[52,101145,2313],{"class":308},[52,101147,389],{"class":79},[52,101149,1125],{"class":308},[52,101151,708],{"class":79},[52,101153,101154,101157,101159,101161,101163,101165,101167,101169,101171,101173,101175],{"class":54,"line":91},[52,101155,101156],{"class":79},"aaaa",[52,101158,292],{"class":58},[52,101160,100320],{"class":79},[52,101162,564],{"class":308},[52,101164,389],{"class":79},[52,101166,2313],{"class":308},[52,101168,389],{"class":79},[52,101170,2313],{"class":308},[52,101172,389],{"class":79},[52,101174,564],{"class":308},[52,101176,708],{"class":79},[52,101178,101179,101182,101184,101187,101189,101191,101193,101195,101197,101199,101201],{"class":54,"line":98},[52,101180,101181],{"class":79},"bbbb",[52,101183,292],{"class":58},[52,101185,101186],{"class":79},"bbb.reshape(",[52,101188,564],{"class":308},[52,101190,389],{"class":79},[52,101192,2313],{"class":308},[52,101194,389],{"class":79},[52,101196,2313],{"class":308},[52,101198,389],{"class":79},[52,101200,564],{"class":308},[52,101202,708],{"class":79},[52,101204,101205],{"class":54,"line":107},[52,101206,101001],{"class":94},[52,101208,101209,101212,101214,101216,101218],{"class":54,"line":113},[52,101210,101211],{"class":79},"np.concatenate((aaaa,bbbb),",[52,101213,50164],{"class":1223},[52,101215,292],{"class":58},[52,101217,692],{"class":308},[52,101219,101078],{"class":79},[52,101221,101222],{"class":54,"line":119},[52,101223,101224],{"class":94},"#结果：（4，3，3，2）\n",[52,101226,101227],{"class":54,"line":126},[52,101228,101033],{"class":94},[52,101230,101231,101233,101235,101237,101239],{"class":54,"line":132},[52,101232,101211],{"class":79},[52,101234,50164],{"class":1223},[52,101236,292],{"class":58},[52,101238,629],{"class":308},[52,101240,101078],{"class":79},[52,101242,101243],{"class":54,"line":138},[52,101244,101245],{"class":94},"#结果：（2，6，3，2）\n",[52,101247,101248],{"class":54,"line":144},[52,101249,101065],{"class":94},[52,101251,101252,101254,101256,101258,101260],{"class":54,"line":153},[52,101253,101211],{"class":79},[52,101255,50164],{"class":1223},[52,101257,292],{"class":58},[52,101259,564],{"class":308},[52,101261,101078],{"class":79},[52,101263,101264],{"class":54,"line":159},[52,101265,101266],{"class":94},"#结果：（2，3，6，2）\n",[52,101268,101269],{"class":54,"line":167},[52,101270,101271],{"class":94},"#axis=3\n",[52,101273,101274,101276,101278,101280,101282],{"class":54,"line":173},[52,101275,101211],{"class":79},[52,101277,50164],{"class":1223},[52,101279,292],{"class":58},[52,101281,2313],{"class":308},[52,101283,101078],{"class":79},[52,101285,101286],{"class":54,"line":181},[52,101287,101288],{"class":94},"#结果：（2，3，3，4）\n",[18,101290,101292],{"id":101291},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,101294,101295],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,101297,101298],{},"①二维数组",[42,101300,101302],{"className":33028,"code":101301,"language":33030,"meta":47,"style":47},"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",[49,101303,101304,101328,101352,101357,101362],{"__ignoreMap":47},[52,101305,101306,101308,101310,101312,101314,101316,101318,101320,101322,101324,101326],{"class":54,"line":55},[52,101307,95956],{"class":79},[52,101309,292],{"class":58},[52,101311,95652],{"class":79},[52,101313,629],{"class":308},[52,101315,389],{"class":79},[52,101317,3723],{"class":308},[52,101319,95657],{"class":79},[52,101321,2313],{"class":308},[52,101323,389],{"class":79},[52,101325,3504],{"class":308},[52,101327,708],{"class":79},[52,101329,101330,101332,101334,101336,101338,101340,101342,101344,101346,101348,101350],{"class":54,"line":66},[52,101331,100837],{"class":79},[52,101333,292],{"class":58},[52,101335,95652],{"class":79},[52,101337,3545],{"class":308},[52,101339,389],{"class":79},[52,101341,3839],{"class":308},[52,101343,95657],{"class":79},[52,101345,2313],{"class":308},[52,101347,389],{"class":79},[52,101349,3504],{"class":308},[52,101351,708],{"class":79},[52,101353,101354],{"class":54,"line":83},[52,101355,101356],{"class":79},"np.hstack((aa,bb))\n",[52,101358,101359],{"class":54,"line":91},[52,101360,101361],{"class":94},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[52,101363,101364],{"class":54,"line":98},[52,101365,101366],{"class":94},"#np.hstack([aa,bb])\n",[14,101368,100883],{},[14,101370,101371],{},[4509,101372],{"alt":47,"src":101373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,101375,101376],{},"等效于concatenate()函数中axis=1时的情况",[14,101378,101379],{},"②三维数组",[42,101381,101383],{"className":33028,"code":101382,"language":33030,"meta":47,"style":47},"#两个三行六列\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",[49,101384,101385,101389,101417,101445,101450,101455],{"__ignoreMap":47},[52,101386,101387],{"class":54,"line":55},[52,101388,100938],{"class":94},[52,101390,101391,101393,101395,101397,101399,101401,101403,101405,101407,101409,101411,101413,101415],{"class":54,"line":66},[52,101392,98171],{"class":79},[52,101394,292],{"class":58},[52,101396,95652],{"class":79},[52,101398,629],{"class":308},[52,101400,389],{"class":79},[52,101402,3534],{"class":308},[52,101404,95657],{"class":79},[52,101406,564],{"class":308},[52,101408,389],{"class":79},[52,101410,2313],{"class":308},[52,101412,389],{"class":79},[52,101414,1125],{"class":308},[52,101416,708],{"class":79},[52,101418,101419,101421,101423,101425,101427,101429,101431,101433,101435,101437,101439,101441,101443],{"class":54,"line":83},[52,101420,100971],{"class":79},[52,101422,292],{"class":58},[52,101424,95652],{"class":79},[52,101426,3545],{"class":308},[52,101428,389],{"class":79},[52,101430,100982],{"class":308},[52,101432,95657],{"class":79},[52,101434,564],{"class":308},[52,101436,389],{"class":79},[52,101438,2313],{"class":308},[52,101440,389],{"class":79},[52,101442,1125],{"class":308},[52,101444,708],{"class":79},[52,101446,101447],{"class":54,"line":91},[52,101448,101449],{"class":94},"#使用hstack\n",[52,101451,101452],{"class":54,"line":98},[52,101453,101454],{"class":79},"np.hstack((aaa,bbb)).shape\n",[52,101456,101457],{"class":54,"line":107},[52,101458,101459],{"class":94},"#输出：（2，6，6）\n",[18,101461,101463],{"id":101462},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,101465,101466],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,101468,101298],{},[42,101470,101472],{"className":33028,"code":101471,"language":33030,"meta":47,"style":47},"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",[49,101473,101474,101498,101522,101527,101532,101537],{"__ignoreMap":47},[52,101475,101476,101478,101480,101482,101484,101486,101488,101490,101492,101494,101496],{"class":54,"line":55},[52,101477,95956],{"class":79},[52,101479,292],{"class":58},[52,101481,95652],{"class":79},[52,101483,629],{"class":308},[52,101485,389],{"class":79},[52,101487,3723],{"class":308},[52,101489,95657],{"class":79},[52,101491,2313],{"class":308},[52,101493,389],{"class":79},[52,101495,3504],{"class":308},[52,101497,708],{"class":79},[52,101499,101500,101502,101504,101506,101508,101510,101512,101514,101516,101518,101520],{"class":54,"line":66},[52,101501,100837],{"class":79},[52,101503,292],{"class":58},[52,101505,95652],{"class":79},[52,101507,3545],{"class":308},[52,101509,389],{"class":79},[52,101511,3839],{"class":308},[52,101513,95657],{"class":79},[52,101515,2313],{"class":308},[52,101517,389],{"class":79},[52,101519,3504],{"class":308},[52,101521,708],{"class":79},[52,101523,101524],{"class":54,"line":83},[52,101525,101526],{"class":94},"#vstack 垂直方向进行堆叠\n",[52,101528,101529],{"class":54,"line":91},[52,101530,101531],{"class":79},"np.vstack((aa,bb))\n",[52,101533,101534],{"class":54,"line":98},[52,101535,101536],{"class":94},"#与hstack传的参数类似，等价于：\n",[52,101538,101539],{"class":54,"line":107},[52,101540,101541],{"class":79},"np.vstack([aa,bb])\n",[14,101543,100883],{},[14,101545,101546],{},[4509,101547],{"alt":47,"src":101548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,101550,101379],{},[42,101552,101554],{"className":33028,"code":101553,"language":33030,"meta":47,"style":47},"#两个三行六列\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",[49,101555,101556,101560,101588,101616,101621,101626],{"__ignoreMap":47},[52,101557,101558],{"class":54,"line":55},[52,101559,100938],{"class":94},[52,101561,101562,101564,101566,101568,101570,101572,101574,101576,101578,101580,101582,101584,101586],{"class":54,"line":66},[52,101563,98171],{"class":79},[52,101565,292],{"class":58},[52,101567,95652],{"class":79},[52,101569,629],{"class":308},[52,101571,389],{"class":79},[52,101573,3534],{"class":308},[52,101575,95657],{"class":79},[52,101577,564],{"class":308},[52,101579,389],{"class":79},[52,101581,2313],{"class":308},[52,101583,389],{"class":79},[52,101585,1125],{"class":308},[52,101587,708],{"class":79},[52,101589,101590,101592,101594,101596,101598,101600,101602,101604,101606,101608,101610,101612,101614],{"class":54,"line":83},[52,101591,100971],{"class":79},[52,101593,292],{"class":58},[52,101595,95652],{"class":79},[52,101597,3545],{"class":308},[52,101599,389],{"class":79},[52,101601,100982],{"class":308},[52,101603,95657],{"class":79},[52,101605,564],{"class":308},[52,101607,389],{"class":79},[52,101609,2313],{"class":308},[52,101611,389],{"class":79},[52,101613,1125],{"class":308},[52,101615,708],{"class":79},[52,101617,101618],{"class":54,"line":91},[52,101619,101620],{"class":94},"#使用vstack\n",[52,101622,101623],{"class":54,"line":98},[52,101624,101625],{"class":79},"np.vstack((aaa,bbb)).shape\n",[52,101627,101628],{"class":54,"line":107},[52,101629,101630],{"class":94},"#输出：（4，3，6）\n",[18,101632,101634],{"id":101633},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,101636,101637],{},"该方法是三维数组特有的方法",[14,101639,101640],{},"也就是说",[14,101642,101643],{},"一维数组拼接方法用：concatenate()",[14,101645,101646],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,101648,101649],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,101651,101652],{},"四维数组及多维数组只能用concatenate进行拼接",[42,101654,101656],{"className":33028,"code":101655,"language":33030,"meta":47,"style":47},"#两个三行六列\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",[49,101657,101658,101662,101690,101718,101723,101728],{"__ignoreMap":47},[52,101659,101660],{"class":54,"line":55},[52,101661,100938],{"class":94},[52,101663,101664,101666,101668,101670,101672,101674,101676,101678,101680,101682,101684,101686,101688],{"class":54,"line":66},[52,101665,98171],{"class":79},[52,101667,292],{"class":58},[52,101669,95652],{"class":79},[52,101671,629],{"class":308},[52,101673,389],{"class":79},[52,101675,3534],{"class":308},[52,101677,95657],{"class":79},[52,101679,564],{"class":308},[52,101681,389],{"class":79},[52,101683,2313],{"class":308},[52,101685,389],{"class":79},[52,101687,1125],{"class":308},[52,101689,708],{"class":79},[52,101691,101692,101694,101696,101698,101700,101702,101704,101706,101708,101710,101712,101714,101716],{"class":54,"line":83},[52,101693,100971],{"class":79},[52,101695,292],{"class":58},[52,101697,95652],{"class":79},[52,101699,3545],{"class":308},[52,101701,389],{"class":79},[52,101703,100982],{"class":308},[52,101705,95657],{"class":79},[52,101707,564],{"class":308},[52,101709,389],{"class":79},[52,101711,2313],{"class":308},[52,101713,389],{"class":79},[52,101715,1125],{"class":308},[52,101717,708],{"class":79},[52,101719,101720],{"class":54,"line":91},[52,101721,101722],{"class":94},"#使用dstack\n",[52,101724,101725],{"class":54,"line":98},[52,101726,101727],{"class":79},"np.dstack((aaa,bbb)).shape\n",[52,101729,101730],{"class":54,"line":107},[52,101731,101732],{"class":94},"#结果：（2，3，12）\n",[3141,101734,101735],{},"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":47,"searchDepth":66,"depth":66,"links":101737},[101738,101739,101740,101741],{"id":100677,"depth":66,"text":100678},{"id":101291,"depth":66,"text":101292},{"id":101462,"depth":66,"text":101463},{"id":101633,"depth":66,"text":101634},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100669,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101748,"title":101749,"body":101750,"description":26025,"extension":3153,"meta":102025,"navigation":122,"path":102026,"seo":102027,"stem":102028,"__hash__":102029},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101751,"toc":102023},[101752,101755,101758,101852,101855,101858,101861,101864,101867,101870,101873,101876,102020],[10,101753,101749],{"id":101754},"_7数组转置",[14,101756,101757],{},"使用transpose()函数",[42,101759,101761],{"className":33028,"code":101760,"language":33030,"meta":47,"style":47},"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",[49,101762,101763,101773,101797,101802,101807,101812,101817,101825,101829,101833,101838,101843,101848],{"__ignoreMap":47},[52,101764,101765,101767,101769,101771],{"class":54,"line":55},[52,101766,33042],{"class":58},[52,101768,34030],{"class":79},[52,101770,34033],{"class":58},[52,101772,34036],{"class":79},[52,101774,101775,101777,101779,101781,101783,101785,101787,101789,101791,101793,101795],{"class":54,"line":66},[52,101776,3451],{"class":79},[52,101778,292],{"class":58},[52,101780,34367],{"class":79},[52,101782,629],{"class":308},[52,101784,389],{"class":79},[52,101786,3723],{"class":308},[52,101788,95657],{"class":79},[52,101790,3504],{"class":308},[52,101792,389],{"class":79},[52,101794,2313],{"class":308},[52,101796,708],{"class":79},[52,101798,101799],{"class":54,"line":83},[52,101800,101801],{"class":94},"#二维数组转置\n",[52,101803,101804],{"class":54,"line":91},[52,101805,101806],{"class":94},"#调用transpose()函数\n",[52,101808,101809],{"class":54,"line":98},[52,101810,101811],{"class":79},"a.transpose()\n",[52,101813,101814],{"class":54,"line":107},[52,101815,101816],{"class":94},"#对于二维数组也可以采用.T来实现\n",[52,101818,101819,101822],{"class":54,"line":113},[52,101820,101821],{"class":79},"a.T",[52,101823,101824],{"class":94},"#与上述代码一样\n",[52,101826,101827],{"class":54,"line":119},[52,101828,96214],{"class":94},[52,101830,101831],{"class":54,"line":126},[52,101832,96578],{"class":62},[52,101834,101835],{"class":54,"line":132},[52,101836,101837],{"class":62},"array([[ 1,  4,  7, 10],\n",[52,101839,101840],{"class":54,"line":138},[52,101841,101842],{"class":62},"       [ 2,  5,  8, 11],\n",[52,101844,101845],{"class":54,"line":144},[52,101846,101847],{"class":62},"       [ 3,  6,  9, 12]])\n",[52,101849,101850],{"class":54,"line":153},[52,101851,96578],{"class":62},[14,101853,101854],{},"也可以使用np.transpose()的形式",[14,101856,101857],{},"#多维数组进行转置 np.transpose()",[14,101859,101860],{},"#对二维数组也可以使用np.transpose()进行转置",[14,101862,101863],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,101865,101866],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,101868,101869],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,101871,101872],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,101874,101875],{},"四维及以上的数组也是一样的道理",[42,101877,101879],{"className":33028,"code":101878,"language":33030,"meta":47,"style":47},"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",[49,101880,101881,101909,101914,101919,101924,101942,101947,101979,101984,101989,101994,102015],{"__ignoreMap":47},[52,101882,101883,101885,101887,101889,101891,101893,101895,101897,101899,101901,101903,101905,101907],{"class":54,"line":55},[52,101884,4010],{"class":79},[52,101886,292],{"class":58},[52,101888,95652],{"class":79},[52,101890,629],{"class":308},[52,101892,389],{"class":79},[52,101894,3534],{"class":308},[52,101896,95657],{"class":79},[52,101898,2313],{"class":308},[52,101900,389],{"class":79},[52,101902,1125],{"class":308},[52,101904,389],{"class":79},[52,101906,564],{"class":308},[52,101908,708],{"class":79},[52,101910,101911],{"class":54,"line":66},[52,101912,101913],{"class":79},"x.shape\n",[52,101915,101916],{"class":54,"line":83},[52,101917,101918],{"class":94},"#结果：（3,6,2）\n",[52,101920,101921],{"class":54,"line":91},[52,101922,101923],{"class":94},"#使用np.transpose()进行转置 变为(2,6,3)\n",[52,101925,101926,101929,101931,101933,101935,101937,101939],{"class":54,"line":98},[52,101927,101928],{"class":79},"np.transpose(x,(",[52,101930,564],{"class":308},[52,101932,389],{"class":79},[52,101934,629],{"class":308},[52,101936,389],{"class":79},[52,101938,692],{"class":308},[52,101940,101941],{"class":79},")).shape\n",[52,101943,101944],{"class":54,"line":107},[52,101945,101946],{"class":94},"#结果：(2,6,3)\n",[52,101948,101949,101951,101953,101955,101957,101959,101961,101963,101965,101967,101969,101971,101973,101975,101977],{"class":54,"line":113},[52,101950,101156],{"class":79},[52,101952,292],{"class":58},[52,101954,95652],{"class":79},[52,101956,629],{"class":308},[52,101958,389],{"class":79},[52,101960,3534],{"class":308},[52,101962,95657],{"class":79},[52,101964,2313],{"class":308},[52,101966,389],{"class":79},[52,101968,564],{"class":308},[52,101970,389],{"class":79},[52,101972,629],{"class":308},[52,101974,389],{"class":79},[52,101976,1125],{"class":308},[52,101978,708],{"class":79},[52,101980,101981],{"class":54,"line":119},[52,101982,101983],{"class":79},"aaaa.shape\n",[52,101985,101986],{"class":54,"line":126},[52,101987,101988],{"class":94},"#结果：（3，2，1，6）\n",[52,101990,101991],{"class":54,"line":132},[52,101992,101993],{"class":94},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[52,101995,101996,101999,102001,102003,102005,102007,102009,102011,102013],{"class":54,"line":138},[52,101997,101998],{"class":79},"np.transpose(aaaa,(",[52,102000,629],{"class":308},[52,102002,389],{"class":79},[52,102004,564],{"class":308},[52,102006,389],{"class":79},[52,102008,692],{"class":308},[52,102010,389],{"class":79},[52,102012,2313],{"class":308},[52,102014,101941],{"class":79},[52,102016,102017],{"class":54,"line":144},[52,102018,102019],{"class":94},"#结果：(2,1,3,6)\n",[3141,102021,102022],{},"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":47,"searchDepth":66,"depth":66,"links":102024},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101749,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":102031,"title":102032,"body":102033,"description":26025,"extension":3153,"meta":102767,"navigation":122,"path":102768,"seo":102769,"stem":102770,"__hash__":102771},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":102034,"toc":102765},[102035,102038,102041,102044,102047,102050,102053,102056,102059,102168,102171,102174,102762],[10,102036,102032],{"id":102037},"_8数组分割",[14,102039,102040],{},"split分割",[14,102042,102043],{},"numpy.split(ary,indics_or_sections,axis)",[14,102045,102046],{},"解释：",[14,102048,102049],{},"ary:被分割的数组",[14,102051,102052],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,102054,102055],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,102057,102058],{},"①一维数组的分割",[42,102060,102062],{"className":33028,"code":102061,"language":33030,"meta":47,"style":47},"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",[49,102063,102064,102080,102085,102094,102098,102103,102111,102115,102120,102125,102138,102142,102147,102159,102163],{"__ignoreMap":47},[52,102065,102066,102068,102070,102072,102074,102076,102078],{"class":54,"line":55},[52,102067,3451],{"class":79},[52,102069,292],{"class":58},[52,102071,95652],{"class":79},[52,102073,629],{"class":308},[52,102075,389],{"class":79},[52,102077,3624],{"class":308},[52,102079,708],{"class":79},[52,102081,102082],{"class":54,"line":66},[52,102083,102084],{"class":94},"#如果传入整数，必须能够平分，否则会报错\n",[52,102086,102087,102090,102092],{"class":54,"line":83},[52,102088,102089],{"class":79},"np.split(a,",[52,102091,564],{"class":308},[52,102093,708],{"class":79},[52,102095,102096],{"class":54,"line":91},[52,102097,96214],{"class":94},[52,102099,102100],{"class":54,"line":98},[52,102101,102102],{"class":94},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[52,102104,102105,102107,102109],{"class":54,"line":107},[52,102106,102089],{"class":79},[52,102108,3504],{"class":308},[52,102110,708],{"class":79},[52,102112,102113],{"class":54,"line":113},[52,102114,96214],{"class":94},[52,102116,102117],{"class":54,"line":119},[52,102118,102119],{"class":94},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[52,102121,102122],{"class":54,"line":126},[52,102123,102124],{"class":94},"#传入数组\n",[52,102126,102127,102130,102132,102134,102136],{"class":54,"line":132},[52,102128,102129],{"class":79},"np.split(a,[",[52,102131,2313],{"class":308},[52,102133,389],{"class":79},[52,102135,1805],{"class":308},[52,102137,7629],{"class":79},[52,102139,102140],{"class":54,"line":138},[52,102141,96214],{"class":94},[52,102143,102144],{"class":54,"line":144},[52,102145,102146],{"class":94},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[52,102148,102149,102151,102153,102155,102157],{"class":54,"line":153},[52,102150,102129],{"class":79},[52,102152,1805],{"class":308},[52,102154,389],{"class":79},[52,102156,3575],{"class":308},[52,102158,7629],{"class":79},[52,102160,102161],{"class":54,"line":159},[52,102162,96214],{"class":94},[52,102164,102165],{"class":54,"line":167},[52,102166,102167],{"class":94},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,102169,102170],{},"②二维数组的分割",[14,102172,102173],{},"使用split()",[42,102175,102177],{"className":33028,"code":102176,"language":33030,"meta":47,"style":47},"#二维数组分割\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",[49,102178,102179,102184,102208,102213,102222,102226,102230,102235,102240,102245,102250,102255,102260,102265,102269,102282,102286,102290,102294,102298,102302,102307,102312,102317,102321,102326,102342,102346,102350,102355,102360,102365,102370,102375,102380,102385,102390,102395,102400,102405,102410,102415,102420,102425,102430,102435,102440,102444,102448,102468,102472,102476,102481,102486,102491,102496,102501,102506,102511,102516,102521,102526,102531,102536,102541,102546,102551,102556,102561,102566,102570,102575,102584,102588,102592,102596,102600,102604,102608,102612,102616,102620,102629,102633,102637,102641,102645,102649,102653,102657,102661,102665,102669,102673,102677,102681,102685,102689,102693,102697,102701,102705,102709,102713,102726,102730,102734,102738,102742,102746,102750,102754,102758],{"__ignoreMap":47},[52,102180,102181],{"class":54,"line":55},[52,102182,102183],{"class":94},"#二维数组分割\n",[52,102185,102186,102188,102190,102192,102194,102196,102198,102200,102202,102204,102206],{"class":54,"line":66},[52,102187,95956],{"class":79},[52,102189,292],{"class":58},[52,102191,95652],{"class":79},[52,102193,629],{"class":308},[52,102195,389],{"class":79},[52,102197,3534],{"class":308},[52,102199,95657],{"class":79},[52,102201,1125],{"class":308},[52,102203,389],{"class":79},[52,102205,1125],{"class":308},[52,102207,708],{"class":79},[52,102209,102210],{"class":54,"line":83},[52,102211,102212],{"class":94},"#默认axis=0  传入整数平均分,按行来的\n",[52,102214,102215,102218,102220],{"class":54,"line":91},[52,102216,102217],{"class":79},"np.split(aa,",[52,102219,2313],{"class":308},[52,102221,708],{"class":79},[52,102223,102224],{"class":54,"line":98},[52,102225,98414],{"class":94},[52,102227,102228],{"class":54,"line":107},[52,102229,96578],{"class":62},[52,102231,102232],{"class":54,"line":113},[52,102233,102234],{"class":62},"[array([[ 1,  2,  3,  4,  5,  6],\n",[52,102236,102237],{"class":54,"line":119},[52,102238,102239],{"class":62},"        [ 7,  8,  9, 10, 11, 12]]),\n",[52,102241,102242],{"class":54,"line":126},[52,102243,102244],{"class":62}," array([[13, 14, 15, 16, 17, 18],\n",[52,102246,102247],{"class":54,"line":132},[52,102248,102249],{"class":62},"        [19, 20, 21, 22, 23, 24]]),\n",[52,102251,102252],{"class":54,"line":138},[52,102253,102254],{"class":62}," array([[25, 26, 27, 28, 29, 30],\n",[52,102256,102257],{"class":54,"line":144},[52,102258,102259],{"class":62},"        [31, 32, 33, 34, 35, 36]])]\n",[52,102261,102262],{"class":54,"line":153},[52,102263,102264],{"class":62}," '''\n",[52,102266,102267],{"class":54,"line":159},[52,102268,102124],{"class":94},[52,102270,102271,102274,102276,102278,102280],{"class":54,"line":167},[52,102272,102273],{"class":79},"np.split(aa,[",[52,102275,564],{"class":308},[52,102277,389],{"class":79},[52,102279,1805],{"class":308},[52,102281,7629],{"class":79},[52,102283,102284],{"class":54,"line":173},[52,102285,98414],{"class":94},[52,102287,102288],{"class":54,"line":181},[52,102289,96578],{"class":62},[52,102291,102292],{"class":54,"line":186},[52,102293,102234],{"class":62},[52,102295,102296],{"class":54,"line":191},[52,102297,102239],{"class":62},[52,102299,102300],{"class":54,"line":196},[52,102301,102244],{"class":62},[52,102303,102304],{"class":54,"line":201},[52,102305,102306],{"class":62},"        [19, 20, 21, 22, 23, 24],\n",[52,102308,102309],{"class":54,"line":206},[52,102310,102311],{"class":62},"        [25, 26, 27, 28, 29, 30]]),\n",[52,102313,102314],{"class":54,"line":211},[52,102315,102316],{"class":62}," array([[31, 32, 33, 34, 35, 36]])]\n",[52,102318,102319],{"class":54,"line":218},[52,102320,96578],{"class":62},[52,102322,102323],{"class":54,"line":223},[52,102324,102325],{"class":94},"#axis=1 按照列来分\n",[52,102327,102328,102330,102332,102334,102336,102338,102340],{"class":54,"line":230},[52,102329,102217],{"class":79},[52,102331,2313],{"class":308},[52,102333,389],{"class":79},[52,102335,50164],{"class":1223},[52,102337,292],{"class":58},[52,102339,629],{"class":308},[52,102341,708],{"class":79},[52,102343,102344],{"class":54,"line":239},[52,102345,98414],{"class":94},[52,102347,102348],{"class":54,"line":251},[52,102349,96578],{"class":62},[52,102351,102352],{"class":54,"line":256},[52,102353,102354],{"class":62},"[array([[ 1,  2],\n",[52,102356,102357],{"class":54,"line":262},[52,102358,102359],{"class":62},"        [ 7,  8],\n",[52,102361,102362],{"class":54,"line":268},[52,102363,102364],{"class":62},"        [13, 14],\n",[52,102366,102367],{"class":54,"line":280},[52,102368,102369],{"class":62},"        [19, 20],\n",[52,102371,102372],{"class":54,"line":286},[52,102373,102374],{"class":62},"        [25, 26],\n",[52,102376,102377],{"class":54,"line":300},[52,102378,102379],{"class":62},"        [31, 32]]),\n",[52,102381,102382],{"class":54,"line":314},[52,102383,102384],{"class":62}," array([[ 3,  4],\n",[52,102386,102387],{"class":54,"line":327},[52,102388,102389],{"class":62},"        [ 9, 10],\n",[52,102391,102392],{"class":54,"line":333},[52,102393,102394],{"class":62},"        [15, 16],\n",[52,102396,102397],{"class":54,"line":360},[52,102398,102399],{"class":62},"        [21, 22],\n",[52,102401,102402],{"class":54,"line":365},[52,102403,102404],{"class":62},"        [27, 28],\n",[52,102406,102407],{"class":54,"line":371},[52,102408,102409],{"class":62},"        [33, 34]]),\n",[52,102411,102412],{"class":54,"line":400},[52,102413,102414],{"class":62}," array([[ 5,  6],\n",[52,102416,102417],{"class":54,"line":405},[52,102418,102419],{"class":62},"        [11, 12],\n",[52,102421,102422],{"class":54,"line":411},[52,102423,102424],{"class":62},"        [17, 18],\n",[52,102426,102427],{"class":54,"line":424},[52,102428,102429],{"class":62},"        [23, 24],\n",[52,102431,102432],{"class":54,"line":436},[52,102433,102434],{"class":62},"        [29, 30],\n",[52,102436,102437],{"class":54,"line":449},[52,102438,102439],{"class":62},"        [35, 36]])]\n",[52,102441,102442],{"class":54,"line":2160},[52,102443,102264],{"class":62},[52,102445,102446],{"class":54,"line":2186},[52,102447,102124],{"class":94},[52,102449,102450,102452,102454,102456,102458,102460,102462,102464,102466],{"class":54,"line":2209},[52,102451,102273],{"class":79},[52,102453,629],{"class":308},[52,102455,389],{"class":79},[52,102457,564],{"class":308},[52,102459,44259],{"class":79},[52,102461,50164],{"class":1223},[52,102463,292],{"class":58},[52,102465,629],{"class":308},[52,102467,708],{"class":79},[52,102469,102470],{"class":54,"line":2233},[52,102471,96214],{"class":94},[52,102473,102474],{"class":54,"line":2238},[52,102475,96578],{"class":62},[52,102477,102478],{"class":54,"line":2243},[52,102479,102480],{"class":62},"[array([[ 1],\n",[52,102482,102483],{"class":54,"line":2248},[52,102484,102485],{"class":62},"        [ 7],\n",[52,102487,102488],{"class":54,"line":2257},[52,102489,102490],{"class":62},"        [13],\n",[52,102492,102493],{"class":54,"line":2262},[52,102494,102495],{"class":62},"        [19],\n",[52,102497,102498],{"class":54,"line":2268},[52,102499,102500],{"class":62},"        [25],\n",[52,102502,102503],{"class":54,"line":2297},[52,102504,102505],{"class":62},"        [31]]),\n",[52,102507,102508],{"class":54,"line":2303},[52,102509,102510],{"class":62}," array([[ 2],\n",[52,102512,102513],{"class":54,"line":2318},[52,102514,102515],{"class":62},"        [ 8],\n",[52,102517,102518],{"class":54,"line":2324},[52,102519,102520],{"class":62},"        [14],\n",[52,102522,102523],{"class":54,"line":2353},[52,102524,102525],{"class":62},"        [20],\n",[52,102527,102528],{"class":54,"line":2362},[52,102529,102530],{"class":62},"        [26],\n",[52,102532,102533],{"class":54,"line":2368},[52,102534,102535],{"class":62},"        [32]]),\n",[52,102537,102538],{"class":54,"line":2376},[52,102539,102540],{"class":62}," array([[ 3,  4,  5,  6],\n",[52,102542,102543],{"class":54,"line":2381},[52,102544,102545],{"class":62},"        [ 9, 10, 11, 12],\n",[52,102547,102548],{"class":54,"line":19252},[52,102549,102550],{"class":62},"        [15, 16, 17, 18],\n",[52,102552,102553],{"class":54,"line":19258},[52,102554,102555],{"class":62},"        [21, 22, 23, 24],\n",[52,102557,102558],{"class":54,"line":19281},[52,102559,102560],{"class":62},"        [27, 28, 29, 30],\n",[52,102562,102563],{"class":54,"line":19287},[52,102564,102565],{"class":62},"        [33, 34, 35, 36]])]\n",[52,102567,102568],{"class":54,"line":19310},[52,102569,96578],{"class":62},[52,102571,102572],{"class":54,"line":19324},[52,102573,102574],{"class":94},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[52,102576,102577,102580,102582],{"class":54,"line":19344},[52,102578,102579],{"class":79},"np.vsplit(aa,",[52,102581,2313],{"class":308},[52,102583,708],{"class":79},[52,102585,102586],{"class":54,"line":19350},[52,102587,96214],{"class":94},[52,102589,102590],{"class":54,"line":19361},[52,102591,96578],{"class":62},[52,102593,102594],{"class":54,"line":19384},[52,102595,102234],{"class":62},[52,102597,102598],{"class":54,"line":19406},[52,102599,102239],{"class":62},[52,102601,102602],{"class":54,"line":19411},[52,102603,102244],{"class":62},[52,102605,102606],{"class":54,"line":19417},[52,102607,102249],{"class":62},[52,102609,102610],{"class":54,"line":19431},[52,102611,102254],{"class":62},[52,102613,102614],{"class":54,"line":19444},[52,102615,102259],{"class":62},[52,102617,102618],{"class":54,"line":19449},[52,102619,96578],{"class":62},[52,102621,102622,102625,102627],{"class":54,"line":19463},[52,102623,102624],{"class":79},"np.hsplit(aa,",[52,102626,2313],{"class":308},[52,102628,708],{"class":79},[52,102630,102631],{"class":54,"line":19468},[52,102632,96214],{"class":94},[52,102634,102635],{"class":54,"line":19474},[52,102636,96578],{"class":62},[52,102638,102639],{"class":54,"line":19479},[52,102640,102354],{"class":62},[52,102642,102643],{"class":54,"line":19493},[52,102644,102359],{"class":62},[52,102646,102647],{"class":54,"line":19498},[52,102648,102364],{"class":62},[52,102650,102651],{"class":54,"line":19503},[52,102652,102369],{"class":62},[52,102654,102655],{"class":54,"line":19517},[52,102656,102374],{"class":62},[52,102658,102659],{"class":54,"line":19529},[52,102660,102379],{"class":62},[52,102662,102663],{"class":54,"line":19534},[52,102664,102384],{"class":62},[52,102666,102667],{"class":54,"line":19547},[52,102668,102389],{"class":62},[52,102670,102671],{"class":54,"line":19552},[52,102672,102394],{"class":62},[52,102674,102675],{"class":54,"line":19557},[52,102676,102399],{"class":62},[52,102678,102679],{"class":54,"line":19562},[52,102680,102404],{"class":62},[52,102682,102683],{"class":54,"line":19575},[52,102684,102409],{"class":62},[52,102686,102687],{"class":54,"line":19580},[52,102688,102414],{"class":62},[52,102690,102691],{"class":54,"line":35283},[52,102692,102419],{"class":62},[52,102694,102695],{"class":54,"line":35289},[52,102696,102424],{"class":62},[52,102698,102699],{"class":54,"line":35295},[52,102700,102429],{"class":62},[52,102702,102703],{"class":54,"line":35301},[52,102704,102434],{"class":62},[52,102706,102707],{"class":54,"line":35307},[52,102708,102439],{"class":62},[52,102710,102711],{"class":54,"line":35318},[52,102712,96578],{"class":62},[52,102714,102715,102718,102720,102722,102724],{"class":54,"line":35324},[52,102716,102717],{"class":79},"np.vsplit(aa,[",[52,102719,564],{"class":308},[52,102721,389],{"class":79},[52,102723,1805],{"class":308},[52,102725,7629],{"class":79},[52,102727,102728],{"class":54,"line":35344},[52,102729,96214],{"class":94},[52,102731,102732],{"class":54,"line":35350},[52,102733,96578],{"class":62},[52,102735,102736],{"class":54,"line":35361},[52,102737,102234],{"class":62},[52,102739,102740],{"class":54,"line":35367},[52,102741,102239],{"class":62},[52,102743,102744],{"class":54,"line":35373},[52,102745,102244],{"class":62},[52,102747,102748],{"class":54,"line":35379},[52,102749,102306],{"class":62},[52,102751,102752],{"class":54,"line":35385},[52,102753,102311],{"class":62},[52,102755,102756],{"class":54,"line":35391},[52,102757,102316],{"class":62},[52,102759,102760],{"class":54,"line":35397},[52,102761,102264],{"class":62},[3141,102763,102764],{},"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":47,"searchDepth":66,"depth":66,"links":102766},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":102032,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102773,"title":102774,"body":102775,"description":26025,"extension":3153,"meta":103269,"navigation":122,"path":103270,"seo":103271,"stem":103272,"__hash__":103273},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102776,"toc":103260},[102777,102780,102783,102808,102812,102871,102923,102927,102929,102965,103019,103021,103059,103130,103134,103139,103143,103146,103179,103182,103186,103189,103192,103195,103198,103203,103207,103210,103213,103216,103219,103224,103228,103233,103236,103257],[10,102778,102774],{"id":102779},"_9数学函数",[14,102781,102782],{},"补充回顾：python的列表推导式",[42,102784,102786],{"className":33028,"code":102785,"language":33030,"meta":47,"style":47},"[1\u002Fi for i in a]\n",[49,102787,102788],{"__ignoreMap":47},[52,102789,102790,102792,102794,102796,102799,102801,102803,102805],{"class":54,"line":55},[52,102791,4080],{"class":79},[52,102793,629],{"class":308},[52,102795,2340],{"class":58},[52,102797,102798],{"class":79},"i ",[52,102800,6014],{"class":58},[52,102802,1871],{"class":79},[52,102804,28693],{"class":58},[52,102806,102807],{"class":79}," a]\n",[18,102809,102811],{"id":102810},"_91-求倒数","9.1 求倒数",[42,102813,102815],{"className":33028,"code":102814,"language":33030,"meta":47,"style":47},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[49,102816,102817,102822,102850,102862],{"__ignoreMap":47},[52,102818,102819],{"class":54,"line":55},[52,102820,102821],{"class":94},"#数组求倒数\n",[52,102823,102824,102826,102828,102830,102832,102834,102836,102838,102840,102842,102844,102846,102848],{"class":54,"line":66},[52,102825,3451],{"class":79},[52,102827,292],{"class":58},[52,102829,4080],{"class":79},[52,102831,629],{"class":308},[52,102833,389],{"class":79},[52,102835,564],{"class":308},[52,102837,389],{"class":79},[52,102839,2313],{"class":308},[52,102841,389],{"class":79},[52,102843,3504],{"class":308},[52,102845,389],{"class":79},[52,102847,1805],{"class":308},[52,102849,35896],{"class":79},[52,102851,102852,102854,102856,102859],{"class":54,"line":83},[52,102853,3474],{"class":79},[52,102855,292],{"class":58},[52,102857,102858],{"class":79},"np.array(a)",[52,102860,102861],{"class":94},"#将列表转换为数组\n",[52,102863,102864,102866,102868],{"class":54,"line":91},[52,102865,629],{"class":308},[52,102867,2340],{"class":58},[52,102869,102870],{"class":79},"b\n",[42,102872,102874],{"className":33028,"code":102873,"language":33030,"meta":47,"style":47},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[49,102875,102876,102904,102913,102918],{"__ignoreMap":47},[52,102877,102878,102880,102882,102884,102886,102888,102890,102892,102894,102896,102898,102900,102902],{"class":54,"line":55},[52,102879,3451],{"class":79},[52,102881,292],{"class":58},[52,102883,4080],{"class":79},[52,102885,629],{"class":308},[52,102887,389],{"class":79},[52,102889,564],{"class":308},[52,102891,389],{"class":79},[52,102893,2313],{"class":308},[52,102895,389],{"class":79},[52,102897,3504],{"class":308},[52,102899,389],{"class":79},[52,102901,1805],{"class":308},[52,102903,35896],{"class":79},[52,102905,102906,102908,102910],{"class":54,"line":66},[52,102907,3474],{"class":79},[52,102909,292],{"class":58},[52,102911,102912],{"class":79},"np.array(a)\n",[52,102914,102915],{"class":54,"line":83},[52,102916,102917],{"class":94},"#调用numpy中的函数reciprocal()\n",[52,102919,102920],{"class":54,"line":91},[52,102921,102922],{"class":79},"np.reciprocal(b)\n",[18,102924,102926],{"id":102925},"_92-求平方","9.2 求平方",[14,102928,97180],{},[42,102930,102932],{"className":33028,"code":102931,"language":33030,"meta":47,"style":47},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[49,102933,102934,102939,102944,102960],{"__ignoreMap":47},[52,102935,102936],{"class":54,"line":55},[52,102937,102938],{"class":94},"#square()，求平方\n",[52,102940,102941],{"class":54,"line":66},[52,102942,102943],{"class":94},"#一维数组\n",[52,102945,102946,102948,102950,102952,102954,102956,102958],{"class":54,"line":83},[52,102947,3451],{"class":79},[52,102949,292],{"class":58},[52,102951,95652],{"class":79},[52,102953,629],{"class":308},[52,102955,389],{"class":79},[52,102957,3649],{"class":308},[52,102959,708],{"class":79},[52,102961,102962],{"class":54,"line":91},[52,102963,102964],{"class":79},"np.square(a)\n",[42,102966,102968],{"className":33028,"code":102967,"language":33030,"meta":47,"style":47},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[49,102969,102970,102975,102980,103001],{"__ignoreMap":47},[52,102971,102972],{"class":54,"line":55},[52,102973,102974],{"class":94},"#或者通过循环遍历的形式来计算\n",[52,102976,102977],{"class":54,"line":66},[52,102978,102979],{"class":94},"#这是一个列表\n",[52,102981,102982,102985,102987,102989,102991,102993,102995,102998],{"class":54,"line":83},[52,102983,102984],{"class":79},"[i",[52,102986,3053],{"class":58},[52,102988,102798],{"class":79},[52,102990,6014],{"class":58},[52,102992,1871],{"class":79},[52,102994,28693],{"class":58},[52,102996,102997],{"class":79}," a]",[52,102999,103000],{"class":94},"#这个求完之后在数列当中\n",[52,103002,103003,103006,103008,103010,103012,103014,103016],{"class":54,"line":91},[52,103004,103005],{"class":79},"np.array([i",[52,103007,3053],{"class":58},[52,103009,102798],{"class":79},[52,103011,6014],{"class":58},[52,103013,1871],{"class":79},[52,103015,28693],{"class":58},[52,103017,103018],{"class":79}," a])\n",[14,103020,95941],{},[42,103022,103024],{"className":33028,"code":103023,"language":33030,"meta":47,"style":47},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[49,103025,103026,103030,103054],{"__ignoreMap":47},[52,103027,103028],{"class":54,"line":55},[52,103029,95951],{"class":94},[52,103031,103032,103034,103036,103038,103040,103042,103044,103046,103048,103050,103052],{"class":54,"line":66},[52,103033,95956],{"class":79},[52,103035,292],{"class":58},[52,103037,95652],{"class":79},[52,103039,629],{"class":308},[52,103041,389],{"class":79},[52,103043,3723],{"class":308},[52,103045,95657],{"class":79},[52,103047,3504],{"class":308},[52,103049,389],{"class":79},[52,103051,2313],{"class":308},[52,103053,708],{"class":79},[52,103055,103056],{"class":54,"line":83},[52,103057,103058],{"class":79},"np.square(aa)\n",[42,103060,103062],{"className":33028,"code":103061,"language":33030,"meta":47,"style":47},"#传统的方式\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",[49,103063,103064,103069,103078,103094,103110,103125],{"__ignoreMap":47},[52,103065,103066],{"class":54,"line":55},[52,103067,103068],{"class":94},"#传统的方式\n",[52,103070,103071,103073,103075],{"class":54,"line":66},[52,103072,100837],{"class":79},[52,103074,292],{"class":58},[52,103076,103077],{"class":79},"np.empty_like(aa)\n",[52,103079,103080,103082,103084,103086,103088,103090,103092],{"class":54,"line":83},[52,103081,6014],{"class":58},[52,103083,1871],{"class":79},[52,103085,28693],{"class":58},[52,103087,35093],{"class":308},[52,103089,1216],{"class":79},[52,103091,3504],{"class":308},[52,103093,33436],{"class":79},[52,103095,103096,103098,103100,103102,103104,103106,103108],{"class":54,"line":91},[52,103097,679],{"class":58},[52,103099,1934],{"class":79},[52,103101,28693],{"class":58},[52,103103,35093],{"class":308},[52,103105,1216],{"class":79},[52,103107,2313],{"class":308},[52,103109,33436],{"class":79},[52,103111,103112,103115,103117,103120,103122],{"class":54,"line":98},[52,103113,103114],{"class":79},"        bb[i,j]",[52,103116,292],{"class":58},[52,103118,103119],{"class":79},"aa[i,j]",[52,103121,3053],{"class":58},[52,103123,103124],{"class":79},"aa[i,j]\n",[52,103126,103127],{"class":54,"line":107},[52,103128,103129],{"class":79},"bb\n",[18,103131,103133],{"id":103132},"_93-求各元素的符号","9.3 求各元素的符号",[14,103135,103136],{},[4509,103137],{"alt":47,"src":103138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[18,103140,103142],{"id":103141},"_94-modf函数","9.4 modf函数",[14,103144,103145],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[42,103147,103149],{"className":33028,"code":103148,"language":33030,"meta":47,"style":47},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[49,103150,103151,103174],{"__ignoreMap":47},[52,103152,103153,103155,103157,103159,103161,103163,103165,103167,103169,103172],{"class":54,"line":55},[52,103154,3451],{"class":79},[52,103156,292],{"class":58},[52,103158,95652],{"class":79},[52,103160,2642],{"class":58},[52,103162,3649],{"class":308},[52,103164,389],{"class":79},[52,103166,3649],{"class":308},[52,103168,389],{"class":79},[52,103170,103171],{"class":308},"0.3",[52,103173,708],{"class":79},[52,103175,103176],{"class":54,"line":66},[52,103177,103178],{"class":79},"np.modf(a)\n",[14,103180,103181],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[18,103183,103185],{"id":103184},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,103187,103188],{},"np.cell()",[14,103190,103191],{},"np.floor()",[14,103193,103194],{},"np.rint()",[14,103196,103197],{},"对各元素分别向上取整、向下取整、四舍五入",[14,103199,103200],{},[4509,103201],{"alt":47,"src":103202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[18,103204,103206],{"id":103205},"_96-around函数","9.6 around()函数",[14,103208,103209],{},"around()函数也可以实现对数的小数位数进行操作",[14,103211,103212],{},"其中的参数：",[14,103214,103215],{},"1.要传的数组",[14,103217,103218],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,103220,103221],{},[4509,103222],{"alt":47,"src":103223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[18,103225,103227],{"id":103226},"_97-三角函数","9.7 三角函数",[14,103229,103230],{},[4509,103231],{"alt":47,"src":103232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,103234,103235],{},"引入图像模块非常重要",[42,103237,103239],{"className":33028,"code":103238,"language":33030,"meta":47,"style":47},"from matplotlib import pyplot as plt\n",[49,103240,103241],{"__ignoreMap":47},[52,103242,103243,103245,103248,103250,103253,103255],{"class":54,"line":55},[52,103244,33387],{"class":58},[52,103246,103247],{"class":79}," matplotlib ",[52,103249,33042],{"class":58},[52,103251,103252],{"class":79}," pyplot ",[52,103254,34033],{"class":58},[52,103256,34087],{"class":79},[3141,103258,103259],{},"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":47,"searchDepth":66,"depth":66,"links":103261},[103262,103263,103264,103265,103266,103267,103268],{"id":102810,"depth":66,"text":102811},{"id":102925,"depth":66,"text":102926},{"id":103132,"depth":66,"text":103133},{"id":103141,"depth":66,"text":103142},{"id":103184,"depth":66,"text":103185},{"id":103205,"depth":66,"text":103206},{"id":103226,"depth":66,"text":103227},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102774,"description":26025},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":103275,"title":103276,"body":103277,"description":26025,"extension":3153,"meta":103281,"navigation":122,"path":103282,"seo":103283,"stem":103284,"__hash__":103285},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":103278,"toc":103279},[],{"title":47,"searchDepth":66,"depth":66,"links":103280},[],{"category":53070},"\u002Fwiki\u002F2025-08-14-numpy",{"title":103276,"description":26025},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":103287,"title":103288,"body":103289,"description":47,"extension":3153,"meta":105297,"navigation":122,"path":105298,"seo":105299,"stem":105300,"__hash__":105301},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":103290,"toc":105273},[103291,103294,103298,103301,103304,103310,103313,103336,103339,103373,103376,103417,103421,103424,103517,103520,103564,103567,103584,103587,103601,103604,103607,103652,103655,103692,103696,103699,103705,103710,103730,103734,103737,103803,103806,103824,103828,103831,103860,103870,103876,103880,103883,103889,103900,103904,103907,103937,103940,104220,104223,104226,104237,104240,104243,104265,104272,104275,104293,104296,104299,104313,104321,104324,104350,104356,104359,104362,104372,104384,104404,104413,104433,104443,104467,104480,104494,104499,104540,104557,104582,104594,104614,104620,104665,104684,104701,104714,104730,104737,104749,104758,104793,104814,104839,104852,104876,104891,104916,104919,104940,104949,104952,104963,104967,104970,104976,104988,104995,104999,105002,105014,105017,105031,105034,105044,105054,105057,105097,105100,105104,105110,105113,105127,105131,105134,105167,105171,105174,105197,105205,105208,105214,105220,105223,105226,105254,105258,105261,105267,105270],[10,103292,103288],{"id":103293},"_1环境安装与第一个-mujoco-程序",[18,103295,103297],{"id":103296},"_1目标说明","1.目标说明",[14,103299,103300],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,103302,103303],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[42,103305,103308],{"className":103306,"code":103307,"language":8154,"meta":47},[8152],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[49,103309,103307],{"__ignoreMap":47},[14,103311,103312],{},"需要掌握:",[1696,103314,103315,103318,103321,103326,103331],{},[32,103316,103317],{},"Fedora 44 下 MuJoCo 的系统依赖",[32,103319,103320],{},"Python 虚拟环境创建",[32,103322,103323],{},[49,103324,103325],{},"mujoco.MjModel",[32,103327,103328],{},[49,103329,103330],{},"mujoco.MjData",[32,103332,103333],{},[49,103334,103335],{},"mujoco.mj_step(model, data)",[14,103337,103338],{},"MuJoCo 中最重要的两个对象:",[3353,103340,103341,103351],{},[3356,103342,103343],{},[3359,103344,103345,103348],{},[3362,103346,103347],{"align":26385},"对象",[3362,103349,103350],{"align":26385},"含义",[3399,103352,103353,103363],{},[3359,103354,103355,103360],{},[3404,103356,103357],{"align":26385},[49,103358,103359],{},"MjModel",[3404,103361,103362],{"align":26385},"模型结构，来自 XML，基本不随时间变化",[3359,103364,103365,103370],{},[3404,103366,103367],{"align":26385},[49,103368,103369],{},"MjData",[3404,103371,103372],{"align":26385},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,103374,103375],{},"可以先用一个类比理解：",[3353,103377,103378,103388],{},[3356,103379,103380],{},[3359,103381,103382,103385],{},[3362,103383,103384],{"align":26385},"类比",[3362,103386,103387],{"align":26385},"MuJoCo 对象",[3399,103389,103390,103399,103408],{},[3359,103391,103392,103395],{},[3404,103393,103394],{"align":26385},"游戏地图和角色配置",[3404,103396,103397],{"align":26385},[49,103398,103359],{},[3359,103400,103401,103404],{},[3404,103402,103403],{"align":26385},"游戏运行到当前帧的状态",[3404,103405,103406],{"align":26385},[49,103407,103369],{},[3359,103409,103410,103413],{},[3404,103411,103412],{"align":26385},"前进一帧",[3404,103414,103415],{"align":26385},[49,103416,103335],{},[18,103418,103420],{"id":103419},"_2环境与依赖安装","2.环境与依赖安装",[14,103422,103423],{},"Fedora 44 系统依赖:",[42,103425,103427],{"className":26471,"code":103426,"language":26473,"meta":47,"style":47},"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",[49,103428,103429,103441,103454,103467,103477,103487,103506],{"__ignoreMap":47},[52,103430,103431,103433,103435,103437,103439],{"class":54,"line":55},[52,103432,27226],{"class":75},[52,103434,28965],{"class":62},[52,103436,26483],{"class":62},[52,103438,29050],{"class":308},[52,103440,27328],{"class":308},[52,103442,103443,103446,103449,103452],{"class":54,"line":66},[52,103444,103445],{"class":62},"  python3",[52,103447,103448],{"class":62}," python3-pip",[52,103450,103451],{"class":62}," python3-virtualenv",[52,103453,27328],{"class":308},[52,103455,103456,103459,103462,103465],{"class":54,"line":83},[52,103457,103458],{"class":62},"  mesa-libGL",[52,103460,103461],{"class":62}," mesa-libGLU",[52,103463,103464],{"class":62}," mesa-dri-drivers",[52,103466,27328],{"class":308},[52,103468,103469,103472,103475],{"class":54,"line":91},[52,103470,103471],{"class":62},"  libglvnd-glx",[52,103473,103474],{"class":62}," libglvnd-opengl",[52,103476,27328],{"class":308},[52,103478,103479,103482,103485],{"class":54,"line":98},[52,103480,103481],{"class":62},"  glfw",[52,103483,103484],{"class":62}," glfw-devel",[52,103486,27328],{"class":308},[52,103488,103489,103492,103495,103498,103501,103504],{"class":54,"line":107},[52,103490,103491],{"class":62},"  libX11",[52,103493,103494],{"class":62}," libXcursor",[52,103496,103497],{"class":62}," libXi",[52,103499,103500],{"class":62}," libXinerama",[52,103502,103503],{"class":62}," libXrandr",[52,103505,27328],{"class":308},[52,103507,103508,103511,103514],{"class":54,"line":113},[52,103509,103510],{"class":62},"  gcc",[52,103512,103513],{"class":62}," gcc-c++",[52,103515,103516],{"class":62}," make\n",[14,103518,103519],{},"创建 Python 环境:",[42,103521,103523],{"className":26471,"code":103522,"language":26473,"meta":47,"style":47},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[49,103524,103525,103539,103547],{"__ignoreMap":47},[52,103526,103527,103530,103533,103536],{"class":54,"line":55},[52,103528,103529],{"class":75},"python3",[52,103531,103532],{"class":308}," -m",[52,103534,103535],{"class":62}," venv",[52,103537,103538],{"class":62}," .venv\n",[52,103540,103541,103544],{"class":54,"line":66},[52,103542,103543],{"class":308},"source",[52,103545,103546],{"class":62}," .venv\u002Fbin\u002Factivate\n",[52,103548,103549,103551,103553,103556,103558,103561],{"class":54,"line":83},[52,103550,33030],{"class":75},[52,103552,103532],{"class":308},[52,103554,103555],{"class":62}," pip",[52,103557,26483],{"class":62},[52,103559,103560],{"class":308}," --upgrade",[52,103562,103563],{"class":62}," pip\n",[14,103565,103566],{},"pip 安装:",[42,103568,103570],{"className":26471,"code":103569,"language":26473,"meta":47,"style":47},"pip install \"mujoco>=2.3\" numpy\n",[49,103571,103572],{"__ignoreMap":47},[52,103573,103574,103576,103578,103581],{"class":54,"line":55},[52,103575,26480],{"class":75},[52,103577,26483],{"class":62},[52,103579,103580],{"class":62}," \"mujoco>=2.3\"",[52,103582,103583],{"class":62}," numpy\n",[14,103585,103586],{},"安装完成后，先做最小检查：",[42,103588,103590],{"className":26471,"code":103589,"language":26473,"meta":47,"style":47},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[49,103591,103592],{"__ignoreMap":47},[52,103593,103594,103596,103598],{"class":54,"line":55},[52,103595,33030],{"class":75},[52,103597,33008],{"class":308},[52,103599,103600],{"class":62}," \"import mujoco; print(mujoco.__version__)\"\n",[14,103602,103603],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,103605,103606],{},"conda 安装:",[42,103608,103610],{"className":26471,"code":103609,"language":26473,"meta":47,"style":47},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[49,103611,103612,103632,103642],{"__ignoreMap":47},[52,103613,103614,103616,103618,103620,103623,103626,103629],{"class":54,"line":55},[52,103615,32980],{"class":75},[52,103617,31826],{"class":62},[52,103619,27765],{"class":308},[52,103621,103622],{"class":62}," mujoco-study",[52,103624,103625],{"class":62}," python=",[52,103627,103628],{"class":308},"3.10",[52,103630,103631],{"class":308}," -y\n",[52,103633,103634,103636,103639],{"class":54,"line":66},[52,103635,32980],{"class":75},[52,103637,103638],{"class":62}," activate",[52,103640,103641],{"class":62}," mujoco-study\n",[52,103643,103644,103646,103648,103650],{"class":54,"line":83},[52,103645,26480],{"class":75},[52,103647,26483],{"class":62},[52,103649,103580],{"class":62},[52,103651,103583],{"class":62},[14,103653,103654],{},"版本冲突说明:",[1696,103656,103657,103663,103673,103682],{},[32,103658,103659,103660,31035],{},"不要安装 ",[49,103661,103662],{},"mujoco-py",[32,103664,103665,103666,103668,103669,103672],{},"如果旧项目里同时安装了 ",[49,103667,103662],{}," 和 ",[49,103670,103671],{},"mujoco","，建议新建干净虚拟环境。",[32,103674,103675,103678,103679,31035],{},[49,103676,103677],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[49,103680,103681],{},"~\u002F.mujoco\u002Fmujoco210",[32,103683,103684,103685,85189,103688,103691],{},"离屏渲染可能涉及 OpenGL 后端，",[49,103686,103687],{},"MUJOCO_GL=egl",[49,103689,103690],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[18,103693,103695],{"id":103694},"_3核心概念解释","3.核心概念解释",[14,103697,103698],{},"MuJoCo 的基本执行流程:",[42,103700,103703],{"className":103701,"code":103702,"language":8154,"meta":47},[8152],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[49,103704,103702],{"__ignoreMap":47},[14,103706,103707,103709],{},[49,103708,103359],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,103711,103712,103714,103715,3426,103718,3426,103721,3426,103724,3426,103727,31035],{},[49,103713,103369],{}," 存放仿真运行时状态，例如 ",[49,103716,103717],{},"data.time",[49,103719,103720],{},"data.qpos",[49,103722,103723],{},"data.qvel",[49,103725,103726],{},"data.ctrl",[49,103728,103729],{},"data.xpos",[3195,103731,103733],{"id":103732},"xml-是什么","XML 是什么",[14,103735,103736],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[42,103738,103740],{"className":55717,"code":103739,"language":55719,"meta":47,"style":47},"\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",[49,103741,103742,103764,103795],{"__ignoreMap":47},[52,103743,103744,103746,103748,103750,103752,103754,103757,103759,103762],{"class":54,"line":55},[52,103745,698],{"class":79},[52,103747,54450],{"class":53950},[52,103749,17568],{"class":75},[52,103751,292],{"class":79},[52,103753,56141],{"class":62},[52,103755,103756],{"class":75}," pos",[52,103758,292],{"class":79},[52,103760,103761],{"class":62},"\"0 0 1\"",[52,103763,53957],{"class":79},[52,103765,103766,103768,103771,103773,103775,103778,103780,103782,103784,103787,103789,103792],{"class":54,"line":66},[52,103767,54794],{"class":79},[52,103769,103770],{"class":53950},"geom",[52,103772,17568],{"class":75},[52,103774,292],{"class":79},[52,103776,103777],{"class":62},"\"box_geom\"",[52,103779,56474],{"class":75},[52,103781,292],{"class":79},[52,103783,56141],{"class":62},[52,103785,103786],{"class":75}," size",[52,103788,292],{"class":79},[52,103790,103791],{"class":62},"\"0.1 0.1 0.1\"",[52,103793,103794],{"class":79},"\u002F>\n",[52,103796,103797,103799,103801],{"class":54,"line":83},[52,103798,54435],{"class":79},[52,103800,54450],{"class":53950},[52,103802,53957],{"class":79},[14,103804,103805],{},"这段意思是：",[1696,103807,103808,103814,103821],{},[32,103809,103810,103811,103813],{},"创建一个叫 ",[49,103812,56364],{}," 的刚体。",[32,103815,103816,103817,103820],{},"它初始放在 ",[49,103818,103819],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[32,103822,103823],{},"它里面有一个盒子形状的几何体。",[3195,103825,103827],{"id":103826},"timestep-是什么","timestep 是什么",[14,103829,103830],{},"XML 里的：",[42,103832,103834],{"className":55717,"code":103833,"language":55719,"meta":47,"style":47},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[49,103835,103836],{"__ignoreMap":47},[52,103837,103838,103840,103842,103845,103847,103850,103853,103855,103858],{"class":54,"line":55},[52,103839,698],{"class":79},[52,103841,71816],{"class":53950},[52,103843,103844],{"class":75}," timestep",[52,103846,292],{"class":79},[52,103848,103849],{"class":62},"\"0.01\"",[52,103851,103852],{"class":75}," gravity",[52,103854,292],{"class":79},[52,103856,103857],{"class":62},"\"0 0 -9.81\"",[52,103859,103794],{"class":79},[14,103861,103862,103863,103866,103867,103869],{},"表示每调用一次 ",[49,103864,103865],{},"mj_step","，仿真时间前进 ",[49,103868,41636],{}," 秒。循环 100 次，大约就是 1 秒：",[42,103871,103874],{"className":103872,"code":103873,"language":8154,"meta":47},[8152],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[49,103875,103873],{"__ignoreMap":47},[3195,103877,103879],{"id":103878},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,103881,103882],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[42,103884,103887],{"className":103885,"code":103886,"language":8154,"meta":47},[8152],"x y z qw qx qy qz\n",[49,103888,103886],{"__ignoreMap":47},[14,103890,103891,103892,103895,103896,103899],{},"表示一个自由刚体的位置和姿态。其中 ",[49,103893,103894],{},"x y z"," 是位置，",[49,103897,103898],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[18,103901,103903],{"id":103902},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,103905,103906],{},"新建文件:",[42,103908,103910],{"className":26471,"code":103909,"language":26473,"meta":47,"style":47},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[49,103911,103912,103922,103929],{"__ignoreMap":47},[52,103913,103914,103917,103919],{"class":54,"line":55},[52,103915,103916],{"class":75},"mkdir",[52,103918,31866],{"class":308},[52,103920,103921],{"class":62}," mujoco_tutorial\n",[52,103923,103924,103927],{"class":54,"line":66},[52,103925,103926],{"class":308},"cd",[52,103928,103921],{"class":62},[52,103930,103931,103934],{"class":54,"line":83},[52,103932,103933],{"class":75},"touch",[52,103935,103936],{"class":62}," ch1_first_sim.py\n",[14,103938,103939],{},"写入:",[42,103941,103943],{"className":33028,"code":103942,"language":33030,"meta":47,"style":47},"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",[49,103944,103945,103952,103956,103960,103970,103975,103980,103984,103989,103994,103998,104003,104008,104013,104018,104023,104028,104032,104036,104040,104053,104067,104077,104081,104093,104105,104117,104129,104141,104145,104162,104167,104171,104182,104193,104197,104201,104215],{"__ignoreMap":47},[52,103946,103947,103949],{"class":54,"line":55},[52,103948,33042],{"class":58},[52,103950,103951],{"class":79}," mujoco\n",[52,103953,103954],{"class":54,"line":66},[52,103955,123],{"emptyLinePlaceholder":122},[52,103957,103958],{"class":54,"line":83},[52,103959,123],{"emptyLinePlaceholder":122},[52,103961,103962,103965,103967],{"class":54,"line":91},[52,103963,103964],{"class":308},"XML",[52,103966,16212],{"class":58},[52,103968,103969],{"class":62}," \"\"\"\n",[52,103971,103972],{"class":54,"line":98},[52,103973,103974],{"class":62},"\u003Cmujoco model=\"first_sim\">\n",[52,103976,103977],{"class":54,"line":107},[52,103978,103979],{"class":62},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[52,103981,103982],{"class":54,"line":113},[52,103983,123],{"emptyLinePlaceholder":122},[52,103985,103986],{"class":54,"line":119},[52,103987,103988],{"class":62},"  \u003Cworldbody>\n",[52,103990,103991],{"class":54,"line":126},[52,103992,103993],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[52,103995,103996],{"class":54,"line":132},[52,103997,123],{"emptyLinePlaceholder":122},[52,103999,104000],{"class":54,"line":138},[52,104001,104002],{"class":62},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[52,104004,104005],{"class":54,"line":144},[52,104006,104007],{"class":62},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[52,104009,104010],{"class":54,"line":153},[52,104011,104012],{"class":62},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[52,104014,104015],{"class":54,"line":159},[52,104016,104017],{"class":62},"    \u003C\u002Fbody>\n",[52,104019,104020],{"class":54,"line":167},[52,104021,104022],{"class":62},"  \u003C\u002Fworldbody>\n",[52,104024,104025],{"class":54,"line":173},[52,104026,104027],{"class":62},"\u003C\u002Fmujoco>\n",[52,104029,104030],{"class":54,"line":181},[52,104031,98348],{"class":62},[52,104033,104034],{"class":54,"line":186},[52,104035,123],{"emptyLinePlaceholder":122},[52,104037,104038],{"class":54,"line":191},[52,104039,123],{"emptyLinePlaceholder":122},[52,104041,104042,104044,104046,104049,104051],{"class":54,"line":196},[52,104043,34597],{"class":58},[52,104045,245],{"class":75},[52,104047,104048],{"class":79},"() -> ",[52,104050,98336],{"class":308},[52,104052,6718],{"class":79},[52,104054,104055,104058,104060,104063,104065],{"class":54,"line":201},[52,104056,104057],{"class":79},"    model ",[52,104059,292],{"class":58},[52,104061,104062],{"class":79}," mujoco.MjModel.from_xml_string(",[52,104064,103964],{"class":308},[52,104066,708],{"class":79},[52,104068,104069,104072,104074],{"class":54,"line":206},[52,104070,104071],{"class":79},"    data ",[52,104073,292],{"class":58},[52,104075,104076],{"class":79}," mujoco.MjData(model)\n",[52,104078,104079],{"class":54,"line":211},[52,104080,123],{"emptyLinePlaceholder":122},[52,104082,104083,104085,104087,104090],{"class":54,"line":218},[52,104084,33949],{"class":308},[52,104086,1216],{"class":79},[52,104088,104089],{"class":62},"\"nq:\"",[52,104091,104092],{"class":79},", model.nq)\n",[52,104094,104095,104097,104099,104102],{"class":54,"line":223},[52,104096,33949],{"class":308},[52,104098,1216],{"class":79},[52,104100,104101],{"class":62},"\"nv:\"",[52,104103,104104],{"class":79},", model.nv)\n",[52,104106,104107,104109,104111,104114],{"class":54,"line":230},[52,104108,33949],{"class":308},[52,104110,1216],{"class":79},[52,104112,104113],{"class":62},"\"nu:\"",[52,104115,104116],{"class":79},", model.nu)\n",[52,104118,104119,104121,104123,104126],{"class":54,"line":239},[52,104120,33949],{"class":308},[52,104122,1216],{"class":79},[52,104124,104125],{"class":62},"\"initial time:\"",[52,104127,104128],{"class":79},", data.time)\n",[52,104130,104131,104133,104135,104138],{"class":54,"line":251},[52,104132,33949],{"class":308},[52,104134,1216],{"class":79},[52,104136,104137],{"class":62},"\"initial qpos:\"",[52,104139,104140],{"class":79},", data.qpos.copy())\n",[52,104142,104143],{"class":54,"line":256},[52,104144,123],{"emptyLinePlaceholder":122},[52,104146,104147,104149,104152,104154,104156,104158,104160],{"class":54,"line":262},[52,104148,679],{"class":58},[52,104150,104151],{"class":79}," _ ",[52,104153,28693],{"class":58},[52,104155,35093],{"class":308},[52,104157,1216],{"class":79},[52,104159,591],{"class":308},[52,104161,33436],{"class":79},[52,104163,104164],{"class":54,"line":268},[52,104165,104166],{"class":79},"        mujoco.mj_step(model, data)\n",[52,104168,104169],{"class":54,"line":280},[52,104170,123],{"emptyLinePlaceholder":122},[52,104172,104173,104175,104177,104180],{"class":54,"line":286},[52,104174,33949],{"class":308},[52,104176,1216],{"class":79},[52,104178,104179],{"class":62},"\"final time:\"",[52,104181,104128],{"class":79},[52,104183,104184,104186,104188,104191],{"class":54,"line":300},[52,104185,33949],{"class":308},[52,104187,1216],{"class":79},[52,104189,104190],{"class":62},"\"final qpos:\"",[52,104192,104140],{"class":79},[52,104194,104195],{"class":54,"line":314},[52,104196,123],{"emptyLinePlaceholder":122},[52,104198,104199],{"class":54,"line":327},[52,104200,123],{"emptyLinePlaceholder":122},[52,104202,104203,104205,104207,104210,104213],{"class":54,"line":333},[52,104204,4578],{"class":58},[52,104206,33870],{"class":308},[52,104208,104209],{"class":58}," ==",[52,104211,104212],{"class":62}," \"__main__\"",[52,104214,6718],{"class":79},[52,104216,104217],{"class":54,"line":360},[52,104218,104219],{"class":79},"    main()\n",[3195,104221,104222],{"id":104222},"代码逐段解释",[14,104224,104225],{},"导入库：",[42,104227,104229],{"className":33028,"code":104228,"language":33030,"meta":47,"style":47},"import mujoco\n",[49,104230,104231],{"__ignoreMap":47},[52,104232,104233,104235],{"class":54,"line":55},[52,104234,33042],{"class":58},[52,104236,103951],{"class":79},[14,104238,104239],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,104241,104242],{},"定义 XML：",[42,104244,104246],{"className":33028,"code":104245,"language":33030,"meta":47,"style":47},"XML = \"\"\"\n...\n\"\"\"\n",[49,104247,104248,104256,104261],{"__ignoreMap":47},[52,104249,104250,104252,104254],{"class":54,"line":55},[52,104251,103964],{"class":308},[52,104253,16212],{"class":58},[52,104255,103969],{"class":62},[52,104257,104258],{"class":54,"line":66},[52,104259,104260],{"class":62},"...\n",[52,104262,104263],{"class":54,"line":83},[52,104264,98348],{"class":62},[14,104266,104267,104268,104271],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[49,104269,104270],{},"freejoint"," 的方块。",[14,104273,104274],{},"编译模型：",[42,104276,104278],{"className":33028,"code":104277,"language":33030,"meta":47,"style":47},"model = mujoco.MjModel.from_xml_string(XML)\n",[49,104279,104280],{"__ignoreMap":47},[52,104281,104282,104285,104287,104289,104291],{"class":54,"line":55},[52,104283,104284],{"class":79},"model ",[52,104286,292],{"class":58},[52,104288,104062],{"class":79},[52,104290,103964],{"class":308},[52,104292,708],{"class":79},[14,104294,104295],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,104297,104298],{},"创建数据：",[42,104300,104302],{"className":33028,"code":104301,"language":33030,"meta":47,"style":47},"data = mujoco.MjData(model)\n",[49,104303,104304],{"__ignoreMap":47},[52,104305,104306,104309,104311],{"class":54,"line":55},[52,104307,104308],{"class":79},"data ",[52,104310,292],{"class":58},[52,104312,104076],{"class":79},[14,104314,104315,104317,104318,104320],{},[49,104316,36051],{}," 会保存仿真当前状态。刚创建时，时间是 ",[49,104319,692],{},"，方块还在初始位置。",[14,104322,104323],{},"推进仿真：",[42,104325,104327],{"className":33028,"code":104326,"language":33030,"meta":47,"style":47},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[49,104328,104329,104345],{"__ignoreMap":47},[52,104330,104331,104333,104335,104337,104339,104341,104343],{"class":54,"line":55},[52,104332,6014],{"class":58},[52,104334,104151],{"class":79},[52,104336,28693],{"class":58},[52,104338,35093],{"class":308},[52,104340,1216],{"class":79},[52,104342,591],{"class":308},[52,104344,33436],{"class":79},[52,104346,104347],{"class":54,"line":66},[52,104348,104349],{"class":79},"    mujoco.mj_step(model, data)\n",[14,104351,104352,104353,104355],{},"每次 ",[49,104354,103865],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[3195,104357,104358],{"id":104358},"代码逐行细讲",[14,104360,104361],{},"下面把完整代码按新手视角拆开讲。",[42,104363,104364],{"className":33028,"code":104228,"language":33030,"meta":47,"style":47},[49,104365,104366],{"__ignoreMap":47},[52,104367,104368,104370],{"class":54,"line":55},[52,104369,33042],{"class":58},[52,104371,103951],{"class":79},[14,104373,104374,104376,104377,3426,104379,3426,104381,31035],{},[49,104375,33042],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[49,104378,103325],{},[49,104380,103330],{},[49,104382,104383],{},"mujoco.mj_step",[42,104385,104386],{"className":33028,"code":104245,"language":33030,"meta":47,"style":47},[49,104387,104388,104396,104400],{"__ignoreMap":47},[52,104389,104390,104392,104394],{"class":54,"line":55},[52,104391,103964],{"class":308},[52,104393,16212],{"class":58},[52,104395,103969],{"class":62},[52,104397,104398],{"class":54,"line":66},[52,104399,104260],{"class":62},[52,104401,104402],{"class":54,"line":83},[52,104403,98348],{"class":62},[14,104405,104406,104408,104409,104412],{},[49,104407,103964],{}," 是一个变量名。右边的三引号 ",[49,104410,104411],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[42,104414,104415],{"className":55717,"code":103974,"language":55719,"meta":47,"style":47},[49,104416,104417],{"__ignoreMap":47},[52,104418,104419,104421,104423,104426,104428,104431],{"class":54,"line":55},[52,104420,698],{"class":79},[52,104422,103671],{"class":53950},[52,104424,104425],{"class":75}," model",[52,104427,292],{"class":79},[52,104429,104430],{"class":62},"\"first_sim\"",[52,104432,53957],{"class":79},[14,104434,104435,104436,104439,104440,31035],{},"这是 XML 的根标签。",[49,104437,104438],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[49,104441,104442],{},"first_sim",[42,104444,104445],{"className":55717,"code":103833,"language":55719,"meta":47,"style":47},[49,104446,104447],{"__ignoreMap":47},[52,104448,104449,104451,104453,104455,104457,104459,104461,104463,104465],{"class":54,"line":55},[52,104450,698],{"class":79},[52,104452,71816],{"class":53950},[52,104454,103844],{"class":75},[52,104456,292],{"class":79},[52,104458,103849],{"class":62},[52,104460,103852],{"class":75},[52,104462,292],{"class":79},[52,104464,103857],{"class":62},[52,104466,103794],{"class":79},[14,104468,104469,104471,104472,104475,104476,104479],{},[49,104470,71816],{}," 用来设置仿真参数。",[49,104473,104474],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[49,104477,104478],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[42,104481,104483],{"className":55717,"code":104482,"language":55719,"meta":47,"style":47},"\u003Cworldbody>\n",[49,104484,104485],{"__ignoreMap":47},[52,104486,104487,104489,104492],{"class":54,"line":55},[52,104488,698],{"class":79},[52,104490,104491],{"class":53950},"worldbody",[52,104493,53957],{"class":79},[14,104495,104496,104498],{},[49,104497,104491],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[42,104500,104502],{"className":55717,"code":104501,"language":55719,"meta":47,"style":47},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[49,104503,104504],{"__ignoreMap":47},[52,104505,104506,104508,104510,104512,104514,104517,104519,104521,104524,104526,104528,104531,104533,104535,104538],{"class":54,"line":55},[52,104507,698],{"class":79},[52,104509,103770],{"class":53950},[52,104511,17568],{"class":75},[52,104513,292],{"class":79},[52,104515,104516],{"class":62},"\"floor\"",[52,104518,56474],{"class":75},[52,104520,292],{"class":79},[52,104522,104523],{"class":62},"\"plane\"",[52,104525,103786],{"class":75},[52,104527,292],{"class":79},[52,104529,104530],{"class":62},"\"2 2 0.1\"",[52,104532,81417],{"class":75},[52,104534,292],{"class":79},[52,104536,104537],{"class":62},"\"0.8 0.8 0.8 1\"",[52,104539,103794],{"class":79},[14,104541,104542,104543,104545,104546,104549,104550,104553,104554,104556],{},"这行创建地面。",[49,104544,103770],{}," 是几何体。",[49,104547,104548],{},"name=\"floor\""," 是名字。",[49,104551,104552],{},"type=\"plane\""," 表示平面。",[49,104555,57760],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[42,104558,104560],{"className":55717,"code":104559,"language":55719,"meta":47,"style":47},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[49,104561,104562],{"__ignoreMap":47},[52,104563,104564,104566,104568,104570,104572,104574,104576,104578,104580],{"class":54,"line":55},[52,104565,698],{"class":79},[52,104567,54450],{"class":53950},[52,104569,17568],{"class":75},[52,104571,292],{"class":79},[52,104573,56141],{"class":62},[52,104575,103756],{"class":75},[52,104577,292],{"class":79},[52,104579,103761],{"class":62},[52,104581,53957],{"class":79},[14,104583,104584,104585,31035,104587,104590,104591,104593],{},"这行创建一个刚体，名字叫 ",[49,104586,56364],{},[49,104588,104589],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[49,104592,103819],{},"，也就是离地面 1 米高。",[42,104595,104597],{"className":55717,"code":104596,"language":55719,"meta":47,"style":47},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[49,104598,104599],{"__ignoreMap":47},[52,104600,104601,104603,104605,104607,104609,104612],{"class":54,"line":55},[52,104602,698],{"class":79},[52,104604,104270],{"class":53950},[52,104606,17568],{"class":75},[52,104608,292],{"class":79},[52,104610,104611],{"class":62},"\"box_free\"",[52,104613,103794],{"class":79},[14,104615,104616,104617,104619],{},"这行很重要。",[49,104618,104270],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[42,104621,104623],{"className":55717,"code":104622,"language":55719,"meta":47,"style":47},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[49,104624,104625],{"__ignoreMap":47},[52,104626,104627,104629,104631,104633,104635,104637,104639,104641,104643,104645,104647,104649,104652,104654,104656,104658,104660,104663],{"class":54,"line":55},[52,104628,698],{"class":79},[52,104630,103770],{"class":53950},[52,104632,17568],{"class":75},[52,104634,292],{"class":79},[52,104636,103777],{"class":62},[52,104638,56474],{"class":75},[52,104640,292],{"class":79},[52,104642,56141],{"class":62},[52,104644,103786],{"class":75},[52,104646,292],{"class":79},[52,104648,103791],{"class":62},[52,104650,104651],{"class":75}," mass",[52,104653,292],{"class":79},[52,104655,419],{"class":62},[52,104657,81417],{"class":75},[52,104659,292],{"class":79},[52,104661,104662],{"class":62},"\"1 0 0 1\"",[52,104664,103794],{"class":79},[14,104666,104667,104668,104671,104672,104675,104676,104679,104680,104683],{},"这行给 box body 添加一个盒子形状。",[49,104669,104670],{},"type=\"box\""," 表示形状是盒子。",[49,104673,104674],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[49,104677,104678],{},"mass=\"1\""," 表示质量是 1。",[49,104681,104682],{},"rgba=\"1 0 0 1\""," 表示红色。",[42,104685,104687],{"className":33028,"code":104686,"language":33030,"meta":47,"style":47},"def main() -> None:\n",[49,104688,104689],{"__ignoreMap":47},[52,104690,104691,104693,104695,104697,104699],{"class":54,"line":55},[52,104692,34597],{"class":58},[52,104694,245],{"class":75},[52,104696,104048],{"class":79},[52,104698,98336],{"class":308},[52,104700,6718],{"class":79},[14,104702,104703,104705,104706,104709,104710,104713],{},[49,104704,34597],{}," 用来定义函数。这里定义了一个叫 ",[49,104707,104708],{},"main"," 的函数。",[49,104711,104712],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[42,104715,104716],{"className":33028,"code":104277,"language":33030,"meta":47,"style":47},[49,104717,104718],{"__ignoreMap":47},[52,104719,104720,104722,104724,104726,104728],{"class":54,"line":55},[52,104721,104284],{"class":79},[52,104723,292],{"class":58},[52,104725,104062],{"class":79},[52,104727,103964],{"class":308},[52,104729,708],{"class":79},[14,104731,104732,104733,104736],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[49,104734,104735],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[42,104738,104739],{"className":33028,"code":104301,"language":33030,"meta":47,"style":47},[49,104740,104741],{"__ignoreMap":47},[52,104742,104743,104745,104747],{"class":54,"line":55},[52,104744,104308],{"class":79},[52,104746,292],{"class":58},[52,104748,104076],{"class":79},[14,104750,104751,104752,104754,104755,104757],{},"这行创建仿真数据。",[49,104753,36051],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[49,104756,36051],{}," 都会变化。",[42,104759,104761],{"className":33028,"code":104760,"language":33030,"meta":47,"style":47},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[49,104762,104763,104773,104783],{"__ignoreMap":47},[52,104764,104765,104767,104769,104771],{"class":54,"line":55},[52,104766,33065],{"class":308},[52,104768,1216],{"class":79},[52,104770,104089],{"class":62},[52,104772,104092],{"class":79},[52,104774,104775,104777,104779,104781],{"class":54,"line":66},[52,104776,33065],{"class":308},[52,104778,1216],{"class":79},[52,104780,104101],{"class":62},[52,104782,104104],{"class":79},[52,104784,104785,104787,104789,104791],{"class":54,"line":83},[52,104786,33065],{"class":308},[52,104788,1216],{"class":79},[52,104790,104113],{"class":62},[52,104792,104116],{"class":79},[14,104794,104795,104797,104798,104801,104802,104805,104806,104809,104810,104813],{},[49,104796,33065],{}," 用来输出信息。",[49,104799,104800],{},"model.nq"," 是位置变量数量，",[49,104803,104804],{},"model.nv"," 是速度变量数量，",[49,104807,104808],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[49,104811,104812],{},"nu"," 是 0。",[42,104815,104817],{"className":33028,"code":104816,"language":33030,"meta":47,"style":47},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[49,104818,104819,104829],{"__ignoreMap":47},[52,104820,104821,104823,104825,104827],{"class":54,"line":55},[52,104822,33065],{"class":308},[52,104824,1216],{"class":79},[52,104826,104125],{"class":62},[52,104828,104128],{"class":79},[52,104830,104831,104833,104835,104837],{"class":54,"line":66},[52,104832,33065],{"class":308},[52,104834,1216],{"class":79},[52,104836,104137],{"class":62},[52,104838,104140],{"class":79},[14,104840,104841,104842,104844,104845,104847,104848,104851],{},"这里打印初始时间和初始位置。",[49,104843,103717],{}," 一开始是 0。",[49,104846,103720],{}," 是位置数组。",[49,104849,104850],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[42,104853,104854],{"className":33028,"code":104326,"language":33030,"meta":47,"style":47},[49,104855,104856,104872],{"__ignoreMap":47},[52,104857,104858,104860,104862,104864,104866,104868,104870],{"class":54,"line":55},[52,104859,6014],{"class":58},[52,104861,104151],{"class":79},[52,104863,28693],{"class":58},[52,104865,35093],{"class":308},[52,104867,1216],{"class":79},[52,104869,591],{"class":308},[52,104871,33436],{"class":79},[52,104873,104874],{"class":54,"line":66},[52,104875,104349],{"class":79},[14,104877,104878,104880,104881,104884,104885,104887,104888,104890],{},[49,104879,6014],{}," 是循环。",[49,104882,104883],{},"range(100)"," 表示循环 100 次。",[49,104886,4177],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[49,104889,103865],{},"，仿真就前进一步。",[42,104892,104894],{"className":33028,"code":104893,"language":33030,"meta":47,"style":47},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[49,104895,104896,104906],{"__ignoreMap":47},[52,104897,104898,104900,104902,104904],{"class":54,"line":55},[52,104899,33065],{"class":308},[52,104901,1216],{"class":79},[52,104903,104179],{"class":62},[52,104905,104128],{"class":79},[52,104907,104908,104910,104912,104914],{"class":54,"line":66},[52,104909,33065],{"class":308},[52,104911,1216],{"class":79},[52,104913,104190],{"class":62},[52,104915,104140],{"class":79},[14,104917,104918],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[42,104920,104922],{"className":33028,"code":104921,"language":33030,"meta":47,"style":47},"if __name__ == \"__main__\":\n    main()\n",[49,104923,104924,104936],{"__ignoreMap":47},[52,104925,104926,104928,104930,104932,104934],{"class":54,"line":55},[52,104927,4578],{"class":58},[52,104929,33870],{"class":308},[52,104931,104209],{"class":58},[52,104933,104212],{"class":62},[52,104935,6718],{"class":79},[52,104937,104938],{"class":54,"line":66},[52,104939,104219],{"class":79},[14,104941,104942,104943,104946,104947,31035],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[49,104944,104945],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[49,104948,104945],{},[14,104950,104951],{},"运行:",[42,104953,104955],{"className":26471,"code":104954,"language":26473,"meta":47,"style":47},"python ch1_first_sim.py\n",[49,104956,104957],{"__ignoreMap":47},[52,104958,104959,104961],{"class":54,"line":55},[52,104960,33030],{"class":75},[52,104962,103936],{"class":62},[18,104964,104966],{"id":104965},"_5运行结果说明","5.运行结果说明",[14,104968,104969],{},"你应该看到类似输出:",[42,104971,104974],{"className":104972,"code":104973,"language":8154,"meta":47},[8152],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[49,104975,104973],{"__ignoreMap":47},[14,104977,104978,104980,104981,104984,104985,31035],{},[49,104979,104270],{}," 有 7 个位置变量: ",[49,104982,104983],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[49,104986,104987],{},"vx vy vz wx wy wz",[14,104989,104990,104991,104994],{},"你还会看到 ",[49,104992,104993],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[18,104996,104998],{"id":104997},"_6验证步骤","6.验证步骤",[14,105000,105001],{},"确认版本:",[42,105003,105004],{"className":26471,"code":103589,"language":26473,"meta":47,"style":47},[49,105005,105006],{"__ignoreMap":47},[52,105007,105008,105010,105012],{"class":54,"line":55},[52,105009,33030],{"class":75},[52,105011,33008],{"class":308},[52,105013,103600],{"class":62},[14,105015,105016],{},"确认导入的是官方 bindings:",[42,105018,105020],{"className":26471,"code":105019,"language":26473,"meta":47,"style":47},"python -c \"import mujoco; print(mujoco)\"\n",[49,105021,105022],{"__ignoreMap":47},[52,105023,105024,105026,105028],{"class":54,"line":55},[52,105025,33030],{"class":75},[52,105027,33008],{"class":308},[52,105029,105030],{"class":62}," \"import mujoco; print(mujoco)\"\n",[14,105032,105033],{},"运行程序:",[42,105035,105036],{"className":26471,"code":104954,"language":26473,"meta":47,"style":47},[49,105037,105038],{"__ignoreMap":47},[52,105039,105040,105042],{"class":54,"line":55},[52,105041,33030],{"class":75},[52,105043,103936],{"class":62},[14,105045,105046,105047,105050,105051,31035],{},"检查 ",[49,105048,105049],{},"final time"," 是否约等于 ",[49,105052,105053],{},"1.0",[14,105055,105056],{},"再做几个小实验：",[1696,105058,105059,105069,105077,105090],{},[32,105060,105061,105062,105064,105065,105068],{},"把 ",[49,105063,104589],{}," 改成 ",[49,105066,105067],{},"pos=\"0 0 2\"","，观察初始高度变化。",[32,105070,105061,105071,105064,105073,105076],{},[49,105072,104478],{},[49,105074,105075],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[32,105078,105061,105079,105064,105081,105084,105085,105087,105088,31035],{},[49,105080,104474],{},[49,105082,105083],{},"timestep=\"0.005\"","，观察 100 步后的 ",[49,105086,105049],{}," 是否变成约 ",[49,105089,37979],{},[32,105091,105092,105093,105096],{},"删除 ",[49,105094,105095],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,105098,105099],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[18,105101,105103],{"id":105102},"_7常见错误与解决方案","7.常见错误与解决方案",[3195,105105,105107],{"id":105106},"modulenotfounderror-no-module-named-mujoco",[49,105108,105109],{},"ModuleNotFoundError: No module named 'mujoco'",[14,105111,105112],{},"解决:",[42,105114,105116],{"className":26471,"code":105115,"language":26473,"meta":47,"style":47},"pip install \"mujoco>=2.3\"\n",[49,105117,105118],{"__ignoreMap":47},[52,105119,105120,105122,105124],{"class":54,"line":55},[52,105121,26480],{"class":75},[52,105123,26483],{"class":62},[52,105125,105126],{"class":62}," \"mujoco>=2.3\"\n",[3195,105128,105130],{"id":105129},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,105132,105133],{},"先安装系统依赖:",[42,105135,105137],{"className":26471,"code":105136,"language":26473,"meta":47,"style":47},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[49,105138,105139],{"__ignoreMap":47},[52,105140,105141,105143,105145,105147,105149,105152,105154,105157,105159,105162,105164],{"class":54,"line":55},[52,105142,27226],{"class":75},[52,105144,28965],{"class":62},[52,105146,26483],{"class":62},[52,105148,29050],{"class":308},[52,105150,105151],{"class":62}," mesa-libGL",[52,105153,103464],{"class":62},[52,105155,105156],{"class":62}," glfw",[52,105158,103484],{"class":62},[52,105160,105161],{"class":62}," libX11",[52,105163,103497],{"class":62},[52,105165,105166],{"class":62}," libXrandr\n",[3195,105168,105170],{"id":105169},"xml-解析失败","XML 解析失败",[14,105172,105173],{},"检查:",[1696,105175,105176,105179,105182,105188],{},[32,105177,105178],{},"标签是否闭合",[32,105180,105181],{},"属性是否带引号",[32,105183,105184,105185],{},"根节点是否是 ",[49,105186,105187],{},"\u003Cmujoco>",[32,105189,105190,105192,105193,105196],{},[49,105191,54450],{}," 是否放在 ",[49,105194,105195],{},"\u003Cworldbody>"," 内部",[3195,105198,105200,105202,105203],{"id":105199},"final-time-不是严格等于-10",[49,105201,105049],{}," 不是严格等于 ",[49,105204,105053],{},[14,105206,105207],{},"这通常不是错误。浮点数计算可能得到：",[42,105209,105212],{"className":105210,"code":105211,"language":8154,"meta":47},[8152],"1.0000000000000007\n",[49,105213,105211],{"__ignoreMap":47},[14,105215,105216,105217,105219],{},"只要接近 ",[49,105218,105053],{}," 就正常。",[3195,105221,105222],{"id":105222},"方块没有掉下来",[14,105224,105225],{},"检查：",[1696,105227,105228,105234,105240,105245],{},[32,105229,105230,105231],{},"方块 body 里是否有 ",[49,105232,105233],{},"\u003Cfreejoint\u002F>",[32,105235,105236,105237],{},"重力是否是 ",[49,105238,105239],{},"0 0 -9.81",[32,105241,105242,105243],{},"是否真的调用了 ",[49,105244,103335],{},[32,105246,105247,105248,105250,105251],{},"你看的是否是 ",[49,105249,104993],{},"，不是 ",[49,105252,105253],{},"initial qpos",[18,105255,105257],{"id":105256},"_8本章小结","8.本章小结",[14,105259,105260],{},"本章你已经完成了 MuJoCo 的最小闭环：",[42,105262,105265],{"className":105263,"code":105264,"language":8154,"meta":47},[8152],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[49,105266,105264],{"__ignoreMap":47},[14,105268,105269],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[3141,105271,105272],{},"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":47,"searchDepth":66,"depth":66,"links":105274},[105275,105276,105277,105282,105286,105287,105288,105296],{"id":103296,"depth":66,"text":103297},{"id":103419,"depth":66,"text":103420},{"id":103694,"depth":66,"text":103695,"children":105278},[105279,105280,105281],{"id":103732,"depth":83,"text":103733},{"id":103826,"depth":83,"text":103827},{"id":103878,"depth":83,"text":103879},{"id":103902,"depth":66,"text":103903,"children":105283},[105284,105285],{"id":104222,"depth":83,"text":104222},{"id":104358,"depth":83,"text":104358},{"id":104965,"depth":66,"text":104966},{"id":104997,"depth":66,"text":104998},{"id":105102,"depth":66,"text":105103,"children":105289},[105290,105291,105292,105293,105295],{"id":105106,"depth":83,"text":105109},{"id":105129,"depth":83,"text":105130},{"id":105169,"depth":83,"text":105170},{"id":105199,"depth":83,"text":105294},"final time 不是严格等于 1.0",{"id":105222,"depth":83,"text":105222},{"id":105256,"depth":66,"text":105257},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":103288,"description":47},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":105303,"title":105304,"body":105305,"description":47,"extension":3153,"meta":106961,"navigation":122,"path":106962,"seo":106963,"stem":106964,"__hash__":106965},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":105306,"toc":106937},[105307,105310,105312,105315,105318,105335,105430,105433,105439,105441,105443,105467,105470,105484,105487,105528,105530,105543,105545,105548,105596,105608,105611,105614,105620,105633,105700,105703,105722,105725,105728,105734,105736,105745,105748,105752,105761,105843,105852,105856,105862,105876,105886,105888,106218,106221,106233,106235,106246,106248,106251,106269,106272,106275,106293,106304,106307,106322,106332,106334,106355,106372,106392,106398,106438,106454,106470,106476,106479,106503,106519,106524,106554,106571,106596,106599,106614,106623,106638,106647,106662,106669,106671,106681,106694,106701,106704,106743,106750,106752,106804,106806,106812,106815,106822,106829,106832,106834,106852,106855,106858,106892,106904,106906,106909,106931,106934],[10,105308,105304],{"id":105309},"_2xml-与-mjcf-物理建模基础",[18,105311,103297],{"id":103296},[14,105313,105314],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,105316,105317],{},"本章结束后，你应该能看懂一个简单模型里：",[1696,105319,105320,105323,105326,105329,105332],{},[32,105321,105322],{},"地面在哪里。",[32,105324,105325],{},"物体初始位置在哪里。",[32,105327,105328],{},"几何体是什么形状。",[32,105330,105331],{},"哪些 body 可以自由运动。",[32,105333,105334],{},"如何用名字在 Python 里找到 XML 中的对象。",[3353,105336,105337,105347],{},[3356,105338,105339],{},[3359,105340,105341,105344],{},[3362,105342,105343],{"align":26385},"标签",[3362,105345,105346],{"align":26385},"作用",[3399,105348,105349,105358,105368,105377,105387,105397,105410,105420],{},[3359,105350,105351,105355],{},[3404,105352,105353],{"align":26385},[49,105354,105187],{},[3404,105356,105357],{"align":26385},"根节点",[3359,105359,105360,105365],{},[3404,105361,105362],{"align":26385},[49,105363,105364],{},"\u003Coption>",[3404,105366,105367],{"align":26385},"仿真参数",[3359,105369,105370,105374],{},[3404,105371,105372],{"align":26385},[49,105373,105195],{},[3404,105375,105376],{"align":26385},"世界中的物体",[3359,105378,105379,105384],{},[3404,105380,105381],{"align":26385},[49,105382,105383],{},"\u003Cbody>",[3404,105385,105386],{"align":26385},"刚体",[3359,105388,105389,105394],{},[3404,105390,105391],{"align":26385},[49,105392,105393],{},"\u003Cgeom>",[3404,105395,105396],{"align":26385},"几何体、碰撞体、可视体",[3359,105398,105399,105407],{},[3404,105400,105401,27628,105404],{"align":26385},[49,105402,105403],{},"\u003Cjoint>",[49,105405,105406],{},"\u003Cfreejoint>",[3404,105408,105409],{"align":26385},"关节",[3359,105411,105412,105417],{},[3404,105413,105414],{"align":26385},[49,105415,105416],{},"\u003Csite>",[3404,105418,105419],{"align":26385},"标记点",[3359,105421,105422,105427],{},[3404,105423,105424],{"align":26385},[49,105425,105426],{},"\u003Cactuator>",[3404,105428,105429],{"align":26385},"控制器",[14,105431,105432],{},"初学时可以先记住：",[42,105434,105437],{"className":105435,"code":105436,"language":8154,"meta":47},[8152],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[49,105438,105436],{"__ignoreMap":47},[18,105440,103420],{"id":103419},[14,105442,103423],{},[42,105444,105446],{"className":26471,"code":105445,"language":26473,"meta":47,"style":47},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[49,105447,105448],{"__ignoreMap":47},[52,105449,105450,105452,105454,105456,105458,105460,105462,105464],{"class":54,"line":55},[52,105451,27226],{"class":75},[52,105453,28965],{"class":62},[52,105455,26483],{"class":62},[52,105457,29050],{"class":308},[52,105459,105151],{"class":62},[52,105461,103464],{"class":62},[52,105463,105156],{"class":62},[52,105465,105466],{"class":62}," glfw-devel\n",[14,105468,105469],{},"pip:",[42,105471,105472],{"className":26471,"code":103569,"language":26473,"meta":47,"style":47},[49,105473,105474],{"__ignoreMap":47},[52,105475,105476,105478,105480,105482],{"class":54,"line":55},[52,105477,26480],{"class":75},[52,105479,26483],{"class":62},[52,105481,103580],{"class":62},[52,105483,103583],{"class":62},[14,105485,105486],{},"conda:",[42,105488,105490],{"className":26471,"code":105489,"language":26473,"meta":47,"style":47},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[49,105491,105492,105509,105518],{"__ignoreMap":47},[52,105493,105494,105496,105498,105500,105503,105505,105507],{"class":54,"line":55},[52,105495,32980],{"class":75},[52,105497,31826],{"class":62},[52,105499,27765],{"class":308},[52,105501,105502],{"class":62}," mujoco-xml",[52,105504,103625],{"class":62},[52,105506,103628],{"class":308},[52,105508,103631],{"class":308},[52,105510,105511,105513,105515],{"class":54,"line":66},[52,105512,32980],{"class":75},[52,105514,103638],{"class":62},[52,105516,105517],{"class":62}," mujoco-xml\n",[52,105519,105520,105522,105524,105526],{"class":54,"line":83},[52,105521,26480],{"class":75},[52,105523,26483],{"class":62},[52,105525,103580],{"class":62},[52,105527,103583],{"class":62},[14,105529,103654],{},[1696,105531,105532,105535,105540],{},[32,105533,105534],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[32,105536,105537,105538,31035],{},"本章使用基础标签，适用于 ",[49,105539,103677],{},[32,105541,105542],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[18,105544,103695],{"id":103694},[14,105546,105547],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[42,105549,105551],{"className":55717,"code":105550,"language":55719,"meta":47,"style":47},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[49,105552,105553,105567,105575,105580,105588],{"__ignoreMap":47},[52,105554,105555,105557,105559,105561,105563,105565],{"class":54,"line":55},[52,105556,698],{"class":79},[52,105558,103671],{"class":53950},[52,105560,104425],{"class":75},[52,105562,292],{"class":79},[52,105564,65329],{"class":62},[52,105566,53957],{"class":79},[52,105568,105569,105571,105573],{"class":54,"line":66},[52,105570,54794],{"class":79},[52,105572,104491],{"class":53950},[52,105574,53957],{"class":79},[52,105576,105577],{"class":54,"line":83},[52,105578,105579],{"class":79},"    ...\n",[52,105581,105582,105584,105586],{"class":54,"line":91},[52,105583,55067],{"class":79},[52,105585,104491],{"class":53950},[52,105587,53957],{"class":79},[52,105589,105590,105592,105594],{"class":54,"line":98},[52,105591,54435],{"class":79},[52,105593,103671],{"class":53950},[52,105595,53957],{"class":79},[14,105597,105598,105600,105601,105603,105604,105607],{},[49,105599,54450],{}," 表示刚体。",[49,105602,103770],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[49,105605,105606],{},"joint"," 表示刚体相对父刚体如何运动。",[3195,105609,105610],{"id":105610},"层级结构非常重要",[14,105612,105613],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[42,105615,105618],{"className":105616,"code":105617,"language":8154,"meta":47},[8152],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[49,105619,105617],{"__ignoreMap":47},[14,105621,105622,103668,105625,105628,105629,105632],{},[49,105623,105624],{},"red_box_geom",[49,105626,105627],{},"box_center"," 都属于 ",[49,105630,105631],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[42,105634,105636],{"className":55717,"code":105635,"language":55719,"meta":47,"style":47},"\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",[49,105637,105638,105658,105672,105692],{"__ignoreMap":47},[52,105639,105640,105642,105644,105646,105648,105650,105652,105654,105656],{"class":54,"line":55},[52,105641,698],{"class":79},[52,105643,54450],{"class":53950},[52,105645,17568],{"class":75},[52,105647,292],{"class":79},[52,105649,56141],{"class":62},[52,105651,103756],{"class":75},[52,105653,292],{"class":79},[52,105655,103761],{"class":62},[52,105657,53957],{"class":79},[52,105659,105660,105662,105664,105666,105668,105670],{"class":54,"line":66},[52,105661,54794],{"class":79},[52,105663,104270],{"class":53950},[52,105665,17568],{"class":75},[52,105667,292],{"class":79},[52,105669,104611],{"class":62},[52,105671,103794],{"class":79},[52,105673,105674,105676,105678,105680,105682,105684,105686,105688,105690],{"class":54,"line":83},[52,105675,54794],{"class":79},[52,105677,103770],{"class":53950},[52,105679,56474],{"class":75},[52,105681,292],{"class":79},[52,105683,56141],{"class":62},[52,105685,103786],{"class":75},[52,105687,292],{"class":79},[52,105689,103791],{"class":62},[52,105691,103794],{"class":79},[52,105693,105694,105696,105698],{"class":54,"line":91},[52,105695,54435],{"class":79},[52,105697,54450],{"class":53950},[52,105699,53957],{"class":79},[14,105701,105702],{},"含义:",[1696,105704,105705,105711,105716,105719],{},[32,105706,105707,105708,105710],{},"创建名为 ",[49,105709,56364],{}," 的刚体",[32,105712,105713,105714],{},"初始位置在世界坐标 ",[49,105715,103819],{},[32,105717,105718],{},"它有一个自由关节",[32,105720,105721],{},"它有一个盒子几何体",[3195,105723,105724],{"id":105724},"坐标怎么理解",[14,105726,105727],{},"MuJoCo 默认使用三维坐标：",[42,105729,105732],{"className":105730,"code":105731,"language":8154,"meta":47},[8152],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[49,105733,105731],{"__ignoreMap":47},[14,105735,17281],{},[42,105737,105739],{"className":55717,"code":105738,"language":55719,"meta":47,"style":47},"pos=\"0 0 1\"\n",[49,105740,105741],{"__ignoreMap":47},[52,105742,105743],{"class":54,"line":55},[52,105744,105738],{"class":79},[14,105746,105747],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[3195,105749,105751],{"id":105750},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,105753,105754,105755,85180,105758,105760],{},"不同 ",[49,105756,105757],{},"type",[49,105759,34146],{}," 含义不同：",[3353,105762,105763,105778],{},[3356,105764,105765],{},[3359,105766,105767,105771,105776],{},[3362,105768,105769],{"align":26385},[49,105770,105757],{},[3362,105772,105773,105775],{"align":26385},[49,105774,34146],{}," 示例",[3362,105777,103350],{"align":26385},[3399,105779,105780,105794,105809,105828],{},[3359,105781,105782,105786,105791],{},[3404,105783,105784],{"align":26385},[49,105785,56364],{},[3404,105787,105788],{"align":26385},[49,105789,105790],{},"size=\"0.1 0.2 0.3\"",[3404,105792,105793],{"align":26385},"x\u002Fy\u002Fz 半边长，不是完整长度",[3359,105795,105796,105801,105806],{},[3404,105797,105798],{"align":26385},[49,105799,105800],{},"sphere",[3404,105802,105803],{"align":26385},[49,105804,105805],{},"size=\"0.1\"",[3404,105807,105808],{"align":26385},"球半径",[3359,105810,105811,105816,105821],{},[3404,105812,105813],{"align":26385},[49,105814,105815],{},"capsule",[3404,105817,105818],{"align":26385},[49,105819,105820],{},"size=\"0.03\"",[3404,105822,105823,105824,105827],{"align":26385},"胶囊半径，长度常用 ",[49,105825,105826],{},"fromto"," 指定",[3359,105829,105830,105835,105840],{},[3404,105831,105832],{"align":26385},[49,105833,105834],{},"plane",[3404,105836,105837],{"align":26385},[49,105838,105839],{},"size=\"3 3 0.1\"",[3404,105841,105842],{"align":26385},"可视平面大小，通常当地面",[14,105844,105845,105846,105848,105849,105851],{},"最容易踩坑的是 box：",[49,105847,104674],{}," 表示边长大约是 ",[49,105850,34687],{},"，因为 MuJoCo 用的是半边长。",[3195,105853,105855],{"id":105854},"site-是什么","site 是什么",[14,105857,105858,105861],{},[49,105859,105860],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[1696,105863,105864,105867,105870,105873],{},[32,105865,105866],{},"标记机械臂末端。",[32,105868,105869],{},"标记目标位置。",[32,105871,105872],{},"放传感器或相机参考点。",[32,105874,105875],{},"在 Python 中读取某个关键点的世界坐标。",[14,105877,105878,105879,103668,105882,105885],{},"在后面的 Reacher 任务中，",[49,105880,105881],{},"tip",[49,105883,105884],{},"target"," 就会用 site 表示。",[18,105887,103903],{"id":103902},[42,105889,105891],{"className":33028,"code":105890,"language":33030,"meta":47,"style":47},"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",[49,105892,105893,105899,105909,105913,105917,105925,105930,105934,105938,105942,105947,105951,105956,105961,105966,105971,105975,105979,105983,105987,105991,105995,106007,106019,106027,106031,106046,106061,106065,106078,106093,106106,106119,106123,106139,106143,106147,106158,106170,106182,106194,106198,106202,106214],{"__ignoreMap":47},[52,105894,105895,105897],{"class":54,"line":55},[52,105896,33042],{"class":58},[52,105898,103951],{"class":79},[52,105900,105901,105903,105905,105907],{"class":54,"line":66},[52,105902,33042],{"class":58},[52,105904,34030],{"class":79},[52,105906,34033],{"class":58},[52,105908,34036],{"class":79},[52,105910,105911],{"class":54,"line":83},[52,105912,123],{"emptyLinePlaceholder":122},[52,105914,105915],{"class":54,"line":91},[52,105916,123],{"emptyLinePlaceholder":122},[52,105918,105919,105921,105923],{"class":54,"line":98},[52,105920,103964],{"class":308},[52,105922,16212],{"class":58},[52,105924,103969],{"class":62},[52,105926,105927],{"class":54,"line":107},[52,105928,105929],{"class":62},"\u003Cmujoco model=\"xml_basic\">\n",[52,105931,105932],{"class":54,"line":113},[52,105933,103979],{"class":62},[52,105935,105936],{"class":54,"line":119},[52,105937,123],{"emptyLinePlaceholder":122},[52,105939,105940],{"class":54,"line":126},[52,105941,103988],{"class":62},[52,105943,105944],{"class":54,"line":132},[52,105945,105946],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[52,105948,105949],{"class":54,"line":138},[52,105950,123],{"emptyLinePlaceholder":122},[52,105952,105953],{"class":54,"line":144},[52,105954,105955],{"class":62},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[52,105957,105958],{"class":54,"line":153},[52,105959,105960],{"class":62},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[52,105962,105963],{"class":54,"line":159},[52,105964,105965],{"class":62},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[52,105967,105968],{"class":54,"line":167},[52,105969,105970],{"class":62},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[52,105972,105973],{"class":54,"line":173},[52,105974,104017],{"class":62},[52,105976,105977],{"class":54,"line":181},[52,105978,104022],{"class":62},[52,105980,105981],{"class":54,"line":186},[52,105982,104027],{"class":62},[52,105984,105985],{"class":54,"line":191},[52,105986,98348],{"class":62},[52,105988,105989],{"class":54,"line":196},[52,105990,123],{"emptyLinePlaceholder":122},[52,105992,105993],{"class":54,"line":201},[52,105994,123],{"emptyLinePlaceholder":122},[52,105996,105997,105999,106001,106003,106005],{"class":54,"line":206},[52,105998,34597],{"class":58},[52,106000,245],{"class":75},[52,106002,104048],{"class":79},[52,106004,98336],{"class":308},[52,106006,6718],{"class":79},[52,106008,106009,106011,106013,106015,106017],{"class":54,"line":211},[52,106010,104057],{"class":79},[52,106012,292],{"class":58},[52,106014,104062],{"class":79},[52,106016,103964],{"class":308},[52,106018,708],{"class":79},[52,106020,106021,106023,106025],{"class":54,"line":218},[52,106022,104071],{"class":79},[52,106024,292],{"class":58},[52,106026,104076],{"class":79},[52,106028,106029],{"class":54,"line":223},[52,106030,123],{"emptyLinePlaceholder":122},[52,106032,106033,106036,106038,106041,106044],{"class":54,"line":230},[52,106034,106035],{"class":79},"    box_body_id ",[52,106037,292],{"class":58},[52,106039,106040],{"class":79}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[52,106042,106043],{"class":62},"\"red_box\"",[52,106045,708],{"class":79},[52,106047,106048,106051,106053,106056,106059],{"class":54,"line":239},[52,106049,106050],{"class":79},"    site_id ",[52,106052,292],{"class":58},[52,106054,106055],{"class":79}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[52,106057,106058],{"class":62},"\"box_center\"",[52,106060,708],{"class":79},[52,106062,106063],{"class":54,"line":251},[52,106064,123],{"emptyLinePlaceholder":122},[52,106066,106067,106069,106072,106074,106076],{"class":54,"line":256},[52,106068,6088],{"class":58},[52,106070,106071],{"class":79}," box_body_id ",[52,106073,698],{"class":58},[52,106075,1444],{"class":308},[52,106077,6718],{"class":79},[52,106079,106080,106083,106086,106088,106091],{"class":54,"line":262},[52,106081,106082],{"class":58},"        raise",[52,106084,106085],{"class":308}," RuntimeError",[52,106087,1216],{"class":79},[52,106089,106090],{"class":62},"\"body red_box not found\"",[52,106092,708],{"class":79},[52,106094,106095,106097,106100,106102,106104],{"class":54,"line":268},[52,106096,6088],{"class":58},[52,106098,106099],{"class":79}," site_id ",[52,106101,698],{"class":58},[52,106103,1444],{"class":308},[52,106105,6718],{"class":79},[52,106107,106108,106110,106112,106114,106117],{"class":54,"line":280},[52,106109,106082],{"class":58},[52,106111,106085],{"class":308},[52,106113,1216],{"class":79},[52,106115,106116],{"class":62},"\"site box_center not found\"",[52,106118,708],{"class":79},[52,106120,106121],{"class":54,"line":286},[52,106122,123],{"emptyLinePlaceholder":122},[52,106124,106125,106127,106129,106131,106133,106135,106137],{"class":54,"line":300},[52,106126,679],{"class":58},[52,106128,104151],{"class":79},[52,106130,28693],{"class":58},[52,106132,35093],{"class":308},[52,106134,1216],{"class":79},[52,106136,856],{"class":308},[52,106138,33436],{"class":79},[52,106140,106141],{"class":54,"line":314},[52,106142,104166],{"class":79},[52,106144,106145],{"class":54,"line":327},[52,106146,123],{"emptyLinePlaceholder":122},[52,106148,106149,106151,106153,106156],{"class":54,"line":333},[52,106150,33949],{"class":308},[52,106152,1216],{"class":79},[52,106154,106155],{"class":62},"\"simulation time:\"",[52,106157,104128],{"class":79},[52,106159,106160,106162,106164,106167],{"class":54,"line":360},[52,106161,33949],{"class":308},[52,106163,1216],{"class":79},[52,106165,106166],{"class":62},"\"box body position:\"",[52,106168,106169],{"class":79},", data.xpos[box_body_id].copy())\n",[52,106171,106172,106174,106176,106179],{"class":54,"line":365},[52,106173,33949],{"class":308},[52,106175,1216],{"class":79},[52,106177,106178],{"class":62},"\"site position:\"",[52,106180,106181],{"class":79},", data.site_xpos[site_id].copy())\n",[52,106183,106184,106186,106188,106191],{"class":54,"line":371},[52,106185,33949],{"class":308},[52,106187,1216],{"class":79},[52,106189,106190],{"class":62},"\"box qpos:\"",[52,106192,106193],{"class":79},", np.array(data.qpos))\n",[52,106195,106196],{"class":54,"line":400},[52,106197,123],{"emptyLinePlaceholder":122},[52,106199,106200],{"class":54,"line":405},[52,106201,123],{"emptyLinePlaceholder":122},[52,106203,106204,106206,106208,106210,106212],{"class":54,"line":411},[52,106205,4578],{"class":58},[52,106207,33870],{"class":308},[52,106209,104209],{"class":58},[52,106211,104212],{"class":62},[52,106213,6718],{"class":79},[52,106215,106216],{"class":54,"line":424},[52,106217,104219],{"class":79},[14,106219,106220],{},"保存为：",[42,106222,106224],{"className":26471,"code":106223,"language":26473,"meta":47,"style":47},"touch ch2_xml_basic.py\n",[49,106225,106226],{"__ignoreMap":47},[52,106227,106228,106230],{"class":54,"line":55},[52,106229,103933],{"class":75},[52,106231,106232],{"class":62}," ch2_xml_basic.py\n",[14,106234,104951],{},[42,106236,106238],{"className":26471,"code":106237,"language":26473,"meta":47,"style":47},"python ch2_xml_basic.py\n",[49,106239,106240],{"__ignoreMap":47},[52,106241,106242,106244],{"class":54,"line":55},[52,106243,33030],{"class":75},[52,106245,106232],{"class":62},[3195,106247,104222],{"id":104222},[14,106249,106250],{},"用名字查找 body：",[42,106252,106254],{"className":33028,"code":106253,"language":33030,"meta":47,"style":47},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[49,106255,106256],{"__ignoreMap":47},[52,106257,106258,106261,106263,106265,106267],{"class":54,"line":55},[52,106259,106260],{"class":79},"box_body_id ",[52,106262,292],{"class":58},[52,106264,106040],{"class":79},[52,106266,106043],{"class":62},[52,106268,708],{"class":79},[14,106270,106271],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,106273,106274],{},"用名字查找 site：",[42,106276,106278],{"className":33028,"code":106277,"language":33030,"meta":47,"style":47},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[49,106279,106280],{"__ignoreMap":47},[52,106281,106282,106285,106287,106289,106291],{"class":54,"line":55},[52,106283,106284],{"class":79},"site_id ",[52,106286,292],{"class":58},[52,106288,106055],{"class":79},[52,106290,106058],{"class":62},[52,106292,708],{"class":79},[14,106294,106295,106296,106299,106300,106303],{},"注意第二个参数是对象类型。查 body 就用 ",[49,106297,106298],{},"mjOBJ_BODY","，查 site 就用 ",[49,106301,106302],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,106305,106306],{},"读取世界坐标：",[42,106308,106310],{"className":33028,"code":106309,"language":33030,"meta":47,"style":47},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[49,106311,106312,106317],{"__ignoreMap":47},[52,106313,106314],{"class":54,"line":55},[52,106315,106316],{"class":79},"data.xpos[box_body_id]\n",[52,106318,106319],{"class":54,"line":66},[52,106320,106321],{"class":79},"data.site_xpos[site_id]\n",[14,106323,106324,106327,106328,106331],{},[49,106325,106326],{},"xpos"," 是 body 的世界坐标，",[49,106329,106330],{},"site_xpos"," 是 site 的世界坐标。",[3195,106333,104358],{"id":104358},[42,106335,106337],{"className":33028,"code":106336,"language":33030,"meta":47,"style":47},"import mujoco\nimport numpy as np\n",[49,106338,106339,106345],{"__ignoreMap":47},[52,106340,106341,106343],{"class":54,"line":55},[52,106342,33042],{"class":58},[52,106344,103951],{"class":79},[52,106346,106347,106349,106351,106353],{"class":54,"line":66},[52,106348,33042],{"class":58},[52,106350,34030],{"class":79},[52,106352,34033],{"class":58},[52,106354,34036],{"class":79},[14,106356,106357,106358,106361,106362,106365,106366,3426,106369,31035],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[49,106359,106360],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[49,106363,106364],{},"as np"," 是习惯写法，后面就可以写 ",[49,106367,106368],{},"np.array(...)",[49,106370,106371],{},"np.round(...)",[42,106373,106374],{"className":33028,"code":104245,"language":33030,"meta":47,"style":47},[49,106375,106376,106384,106388],{"__ignoreMap":47},[52,106377,106378,106380,106382],{"class":54,"line":55},[52,106379,103964],{"class":308},[52,106381,16212],{"class":58},[52,106383,103969],{"class":62},[52,106385,106386],{"class":54,"line":66},[52,106387,104260],{"class":62},[52,106389,106390],{"class":54,"line":83},[52,106391,98348],{"class":62},[14,106393,106394,106395,31035],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[49,106396,106397],{},"mujoco.MjModel.from_xml_string(XML)",[42,106399,106401],{"className":55717,"code":106400,"language":55719,"meta":47,"style":47},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[49,106402,106403],{"__ignoreMap":47},[52,106404,106405,106407,106409,106411,106413,106415,106417,106419,106422,106424,106426,106429,106431,106433,106436],{"class":54,"line":55},[52,106406,698],{"class":79},[52,106408,105860],{"class":53950},[52,106410,17568],{"class":75},[52,106412,292],{"class":79},[52,106414,106058],{"class":62},[52,106416,103756],{"class":75},[52,106418,292],{"class":79},[52,106420,106421],{"class":62},"\"0 0 0\"",[52,106423,103786],{"class":75},[52,106425,292],{"class":79},[52,106427,106428],{"class":62},"\"0.03\"",[52,106430,81417],{"class":75},[52,106432,292],{"class":79},[52,106434,106435],{"class":62},"\"0 1 0 1\"",[52,106437,103794],{"class":79},[14,106439,106440,106442,106443,106446,106447,106449,106450,106453],{},[49,106441,105860],{}," 是标记点。",[49,106444,106445],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[49,106448,105820],{}," 表示显示出来的小球大小。",[49,106451,106452],{},"rgba=\"0 1 0 1\""," 表示绿色。",[42,106455,106456],{"className":33028,"code":106253,"language":33030,"meta":47,"style":47},[49,106457,106458],{"__ignoreMap":47},[52,106459,106460,106462,106464,106466,106468],{"class":54,"line":55},[52,106461,106260],{"class":79},[52,106463,292],{"class":58},[52,106465,106040],{"class":79},[52,106467,106043],{"class":62},[52,106469,708],{"class":79},[14,106471,106472,106473,106475],{},"这行的作用是：根据名字 ",[49,106474,106043],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,106477,106478],{},"拆开看：",[1696,106480,106481,106487,106492,106498],{},[32,106482,106483,106486],{},[49,106484,106485],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[32,106488,106489,106491],{},[49,106490,104735],{}," 是被查询的模型。",[32,106493,106494,106497],{},[49,106495,106496],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[32,106499,106500,106502],{},[49,106501,106043],{}," 是 XML 里写的名字。",[42,106504,106505],{"className":33028,"code":106277,"language":33030,"meta":47,"style":47},[49,106506,106507],{"__ignoreMap":47},[52,106508,106509,106511,106513,106515,106517],{"class":54,"line":55},[52,106510,106284],{"class":79},[52,106512,292],{"class":58},[52,106514,106055],{"class":79},[52,106516,106058],{"class":62},[52,106518,708],{"class":79},[14,106520,106521,106522,31035],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[49,106523,106058],{},[42,106525,106527],{"className":33028,"code":106526,"language":33030,"meta":47,"style":47},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[49,106528,106529,106541],{"__ignoreMap":47},[52,106530,106531,106533,106535,106537,106539],{"class":54,"line":55},[52,106532,4578],{"class":58},[52,106534,106071],{"class":79},[52,106536,698],{"class":58},[52,106538,1444],{"class":308},[52,106540,6718],{"class":79},[52,106542,106543,106546,106548,106550,106552],{"class":54,"line":66},[52,106544,106545],{"class":58},"    raise",[52,106547,106085],{"class":308},[52,106549,1216],{"class":79},[52,106551,106090],{"class":62},[52,106553,708],{"class":79},[14,106555,106556,106558,106559,106562,106563,106566,106567,106570],{},[49,106557,4578],{}," 是条件判断。",[49,106560,106561],{},"mj_name2id"," 找不到对象时会返回 ",[49,106564,106565],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[49,106568,106569],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[42,106572,106574],{"className":33028,"code":106573,"language":33030,"meta":47,"style":47},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[49,106575,106576,106592],{"__ignoreMap":47},[52,106577,106578,106580,106582,106584,106586,106588,106590],{"class":54,"line":55},[52,106579,6014],{"class":58},[52,106581,104151],{"class":79},[52,106583,28693],{"class":58},[52,106585,35093],{"class":308},[52,106587,1216],{"class":79},[52,106589,856],{"class":308},[52,106591,33436],{"class":79},[52,106593,106594],{"class":54,"line":66},[52,106595,104349],{"class":79},[14,106597,106598],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[42,106600,106602],{"className":33028,"code":106601,"language":33030,"meta":47,"style":47},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[49,106603,106604],{"__ignoreMap":47},[52,106605,106606,106608,106610,106612],{"class":54,"line":55},[52,106607,33065],{"class":308},[52,106609,1216],{"class":79},[52,106611,106166],{"class":62},[52,106613,106169],{"class":79},[14,106615,106616,106618,106619,106622],{},[49,106617,103729],{}," 保存所有 body 的世界坐标。",[49,106620,106621],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[42,106624,106626],{"className":33028,"code":106625,"language":33030,"meta":47,"style":47},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[49,106627,106628],{"__ignoreMap":47},[52,106629,106630,106632,106634,106636],{"class":54,"line":55},[52,106631,33065],{"class":308},[52,106633,1216],{"class":79},[52,106635,106178],{"class":62},[52,106637,106181],{"class":79},[14,106639,106640,106643,106644,106646],{},[49,106641,106642],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[49,106645,105627],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[42,106648,106650],{"className":33028,"code":106649,"language":33030,"meta":47,"style":47},"print(\"box qpos:\", np.array(data.qpos))\n",[49,106651,106652],{"__ignoreMap":47},[52,106653,106654,106656,106658,106660],{"class":54,"line":55},[52,106655,33065],{"class":308},[52,106657,1216],{"class":79},[52,106659,106190],{"class":62},[52,106661,106193],{"class":79},[14,106663,106664,106665,106668],{},"这里打印广义位置数组。",[49,106666,106667],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[18,106670,104966],{"id":104965},[14,106672,106673,106674,106677,106678,31035],{},"程序会输出 ",[49,106675,106676],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[49,106679,106680],{},"qpos",[14,106682,106683,106685,106686,106689,106690,106693],{},[49,106684,106621],{}," 是 body 的世界坐标位置。",[49,106687,106688],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[49,106691,106692],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,106695,84872,106696,85180,106698,106700],{},[49,106697,105627],{},[49,106699,106445],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,106702,106703],{},"如果你把 site 改成：",[42,106705,106707],{"className":55717,"code":106706,"language":55719,"meta":47,"style":47},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[49,106708,106709],{"__ignoreMap":47},[52,106710,106711,106713,106715,106717,106719,106722,106724,106726,106729,106731,106733,106735,106737,106739,106741],{"class":54,"line":55},[52,106712,698],{"class":79},[52,106714,105860],{"class":53950},[52,106716,17568],{"class":75},[52,106718,292],{"class":79},[52,106720,106721],{"class":62},"\"box_top\"",[52,106723,103756],{"class":75},[52,106725,292],{"class":79},[52,106727,106728],{"class":62},"\"0 0 0.15\"",[52,106730,103786],{"class":75},[52,106732,292],{"class":79},[52,106734,106428],{"class":62},[52,106736,81417],{"class":75},[52,106738,292],{"class":79},[52,106740,106435],{"class":62},[52,106742,103794],{"class":79},[14,106744,106745,106746,106749],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[49,106747,106748],{},"site position"," 就会比 body position 的 z 坐标更高。",[18,106751,104998],{"id":104997},[1696,106753,106754,106763,106766,106773,106779,106790],{},[32,106755,105061,106756,106758,106759,105064,106761,31035],{},[49,106757,105631],{}," 的初始高度从 ",[49,106760,629],{},[49,106762,564],{},[32,106764,106765],{},"重新运行程序。",[32,106767,106768,106769,106772],{},"观察 ",[49,106770,106771],{},"box qpos"," 和最终位置是否变化。",[32,106774,106775,106776,106778],{},"故意把 ",[49,106777,105860],{}," 名称改错，确认程序能报错。",[32,106780,105061,106781,106783,106784,105064,106786,106789],{},[49,106782,103770],{}," 的颜色 ",[49,106785,104682],{},[49,106787,106788],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[32,106791,105061,106792,85180,106794,105064,106797,106800,106801,106803],{},[49,106793,105627],{},[49,106795,106796],{},"pos",[49,106798,106799],{},"0 0 0.2","，观察 ",[49,106802,106748],{}," 如何变化。",[18,106805,105103],{"id":105102},[3195,106807,106809],{"id":106808},"xml-error-schema-violation",[49,106810,106811],{},"XML Error: Schema violation",[14,106813,106814],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[3195,106816,106818,83940,106820],{"id":106817},"mj_name2id-返回-1",[49,106819,106561],{},[49,106821,106565],{},[14,106823,106824,106825,106828],{},"说明名字没有找到。检查 XML 中 ",[49,106826,106827],{},"name=\"...\"","，并确认对象类型正确。",[3195,106830,106831],{"id":106831},"物体不下落",[14,106833,105173],{},[1696,106835,106836,106841,106846],{},[32,106837,106838,106839],{},"body 是否有 ",[49,106840,104270],{},[32,106842,106843,106844],{},"gravity 是否为 ",[49,106845,105239],{},[32,106847,106848,106849,106851],{},"body 是否被固定在 ",[49,106850,104491],{}," 中",[3195,106853,106854],{"id":106854},"坐标看起来不符合预期",[14,106856,106857],{},"先区分两种坐标：",[3353,106859,106860,106869],{},[3356,106861,106862],{},[3359,106863,106864,106867],{},[3362,106865,106866],{"align":26385},"坐标",[3362,106868,103350],{"align":26385},[3399,106870,106871,106881],{},[3359,106872,106873,106878],{},[3404,106874,106875,106876],{"align":26385},"XML 里的 ",[49,106877,106796],{},[3404,106879,106880],{"align":26385},"相对父 body 的局部坐标",[3359,106882,106883,106889],{},[3404,106884,106885,27628,106887],{"align":26385},[49,106886,103729],{},[49,106888,106642],{},[3404,106890,106891],{"align":26385},"仿真更新后的世界坐标",[14,106893,106894,106895,106897,106898,85189,106901,106903],{},"如果你修改了 ",[49,106896,103720],{},"，但还没调用 ",[49,106899,106900],{},"mj_forward",[49,106902,103865],{},"，世界坐标可能还没有更新。",[18,106905,105257],{"id":105256},[14,106907,106908],{},"MJCF 建模先掌握四件事：",[1696,106910,106911,106916,106921,106926],{},[32,106912,106913,106915],{},[49,106914,54450],{}," 表示刚体层级。",[32,106917,106918,106920],{},[49,106919,103770],{}," 表示形状、碰撞和质量。",[32,106922,106923,106925],{},[49,106924,105606],{}," 决定 body 能不能动、怎么动。",[32,106927,106928,106930],{},[49,106929,105860],{}," 用来标记关键点，方便 Python 读取位置。",[14,106932,106933],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[3141,106935,106936],{},"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":47,"searchDepth":66,"depth":66,"links":106938},[106939,106940,106941,106947,106951,106952,106953,106960],{"id":103296,"depth":66,"text":103297},{"id":103419,"depth":66,"text":103420},{"id":103694,"depth":66,"text":103695,"children":106942},[106943,106944,106945,106946],{"id":105610,"depth":83,"text":105610},{"id":105724,"depth":83,"text":105724},{"id":105750,"depth":83,"text":105751},{"id":105854,"depth":83,"text":105855},{"id":103902,"depth":66,"text":103903,"children":106948},[106949,106950],{"id":104222,"depth":83,"text":104222},{"id":104358,"depth":83,"text":104358},{"id":104965,"depth":66,"text":104966},{"id":104997,"depth":66,"text":104998},{"id":105102,"depth":66,"text":105103,"children":106954},[106955,106956,106958,106959],{"id":106808,"depth":83,"text":106811},{"id":106817,"depth":83,"text":106957},"mj_name2id 返回 -1",{"id":106831,"depth":83,"text":106831},{"id":106854,"depth":83,"text":106854},{"id":105256,"depth":66,"text":105257},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":105304,"description":47},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106967,"title":106968,"body":106969,"description":47,"extension":3153,"meta":108464,"navigation":122,"path":108465,"seo":108466,"stem":108467,"__hash__":108468},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106970,"toc":108436},[106971,106974,106976,106979,106982,107020,107023,107029,107032,107034,107036,107063,107065,107079,107081,107122,107124,107148,107150,107153,107162,107171,107174,107183,107191,107200,107203,107213,107216,107268,107275,107281,107289,107337,107340,107359,107362,107370,107374,107383,107416,107418,107766,107768,107780,107782,107793,107795,107798,107819,107825,107828,107853,107863,107866,107874,107877,107880,107901,107912,107914,107934,107937,107958,107967,107986,107992,108017,108020,108034,108041,108065,108068,108076,108085,108101,108113,108121,108130,108132,108135,108159,108164,108167,108189,108191,108230,108232,108239,108241,108249,108252,108255,108267,108308,108315,108326,108333,108336,108385,108388,108391,108397,108399,108404,108430,108433],[10,106972,106968],{"id":106973},"_3python-控制接口读取状态与推进仿真",[18,106975,103297],{"id":103296},[14,106977,106978],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,106980,106981],{},"你将学习:",[1696,106983,106984,106989,106994,106998,107003,107014],{},[32,106985,106986],{},[49,106987,106988],{},"MjModel.from_xml_string",[32,106990,106991],{},[49,106992,106993],{},"MjData(model)",[32,106995,106996],{},[49,106997,103865],{},[32,106999,107000],{},[49,107001,107002],{},"mj_resetData",[32,107004,107005,107006,3426,107008,3426,107011],{},"读取 ",[49,107007,106680],{},[49,107009,107010],{},"qvel",[49,107012,107013],{},"ctrl",[32,107015,107016,107017],{},"使用 ",[49,107018,107019],{},"model.opt.timestep",[14,107021,107022],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[42,107024,107027],{"className":107025,"code":107026,"language":8154,"meta":47},[8152],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[49,107028,107026],{"__ignoreMap":47},[14,107030,107031],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[18,107033,103420],{"id":103419},[14,107035,103423],{},[42,107037,107039],{"className":26471,"code":107038,"language":26473,"meta":47,"style":47},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[49,107040,107041],{"__ignoreMap":47},[52,107042,107043,107045,107047,107049,107051,107054,107056,107058,107060],{"class":54,"line":55},[52,107044,27226],{"class":75},[52,107046,28965],{"class":62},[52,107048,26483],{"class":62},[52,107050,29050],{"class":308},[52,107052,107053],{"class":62}," python3",[52,107055,103448],{"class":62},[52,107057,105151],{"class":62},[52,107059,103464],{"class":62},[52,107061,107062],{"class":62}," glfw\n",[14,107064,105469],{},[42,107066,107067],{"className":26471,"code":103569,"language":26473,"meta":47,"style":47},[49,107068,107069],{"__ignoreMap":47},[52,107070,107071,107073,107075,107077],{"class":54,"line":55},[52,107072,26480],{"class":75},[52,107074,26483],{"class":62},[52,107076,103580],{"class":62},[52,107078,103583],{"class":62},[14,107080,105486],{},[42,107082,107084],{"className":26471,"code":107083,"language":26473,"meta":47,"style":47},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[49,107085,107086,107103,107112],{"__ignoreMap":47},[52,107087,107088,107090,107092,107094,107097,107099,107101],{"class":54,"line":55},[52,107089,32980],{"class":75},[52,107091,31826],{"class":62},[52,107093,27765],{"class":308},[52,107095,107096],{"class":62}," mujoco-python-api",[52,107098,103625],{"class":62},[52,107100,103628],{"class":308},[52,107102,103631],{"class":308},[52,107104,107105,107107,107109],{"class":54,"line":66},[52,107106,32980],{"class":75},[52,107108,103638],{"class":62},[52,107110,107111],{"class":62}," mujoco-python-api\n",[52,107113,107114,107116,107118,107120],{"class":54,"line":83},[52,107115,26480],{"class":75},[52,107117,26483],{"class":62},[52,107119,103580],{"class":62},[52,107121,103583],{"class":62},[14,107123,103654],{},[1696,107125,107126,107133,107142],{},[32,107127,107128,103668,107130,107132],{},[49,107129,103325],{},[49,107131,103330],{}," 是官方 Python bindings 的类名。",[32,107134,107135,107136,107139,107140,31035],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[49,107137,107138],{},"mjModel"," 在 Python 中是 ",[49,107141,103359],{},[32,107143,107144,107145,31035],{},"不要使用 ",[49,107146,107147],{},"sim = mujoco_py.MjSim(...)",[18,107149,103695],{"id":103694},[14,107151,107152],{},"仿真推进核心代码:",[42,107154,107156],{"className":33028,"code":107155,"language":33030,"meta":47,"style":47},"mujoco.mj_step(model, data)\n",[49,107157,107158],{"__ignoreMap":47},[52,107159,107160],{"class":54,"line":55},[52,107161,107155],{"class":79},[14,107163,107164,107165,3426,107167,3426,107169,31035],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[49,107166,103720],{},[49,107168,103723],{},[49,107170,103717],{},[14,107172,107173],{},"重置仿真:",[42,107175,107177],{"className":33028,"code":107176,"language":33030,"meta":47,"style":47},"mujoco.mj_resetData(model, data)\n",[49,107178,107179],{"__ignoreMap":47},[52,107180,107181],{"class":54,"line":55},[52,107182,107176],{"class":79},[14,107184,107185,107186,85189,107188,107190],{},"如果手动修改了 ",[49,107187,103720],{},[49,107189,103723],{},"，通常应调用:",[42,107192,107194],{"className":33028,"code":107193,"language":33030,"meta":47,"style":47},"mujoco.mj_forward(model, data)\n",[49,107195,107196],{"__ignoreMap":47},[52,107197,107198],{"class":54,"line":55},[52,107199,107193],{"class":79},[14,107201,107202],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[3195,107204,107206,3426,107208,3426,107210,107212],{"id":107205},"qposqvelctrl-是什么",[49,107207,106680],{},[49,107209,107010],{},[49,107211,107013],{}," 是什么",[14,107214,107215],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[3353,107217,107218,107230],{},[3356,107219,107220],{},[3359,107221,107222,107225,107227],{},[3362,107223,107224],{"align":26385},"字段",[3362,107226,103350],{"align":26385},[3362,107228,107229],{"align":26385},"谁来修改",[3399,107231,107232,107244,107256],{},[3359,107233,107234,107238,107241],{},[3404,107235,107236],{"align":26385},[49,107237,103720],{},[3404,107239,107240],{"align":26385},"广义位置，例如小车位置、关节角、自由物体位置姿态",[3404,107242,107243],{"align":26385},"MuJoCo 更新，也可以手动设置初始状态",[3359,107245,107246,107250,107253],{},[3404,107247,107248],{"align":26385},[49,107249,103723],{},[3404,107251,107252],{"align":26385},"广义速度，例如小车速度、关节角速度",[3404,107254,107255],{"align":26385},"MuJoCo 更新，也可以手动清零",[3359,107257,107258,107262,107265],{},[3404,107259,107260],{"align":26385},[49,107261,103726],{},[3404,107263,107264],{"align":26385},"actuator 的控制输入",[3404,107266,107267],{"align":26385},"主要由你的控制代码写入",[14,107269,1453,107270,103668,107272,107274],{},[49,107271,106680],{},[49,107273,107010],{}," 不一定同维。自由刚体就是典型例子：",[42,107276,107279],{"className":107277,"code":107278,"language":8154,"meta":47},[8152],"freejoint: qpos 7 维，qvel 6 维\n",[49,107280,107278],{"__ignoreMap":47},[3195,107282,107284,103668,107286,107288],{"id":107283},"mj_step-和-mj_forward-的区别",[49,107285,103865],{},[49,107287,106900],{}," 的区别",[3353,107290,107291,107304],{},[3356,107292,107293],{},[3359,107294,107295,107298,107301],{},[3362,107296,107297],{"align":26385},"函数",[3362,107299,107300],{"align":26385},"是否推进时间",[3362,107302,107303],{"align":26385},"什么时候用",[3399,107305,107306,107319],{},[3359,107307,107308,107313,107316],{},[3404,107309,107310],{"align":26385},[49,107311,107312],{},"mj_step(model, data)",[3404,107314,107315],{"align":26385},"是",[3404,107317,107318],{"align":26385},"正常仿真循环，每调用一次前进一步",[3359,107320,107321,107326,107329],{},[3404,107322,107323],{"align":26385},[49,107324,107325],{},"mj_forward(model, data)",[3404,107327,107328],{"align":26385},"否",[3404,107330,107331,107332,3426,107334,107336],{"align":26385},"手动改了 ",[49,107333,106680],{},[49,107335,107010],{}," 后，刷新派生量",[14,107338,107339],{},"例如你写：",[42,107341,107343],{"className":33028,"code":107342,"language":33030,"meta":47,"style":47},"data.qpos[2] = 2.0\n",[49,107344,107345],{"__ignoreMap":47},[52,107346,107347,107350,107352,107354,107356],{"class":54,"line":55},[52,107348,107349],{"class":79},"data.qpos[",[52,107351,564],{"class":308},[52,107353,7415],{"class":79},[52,107355,292],{"class":58},[52,107357,107358],{"class":308}," 2.0\n",[14,107360,107361],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[42,107363,107364],{"className":33028,"code":107193,"language":33030,"meta":47,"style":47},[49,107365,107366],{"__ignoreMap":47},[52,107367,107368],{"class":54,"line":55},[52,107369,107193],{"class":79},[3195,107371,107373],{"id":107372},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,107375,107376,107379,107380,107382],{},[49,107377,107378],{},"mujoco.mj_resetData(model, data)"," 会把 ",[49,107381,36051],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[42,107384,107386],{"className":33028,"code":107385,"language":33030,"meta":47,"style":47},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[49,107387,107388,107392,107402,107412],{"__ignoreMap":47},[52,107389,107390],{"class":54,"line":55},[52,107391,107176],{"class":79},[52,107393,107394,107397,107399],{"class":54,"line":66},[52,107395,107396],{"class":79},"data.qpos[:] ",[52,107398,292],{"class":58},[52,107400,107401],{"class":79}," random_qpos\n",[52,107403,107404,107407,107409],{"class":54,"line":83},[52,107405,107406],{"class":79},"data.qvel[:] ",[52,107408,292],{"class":58},[52,107410,107411],{"class":308}," 0.0\n",[52,107413,107414],{"class":54,"line":91},[52,107415,107193],{"class":79},[18,107417,103903],{"id":103902},[42,107419,107421],{"className":33028,"code":107420,"language":33030,"meta":47,"style":47},"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",[49,107422,107423,107429,107439,107443,107447,107455,107460,107464,107468,107472,107477,107481,107486,107491,107496,107500,107504,107508,107512,107516,107520,107539,107546,107558,107569,107585,107601,107605,107609,107621,107633,107641,107645,107656,107660,107676,107680,107684,107693,107697,107702,107711,107715,107728,107733,107742,107746,107750,107762],{"__ignoreMap":47},[52,107424,107425,107427],{"class":54,"line":55},[52,107426,33042],{"class":58},[52,107428,103951],{"class":79},[52,107430,107431,107433,107435,107437],{"class":54,"line":66},[52,107432,33042],{"class":58},[52,107434,34030],{"class":79},[52,107436,34033],{"class":58},[52,107438,34036],{"class":79},[52,107440,107441],{"class":54,"line":83},[52,107442,123],{"emptyLinePlaceholder":122},[52,107444,107445],{"class":54,"line":91},[52,107446,123],{"emptyLinePlaceholder":122},[52,107448,107449,107451,107453],{"class":54,"line":98},[52,107450,103964],{"class":308},[52,107452,16212],{"class":58},[52,107454,103969],{"class":62},[52,107456,107457],{"class":54,"line":107},[52,107458,107459],{"class":62},"\u003Cmujoco model=\"state_api\">\n",[52,107461,107462],{"class":54,"line":113},[52,107463,103979],{"class":62},[52,107465,107466],{"class":54,"line":119},[52,107467,123],{"emptyLinePlaceholder":122},[52,107469,107470],{"class":54,"line":126},[52,107471,103988],{"class":62},[52,107473,107474],{"class":54,"line":132},[52,107475,107476],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[52,107478,107479],{"class":54,"line":138},[52,107480,123],{"emptyLinePlaceholder":122},[52,107482,107483],{"class":54,"line":144},[52,107484,107485],{"class":62},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[52,107487,107488],{"class":54,"line":153},[52,107489,107490],{"class":62},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[52,107492,107493],{"class":54,"line":159},[52,107494,107495],{"class":62},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[52,107497,107498],{"class":54,"line":167},[52,107499,104017],{"class":62},[52,107501,107502],{"class":54,"line":173},[52,107503,104022],{"class":62},[52,107505,107506],{"class":54,"line":181},[52,107507,104027],{"class":62},[52,107509,107510],{"class":54,"line":186},[52,107511,98348],{"class":62},[52,107513,107514],{"class":54,"line":191},[52,107515,123],{"emptyLinePlaceholder":122},[52,107517,107518],{"class":54,"line":196},[52,107519,123],{"emptyLinePlaceholder":122},[52,107521,107522,107524,107527,107530,107532,107535,107537],{"class":54,"line":201},[52,107523,34597],{"class":58},[52,107525,107526],{"class":75}," print_state",[52,107528,107529],{"class":79},"(prefix: ",[52,107531,4350],{"class":308},[52,107533,107534],{"class":79},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[52,107536,98336],{"class":308},[52,107538,6718],{"class":79},[52,107540,107541,107543],{"class":54,"line":206},[52,107542,33949],{"class":308},[52,107544,107545],{"class":79},"(prefix)\n",[52,107547,107548,107550,107552,107555],{"class":54,"line":211},[52,107549,33949],{"class":308},[52,107551,1216],{"class":79},[52,107553,107554],{"class":62},"\"  timestep:\"",[52,107556,107557],{"class":79},", model.opt.timestep)\n",[52,107559,107560,107562,107564,107567],{"class":54,"line":218},[52,107561,33949],{"class":308},[52,107563,1216],{"class":79},[52,107565,107566],{"class":62},"\"  time:\"",[52,107568,104128],{"class":79},[52,107570,107571,107573,107575,107578,107581,107583],{"class":54,"line":223},[52,107572,33949],{"class":308},[52,107574,1216],{"class":79},[52,107576,107577],{"class":62},"\"  qpos:\"",[52,107579,107580],{"class":79},", np.round(data.qpos.copy(), ",[52,107582,3504],{"class":308},[52,107584,33147],{"class":79},[52,107586,107587,107589,107591,107594,107597,107599],{"class":54,"line":230},[52,107588,33949],{"class":308},[52,107590,1216],{"class":79},[52,107592,107593],{"class":62},"\"  qvel:\"",[52,107595,107596],{"class":79},", np.round(data.qvel.copy(), ",[52,107598,3504],{"class":308},[52,107600,33147],{"class":79},[52,107602,107603],{"class":54,"line":239},[52,107604,123],{"emptyLinePlaceholder":122},[52,107606,107607],{"class":54,"line":251},[52,107608,123],{"emptyLinePlaceholder":122},[52,107610,107611,107613,107615,107617,107619],{"class":54,"line":256},[52,107612,34597],{"class":58},[52,107614,245],{"class":75},[52,107616,104048],{"class":79},[52,107618,98336],{"class":308},[52,107620,6718],{"class":79},[52,107622,107623,107625,107627,107629,107631],{"class":54,"line":262},[52,107624,104057],{"class":79},[52,107626,292],{"class":58},[52,107628,104062],{"class":79},[52,107630,103964],{"class":308},[52,107632,708],{"class":79},[52,107634,107635,107637,107639],{"class":54,"line":268},[52,107636,104071],{"class":79},[52,107638,292],{"class":58},[52,107640,104076],{"class":79},[52,107642,107643],{"class":54,"line":280},[52,107644,123],{"emptyLinePlaceholder":122},[52,107646,107647,107650,107653],{"class":54,"line":286},[52,107648,107649],{"class":79},"    print_state(",[52,107651,107652],{"class":62},"\"initial\"",[52,107654,107655],{"class":79},", model, data)\n",[52,107657,107658],{"class":54,"line":300},[52,107659,123],{"emptyLinePlaceholder":122},[52,107661,107662,107664,107666,107668,107670,107672,107674],{"class":54,"line":314},[52,107663,679],{"class":58},[52,107665,104151],{"class":79},[52,107667,28693],{"class":58},[52,107669,35093],{"class":308},[52,107671,1216],{"class":79},[52,107673,3852],{"class":308},[52,107675,33436],{"class":79},[52,107677,107678],{"class":54,"line":327},[52,107679,104166],{"class":79},[52,107681,107682],{"class":54,"line":333},[52,107683,123],{"emptyLinePlaceholder":122},[52,107685,107686,107688,107691],{"class":54,"line":360},[52,107687,107649],{"class":79},[52,107689,107690],{"class":62},"\"after 50 steps\"",[52,107692,107655],{"class":79},[52,107694,107695],{"class":54,"line":365},[52,107696,123],{"emptyLinePlaceholder":122},[52,107698,107699],{"class":54,"line":371},[52,107700,107701],{"class":79},"    mujoco.mj_resetData(model, data)\n",[52,107703,107704,107706,107709],{"class":54,"line":400},[52,107705,107649],{"class":79},[52,107707,107708],{"class":62},"\"after reset\"",[52,107710,107655],{"class":79},[52,107712,107713],{"class":54,"line":405},[52,107714,123],{"emptyLinePlaceholder":122},[52,107716,107717,107720,107722,107724,107726],{"class":54,"line":411},[52,107718,107719],{"class":79},"    data.qpos[",[52,107721,564],{"class":308},[52,107723,7415],{"class":79},[52,107725,292],{"class":58},[52,107727,107358],{"class":308},[52,107729,107730],{"class":54,"line":424},[52,107731,107732],{"class":79},"    mujoco.mj_forward(model, data)\n",[52,107734,107735,107737,107740],{"class":54,"line":436},[52,107736,107649],{"class":79},[52,107738,107739],{"class":62},"\"after manual qpos edit\"",[52,107741,107655],{"class":79},[52,107743,107744],{"class":54,"line":449},[52,107745,123],{"emptyLinePlaceholder":122},[52,107747,107748],{"class":54,"line":2160},[52,107749,123],{"emptyLinePlaceholder":122},[52,107751,107752,107754,107756,107758,107760],{"class":54,"line":2186},[52,107753,4578],{"class":58},[52,107755,33870],{"class":308},[52,107757,104209],{"class":58},[52,107759,104212],{"class":62},[52,107761,6718],{"class":79},[52,107763,107764],{"class":54,"line":2209},[52,107765,104219],{"class":79},[14,107767,106220],{},[42,107769,107771],{"className":26471,"code":107770,"language":26473,"meta":47,"style":47},"touch ch3_python_state.py\n",[49,107772,107773],{"__ignoreMap":47},[52,107774,107775,107777],{"class":54,"line":55},[52,107776,103933],{"class":75},[52,107778,107779],{"class":62}," ch3_python_state.py\n",[14,107781,104951],{},[42,107783,107785],{"className":26471,"code":107784,"language":26473,"meta":47,"style":47},"python ch3_python_state.py\n",[49,107786,107787],{"__ignoreMap":47},[52,107788,107789,107791],{"class":54,"line":55},[52,107790,33030],{"class":75},[52,107792,107779],{"class":62},[3195,107794,104222],{"id":104222},[14,107796,107797],{},"打印状态的函数：",[42,107799,107801],{"className":33028,"code":107800,"language":33030,"meta":47,"style":47},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[49,107802,107803],{"__ignoreMap":47},[52,107804,107805,107807,107809,107811,107813,107815,107817],{"class":54,"line":55},[52,107806,34597],{"class":58},[52,107808,107526],{"class":75},[52,107810,107529],{"class":79},[52,107812,4350],{"class":308},[52,107814,107534],{"class":79},[52,107816,98336],{"class":308},[52,107818,6718],{"class":79},[14,107820,107821,107822,107824],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[49,107823,36051],{}," 里发生了什么。",[14,107826,107827],{},"推进 50 步：",[42,107829,107831],{"className":33028,"code":107830,"language":33030,"meta":47,"style":47},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[49,107832,107833,107849],{"__ignoreMap":47},[52,107834,107835,107837,107839,107841,107843,107845,107847],{"class":54,"line":55},[52,107836,6014],{"class":58},[52,107838,104151],{"class":79},[52,107840,28693],{"class":58},[52,107842,35093],{"class":308},[52,107844,1216],{"class":79},[52,107846,3852],{"class":308},[52,107848,33436],{"class":79},[52,107850,107851],{"class":54,"line":66},[52,107852,104349],{"class":79},[14,107854,107855,107856,107859,107860,107862],{},"由于 ",[49,107857,107858],{},"timestep=0.01","，所以 50 步后时间约为 ",[49,107861,37979],{}," 秒。",[14,107864,107865],{},"重置：",[42,107867,107868],{"className":33028,"code":107176,"language":33030,"meta":47,"style":47},[49,107869,107870],{"__ignoreMap":47},[52,107871,107872],{"class":54,"line":55},[52,107873,107176],{"class":79},[14,107875,107876],{},"这会把时间、位置、速度恢复到初始状态。",[14,107878,107879],{},"手动改高度：",[42,107881,107883],{"className":33028,"code":107882,"language":33030,"meta":47,"style":47},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[49,107884,107885,107897],{"__ignoreMap":47},[52,107886,107887,107889,107891,107893,107895],{"class":54,"line":55},[52,107888,107349],{"class":79},[52,107890,564],{"class":308},[52,107892,7415],{"class":79},[52,107894,292],{"class":58},[52,107896,107358],{"class":308},[52,107898,107899],{"class":54,"line":66},[52,107900,107193],{"class":79},[14,107902,107903,107904,107907,107908,107911],{},"这个例子里 ",[49,107905,107906],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[49,107909,107910],{},"2.0"," 表示把小球放到更高的位置。",[3195,107913,104358],{"id":104358},[42,107915,107916],{"className":33028,"code":107800,"language":33030,"meta":47,"style":47},[49,107917,107918],{"__ignoreMap":47},[52,107919,107920,107922,107924,107926,107928,107930,107932],{"class":54,"line":55},[52,107921,34597],{"class":58},[52,107923,107526],{"class":75},[52,107925,107529],{"class":79},[52,107927,4350],{"class":308},[52,107929,107534],{"class":79},[52,107931,98336],{"class":308},[52,107933,6718],{"class":79},[14,107935,107936],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[1696,107938,107939,107948,107953],{},[32,107940,107941,107944,107945,107947],{},[49,107942,107943],{},"prefix","：一段文字，比如 ",[49,107946,107652],{},"，用来说明现在打印的是哪个阶段。",[32,107949,107950,107952],{},[49,107951,104735],{},"：MuJoCo 模型。",[32,107954,107955,107957],{},[49,107956,36051],{},"：MuJoCo 当前状态。",[14,107959,107960,3426,107963,107966],{},[49,107961,107962],{},"prefix: str",[49,107964,107965],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[42,107968,107970],{"className":33028,"code":107969,"language":33030,"meta":47,"style":47},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[49,107971,107972],{"__ignoreMap":47},[52,107973,107974,107976,107978,107980,107982,107984],{"class":54,"line":55},[52,107975,33065],{"class":308},[52,107977,1216],{"class":79},[52,107979,107577],{"class":62},[52,107981,107580],{"class":79},[52,107983,3504],{"class":308},[52,107985,33147],{"class":79},[14,107987,107988,107991],{},[49,107989,107990],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[42,107993,107995],{"className":33028,"code":107994,"language":33030,"meta":47,"style":47},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[49,107996,107997,108009],{"__ignoreMap":47},[52,107998,107999,108001,108003,108005,108007],{"class":54,"line":55},[52,108000,104284],{"class":79},[52,108002,292],{"class":58},[52,108004,104062],{"class":79},[52,108006,103964],{"class":308},[52,108008,708],{"class":79},[52,108010,108011,108013,108015],{"class":54,"line":66},[52,108012,104308],{"class":79},[52,108014,292],{"class":58},[52,108016,104076],{"class":79},[14,108018,108019],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[42,108021,108023],{"className":33028,"code":108022,"language":33030,"meta":47,"style":47},"print_state(\"initial\", model, data)\n",[49,108024,108025],{"__ignoreMap":47},[52,108026,108027,108030,108032],{"class":54,"line":55},[52,108028,108029],{"class":79},"print_state(",[52,108031,107652],{"class":62},[52,108033,107655],{"class":79},[14,108035,108036,108037,108040],{},"调用刚才定义的 ",[49,108038,108039],{},"print_state"," 函数，打印初始状态。",[42,108042,108043],{"className":33028,"code":107830,"language":33030,"meta":47,"style":47},[49,108044,108045,108061],{"__ignoreMap":47},[52,108046,108047,108049,108051,108053,108055,108057,108059],{"class":54,"line":55},[52,108048,6014],{"class":58},[52,108050,104151],{"class":79},[52,108052,28693],{"class":58},[52,108054,35093],{"class":308},[52,108056,1216],{"class":79},[52,108058,3852],{"class":308},[52,108060,33436],{"class":79},[52,108062,108063],{"class":54,"line":66},[52,108064,104349],{"class":79},[14,108066,108067],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[42,108069,108070],{"className":33028,"code":107176,"language":33030,"meta":47,"style":47},[49,108071,108072],{"__ignoreMap":47},[52,108073,108074],{"class":54,"line":55},[52,108075,107176],{"class":79},[14,108077,108078,108079,108081,108082,108084],{},"重置 ",[49,108080,36051],{},"。注意它不会重新创建 ",[49,108083,104735],{},"，因为模型结构没有变，只是状态回到初始值。",[42,108086,108087],{"className":33028,"code":107342,"language":33030,"meta":47,"style":47},[49,108088,108089],{"__ignoreMap":47},[52,108090,108091,108093,108095,108097,108099],{"class":54,"line":55},[52,108092,107349],{"class":79},[52,108094,564],{"class":308},[52,108096,7415],{"class":79},[52,108098,292],{"class":58},[52,108100,107358],{"class":308},[14,108102,108103,108104,3426,108107,3426,108110,108112],{},"这行是“手动改状态”。在 freejoint 中，",[49,108105,108106],{},"qpos[0]",[49,108108,108109],{},"qpos[1]",[49,108111,107906],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[42,108114,108115],{"className":33028,"code":107193,"language":33030,"meta":47,"style":47},[49,108116,108117],{"__ignoreMap":47},[52,108118,108119],{"class":54,"line":55},[52,108120,107193],{"class":79},[14,108122,108123,108124,108126,108127,108129],{},"手动改完 ",[49,108125,106680],{}," 后，调用 ",[49,108128,106900],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[18,108131,104966],{"id":104965},[14,108133,108134],{},"你会看到:",[1696,108136,108137,108142,108147,108150],{},[32,108138,108139,108140],{},"初始时间为 ",[49,108141,692],{},[32,108143,108144,108145],{},"50 步后时间约为 ",[49,108146,37979],{},[32,108148,108149],{},"reset 后状态恢复",[32,108151,108152,108153,108156,108157],{},"手动修改 ",[49,108154,108155],{},"data.qpos[2]"," 后，小球高度变为 ",[49,108158,107910],{},[14,108160,108161,108163],{},[49,108162,107906],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,108165,108166],{},"输出里可以重点看三件事：",[1696,108168,108169,108177,108182],{},[32,108170,108171,108173,108174,108176],{},[49,108172,2286],{}," 是否随着 ",[49,108175,103865],{}," 增加。",[32,108178,108179,108181],{},[49,108180,106680],{}," 的 z 坐标是否因为下落而变化。",[32,108183,108184,108186,108187,31035],{},[49,108185,107002],{}," 后时间是否回到 ",[49,108188,692],{},[18,108190,104998],{"id":104997},[1696,108192,108193,108199,108205,108211,108214,108223],{},[32,108194,108195,108196,31035],{},"修改 timestep 为 ",[49,108197,108198],{},"0.005",[32,108200,108201,108202,31035],{},"重新运行，检查 50 步后时间是否约为 ",[49,108203,108204],{},"0.25",[32,108206,108207,108208,31035],{},"修改重力为 ",[49,108209,108210],{},"0 0 -1.0",[32,108212,108213],{},"观察小球下降速度是否变慢。",[32,108215,105061,108216,105064,108219,108222],{},[49,108217,108218],{},"data.qpos[2] = 2.0",[49,108220,108221],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[32,108224,108225,108226,108229],{},"注释掉 ",[49,108227,108228],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[18,108231,105103],{"id":105102},[3195,108233,108235,108236,108238],{"id":108234},"修改-dataqpos-后位置没有更新","修改 ",[49,108237,103720],{}," 后位置没有更新",[14,108240,105112],{},[42,108242,108243],{"className":33028,"code":107193,"language":33030,"meta":47,"style":47},[49,108244,108245],{"__ignoreMap":47},[52,108246,108247],{"class":54,"line":55},[52,108248,107193],{"class":79},[3195,108250,108251],{"id":108251},"数组维度看不懂",[14,108253,108254],{},"打印模型维度:",[42,108256,108258],{"className":33028,"code":108257,"language":33030,"meta":47,"style":47},"print(model.nq, model.nv, model.nu)\n",[49,108259,108260],{"__ignoreMap":47},[52,108261,108262,108264],{"class":54,"line":55},[52,108263,33065],{"class":308},[52,108265,108266],{"class":79},"(model.nq, model.nv, model.nu)\n",[3353,108268,108269,108277],{},[3356,108270,108271],{},[3359,108272,108273,108275],{},[3362,108274,107224],{"align":26385},[3362,108276,103350],{"align":26385},[3399,108278,108279,108289,108299],{},[3359,108280,108281,108286],{},[3404,108282,108283],{"align":26385},[49,108284,108285],{},"nq",[3404,108287,108288],{"align":26385},"位置变量数量",[3359,108290,108291,108296],{},[3404,108292,108293],{"align":26385},[49,108294,108295],{},"nv",[3404,108297,108298],{"align":26385},"速度变量数量",[3359,108300,108301,108305],{},[3404,108302,108303],{"align":26385},[49,108304,104812],{},[3404,108306,108307],{"align":26385},"控制输入数量",[3195,108309,108311,108312,108314],{"id":108310},"误以为-qpos-一定等于关节数","误以为 ",[49,108313,106680],{}," 一定等于关节数",[14,108316,108317,108318,85180,108320,108322,108323,108325],{},"不是。例如 ",[49,108319,104270],{},[49,108321,106680],{}," 是 7 维，但 ",[49,108324,107010],{}," 是 6 维。",[3195,108327,108329,108330,108332],{"id":108328},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[49,108331,106680],{}," 的第几位",[14,108334,108335],{},"初学时可以先打印：",[42,108337,108339],{"className":33028,"code":108338,"language":33030,"meta":47,"style":47},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[49,108340,108341,108351,108361,108373],{"__ignoreMap":47},[52,108342,108343,108345,108347,108349],{"class":54,"line":55},[52,108344,33065],{"class":308},[52,108346,1216],{"class":79},[52,108348,104089],{"class":62},[52,108350,104092],{"class":79},[52,108352,108353,108355,108357,108359],{"class":54,"line":66},[52,108354,33065],{"class":308},[52,108356,1216],{"class":79},[52,108358,104101],{"class":62},[52,108360,104104],{"class":79},[52,108362,108363,108365,108367,108370],{"class":54,"line":83},[52,108364,33065],{"class":308},[52,108366,1216],{"class":79},[52,108368,108369],{"class":62},"\"qpos:\"",[52,108371,108372],{"class":79},", data.qpos)\n",[52,108374,108375,108377,108379,108382],{"class":54,"line":91},[52,108376,33065],{"class":308},[52,108378,1216],{"class":79},[52,108380,108381],{"class":62},"\"qvel:\"",[52,108383,108384],{"class":79},", data.qvel)\n",[14,108386,108387],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[3195,108389,108390],{"id":108390},"仿真结果每次都一样",[14,108392,108393,108394,108396],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[49,108395,106680],{},"、目标点或控制输入。",[18,108398,105257],{"id":105256},[14,108400,108401,108402,27268],{},"Python 控制 MuJoCo 的核心就是读写 ",[49,108403,36051],{},[1696,108405,108406,108414,108419,108424],{},[32,108407,108408,108409,103668,108411,108413],{},"用 ",[49,108410,103720],{},[49,108412,103723],{}," 读取状态。",[32,108415,108408,108416,108418],{},[49,108417,103726],{}," 写入控制。",[32,108420,108408,108421,108423],{},[49,108422,103865],{}," 推进时间。",[32,108425,108426,108427,108429],{},"手动改状态后用 ",[49,108428,106900],{}," 刷新派生量。",[14,108431,108432],{},"理解这一章后，就可以进入关节和 actuator 控制。",[3141,108434,108435],{},"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":47,"searchDepth":66,"depth":66,"links":108437},[108438,108439,108440,108447,108451,108452,108453,108463],{"id":103296,"depth":66,"text":103297},{"id":103419,"depth":66,"text":103420},{"id":103694,"depth":66,"text":103695,"children":108441},[108442,108444,108446],{"id":107205,"depth":83,"text":108443},"qpos、qvel、ctrl 是什么",{"id":107283,"depth":83,"text":108445},"mj_step 和 mj_forward 的区别",{"id":107372,"depth":83,"text":107373},{"id":103902,"depth":66,"text":103903,"children":108448},[108449,108450],{"id":104222,"depth":83,"text":104222},{"id":104358,"depth":83,"text":104358},{"id":104965,"depth":66,"text":104966},{"id":104997,"depth":66,"text":104998},{"id":105102,"depth":66,"text":105103,"children":108454},[108455,108457,108458,108460,108462],{"id":108234,"depth":83,"text":108456},"修改 data.qpos 后位置没有更新",{"id":108251,"depth":83,"text":108251},{"id":108310,"depth":83,"text":108459},"误以为 qpos 一定等于关节数",{"id":108328,"depth":83,"text":108461},"不知道某个元素在 qpos 的第几位",{"id":108390,"depth":83,"text":108390},{"id":105256,"depth":66,"text":105257},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106968,"description":47},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":108470,"title":108471,"body":108472,"description":47,"extension":3153,"meta":110162,"navigation":122,"path":110163,"seo":110164,"stem":110165,"__hash__":110166},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":108473,"toc":110138},[108474,108477,108479,108482,108484,108509,108512,108531,108534,108536,108538,108562,108564,108578,108580,108621,108623,108647,108649,108652,108686,108688,108701,108704,108772,108781,108785,108788,108822,108828,108831,108835,108874,108877,108897,108901,108944,108946,108975,108978,108984,108987,108989,109383,109385,109397,109399,109410,109412,109415,109444,109452,109455,109490,109493,109495,109503,109506,109508,109519,109529,109549,109552,109588,109600,109648,109667,109709,109722,109750,109755,109776,109786,109804,109807,109841,109844,109864,109867,109886,109892,109894,109897,109903,109909,109919,109922,109928,109937,109939,109985,109987,109993,109999,110002,110005,110025,110028,110034,110040,110042,110065,110068,110071,110080,110083,110121,110123,110126,110132,110135],[10,108475,108471],{"id":108476},"_4关节actuator-与力控制",[18,108478,103297],{"id":103296},[14,108480,108481],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,108483,106981],{},[1696,108485,108486,108492,108497,108501,108506],{},[32,108487,108488,108491],{},[49,108489,108490],{},"hinge"," 关节",[32,108493,108494],{},[49,108495,108496],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[32,108498,108499],{},[49,108500,103726],{},[32,108502,108503],{},[49,108504,108505],{},"ctrlrange",[32,108507,108508],{},"读取关节角和角速度",[14,108510,108511],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[42,108513,108515],{"className":33028,"code":108514,"language":33030,"meta":47,"style":47},"data.ctrl[0] = ...\n",[49,108516,108517],{"__ignoreMap":47},[52,108518,108519,108522,108524,108526,108528],{"class":54,"line":55},[52,108520,108521],{"class":79},"data.ctrl[",[52,108523,692],{"class":308},[52,108525,7415],{"class":79},[52,108527,292],{"class":58},[52,108529,108530],{"class":308}," ...\n",[14,108532,108533],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[18,108535,103420],{"id":103419},[14,108537,103423],{},[42,108539,108540],{"className":26471,"code":107038,"language":26473,"meta":47,"style":47},[49,108541,108542],{"__ignoreMap":47},[52,108543,108544,108546,108548,108550,108552,108554,108556,108558,108560],{"class":54,"line":55},[52,108545,27226],{"class":75},[52,108547,28965],{"class":62},[52,108549,26483],{"class":62},[52,108551,29050],{"class":308},[52,108553,107053],{"class":62},[52,108555,103448],{"class":62},[52,108557,105151],{"class":62},[52,108559,103464],{"class":62},[52,108561,107062],{"class":62},[14,108563,105469],{},[42,108565,108566],{"className":26471,"code":103569,"language":26473,"meta":47,"style":47},[49,108567,108568],{"__ignoreMap":47},[52,108569,108570,108572,108574,108576],{"class":54,"line":55},[52,108571,26480],{"class":75},[52,108573,26483],{"class":62},[52,108575,103580],{"class":62},[52,108577,103583],{"class":62},[14,108579,105486],{},[42,108581,108583],{"className":26471,"code":108582,"language":26473,"meta":47,"style":47},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[49,108584,108585,108602,108611],{"__ignoreMap":47},[52,108586,108587,108589,108591,108593,108596,108598,108600],{"class":54,"line":55},[52,108588,32980],{"class":75},[52,108590,31826],{"class":62},[52,108592,27765],{"class":308},[52,108594,108595],{"class":62}," mujoco-control",[52,108597,103625],{"class":62},[52,108599,103628],{"class":308},[52,108601,103631],{"class":308},[52,108603,108604,108606,108608],{"class":54,"line":66},[52,108605,32980],{"class":75},[52,108607,103638],{"class":62},[52,108609,108610],{"class":62}," mujoco-control\n",[52,108612,108613,108615,108617,108619],{"class":54,"line":83},[52,108614,26480],{"class":75},[52,108616,26483],{"class":62},[52,108618,103580],{"class":62},[52,108620,103583],{"class":62},[14,108622,103654],{},[1696,108624,108625,108631,108638,108644],{},[32,108626,108627,108630],{},[49,108628,108629],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[32,108632,108633,108635,108636,31035],{},[49,108634,103726],{}," 长度等于 ",[49,108637,104808],{},[32,108639,84872,108640,108643],{},[49,108641,108642],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[32,108645,108646],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[18,108648,103695],{"id":103694},[14,108650,108651],{},"关节决定 body 如何运动:",[42,108653,108655],{"className":55717,"code":108654,"language":55719,"meta":47,"style":47},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[49,108656,108657],{"__ignoreMap":47},[52,108658,108659,108661,108663,108665,108667,108670,108672,108674,108676,108679,108681,108684],{"class":54,"line":55},[52,108660,698],{"class":79},[52,108662,105606],{"class":53950},[52,108664,17568],{"class":75},[52,108666,292],{"class":79},[52,108668,108669],{"class":62},"\"hinge\"",[52,108671,56474],{"class":75},[52,108673,292],{"class":79},[52,108675,108669],{"class":62},[52,108677,108678],{"class":75}," axis",[52,108680,292],{"class":79},[52,108682,108683],{"class":62},"\"0 1 0\"",[52,108685,103794],{"class":79},[14,108687,105702],{},[1696,108689,108690,108695,108698],{},[32,108691,108692,108693],{},"名字是 ",[49,108694,108490],{},[32,108696,108697],{},"类型是旋转关节",[32,108699,108700],{},"绕 y 轴旋转",[14,108702,108703],{},"actuator 决定如何施加控制:",[42,108705,108707],{"className":55717,"code":108706,"language":55719,"meta":47,"style":47},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[49,108708,108709,108718,108764],{"__ignoreMap":47},[52,108710,108711,108713,108716],{"class":54,"line":55},[52,108712,698],{"class":79},[52,108714,108715],{"class":53950},"actuator",[52,108717,53957],{"class":79},[52,108719,108720,108722,108725,108727,108729,108732,108735,108737,108739,108742,108744,108746,108749,108751,108754,108757,108759,108762],{"class":54,"line":66},[52,108721,54794],{"class":79},[52,108723,108724],{"class":53950},"motor",[52,108726,17568],{"class":75},[52,108728,292],{"class":79},[52,108730,108731],{"class":62},"\"hinge_motor\"",[52,108733,108734],{"class":75}," joint",[52,108736,292],{"class":79},[52,108738,108669],{"class":62},[52,108740,108741],{"class":75}," gear",[52,108743,292],{"class":79},[52,108745,419],{"class":62},[52,108747,108748],{"class":75}," ctrlrange",[52,108750,292],{"class":79},[52,108752,108753],{"class":62},"\"-2 2\"",[52,108755,108756],{"class":75}," ctrllimited",[52,108758,292],{"class":79},[52,108760,108761],{"class":62},"\"true\"",[52,108763,103794],{"class":79},[52,108765,108766,108768,108770],{"class":54,"line":83},[52,108767,54435],{"class":79},[52,108769,108715],{"class":53950},[52,108771,53957],{"class":79},[14,108773,108774,108777,108778,31035],{},[49,108775,108776],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[49,108779,108780],{},"[-2, 2]",[3195,108782,108784],{"id":108783},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,108786,108787],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[3353,108789,108790,108800],{},[3356,108791,108792],{},[3359,108793,108794,108796,108798],{},[3362,108795,28403],{"align":26385},[3362,108797,105346],{"align":26385},[3362,108799,103384],{"align":26385},[3399,108801,108802,108812],{},[3359,108803,108804,108806,108809],{},[3404,108805,105606],{"align":26385},[3404,108807,108808],{"align":26385},"定义能怎么动",[3404,108810,108811],{"align":26385},"门轴允许门旋转",[3359,108813,108814,108816,108819],{},[3404,108815,108715],{"align":26385},[3404,108817,108818],{"align":26385},"定义怎么施力或控制",[3404,108820,108821],{"align":26385},"人推门、马达带动门",[14,108823,108824,108825,108827],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[49,108826,103726],{}," 主动控制它。",[14,108829,108830],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[3195,108832,108834],{"id":108833},"hinge-joint","hinge joint",[42,108836,108838],{"className":55717,"code":108837,"language":55719,"meta":47,"style":47},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[49,108839,108840],{"__ignoreMap":47},[52,108841,108842,108844,108846,108848,108850,108852,108854,108856,108858,108860,108862,108864,108867,108869,108872],{"class":54,"line":55},[52,108843,698],{"class":79},[52,108845,105606],{"class":53950},[52,108847,17568],{"class":75},[52,108849,292],{"class":79},[52,108851,108669],{"class":62},[52,108853,56474],{"class":75},[52,108855,292],{"class":79},[52,108857,108669],{"class":62},[52,108859,108678],{"class":75},[52,108861,292],{"class":79},[52,108863,108683],{"class":62},[52,108865,108866],{"class":75}," damping",[52,108868,292],{"class":79},[52,108870,108871],{"class":62},"\"0.1\"",[52,108873,103794],{"class":79},[14,108875,108876],{},"含义：",[1696,108878,108879,108885,108891],{},[32,108880,108881,108884],{},[49,108882,108883],{},"type=\"hinge\"","：只能绕一个轴旋转。",[32,108886,108887,108890],{},[49,108888,108889],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[32,108892,108893,108896],{},[49,108894,108895],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[3195,108898,108900],{"id":108899},"motor-actuator","motor actuator",[42,108902,108904],{"className":55717,"code":108903,"language":55719,"meta":47,"style":47},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[49,108905,108906],{"__ignoreMap":47},[52,108907,108908,108910,108912,108914,108916,108918,108920,108922,108924,108926,108928,108930,108932,108934,108936,108938,108940,108942],{"class":54,"line":55},[52,108909,698],{"class":79},[52,108911,108724],{"class":53950},[52,108913,17568],{"class":75},[52,108915,292],{"class":79},[52,108917,108731],{"class":62},[52,108919,108734],{"class":75},[52,108921,292],{"class":79},[52,108923,108669],{"class":62},[52,108925,108741],{"class":75},[52,108927,292],{"class":79},[52,108929,419],{"class":62},[52,108931,108748],{"class":75},[52,108933,292],{"class":79},[52,108935,108753],{"class":62},[52,108937,108756],{"class":75},[52,108939,292],{"class":79},[52,108941,108761],{"class":62},[52,108943,103794],{"class":79},[14,108945,108876],{},[1696,108947,108948,108957,108963,108969],{},[32,108949,108950,108953,108954,108956],{},[49,108951,108952],{},"joint=\"hinge\"","：这个电机作用在名为 ",[49,108955,108490],{}," 的关节上。",[32,108958,108959,108962],{},[49,108960,108961],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[32,108964,108965,108968],{},[49,108966,108967],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[32,108970,108971,108974],{},[49,108972,108973],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,108976,108977],{},"简单理解：",[42,108979,108982],{"className":108980,"code":108981,"language":8154,"meta":47},[8152],"实际施加效果 ≈ data.ctrl[0] * gear\n",[49,108983,108981],{"__ignoreMap":47},[14,108985,108986],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[18,108988,103903],{"id":103902},[42,108990,108992],{"className":33028,"code":108991,"language":33030,"meta":47,"style":47},"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",[49,108993,108994,109001,109005,109011,109021,109025,109029,109037,109042,109047,109051,109055,109060,109065,109069,109074,109079,109084,109089,109093,109097,109101,109106,109111,109116,109120,109124,109128,109132,109144,109156,109164,109168,109178,109188,109198,109202,109215,109228,109232,109249,109263,109298,109302,109306,109317,109332,109347,109359,109363,109367,109379],{"__ignoreMap":47},[52,108995,108996,108998],{"class":54,"line":55},[52,108997,33042],{"class":58},[52,108999,109000],{"class":79}," math\n",[52,109002,109003],{"class":54,"line":66},[52,109004,123],{"emptyLinePlaceholder":122},[52,109006,109007,109009],{"class":54,"line":83},[52,109008,33042],{"class":58},[52,109010,103951],{"class":79},[52,109012,109013,109015,109017,109019],{"class":54,"line":91},[52,109014,33042],{"class":58},[52,109016,34030],{"class":79},[52,109018,34033],{"class":58},[52,109020,34036],{"class":79},[52,109022,109023],{"class":54,"line":98},[52,109024,123],{"emptyLinePlaceholder":122},[52,109026,109027],{"class":54,"line":107},[52,109028,123],{"emptyLinePlaceholder":122},[52,109030,109031,109033,109035],{"class":54,"line":113},[52,109032,103964],{"class":308},[52,109034,16212],{"class":58},[52,109036,103969],{"class":62},[52,109038,109039],{"class":54,"line":119},[52,109040,109041],{"class":62},"\u003Cmujoco model=\"one_link_motor\">\n",[52,109043,109044],{"class":54,"line":126},[52,109045,109046],{"class":62},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[52,109048,109049],{"class":54,"line":132},[52,109050,123],{"emptyLinePlaceholder":122},[52,109052,109053],{"class":54,"line":138},[52,109054,103988],{"class":62},[52,109056,109057],{"class":54,"line":144},[52,109058,109059],{"class":62},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[52,109061,109062],{"class":54,"line":153},[52,109063,109064],{"class":62},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[52,109066,109067],{"class":54,"line":159},[52,109068,123],{"emptyLinePlaceholder":122},[52,109070,109071],{"class":54,"line":167},[52,109072,109073],{"class":62},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[52,109075,109076],{"class":54,"line":173},[52,109077,109078],{"class":62},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[52,109080,109081],{"class":54,"line":181},[52,109082,109083],{"class":62},"        \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",[52,109085,109086],{"class":54,"line":186},[52,109087,109088],{"class":62},"      \u003C\u002Fbody>\n",[52,109090,109091],{"class":54,"line":191},[52,109092,104017],{"class":62},[52,109094,109095],{"class":54,"line":196},[52,109096,104022],{"class":62},[52,109098,109099],{"class":54,"line":201},[52,109100,123],{"emptyLinePlaceholder":122},[52,109102,109103],{"class":54,"line":206},[52,109104,109105],{"class":62},"  \u003Cactuator>\n",[52,109107,109108],{"class":54,"line":211},[52,109109,109110],{"class":62},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[52,109112,109113],{"class":54,"line":218},[52,109114,109115],{"class":62},"  \u003C\u002Factuator>\n",[52,109117,109118],{"class":54,"line":223},[52,109119,104027],{"class":62},[52,109121,109122],{"class":54,"line":230},[52,109123,98348],{"class":62},[52,109125,109126],{"class":54,"line":239},[52,109127,123],{"emptyLinePlaceholder":122},[52,109129,109130],{"class":54,"line":251},[52,109131,123],{"emptyLinePlaceholder":122},[52,109133,109134,109136,109138,109140,109142],{"class":54,"line":256},[52,109135,34597],{"class":58},[52,109137,245],{"class":75},[52,109139,104048],{"class":79},[52,109141,98336],{"class":308},[52,109143,6718],{"class":79},[52,109145,109146,109148,109150,109152,109154],{"class":54,"line":262},[52,109147,104057],{"class":79},[52,109149,292],{"class":58},[52,109151,104062],{"class":79},[52,109153,103964],{"class":308},[52,109155,708],{"class":79},[52,109157,109158,109160,109162],{"class":54,"line":268},[52,109159,104071],{"class":79},[52,109161,292],{"class":58},[52,109163,104076],{"class":79},[52,109165,109166],{"class":54,"line":280},[52,109167,123],{"emptyLinePlaceholder":122},[52,109169,109170,109172,109174,109176],{"class":54,"line":286},[52,109171,33949],{"class":308},[52,109173,1216],{"class":79},[52,109175,104089],{"class":62},[52,109177,104092],{"class":79},[52,109179,109180,109182,109184,109186],{"class":54,"line":300},[52,109181,33949],{"class":308},[52,109183,1216],{"class":79},[52,109185,104101],{"class":62},[52,109187,104104],{"class":79},[52,109189,109190,109192,109194,109196],{"class":54,"line":314},[52,109191,33949],{"class":308},[52,109193,1216],{"class":79},[52,109195,104113],{"class":62},[52,109197,104116],{"class":79},[52,109199,109200],{"class":54,"line":327},[52,109201,123],{"emptyLinePlaceholder":122},[52,109203,109204,109206,109209,109211,109213],{"class":54,"line":333},[52,109205,6088],{"class":58},[52,109207,109208],{"class":79}," model.nu ",[52,109210,23596],{"class":58},[52,109212,27768],{"class":308},[52,109214,6718],{"class":79},[52,109216,109217,109219,109221,109223,109226],{"class":54,"line":360},[52,109218,106082],{"class":58},[52,109220,106085],{"class":308},[52,109222,1216],{"class":79},[52,109224,109225],{"class":62},"\"expected exactly one actuator\"",[52,109227,708],{"class":79},[52,109229,109230],{"class":54,"line":365},[52,109231,123],{"emptyLinePlaceholder":122},[52,109233,109234,109236,109238,109240,109242,109244,109247],{"class":54,"line":371},[52,109235,679],{"class":58},[52,109237,34266],{"class":79},[52,109239,28693],{"class":58},[52,109241,35093],{"class":308},[52,109243,1216],{"class":79},[52,109245,109246],{"class":308},"2000",[52,109248,33436],{"class":79},[52,109250,109251,109254,109256,109258,109260],{"class":54,"line":400},[52,109252,109253],{"class":79},"        t ",[52,109255,292],{"class":58},[52,109257,34266],{"class":79},[52,109259,3053],{"class":58},[52,109261,109262],{"class":79}," model.opt.timestep\n",[52,109264,109265,109268,109270,109272,109274,109277,109279,109282,109284,109286,109289,109291,109293,109295],{"class":54,"line":405},[52,109266,109267],{"class":79},"        data.ctrl[",[52,109269,692],{"class":308},[52,109271,7415],{"class":79},[52,109273,292],{"class":58},[52,109275,109276],{"class":308}," 1.5",[52,109278,872],{"class":58},[52,109280,109281],{"class":79}," math.sin(",[52,109283,107910],{"class":308},[52,109285,872],{"class":58},[52,109287,109288],{"class":79}," math.pi ",[52,109290,3053],{"class":58},[52,109292,64517],{"class":308},[52,109294,872],{"class":58},[52,109296,109297],{"class":79}," t)\n",[52,109299,109300],{"class":54,"line":411},[52,109301,104166],{"class":79},[52,109303,109304],{"class":54,"line":424},[52,109305,123],{"emptyLinePlaceholder":122},[52,109307,109308,109310,109312,109315],{"class":54,"line":436},[52,109309,33949],{"class":308},[52,109311,1216],{"class":79},[52,109313,109314],{"class":62},"\"time:\"",[52,109316,104128],{"class":79},[52,109318,109319,109321,109323,109326,109328,109330],{"class":54,"line":449},[52,109320,33949],{"class":308},[52,109322,1216],{"class":79},[52,109324,109325],{"class":62},"\"joint qpos:\"",[52,109327,107580],{"class":79},[52,109329,3504],{"class":308},[52,109331,33147],{"class":79},[52,109333,109334,109336,109338,109341,109343,109345],{"class":54,"line":2160},[52,109335,33949],{"class":308},[52,109337,1216],{"class":79},[52,109339,109340],{"class":62},"\"joint qvel:\"",[52,109342,107596],{"class":79},[52,109344,3504],{"class":308},[52,109346,33147],{"class":79},[52,109348,109349,109351,109353,109356],{"class":54,"line":2186},[52,109350,33949],{"class":308},[52,109352,1216],{"class":79},[52,109354,109355],{"class":62},"\"last ctrl:\"",[52,109357,109358],{"class":79},", data.ctrl.copy())\n",[52,109360,109361],{"class":54,"line":2209},[52,109362,123],{"emptyLinePlaceholder":122},[52,109364,109365],{"class":54,"line":2233},[52,109366,123],{"emptyLinePlaceholder":122},[52,109368,109369,109371,109373,109375,109377],{"class":54,"line":2238},[52,109370,4578],{"class":58},[52,109372,33870],{"class":308},[52,109374,104209],{"class":58},[52,109376,104212],{"class":62},[52,109378,6718],{"class":79},[52,109380,109381],{"class":54,"line":2243},[52,109382,104219],{"class":79},[14,109384,106220],{},[42,109386,109388],{"className":26471,"code":109387,"language":26473,"meta":47,"style":47},"touch ch4_joint_motor.py\n",[49,109389,109390],{"__ignoreMap":47},[52,109391,109392,109394],{"class":54,"line":55},[52,109393,103933],{"class":75},[52,109395,109396],{"class":62}," ch4_joint_motor.py\n",[14,109398,104951],{},[42,109400,109402],{"className":26471,"code":109401,"language":26473,"meta":47,"style":47},"python ch4_joint_motor.py\n",[49,109403,109404],{"__ignoreMap":47},[52,109405,109406,109408],{"class":54,"line":55},[52,109407,33030],{"class":75},[52,109409,109396],{"class":62},[3195,109411,104222],{"id":104222},[14,109413,109414],{},"检查 actuator 数量：",[42,109416,109418],{"className":33028,"code":109417,"language":33030,"meta":47,"style":47},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[49,109419,109420,109432],{"__ignoreMap":47},[52,109421,109422,109424,109426,109428,109430],{"class":54,"line":55},[52,109423,4578],{"class":58},[52,109425,109208],{"class":79},[52,109427,23596],{"class":58},[52,109429,27768],{"class":308},[52,109431,6718],{"class":79},[52,109433,109434,109436,109438,109440,109442],{"class":54,"line":66},[52,109435,106545],{"class":58},[52,109437,106085],{"class":308},[52,109439,1216],{"class":79},[52,109441,109225],{"class":62},[52,109443,708],{"class":79},[14,109445,109446,109448,109449,109451],{},[49,109447,104808],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[49,109450,103726],{}," 长度应该是 1。",[14,109453,109454],{},"产生正弦控制信号：",[42,109456,109458],{"className":33028,"code":109457,"language":33030,"meta":47,"style":47},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[49,109459,109460],{"__ignoreMap":47},[52,109461,109462,109464,109466,109468,109470,109472,109474,109476,109478,109480,109482,109484,109486,109488],{"class":54,"line":55},[52,109463,108521],{"class":79},[52,109465,692],{"class":308},[52,109467,7415],{"class":79},[52,109469,292],{"class":58},[52,109471,109276],{"class":308},[52,109473,872],{"class":58},[52,109475,109281],{"class":79},[52,109477,107910],{"class":308},[52,109479,872],{"class":58},[52,109481,109288],{"class":79},[52,109483,3053],{"class":58},[52,109485,64517],{"class":308},[52,109487,872],{"class":58},[52,109489,109297],{"class":79},[14,109491,109492],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,109494,104323],{},[42,109496,109497],{"className":33028,"code":107155,"language":33030,"meta":47,"style":47},[49,109498,109499],{"__ignoreMap":47},[52,109500,109501],{"class":54,"line":55},[52,109502,107155],{"class":79},[14,109504,109505],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[3195,109507,104358],{"id":104358},[42,109509,109511],{"className":33028,"code":109510,"language":33030,"meta":47,"style":47},"import math\n",[49,109512,109513],{"__ignoreMap":47},[52,109514,109515,109517],{"class":54,"line":55},[52,109516,33042],{"class":58},[52,109518,109000],{"class":79},[14,109520,109521,109522,103668,109525,109528],{},"导入 Python 标准库里的数学模块。后面要用 ",[49,109523,109524],{},"math.sin",[49,109526,109527],{},"math.pi"," 生成周期变化的控制信号。",[42,109530,109531],{"className":33028,"code":106336,"language":33030,"meta":47,"style":47},[49,109532,109533,109539],{"__ignoreMap":47},[52,109534,109535,109537],{"class":54,"line":55},[52,109536,33042],{"class":58},[52,109538,103951],{"class":79},[52,109540,109541,109543,109545,109547],{"class":54,"line":66},[52,109542,33042],{"class":58},[52,109544,34030],{"class":79},[52,109546,34033],{"class":58},[52,109548,34036],{"class":79},[14,109550,109551],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[42,109553,109554],{"className":55717,"code":108837,"language":55719,"meta":47,"style":47},[49,109555,109556],{"__ignoreMap":47},[52,109557,109558,109560,109562,109564,109566,109568,109570,109572,109574,109576,109578,109580,109582,109584,109586],{"class":54,"line":55},[52,109559,698],{"class":79},[52,109561,105606],{"class":53950},[52,109563,17568],{"class":75},[52,109565,292],{"class":79},[52,109567,108669],{"class":62},[52,109569,56474],{"class":75},[52,109571,292],{"class":79},[52,109573,108669],{"class":62},[52,109575,108678],{"class":75},[52,109577,292],{"class":79},[52,109579,108683],{"class":62},[52,109581,108866],{"class":75},[52,109583,292],{"class":79},[52,109585,108871],{"class":62},[52,109587,103794],{"class":79},[14,109589,109590,109591,109593,109594,109596,109597,109599],{},"这行定义关节。",[49,109592,108490],{}," 表示旋转关节。",[49,109595,108889],{}," 表示绕 y 轴旋转。",[49,109598,108895],{}," 表示有一点阻尼，运动不会完全无损耗。",[42,109601,109603],{"className":55717,"code":109602,"language":55719,"meta":47,"style":47},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[49,109604,109605],{"__ignoreMap":47},[52,109606,109607,109609,109611,109613,109615,109618,109620,109622,109625,109628,109630,109633,109635,109637,109639,109641,109643,109646],{"class":54,"line":55},[52,109608,698],{"class":79},[52,109610,103770],{"class":53950},[52,109612,17568],{"class":75},[52,109614,292],{"class":79},[52,109616,109617],{"class":62},"\"link_geom\"",[52,109619,56474],{"class":75},[52,109621,292],{"class":79},[52,109623,109624],{"class":62},"\"capsule\"",[52,109626,109627],{"class":75}," fromto",[52,109629,292],{"class":79},[52,109631,109632],{"class":62},"\"0 0 0 0 0 0.5\"",[52,109634,103786],{"class":75},[52,109636,292],{"class":79},[52,109638,106428],{"class":62},[52,109640,104651],{"class":75},[52,109642,292],{"class":79},[52,109644,109645],{"class":62},"\"0.5\"",[52,109647,103794],{"class":79},[14,109649,109650,109651,109653,109654,109656,109657,109660,109661,31035,109664,109666],{},"这行定义摆杆的形状。",[49,109652,105815],{}," 是胶囊体，适合表示杆子。",[49,109655,105826],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[49,109658,109659],{},"(0,0,0)"," 延伸到 ",[49,109662,109663],{},"(0,0,0.5)",[49,109665,105820],{}," 是半径。",[42,109668,109669],{"className":55717,"code":108903,"language":55719,"meta":47,"style":47},[49,109670,109671],{"__ignoreMap":47},[52,109672,109673,109675,109677,109679,109681,109683,109685,109687,109689,109691,109693,109695,109697,109699,109701,109703,109705,109707],{"class":54,"line":55},[52,109674,698],{"class":79},[52,109676,108724],{"class":53950},[52,109678,17568],{"class":75},[52,109680,292],{"class":79},[52,109682,108731],{"class":62},[52,109684,108734],{"class":75},[52,109686,292],{"class":79},[52,109688,108669],{"class":62},[52,109690,108741],{"class":75},[52,109692,292],{"class":79},[52,109694,419],{"class":62},[52,109696,108748],{"class":75},[52,109698,292],{"class":79},[52,109700,108753],{"class":62},[52,109702,108756],{"class":75},[52,109704,292],{"class":79},[52,109706,108761],{"class":62},[52,109708,103794],{"class":79},[14,109710,109711,109712,109714,109715,109718,109719,109721],{},"这行定义电机。它作用在 ",[49,109713,108490],{}," 关节上。",[49,109716,109717],{},"gear"," 可以理解成放大倍数。",[49,109720,108505],{}," 限制控制输入范围。",[42,109723,109724],{"className":33028,"code":109417,"language":33030,"meta":47,"style":47},[49,109725,109726,109738],{"__ignoreMap":47},[52,109727,109728,109730,109732,109734,109736],{"class":54,"line":55},[52,109729,4578],{"class":58},[52,109731,109208],{"class":79},[52,109733,23596],{"class":58},[52,109735,27768],{"class":308},[52,109737,6718],{"class":79},[52,109739,109740,109742,109744,109746,109748],{"class":54,"line":66},[52,109741,106545],{"class":58},[52,109743,106085],{"class":308},[52,109745,1216],{"class":79},[52,109747,109225],{"class":62},[52,109749,708],{"class":79},[14,109751,109752,109754],{},[49,109753,104808],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[42,109756,109758],{"className":33028,"code":109757,"language":33030,"meta":47,"style":47},"for step in range(2000):\n",[49,109759,109760],{"__ignoreMap":47},[52,109761,109762,109764,109766,109768,109770,109772,109774],{"class":54,"line":55},[52,109763,6014],{"class":58},[52,109765,34266],{"class":79},[52,109767,28693],{"class":58},[52,109769,35093],{"class":308},[52,109771,1216],{"class":79},[52,109773,109246],{"class":308},[52,109775,33436],{"class":79},[14,109777,109778,109779,109781,109782,109785],{},"循环 2000 步。这里没有用 ",[49,109780,4177],{},"，而是用 ",[49,109783,109784],{},"step","，因为后面要用当前步数计算时间。",[42,109787,109789],{"className":33028,"code":109788,"language":33030,"meta":47,"style":47},"t = step * model.opt.timestep\n",[49,109790,109791],{"__ignoreMap":47},[52,109792,109793,109796,109798,109800,109802],{"class":54,"line":55},[52,109794,109795],{"class":79},"t ",[52,109797,292],{"class":58},[52,109799,34266],{"class":79},[52,109801,3053],{"class":58},[52,109803,109262],{"class":79},[14,109805,109806],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[42,109808,109809],{"className":33028,"code":109457,"language":33030,"meta":47,"style":47},[49,109810,109811],{"__ignoreMap":47},[52,109812,109813,109815,109817,109819,109821,109823,109825,109827,109829,109831,109833,109835,109837,109839],{"class":54,"line":55},[52,109814,108521],{"class":79},[52,109816,692],{"class":308},[52,109818,7415],{"class":79},[52,109820,292],{"class":58},[52,109822,109276],{"class":308},[52,109824,872],{"class":58},[52,109826,109281],{"class":79},[52,109828,107910],{"class":308},[52,109830,872],{"class":58},[52,109832,109288],{"class":79},[52,109834,3053],{"class":58},[52,109836,64517],{"class":308},[52,109838,872],{"class":58},[52,109840,109297],{"class":79},[14,109842,109843],{},"这行给电机输入一个正弦波。拆开看：",[1696,109845,109846,109852,109858],{},[32,109847,109848,109851],{},[49,109849,109850],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[32,109853,109854,109857],{},[49,109855,109856],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[32,109859,109860,109863],{},[49,109861,109862],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,109865,109866],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[42,109868,109870],{"className":33028,"code":109869,"language":33030,"meta":47,"style":47},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[49,109871,109872],{"__ignoreMap":47},[52,109873,109874,109876,109878,109880,109882,109884],{"class":54,"line":55},[52,109875,33065],{"class":308},[52,109877,1216],{"class":79},[52,109879,109325],{"class":62},[52,109881,107580],{"class":79},[52,109883,3504],{"class":308},[52,109885,33147],{"class":79},[14,109887,109888,109889,109891],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[49,109890,103720],{}," 只有一个数。",[18,109893,104966],{"id":104965},[14,109895,109896],{},"输出类似:",[42,109898,109901],{"className":109899,"code":109900,"language":8154,"meta":47},[8152],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[49,109902,109900],{"__ignoreMap":47},[14,109904,109905,109906,109908],{},"这里 ",[49,109907,108776],{}," 是电机输入。",[14,109910,109911,109914,109915,109918],{},[49,109912,109913],{},"joint qpos"," 是关节角度，单位通常是弧度。",[49,109916,109917],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,109920,109921],{},"角度单位提示：",[42,109923,109926],{"className":109924,"code":109925,"language":8154,"meta":47},[8152],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[49,109927,109925],{"__ignoreMap":47},[14,109929,109930,109931,109933,109934,109936],{},"如果你看到 ",[49,109932,106680],{}," 是 ",[49,109935,37979],{},"，大约就是 28.6 度。",[18,109938,104998],{"id":104997},[1696,109940,109941,109948,109951,109958,109961,109969,109977],{},[32,109942,105061,109943,105064,109945,31035],{},[49,109944,108961],{},[49,109946,109947],{},"gear=\"5\"",[32,109949,109950],{},"重新运行，观察关节运动是否更剧烈。",[32,109952,105061,109953,105064,109955,31035],{},[49,109954,108505],{},[49,109956,109957],{},"-0.2 0.2",[32,109959,109960],{},"重新运行，观察控制能力是否变弱。",[32,109962,109963,109964,109966,109967,31035],{},"去掉 actuator，确认 ",[49,109965,104808],{}," 变成 ",[49,109968,692],{},[32,109970,105061,109971,105064,109973,109976],{},[49,109972,108895],{},[49,109974,109975],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[32,109978,105061,109979,105064,109981,109984],{},[49,109980,108889],{},[49,109982,109983],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[18,109986,105103],{"id":105102},[3195,109988,109990],{"id":109989},"indexerror-index-0-is-out-of-bounds",[49,109991,109992],{},"IndexError: index 0 is out of bounds",[14,109994,109995,109996,109998],{},"原因是 ",[49,109997,108642],{},"，没有 actuator。",[3195,110000,110001],{"id":110001},"关节几乎不动",[14,110003,110004],{},"可能原因:",[1696,110006,110007,110012,110016,110022],{},[32,110008,110009,110011],{},[49,110010,109717],{}," 太小",[32,110013,110014,110011],{},[49,110015,108505],{},[32,110017,110018,110021],{},[49,110019,110020],{},"damping"," 太大",[32,110023,110024],{},"重力方向导致运动不明显",[3195,110026,110027],{"id":110027},"模型编译失败",[14,110029,110030,110031,110033],{},"检查 actuator 引用的 ",[49,110032,108952],{}," 是否存在，joint 名称是否拼写一致。",[3195,110035,110037,110039],{"id":110036},"datactrl0-写了但没有效果",[49,110038,108776],{}," 写了但没有效果",[14,110041,105225],{},[1696,110043,110044,110049,110052,110057,110062],{},[32,110045,110046,110048],{},[49,110047,104808],{}," 是否大于 0。",[32,110050,110051],{},"motor 是否引用了正确 joint。",[32,110053,110054,110056],{},[49,110055,109717],{}," 是否太小。",[32,110058,110059,110061],{},[49,110060,108505],{}," 是否把输入限制得太小。",[32,110063,110064],{},"body 是否真的有可动 joint。",[3195,110066,110067],{"id":110067},"控制输入超过范围会怎样",[14,110069,110070],{},"如果设置了：",[42,110072,110074],{"className":55717,"code":110073,"language":55719,"meta":47,"style":47},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[49,110075,110076],{"__ignoreMap":47},[52,110077,110078],{"class":54,"line":55},[52,110079,110073],{"class":79},[14,110081,110082],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[42,110084,110086],{"className":33028,"code":110085,"language":33030,"meta":47,"style":47},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[49,110087,110088,110108],{"__ignoreMap":47},[52,110089,110090,110093,110095,110098,110100,110102,110104,110106],{"class":54,"line":55},[52,110091,110092],{"class":79},"action ",[52,110094,292],{"class":58},[52,110096,110097],{"class":79}," np.clip(action, ",[52,110099,2642],{"class":58},[52,110101,107910],{"class":308},[52,110103,15083],{"class":79},[52,110105,107910],{"class":308},[52,110107,708],{"class":79},[52,110109,110110,110112,110114,110116,110118],{"class":54,"line":66},[52,110111,108521],{"class":79},[52,110113,692],{"class":308},[52,110115,7415],{"class":79},[52,110117,292],{"class":58},[52,110119,110120],{"class":79}," action\n",[18,110122,105257],{"id":105256},[14,110124,110125],{},"这一章建立了控制任务的基本形式：",[42,110127,110130],{"className":110128,"code":110129,"language":8154,"meta":47},[8152],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[49,110131,110129],{"__ignoreMap":47},[14,110133,110134],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[3141,110136,110137],{},"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":47,"searchDepth":66,"depth":66,"links":110139},[110140,110141,110142,110147,110151,110152,110153,110161],{"id":103296,"depth":66,"text":103297},{"id":103419,"depth":66,"text":103420},{"id":103694,"depth":66,"text":103695,"children":110143},[110144,110145,110146],{"id":108783,"depth":83,"text":108784},{"id":108833,"depth":83,"text":108834},{"id":108899,"depth":83,"text":108900},{"id":103902,"depth":66,"text":103903,"children":110148},[110149,110150],{"id":104222,"depth":83,"text":104222},{"id":104358,"depth":83,"text":104358},{"id":104965,"depth":66,"text":104966},{"id":104997,"depth":66,"text":104998},{"id":105102,"depth":66,"text":105103,"children":110154},[110155,110156,110157,110158,110160],{"id":109989,"depth":83,"text":109992},{"id":110001,"depth":83,"text":110001},{"id":110027,"depth":83,"text":110027},{"id":110036,"depth":83,"text":110159},"data.ctrl[0] 写了但没有效果",{"id":110067,"depth":83,"text":110067},{"id":105256,"depth":66,"text":105257},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":108471,"description":47},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":110168,"title":110169,"body":110170,"description":47,"extension":3153,"meta":112079,"navigation":122,"path":112080,"seo":112081,"stem":112082,"__hash__":112083},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":110171,"toc":112055},[110172,110175,110177,110180,110188,110191,110208,110211,110236,110239,110285,110287,110289,110344,110346,110365,110367,110410,110413,110430,110433,110449,110459,110466,110468,110471,110474,110508,110511,110559,110563,110566,110580,110589,110593,110596,110621,110624,110628,110641,110644,110650,110653,110668,110670,110673,110933,110935,110947,110950,111262,111264,111276,111278,111281,111296,111301,111304,111326,111329,111332,111366,111369,111373,111384,111387,111404,111407,111421,111428,111448,111455,111469,111472,111484,111499,111519,111522,111544,111547,111551,111566,111577,111592,111595,111625,111641,111670,111678,111702,111705,111723,111733,111745,111752,111761,111767,111776,111779,111781,111790,111793,111808,111810,111813,111824,111827,111838,111841,111859,111861,111878,111881,111909,111911,111915,111918,111948,111954,111957,111961,111969,111972,111974,111995,111998,112001,112017,112020,112036,112038,112041,112052],[10,110173,110169],{"id":110174},"_5viewer-可视化与-renderer-离屏渲染",[18,110176,103297],{"id":103296},[14,110178,110179],{},"本章掌握两类可视化方式:",[1696,110181,110182,110185],{},[32,110183,110184],{},"交互式 viewer: 适合人工观察仿真",[32,110186,110187],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,110189,110190],{},"使用官方接口:",[42,110192,110194],{"className":33028,"code":110193,"language":33030,"meta":47,"style":47},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[49,110195,110196,110203],{"__ignoreMap":47},[52,110197,110198,110200],{"class":54,"line":55},[52,110199,33042],{"class":58},[52,110201,110202],{"class":79}," mujoco.viewer\n",[52,110204,110205],{"class":54,"line":66},[52,110206,110207],{"class":79},"mujoco.viewer.launch_passive(model, data)\n",[14,110209,110210],{},"以及:",[42,110212,110214],{"className":33028,"code":110213,"language":33030,"meta":47,"style":47},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[49,110215,110216,110226],{"__ignoreMap":47},[52,110217,110218,110221,110223],{"class":54,"line":55},[52,110219,110220],{"class":79},"renderer ",[52,110222,292],{"class":58},[52,110224,110225],{"class":79}," mujoco.Renderer(model)\n",[52,110227,110228,110231,110233],{"class":54,"line":66},[52,110229,110230],{"class":79},"image ",[52,110232,292],{"class":58},[52,110234,110235],{"class":79}," renderer.render()\n",[14,110237,110238],{},"新手建议先理解二者区别：",[3353,110240,110241,110257],{},[3356,110242,110243],{},[3359,110244,110245,110248,110251,110254],{},[3362,110246,110247],{"align":26385},"工具",[3362,110249,110250],{"align":26385},"用途",[3362,110252,110253],{"align":26385},"是否打开窗口",[3362,110255,110256],{"align":26385},"常见场景",[3399,110258,110259,110272],{},[3359,110260,110261,110264,110267,110269],{},[3404,110262,110263],{"align":26385},"Viewer",[3404,110265,110266],{"align":26385},"人眼实时观察仿真",[3404,110268,107315],{"align":26385},[3404,110270,110271],{"align":26385},"调试模型、看控制效果",[3359,110273,110274,110277,110280,110282],{},[3404,110275,110276],{"align":26385},"Renderer",[3404,110278,110279],{"align":26385},"生成图像数组",[3404,110281,107328],{"align":26385},[3404,110283,110284],{"align":26385},"保存图片、训练视觉策略、服务器批量采集",[18,110286,103420],{"id":103419},[14,110288,103423],{},[42,110290,110292],{"className":26471,"code":110291,"language":26473,"meta":47,"style":47},"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",[49,110293,110294,110306,110316,110324,110332],{"__ignoreMap":47},[52,110295,110296,110298,110300,110302,110304],{"class":54,"line":55},[52,110297,27226],{"class":75},[52,110299,28965],{"class":62},[52,110301,26483],{"class":62},[52,110303,29050],{"class":308},[52,110305,27328],{"class":308},[52,110307,110308,110310,110312,110314],{"class":54,"line":66},[52,110309,103458],{"class":62},[52,110311,103461],{"class":62},[52,110313,103464],{"class":62},[52,110315,27328],{"class":308},[52,110317,110318,110320,110322],{"class":54,"line":83},[52,110319,103471],{"class":62},[52,110321,103474],{"class":62},[52,110323,27328],{"class":308},[52,110325,110326,110328,110330],{"class":54,"line":91},[52,110327,103481],{"class":62},[52,110329,103484],{"class":62},[52,110331,27328],{"class":308},[52,110333,110334,110336,110338,110340,110342],{"class":54,"line":98},[52,110335,103491],{"class":62},[52,110337,103494],{"class":62},[52,110339,103497],{"class":62},[52,110341,103500],{"class":62},[52,110343,105166],{"class":62},[14,110345,105469],{},[42,110347,110349],{"className":26471,"code":110348,"language":26473,"meta":47,"style":47},"pip install \"mujoco>=2.3\" numpy pillow\n",[49,110350,110351],{"__ignoreMap":47},[52,110352,110353,110355,110357,110359,110362],{"class":54,"line":55},[52,110354,26480],{"class":75},[52,110356,26483],{"class":62},[52,110358,103580],{"class":62},[52,110360,110361],{"class":62}," numpy",[52,110363,110364],{"class":62}," pillow\n",[14,110366,105486],{},[42,110368,110370],{"className":26471,"code":110369,"language":26473,"meta":47,"style":47},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[49,110371,110372,110389,110398],{"__ignoreMap":47},[52,110373,110374,110376,110378,110380,110383,110385,110387],{"class":54,"line":55},[52,110375,32980],{"class":75},[52,110377,31826],{"class":62},[52,110379,27765],{"class":308},[52,110381,110382],{"class":62}," mujoco-render",[52,110384,103625],{"class":62},[52,110386,103628],{"class":308},[52,110388,103631],{"class":308},[52,110390,110391,110393,110395],{"class":54,"line":66},[52,110392,32980],{"class":75},[52,110394,103638],{"class":62},[52,110396,110397],{"class":62}," mujoco-render\n",[52,110399,110400,110402,110404,110406,110408],{"class":54,"line":83},[52,110401,26480],{"class":75},[52,110403,26483],{"class":62},[52,110405,103580],{"class":62},[52,110407,110361],{"class":62},[52,110409,110364],{"class":62},[14,110411,110412],{},"离屏渲染后端:",[42,110414,110416],{"className":26471,"code":110415,"language":26473,"meta":47,"style":47},"export MUJOCO_GL=egl\n",[49,110417,110418],{"__ignoreMap":47},[52,110419,110420,110422,110425,110427],{"class":54,"line":55},[52,110421,27692],{"class":58},[52,110423,110424],{"class":79}," MUJOCO_GL",[52,110426,292],{"class":58},[52,110428,110429],{"class":79},"egl\n",[14,110431,110432],{},"或:",[42,110434,110436],{"className":26471,"code":110435,"language":26473,"meta":47,"style":47},"export MUJOCO_GL=osmesa\n",[49,110437,110438],{"__ignoreMap":47},[52,110439,110440,110442,110444,110446],{"class":54,"line":55},[52,110441,27692],{"class":58},[52,110443,110424],{"class":79},[52,110445,292],{"class":58},[52,110447,110448],{"class":79},"osmesa\n",[14,110450,110451,110452,110455,110456,31035],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[49,110453,110454],{},"egl"," 失败，再尝试 ",[49,110457,110458],{},"osmesa",[14,110460,110461,110462,110465],{},"如果你在本机桌面环境运行，通常先不要设置 ",[49,110463,110464],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[18,110467,103695],{"id":103694},[14,110469,110470],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,110472,110473],{},"典型 viewer 流程:",[42,110475,110477],{"className":33028,"code":110476,"language":33030,"meta":47,"style":47},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[49,110478,110479,110492,110499,110503],{"__ignoreMap":47},[52,110480,110481,110484,110487,110489],{"class":54,"line":55},[52,110482,110483],{"class":58},"with",[52,110485,110486],{"class":79}," mujoco.viewer.launch_passive(model, data) ",[52,110488,34033],{"class":58},[52,110490,110491],{"class":79}," viewer:\n",[52,110493,110494,110496],{"class":54,"line":66},[52,110495,5262],{"class":58},[52,110497,110498],{"class":79}," viewer.is_running():\n",[52,110500,110501],{"class":54,"line":83},[52,110502,104166],{"class":79},[52,110504,110505],{"class":54,"line":91},[52,110506,110507],{"class":79},"        viewer.sync()\n",[14,110509,110510],{},"典型 renderer 流程:",[42,110512,110514],{"className":33028,"code":110513,"language":33030,"meta":47,"style":47},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[49,110515,110516,110542,110546,110551],{"__ignoreMap":47},[52,110517,110518,110520,110522,110525,110527,110529,110531,110533,110535,110537,110540],{"class":54,"line":55},[52,110519,110220],{"class":79},[52,110521,292],{"class":58},[52,110523,110524],{"class":79}," mujoco.Renderer(model, ",[52,110526,27631],{"class":1223},[52,110528,292],{"class":58},[52,110530,44992],{"class":308},[52,110532,15083],{"class":79},[52,110534,27627],{"class":1223},[52,110536,292],{"class":58},[52,110538,110539],{"class":308},"640",[52,110541,708],{"class":79},[52,110543,110544],{"class":54,"line":66},[52,110545,107155],{"class":79},[52,110547,110548],{"class":54,"line":83},[52,110549,110550],{"class":79},"renderer.update_scene(data)\n",[52,110552,110553,110555,110557],{"class":54,"line":91},[52,110554,110230],{"class":79},[52,110556,292],{"class":58},[52,110558,110235],{"class":79},[3195,110560,110562],{"id":110561},"viewer-的同步逻辑","viewer 的同步逻辑",[14,110564,110565],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[42,110567,110569],{"className":33028,"code":110568,"language":33030,"meta":47,"style":47},"mujoco.mj_step(model, data)\nviewer.sync()\n",[49,110570,110571,110575],{"__ignoreMap":47},[52,110572,110573],{"class":54,"line":55},[52,110574,107155],{"class":79},[52,110576,110577],{"class":54,"line":66},[52,110578,110579],{"class":79},"viewer.sync()\n",[14,110581,110582,110584,110585,110588],{},[49,110583,103865],{}," 负责算物理，",[49,110586,110587],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[3195,110590,110592],{"id":110591},"为什么要-sleep","为什么要 sleep",[14,110594,110595],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[42,110597,110599],{"className":33028,"code":110598,"language":33030,"meta":47,"style":47},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[49,110600,110601],{"__ignoreMap":47},[52,110602,110603,110606,110608,110611,110613,110616,110618],{"class":54,"line":55},[52,110604,110605],{"class":79},"sleep_time ",[52,110607,292],{"class":58},[52,110609,110610],{"class":79}," model.opt.timestep ",[52,110612,2642],{"class":58},[52,110614,110615],{"class":79}," (time.time() ",[52,110617,2642],{"class":58},[52,110619,110620],{"class":79}," step_start)\n",[14,110622,110623],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[3195,110625,110627],{"id":110626},"renderer-输出是什么","renderer 输出是什么",[42,110629,110631],{"className":33028,"code":110630,"language":33030,"meta":47,"style":47},"image = renderer.render()\n",[49,110632,110633],{"__ignoreMap":47},[52,110634,110635,110637,110639],{"class":54,"line":55},[52,110636,110230],{"class":79},[52,110638,292],{"class":58},[52,110640,110235],{"class":79},[14,110642,110643],{},"得到的是 NumPy 数组，形状通常是：",[42,110645,110648],{"className":110646,"code":110647,"language":8154,"meta":47},[8152],"(height, width, 3)\n",[49,110649,110647],{"__ignoreMap":47},[14,110651,110652],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[42,110654,110656],{"className":33028,"code":110655,"language":33030,"meta":47,"style":47},"Image.fromarray(image).save(\"render_output.png\")\n",[49,110657,110658],{"__ignoreMap":47},[52,110659,110660,110663,110666],{"class":54,"line":55},[52,110661,110662],{"class":79},"Image.fromarray(image).save(",[52,110664,110665],{"class":62},"\"render_output.png\"",[52,110667,708],{"class":79},[18,110669,103903],{"id":103902},[14,110671,110672],{},"交互式 Viewer:",[42,110674,110676],{"className":33028,"code":110675,"language":33030,"meta":47,"style":47},"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",[49,110677,110678,110684,110688,110694,110700,110704,110708,110716,110721,110725,110729,110733,110738,110743,110747,110751,110755,110760,110764,110768,110772,110776,110780,110784,110796,110808,110816,110820,110830,110850,110860,110865,110870,110874,110891,110904,110909,110913,110917,110929],{"__ignoreMap":47},[52,110679,110680,110682],{"class":54,"line":55},[52,110681,33042],{"class":58},[52,110683,34479],{"class":79},[52,110685,110686],{"class":54,"line":66},[52,110687,123],{"emptyLinePlaceholder":122},[52,110689,110690,110692],{"class":54,"line":83},[52,110691,33042],{"class":58},[52,110693,103951],{"class":79},[52,110695,110696,110698],{"class":54,"line":91},[52,110697,33042],{"class":58},[52,110699,110202],{"class":79},[52,110701,110702],{"class":54,"line":98},[52,110703,123],{"emptyLinePlaceholder":122},[52,110705,110706],{"class":54,"line":107},[52,110707,123],{"emptyLinePlaceholder":122},[52,110709,110710,110712,110714],{"class":54,"line":113},[52,110711,103964],{"class":308},[52,110713,16212],{"class":58},[52,110715,103969],{"class":62},[52,110717,110718],{"class":54,"line":119},[52,110719,110720],{"class":62},"\u003Cmujoco model=\"viewer_demo\">\n",[52,110722,110723],{"class":54,"line":126},[52,110724,103979],{"class":62},[52,110726,110727],{"class":54,"line":132},[52,110728,123],{"emptyLinePlaceholder":122},[52,110730,110731],{"class":54,"line":138},[52,110732,103988],{"class":62},[52,110734,110735],{"class":54,"line":144},[52,110736,110737],{"class":62},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[52,110739,110740],{"class":54,"line":153},[52,110741,110742],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[52,110744,110745],{"class":54,"line":159},[52,110746,123],{"emptyLinePlaceholder":122},[52,110748,110749],{"class":54,"line":167},[52,110750,104002],{"class":62},[52,110752,110753],{"class":54,"line":173},[52,110754,104007],{"class":62},[52,110756,110757],{"class":54,"line":181},[52,110758,110759],{"class":62},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[52,110761,110762],{"class":54,"line":186},[52,110763,104017],{"class":62},[52,110765,110766],{"class":54,"line":191},[52,110767,104022],{"class":62},[52,110769,110770],{"class":54,"line":196},[52,110771,104027],{"class":62},[52,110773,110774],{"class":54,"line":201},[52,110775,98348],{"class":62},[52,110777,110778],{"class":54,"line":206},[52,110779,123],{"emptyLinePlaceholder":122},[52,110781,110782],{"class":54,"line":211},[52,110783,123],{"emptyLinePlaceholder":122},[52,110785,110786,110788,110790,110792,110794],{"class":54,"line":218},[52,110787,34597],{"class":58},[52,110789,245],{"class":75},[52,110791,104048],{"class":79},[52,110793,98336],{"class":308},[52,110795,6718],{"class":79},[52,110797,110798,110800,110802,110804,110806],{"class":54,"line":223},[52,110799,104057],{"class":79},[52,110801,292],{"class":58},[52,110803,104062],{"class":79},[52,110805,103964],{"class":308},[52,110807,708],{"class":79},[52,110809,110810,110812,110814],{"class":54,"line":230},[52,110811,104071],{"class":79},[52,110813,292],{"class":58},[52,110815,104076],{"class":79},[52,110817,110818],{"class":54,"line":239},[52,110819,123],{"emptyLinePlaceholder":122},[52,110821,110822,110824,110826,110828],{"class":54,"line":251},[52,110823,36828],{"class":58},[52,110825,110486],{"class":79},[52,110827,34033],{"class":58},[52,110829,110491],{"class":79},[52,110831,110832,110835,110838,110840,110843,110845,110848],{"class":54,"line":256},[52,110833,110834],{"class":58},"        while",[52,110836,110837],{"class":79}," viewer.is_running() ",[52,110839,33112],{"class":58},[52,110841,110842],{"class":79}," data.time ",[52,110844,698],{"class":58},[52,110846,110847],{"class":308}," 5.0",[52,110849,6718],{"class":79},[52,110851,110852,110855,110857],{"class":54,"line":262},[52,110853,110854],{"class":79},"            step_start ",[52,110856,292],{"class":58},[52,110858,110859],{"class":79}," time.time()\n",[52,110861,110862],{"class":54,"line":268},[52,110863,110864],{"class":79},"            mujoco.mj_step(model, data)\n",[52,110866,110867],{"class":54,"line":280},[52,110868,110869],{"class":79},"            viewer.sync()\n",[52,110871,110872],{"class":54,"line":286},[52,110873,123],{"emptyLinePlaceholder":122},[52,110875,110876,110879,110881,110883,110885,110887,110889],{"class":54,"line":300},[52,110877,110878],{"class":79},"            sleep_time ",[52,110880,292],{"class":58},[52,110882,110610],{"class":79},[52,110884,2642],{"class":58},[52,110886,110615],{"class":79},[52,110888,2642],{"class":58},[52,110890,110620],{"class":79},[52,110892,110893,110895,110898,110900,110902],{"class":54,"line":314},[52,110894,7614],{"class":58},[52,110896,110897],{"class":79}," sleep_time ",[52,110899,2674],{"class":58},[52,110901,1444],{"class":308},[52,110903,6718],{"class":79},[52,110905,110906],{"class":54,"line":327},[52,110907,110908],{"class":79},"                time.sleep(sleep_time)\n",[52,110910,110911],{"class":54,"line":333},[52,110912,123],{"emptyLinePlaceholder":122},[52,110914,110915],{"class":54,"line":360},[52,110916,123],{"emptyLinePlaceholder":122},[52,110918,110919,110921,110923,110925,110927],{"class":54,"line":365},[52,110920,4578],{"class":58},[52,110922,33870],{"class":308},[52,110924,104209],{"class":58},[52,110926,104212],{"class":62},[52,110928,6718],{"class":79},[52,110930,110931],{"class":54,"line":371},[52,110932,104219],{"class":79},[14,110934,106220],{},[42,110936,110938],{"className":26471,"code":110937,"language":26473,"meta":47,"style":47},"touch ch5_viewer.py\n",[49,110939,110940],{"__ignoreMap":47},[52,110941,110942,110944],{"class":54,"line":55},[52,110943,103933],{"class":75},[52,110945,110946],{"class":62}," ch5_viewer.py\n",[14,110948,110949],{},"离屏 Renderer 保存图片:",[42,110951,110953],{"className":33028,"code":110952,"language":33030,"meta":47,"style":47},"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",[49,110954,110955,110967,110971,110977,110987,110991,110995,111003,111008,111012,111016,111020,111024,111029,111033,111037,111041,111045,111049,111053,111057,111061,111065,111069,111073,111085,111097,111105,111130,111134,111150,111154,111158,111173,111182,111186,111200,111205,111210,111214,111226,111238,111242,111246,111258],{"__ignoreMap":47},[52,110956,110957,110959,110962,110964],{"class":54,"line":55},[52,110958,33387],{"class":58},[52,110960,110961],{"class":79}," pathlib ",[52,110963,33042],{"class":58},[52,110965,110966],{"class":79}," Path\n",[52,110968,110969],{"class":54,"line":66},[52,110970,123],{"emptyLinePlaceholder":122},[52,110972,110973,110975],{"class":54,"line":83},[52,110974,33042],{"class":58},[52,110976,103951],{"class":79},[52,110978,110979,110981,110983,110985],{"class":54,"line":91},[52,110980,33387],{"class":58},[52,110982,49913],{"class":308},[52,110984,49916],{"class":58},[52,110986,49919],{"class":79},[52,110988,110989],{"class":54,"line":98},[52,110990,123],{"emptyLinePlaceholder":122},[52,110992,110993],{"class":54,"line":107},[52,110994,123],{"emptyLinePlaceholder":122},[52,110996,110997,110999,111001],{"class":54,"line":113},[52,110998,103964],{"class":308},[52,111000,16212],{"class":58},[52,111002,103969],{"class":62},[52,111004,111005],{"class":54,"line":119},[52,111006,111007],{"class":62},"\u003Cmujoco model=\"renderer_demo\">\n",[52,111009,111010],{"class":54,"line":126},[52,111011,103979],{"class":62},[52,111013,111014],{"class":54,"line":132},[52,111015,123],{"emptyLinePlaceholder":122},[52,111017,111018],{"class":54,"line":138},[52,111019,103988],{"class":62},[52,111021,111022],{"class":54,"line":144},[52,111023,110737],{"class":62},[52,111025,111026],{"class":54,"line":153},[52,111027,111028],{"class":62},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[52,111030,111031],{"class":54,"line":159},[52,111032,110742],{"class":62},[52,111034,111035],{"class":54,"line":167},[52,111036,123],{"emptyLinePlaceholder":122},[52,111038,111039],{"class":54,"line":173},[52,111040,104002],{"class":62},[52,111042,111043],{"class":54,"line":181},[52,111044,104007],{"class":62},[52,111046,111047],{"class":54,"line":186},[52,111048,110759],{"class":62},[52,111050,111051],{"class":54,"line":191},[52,111052,104017],{"class":62},[52,111054,111055],{"class":54,"line":196},[52,111056,104022],{"class":62},[52,111058,111059],{"class":54,"line":201},[52,111060,104027],{"class":62},[52,111062,111063],{"class":54,"line":206},[52,111064,98348],{"class":62},[52,111066,111067],{"class":54,"line":211},[52,111068,123],{"emptyLinePlaceholder":122},[52,111070,111071],{"class":54,"line":218},[52,111072,123],{"emptyLinePlaceholder":122},[52,111074,111075,111077,111079,111081,111083],{"class":54,"line":223},[52,111076,34597],{"class":58},[52,111078,245],{"class":75},[52,111080,104048],{"class":79},[52,111082,98336],{"class":308},[52,111084,6718],{"class":79},[52,111086,111087,111089,111091,111093,111095],{"class":54,"line":230},[52,111088,104057],{"class":79},[52,111090,292],{"class":58},[52,111092,104062],{"class":79},[52,111094,103964],{"class":308},[52,111096,708],{"class":79},[52,111098,111099,111101,111103],{"class":54,"line":239},[52,111100,104071],{"class":79},[52,111102,292],{"class":58},[52,111104,104076],{"class":79},[52,111106,111107,111110,111112,111114,111116,111118,111120,111122,111124,111126,111128],{"class":54,"line":251},[52,111108,111109],{"class":79},"    renderer ",[52,111111,292],{"class":58},[52,111113,110524],{"class":79},[52,111115,27631],{"class":1223},[52,111117,292],{"class":58},[52,111119,44992],{"class":308},[52,111121,15083],{"class":79},[52,111123,27627],{"class":1223},[52,111125,292],{"class":58},[52,111127,110539],{"class":308},[52,111129,708],{"class":79},[52,111131,111132],{"class":54,"line":256},[52,111133,123],{"emptyLinePlaceholder":122},[52,111135,111136,111138,111140,111142,111144,111146,111148],{"class":54,"line":262},[52,111137,679],{"class":58},[52,111139,104151],{"class":79},[52,111141,28693],{"class":58},[52,111143,35093],{"class":308},[52,111145,1216],{"class":79},[52,111147,591],{"class":308},[52,111149,33436],{"class":79},[52,111151,111152],{"class":54,"line":268},[52,111153,104166],{"class":79},[52,111155,111156],{"class":54,"line":280},[52,111157,123],{"emptyLinePlaceholder":122},[52,111159,111160,111163,111166,111168,111171],{"class":54,"line":286},[52,111161,111162],{"class":79},"    renderer.update_scene(data, ",[52,111164,111165],{"class":1223},"camera",[52,111167,292],{"class":58},[52,111169,111170],{"class":62},"\"fixed_camera\"",[52,111172,708],{"class":79},[52,111174,111175,111178,111180],{"class":54,"line":300},[52,111176,111177],{"class":79},"    image ",[52,111179,292],{"class":58},[52,111181,110235],{"class":79},[52,111183,111184],{"class":54,"line":314},[52,111185,123],{"emptyLinePlaceholder":122},[52,111187,111188,111191,111193,111196,111198],{"class":54,"line":327},[52,111189,111190],{"class":79},"    output_path ",[52,111192,292],{"class":58},[52,111194,111195],{"class":79}," Path(",[52,111197,110665],{"class":62},[52,111199,708],{"class":79},[52,111201,111202],{"class":54,"line":333},[52,111203,111204],{"class":79},"    Image.fromarray(image).save(output_path)\n",[52,111206,111207],{"class":54,"line":360},[52,111208,111209],{"class":79},"    renderer.close()\n",[52,111211,111212],{"class":54,"line":365},[52,111213,123],{"emptyLinePlaceholder":122},[52,111215,111216,111218,111220,111223],{"class":54,"line":371},[52,111217,33949],{"class":308},[52,111219,1216],{"class":79},[52,111221,111222],{"class":62},"\"saved:\"",[52,111224,111225],{"class":79},", output_path.resolve())\n",[52,111227,111228,111230,111232,111235],{"class":54,"line":400},[52,111229,33949],{"class":308},[52,111231,1216],{"class":79},[52,111233,111234],{"class":62},"\"image shape:\"",[52,111236,111237],{"class":79},", image.shape)\n",[52,111239,111240],{"class":54,"line":405},[52,111241,123],{"emptyLinePlaceholder":122},[52,111243,111244],{"class":54,"line":411},[52,111245,123],{"emptyLinePlaceholder":122},[52,111247,111248,111250,111252,111254,111256],{"class":54,"line":424},[52,111249,4578],{"class":58},[52,111251,33870],{"class":308},[52,111253,104209],{"class":58},[52,111255,104212],{"class":62},[52,111257,6718],{"class":79},[52,111259,111260],{"class":54,"line":436},[52,111261,104219],{"class":79},[14,111263,106220],{},[42,111265,111267],{"className":26471,"code":111266,"language":26473,"meta":47,"style":47},"touch ch5_renderer.py\n",[49,111268,111269],{"__ignoreMap":47},[52,111270,111271,111273],{"class":54,"line":55},[52,111272,103933],{"class":75},[52,111274,111275],{"class":62}," ch5_renderer.py\n",[3195,111277,104222],{"id":104222},[14,111279,111280],{},"viewer 上下文：",[42,111282,111284],{"className":33028,"code":111283,"language":33030,"meta":47,"style":47},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[49,111285,111286],{"__ignoreMap":47},[52,111287,111288,111290,111292,111294],{"class":54,"line":55},[52,111289,110483],{"class":58},[52,111291,110486],{"class":79},[52,111293,34033],{"class":58},[52,111295,110491],{"class":79},[14,111297,111298,111300],{},[49,111299,110483],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,111302,111303],{},"窗口循环：",[42,111305,111307],{"className":33028,"code":111306,"language":33030,"meta":47,"style":47},"while viewer.is_running() and data.time \u003C 5.0:\n",[49,111308,111309],{"__ignoreMap":47},[52,111310,111311,111314,111316,111318,111320,111322,111324],{"class":54,"line":55},[52,111312,111313],{"class":58},"while",[52,111315,110837],{"class":79},[52,111317,33112],{"class":58},[52,111319,110842],{"class":79},[52,111321,698],{"class":58},[52,111323,110847],{"class":308},[52,111325,6718],{"class":79},[14,111327,111328],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,111330,111331],{},"固定相机：",[42,111333,111335],{"className":55717,"code":111334,"language":55719,"meta":47,"style":47},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[49,111336,111337],{"__ignoreMap":47},[52,111338,111339,111341,111343,111345,111347,111349,111351,111353,111356,111359,111361,111364],{"class":54,"line":55},[52,111340,698],{"class":79},[52,111342,111165],{"class":53950},[52,111344,17568],{"class":75},[52,111346,292],{"class":79},[52,111348,111170],{"class":62},[52,111350,103756],{"class":75},[52,111352,292],{"class":79},[52,111354,111355],{"class":62},"\"1.5 -2.0 1.2\"",[52,111357,111358],{"class":75}," xyaxes",[52,111360,292],{"class":79},[52,111362,111363],{"class":62},"\"1 0.75 0 0 0 1\"",[52,111365,103794],{"class":79},[14,111367,111368],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[3195,111370,111372],{"id":111371},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[42,111374,111376],{"className":33028,"code":111375,"language":33030,"meta":47,"style":47},"import time\n",[49,111377,111378],{"__ignoreMap":47},[52,111379,111380,111382],{"class":54,"line":55},[52,111381,33042],{"class":58},[52,111383,34479],{"class":79},[14,111385,111386],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[42,111388,111390],{"className":33028,"code":111389,"language":33030,"meta":47,"style":47},"import mujoco\nimport mujoco.viewer\n",[49,111391,111392,111398],{"__ignoreMap":47},[52,111393,111394,111396],{"class":54,"line":55},[52,111395,33042],{"class":58},[52,111397,103951],{"class":79},[52,111399,111400,111402],{"class":54,"line":66},[52,111401,33042],{"class":58},[52,111403,110202],{"class":79},[14,111405,111406],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[42,111408,111409],{"className":33028,"code":111283,"language":33030,"meta":47,"style":47},[49,111410,111411],{"__ignoreMap":47},[52,111412,111413,111415,111417,111419],{"class":54,"line":55},[52,111414,110483],{"class":58},[52,111416,110486],{"class":79},[52,111418,34033],{"class":58},[52,111420,110491],{"class":79},[14,111422,111423,111424,111427],{},"打开一个 viewer 窗口。",[49,111425,111426],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[42,111429,111430],{"className":33028,"code":111306,"language":33030,"meta":47,"style":47},[49,111431,111432],{"__ignoreMap":47},[52,111433,111434,111436,111438,111440,111442,111444,111446],{"class":54,"line":55},[52,111435,111313],{"class":58},[52,111437,110837],{"class":79},[52,111439,33112],{"class":58},[52,111441,110842],{"class":79},[52,111443,698],{"class":58},[52,111445,110847],{"class":308},[52,111447,6718],{"class":79},[14,111449,111450,111451,111454],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[49,111452,111453],{},"viewer.is_running()"," 会变成 false，循环结束。",[42,111456,111458],{"className":33028,"code":111457,"language":33030,"meta":47,"style":47},"step_start = time.time()\n",[49,111459,111460],{"__ignoreMap":47},[52,111461,111462,111465,111467],{"class":54,"line":55},[52,111463,111464],{"class":79},"step_start ",[52,111466,292],{"class":58},[52,111468,110859],{"class":79},[14,111470,111471],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[42,111473,111474],{"className":33028,"code":110568,"language":33030,"meta":47,"style":47},[49,111475,111476,111480],{"__ignoreMap":47},[52,111477,111478],{"class":54,"line":55},[52,111479,107155],{"class":79},[52,111481,111482],{"class":54,"line":66},[52,111483,110579],{"class":79},[14,111485,111486,111488,111489,111491,111492,111494,111495,111498],{},[49,111487,103865],{}," 推进物理仿真。",[49,111490,110587],{}," 把最新的 ",[49,111493,36051],{}," 同步到窗口里显示。没有 ",[49,111496,111497],{},"sync()","，窗口可能看不到最新状态。",[42,111500,111501],{"className":33028,"code":110598,"language":33030,"meta":47,"style":47},[49,111502,111503],{"__ignoreMap":47},[52,111504,111505,111507,111509,111511,111513,111515,111517],{"class":54,"line":55},[52,111506,110605],{"class":79},[52,111508,292],{"class":58},[52,111510,110610],{"class":79},[52,111512,2642],{"class":58},[52,111514,110615],{"class":79},[52,111516,2642],{"class":58},[52,111518,110620],{"class":79},[14,111520,111521],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[42,111523,111525],{"className":33028,"code":111524,"language":33030,"meta":47,"style":47},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[49,111526,111527,111539],{"__ignoreMap":47},[52,111528,111529,111531,111533,111535,111537],{"class":54,"line":55},[52,111530,4578],{"class":58},[52,111532,110897],{"class":79},[52,111534,2674],{"class":58},[52,111536,1444],{"class":308},[52,111538,6718],{"class":79},[52,111540,111541],{"class":54,"line":66},[52,111542,111543],{"class":79},"    time.sleep(sleep_time)\n",[14,111545,111546],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[3195,111548,111550],{"id":111549},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[42,111552,111554],{"className":33028,"code":111553,"language":33030,"meta":47,"style":47},"from pathlib import Path\n",[49,111555,111556],{"__ignoreMap":47},[52,111557,111558,111560,111562,111564],{"class":54,"line":55},[52,111559,33387],{"class":58},[52,111561,110961],{"class":79},[52,111563,33042],{"class":58},[52,111565,110966],{"class":79},[14,111567,111568,111569,111572,111573,111576],{},"导入 ",[49,111570,111571],{},"Path","，用来处理文件路径。相比直接写字符串，",[49,111574,111575],{},"Path(\"render_output.png\")"," 更清晰。",[42,111578,111580],{"className":33028,"code":111579,"language":33030,"meta":47,"style":47},"from PIL import Image\n",[49,111581,111582],{"__ignoreMap":47},[52,111583,111584,111586,111588,111590],{"class":54,"line":55},[52,111585,33387],{"class":58},[52,111587,49913],{"class":308},[52,111589,49916],{"class":58},[52,111591,49919],{"class":79},[14,111593,111594],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[42,111596,111597],{"className":55717,"code":111334,"language":55719,"meta":47,"style":47},[49,111598,111599],{"__ignoreMap":47},[52,111600,111601,111603,111605,111607,111609,111611,111613,111615,111617,111619,111621,111623],{"class":54,"line":55},[52,111602,698],{"class":79},[52,111604,111165],{"class":53950},[52,111606,17568],{"class":75},[52,111608,292],{"class":79},[52,111610,111170],{"class":62},[52,111612,103756],{"class":75},[52,111614,292],{"class":79},[52,111616,111355],{"class":62},[52,111618,111358],{"class":75},[52,111620,292],{"class":79},[52,111622,111363],{"class":62},[52,111624,103794],{"class":79},[14,111626,111627,111628,111630,111631,111633,111634,111637,111638,111640],{},"定义一个相机。",[49,111629,82460],{}," 是相机名字。",[49,111632,106796],{}," 是相机在世界里的位置。",[49,111635,111636],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[49,111639,106796],{}," 来调视角。",[42,111642,111644],{"className":33028,"code":111643,"language":33030,"meta":47,"style":47},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[49,111645,111646],{"__ignoreMap":47},[52,111647,111648,111650,111652,111654,111656,111658,111660,111662,111664,111666,111668],{"class":54,"line":55},[52,111649,110220],{"class":79},[52,111651,292],{"class":58},[52,111653,110524],{"class":79},[52,111655,27631],{"class":1223},[52,111657,292],{"class":58},[52,111659,44992],{"class":308},[52,111661,15083],{"class":79},[52,111663,27627],{"class":1223},[52,111665,292],{"class":58},[52,111667,110539],{"class":308},[52,111669,708],{"class":79},[14,111671,111672,111673,103668,111675,111677],{},"创建离屏渲染器。",[49,111674,27631],{},[49,111676,27627],{}," 决定输出图片大小。",[42,111679,111680],{"className":33028,"code":104326,"language":33030,"meta":47,"style":47},[49,111681,111682,111698],{"__ignoreMap":47},[52,111683,111684,111686,111688,111690,111692,111694,111696],{"class":54,"line":55},[52,111685,6014],{"class":58},[52,111687,104151],{"class":79},[52,111689,28693],{"class":58},[52,111691,35093],{"class":308},[52,111693,1216],{"class":79},[52,111695,591],{"class":308},[52,111697,33436],{"class":79},[52,111699,111700],{"class":54,"line":66},[52,111701,104349],{"class":79},[14,111703,111704],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[42,111706,111708],{"className":33028,"code":111707,"language":33030,"meta":47,"style":47},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[49,111709,111710],{"__ignoreMap":47},[52,111711,111712,111715,111717,111719,111721],{"class":54,"line":55},[52,111713,111714],{"class":79},"renderer.update_scene(data, ",[52,111716,111165],{"class":1223},[52,111718,292],{"class":58},[52,111720,111170],{"class":62},[52,111722,708],{"class":79},[14,111724,111725,111726,111728,111729,111732],{},"告诉 renderer：用当前 ",[49,111727,36051],{}," 的状态更新画面，并使用名为 ",[49,111730,111731],{},"fixed_camera"," 的相机视角。",[42,111734,111735],{"className":33028,"code":110630,"language":33030,"meta":47,"style":47},[49,111736,111737],{"__ignoreMap":47},[52,111738,111739,111741,111743],{"class":54,"line":55},[52,111740,110230],{"class":79},[52,111742,292],{"class":58},[52,111744,110235],{"class":79},[14,111746,111747,111748,111751],{},"真正渲染出图像。",[49,111749,111750],{},"image"," 是一个 NumPy 数组，不是文件。",[42,111753,111755],{"className":33028,"code":111754,"language":33030,"meta":47,"style":47},"Image.fromarray(image).save(output_path)\n",[49,111756,111757],{"__ignoreMap":47},[52,111758,111759],{"class":54,"line":55},[52,111760,111754],{"class":79},[14,111762,111763,111764,31035],{},"把数组转换成图片，并保存到 ",[49,111765,111766],{},"render_output.png",[42,111768,111770],{"className":33028,"code":111769,"language":33030,"meta":47,"style":47},"renderer.close()\n",[49,111771,111772],{"__ignoreMap":47},[52,111773,111774],{"class":54,"line":55},[52,111775,111769],{"class":79},[14,111777,111778],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[18,111780,104966],{"id":104965},[14,111782,111783,111784,111786,111787,31035],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[49,111785,111766],{},"，并输出图像数组形状，例如 ",[49,111788,111789],{},"(480, 640, 3)",[14,111791,111792],{},"如果图片里看不到方块，先检查：",[1696,111794,111795,111798,111801],{},[32,111796,111797],{},"方块是否掉到相机视野外。",[32,111799,111800],{},"camera 位置是否合理。",[32,111802,111803,111804,111807],{},"是否在 ",[49,111805,111806],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[18,111809,104998],{"id":104997},[14,111811,111812],{},"运行 viewer:",[42,111814,111816],{"className":26471,"code":111815,"language":26473,"meta":47,"style":47},"python ch5_viewer.py\n",[49,111817,111818],{"__ignoreMap":47},[52,111819,111820,111822],{"class":54,"line":55},[52,111821,33030],{"class":75},[52,111823,110946],{"class":62},[14,111825,111826],{},"运行 renderer:",[42,111828,111830],{"className":26471,"code":111829,"language":26473,"meta":47,"style":47},"python ch5_renderer.py\n",[49,111831,111832],{"__ignoreMap":47},[52,111833,111834,111836],{"class":54,"line":55},[52,111835,33030],{"class":75},[52,111837,111275],{"class":62},[14,111839,111840],{},"如果在服务器上运行:",[42,111842,111844],{"className":26471,"code":111843,"language":26473,"meta":47,"style":47},"MUJOCO_GL=egl python ch5_renderer.py\n",[49,111845,111846],{"__ignoreMap":47},[52,111847,111848,111850,111852,111854,111857],{"class":54,"line":55},[52,111849,110464],{"class":79},[52,111851,292],{"class":58},[52,111853,110454],{"class":62},[52,111855,111856],{"class":75}," python",[52,111858,111275],{"class":62},[14,111860,110432],{},[42,111862,111864],{"className":26471,"code":111863,"language":26473,"meta":47,"style":47},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[49,111865,111866],{"__ignoreMap":47},[52,111867,111868,111870,111872,111874,111876],{"class":54,"line":55},[52,111869,110464],{"class":79},[52,111871,292],{"class":58},[52,111873,110458],{"class":62},[52,111875,111856],{"class":75},[52,111877,111275],{"class":62},[14,111879,111880],{},"再做几个练习：",[1696,111882,111883,111890,111893,111899],{},[32,111884,111885,111886,111889],{},"把 renderer 分辨率改成 ",[49,111887,111888],{},"height=240, width=320","，观察输出 shape。",[32,111891,111892],{},"把方块颜色改成蓝色，重新保存图片。",[32,111894,111895,111896,111898],{},"把相机 ",[49,111897,106796],{}," 改远一点，观察画面中物体是否变小。",[32,111900,111901,111902,105064,111905,111908],{},"把 viewer 示例中的 ",[49,111903,111904],{},"data.time \u003C 5.0",[49,111906,111907],{},"data.time \u003C 20.0","，观察更长时间。",[18,111910,105103],{"id":105102},[3195,111912,111914],{"id":111913},"viewer-窗口打不开","viewer 窗口打不开",[14,111916,111917],{},"安装:",[42,111919,111921],{"className":26471,"code":111920,"language":26473,"meta":47,"style":47},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[49,111922,111923],{"__ignoreMap":47},[52,111924,111925,111927,111929,111931,111933,111935,111937,111939,111941,111943,111945],{"class":54,"line":55},[52,111926,27226],{"class":75},[52,111928,28965],{"class":62},[52,111930,26483],{"class":62},[52,111932,29050],{"class":308},[52,111934,105156],{"class":62},[52,111936,103484],{"class":62},[52,111938,105161],{"class":62},[52,111940,103497],{"class":62},[52,111942,103503],{"class":62},[52,111944,103494],{"class":62},[52,111946,111947],{"class":62}," libXinerama\n",[3195,111949,111951],{"id":111950},"glfwerror",[49,111952,111953],{},"GLFWError",[14,111955,111956],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[3195,111958,111960],{"id":111959},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,111962,111963,111964,85189,111966,111968],{},"尝试 ",[49,111965,103687],{},[49,111967,103690],{},"。可能存在版本差异。",[3195,111970,111971],{"id":111971},"保存图片是黑的",[14,111973,105225],{},[1696,111975,111976,111979,111982,111992],{},[32,111977,111978],{},"XML 里是否有 light。",[32,111980,111981],{},"相机是否对着模型。",[32,111983,111984,111985,111988,111989,31035],{},"是否先 ",[49,111986,111987],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[49,111990,111991],{},"renderer.render()",[32,111993,111994],{},"物体是否已经掉出视野。",[3195,111996,111997],{"id":111997},"远程服务器没有显示器",[14,111999,112000],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[42,112002,112003],{"className":26471,"code":111843,"language":26473,"meta":47,"style":47},[49,112004,112005],{"__ignoreMap":47},[52,112006,112007,112009,112011,112013,112015],{"class":54,"line":55},[52,112008,110464],{"class":79},[52,112010,292],{"class":58},[52,112012,110454],{"class":62},[52,112014,111856],{"class":75},[52,112016,111275],{"class":62},[14,112018,112019],{},"如果 EGL 不可用，再尝试：",[42,112021,112022],{"className":26471,"code":111863,"language":26473,"meta":47,"style":47},[49,112023,112024],{"__ignoreMap":47},[52,112025,112026,112028,112030,112032,112034],{"class":54,"line":55},[52,112027,110464],{"class":79},[52,112029,292],{"class":58},[52,112031,110458],{"class":62},[52,112033,111856],{"class":75},[52,112035,111275],{"class":62},[18,112037,105257],{"id":105256},[14,112039,112040],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[1696,112042,112043,112046,112049],{},[32,112044,112045],{},"先用 viewer 看模型和控制是否正常。",[32,112047,112048],{},"再用 renderer 保存图片或构造视觉观测。",[32,112050,112051],{},"最后把状态、动作、图像、奖励组织成训练数据。",[3141,112053,112054],{},"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":47,"searchDepth":66,"depth":66,"links":112056},[112057,112058,112059,112064,112069,112070,112071,112078],{"id":103296,"depth":66,"text":103297},{"id":103419,"depth":66,"text":103420},{"id":103694,"depth":66,"text":103695,"children":112060},[112061,112062,112063],{"id":110561,"depth":83,"text":110562},{"id":110591,"depth":83,"text":110592},{"id":110626,"depth":83,"text":110627},{"id":103902,"depth":66,"text":103903,"children":112065},[112066,112067,112068],{"id":104222,"depth":83,"text":104222},{"id":111371,"depth":83,"text":111372},{"id":111549,"depth":83,"text":111550},{"id":104965,"depth":66,"text":104966},{"id":104997,"depth":66,"text":104998},{"id":105102,"depth":66,"text":105103,"children":112072},[112073,112074,112075,112076,112077],{"id":111913,"depth":83,"text":111914},{"id":111950,"depth":83,"text":111953},{"id":111959,"depth":83,"text":111960},{"id":111971,"depth":83,"text":111971},{"id":111997,"depth":83,"text":111997},{"id":105256,"depth":66,"text":105257},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":110169,"description":47},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":112085,"title":112086,"body":112087,"description":47,"extension":3153,"meta":113998,"navigation":122,"path":113999,"seo":114000,"stem":114001,"__hash__":114002},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":112088,"toc":113974},[112089,112092,112094,112097,112099,112118,112121,112127,112130,112132,112134,112158,112160,112174,112176,112217,112219,112230,112232,112235,112241,112244,112278,112281,112313,112316,112348,112352,112355,112395,112398,112404,112407,112413,112417,112420,112426,112429,112433,112436,112476,112478,112491,112494,112496,113078,113080,113092,113095,113106,113108,113111,113130,113142,113145,113166,113169,113172,113215,113218,113221,113241,113248,113250,113268,113283,113286,113292,113295,113301,113318,113325,113356,113367,113401,113412,113429,113438,113446,113451,113465,113468,113489,113495,113509,113514,113544,113554,113579,113587,113610,113613,113629,113632,113640,113646,113668,113681,113702,113711,113750,113761,113763,113766,113772,113775,113778,113784,113787,113807,113810,113812,113851,113853,113856,113864,113867,113870,113897,113900,113910,113916,113919,113925,113927,113933,113937,113940,113942,113945,113969,113972],[10,112090,112086],{"id":112091},"_6控制任务cartpole",[18,112093,103297],{"id":103296},[14,112095,112096],{},"本章搭建一个最小 Cartpole 控制任务。",[14,112098,106981],{},[1696,112100,112101,112104,112106,112109,112112,112115],{},[32,112102,112103],{},"slide joint",[32,112105,108834],{},[32,112107,112108],{},"cart force actuator",[32,112110,112111],{},"状态观测",[32,112113,112114],{},"简单控制循环",[32,112116,112117],{},"reward 设计雏形",[14,112119,112120],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[42,112122,112125],{"className":112123,"code":112124,"language":8154,"meta":47},[8152],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[49,112126,112124],{"__ignoreMap":47},[14,112128,112129],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[18,112131,103420],{"id":103419},[14,112133,103423],{},[42,112135,112136],{"className":26471,"code":107038,"language":26473,"meta":47,"style":47},[49,112137,112138],{"__ignoreMap":47},[52,112139,112140,112142,112144,112146,112148,112150,112152,112154,112156],{"class":54,"line":55},[52,112141,27226],{"class":75},[52,112143,28965],{"class":62},[52,112145,26483],{"class":62},[52,112147,29050],{"class":308},[52,112149,107053],{"class":62},[52,112151,103448],{"class":62},[52,112153,105151],{"class":62},[52,112155,103464],{"class":62},[52,112157,107062],{"class":62},[14,112159,105469],{},[42,112161,112162],{"className":26471,"code":103569,"language":26473,"meta":47,"style":47},[49,112163,112164],{"__ignoreMap":47},[52,112165,112166,112168,112170,112172],{"class":54,"line":55},[52,112167,26480],{"class":75},[52,112169,26483],{"class":62},[52,112171,103580],{"class":62},[52,112173,103583],{"class":62},[14,112175,105486],{},[42,112177,112179],{"className":26471,"code":112178,"language":26473,"meta":47,"style":47},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[49,112180,112181,112198,112207],{"__ignoreMap":47},[52,112182,112183,112185,112187,112189,112192,112194,112196],{"class":54,"line":55},[52,112184,32980],{"class":75},[52,112186,31826],{"class":62},[52,112188,27765],{"class":308},[52,112190,112191],{"class":62}," mujoco-cartpole",[52,112193,103625],{"class":62},[52,112195,103628],{"class":308},[52,112197,103631],{"class":308},[52,112199,112200,112202,112204],{"class":54,"line":66},[52,112201,32980],{"class":75},[52,112203,103638],{"class":62},[52,112205,112206],{"class":62}," mujoco-cartpole\n",[52,112208,112209,112211,112213,112215],{"class":54,"line":83},[52,112210,26480],{"class":75},[52,112212,26483],{"class":62},[52,112214,103580],{"class":62},[52,112216,103583],{"class":62},[14,112218,103654],{},[1696,112220,112221,112224,112227],{},[32,112222,112223],{},"本章不依赖 Gymnasium。",[32,112225,112226],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[32,112228,112229],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[18,112231,103695],{"id":103694},[14,112233,112234],{},"Cartpole 的模型结构:",[42,112236,112239],{"className":112237,"code":112238,"language":8154,"meta":47},[8152],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[49,112240,112238],{"__ignoreMap":47},[14,112242,112243],{},"小车通过 slide joint 左右移动:",[42,112245,112247],{"className":55717,"code":112246,"language":55719,"meta":47,"style":47},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[49,112248,112249],{"__ignoreMap":47},[52,112250,112251,112253,112255,112257,112259,112262,112264,112266,112269,112271,112273,112276],{"class":54,"line":55},[52,112252,698],{"class":79},[52,112254,105606],{"class":53950},[52,112256,17568],{"class":75},[52,112258,292],{"class":79},[52,112260,112261],{"class":62},"\"cart_x\"",[52,112263,56474],{"class":75},[52,112265,292],{"class":79},[52,112267,112268],{"class":62},"\"slide\"",[52,112270,108678],{"class":75},[52,112272,292],{"class":79},[52,112274,112275],{"class":62},"\"1 0 0\"",[52,112277,103794],{"class":79},[14,112279,112280],{},"杆子通过 hinge joint 旋转:",[42,112282,112284],{"className":55717,"code":112283,"language":55719,"meta":47,"style":47},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[49,112285,112286],{"__ignoreMap":47},[52,112287,112288,112290,112292,112294,112296,112299,112301,112303,112305,112307,112309,112311],{"class":54,"line":55},[52,112289,698],{"class":79},[52,112291,105606],{"class":53950},[52,112293,17568],{"class":75},[52,112295,292],{"class":79},[52,112297,112298],{"class":62},"\"pole_hinge\"",[52,112300,56474],{"class":75},[52,112302,292],{"class":79},[52,112304,108669],{"class":62},[52,112306,108678],{"class":75},[52,112308,292],{"class":79},[52,112310,108683],{"class":62},[52,112312,103794],{"class":79},[14,112314,112315],{},"控制力作用在小车 slide joint 上:",[42,112317,112319],{"className":55717,"code":112318,"language":55719,"meta":47,"style":47},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[49,112320,112321],{"__ignoreMap":47},[52,112322,112323,112325,112327,112329,112331,112334,112336,112338,112340,112342,112344,112346],{"class":54,"line":55},[52,112324,698],{"class":79},[52,112326,108724],{"class":53950},[52,112328,17568],{"class":75},[52,112330,292],{"class":79},[52,112332,112333],{"class":62},"\"cart_motor\"",[52,112335,108734],{"class":75},[52,112337,292],{"class":79},[52,112339,112261],{"class":62},[52,112341,108741],{"class":75},[52,112343,292],{"class":79},[52,112345,56966],{"class":62},[52,112347,103794],{"class":79},[3195,112349,112351],{"id":112350},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,112353,112354],{},"这个简化模型有两个关节：",[3353,112356,112357,112368],{},[3356,112358,112359],{},[3359,112360,112361,112363,112365],{},[3362,112362,105409],{"align":26385},[3362,112364,26386],{"align":26385},[3362,112366,112367],{"align":26385},"对应状态",[3399,112369,112370,112383],{},[3359,112371,112372,112377,112380],{},[3404,112373,112374],{"align":26385},[49,112375,112376],{},"cart_x",[3404,112378,112379],{"align":26385},"slide",[3404,112381,112382],{"align":26385},"小车 x 位置",[3359,112384,112385,112390,112392],{},[3404,112386,112387],{"align":26385},[49,112388,112389],{},"pole_hinge",[3404,112391,108490],{"align":26385},[3404,112393,112394],{"align":26385},"杆子角度",[14,112396,112397],{},"所以：",[42,112399,112402],{"className":112400,"code":112401,"language":8154,"meta":47},[8152],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[49,112403,112401],{"__ignoreMap":47},[14,112405,112406],{},"把它们拼起来就是观测：",[42,112408,112411],{"className":112409,"code":112410,"language":8154,"meta":47},[8152],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[49,112412,112410],{"__ignoreMap":47},[3195,112414,112416],{"id":112415},"action-是什么","action 是什么",[14,112418,112419],{},"本章只有一个 actuator：",[42,112421,112424],{"className":112422,"code":112423,"language":8154,"meta":47},[8152],"data.ctrl[0] = action\n",[49,112425,112423],{"__ignoreMap":47},[14,112427,112428],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[3195,112430,112432],{"id":112431},"reward-是什么","reward 是什么",[14,112434,112435],{},"奖励函数：",[42,112437,112439],{"className":33028,"code":112438,"language":33030,"meta":47,"style":47},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[49,112440,112441],{"__ignoreMap":47},[52,112442,112443,112445,112448,112450,112452,112454,112457,112459,112462,112464,112466,112468,112471,112473],{"class":54,"line":55},[52,112444,19694],{"class":58},[52,112446,112447],{"class":308}," float",[52,112449,1216],{"class":79},[52,112451,105053],{"class":308},[52,112453,54921],{"class":58},[52,112455,112456],{"class":308}," 0.1",[52,112458,872],{"class":58},[52,112460,112461],{"class":79}," cart_x ",[52,112463,3053],{"class":58},[52,112465,112461],{"class":79},[52,112467,2642],{"class":58},[52,112469,112470],{"class":79}," pole_angle ",[52,112472,3053],{"class":58},[52,112474,112475],{"class":79}," pole_angle)\n",[14,112477,108876],{},[1696,112479,112480,112485,112488],{},[32,112481,112482,112483,31035],{},"基础奖励是 ",[49,112484,105053],{},[32,112486,112487],{},"小车离中心越远，扣分越多。",[32,112489,112490],{},"杆子角度越大，扣分越多。",[14,112492,112493],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[18,112495,103903],{"id":103902},[42,112497,112499],{"className":33028,"code":112498,"language":33030,"meta":47,"style":47},"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",[49,112500,112501,112507,112517,112521,112525,112533,112538,112542,112546,112550,112555,112559,112564,112569,112574,112578,112583,112588,112593,112597,112601,112605,112609,112613,112618,112622,112626,112630,112634,112638,112648,112655,112659,112663,112677,112691,112704,112734,112738,112742,112754,112766,112774,112778,112791,112795,112799,112808,112812,112828,112838,112851,112864,112868,112891,112909,112913,112925,112929,112933,112943,112953,112957,112973,113014,113018,113038,113054,113058,113062,113074],{"__ignoreMap":47},[52,112502,112503,112505],{"class":54,"line":55},[52,112504,33042],{"class":58},[52,112506,103951],{"class":79},[52,112508,112509,112511,112513,112515],{"class":54,"line":66},[52,112510,33042],{"class":58},[52,112512,34030],{"class":79},[52,112514,34033],{"class":58},[52,112516,34036],{"class":79},[52,112518,112519],{"class":54,"line":83},[52,112520,123],{"emptyLinePlaceholder":122},[52,112522,112523],{"class":54,"line":91},[52,112524,123],{"emptyLinePlaceholder":122},[52,112526,112527,112529,112531],{"class":54,"line":98},[52,112528,103964],{"class":308},[52,112530,16212],{"class":58},[52,112532,103969],{"class":62},[52,112534,112535],{"class":54,"line":107},[52,112536,112537],{"class":62},"\u003Cmujoco model=\"cartpole\">\n",[52,112539,112540],{"class":54,"line":113},[52,112541,103979],{"class":62},[52,112543,112544],{"class":54,"line":119},[52,112545,123],{"emptyLinePlaceholder":122},[52,112547,112548],{"class":54,"line":126},[52,112549,103988],{"class":62},[52,112551,112552],{"class":54,"line":132},[52,112553,112554],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[52,112556,112557],{"class":54,"line":138},[52,112558,123],{"emptyLinePlaceholder":122},[52,112560,112561],{"class":54,"line":144},[52,112562,112563],{"class":62},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[52,112565,112566],{"class":54,"line":153},[52,112567,112568],{"class":62},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[52,112570,112571],{"class":54,"line":159},[52,112572,112573],{"class":62},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[52,112575,112576],{"class":54,"line":167},[52,112577,123],{"emptyLinePlaceholder":122},[52,112579,112580],{"class":54,"line":173},[52,112581,112582],{"class":62},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[52,112584,112585],{"class":54,"line":181},[52,112586,112587],{"class":62},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[52,112589,112590],{"class":54,"line":186},[52,112591,112592],{"class":62},"        \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",[52,112594,112595],{"class":54,"line":191},[52,112596,109088],{"class":62},[52,112598,112599],{"class":54,"line":196},[52,112600,104017],{"class":62},[52,112602,112603],{"class":54,"line":201},[52,112604,104022],{"class":62},[52,112606,112607],{"class":54,"line":206},[52,112608,123],{"emptyLinePlaceholder":122},[52,112610,112611],{"class":54,"line":211},[52,112612,109105],{"class":62},[52,112614,112615],{"class":54,"line":218},[52,112616,112617],{"class":62},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[52,112619,112620],{"class":54,"line":223},[52,112621,109115],{"class":62},[52,112623,112624],{"class":54,"line":230},[52,112625,104027],{"class":62},[52,112627,112628],{"class":54,"line":239},[52,112629,98348],{"class":62},[52,112631,112632],{"class":54,"line":251},[52,112633,123],{"emptyLinePlaceholder":122},[52,112635,112636],{"class":54,"line":256},[52,112637,123],{"emptyLinePlaceholder":122},[52,112639,112640,112642,112645],{"class":54,"line":262},[52,112641,34597],{"class":58},[52,112643,112644],{"class":75}," get_observation",[52,112646,112647],{"class":79},"(data: mujoco.MjData) -> np.ndarray:\n",[52,112649,112650,112652],{"class":54,"line":268},[52,112651,1441],{"class":58},[52,112653,112654],{"class":79}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[52,112656,112657],{"class":54,"line":280},[52,112658,123],{"emptyLinePlaceholder":122},[52,112660,112661],{"class":54,"line":286},[52,112662,123],{"emptyLinePlaceholder":122},[52,112664,112665,112667,112670,112673,112675],{"class":54,"line":300},[52,112666,34597],{"class":58},[52,112668,112669],{"class":75}," compute_reward",[52,112671,112672],{"class":79},"(obs: np.ndarray) -> ",[52,112674,3262],{"class":308},[52,112676,6718],{"class":79},[52,112678,112679,112682,112684,112687,112689],{"class":54,"line":314},[52,112680,112681],{"class":79},"    cart_x ",[52,112683,292],{"class":58},[52,112685,112686],{"class":79}," obs[",[52,112688,692],{"class":308},[52,112690,35896],{"class":79},[52,112692,112693,112696,112698,112700,112702],{"class":54,"line":327},[52,112694,112695],{"class":79},"    pole_angle ",[52,112697,292],{"class":58},[52,112699,112686],{"class":79},[52,112701,629],{"class":308},[52,112703,35896],{"class":79},[52,112705,112706,112708,112710,112712,112714,112716,112718,112720,112722,112724,112726,112728,112730,112732],{"class":54,"line":333},[52,112707,1441],{"class":58},[52,112709,112447],{"class":308},[52,112711,1216],{"class":79},[52,112713,105053],{"class":308},[52,112715,54921],{"class":58},[52,112717,112456],{"class":308},[52,112719,872],{"class":58},[52,112721,112461],{"class":79},[52,112723,3053],{"class":58},[52,112725,112461],{"class":79},[52,112727,2642],{"class":58},[52,112729,112470],{"class":79},[52,112731,3053],{"class":58},[52,112733,112475],{"class":79},[52,112735,112736],{"class":54,"line":360},[52,112737,123],{"emptyLinePlaceholder":122},[52,112739,112740],{"class":54,"line":365},[52,112741,123],{"emptyLinePlaceholder":122},[52,112743,112744,112746,112748,112750,112752],{"class":54,"line":371},[52,112745,34597],{"class":58},[52,112747,245],{"class":75},[52,112749,104048],{"class":79},[52,112751,98336],{"class":308},[52,112753,6718],{"class":79},[52,112755,112756,112758,112760,112762,112764],{"class":54,"line":400},[52,112757,104057],{"class":79},[52,112759,292],{"class":58},[52,112761,104062],{"class":79},[52,112763,103964],{"class":308},[52,112765,708],{"class":79},[52,112767,112768,112770,112772],{"class":54,"line":405},[52,112769,104071],{"class":79},[52,112771,292],{"class":58},[52,112773,104076],{"class":79},[52,112775,112776],{"class":54,"line":411},[52,112777,123],{"emptyLinePlaceholder":122},[52,112779,112780,112782,112784,112786,112788],{"class":54,"line":424},[52,112781,107719],{"class":79},[52,112783,629],{"class":308},[52,112785,7415],{"class":79},[52,112787,292],{"class":58},[52,112789,112790],{"class":308}," 0.1\n",[52,112792,112793],{"class":54,"line":436},[52,112794,107732],{"class":79},[52,112796,112797],{"class":54,"line":449},[52,112798,123],{"emptyLinePlaceholder":122},[52,112800,112801,112804,112806],{"class":54,"line":2160},[52,112802,112803],{"class":79},"    total_reward ",[52,112805,292],{"class":58},[52,112807,107411],{"class":308},[52,112809,112810],{"class":54,"line":2186},[52,112811,123],{"emptyLinePlaceholder":122},[52,112813,112814,112816,112818,112820,112822,112824,112826],{"class":54,"line":2209},[52,112815,679],{"class":58},[52,112817,34266],{"class":79},[52,112819,28693],{"class":58},[52,112821,35093],{"class":308},[52,112823,1216],{"class":79},[52,112825,9373],{"class":308},[52,112827,33436],{"class":79},[52,112829,112830,112833,112835],{"class":54,"line":2233},[52,112831,112832],{"class":79},"        obs ",[52,112834,292],{"class":58},[52,112836,112837],{"class":79}," get_observation(data)\n",[52,112839,112840,112843,112845,112847,112849],{"class":54,"line":2238},[52,112841,112842],{"class":79},"        pole_angle ",[52,112844,292],{"class":58},[52,112846,112686],{"class":79},[52,112848,629],{"class":308},[52,112850,35896],{"class":79},[52,112852,112853,112856,112858,112860,112862],{"class":54,"line":2243},[52,112854,112855],{"class":79},"        pole_angular_velocity ",[52,112857,292],{"class":58},[52,112859,112686],{"class":79},[52,112861,2313],{"class":308},[52,112863,35896],{"class":79},[52,112865,112866],{"class":54,"line":2248},[52,112867,123],{"emptyLinePlaceholder":122},[52,112869,112870,112873,112875,112878,112880,112882,112884,112886,112888],{"class":54,"line":2257},[52,112871,112872],{"class":79},"        action ",[52,112874,292],{"class":58},[52,112876,112877],{"class":308}," 2.0",[52,112879,872],{"class":58},[52,112881,112470],{"class":79},[52,112883,2004],{"class":58},[52,112885,64517],{"class":308},[52,112887,872],{"class":58},[52,112889,112890],{"class":79}," pole_angular_velocity\n",[52,112892,112893,112895,112897,112899,112901,112903,112905,112907],{"class":54,"line":2262},[52,112894,112872],{"class":79},[52,112896,292],{"class":58},[52,112898,110097],{"class":79},[52,112900,2642],{"class":58},[52,112902,105053],{"class":308},[52,112904,15083],{"class":79},[52,112906,105053],{"class":308},[52,112908,708],{"class":79},[52,112910,112911],{"class":54,"line":2268},[52,112912,123],{"emptyLinePlaceholder":122},[52,112914,112915,112917,112919,112921,112923],{"class":54,"line":2297},[52,112916,109267],{"class":79},[52,112918,692],{"class":308},[52,112920,7415],{"class":79},[52,112922,292],{"class":58},[52,112924,110120],{"class":79},[52,112926,112927],{"class":54,"line":2303},[52,112928,104166],{"class":79},[52,112930,112931],{"class":54,"line":2318},[52,112932,123],{"emptyLinePlaceholder":122},[52,112934,112935,112938,112940],{"class":54,"line":2324},[52,112936,112937],{"class":79},"        reward ",[52,112939,292],{"class":58},[52,112941,112942],{"class":79}," compute_reward(get_observation(data))\n",[52,112944,112945,112948,112950],{"class":54,"line":2353},[52,112946,112947],{"class":79},"        total_reward ",[52,112949,1910],{"class":58},[52,112951,112952],{"class":79}," reward\n",[52,112954,112955],{"class":54,"line":2362},[52,112956,123],{"emptyLinePlaceholder":122},[52,112958,112959,112961,112963,112965,112967,112969,112971],{"class":54,"line":2368},[52,112960,5497],{"class":58},[52,112962,34266],{"class":79},[52,112964,1998],{"class":58},[52,112966,8719],{"class":308},[52,112968,104209],{"class":58},[52,112970,1444],{"class":308},[52,112972,6718],{"class":79},[52,112974,112975,112977,112979,112982,112985,112988,112991,112993,112996,112999,113001,113003,113005,113007,113010,113012],{"class":54,"line":2376},[52,112976,37300],{"class":308},[52,112978,1216],{"class":79},[52,112980,112981],{"class":62},"\"step:\"",[52,112983,112984],{"class":79},", step, ",[52,112986,112987],{"class":62},"\"obs:\"",[52,112989,112990],{"class":79},", np.round(obs, ",[52,112992,2313],{"class":308},[52,112994,112995],{"class":79},"), ",[52,112997,112998],{"class":62},"\"action:\"",[52,113000,15083],{"class":79},[52,113002,34668],{"class":308},[52,113004,1216],{"class":79},[52,113006,3262],{"class":308},[52,113008,113009],{"class":79},"(action), ",[52,113011,2313],{"class":308},[52,113013,33147],{"class":79},[52,113015,113016],{"class":54,"line":2381},[52,113017,123],{"emptyLinePlaceholder":122},[52,113019,113020,113022,113024,113027,113029,113031,113034,113036],{"class":54,"line":19252},[52,113021,33949],{"class":308},[52,113023,1216],{"class":79},[52,113025,113026],{"class":62},"\"total_reward:\"",[52,113028,15083],{"class":79},[52,113030,34668],{"class":308},[52,113032,113033],{"class":79},"(total_reward, ",[52,113035,2313],{"class":308},[52,113037,33147],{"class":79},[52,113039,113040,113042,113044,113047,113050,113052],{"class":54,"line":19258},[52,113041,33949],{"class":308},[52,113043,1216],{"class":79},[52,113045,113046],{"class":62},"\"final obs:\"",[52,113048,113049],{"class":79},", np.round(get_observation(data), ",[52,113051,2313],{"class":308},[52,113053,33147],{"class":79},[52,113055,113056],{"class":54,"line":19281},[52,113057,123],{"emptyLinePlaceholder":122},[52,113059,113060],{"class":54,"line":19287},[52,113061,123],{"emptyLinePlaceholder":122},[52,113063,113064,113066,113068,113070,113072],{"class":54,"line":19310},[52,113065,4578],{"class":58},[52,113067,33870],{"class":308},[52,113069,104209],{"class":58},[52,113071,104212],{"class":62},[52,113073,6718],{"class":79},[52,113075,113076],{"class":54,"line":19324},[52,113077,104219],{"class":79},[14,113079,106220],{},[42,113081,113083],{"className":26471,"code":113082,"language":26473,"meta":47,"style":47},"touch ch6_cartpole.py\n",[49,113084,113085],{"__ignoreMap":47},[52,113086,113087,113089],{"class":54,"line":55},[52,113088,103933],{"class":75},[52,113090,113091],{"class":62}," ch6_cartpole.py\n",[14,113093,113094],{},"运行：",[42,113096,113098],{"className":26471,"code":113097,"language":26473,"meta":47,"style":47},"python ch6_cartpole.py\n",[49,113099,113100],{"__ignoreMap":47},[52,113101,113102,113104],{"class":54,"line":55},[52,113103,33030],{"class":75},[52,113105,113091],{"class":62},[3195,113107,104222],{"id":104222},[14,113109,113110],{},"构造观测：",[42,113112,113114],{"className":33028,"code":113113,"language":33030,"meta":47,"style":47},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[49,113115,113116,113124],{"__ignoreMap":47},[52,113117,113118,113120,113122],{"class":54,"line":55},[52,113119,34597],{"class":58},[52,113121,112644],{"class":75},[52,113123,112647],{"class":79},[52,113125,113126,113128],{"class":54,"line":66},[52,113127,1441],{"class":58},[52,113129,112654],{"class":79},[14,113131,113132,113135,113136,113138,113139,113141],{},[49,113133,113134],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[49,113137,106680],{}," 2 维，",[49,113140,107010],{}," 2 维，所以 obs 是 4 维。",[14,113143,113144],{},"设置初始角度：",[42,113146,113148],{"className":33028,"code":113147,"language":33030,"meta":47,"style":47},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[49,113149,113150,113162],{"__ignoreMap":47},[52,113151,113152,113154,113156,113158,113160],{"class":54,"line":55},[52,113153,107349],{"class":79},[52,113155,629],{"class":308},[52,113157,7415],{"class":79},[52,113159,292],{"class":58},[52,113161,112790],{"class":308},[52,113163,113164],{"class":54,"line":66},[52,113165,107193],{"class":79},[14,113167,113168],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,113170,113171],{},"简单反馈控制：",[42,113173,113175],{"className":33028,"code":113174,"language":33030,"meta":47,"style":47},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[49,113176,113177,113197],{"__ignoreMap":47},[52,113178,113179,113181,113183,113185,113187,113189,113191,113193,113195],{"class":54,"line":55},[52,113180,110092],{"class":79},[52,113182,292],{"class":58},[52,113184,112877],{"class":308},[52,113186,872],{"class":58},[52,113188,112470],{"class":79},[52,113190,2004],{"class":58},[52,113192,64517],{"class":308},[52,113194,872],{"class":58},[52,113196,112890],{"class":79},[52,113198,113199,113201,113203,113205,113207,113209,113211,113213],{"class":54,"line":66},[52,113200,110092],{"class":79},[52,113202,292],{"class":58},[52,113204,110097],{"class":79},[52,113206,2642],{"class":58},[52,113208,105053],{"class":308},[52,113210,15083],{"class":79},[52,113212,105053],{"class":308},[52,113214,708],{"class":79},[14,113216,113217],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,113219,113220],{},"限制动作：",[42,113222,113224],{"className":33028,"code":113223,"language":33030,"meta":47,"style":47},"np.clip(action, -1.0, 1.0)\n",[49,113225,113226],{"__ignoreMap":47},[52,113227,113228,113231,113233,113235,113237,113239],{"class":54,"line":55},[52,113229,113230],{"class":79},"np.clip(action, ",[52,113232,2642],{"class":58},[52,113234,105053],{"class":308},[52,113236,15083],{"class":79},[52,113238,105053],{"class":308},[52,113240,708],{"class":79},[14,113242,113243,113244,113247],{},"因为 XML 里 ",[49,113245,113246],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[3195,113249,104358],{"id":104358},[42,113251,113252],{"className":33028,"code":113113,"language":33030,"meta":47,"style":47},[49,113253,113254,113262],{"__ignoreMap":47},[52,113255,113256,113258,113260],{"class":54,"line":55},[52,113257,34597],{"class":58},[52,113259,112644],{"class":75},[52,113261,112647],{"class":79},[52,113263,113264,113266],{"class":54,"line":66},[52,113265,1441],{"class":58},[52,113267,112654],{"class":79},[14,113269,113270,113271,113274,113275,113278,113279,113282],{},"这段定义了一个函数，用来获取当前观测。",[49,113272,113273],{},"data.qpos.copy()"," 是位置数组副本，",[49,113276,113277],{},"data.qvel.copy()"," 是速度数组副本。",[49,113280,113281],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,113284,113285],{},"在本章模型里：",[42,113287,113290],{"className":113288,"code":113289,"language":8154,"meta":47},[8152],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[49,113291,113289],{"__ignoreMap":47},[14,113293,113294],{},"所以返回的 obs 是：",[42,113296,113299],{"className":113297,"code":113298,"language":8154,"meta":47},[8152],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[49,113300,113298],{"__ignoreMap":47},[42,113302,113304],{"className":33028,"code":113303,"language":33030,"meta":47,"style":47},"def compute_reward(obs: np.ndarray) -> float:\n",[49,113305,113306],{"__ignoreMap":47},[52,113307,113308,113310,113312,113314,113316],{"class":54,"line":55},[52,113309,34597],{"class":58},[52,113311,112669],{"class":75},[52,113313,112672],{"class":79},[52,113315,3262],{"class":308},[52,113317,6718],{"class":79},[14,113319,113320,113321,113324],{},"这行定义奖励函数。输入是观测 ",[49,113322,113323],{},"obs","，输出是一个浮点数奖励。",[42,113326,113328],{"className":33028,"code":113327,"language":33030,"meta":47,"style":47},"cart_x = obs[0]\npole_angle = obs[1]\n",[49,113329,113330,113343],{"__ignoreMap":47},[52,113331,113332,113335,113337,113339,113341],{"class":54,"line":55},[52,113333,113334],{"class":79},"cart_x ",[52,113336,292],{"class":58},[52,113338,112686],{"class":79},[52,113340,692],{"class":308},[52,113342,35896],{"class":79},[52,113344,113345,113348,113350,113352,113354],{"class":54,"line":66},[52,113346,113347],{"class":79},"pole_angle ",[52,113349,292],{"class":58},[52,113351,112686],{"class":79},[52,113353,629],{"class":308},[52,113355,35896],{"class":79},[14,113357,113358,113359,113362,113363,113366],{},"数组索引从 0 开始。",[49,113360,113361],{},"obs[0]"," 是第一个元素，也就是小车位置。",[49,113364,113365],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[42,113368,113369],{"className":33028,"code":112438,"language":33030,"meta":47,"style":47},[49,113370,113371],{"__ignoreMap":47},[52,113372,113373,113375,113377,113379,113381,113383,113385,113387,113389,113391,113393,113395,113397,113399],{"class":54,"line":55},[52,113374,19694],{"class":58},[52,113376,112447],{"class":308},[52,113378,1216],{"class":79},[52,113380,105053],{"class":308},[52,113382,54921],{"class":58},[52,113384,112456],{"class":308},[52,113386,872],{"class":58},[52,113388,112461],{"class":79},[52,113390,3053],{"class":58},[52,113392,112461],{"class":79},[52,113394,2642],{"class":58},[52,113396,112470],{"class":79},[52,113398,3053],{"class":58},[52,113400,112475],{"class":79},[14,113402,113403,113404,113407,113408,113411],{},"这行计算奖励。",[49,113405,113406],{},"cart_x * cart_x"," 是小车位置的平方，",[49,113409,113410],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[42,113413,113415],{"className":33028,"code":113414,"language":33030,"meta":47,"style":47},"data.qpos[1] = 0.1\n",[49,113416,113417],{"__ignoreMap":47},[52,113418,113419,113421,113423,113425,113427],{"class":54,"line":55},[52,113420,107349],{"class":79},[52,113422,629],{"class":308},[52,113424,7415],{"class":79},[52,113426,292],{"class":58},[52,113428,112790],{"class":308},[14,113430,113431,113432,113434,113435,113437],{},"手动设置杆子的初始角度。因为 ",[49,113433,108106],{}," 是小车位置，",[49,113436,108109],{}," 是杆子角度，所以这里改的是杆子。",[42,113439,113440],{"className":33028,"code":107193,"language":33030,"meta":47,"style":47},[49,113441,113442],{"__ignoreMap":47},[52,113443,113444],{"class":54,"line":55},[52,113445,107193],{"class":79},[14,113447,108152,113448,113450],{},[49,113449,106680],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[42,113452,113454],{"className":33028,"code":113453,"language":33030,"meta":47,"style":47},"total_reward = 0.0\n",[49,113455,113456],{"__ignoreMap":47},[52,113457,113458,113461,113463],{"class":54,"line":55},[52,113459,113460],{"class":79},"total_reward ",[52,113462,292],{"class":58},[52,113464,107411],{"class":308},[14,113466,113467],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[42,113469,113471],{"className":33028,"code":113470,"language":33030,"meta":47,"style":47},"for step in range(1000):\n",[49,113472,113473],{"__ignoreMap":47},[52,113474,113475,113477,113479,113481,113483,113485,113487],{"class":54,"line":55},[52,113476,6014],{"class":58},[52,113478,34266],{"class":79},[52,113480,28693],{"class":58},[52,113482,35093],{"class":308},[52,113484,1216],{"class":79},[52,113486,9373],{"class":308},[52,113488,33436],{"class":79},[14,113490,113491,113492,113494],{},"循环 1000 步。",[49,113493,109784],{}," 是当前步数，从 0 到 999。",[42,113496,113498],{"className":33028,"code":113497,"language":33030,"meta":47,"style":47},"obs = get_observation(data)\n",[49,113499,113500],{"__ignoreMap":47},[52,113501,113502,113505,113507],{"class":54,"line":55},[52,113503,113504],{"class":79},"obs ",[52,113506,292],{"class":58},[52,113508,112837],{"class":79},[14,113510,113511,113512,31035],{},"读取当前状态，保存到 ",[49,113513,113323],{},[42,113515,113517],{"className":33028,"code":113516,"language":33030,"meta":47,"style":47},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[49,113518,113519,113531],{"__ignoreMap":47},[52,113520,113521,113523,113525,113527,113529],{"class":54,"line":55},[52,113522,113347],{"class":79},[52,113524,292],{"class":58},[52,113526,112686],{"class":79},[52,113528,629],{"class":308},[52,113530,35896],{"class":79},[52,113532,113533,113536,113538,113540,113542],{"class":54,"line":66},[52,113534,113535],{"class":79},"pole_angular_velocity ",[52,113537,292],{"class":58},[52,113539,112686],{"class":79},[52,113541,2313],{"class":308},[52,113543,35896],{"class":79},[14,113545,113546,113547,113550,113551,31035],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[49,113548,113549],{},"obs[3]","？因为 obs 的顺序是 ",[49,113552,113553],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[42,113555,113557],{"className":33028,"code":113556,"language":33030,"meta":47,"style":47},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[49,113558,113559],{"__ignoreMap":47},[52,113560,113561,113563,113565,113567,113569,113571,113573,113575,113577],{"class":54,"line":55},[52,113562,110092],{"class":79},[52,113564,292],{"class":58},[52,113566,112877],{"class":308},[52,113568,872],{"class":58},[52,113570,112470],{"class":79},[52,113572,2004],{"class":58},[52,113574,64517],{"class":308},[52,113576,872],{"class":58},[52,113578,112890],{"class":79},[14,113580,113581,113582,103668,113584,113586],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[49,113583,107910],{},[49,113585,37979],{}," 是人为设置的系数，不是固定公式。",[42,113588,113590],{"className":33028,"code":113589,"language":33030,"meta":47,"style":47},"action = np.clip(action, -1.0, 1.0)\n",[49,113591,113592],{"__ignoreMap":47},[52,113593,113594,113596,113598,113600,113602,113604,113606,113608],{"class":54,"line":55},[52,113595,110092],{"class":79},[52,113597,292],{"class":58},[52,113599,110097],{"class":79},[52,113601,2642],{"class":58},[52,113603,105053],{"class":308},[52,113605,15083],{"class":79},[52,113607,105053],{"class":308},[52,113609,708],{"class":79},[14,113611,113612],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[42,113614,113615],{"className":33028,"code":112423,"language":33030,"meta":47,"style":47},[49,113616,113617],{"__ignoreMap":47},[52,113618,113619,113621,113623,113625,113627],{"class":54,"line":55},[52,113620,108521],{"class":79},[52,113622,692],{"class":308},[52,113624,7415],{"class":79},[52,113626,292],{"class":58},[52,113628,110120],{"class":79},[14,113630,113631],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[42,113633,113634],{"className":33028,"code":107155,"language":33030,"meta":47,"style":47},[49,113635,113636],{"__ignoreMap":47},[52,113637,113638],{"class":54,"line":55},[52,113639,107155],{"class":79},[14,113641,113642,113643,113645],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[49,113644,108776],{}," 计算小车和杆子的下一刻状态。",[42,113647,113649],{"className":33028,"code":113648,"language":33030,"meta":47,"style":47},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[49,113650,113651,113660],{"__ignoreMap":47},[52,113652,113653,113656,113658],{"class":54,"line":55},[52,113654,113655],{"class":79},"reward ",[52,113657,292],{"class":58},[52,113659,112942],{"class":79},[52,113661,113662,113664,113666],{"class":54,"line":66},[52,113663,113460],{"class":79},[52,113665,1910],{"class":58},[52,113667,112952],{"class":79},[14,113669,113670,113671,113673,113674,113677,113678,31035],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[49,113672,1910],{}," 是简写，",[49,113675,113676],{},"total_reward += reward"," 等价于 ",[49,113679,113680],{},"total_reward = total_reward + reward",[42,113682,113684],{"className":33028,"code":113683,"language":33030,"meta":47,"style":47},"if step % 100 == 0:\n",[49,113685,113686],{"__ignoreMap":47},[52,113687,113688,113690,113692,113694,113696,113698,113700],{"class":54,"line":55},[52,113689,4578],{"class":58},[52,113691,34266],{"class":79},[52,113693,1998],{"class":58},[52,113695,8719],{"class":308},[52,113697,104209],{"class":58},[52,113699,1444],{"class":308},[52,113701,6718],{"class":79},[14,113703,113704,113706,113707,113710],{},[49,113705,1998],{}," 是取余数。",[49,113708,113709],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[42,113712,113714],{"className":33028,"code":113713,"language":33030,"meta":47,"style":47},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[49,113715,113716],{"__ignoreMap":47},[52,113717,113718,113720,113722,113724,113726,113728,113730,113732,113734,113736,113738,113740,113742,113744,113746,113748],{"class":54,"line":55},[52,113719,33065],{"class":308},[52,113721,1216],{"class":79},[52,113723,112981],{"class":62},[52,113725,112984],{"class":79},[52,113727,112987],{"class":62},[52,113729,112990],{"class":79},[52,113731,2313],{"class":308},[52,113733,112995],{"class":79},[52,113735,112998],{"class":62},[52,113737,15083],{"class":79},[52,113739,34668],{"class":308},[52,113741,1216],{"class":79},[52,113743,3262],{"class":308},[52,113745,113009],{"class":79},[52,113747,2313],{"class":308},[52,113749,33147],{"class":79},[14,113751,113752,113753,113756,113757,113760],{},"打印当前步数、观测和动作。",[49,113754,113755],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[49,113758,113759],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[18,113762,104966],{"id":104965},[14,113764,113765],{},"观测向量:",[42,113767,113770],{"className":113768,"code":113769,"language":8154,"meta":47},[8152],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[49,113771,113769],{"__ignoreMap":47},[14,113773,113774],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,113776,113777],{},"每隔 100 步会打印一次：",[42,113779,113782],{"className":113780,"code":113781,"language":8154,"meta":47},[8152],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[49,113783,113781],{"__ignoreMap":47},[14,113785,113786],{},"重点观察：",[1696,113788,113789,113795,113800],{},[32,113790,113791,113794],{},[49,113792,113793],{},"pole_angle"," 是否越来越大。",[32,113796,113797,113799],{},[49,113798,112376],{}," 是否跑得太远。",[32,113801,113802,113803,85189,113805,31035],{},"action 是否经常被 clip 到 ",[49,113804,106565],{},[49,113806,629],{},[14,113808,113809],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[18,113811,104998],{"id":104997},[1696,113813,113814,113820,113823,113829,113839,113845,113848],{},[32,113815,113816,113817,31035],{},"把初始角度改为 ",[49,113818,113819],{},"data.qpos[1] = 0.3",[32,113821,113822],{},"重新运行，观察控制是否变差。",[32,113824,113825,113826,113828],{},"把 actuator ",[49,113827,109717],{}," 改小。",[32,113830,113831,113832,113835,113836,31035],{},"打印 ",[49,113833,113834],{},"model.nq, model.nv, model.nu","，应为 ",[49,113837,113838],{},"2 2 1",[32,113840,113841,113842,113844],{},"把 reward 里的 ",[49,113843,113410],{}," 系数改大，观察总奖励变化。",[32,113846,113847],{},"把控制器改成反号，观察杆子是否更容易倒。",[32,113849,113850],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[18,113852,105103],{"id":105102},[3195,113854,113855],{"id":113855},"杆子方向和预期不一致",[14,113857,105046,113858,113860,113861,113863],{},[49,113859,108889],{}," 和 capsule 的 ",[49,113862,105826],{},"，必要时用 viewer 可视化确认。",[3195,113865,113866],{"id":113866},"控制器越控越倒",[14,113868,113869],{},"说明反馈符号可能反了，尝试:",[42,113871,113873],{"className":33028,"code":113872,"language":33030,"meta":47,"style":47},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[49,113874,113875],{"__ignoreMap":47},[52,113876,113877,113879,113881,113883,113885,113887,113889,113891,113893,113895],{"class":54,"line":55},[52,113878,110092],{"class":79},[52,113880,292],{"class":58},[52,113882,54921],{"class":58},[52,113884,107910],{"class":308},[52,113886,872],{"class":58},[52,113888,112470],{"class":79},[52,113890,2642],{"class":58},[52,113892,64517],{"class":308},[52,113894,872],{"class":58},[52,113896,112890],{"class":79},[3195,113898,113899],{"id":113899},"小车飞走",[14,113901,113902,113903,113905,113906,113909],{},"降低 ",[49,113904,109717],{}," 或缩小 ",[49,113907,113908],{},"action"," 的 clip 范围。",[3195,113911,113913,113915],{"id":113912},"obs3-为什么是杆子角速度",[49,113914,113549],{}," 为什么是杆子角速度",[14,113917,113918],{},"因为这个模型里：",[42,113920,113923],{"className":113921,"code":113922,"language":8154,"meta":47},[8152],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[49,113924,113922],{"__ignoreMap":47},[14,113926,112397],{},[42,113928,113931],{"className":113929,"code":113930,"language":8154,"meta":47},[8152],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[49,113932,113930],{"__ignoreMap":47},[3195,113934,113936],{"id":113935},"reward-变成负数是否错误","reward 变成负数是否错误",[14,113938,113939],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[18,113941,105257],{"id":105256},[14,113943,113944],{},"一个控制任务通常包含：",[1696,113946,113947,113950,113958,113963,113966],{},[32,113948,113949],{},"模型：Cartpole 的 body、joint、actuator。",[32,113951,113952,113953,3426,113955,113957],{},"观测：从 ",[49,113954,106680],{},[49,113956,107010],{}," 里取状态。",[32,113959,113960,113961,31035],{},"动作：写入 ",[49,113962,103726],{},[32,113964,113965],{},"奖励：根据任务目标打分。",[32,113967,113968],{},"循环：obs -> action -> step -> reward。",[14,113970,113971],{},"这就是后面 Gymnasium 环境的基本骨架。",[3141,113973,106936],{},{"title":47,"searchDepth":66,"depth":66,"links":113975},[113976,113977,113978,113983,113987,113988,113989,113997],{"id":103296,"depth":66,"text":103297},{"id":103419,"depth":66,"text":103420},{"id":103694,"depth":66,"text":103695,"children":113979},[113980,113981,113982],{"id":112350,"depth":83,"text":112351},{"id":112415,"depth":83,"text":112416},{"id":112431,"depth":83,"text":112432},{"id":103902,"depth":66,"text":103903,"children":113984},[113985,113986],{"id":104222,"depth":83,"text":104222},{"id":104358,"depth":83,"text":104358},{"id":104965,"depth":66,"text":104966},{"id":104997,"depth":66,"text":104998},{"id":105102,"depth":66,"text":105103,"children":113990},[113991,113992,113993,113994,113996],{"id":113855,"depth":83,"text":113855},{"id":113866,"depth":83,"text":113866},{"id":113899,"depth":83,"text":113899},{"id":113912,"depth":83,"text":113995},"obs[3] 为什么是杆子角速度",{"id":113935,"depth":83,"text":113936},{"id":105256,"depth":66,"text":105257},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":112086,"description":47},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":114004,"title":114005,"body":114006,"description":47,"extension":3153,"meta":116020,"navigation":122,"path":116021,"seo":116022,"stem":116023,"__hash__":116024},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":114007,"toc":115996},[114008,114011,114013,114016,114018,114035,114038,114041,114047,114050,114052,114054,114078,114080,114094,114096,114137,114139,114157,114159,114162,114168,114171,114199,114203,114209,114234,114237,114268,114275,114278,114281,114287,114290,114296,114299,114305,114309,114312,114337,114340,114342,115102,115104,115116,115118,115129,115131,115134,115151,115154,115156,115167,115170,115172,115218,115221,115234,115237,115319,115322,115324,115340,115350,115363,115366,115405,115415,115426,115436,115449,115452,115481,115484,115494,115497,115503,115520,115531,115533,115539,115556,115567,115588,115591,115603,115606,115627,115630,115638,115646,115663,115666,115735,115742,115750,115753,115766,115773,115775,115778,115784,115787,115790,115796,115802,115804,115844,115846,115852,115861,115864,115866,115886,115889,115892,115898,115902,115904,115931,115934,115937,115964,115970,115973,115976,115978,115981,115984,115990,115993],[10,114009,114005],{"id":114010},"_7控制任务reacher-机械臂到达目标",[18,114012,103297],{"id":103296},[14,114014,114015],{},"本章搭建一个二维两关节 reacher 任务。",[14,114017,106981],{},[1696,114019,114020,114023,114026,114029,114032],{},[32,114021,114022],{},"两个 hinge joint",[32,114024,114025],{},"两个 motor actuator",[32,114027,114028],{},"site 作为末端点和目标点",[32,114030,114031],{},"根据末端和目标距离设计 reward",[32,114033,114034],{},"构造机械臂任务的基本形式",[14,114036,114037],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,114039,114040],{},"Reacher 任务可以理解为：",[42,114042,114045],{"className":114043,"code":114044,"language":8154,"meta":47},[8152],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[49,114046,114044],{"__ignoreMap":47},[14,114048,114049],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[18,114051,103420],{"id":103419},[14,114053,103423],{},[42,114055,114056],{"className":26471,"code":107038,"language":26473,"meta":47,"style":47},[49,114057,114058],{"__ignoreMap":47},[52,114059,114060,114062,114064,114066,114068,114070,114072,114074,114076],{"class":54,"line":55},[52,114061,27226],{"class":75},[52,114063,28965],{"class":62},[52,114065,26483],{"class":62},[52,114067,29050],{"class":308},[52,114069,107053],{"class":62},[52,114071,103448],{"class":62},[52,114073,105151],{"class":62},[52,114075,103464],{"class":62},[52,114077,107062],{"class":62},[14,114079,105469],{},[42,114081,114082],{"className":26471,"code":103569,"language":26473,"meta":47,"style":47},[49,114083,114084],{"__ignoreMap":47},[52,114085,114086,114088,114090,114092],{"class":54,"line":55},[52,114087,26480],{"class":75},[52,114089,26483],{"class":62},[52,114091,103580],{"class":62},[52,114093,103583],{"class":62},[14,114095,105486],{},[42,114097,114099],{"className":26471,"code":114098,"language":26473,"meta":47,"style":47},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[49,114100,114101,114118,114127],{"__ignoreMap":47},[52,114102,114103,114105,114107,114109,114112,114114,114116],{"class":54,"line":55},[52,114104,32980],{"class":75},[52,114106,31826],{"class":62},[52,114108,27765],{"class":308},[52,114110,114111],{"class":62}," mujoco-reacher",[52,114113,103625],{"class":62},[52,114115,103628],{"class":308},[52,114117,103631],{"class":308},[52,114119,114120,114122,114124],{"class":54,"line":66},[52,114121,32980],{"class":75},[52,114123,103638],{"class":62},[52,114125,114126],{"class":62}," mujoco-reacher\n",[52,114128,114129,114131,114133,114135],{"class":54,"line":83},[52,114130,26480],{"class":75},[52,114132,26483],{"class":62},[52,114134,103580],{"class":62},[52,114136,103583],{"class":62},[14,114138,103654],{},[1696,114140,114141,114144,114147],{},[32,114142,114143],{},"本章使用低维状态，不使用图像输入。",[32,114145,114146],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[32,114148,114149,114150,3426,114152,3426,114154,114156],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[49,114151,106680],{},[49,114153,107010],{},[49,114155,106330],{}," 的方法一致。",[18,114158,103695],{"id":103694},[14,114160,114161],{},"Reacher 任务核心:",[42,114163,114166],{"className":114164,"code":114165,"language":8154,"meta":47},[8152],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[49,114167,114165],{"__ignoreMap":47},[14,114169,114170],{},"读取 site 世界坐标:",[42,114172,114174],{"className":33028,"code":114173,"language":33030,"meta":47,"style":47},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[49,114175,114176,114189],{"__ignoreMap":47},[52,114177,114178,114180,114182,114184,114187],{"class":54,"line":55},[52,114179,106284],{"class":79},[52,114181,292],{"class":58},[52,114183,106055],{"class":79},[52,114185,114186],{"class":62},"\"tip\"",[52,114188,708],{"class":79},[52,114190,114191,114194,114196],{"class":54,"line":66},[52,114192,114193],{"class":79},"tip_pos ",[52,114195,292],{"class":58},[52,114197,114198],{"class":79}," data.site_xpos[site_id]\n",[3195,114200,114202],{"id":114201},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,114204,114205,114206,114208],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[49,114207,106680],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[42,114210,114212],{"className":33028,"code":114211,"language":33030,"meta":47,"style":47},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[49,114213,114214,114224],{"__ignoreMap":47},[52,114215,114216,114219,114221],{"class":54,"line":55},[52,114217,114218],{"class":79},"tip ",[52,114220,292],{"class":58},[52,114222,114223],{"class":79}," data.site_xpos[tip_site_id]\n",[52,114225,114226,114229,114231],{"class":54,"line":66},[52,114227,114228],{"class":79},"target ",[52,114230,292],{"class":58},[52,114232,114233],{"class":79}," data.site_xpos[target_site_id]\n",[14,114235,114236],{},"这样 reward 就很容易写：",[42,114238,114240],{"className":33028,"code":114239,"language":33030,"meta":47,"style":47},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[49,114241,114242,114257],{"__ignoreMap":47},[52,114243,114244,114247,114249,114252,114254],{"class":54,"line":55},[52,114245,114246],{"class":79},"dist ",[52,114248,292],{"class":58},[52,114250,114251],{"class":79}," np.linalg.norm(tip ",[52,114253,2642],{"class":58},[52,114255,114256],{"class":79}," target)\n",[52,114258,114259,114261,114263,114265],{"class":54,"line":66},[52,114260,113655],{"class":79},[52,114262,292],{"class":58},[52,114264,54921],{"class":58},[52,114266,114267],{"class":79},"dist\n",[14,114269,114270,114271,114274],{},"距离越小，",[49,114272,114273],{},"-dist"," 越接近 0，奖励越高。",[3195,114276,114277],{"id":114277},"两关节机械臂的状态",[14,114279,114280],{},"这个模型有两个 hinge joint：",[42,114282,114285],{"className":114283,"code":114284,"language":8154,"meta":47},[8152],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[49,114286,114284],{"__ignoreMap":47},[14,114288,114289],{},"再加上末端和目标位置：",[42,114291,114294],{"className":114292,"code":114293,"language":8154,"meta":47},[8152],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[49,114295,114293],{"__ignoreMap":47},[14,114297,114298],{},"总维度：",[42,114300,114303],{"className":114301,"code":114302,"language":8154,"meta":47},[8152],"2 + 2 + 3 + 3 = 10\n",[49,114304,114302],{"__ignoreMap":47},[3195,114306,114308],{"id":114307},"为什么-gravity-是-0","为什么 gravity 是 0",[14,114310,114311],{},"本章把重力设为：",[42,114313,114315],{"className":55717,"code":114314,"language":55719,"meta":47,"style":47},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[49,114316,114317],{"__ignoreMap":47},[52,114318,114319,114321,114323,114325,114327,114329,114331,114333,114335],{"class":54,"line":55},[52,114320,698],{"class":79},[52,114322,71816],{"class":53950},[52,114324,103844],{"class":75},[52,114326,292],{"class":79},[52,114328,103849],{"class":62},[52,114330,103852],{"class":75},[52,114332,292],{"class":79},[52,114334,106421],{"class":62},[52,114336,103794],{"class":79},[14,114338,114339],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[18,114341,103903],{"id":103902},[42,114343,114345],{"className":33028,"code":114344,"language":33030,"meta":47,"style":47},"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",[49,114346,114347,114353,114363,114367,114371,114379,114384,114389,114393,114397,114402,114407,114411,114416,114421,114426,114430,114435,114440,114445,114450,114454,114458,114462,114466,114470,114475,114480,114484,114488,114492,114496,114500,114515,114524,114536,114559,114566,114570,114574,114584,114598,114612,114619,114623,114627,114641,114653,114665,114678,114693,114710,114714,114718,114730,114742,114750,114758,114762,114778,114783,114796,114809,114824,114828,114863,114895,114899,114903,114912,114916,114932,114942,114953,114969,114985,115001,115017,115021,115039,115059,115078,115082,115086,115098],{"__ignoreMap":47},[52,114348,114349,114351],{"class":54,"line":55},[52,114350,33042],{"class":58},[52,114352,103951],{"class":79},[52,114354,114355,114357,114359,114361],{"class":54,"line":66},[52,114356,33042],{"class":58},[52,114358,34030],{"class":79},[52,114360,34033],{"class":58},[52,114362,34036],{"class":79},[52,114364,114365],{"class":54,"line":83},[52,114366,123],{"emptyLinePlaceholder":122},[52,114368,114369],{"class":54,"line":91},[52,114370,123],{"emptyLinePlaceholder":122},[52,114372,114373,114375,114377],{"class":54,"line":98},[52,114374,103964],{"class":308},[52,114376,16212],{"class":58},[52,114378,103969],{"class":62},[52,114380,114381],{"class":54,"line":107},[52,114382,114383],{"class":62},"\u003Cmujoco model=\"two_link_reacher\">\n",[52,114385,114386],{"class":54,"line":113},[52,114387,114388],{"class":62},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[52,114390,114391],{"class":54,"line":119},[52,114392,123],{"emptyLinePlaceholder":122},[52,114394,114395],{"class":54,"line":126},[52,114396,103988],{"class":62},[52,114398,114399],{"class":54,"line":132},[52,114400,114401],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[52,114403,114404],{"class":54,"line":138},[52,114405,114406],{"class":62},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[52,114408,114409],{"class":54,"line":144},[52,114410,123],{"emptyLinePlaceholder":122},[52,114412,114413],{"class":54,"line":153},[52,114414,114415],{"class":62},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[52,114417,114418],{"class":54,"line":159},[52,114419,114420],{"class":62},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[52,114422,114423],{"class":54,"line":167},[52,114424,114425],{"class":62},"      \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",[52,114427,114428],{"class":54,"line":173},[52,114429,123],{"emptyLinePlaceholder":122},[52,114431,114432],{"class":54,"line":181},[52,114433,114434],{"class":62},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[52,114436,114437],{"class":54,"line":186},[52,114438,114439],{"class":62},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[52,114441,114442],{"class":54,"line":191},[52,114443,114444],{"class":62},"        \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",[52,114446,114447],{"class":54,"line":196},[52,114448,114449],{"class":62},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[52,114451,114452],{"class":54,"line":201},[52,114453,109088],{"class":62},[52,114455,114456],{"class":54,"line":206},[52,114457,104017],{"class":62},[52,114459,114460],{"class":54,"line":211},[52,114461,104022],{"class":62},[52,114463,114464],{"class":54,"line":218},[52,114465,123],{"emptyLinePlaceholder":122},[52,114467,114468],{"class":54,"line":223},[52,114469,109105],{"class":62},[52,114471,114472],{"class":54,"line":230},[52,114473,114474],{"class":62},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[52,114476,114477],{"class":54,"line":239},[52,114478,114479],{"class":62},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[52,114481,114482],{"class":54,"line":251},[52,114483,109115],{"class":62},[52,114485,114486],{"class":54,"line":256},[52,114487,104027],{"class":62},[52,114489,114490],{"class":54,"line":262},[52,114491,98348],{"class":62},[52,114493,114494],{"class":54,"line":268},[52,114495,123],{"emptyLinePlaceholder":122},[52,114497,114498],{"class":54,"line":280},[52,114499,123],{"emptyLinePlaceholder":122},[52,114501,114502,114504,114507,114510,114512],{"class":54,"line":286},[52,114503,34597],{"class":58},[52,114505,114506],{"class":75}," site_position",[52,114508,114509],{"class":79},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[52,114511,4350],{"class":308},[52,114513,114514],{"class":79},") -> np.ndarray:\n",[52,114516,114517,114519,114521],{"class":54,"line":300},[52,114518,106050],{"class":79},[52,114520,292],{"class":58},[52,114522,114523],{"class":79}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[52,114525,114526,114528,114530,114532,114534],{"class":54,"line":314},[52,114527,6088],{"class":58},[52,114529,106099],{"class":79},[52,114531,698],{"class":58},[52,114533,1444],{"class":308},[52,114535,6718],{"class":79},[52,114537,114538,114540,114542,114544,114546,114549,114551,114553,114555,114557],{"class":54,"line":327},[52,114539,106082],{"class":58},[52,114541,106085],{"class":308},[52,114543,1216],{"class":79},[52,114545,3273],{"class":58},[52,114547,114548],{"class":62},"\"site not found: ",[52,114550,383],{"class":308},[52,114552,82460],{"class":79},[52,114554,4132],{"class":308},[52,114556,2844],{"class":62},[52,114558,708],{"class":79},[52,114560,114561,114563],{"class":54,"line":333},[52,114562,1441],{"class":58},[52,114564,114565],{"class":79}," data.site_xpos[site_id].copy()\n",[52,114567,114568],{"class":54,"line":360},[52,114569,123],{"emptyLinePlaceholder":122},[52,114571,114572],{"class":54,"line":365},[52,114573,123],{"emptyLinePlaceholder":122},[52,114575,114576,114578,114581],{"class":54,"line":371},[52,114577,34597],{"class":58},[52,114579,114580],{"class":75}," get_obs",[52,114582,114583],{"class":79},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[52,114585,114586,114589,114591,114594,114596],{"class":54,"line":400},[52,114587,114588],{"class":79},"    tip ",[52,114590,292],{"class":58},[52,114592,114593],{"class":79}," site_position(model, data, ",[52,114595,114186],{"class":62},[52,114597,708],{"class":79},[52,114599,114600,114603,114605,114607,114610],{"class":54,"line":405},[52,114601,114602],{"class":79},"    target ",[52,114604,292],{"class":58},[52,114606,114593],{"class":79},[52,114608,114609],{"class":62},"\"target\"",[52,114611,708],{"class":79},[52,114613,114614,114616],{"class":54,"line":411},[52,114615,1441],{"class":58},[52,114617,114618],{"class":79}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[52,114620,114621],{"class":54,"line":424},[52,114622,123],{"emptyLinePlaceholder":122},[52,114624,114625],{"class":54,"line":436},[52,114626,123],{"emptyLinePlaceholder":122},[52,114628,114629,114631,114634,114637,114639],{"class":54,"line":449},[52,114630,34597],{"class":58},[52,114632,114633],{"class":75}," reward",[52,114635,114636],{"class":79},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[52,114638,3262],{"class":308},[52,114640,6718],{"class":79},[52,114642,114643,114645,114647,114649,114651],{"class":54,"line":2160},[52,114644,114588],{"class":79},[52,114646,292],{"class":58},[52,114648,114593],{"class":79},[52,114650,114186],{"class":62},[52,114652,708],{"class":79},[52,114654,114655,114657,114659,114661,114663],{"class":54,"line":2186},[52,114656,114602],{"class":79},[52,114658,292],{"class":58},[52,114660,114593],{"class":79},[52,114662,114609],{"class":62},[52,114664,708],{"class":79},[52,114666,114667,114670,114672,114674,114676],{"class":54,"line":2209},[52,114668,114669],{"class":79},"    dist ",[52,114671,292],{"class":58},[52,114673,114251],{"class":79},[52,114675,2642],{"class":58},[52,114677,114256],{"class":79},[52,114679,114680,114683,114685,114688,114690],{"class":54,"line":2233},[52,114681,114682],{"class":79},"    control_cost ",[52,114684,292],{"class":58},[52,114686,114687],{"class":308}," 0.01",[52,114689,872],{"class":58},[52,114691,114692],{"class":79}," np.sum(np.square(data.ctrl))\n",[52,114694,114695,114697,114699,114701,114703,114705,114707],{"class":54,"line":2238},[52,114696,1441],{"class":58},[52,114698,112447],{"class":308},[52,114700,1216],{"class":79},[52,114702,2642],{"class":58},[52,114704,114246],{"class":79},[52,114706,2642],{"class":58},[52,114708,114709],{"class":79}," control_cost)\n",[52,114711,114712],{"class":54,"line":2243},[52,114713,123],{"emptyLinePlaceholder":122},[52,114715,114716],{"class":54,"line":2248},[52,114717,123],{"emptyLinePlaceholder":122},[52,114719,114720,114722,114724,114726,114728],{"class":54,"line":2257},[52,114721,34597],{"class":58},[52,114723,245],{"class":75},[52,114725,104048],{"class":79},[52,114727,98336],{"class":308},[52,114729,6718],{"class":79},[52,114731,114732,114734,114736,114738,114740],{"class":54,"line":2262},[52,114733,104057],{"class":79},[52,114735,292],{"class":58},[52,114737,104062],{"class":79},[52,114739,103964],{"class":308},[52,114741,708],{"class":79},[52,114743,114744,114746,114748],{"class":54,"line":2268},[52,114745,104071],{"class":79},[52,114747,292],{"class":58},[52,114749,104076],{"class":79},[52,114751,114752,114754,114756],{"class":54,"line":2297},[52,114753,112803],{"class":79},[52,114755,292],{"class":58},[52,114757,107411],{"class":308},[52,114759,114760],{"class":54,"line":2303},[52,114761,123],{"emptyLinePlaceholder":122},[52,114763,114764,114766,114768,114770,114772,114774,114776],{"class":54,"line":2318},[52,114765,679],{"class":58},[52,114767,34266],{"class":79},[52,114769,28693],{"class":58},[52,114771,35093],{"class":308},[52,114773,1216],{"class":79},[52,114775,67724],{"class":308},[52,114777,33436],{"class":79},[52,114779,114780],{"class":54,"line":2324},[52,114781,114782],{"class":79},"        mujoco.mj_forward(model, data)\n",[52,114784,114785,114788,114790,114792,114794],{"class":54,"line":2353},[52,114786,114787],{"class":79},"        tip ",[52,114789,292],{"class":58},[52,114791,114593],{"class":79},[52,114793,114186],{"class":62},[52,114795,708],{"class":79},[52,114797,114798,114801,114803,114805,114807],{"class":54,"line":2362},[52,114799,114800],{"class":79},"        target ",[52,114802,292],{"class":58},[52,114804,114593],{"class":79},[52,114806,114609],{"class":62},[52,114808,708],{"class":79},[52,114810,114811,114814,114816,114819,114821],{"class":54,"line":2368},[52,114812,114813],{"class":79},"        error ",[52,114815,292],{"class":58},[52,114817,114818],{"class":79}," target ",[52,114820,2642],{"class":58},[52,114822,114823],{"class":79}," tip\n",[52,114825,114826],{"class":54,"line":2376},[52,114827,123],{"emptyLinePlaceholder":122},[52,114829,114830,114832,114834,114836,114838,114841,114843,114845,114848,114850,114853,114855,114857,114859,114861],{"class":54,"line":2381},[52,114831,109267],{"class":79},[52,114833,692],{"class":308},[52,114835,7415],{"class":79},[52,114837,292],{"class":58},[52,114839,114840],{"class":79}," np.clip(",[52,114842,107910],{"class":308},[52,114844,872],{"class":58},[52,114846,114847],{"class":79}," error[",[52,114849,564],{"class":308},[52,114851,114852],{"class":79},"], ",[52,114854,2642],{"class":58},[52,114856,105053],{"class":308},[52,114858,15083],{"class":79},[52,114860,105053],{"class":308},[52,114862,708],{"class":79},[52,114864,114865,114867,114869,114871,114873,114875,114877,114879,114881,114883,114885,114887,114889,114891,114893],{"class":54,"line":19252},[52,114866,109267],{"class":79},[52,114868,629],{"class":308},[52,114870,7415],{"class":79},[52,114872,292],{"class":58},[52,114874,114840],{"class":79},[52,114876,107910],{"class":308},[52,114878,872],{"class":58},[52,114880,114847],{"class":79},[52,114882,692],{"class":308},[52,114884,114852],{"class":79},[52,114886,2642],{"class":58},[52,114888,105053],{"class":308},[52,114890,15083],{"class":79},[52,114892,105053],{"class":308},[52,114894,708],{"class":79},[52,114896,114897],{"class":54,"line":19258},[52,114898,123],{"emptyLinePlaceholder":122},[52,114900,114901],{"class":54,"line":19281},[52,114902,104166],{"class":79},[52,114904,114905,114907,114909],{"class":54,"line":19287},[52,114906,112947],{"class":79},[52,114908,1910],{"class":58},[52,114910,114911],{"class":79}," reward(model, data)\n",[52,114913,114914],{"class":54,"line":19310},[52,114915,123],{"emptyLinePlaceholder":122},[52,114917,114918,114920,114922,114924,114926,114928,114930],{"class":54,"line":19324},[52,114919,5497],{"class":58},[52,114921,34266],{"class":79},[52,114923,1998],{"class":58},[52,114925,8719],{"class":308},[52,114927,104209],{"class":58},[52,114929,1444],{"class":308},[52,114931,6718],{"class":79},[52,114933,114934,114937,114939],{"class":54,"line":19344},[52,114935,114936],{"class":79},"            obs ",[52,114938,292],{"class":58},[52,114940,114941],{"class":79}," get_obs(model, data)\n",[52,114943,114944,114946,114948,114950],{"class":54,"line":19350},[52,114945,37300],{"class":308},[52,114947,1216],{"class":79},[52,114949,112981],{"class":62},[52,114951,114952],{"class":79},", step)\n",[52,114954,114955,114957,114959,114962,114965,114967],{"class":54,"line":19361},[52,114956,37300],{"class":308},[52,114958,1216],{"class":79},[52,114960,114961],{"class":62},"\"  tip:\"",[52,114963,114964],{"class":79},", np.round(tip, ",[52,114966,2313],{"class":308},[52,114968,33147],{"class":79},[52,114970,114971,114973,114975,114978,114981,114983],{"class":54,"line":19384},[52,114972,37300],{"class":308},[52,114974,1216],{"class":79},[52,114976,114977],{"class":62},"\"  target:\"",[52,114979,114980],{"class":79},", np.round(target, ",[52,114982,2313],{"class":308},[52,114984,33147],{"class":79},[52,114986,114987,114989,114991,114994,114997,114999],{"class":54,"line":19406},[52,114988,37300],{"class":308},[52,114990,1216],{"class":79},[52,114992,114993],{"class":62},"\"  ctrl:\"",[52,114995,114996],{"class":79},", np.round(data.ctrl.copy(), ",[52,114998,2313],{"class":308},[52,115000,33147],{"class":79},[52,115002,115003,115005,115007,115010,115013,115015],{"class":54,"line":19411},[52,115004,37300],{"class":308},[52,115006,1216],{"class":79},[52,115008,115009],{"class":62},"\"  obs_dim:\"",[52,115011,115012],{"class":79},", obs.shape[",[52,115014,692],{"class":308},[52,115016,7629],{"class":79},[52,115018,115019],{"class":54,"line":19417},[52,115020,123],{"emptyLinePlaceholder":122},[52,115022,115023,115025,115027,115029,115031,115033,115035,115037],{"class":54,"line":19431},[52,115024,33949],{"class":308},[52,115026,1216],{"class":79},[52,115028,113026],{"class":62},[52,115030,15083],{"class":79},[52,115032,34668],{"class":308},[52,115034,113033],{"class":79},[52,115036,2313],{"class":308},[52,115038,33147],{"class":79},[52,115040,115041,115043,115045,115048,115051,115053,115055,115057],{"class":54,"line":19444},[52,115042,33949],{"class":308},[52,115044,1216],{"class":79},[52,115046,115047],{"class":62},"\"final tip:\"",[52,115049,115050],{"class":79},", np.round(site_position(model, data, ",[52,115052,114186],{"class":62},[52,115054,112995],{"class":79},[52,115056,2313],{"class":308},[52,115058,33147],{"class":79},[52,115060,115061,115063,115065,115068,115070,115072,115074,115076],{"class":54,"line":19449},[52,115062,33949],{"class":308},[52,115064,1216],{"class":79},[52,115066,115067],{"class":62},"\"target:\"",[52,115069,115050],{"class":79},[52,115071,114609],{"class":62},[52,115073,112995],{"class":79},[52,115075,2313],{"class":308},[52,115077,33147],{"class":79},[52,115079,115080],{"class":54,"line":19463},[52,115081,123],{"emptyLinePlaceholder":122},[52,115083,115084],{"class":54,"line":19468},[52,115085,123],{"emptyLinePlaceholder":122},[52,115087,115088,115090,115092,115094,115096],{"class":54,"line":19474},[52,115089,4578],{"class":58},[52,115091,33870],{"class":308},[52,115093,104209],{"class":58},[52,115095,104212],{"class":62},[52,115097,6718],{"class":79},[52,115099,115100],{"class":54,"line":19479},[52,115101,104219],{"class":79},[14,115103,106220],{},[42,115105,115107],{"className":26471,"code":115106,"language":26473,"meta":47,"style":47},"touch ch7_reacher.py\n",[49,115108,115109],{"__ignoreMap":47},[52,115110,115111,115113],{"class":54,"line":55},[52,115112,103933],{"class":75},[52,115114,115115],{"class":62}," ch7_reacher.py\n",[14,115117,113094],{},[42,115119,115121],{"className":26471,"code":115120,"language":26473,"meta":47,"style":47},"python ch7_reacher.py\n",[49,115122,115123],{"__ignoreMap":47},[52,115124,115125,115127],{"class":54,"line":55},[52,115126,33030],{"class":75},[52,115128,115115],{"class":62},[3195,115130,104222],{"id":104222},[14,115132,115133],{},"读取 site 坐标：",[42,115135,115137],{"className":33028,"code":115136,"language":33030,"meta":47,"style":47},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[49,115138,115139],{"__ignoreMap":47},[52,115140,115141,115143,115145,115147,115149],{"class":54,"line":55},[52,115142,34597],{"class":58},[52,115144,114506],{"class":75},[52,115146,114509],{"class":79},[52,115148,4350],{"class":308},[52,115150,114514],{"class":79},[14,115152,115153],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,115155,113110],{},[42,115157,115159],{"className":33028,"code":115158,"language":33030,"meta":47,"style":47},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[49,115160,115161],{"__ignoreMap":47},[52,115162,115163,115165],{"class":54,"line":55},[52,115164,19694],{"class":58},[52,115166,114618],{"class":79},[14,115168,115169],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,115171,112435],{},[42,115173,115175],{"className":33028,"code":115174,"language":33030,"meta":47,"style":47},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[49,115176,115177,115189,115202],{"__ignoreMap":47},[52,115178,115179,115181,115183,115185,115187],{"class":54,"line":55},[52,115180,114246],{"class":79},[52,115182,292],{"class":58},[52,115184,114251],{"class":79},[52,115186,2642],{"class":58},[52,115188,114256],{"class":79},[52,115190,115191,115194,115196,115198,115200],{"class":54,"line":66},[52,115192,115193],{"class":79},"control_cost ",[52,115195,292],{"class":58},[52,115197,114687],{"class":308},[52,115199,872],{"class":58},[52,115201,114692],{"class":79},[52,115203,115204,115206,115208,115210,115212,115214,115216],{"class":54,"line":83},[52,115205,19694],{"class":58},[52,115207,112447],{"class":308},[52,115209,1216],{"class":79},[52,115211,2642],{"class":58},[52,115213,114246],{"class":79},[52,115215,2642],{"class":58},[52,115217,114709],{"class":79},[14,115219,115220],{},"奖励由两部分组成：",[1696,115222,115223,115228],{},[32,115224,115225,115227],{},[49,115226,114273],{},"：末端离目标越远，奖励越低。",[32,115229,115230,115233],{},[49,115231,115232],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,115235,115236],{},"简单控制器：",[42,115238,115240],{"className":33028,"code":115239,"language":33030,"meta":47,"style":47},"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",[49,115241,115242,115255,115287],{"__ignoreMap":47},[52,115243,115244,115247,115249,115251,115253],{"class":54,"line":55},[52,115245,115246],{"class":79},"error ",[52,115248,292],{"class":58},[52,115250,114818],{"class":79},[52,115252,2642],{"class":58},[52,115254,114823],{"class":79},[52,115256,115257,115259,115261,115263,115265,115267,115269,115271,115273,115275,115277,115279,115281,115283,115285],{"class":54,"line":66},[52,115258,108521],{"class":79},[52,115260,692],{"class":308},[52,115262,7415],{"class":79},[52,115264,292],{"class":58},[52,115266,114840],{"class":79},[52,115268,107910],{"class":308},[52,115270,872],{"class":58},[52,115272,114847],{"class":79},[52,115274,564],{"class":308},[52,115276,114852],{"class":79},[52,115278,2642],{"class":58},[52,115280,105053],{"class":308},[52,115282,15083],{"class":79},[52,115284,105053],{"class":308},[52,115286,708],{"class":79},[52,115288,115289,115291,115293,115295,115297,115299,115301,115303,115305,115307,115309,115311,115313,115315,115317],{"class":54,"line":83},[52,115290,108521],{"class":79},[52,115292,629],{"class":308},[52,115294,7415],{"class":79},[52,115296,292],{"class":58},[52,115298,114840],{"class":79},[52,115300,107910],{"class":308},[52,115302,872],{"class":58},[52,115304,114847],{"class":79},[52,115306,692],{"class":308},[52,115308,114852],{"class":79},[52,115310,2642],{"class":58},[52,115312,105053],{"class":308},[52,115314,15083],{"class":79},[52,115316,105053],{"class":308},[52,115318,708],{"class":79},[14,115320,115321],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[3195,115323,104358],{"id":104358},[42,115325,115326],{"className":33028,"code":115136,"language":33030,"meta":47,"style":47},[49,115327,115328],{"__ignoreMap":47},[52,115329,115330,115332,115334,115336,115338],{"class":54,"line":55},[52,115331,34597],{"class":58},[52,115333,114506],{"class":75},[52,115335,114509],{"class":79},[52,115337,4350],{"class":308},[52,115339,114514],{"class":79},[14,115341,115342,115343,115345,115346,85189,115348,31035],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[49,115344,82460],{}," 是 site 的名字，比如 ",[49,115347,114186],{},[49,115349,114609],{},[42,115351,115353],{"className":33028,"code":115352,"language":33030,"meta":47,"style":47},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[49,115354,115355],{"__ignoreMap":47},[52,115356,115357,115359,115361],{"class":54,"line":55},[52,115358,106284],{"class":79},[52,115360,292],{"class":58},[52,115362,114523],{"class":79},[14,115364,115365],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[42,115367,115369],{"className":33028,"code":115368,"language":33030,"meta":47,"style":47},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[49,115370,115371,115383],{"__ignoreMap":47},[52,115372,115373,115375,115377,115379,115381],{"class":54,"line":55},[52,115374,4578],{"class":58},[52,115376,106099],{"class":79},[52,115378,698],{"class":58},[52,115380,1444],{"class":308},[52,115382,6718],{"class":79},[52,115384,115385,115387,115389,115391,115393,115395,115397,115399,115401,115403],{"class":54,"line":66},[52,115386,106545],{"class":58},[52,115388,106085],{"class":308},[52,115390,1216],{"class":79},[52,115392,3273],{"class":58},[52,115394,114548],{"class":62},[52,115396,383],{"class":308},[52,115398,82460],{"class":79},[52,115400,4132],{"class":308},[52,115402,2844],{"class":62},[52,115404,708],{"class":79},[14,115406,115407,115408,115411,115412,115414],{},"如果 site 没找到，就主动报错。",[49,115409,115410],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[49,115413,82460],{}," 的值放进字符串里。",[42,115416,115418],{"className":33028,"code":115417,"language":33030,"meta":47,"style":47},"return data.site_xpos[site_id].copy()\n",[49,115419,115420],{"__ignoreMap":47},[52,115421,115422,115424],{"class":54,"line":55},[52,115423,19694],{"class":58},[52,115425,114565],{"class":79},[14,115427,115428,115429,115431,115432,115435],{},"返回这个 site 的世界坐标。",[49,115430,106330],{}," 里的每一行都是一个 site 的 ",[49,115433,115434],{},"(x, y, z)"," 坐标。",[42,115437,115439],{"className":33028,"code":115438,"language":33030,"meta":47,"style":47},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[49,115440,115441],{"__ignoreMap":47},[52,115442,115443,115445,115447],{"class":54,"line":55},[52,115444,34597],{"class":58},[52,115446,114580],{"class":75},[52,115448,114583],{"class":79},[14,115450,115451],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[42,115453,115455],{"className":33028,"code":115454,"language":33030,"meta":47,"style":47},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[49,115456,115457,115469],{"__ignoreMap":47},[52,115458,115459,115461,115463,115465,115467],{"class":54,"line":55},[52,115460,114218],{"class":79},[52,115462,292],{"class":58},[52,115464,114593],{"class":79},[52,115466,114186],{"class":62},[52,115468,708],{"class":79},[52,115470,115471,115473,115475,115477,115479],{"class":54,"line":66},[52,115472,114228],{"class":79},[52,115474,292],{"class":58},[52,115476,114593],{"class":79},[52,115478,114609],{"class":62},[52,115480,708],{"class":79},[14,115482,115483],{},"分别读取末端点和目标点的世界坐标。",[42,115485,115486],{"className":33028,"code":115158,"language":33030,"meta":47,"style":47},[49,115487,115488],{"__ignoreMap":47},[52,115489,115490,115492],{"class":54,"line":55},[52,115491,19694],{"class":58},[52,115493,114618],{"class":79},[14,115495,115496],{},"把四部分拼成一个观测数组：",[42,115498,115501],{"className":115499,"code":115500,"language":8154,"meta":47},[8152],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[49,115502,115500],{"__ignoreMap":47},[42,115504,115506],{"className":33028,"code":115505,"language":33030,"meta":47,"style":47},"dist = np.linalg.norm(tip - target)\n",[49,115507,115508],{"__ignoreMap":47},[52,115509,115510,115512,115514,115516,115518],{"class":54,"line":55},[52,115511,114246],{"class":79},[52,115513,292],{"class":58},[52,115515,114251],{"class":79},[52,115517,2642],{"class":58},[52,115519,114256],{"class":79},[14,115521,115522,115523,115526,115527,115530],{},"计算 tip 到 target 的距离。",[49,115524,115525],{},"tip - target"," 得到一个三维向量，",[49,115528,115529],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,115532,17281],{},[42,115534,115537],{"className":115535,"code":115536,"language":8154,"meta":47},[8152],"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",[49,115538,115536],{"__ignoreMap":47},[42,115540,115542],{"className":33028,"code":115541,"language":33030,"meta":47,"style":47},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[49,115543,115544],{"__ignoreMap":47},[52,115545,115546,115548,115550,115552,115554],{"class":54,"line":55},[52,115547,115193],{"class":79},[52,115549,292],{"class":58},[52,115551,114687],{"class":308},[52,115553,872],{"class":58},[52,115555,114692],{"class":79},[14,115557,115558,115559,115562,115563,115566],{},"计算动作惩罚。",[49,115560,115561],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[49,115564,115565],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[42,115568,115570],{"className":33028,"code":115569,"language":33030,"meta":47,"style":47},"return float(-dist - control_cost)\n",[49,115571,115572],{"__ignoreMap":47},[52,115573,115574,115576,115578,115580,115582,115584,115586],{"class":54,"line":55},[52,115575,19694],{"class":58},[52,115577,112447],{"class":308},[52,115579,1216],{"class":79},[52,115581,2642],{"class":58},[52,115583,114246],{"class":79},[52,115585,2642],{"class":58},[52,115587,114709],{"class":79},[14,115589,115590],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[42,115592,115593],{"className":33028,"code":113453,"language":33030,"meta":47,"style":47},[49,115594,115595],{"__ignoreMap":47},[52,115596,115597,115599,115601],{"class":54,"line":55},[52,115598,113460],{"class":79},[52,115600,292],{"class":58},[52,115602,107411],{"class":308},[14,115604,115605],{},"累计奖励变量，记录整个运行过程的总分。",[42,115607,115609],{"className":33028,"code":115608,"language":33030,"meta":47,"style":47},"for step in range(500):\n",[49,115610,115611],{"__ignoreMap":47},[52,115612,115613,115615,115617,115619,115621,115623,115625],{"class":54,"line":55},[52,115614,6014],{"class":58},[52,115616,34266],{"class":79},[52,115618,28693],{"class":58},[52,115620,35093],{"class":308},[52,115622,1216],{"class":79},[52,115624,67724],{"class":308},[52,115626,33436],{"class":79},[14,115628,115629],{},"运行 500 个控制步。",[42,115631,115632],{"className":33028,"code":107193,"language":33030,"meta":47,"style":47},[49,115633,115634],{"__ignoreMap":47},[52,115635,115636],{"class":54,"line":55},[52,115637,107193],{"class":79},[14,115639,115640,115641,103668,115643,115645],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[49,115642,105881],{},[49,115644,105884],{}," 是当前状态下的坐标。",[42,115647,115649],{"className":33028,"code":115648,"language":33030,"meta":47,"style":47},"error = target - tip\n",[49,115650,115651],{"__ignoreMap":47},[52,115652,115653,115655,115657,115659,115661],{"class":54,"line":55},[52,115654,115246],{"class":79},[52,115656,292],{"class":58},[52,115658,114818],{"class":79},[52,115660,2642],{"class":58},[52,115662,114823],{"class":79},[14,115664,115665],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[42,115667,115669],{"className":33028,"code":115668,"language":33030,"meta":47,"style":47},"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",[49,115670,115671,115703],{"__ignoreMap":47},[52,115672,115673,115675,115677,115679,115681,115683,115685,115687,115689,115691,115693,115695,115697,115699,115701],{"class":54,"line":55},[52,115674,108521],{"class":79},[52,115676,692],{"class":308},[52,115678,7415],{"class":79},[52,115680,292],{"class":58},[52,115682,114840],{"class":79},[52,115684,107910],{"class":308},[52,115686,872],{"class":58},[52,115688,114847],{"class":79},[52,115690,564],{"class":308},[52,115692,114852],{"class":79},[52,115694,2642],{"class":58},[52,115696,105053],{"class":308},[52,115698,15083],{"class":79},[52,115700,105053],{"class":308},[52,115702,708],{"class":79},[52,115704,115705,115707,115709,115711,115713,115715,115717,115719,115721,115723,115725,115727,115729,115731,115733],{"class":54,"line":66},[52,115706,108521],{"class":79},[52,115708,629],{"class":308},[52,115710,7415],{"class":79},[52,115712,292],{"class":58},[52,115714,114840],{"class":79},[52,115716,107910],{"class":308},[52,115718,872],{"class":58},[52,115720,114847],{"class":79},[52,115722,692],{"class":308},[52,115724,114852],{"class":79},[52,115726,2642],{"class":58},[52,115728,105053],{"class":308},[52,115730,15083],{"class":79},[52,115732,105053],{"class":308},[52,115734,708],{"class":79},[14,115736,115737,115738,115741],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[49,115739,115740],{},"error -> ctrl -> step"," 的流程。",[42,115743,115744],{"className":33028,"code":107155,"language":33030,"meta":47,"style":47},[49,115745,115746],{"__ignoreMap":47},[52,115747,115748],{"class":54,"line":55},[52,115749,107155],{"class":79},[14,115751,115752],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[42,115754,115756],{"className":33028,"code":115755,"language":33030,"meta":47,"style":47},"obs = get_obs(model, data)\n",[49,115757,115758],{"__ignoreMap":47},[52,115759,115760,115762,115764],{"class":54,"line":55},[52,115761,113504],{"class":79},[52,115763,292],{"class":58},[52,115765,114941],{"class":79},[14,115767,115768,115769,115772],{},"读取最新观测。后面打印 ",[49,115770,115771],{},"obs.shape[0]","，用来确认观测维度是 10。",[18,115774,104966],{"id":104965},[14,115776,115777],{},"观测维度为:",[42,115779,115782],{"className":115780,"code":115781,"language":8154,"meta":47},[8152],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[49,115783,115781],{"__ignoreMap":47},[14,115785,115786],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,115788,115789],{},"程序每 100 步打印：",[42,115791,115794],{"className":115792,"code":115793,"language":8154,"meta":47},[8152],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[49,115795,115793],{"__ignoreMap":47},[14,115797,115798,115799,115801],{},"如果控制有效，你应该看到最终 ",[49,115800,105881],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[18,115803,104998],{"id":104997},[1696,115805,115806,115809,115812,115818,115824,115831,115841],{},[32,115807,115808],{},"修改目标点位置。",[32,115810,115811],{},"重新运行，观察最终 tip 是否变化。",[32,115813,115814,115815,115817],{},"把 gravity 改成 ",[49,115816,105239],{},"，观察控制是否变差。",[32,115819,113831,115820,113835,115822,31035],{},[49,115821,104808],{},[49,115823,564],{},[32,115825,105061,115826,105064,115828,115830],{},[49,115827,113246],{},[49,115829,109957],{},"，观察机械臂是否更难移动。",[32,115832,105061,115833,85180,115835,105064,115837,115840],{},[49,115834,105884],{},[49,115836,106796],{},[49,115838,115839],{},"0.2 0 0.6","，观察 reward 和 final tip。",[32,115842,115843],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[18,115845,105103],{"id":105102},[3195,115847,115849],{"id":115848},"site-not-found",[49,115850,115851],{},"site not found",[14,115853,115854,115855,103668,115858,31035],{},"检查 XML 中是否有 ",[49,115856,115857],{},"site name=\"tip\"",[49,115859,115860],{},"site name=\"target\"",[3195,115862,115863],{"id":115863},"机械臂完全不动",[14,115865,105173],{},[1696,115867,115868,115873,115876,115881],{},[32,115869,115870,115872],{},[49,115871,104808],{}," 是否为 2",[32,115874,115875],{},"actuator 是否引用正确 joint",[32,115877,115878,115880],{},[49,115879,103726],{}," 是否被赋值",[32,115882,115883,115884],{},"是否执行了 ",[49,115885,103335],{},[3195,115887,115888],{"id":115888},"控制效果不好",[14,115890,115891],{},"正常。本章重点不是控制器最优，而是任务结构:",[42,115893,115896],{"className":115894,"code":115895,"language":8154,"meta":47},[8152],"obs → action → mj_step → reward → next_obs\n",[49,115897,115895],{"__ignoreMap":47},[3195,115899,115901],{"id":115900},"tip-坐标不变化","tip 坐标不变化",[14,115903,105225],{},[1696,115905,115906,115911,115919,115928],{},[32,115907,115908,115909,31035],{},"是否每步调用了 ",[49,115910,103335],{},[32,115912,115913,115914,103668,115916,31035],{},"是否写入了 ",[49,115915,108776],{},[49,115917,115918],{},"data.ctrl[1]",[32,115920,115921,115922,3426,115925,31035],{},"actuator 是否正确引用 ",[49,115923,115924],{},"joint1",[49,115926,115927],{},"joint2",[32,115929,115930],{},"控制输入是否太小。",[3195,115932,115933],{"id":115933},"目标点不会动",[14,115935,115936],{},"本章的 target 是固定 site：",[42,115938,115940],{"className":55717,"code":115939,"language":55719,"meta":47,"style":47},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[49,115941,115942],{"__ignoreMap":47},[52,115943,115944,115946,115948,115950,115952,115954,115956,115958,115961],{"class":54,"line":55},[52,115945,698],{"class":79},[52,115947,105860],{"class":53950},[52,115949,17568],{"class":75},[52,115951,292],{"class":79},[52,115953,114609],{"class":62},[52,115955,103756],{"class":75},[52,115957,292],{"class":79},[52,115959,115960],{"class":62},"\"0.5 0 0.4\"",[52,115962,115963],{"class":79}," ...\u002F>\n",[14,115965,115966,115967,115969],{},"它直接挂在 ",[49,115968,104491],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[3195,115971,115972],{"id":115972},"机械臂不像真实机械臂",[14,115974,115975],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[18,115977,105257],{"id":105256},[14,115979,115980],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,115982,115983],{},"核心公式：",[42,115985,115988],{"className":115986,"code":115987,"language":8154,"meta":47},[8152],"distance = ||tip - target||\nreward = -distance - action_cost\n",[49,115989,115987],{"__ignoreMap":47},[14,115991,115992],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[3141,115994,115995],{},"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":47,"searchDepth":66,"depth":66,"links":115997},[115998,115999,116000,116005,116009,116010,116011,116019],{"id":103296,"depth":66,"text":103297},{"id":103419,"depth":66,"text":103420},{"id":103694,"depth":66,"text":103695,"children":116001},[116002,116003,116004],{"id":114201,"depth":83,"text":114202},{"id":114277,"depth":83,"text":114277},{"id":114307,"depth":83,"text":114308},{"id":103902,"depth":66,"text":103903,"children":116006},[116007,116008],{"id":104222,"depth":83,"text":104222},{"id":104358,"depth":83,"text":104358},{"id":104965,"depth":66,"text":104966},{"id":104997,"depth":66,"text":104998},{"id":105102,"depth":66,"text":105103,"children":116012},[116013,116014,116015,116016,116017,116018],{"id":115848,"depth":83,"text":115851},{"id":115863,"depth":83,"text":115863},{"id":115888,"depth":83,"text":115888},{"id":115900,"depth":83,"text":115901},{"id":115933,"depth":83,"text":115933},{"id":115972,"depth":83,"text":115972},{"id":105256,"depth":66,"text":105257},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":114005,"description":47},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":116026,"title":116027,"body":116028,"description":47,"extension":3153,"meta":119490,"navigation":122,"path":119491,"seo":119492,"stem":119493,"__hash__":119494},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":116029,"toc":119461},[116030,116033,116035,116038,116041,116066,116069,116075,116078,116084,116086,116088,116112,116114,116132,116134,116177,116179,116206,116208,116211,116263,116266,116272,116281,116284,116322,116325,116364,116367,116375,116382,116385,116391,116393,116447,116454,116499,116502,116506,116522,116532,116534,117795,117797,117809,117811,117822,117824,117827,117848,117851,117854,117887,117893,117896,117929,117932,117935,117976,117981,117995,117998,118011,118016,118039,118041,118056,118066,118081,118088,118108,118123,118141,118144,118161,118169,118185,118191,118223,118236,118268,118278,118313,118327,118373,118387,118429,118440,118453,118459,118492,118495,118522,118532,118572,118582,118599,118606,118624,118627,118668,118681,118696,118699,118722,118725,118737,118740,118759,118764,118785,118788,118803,118806,118840,118852,118867,118870,118895,118898,118917,118920,118952,118955,118979,118985,119015,119022,119035,119038,119040,119042,119048,119051,119054,119066,119069,119071,119125,119127,119131,119137,119146,119149,119156,119158,119181,119184,119188,119190,119208,119214,119216,119249,119252,119258,119262,119265,119285,119290,119294,119301,119321,119326,119330,119333,119353,119356,119442,119446,119449,119455,119458],[10,116031,116027],{"id":116032},"_8gymnasium-风格强化学习接口基础",[18,116034,103297],{"id":103296},[14,116036,116037],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,116039,116040],{},"你将实现:",[42,116042,116044],{"className":33028,"code":116043,"language":33030,"meta":47,"style":47},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[49,116045,116046,116056],{"__ignoreMap":47},[52,116047,116048,116051,116053],{"class":54,"line":55},[52,116049,116050],{"class":79},"obs, info ",[52,116052,292],{"class":58},[52,116054,116055],{"class":79}," env.reset()\n",[52,116057,116058,116061,116063],{"class":54,"line":66},[52,116059,116060],{"class":79},"obs, reward, terminated, truncated, info ",[52,116062,292],{"class":58},[52,116064,116065],{"class":79}," env.step(action)\n",[14,116067,116068],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,116070,116071,116072,116074],{},"前面章节的代码都是“脚本式”的：在 ",[49,116073,104945],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,116076,116077],{},"可以先记住 Gymnasium 环境的核心交互：",[42,116079,116082],{"className":116080,"code":116081,"language":8154,"meta":47},[8152],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[49,116083,116081],{"__ignoreMap":47},[18,116085,103420],{"id":103419},[14,116087,103423],{},[42,116089,116090],{"className":26471,"code":107038,"language":26473,"meta":47,"style":47},[49,116091,116092],{"__ignoreMap":47},[52,116093,116094,116096,116098,116100,116102,116104,116106,116108,116110],{"class":54,"line":55},[52,116095,27226],{"class":75},[52,116097,28965],{"class":62},[52,116099,26483],{"class":62},[52,116101,29050],{"class":308},[52,116103,107053],{"class":62},[52,116105,103448],{"class":62},[52,116107,105151],{"class":62},[52,116109,103464],{"class":62},[52,116111,107062],{"class":62},[14,116113,105469],{},[42,116115,116117],{"className":26471,"code":116116,"language":26473,"meta":47,"style":47},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[49,116118,116119],{"__ignoreMap":47},[52,116120,116121,116123,116125,116127,116129],{"class":54,"line":55},[52,116122,26480],{"class":75},[52,116124,26483],{"class":62},[52,116126,103580],{"class":62},[52,116128,110361],{"class":62},[52,116130,116131],{"class":62}," gymnasium\n",[14,116133,105486],{},[42,116135,116137],{"className":26471,"code":116136,"language":26473,"meta":47,"style":47},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[49,116138,116139,116156,116165],{"__ignoreMap":47},[52,116140,116141,116143,116145,116147,116150,116152,116154],{"class":54,"line":55},[52,116142,32980],{"class":75},[52,116144,31826],{"class":62},[52,116146,27765],{"class":308},[52,116148,116149],{"class":62}," mujoco-gym-api",[52,116151,103625],{"class":62},[52,116153,103628],{"class":308},[52,116155,103631],{"class":308},[52,116157,116158,116160,116162],{"class":54,"line":66},[52,116159,32980],{"class":75},[52,116161,103638],{"class":62},[52,116163,116164],{"class":62}," mujoco-gym-api\n",[52,116166,116167,116169,116171,116173,116175],{"class":54,"line":83},[52,116168,26480],{"class":75},[52,116170,26483],{"class":62},[52,116172,103580],{"class":62},[52,116174,110361],{"class":62},[52,116176,116131],{"class":62},[14,116178,103654],{},[1696,116180,116181,116191,116194,116200],{},[32,116182,116183,116184,116187,116188,31035],{},"本章使用 ",[49,116185,116186],{},"gymnasium","，不是旧版 ",[49,116189,116190],{},"gym",[32,116192,116193],{},"Gymnasium API 与旧 Gym API 有差异。",[32,116195,116196,116197,31035],{},"旧 Gym 常见返回值是 4 个: ",[49,116198,116199],{},"obs, reward, done, info",[32,116201,116202,116203,31035],{},"Gymnasium 返回值是 5 个: ",[49,116204,116205],{},"obs, reward, terminated, truncated, info",[18,116207,103695],{"id":103694},[14,116209,116210],{},"强化学习环境接口包含:",[3353,116212,116213,116222],{},[3356,116214,116215],{},[3359,116216,116217,116220],{},[3362,116218,116219],{"align":26385},"方法",[3362,116221,105346],{"align":26385},[3399,116223,116224,116234,116244,116254],{},[3359,116225,116226,116231],{},[3404,116227,116228],{"align":26385},[49,116229,116230],{},"reset()",[3404,116232,116233],{"align":26385},"重置环境",[3359,116235,116236,116241],{},[3404,116237,116238],{"align":26385},[49,116239,116240],{},"step(action)",[3404,116242,116243],{"align":26385},"执行动作",[3359,116245,116246,116251],{},[3404,116247,116248],{"align":26385},[49,116249,116250],{},"observation_space",[3404,116252,116253],{"align":26385},"观测空间",[3359,116255,116256,116261],{},[3404,116257,116258],{"align":26385},[49,116259,116260],{},"action_space",[3404,116262,26303],{"align":26385},[14,116264,116265],{},"一个最小环境需要完成:",[42,116267,116270],{"className":116268,"code":116269,"language":8154,"meta":47},[8152],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[49,116271,116269],{"__ignoreMap":47},[3195,116273,116275,103668,116278,107288],{"id":116274},"terminated-和-truncated-的区别",[49,116276,116277],{},"terminated",[49,116279,116280],{},"truncated",[14,116282,116283],{},"Gymnasium 把“结束”拆成两个概念：",[3353,116285,116286,116296],{},[3356,116287,116288],{},[3359,116289,116290,116292,116294],{},[3362,116291,107224],{"align":26385},[3362,116293,103350],{"align":26385},[3362,116295,23835],{"align":26385},[3399,116297,116298,116310],{},[3359,116299,116300,116304,116307],{},[3404,116301,116302],{"align":26385},[49,116303,116277],{},[3404,116305,116306],{"align":26385},"任务自然结束",[3404,116308,116309],{"align":26385},"机械臂到达目标、机器人摔倒",[3359,116311,116312,116316,116319],{},[3404,116313,116314],{"align":26385},[49,116315,116280],{},[3404,116317,116318],{"align":26385},"因外部限制截断",[3404,116320,116321],{"align":26385},"达到最大步数、时间限制",[14,116323,116324],{},"本章中：",[42,116326,116328],{"className":33028,"code":116327,"language":33030,"meta":47,"style":47},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[49,116329,116330,116345],{"__ignoreMap":47},[52,116331,116332,116335,116337,116340,116342],{"class":54,"line":55},[52,116333,116334],{"class":79},"terminated ",[52,116336,292],{"class":58},[52,116338,116339],{"class":79}," dist ",[52,116341,698],{"class":58},[52,116343,116344],{"class":308}," 0.05\n",[52,116346,116347,116350,116352,116354,116357,116359,116361],{"class":54,"line":66},[52,116348,116349],{"class":79},"truncated ",[52,116351,292],{"class":58},[52,116353,41523],{"class":308},[52,116355,116356],{"class":79},".steps ",[52,116358,4742],{"class":58},[52,116360,41523],{"class":308},[52,116362,116363],{"class":79},".max_steps\n",[14,116365,116366],{},"也就是：",[1696,116368,116369,116372],{},[32,116370,116371],{},"末端距离目标小于 0.05，任务成功结束。",[32,116373,116374],{},"步数超过上限，episode 被截断。",[3195,116376,116378,103668,116380],{"id":116377},"observation_space-和-action_space",[49,116379,116250],{},[49,116381,116260],{},[14,116383,116384],{},"这两个对象告诉算法：",[42,116386,116389],{"className":116387,"code":116388,"language":8154,"meta":47},[8152],"观测长什么样\n动作允许多大\n",[49,116390,116388],{"__ignoreMap":47},[14,116392,17281],{},[42,116394,116396],{"className":33028,"code":116395,"language":33030,"meta":47,"style":47},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[49,116397,116398],{"__ignoreMap":47},[52,116399,116400,116402,116405,116407,116410,116413,116416,116418,116420,116423,116425,116427,116429,116431,116433,116435,116437,116440,116442,116444],{"class":54,"line":55},[52,116401,33473],{"class":308},[52,116403,116404],{"class":79},".action_space ",[52,116406,292],{"class":58},[52,116408,116409],{"class":79}," spaces.Box(",[52,116411,116412],{"class":1223},"low",[52,116414,116415],{"class":58},"=-",[52,116417,105053],{"class":308},[52,116419,15083],{"class":79},[52,116421,116422],{"class":1223},"high",[52,116424,292],{"class":58},[52,116426,105053],{"class":308},[52,116428,15083],{"class":79},[52,116430,98613],{"class":1223},[52,116432,292],{"class":58},[52,116434,1216],{"class":79},[52,116436,564],{"class":308},[52,116438,116439],{"class":79},",), ",[52,116441,96150],{"class":1223},[52,116443,292],{"class":58},[52,116445,116446],{"class":79},"np.float32)\n",[14,116448,116449,116450,116453],{},"表示动作是 2 维数组，每个值都在 ",[49,116451,116452],{},"[-1, 1]"," 范围内。",[42,116455,116457],{"className":33028,"code":116456,"language":33030,"meta":47,"style":47},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[49,116458,116459],{"__ignoreMap":47},[52,116460,116461,116463,116466,116468,116470,116472,116474,116477,116479,116481,116483,116485,116487,116489,116491,116493,116495,116497],{"class":54,"line":55},[52,116462,33473],{"class":308},[52,116464,116465],{"class":79},".observation_space ",[52,116467,292],{"class":58},[52,116469,116409],{"class":79},[52,116471,116412],{"class":1223},[52,116473,116415],{"class":58},[52,116475,116476],{"class":79},"np.inf, ",[52,116478,116422],{"class":1223},[52,116480,292],{"class":58},[52,116482,116476],{"class":79},[52,116484,98613],{"class":1223},[52,116486,292],{"class":58},[52,116488,1216],{"class":79},[52,116490,3649],{"class":308},[52,116492,116439],{"class":79},[52,116494,96150],{"class":1223},[52,116496,292],{"class":58},[52,116498,116446],{"class":79},[14,116500,116501],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[3195,116503,116505],{"id":116504},"frame_skip-是什么","frame_skip 是什么",[42,116507,116509],{"className":33028,"code":116508,"language":33030,"meta":47,"style":47},"self.frame_skip = 5\n",[49,116510,116511],{"__ignoreMap":47},[52,116512,116513,116515,116518,116520],{"class":54,"line":55},[52,116514,33473],{"class":308},[52,116516,116517],{"class":79},".frame_skip ",[52,116519,292],{"class":58},[52,116521,57077],{"class":308},[14,116523,116524,116525,116528,116529,116531],{},"表示外部调用一次 ",[49,116526,116527],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[49,116530,103865],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[18,116533,103903],{"id":103902},[42,116535,116537],{"className":33028,"code":116536,"language":33030,"meta":47,"style":47},"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",[49,116538,116539,116551,116557,116567,116578,116582,116586,116594,116599,116603,116607,116611,116615,116619,116623,116627,116632,116636,116640,116644,116649,116653,116657,116661,116665,116669,116673,116677,116681,116685,116689,116693,116697,116701,116719,116734,116738,116751,116761,116776,116793,116797,116818,116837,116862,116876,116880,116890,116902,116912,116916,116958,116996,117000,117010,117026,117041,117060,117067,117071,117084,117099,117114,117127,117146,117162,117166,117207,117222,117237,117241,117280,117291,117304,117308,117318,117327,117331,117341,117356,117374,117378,117389,117406,117419,117423,117433,117437,117448,117459,117463,117477,117491,117507,117511,117524,117541,117556,117563,117567,117571,117583,117593,117611,117623,117635,117639,117647,117663,117672,117681,117689,117731,117744,117749,117753,117771,117775,117779,117791],{"__ignoreMap":47},[52,116540,116541,116543,116546,116548],{"class":54,"line":55},[52,116542,33042],{"class":58},[52,116544,116545],{"class":79}," gymnasium ",[52,116547,34033],{"class":58},[52,116549,116550],{"class":79}," gym\n",[52,116552,116553,116555],{"class":54,"line":66},[52,116554,33042],{"class":58},[52,116556,103951],{"class":79},[52,116558,116559,116561,116563,116565],{"class":54,"line":83},[52,116560,33042],{"class":58},[52,116562,34030],{"class":79},[52,116564,34033],{"class":58},[52,116566,34036],{"class":79},[52,116568,116569,116571,116573,116575],{"class":54,"line":91},[52,116570,33387],{"class":58},[52,116572,116545],{"class":79},[52,116574,33042],{"class":58},[52,116576,116577],{"class":79}," spaces\n",[52,116579,116580],{"class":54,"line":98},[52,116581,123],{"emptyLinePlaceholder":122},[52,116583,116584],{"class":54,"line":107},[52,116585,123],{"emptyLinePlaceholder":122},[52,116587,116588,116590,116592],{"class":54,"line":113},[52,116589,103964],{"class":308},[52,116591,16212],{"class":58},[52,116593,103969],{"class":62},[52,116595,116596],{"class":54,"line":119},[52,116597,116598],{"class":62},"\u003Cmujoco model=\"gym_reacher\">\n",[52,116600,116601],{"class":54,"line":126},[52,116602,114388],{"class":62},[52,116604,116605],{"class":54,"line":132},[52,116606,123],{"emptyLinePlaceholder":122},[52,116608,116609],{"class":54,"line":138},[52,116610,103988],{"class":62},[52,116612,116613],{"class":54,"line":144},[52,116614,114406],{"class":62},[52,116616,116617],{"class":54,"line":153},[52,116618,123],{"emptyLinePlaceholder":122},[52,116620,116621],{"class":54,"line":159},[52,116622,114415],{"class":62},[52,116624,116625],{"class":54,"line":167},[52,116626,114420],{"class":62},[52,116628,116629],{"class":54,"line":173},[52,116630,116631],{"class":62},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[52,116633,116634],{"class":54,"line":181},[52,116635,123],{"emptyLinePlaceholder":122},[52,116637,116638],{"class":54,"line":186},[52,116639,114434],{"class":62},[52,116641,116642],{"class":54,"line":191},[52,116643,114439],{"class":62},[52,116645,116646],{"class":54,"line":196},[52,116647,116648],{"class":62},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[52,116650,116651],{"class":54,"line":201},[52,116652,114449],{"class":62},[52,116654,116655],{"class":54,"line":206},[52,116656,109088],{"class":62},[52,116658,116659],{"class":54,"line":211},[52,116660,104017],{"class":62},[52,116662,116663],{"class":54,"line":218},[52,116664,104022],{"class":62},[52,116666,116667],{"class":54,"line":223},[52,116668,123],{"emptyLinePlaceholder":122},[52,116670,116671],{"class":54,"line":230},[52,116672,109105],{"class":62},[52,116674,116675],{"class":54,"line":239},[52,116676,114474],{"class":62},[52,116678,116679],{"class":54,"line":251},[52,116680,114479],{"class":62},[52,116682,116683],{"class":54,"line":256},[52,116684,109115],{"class":62},[52,116686,116687],{"class":54,"line":262},[52,116688,104027],{"class":62},[52,116690,116691],{"class":54,"line":268},[52,116692,98348],{"class":62},[52,116694,116695],{"class":54,"line":280},[52,116696,123],{"emptyLinePlaceholder":122},[52,116698,116699],{"class":54,"line":286},[52,116700,123],{"emptyLinePlaceholder":122},[52,116702,116703,116705,116708,116710,116712,116714,116717],{"class":54,"line":300},[52,116704,17342],{"class":58},[52,116706,116707],{"class":75}," ReacherEnv",[52,116709,1216],{"class":79},[52,116711,116190],{"class":75},[52,116713,3757],{"class":79},[52,116715,116716],{"class":75},"Env",[52,116718,33436],{"class":79},[52,116720,116721,116724,116726,116728,116731],{"class":54,"line":314},[52,116722,116723],{"class":79},"    metadata ",[52,116725,292],{"class":58},[52,116727,7420],{"class":79},[52,116729,116730],{"class":62},"\"render_modes\"",[52,116732,116733],{"class":79},": []}\n",[52,116735,116736],{"class":54,"line":327},[52,116737,123],{"emptyLinePlaceholder":122},[52,116739,116740,116742,116744,116747,116749],{"class":54,"line":333},[52,116741,33451],{"class":58},[52,116743,33454],{"class":308},[52,116745,116746],{"class":79},"(self) -> ",[52,116748,98336],{"class":308},[52,116750,6718],{"class":79},[52,116752,116753,116755,116757,116759],{"class":54,"line":360},[52,116754,33467],{"class":308},[52,116756,19909],{"class":79},[52,116758,33479],{"class":308},[52,116760,248],{"class":79},[52,116762,116763,116765,116768,116770,116772,116774],{"class":54,"line":365},[52,116764,33495],{"class":308},[52,116766,116767],{"class":79},".model ",[52,116769,292],{"class":58},[52,116771,104062],{"class":79},[52,116773,103964],{"class":308},[52,116775,708],{"class":79},[52,116777,116778,116780,116783,116785,116788,116790],{"class":54,"line":371},[52,116779,33495],{"class":308},[52,116781,116782],{"class":79},".data ",[52,116784,292],{"class":58},[52,116786,116787],{"class":79}," mujoco.MjData(",[52,116789,33473],{"class":308},[52,116791,116792],{"class":79},".model)\n",[52,116794,116795],{"class":54,"line":400},[52,116796,123],{"emptyLinePlaceholder":122},[52,116798,116799,116801,116804,116806,116809,116811,116814,116816],{"class":54,"line":405},[52,116800,33495],{"class":308},[52,116802,116803],{"class":79},".tip_site_id ",[52,116805,292],{"class":58},[52,116807,116808],{"class":79}," mujoco.mj_name2id(",[52,116810,33473],{"class":308},[52,116812,116813],{"class":79},".model, mujoco.mjtObj.mjOBJ_SITE, ",[52,116815,114186],{"class":62},[52,116817,708],{"class":79},[52,116819,116820,116822,116825,116827,116829,116831,116833,116835],{"class":54,"line":411},[52,116821,33495],{"class":308},[52,116823,116824],{"class":79},".target_site_id ",[52,116826,292],{"class":58},[52,116828,116808],{"class":79},[52,116830,33473],{"class":308},[52,116832,116813],{"class":79},[52,116834,114609],{"class":62},[52,116836,708],{"class":79},[52,116838,116839,116841,116843,116845,116847,116849,116852,116854,116856,116858,116860],{"class":54,"line":424},[52,116840,5497],{"class":58},[52,116842,41523],{"class":308},[52,116844,116803],{"class":79},[52,116846,698],{"class":58},[52,116848,1444],{"class":308},[52,116850,116851],{"class":58}," or",[52,116853,41523],{"class":308},[52,116855,116824],{"class":79},[52,116857,698],{"class":58},[52,116859,1444],{"class":308},[52,116861,6718],{"class":79},[52,116863,116864,116867,116869,116871,116874],{"class":54,"line":436},[52,116865,116866],{"class":58},"            raise",[52,116868,106085],{"class":308},[52,116870,1216],{"class":79},[52,116872,116873],{"class":62},"\"required sites not found\"",[52,116875,708],{"class":79},[52,116877,116878],{"class":54,"line":449},[52,116879,123],{"emptyLinePlaceholder":122},[52,116881,116882,116884,116886,116888],{"class":54,"line":2160},[52,116883,33495],{"class":308},[52,116885,116517],{"class":79},[52,116887,292],{"class":58},[52,116889,57077],{"class":308},[52,116891,116892,116894,116897,116899],{"class":54,"line":2186},[52,116893,33495],{"class":308},[52,116895,116896],{"class":79},".max_steps ",[52,116898,292],{"class":58},[52,116900,116901],{"class":308}," 200\n",[52,116903,116904,116906,116908,116910],{"class":54,"line":2209},[52,116905,33495],{"class":308},[52,116907,116356],{"class":79},[52,116909,292],{"class":58},[52,116911,49983],{"class":308},[52,116913,116914],{"class":54,"line":2233},[52,116915,123],{"emptyLinePlaceholder":122},[52,116917,116918,116920,116922,116924,116926,116928,116930,116932,116934,116936,116938,116940,116942,116944,116946,116948,116950,116952,116954,116956],{"class":54,"line":2238},[52,116919,33495],{"class":308},[52,116921,116404],{"class":79},[52,116923,292],{"class":58},[52,116925,116409],{"class":79},[52,116927,116412],{"class":1223},[52,116929,116415],{"class":58},[52,116931,105053],{"class":308},[52,116933,15083],{"class":79},[52,116935,116422],{"class":1223},[52,116937,292],{"class":58},[52,116939,105053],{"class":308},[52,116941,15083],{"class":79},[52,116943,98613],{"class":1223},[52,116945,292],{"class":58},[52,116947,1216],{"class":79},[52,116949,564],{"class":308},[52,116951,116439],{"class":79},[52,116953,96150],{"class":1223},[52,116955,292],{"class":58},[52,116957,116446],{"class":79},[52,116959,116960,116962,116964,116966,116968,116970,116972,116974,116976,116978,116980,116982,116984,116986,116988,116990,116992,116994],{"class":54,"line":2243},[52,116961,33495],{"class":308},[52,116963,116465],{"class":79},[52,116965,292],{"class":58},[52,116967,116409],{"class":79},[52,116969,116412],{"class":1223},[52,116971,116415],{"class":58},[52,116973,116476],{"class":79},[52,116975,116422],{"class":1223},[52,116977,292],{"class":58},[52,116979,116476],{"class":79},[52,116981,98613],{"class":1223},[52,116983,292],{"class":58},[52,116985,1216],{"class":79},[52,116987,3649],{"class":308},[52,116989,116439],{"class":79},[52,116991,96150],{"class":1223},[52,116993,292],{"class":58},[52,116995,116446],{"class":79},[52,116997,116998],{"class":54,"line":2248},[52,116999,123],{"emptyLinePlaceholder":122},[52,117001,117002,117004,117007],{"class":54,"line":2257},[52,117003,33451],{"class":58},[52,117005,117006],{"class":75}," _get_obs",[52,117008,117009],{"class":79},"(self) -> np.ndarray:\n",[52,117011,117012,117014,117016,117018,117021,117023],{"class":54,"line":2262},[52,117013,114787],{"class":79},[52,117015,292],{"class":58},[52,117017,41523],{"class":308},[52,117019,117020],{"class":79},".data.site_xpos[",[52,117022,33473],{"class":308},[52,117024,117025],{"class":79},".tip_site_id].copy()\n",[52,117027,117028,117030,117032,117034,117036,117038],{"class":54,"line":2268},[52,117029,114800],{"class":79},[52,117031,292],{"class":58},[52,117033,41523],{"class":308},[52,117035,117020],{"class":79},[52,117037,33473],{"class":308},[52,117039,117040],{"class":79},".target_site_id].copy()\n",[52,117042,117043,117045,117047,117050,117052,117055,117057],{"class":54,"line":2297},[52,117044,112832],{"class":79},[52,117046,292],{"class":58},[52,117048,117049],{"class":79}," np.concatenate([",[52,117051,33473],{"class":308},[52,117053,117054],{"class":79},".data.qpos.copy(), ",[52,117056,33473],{"class":308},[52,117058,117059],{"class":79},".data.qvel.copy(), tip, target])\n",[52,117061,117062,117064],{"class":54,"line":2303},[52,117063,17400],{"class":58},[52,117065,117066],{"class":79}," obs.astype(np.float32)\n",[52,117068,117069],{"class":54,"line":2318},[52,117070,123],{"emptyLinePlaceholder":122},[52,117072,117073,117075,117078,117080,117082],{"class":54,"line":2324},[52,117074,33451],{"class":58},[52,117076,117077],{"class":75}," _get_reward",[52,117079,116746],{"class":79},[52,117081,3262],{"class":308},[52,117083,6718],{"class":79},[52,117085,117086,117088,117090,117092,117094,117096],{"class":54,"line":2353},[52,117087,114787],{"class":79},[52,117089,292],{"class":58},[52,117091,41523],{"class":308},[52,117093,117020],{"class":79},[52,117095,33473],{"class":308},[52,117097,117098],{"class":79},".tip_site_id]\n",[52,117100,117101,117103,117105,117107,117109,117111],{"class":54,"line":2362},[52,117102,114800],{"class":79},[52,117104,292],{"class":58},[52,117106,41523],{"class":308},[52,117108,117020],{"class":79},[52,117110,33473],{"class":308},[52,117112,117113],{"class":79},".target_site_id]\n",[52,117115,117116,117119,117121,117123,117125],{"class":54,"line":2368},[52,117117,117118],{"class":79},"        dist ",[52,117120,292],{"class":58},[52,117122,114251],{"class":79},[52,117124,2642],{"class":58},[52,117126,114256],{"class":79},[52,117128,117129,117132,117134,117136,117138,117141,117143],{"class":54,"line":2376},[52,117130,117131],{"class":79},"        control_cost ",[52,117133,292],{"class":58},[52,117135,114687],{"class":308},[52,117137,872],{"class":58},[52,117139,117140],{"class":79}," np.sum(np.square(",[52,117142,33473],{"class":308},[52,117144,117145],{"class":79},".data.ctrl))\n",[52,117147,117148,117150,117152,117154,117156,117158,117160],{"class":54,"line":2381},[52,117149,17400],{"class":58},[52,117151,112447],{"class":308},[52,117153,1216],{"class":79},[52,117155,2642],{"class":58},[52,117157,114246],{"class":79},[52,117159,2642],{"class":58},[52,117161,114709],{"class":79},[52,117163,117164],{"class":54,"line":19252},[52,117165,123],{"emptyLinePlaceholder":122},[52,117167,117168,117170,117173,117176,117178,117181,117183,117185,117187,117189,117191,117194,117197,117199,117201,117203,117205],{"class":54,"line":19258},[52,117169,33451],{"class":58},[52,117171,117172],{"class":75}," reset",[52,117174,117175],{"class":79},"(self, ",[52,117177,3053],{"class":58},[52,117179,117180],{"class":79},", seed: ",[52,117182,242],{"class":308},[52,117184,27759],{"class":58},[52,117186,41583],{"class":308},[52,117188,16212],{"class":58},[52,117190,41583],{"class":308},[52,117192,117193],{"class":79},", options: ",[52,117195,117196],{"class":308},"dict",[52,117198,27759],{"class":58},[52,117200,41583],{"class":308},[52,117202,16212],{"class":58},[52,117204,41583],{"class":308},[52,117206,33436],{"class":79},[52,117208,117209,117211,117214,117217,117219],{"class":54,"line":19281},[52,117210,33467],{"class":308},[52,117212,117213],{"class":79},"().reset(",[52,117215,117216],{"class":1223},"seed",[52,117218,292],{"class":58},[52,117220,117221],{"class":79},"seed)\n",[52,117223,117224,117227,117229,117232,117234],{"class":54,"line":19287},[52,117225,117226],{"class":79},"        mujoco.mj_resetData(",[52,117228,33473],{"class":308},[52,117230,117231],{"class":79},".model, ",[52,117233,33473],{"class":308},[52,117235,117236],{"class":79},".data)\n",[52,117238,117239],{"class":54,"line":19310},[52,117240,123],{"emptyLinePlaceholder":122},[52,117242,117243,117245,117248,117250,117252,117255,117257,117259,117261,117263,117265,117267,117269,117271,117273,117275,117277],{"class":54,"line":19324},[52,117244,33495],{"class":308},[52,117246,117247],{"class":79},".data.qpos[:] ",[52,117249,292],{"class":58},[52,117251,41523],{"class":308},[52,117253,117254],{"class":79},".np_random.uniform(",[52,117256,116412],{"class":1223},[52,117258,116415],{"class":58},[52,117260,88860],{"class":308},[52,117262,15083],{"class":79},[52,117264,116422],{"class":1223},[52,117266,292],{"class":58},[52,117268,88860],{"class":308},[52,117270,15083],{"class":79},[52,117272,34146],{"class":1223},[52,117274,292],{"class":58},[52,117276,33473],{"class":308},[52,117278,117279],{"class":79},".model.nq)\n",[52,117281,117282,117284,117287,117289],{"class":54,"line":19344},[52,117283,33495],{"class":308},[52,117285,117286],{"class":79},".data.qvel[:] ",[52,117288,292],{"class":58},[52,117290,107411],{"class":308},[52,117292,117293,117296,117298,117300,117302],{"class":54,"line":19350},[52,117294,117295],{"class":79},"        mujoco.mj_forward(",[52,117297,33473],{"class":308},[52,117299,117231],{"class":79},[52,117301,33473],{"class":308},[52,117303,117236],{"class":79},[52,117305,117306],{"class":54,"line":19361},[52,117307,123],{"emptyLinePlaceholder":122},[52,117309,117310,117312,117314,117316],{"class":54,"line":19384},[52,117311,33495],{"class":308},[52,117313,116356],{"class":79},[52,117315,292],{"class":58},[52,117317,49983],{"class":308},[52,117319,117320,117322,117324],{"class":54,"line":19406},[52,117321,17400],{"class":58},[52,117323,41523],{"class":308},[52,117325,117326],{"class":79},"._get_obs(), {}\n",[52,117328,117329],{"class":54,"line":19411},[52,117330,123],{"emptyLinePlaceholder":122},[52,117332,117333,117335,117338],{"class":54,"line":19417},[52,117334,33451],{"class":58},[52,117336,117337],{"class":75}," step",[52,117339,117340],{"class":79},"(self, action):\n",[52,117342,117343,117345,117347,117350,117352,117354],{"class":54,"line":19431},[52,117344,112872],{"class":79},[52,117346,292],{"class":58},[52,117348,117349],{"class":79}," np.asarray(action, ",[52,117351,96150],{"class":1223},[52,117353,292],{"class":58},[52,117355,116446],{"class":79},[52,117357,117358,117360,117362,117364,117366,117369,117371],{"class":54,"line":19444},[52,117359,112872],{"class":79},[52,117361,292],{"class":58},[52,117363,110097],{"class":79},[52,117365,33473],{"class":308},[52,117367,117368],{"class":79},".action_space.low, ",[52,117370,33473],{"class":308},[52,117372,117373],{"class":79},".action_space.high)\n",[52,117375,117376],{"class":54,"line":19449},[52,117377,123],{"emptyLinePlaceholder":122},[52,117379,117380,117382,117385,117387],{"class":54,"line":19463},[52,117381,33495],{"class":308},[52,117383,117384],{"class":79},".data.ctrl[:] ",[52,117386,292],{"class":58},[52,117388,110120],{"class":79},[52,117390,117391,117393,117395,117397,117399,117401,117403],{"class":54,"line":19468},[52,117392,1927],{"class":58},[52,117394,104151],{"class":79},[52,117396,28693],{"class":58},[52,117398,35093],{"class":308},[52,117400,1216],{"class":79},[52,117402,33473],{"class":308},[52,117404,117405],{"class":79},".frame_skip):\n",[52,117407,117408,117411,117413,117415,117417],{"class":54,"line":19474},[52,117409,117410],{"class":79},"            mujoco.mj_step(",[52,117412,33473],{"class":308},[52,117414,117231],{"class":79},[52,117416,33473],{"class":308},[52,117418,117236],{"class":79},[52,117420,117421],{"class":54,"line":19479},[52,117422,123],{"emptyLinePlaceholder":122},[52,117424,117425,117427,117429,117431],{"class":54,"line":19493},[52,117426,33495],{"class":308},[52,117428,116356],{"class":79},[52,117430,1910],{"class":58},[52,117432,58349],{"class":308},[52,117434,117435],{"class":54,"line":19498},[52,117436,123],{"emptyLinePlaceholder":122},[52,117438,117439,117441,117443,117445],{"class":54,"line":19503},[52,117440,112832],{"class":79},[52,117442,292],{"class":58},[52,117444,41523],{"class":308},[52,117446,117447],{"class":79},"._get_obs()\n",[52,117449,117450,117452,117454,117456],{"class":54,"line":19517},[52,117451,112937],{"class":79},[52,117453,292],{"class":58},[52,117455,41523],{"class":308},[52,117457,117458],{"class":79},"._get_reward()\n",[52,117460,117461],{"class":54,"line":19529},[52,117462,123],{"emptyLinePlaceholder":122},[52,117464,117465,117467,117469,117471,117473,117475],{"class":54,"line":19534},[52,117466,114787],{"class":79},[52,117468,292],{"class":58},[52,117470,41523],{"class":308},[52,117472,117020],{"class":79},[52,117474,33473],{"class":308},[52,117476,117098],{"class":79},[52,117478,117479,117481,117483,117485,117487,117489],{"class":54,"line":19547},[52,117480,114800],{"class":79},[52,117482,292],{"class":58},[52,117484,41523],{"class":308},[52,117486,117020],{"class":79},[52,117488,33473],{"class":308},[52,117490,117113],{"class":79},[52,117492,117493,117495,117497,117499,117502,117504],{"class":54,"line":19552},[52,117494,117118],{"class":79},[52,117496,292],{"class":58},[52,117498,112447],{"class":308},[52,117500,117501],{"class":79},"(np.linalg.norm(tip ",[52,117503,2642],{"class":58},[52,117505,117506],{"class":79}," target))\n",[52,117508,117509],{"class":54,"line":19557},[52,117510,123],{"emptyLinePlaceholder":122},[52,117512,117513,117516,117518,117520,117522],{"class":54,"line":19562},[52,117514,117515],{"class":79},"        terminated ",[52,117517,292],{"class":58},[52,117519,116339],{"class":79},[52,117521,698],{"class":58},[52,117523,116344],{"class":308},[52,117525,117526,117529,117531,117533,117535,117537,117539],{"class":54,"line":19575},[52,117527,117528],{"class":79},"        truncated ",[52,117530,292],{"class":58},[52,117532,41523],{"class":308},[52,117534,116356],{"class":79},[52,117536,4742],{"class":58},[52,117538,41523],{"class":308},[52,117540,116363],{"class":79},[52,117542,117543,117546,117548,117550,117553],{"class":54,"line":19580},[52,117544,117545],{"class":79},"        info ",[52,117547,292],{"class":58},[52,117549,7420],{"class":79},[52,117551,117552],{"class":62},"\"distance\"",[52,117554,117555],{"class":79},": dist}\n",[52,117557,117558,117560],{"class":54,"line":35283},[52,117559,17400],{"class":58},[52,117561,117562],{"class":79}," obs, reward, terminated, truncated, info\n",[52,117564,117565],{"class":54,"line":35289},[52,117566,123],{"emptyLinePlaceholder":122},[52,117568,117569],{"class":54,"line":35295},[52,117570,123],{"emptyLinePlaceholder":122},[52,117572,117573,117575,117577,117579,117581],{"class":54,"line":35301},[52,117574,34597],{"class":58},[52,117576,245],{"class":75},[52,117578,104048],{"class":79},[52,117580,98336],{"class":308},[52,117582,6718],{"class":79},[52,117584,117585,117588,117590],{"class":54,"line":35307},[52,117586,117587],{"class":79},"    env ",[52,117589,292],{"class":58},[52,117591,117592],{"class":79}," ReacherEnv()\n",[52,117594,117595,117598,117600,117603,117605,117607,117609],{"class":54,"line":35318},[52,117596,117597],{"class":79},"    obs, info ",[52,117599,292],{"class":58},[52,117601,117602],{"class":79}," env.reset(",[52,117604,117216],{"class":1223},[52,117606,292],{"class":58},[52,117608,692],{"class":308},[52,117610,708],{"class":79},[52,117612,117613,117615,117617,117620],{"class":54,"line":35324},[52,117614,33949],{"class":308},[52,117616,1216],{"class":79},[52,117618,117619],{"class":62},"\"initial obs shape:\"",[52,117621,117622],{"class":79},", obs.shape)\n",[52,117624,117625,117627,117629,117632],{"class":54,"line":35344},[52,117626,33949],{"class":308},[52,117628,1216],{"class":79},[52,117630,117631],{"class":62},"\"initial info:\"",[52,117633,117634],{"class":79},", info)\n",[52,117636,117637],{"class":54,"line":35350},[52,117638,123],{"emptyLinePlaceholder":122},[52,117640,117641,117643,117645],{"class":54,"line":35361},[52,117642,112803],{"class":79},[52,117644,292],{"class":58},[52,117646,107411],{"class":308},[52,117648,117649,117651,117653,117655,117657,117659,117661],{"class":54,"line":35367},[52,117650,679],{"class":58},[52,117652,34266],{"class":79},[52,117654,28693],{"class":58},[52,117656,35093],{"class":308},[52,117658,1216],{"class":79},[52,117660,444],{"class":308},[52,117662,33436],{"class":79},[52,117664,117665,117667,117669],{"class":54,"line":35373},[52,117666,112872],{"class":79},[52,117668,292],{"class":58},[52,117670,117671],{"class":79}," env.action_space.sample()\n",[52,117673,117674,117677,117679],{"class":54,"line":35379},[52,117675,117676],{"class":79},"        obs, reward, terminated, truncated, info ",[52,117678,292],{"class":58},[52,117680,116065],{"class":79},[52,117682,117683,117685,117687],{"class":54,"line":35385},[52,117684,112947],{"class":79},[52,117686,1910],{"class":58},[52,117688,112952],{"class":79},[52,117690,117691,117693,117695,117697,117699,117702,117704,117706,117709,117711,117713,117716,117718,117720,117723,117725,117727,117729],{"class":54,"line":35391},[52,117692,35101],{"class":308},[52,117694,1216],{"class":79},[52,117696,112981],{"class":62},[52,117698,112984],{"class":79},[52,117700,117701],{"class":62},"\"reward:\"",[52,117703,15083],{"class":79},[52,117705,34668],{"class":308},[52,117707,117708],{"class":79},"(reward, ",[52,117710,2313],{"class":308},[52,117712,112995],{"class":79},[52,117714,117715],{"class":62},"\"distance:\"",[52,117717,15083],{"class":79},[52,117719,34668],{"class":308},[52,117721,117722],{"class":79},"(info[",[52,117724,117552],{"class":62},[52,117726,114852],{"class":79},[52,117728,2313],{"class":308},[52,117730,33147],{"class":79},[52,117732,117733,117735,117738,117741],{"class":54,"line":35397},[52,117734,5497],{"class":58},[52,117736,117737],{"class":79}," terminated ",[52,117739,117740],{"class":58},"or",[52,117742,117743],{"class":79}," truncated:\n",[52,117745,117746],{"class":54,"line":35403},[52,117747,117748],{"class":58},"            break\n",[52,117750,117751],{"class":54,"line":35423},[52,117752,123],{"emptyLinePlaceholder":122},[52,117754,117755,117757,117759,117761,117763,117765,117767,117769],{"class":54,"line":35429},[52,117756,33949],{"class":308},[52,117758,1216],{"class":79},[52,117760,113026],{"class":62},[52,117762,15083],{"class":79},[52,117764,34668],{"class":308},[52,117766,113033],{"class":79},[52,117768,2313],{"class":308},[52,117770,33147],{"class":79},[52,117772,117773],{"class":54,"line":35445},[52,117774,123],{"emptyLinePlaceholder":122},[52,117776,117777],{"class":54,"line":35451},[52,117778,123],{"emptyLinePlaceholder":122},[52,117780,117781,117783,117785,117787,117789],{"class":54,"line":35465},[52,117782,4578],{"class":58},[52,117784,33870],{"class":308},[52,117786,104209],{"class":58},[52,117788,104212],{"class":62},[52,117790,6718],{"class":79},[52,117792,117793],{"class":54,"line":35471},[52,117794,104219],{"class":79},[14,117796,106220],{},[42,117798,117800],{"className":26471,"code":117799,"language":26473,"meta":47,"style":47},"touch ch8_gym_env.py\n",[49,117801,117802],{"__ignoreMap":47},[52,117803,117804,117806],{"class":54,"line":55},[52,117805,103933],{"class":75},[52,117807,117808],{"class":62}," ch8_gym_env.py\n",[14,117810,113094],{},[42,117812,117814],{"className":26471,"code":117813,"language":26473,"meta":47,"style":47},"python ch8_gym_env.py\n",[49,117815,117816],{"__ignoreMap":47},[52,117817,117818,117820],{"class":54,"line":55},[52,117819,33030],{"class":75},[52,117821,117808],{"class":62},[3195,117823,104222],{"id":104222},[14,117825,117826],{},"继承 Gymnasium 环境：",[42,117828,117830],{"className":33028,"code":117829,"language":33030,"meta":47,"style":47},"class ReacherEnv(gym.Env):\n",[49,117831,117832],{"__ignoreMap":47},[52,117833,117834,117836,117838,117840,117842,117844,117846],{"class":54,"line":55},[52,117835,17342],{"class":58},[52,117837,116707],{"class":75},[52,117839,1216],{"class":79},[52,117841,116190],{"class":75},[52,117843,3757],{"class":79},[52,117845,116716],{"class":75},[52,117847,33436],{"class":79},[14,117849,117850],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,117852,117853],{},"初始化模型：",[42,117855,117857],{"className":33028,"code":117856,"language":33030,"meta":47,"style":47},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[49,117858,117859,117873],{"__ignoreMap":47},[52,117860,117861,117863,117865,117867,117869,117871],{"class":54,"line":55},[52,117862,33473],{"class":308},[52,117864,116767],{"class":79},[52,117866,292],{"class":58},[52,117868,104062],{"class":79},[52,117870,103964],{"class":308},[52,117872,708],{"class":79},[52,117874,117875,117877,117879,117881,117883,117885],{"class":54,"line":66},[52,117876,33473],{"class":308},[52,117878,116782],{"class":79},[52,117880,292],{"class":58},[52,117882,116787],{"class":79},[52,117884,33473],{"class":308},[52,117886,116792],{"class":79},[14,117888,117889,117890,117892],{},"这和前面章节一样，只是现在放到了类的 ",[49,117891,33479],{}," 里。",[14,117894,117895],{},"缓存 site ID：",[42,117897,117899],{"className":33028,"code":117898,"language":33030,"meta":47,"style":47},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[49,117900,117901,117915],{"__ignoreMap":47},[52,117902,117903,117905,117907,117909,117911,117913],{"class":54,"line":55},[52,117904,33473],{"class":308},[52,117906,116803],{"class":79},[52,117908,292],{"class":58},[52,117910,116808],{"class":79},[52,117912,92204],{"class":308},[52,117914,708],{"class":79},[52,117916,117917,117919,117921,117923,117925,117927],{"class":54,"line":66},[52,117918,33473],{"class":308},[52,117920,116824],{"class":79},[52,117922,292],{"class":58},[52,117924,116808],{"class":79},[52,117926,92204],{"class":308},[52,117928,708],{"class":79},[14,117930,117931],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,117933,117934],{},"reset：",[42,117936,117938],{"className":33028,"code":117937,"language":33030,"meta":47,"style":47},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[49,117939,117940],{"__ignoreMap":47},[52,117941,117942,117944,117946,117948,117950,117952,117954,117956,117958,117960,117962,117964,117966,117968,117970,117972,117974],{"class":54,"line":55},[52,117943,34597],{"class":58},[52,117945,117172],{"class":75},[52,117947,117175],{"class":79},[52,117949,3053],{"class":58},[52,117951,117180],{"class":79},[52,117953,242],{"class":308},[52,117955,27759],{"class":58},[52,117957,41583],{"class":308},[52,117959,16212],{"class":58},[52,117961,41583],{"class":308},[52,117963,117193],{"class":79},[52,117965,117196],{"class":308},[52,117967,27759],{"class":58},[52,117969,41583],{"class":308},[52,117971,16212],{"class":58},[52,117973,41583],{"class":308},[52,117975,33436],{"class":79},[14,117977,117978,117980],{},[49,117979,72706],{}," 做四件事：",[1696,117982,117983,117986,117989,117992],{},[32,117984,117985],{},"设置随机种子。",[32,117987,117988],{},"重置 MuJoCo data。",[32,117990,117991],{},"随机初始化关节角。",[32,117993,117994],{},"返回初始观测和 info。",[14,117996,117997],{},"step：",[42,117999,118001],{"className":33028,"code":118000,"language":33030,"meta":47,"style":47},"def step(self, action):\n",[49,118002,118003],{"__ignoreMap":47},[52,118004,118005,118007,118009],{"class":54,"line":55},[52,118006,34597],{"class":58},[52,118008,117337],{"class":75},[52,118010,117340],{"class":79},[14,118012,118013,118015],{},[49,118014,109784],{}," 做六件事：",[1696,118017,118018,118021,118027,118030,118033,118036],{},[32,118019,118020],{},"检查并裁剪 action。",[32,118022,118023,118024,31035],{},"写入 ",[49,118025,118026],{},"self.data.ctrl",[32,118028,118029],{},"连续推进若干个 MuJoCo 物理步。",[32,118031,118032],{},"计算新观测。",[32,118034,118035],{},"计算奖励和结束条件。",[32,118037,118038],{},"返回 Gymnasium 标准五元组。",[3195,118040,104358],{"id":104358},[42,118042,118044],{"className":33028,"code":118043,"language":33030,"meta":47,"style":47},"import gymnasium as gym\n",[49,118045,118046],{"__ignoreMap":47},[52,118047,118048,118050,118052,118054],{"class":54,"line":55},[52,118049,33042],{"class":58},[52,118051,116545],{"class":79},[52,118053,34033],{"class":58},[52,118055,116550],{"class":79},[14,118057,118058,118059,118061,118062,118065],{},"导入 Gymnasium，并起别名 ",[49,118060,116190],{},"。后面写 ",[49,118063,118064],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[42,118067,118069],{"className":33028,"code":118068,"language":33030,"meta":47,"style":47},"from gymnasium import spaces\n",[49,118070,118071],{"__ignoreMap":47},[52,118072,118073,118075,118077,118079],{"class":54,"line":55},[52,118074,33387],{"class":58},[52,118076,116545],{"class":79},[52,118078,33042],{"class":58},[52,118080,116577],{"class":79},[14,118082,118083,118084,118087],{},"导入空间定义工具。",[49,118085,118086],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[42,118089,118090],{"className":33028,"code":117829,"language":33030,"meta":47,"style":47},[49,118091,118092],{"__ignoreMap":47},[52,118093,118094,118096,118098,118100,118102,118104,118106],{"class":54,"line":55},[52,118095,17342],{"class":58},[52,118097,116707],{"class":75},[52,118099,1216],{"class":79},[52,118101,116190],{"class":75},[52,118103,3757],{"class":79},[52,118105,116716],{"class":75},[52,118107,33436],{"class":79},[14,118109,118110,118111,118114,118115,118117,118118,103668,118120,118122],{},"定义一个类，名字叫 ",[49,118112,118113],{},"ReacherEnv","。括号里的 ",[49,118116,118064],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[49,118119,72706],{},[49,118121,109784],{}," 这两个核心方法。",[42,118124,118126],{"className":33028,"code":118125,"language":33030,"meta":47,"style":47},"metadata = {\"render_modes\": []}\n",[49,118127,118128],{"__ignoreMap":47},[52,118129,118130,118133,118135,118137,118139],{"class":54,"line":55},[52,118131,118132],{"class":79},"metadata ",[52,118134,292],{"class":58},[52,118136,7420],{"class":79},[52,118138,116730],{"class":62},[52,118140,116733],{"class":79},[14,118142,118143],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[42,118145,118147],{"className":33028,"code":118146,"language":33030,"meta":47,"style":47},"def __init__(self) -> None:\n",[49,118148,118149],{"__ignoreMap":47},[52,118150,118151,118153,118155,118157,118159],{"class":54,"line":55},[52,118152,34597],{"class":58},[52,118154,33454],{"class":308},[52,118156,116746],{"class":79},[52,118158,98336],{"class":308},[52,118160,6718],{"class":79},[14,118162,118163,118165,118166,31035],{},[49,118164,33479],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[49,118167,118168],{},"env = ReacherEnv()",[42,118170,118172],{"className":33028,"code":118171,"language":33030,"meta":47,"style":47},"super().__init__()\n",[49,118173,118174],{"__ignoreMap":47},[52,118175,118176,118179,118181,118183],{"class":54,"line":55},[52,118177,118178],{"class":308},"super",[52,118180,19909],{"class":79},[52,118182,33479],{"class":308},[52,118184,248],{"class":79},[14,118186,118187,118188,118190],{},"调用父类 ",[49,118189,118064],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[42,118192,118193],{"className":33028,"code":117856,"language":33030,"meta":47,"style":47},[49,118194,118195,118209],{"__ignoreMap":47},[52,118196,118197,118199,118201,118203,118205,118207],{"class":54,"line":55},[52,118198,33473],{"class":308},[52,118200,116767],{"class":79},[52,118202,292],{"class":58},[52,118204,104062],{"class":79},[52,118206,103964],{"class":308},[52,118208,708],{"class":79},[52,118210,118211,118213,118215,118217,118219,118221],{"class":54,"line":66},[52,118212,33473],{"class":308},[52,118214,116782],{"class":79},[52,118216,292],{"class":58},[52,118218,116787],{"class":79},[52,118220,33473],{"class":308},[52,118222,116792],{"class":79},[14,118224,118225,118226,118228,118229,103668,118232,118235],{},"把 MuJoCo 模型和状态保存到 ",[49,118227,33473],{}," 上。",[49,118230,118231],{},"self.model",[49,118233,118234],{},"self.data"," 表示这个环境对象自己的模型和状态。",[42,118237,118238],{"className":33028,"code":117898,"language":33030,"meta":47,"style":47},[49,118239,118240,118254],{"__ignoreMap":47},[52,118241,118242,118244,118246,118248,118250,118252],{"class":54,"line":55},[52,118243,33473],{"class":308},[52,118245,116803],{"class":79},[52,118247,292],{"class":58},[52,118249,116808],{"class":79},[52,118251,92204],{"class":308},[52,118253,708],{"class":79},[52,118255,118256,118258,118260,118262,118264,118266],{"class":54,"line":66},[52,118257,33473],{"class":308},[52,118259,116824],{"class":79},[52,118261,292],{"class":58},[52,118263,116808],{"class":79},[52,118265,92204],{"class":308},[52,118267,708],{"class":79},[14,118269,118270,118271,103668,118274,118277],{},"提前查好 tip 和 target 的 site ID。这样 ",[49,118272,118273],{},"_get_obs",[49,118275,118276],{},"_get_reward"," 里就不用每次按名字查找。",[42,118279,118281],{"className":33028,"code":118280,"language":33030,"meta":47,"style":47},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[49,118282,118283,118293,118303],{"__ignoreMap":47},[52,118284,118285,118287,118289,118291],{"class":54,"line":55},[52,118286,33473],{"class":308},[52,118288,116517],{"class":79},[52,118290,292],{"class":58},[52,118292,57077],{"class":308},[52,118294,118295,118297,118299,118301],{"class":54,"line":66},[52,118296,33473],{"class":308},[52,118298,116896],{"class":79},[52,118300,292],{"class":58},[52,118302,116901],{"class":308},[52,118304,118305,118307,118309,118311],{"class":54,"line":83},[52,118306,33473],{"class":308},[52,118308,116356],{"class":79},[52,118310,292],{"class":58},[52,118312,49983],{"class":308},[14,118314,118315,118318,118319,118322,118323,118326],{},[49,118316,118317],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[49,118320,118321],{},"max_steps"," 是一个 episode 最多运行多少步。",[49,118324,118325],{},"steps"," 记录当前 episode 已经走了多少步。",[42,118328,118329],{"className":33028,"code":116395,"language":33030,"meta":47,"style":47},[49,118330,118331],{"__ignoreMap":47},[52,118332,118333,118335,118337,118339,118341,118343,118345,118347,118349,118351,118353,118355,118357,118359,118361,118363,118365,118367,118369,118371],{"class":54,"line":55},[52,118334,33473],{"class":308},[52,118336,116404],{"class":79},[52,118338,292],{"class":58},[52,118340,116409],{"class":79},[52,118342,116412],{"class":1223},[52,118344,116415],{"class":58},[52,118346,105053],{"class":308},[52,118348,15083],{"class":79},[52,118350,116422],{"class":1223},[52,118352,292],{"class":58},[52,118354,105053],{"class":308},[52,118356,15083],{"class":79},[52,118358,98613],{"class":1223},[52,118360,292],{"class":58},[52,118362,1216],{"class":79},[52,118364,564],{"class":308},[52,118366,116439],{"class":79},[52,118368,96150],{"class":1223},[52,118370,292],{"class":58},[52,118372,116446],{"class":79},[14,118374,118375,118376,118379,118380,103668,118383,118386],{},"定义动作空间。",[49,118377,118378],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[49,118381,118382],{},"low=-1.0",[49,118384,118385],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[42,118388,118389],{"className":33028,"code":116456,"language":33030,"meta":47,"style":47},[49,118390,118391],{"__ignoreMap":47},[52,118392,118393,118395,118397,118399,118401,118403,118405,118407,118409,118411,118413,118415,118417,118419,118421,118423,118425,118427],{"class":54,"line":55},[52,118394,33473],{"class":308},[52,118396,116465],{"class":79},[52,118398,292],{"class":58},[52,118400,116409],{"class":79},[52,118402,116412],{"class":1223},[52,118404,116415],{"class":58},[52,118406,116476],{"class":79},[52,118408,116422],{"class":1223},[52,118410,292],{"class":58},[52,118412,116476],{"class":79},[52,118414,98613],{"class":1223},[52,118416,292],{"class":58},[52,118418,1216],{"class":79},[52,118420,3649],{"class":308},[52,118422,116439],{"class":79},[52,118424,96150],{"class":1223},[52,118426,292],{"class":58},[52,118428,116446],{"class":79},[14,118430,118431,118432,118435,118436,118439],{},"定义观测空间。",[49,118433,118434],{},"shape=(10,)"," 表示观测是 10 个数。",[49,118437,118438],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[42,118441,118443],{"className":33028,"code":118442,"language":33030,"meta":47,"style":47},"def _get_obs(self) -> np.ndarray:\n",[49,118444,118445],{"__ignoreMap":47},[52,118446,118447,118449,118451],{"class":54,"line":55},[52,118448,34597],{"class":58},[52,118450,117006],{"class":75},[52,118452,117009],{"class":79},[14,118454,118455,118456,118458],{},"定义内部函数，用来生成观测。函数名前面的 ",[49,118457,4177],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[42,118460,118462],{"className":33028,"code":118461,"language":33030,"meta":47,"style":47},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[49,118463,118464,118478],{"__ignoreMap":47},[52,118465,118466,118468,118470,118472,118474,118476],{"class":54,"line":55},[52,118467,114218],{"class":79},[52,118469,292],{"class":58},[52,118471,41523],{"class":308},[52,118473,117020],{"class":79},[52,118475,33473],{"class":308},[52,118477,117025],{"class":79},[52,118479,118480,118482,118484,118486,118488,118490],{"class":54,"line":66},[52,118481,114228],{"class":79},[52,118483,292],{"class":58},[52,118485,41523],{"class":308},[52,118487,117020],{"class":79},[52,118489,33473],{"class":308},[52,118491,117040],{"class":79},[14,118493,118494],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[42,118496,118498],{"className":33028,"code":118497,"language":33030,"meta":47,"style":47},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[49,118499,118500,118516],{"__ignoreMap":47},[52,118501,118502,118504,118506,118508,118510,118512,118514],{"class":54,"line":55},[52,118503,113504],{"class":79},[52,118505,292],{"class":58},[52,118507,117049],{"class":79},[52,118509,33473],{"class":308},[52,118511,117054],{"class":79},[52,118513,33473],{"class":308},[52,118515,117059],{"class":79},[52,118517,118518,118520],{"class":54,"line":66},[52,118519,19694],{"class":58},[52,118521,117066],{"class":79},[14,118523,118524,118525,118528,118529,118531],{},"拼接观测，并转换成 ",[49,118526,118527],{},"float32","。很多强化学习库默认使用 ",[49,118530,118527],{},"，所以这里主动转换。",[42,118533,118534],{"className":33028,"code":117937,"language":33030,"meta":47,"style":47},[49,118535,118536],{"__ignoreMap":47},[52,118537,118538,118540,118542,118544,118546,118548,118550,118552,118554,118556,118558,118560,118562,118564,118566,118568,118570],{"class":54,"line":55},[52,118539,34597],{"class":58},[52,118541,117172],{"class":75},[52,118543,117175],{"class":79},[52,118545,3053],{"class":58},[52,118547,117180],{"class":79},[52,118549,242],{"class":308},[52,118551,27759],{"class":58},[52,118553,41583],{"class":308},[52,118555,16212],{"class":58},[52,118557,41583],{"class":308},[52,118559,117193],{"class":79},[52,118561,117196],{"class":308},[52,118563,27759],{"class":58},[52,118565,41583],{"class":308},[52,118567,16212],{"class":58},[52,118569,41583],{"class":308},[52,118571,33436],{"class":79},[14,118573,118574,118575,118577,118578,118581],{},"定义 reset。",[49,118576,117216],{}," 用来控制随机数，保证实验可以复现。",[49,118579,118580],{},"options"," 用来接收额外配置，本章暂时不用。",[42,118583,118585],{"className":33028,"code":118584,"language":33030,"meta":47,"style":47},"super().reset(seed=seed)\n",[49,118586,118587],{"__ignoreMap":47},[52,118588,118589,118591,118593,118595,118597],{"class":54,"line":55},[52,118590,118178],{"class":308},[52,118592,117213],{"class":79},[52,118594,117216],{"class":1223},[52,118596,292],{"class":58},[52,118598,117221],{"class":79},[14,118600,118601,118602,118605],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[49,118603,118604],{},"self.np_random"," 生成可复现的随机数。",[42,118607,118609],{"className":33028,"code":118608,"language":33030,"meta":47,"style":47},"mujoco.mj_resetData(self.model, self.data)\n",[49,118610,118611],{"__ignoreMap":47},[52,118612,118613,118616,118618,118620,118622],{"class":54,"line":55},[52,118614,118615],{"class":79},"mujoco.mj_resetData(",[52,118617,33473],{"class":308},[52,118619,117231],{"class":79},[52,118621,33473],{"class":308},[52,118623,117236],{"class":79},[14,118625,118626],{},"把 MuJoCo 状态重置到默认状态。",[42,118628,118630],{"className":33028,"code":118629,"language":33030,"meta":47,"style":47},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[49,118631,118632],{"__ignoreMap":47},[52,118633,118634,118636,118638,118640,118642,118644,118646,118648,118650,118652,118654,118656,118658,118660,118662,118664,118666],{"class":54,"line":55},[52,118635,33473],{"class":308},[52,118637,117247],{"class":79},[52,118639,292],{"class":58},[52,118641,41523],{"class":308},[52,118643,117254],{"class":79},[52,118645,116412],{"class":1223},[52,118647,116415],{"class":58},[52,118649,88860],{"class":308},[52,118651,15083],{"class":79},[52,118653,116422],{"class":1223},[52,118655,292],{"class":58},[52,118657,88860],{"class":308},[52,118659,15083],{"class":79},[52,118661,34146],{"class":1223},[52,118663,292],{"class":58},[52,118665,33473],{"class":308},[52,118667,117279],{"class":79},[14,118669,117991,118670,118673,118674,118677,118678,118680],{},[49,118671,118672],{},"[:]"," 表示修改整个数组。",[49,118675,118676],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[49,118679,104800],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[42,118682,118684],{"className":33028,"code":118683,"language":33030,"meta":47,"style":47},"self.data.qvel[:] = 0.0\n",[49,118685,118686],{"__ignoreMap":47},[52,118687,118688,118690,118692,118694],{"class":54,"line":55},[52,118689,33473],{"class":308},[52,118691,117286],{"class":79},[52,118693,292],{"class":58},[52,118695,107411],{"class":308},[14,118697,118698],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[42,118700,118702],{"className":33028,"code":118701,"language":33030,"meta":47,"style":47},"self.steps = 0\nreturn self._get_obs(), {}\n",[49,118703,118704,118714],{"__ignoreMap":47},[52,118705,118706,118708,118710,118712],{"class":54,"line":55},[52,118707,33473],{"class":308},[52,118709,116356],{"class":79},[52,118711,292],{"class":58},[52,118713,49983],{"class":308},[52,118715,118716,118718,118720],{"class":54,"line":66},[52,118717,19694],{"class":58},[52,118719,41523],{"class":308},[52,118721,117326],{"class":79},[14,118723,118724],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[42,118726,118727],{"className":33028,"code":118000,"language":33030,"meta":47,"style":47},[49,118728,118729],{"__ignoreMap":47},[52,118730,118731,118733,118735],{"class":54,"line":55},[52,118732,34597],{"class":58},[52,118734,117337],{"class":75},[52,118736,117340],{"class":79},[14,118738,118739],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[42,118741,118743],{"className":33028,"code":118742,"language":33030,"meta":47,"style":47},"action = np.asarray(action, dtype=np.float32)\n",[49,118744,118745],{"__ignoreMap":47},[52,118746,118747,118749,118751,118753,118755,118757],{"class":54,"line":55},[52,118748,110092],{"class":79},[52,118750,292],{"class":58},[52,118752,117349],{"class":79},[52,118754,96150],{"class":1223},[52,118756,292],{"class":58},[52,118758,116446],{"class":79},[14,118760,118761,118762,31035],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[49,118763,118527],{},[42,118765,118767],{"className":33028,"code":118766,"language":33030,"meta":47,"style":47},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[49,118768,118769],{"__ignoreMap":47},[52,118770,118771,118773,118775,118777,118779,118781,118783],{"class":54,"line":55},[52,118772,110092],{"class":79},[52,118774,292],{"class":58},[52,118776,110097],{"class":79},[52,118778,33473],{"class":308},[52,118780,117368],{"class":79},[52,118782,33473],{"class":308},[52,118784,117373],{"class":79},[14,118786,118787],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[42,118789,118791],{"className":33028,"code":118790,"language":33030,"meta":47,"style":47},"self.data.ctrl[:] = action\n",[49,118792,118793],{"__ignoreMap":47},[52,118794,118795,118797,118799,118801],{"class":54,"line":55},[52,118796,33473],{"class":308},[52,118798,117384],{"class":79},[52,118800,292],{"class":58},[52,118802,110120],{"class":79},[14,118804,118805],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[42,118807,118809],{"className":33028,"code":118808,"language":33030,"meta":47,"style":47},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[49,118810,118811,118827],{"__ignoreMap":47},[52,118812,118813,118815,118817,118819,118821,118823,118825],{"class":54,"line":55},[52,118814,6014],{"class":58},[52,118816,104151],{"class":79},[52,118818,28693],{"class":58},[52,118820,35093],{"class":308},[52,118822,1216],{"class":79},[52,118824,33473],{"class":308},[52,118826,117405],{"class":79},[52,118828,118829,118832,118834,118836,118838],{"class":54,"line":66},[52,118830,118831],{"class":79},"    mujoco.mj_step(",[52,118833,33473],{"class":308},[52,118835,117231],{"class":79},[52,118837,33473],{"class":308},[52,118839,117236],{"class":79},[14,118841,118842,118843,118846,118847,118849,118850,31035],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[49,118844,118845],{},"frame_skip=5","，所以外部调用一次 ",[49,118848,116527],{},"，内部实际执行 5 次 ",[49,118851,103865],{},[42,118853,118855],{"className":33028,"code":118854,"language":33030,"meta":47,"style":47},"self.steps += 1\n",[49,118856,118857],{"__ignoreMap":47},[52,118858,118859,118861,118863,118865],{"class":54,"line":55},[52,118860,33473],{"class":308},[52,118862,116356],{"class":79},[52,118864,1910],{"class":58},[52,118866,58349],{"class":308},[14,118868,118869],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[42,118871,118873],{"className":33028,"code":118872,"language":33030,"meta":47,"style":47},"obs = self._get_obs()\nreward = self._get_reward()\n",[49,118874,118875,118885],{"__ignoreMap":47},[52,118876,118877,118879,118881,118883],{"class":54,"line":55},[52,118878,113504],{"class":79},[52,118880,292],{"class":58},[52,118882,41523],{"class":308},[52,118884,117447],{"class":79},[52,118886,118887,118889,118891,118893],{"class":54,"line":66},[52,118888,113655],{"class":79},[52,118890,292],{"class":58},[52,118892,41523],{"class":308},[52,118894,117458],{"class":79},[14,118896,118897],{},"计算新的观测和奖励。",[42,118899,118901],{"className":33028,"code":118900,"language":33030,"meta":47,"style":47},"dist = float(np.linalg.norm(tip - target))\n",[49,118902,118903],{"__ignoreMap":47},[52,118904,118905,118907,118909,118911,118913,118915],{"class":54,"line":55},[52,118906,114246],{"class":79},[52,118908,292],{"class":58},[52,118910,112447],{"class":308},[52,118912,117501],{"class":79},[52,118914,2642],{"class":58},[52,118916,117506],{"class":79},[14,118918,118919],{},"计算末端到目标的距离，并转换成 Python float。",[42,118921,118922],{"className":33028,"code":116327,"language":33030,"meta":47,"style":47},[49,118923,118924,118936],{"__ignoreMap":47},[52,118925,118926,118928,118930,118932,118934],{"class":54,"line":55},[52,118927,116334],{"class":79},[52,118929,292],{"class":58},[52,118931,116339],{"class":79},[52,118933,698],{"class":58},[52,118935,116344],{"class":308},[52,118937,118938,118940,118942,118944,118946,118948,118950],{"class":54,"line":66},[52,118939,116349],{"class":79},[52,118941,292],{"class":58},[52,118943,41523],{"class":308},[52,118945,116356],{"class":79},[52,118947,4742],{"class":58},[52,118949,41523],{"class":308},[52,118951,116363],{"class":79},[14,118953,118954],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[42,118956,118958],{"className":33028,"code":118957,"language":33030,"meta":47,"style":47},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[49,118959,118960,118973],{"__ignoreMap":47},[52,118961,118962,118965,118967,118969,118971],{"class":54,"line":55},[52,118963,118964],{"class":79},"info ",[52,118966,292],{"class":58},[52,118968,7420],{"class":79},[52,118970,117552],{"class":62},[52,118972,117555],{"class":79},[52,118974,118975,118977],{"class":54,"line":66},[52,118976,19694],{"class":58},[52,118978,117562],{"class":79},[14,118980,118981,118984],{},[49,118982,118983],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[42,118986,118988],{"className":33028,"code":118987,"language":33030,"meta":47,"style":47},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[49,118989,118990,118999],{"__ignoreMap":47},[52,118991,118992,118995,118997],{"class":54,"line":55},[52,118993,118994],{"class":79},"env ",[52,118996,292],{"class":58},[52,118998,117592],{"class":79},[52,119000,119001,119003,119005,119007,119009,119011,119013],{"class":54,"line":66},[52,119002,116050],{"class":79},[52,119004,292],{"class":58},[52,119006,117602],{"class":79},[52,119008,117216],{"class":1223},[52,119010,292],{"class":58},[52,119012,692],{"class":308},[52,119014,708],{"class":79},[14,119016,119017,119018,119021],{},"创建环境并重置。",[49,119019,119020],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[42,119023,119025],{"className":33028,"code":119024,"language":33030,"meta":47,"style":47},"action = env.action_space.sample()\n",[49,119026,119027],{"__ignoreMap":47},[52,119028,119029,119031,119033],{"class":54,"line":55},[52,119030,110092],{"class":79},[52,119032,292],{"class":58},[52,119034,117671],{"class":79},[14,119036,119037],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[18,119039,104966],{"id":104965},[14,119041,108134],{},[42,119043,119046],{"className":119044,"code":119045,"language":8154,"meta":47},[8152],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[49,119047,119045],{"__ignoreMap":47},[14,119049,119050],{},"这个环境已经具备强化学习环境的基本结构。",[14,119052,119053],{},"主函数里使用随机动作：",[42,119055,119056],{"className":33028,"code":119024,"language":33030,"meta":47,"style":47},[49,119057,119058],{"__ignoreMap":47},[52,119059,119060,119062,119064],{"class":54,"line":55},[52,119061,110092],{"class":79},[52,119063,292],{"class":58},[52,119065,117671],{"class":79},[14,119067,119068],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[18,119070,104998],{"id":104997},[1696,119072,119073,119076,119082,119091,119100,119109,119115],{},[32,119074,119075],{},"运行程序。",[32,119077,119078,119079,31035],{},"确认 ",[49,119080,119081],{},"obs.shape == (10,)",[32,119083,113831,119084,119087,119088,31035],{},[49,119085,119086],{},"env.action_space","，应类似 ",[49,119089,119090],{},"Box(-1.0, 1.0, (2,), float32)",[32,119092,108235,119093,119096,119097,31035],{},[49,119094,119095],{},"self.max_steps = 10","，确认环境会更快 ",[49,119098,119099],{},"truncated=True",[32,119101,105061,119102,105064,119105,119108],{},[49,119103,119104],{},"terminated = dist \u003C 0.05",[49,119106,119107],{},"dist \u003C 0.2","，观察是否更容易结束。",[32,119110,105061,119111,119114],{},[49,119112,119113],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[32,119116,119117,119118,119120,119121,119124],{},"在 ",[49,119119,118983],{}," 里加入 ",[49,119122,119123],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[18,119126,105103],{"id":105102},[3195,119128,119130],{"id":119129},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,119132,119133,119134,119136],{},"Gymnasium 的 ",[49,119135,109784],{}," 返回 5 个值:",[42,119138,119140],{"className":33028,"code":119139,"language":33030,"meta":47,"style":47},"obs, reward, terminated, truncated, info\n",[49,119141,119142],{"__ignoreMap":47},[52,119143,119144],{"class":54,"line":55},[52,119145,119139],{"class":79},[14,119147,119148],{},"不是旧 Gym 的 4 个值。",[3195,119150,119152,119155],{"id":119151},"datactrl-action-维度错误",[49,119153,119154],{},"data.ctrl[:] = action"," 维度错误",[14,119157,105173],{},[42,119159,119161],{"className":33028,"code":119160,"language":33030,"meta":47,"style":47},"print(self.model.nu)\nprint(action.shape)\n",[49,119162,119163,119174],{"__ignoreMap":47},[52,119164,119165,119167,119169,119171],{"class":54,"line":55},[52,119166,33065],{"class":308},[52,119168,1216],{"class":79},[52,119170,33473],{"class":308},[52,119172,119173],{"class":79},".model.nu)\n",[52,119175,119176,119178],{"class":54,"line":66},[52,119177,33065],{"class":308},[52,119179,119180],{"class":79},"(action.shape)\n",[14,119182,119183],{},"两者必须匹配。",[3195,119185,119187],{"id":119186},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,119189,105112],{},[42,119191,119193],{"className":33028,"code":119192,"language":33030,"meta":47,"style":47},"mujoco.mj_forward(self.model, self.data)\n",[49,119194,119195],{"__ignoreMap":47},[52,119196,119197,119200,119202,119204,119206],{"class":54,"line":55},[52,119198,119199],{"class":79},"mujoco.mj_forward(",[52,119201,33473],{"class":308},[52,119203,117231],{"class":79},[52,119205,33473],{"class":308},[52,119207,117236],{"class":79},[3195,119209,119211,119213],{"id":119210},"observation_space-维度和-obs-不一致",[49,119212,116250],{}," 维度和 obs 不一致",[14,119215,105225],{},[42,119217,119219],{"className":33028,"code":119218,"language":33030,"meta":47,"style":47},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[49,119220,119221,119231,119238],{"__ignoreMap":47},[52,119222,119223,119225,119227,119229],{"class":54,"line":55},[52,119224,113504],{"class":79},[52,119226,292],{"class":58},[52,119228,41523],{"class":308},[52,119230,117447],{"class":79},[52,119232,119233,119235],{"class":54,"line":66},[52,119234,33065],{"class":308},[52,119236,119237],{"class":79},"(obs.shape)\n",[52,119239,119240,119242,119244,119246],{"class":54,"line":83},[52,119241,33065],{"class":308},[52,119243,1216],{"class":79},[52,119245,33473],{"class":308},[52,119247,119248],{"class":79},".observation_space.shape)\n",[14,119250,119251],{},"两者必须一致。本章观测是：",[42,119253,119256],{"className":119254,"code":119255,"language":8154,"meta":47},[8152],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[49,119257,119255],{"__ignoreMap":47},[3195,119259,119261],{"id":119260},"action-超过范围","action 超过范围",[14,119263,119264],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[42,119266,119267],{"className":33028,"code":118766,"language":33030,"meta":47,"style":47},[49,119268,119269],{"__ignoreMap":47},[52,119270,119271,119273,119275,119277,119279,119281,119283],{"class":54,"line":55},[52,119272,110092],{"class":79},[52,119274,292],{"class":58},[52,119276,110097],{"class":79},[52,119278,33473],{"class":308},[52,119280,117368],{"class":79},[52,119282,33473],{"class":308},[52,119284,117373],{"class":79},[14,119286,119287,119288,31035],{},"这能避免无效动作直接写入 ",[49,119289,103726],{},[3195,119291,119293],{"id":119292},"忘记返回-info","忘记返回 info",[14,119295,119133,119296,103668,119298,119300],{},[49,119297,72706],{},[49,119299,109784],{}," 都会返回 info：",[42,119302,119303],{"className":33028,"code":116043,"language":33030,"meta":47,"style":47},[49,119304,119305,119313],{"__ignoreMap":47},[52,119306,119307,119309,119311],{"class":54,"line":55},[52,119308,116050],{"class":79},[52,119310,292],{"class":58},[52,119312,116055],{"class":79},[52,119314,119315,119317,119319],{"class":54,"line":66},[52,119316,116060],{"class":79},[52,119318,292],{"class":58},[52,119320,116065],{"class":79},[14,119322,119323,119324,31035],{},"即使暂时没有额外信息，也返回 ",[49,119325,35109],{},[18,119327,119329],{"id":119328},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,119331,119332],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[1696,119334,119335,119338,119341,119344,119347,119350],{},[32,119336,119337],{},"更稳定的 reward。",[32,119339,119340],{},"合理的 episode 长度。",[32,119342,119343],{},"可重复的随机目标采样。",[32,119345,119346],{},"render 接口。",[32,119348,119349],{},"环境注册代码。",[32,119351,119352],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,119354,119355],{},"如果只是自己写训练循环，最小形式是：",[42,119357,119359],{"className":33028,"code":119358,"language":33030,"meta":47,"style":47},"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",[49,119360,119361,119369,119385,119389,119405,119414,119423,119433],{"__ignoreMap":47},[52,119362,119363,119365,119367],{"class":54,"line":55},[52,119364,118994],{"class":79},[52,119366,292],{"class":58},[52,119368,117592],{"class":79},[52,119370,119371,119373,119375,119377,119379,119381,119383],{"class":54,"line":66},[52,119372,116050],{"class":79},[52,119374,292],{"class":58},[52,119376,117602],{"class":79},[52,119378,117216],{"class":1223},[52,119380,292],{"class":58},[52,119382,692],{"class":308},[52,119384,708],{"class":79},[52,119386,119387],{"class":54,"line":83},[52,119388,123],{"emptyLinePlaceholder":122},[52,119390,119391,119393,119395,119397,119399,119401,119403],{"class":54,"line":91},[52,119392,6014],{"class":58},[52,119394,104151],{"class":79},[52,119396,28693],{"class":58},[52,119398,35093],{"class":308},[52,119400,1216],{"class":79},[52,119402,9373],{"class":308},[52,119404,33436],{"class":79},[52,119406,119407,119410,119412],{"class":54,"line":98},[52,119408,119409],{"class":79},"    action ",[52,119411,292],{"class":58},[52,119413,117671],{"class":79},[52,119415,119416,119419,119421],{"class":54,"line":107},[52,119417,119418],{"class":79},"    obs, reward, terminated, truncated, info ",[52,119420,292],{"class":58},[52,119422,116065],{"class":79},[52,119424,119425,119427,119429,119431],{"class":54,"line":113},[52,119426,6088],{"class":58},[52,119428,117737],{"class":79},[52,119430,117740],{"class":58},[52,119432,117743],{"class":79},[52,119434,119435,119438,119440],{"class":54,"line":119},[52,119436,119437],{"class":79},"        obs, info ",[52,119439,292],{"class":58},[52,119441,116055],{"class":79},[18,119443,119445],{"id":119444},"_9本章小结","9.本章小结",[14,119447,119448],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[42,119450,119453],{"className":119451,"code":119452,"language":8154,"meta":47},[8152],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[49,119454,119452],{"__ignoreMap":47},[14,119456,119457],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[3141,119459,119460],{},"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":47,"searchDepth":66,"depth":66,"links":119462},[119463,119464,119465,119472,119476,119477,119478,119488,119489],{"id":103296,"depth":66,"text":103297},{"id":103419,"depth":66,"text":103420},{"id":103694,"depth":66,"text":103695,"children":119466},[119467,119469,119471],{"id":116274,"depth":83,"text":119468},"terminated 和 truncated 的区别",{"id":116377,"depth":83,"text":119470},"observation_space 和 action_space",{"id":116504,"depth":83,"text":116505},{"id":103902,"depth":66,"text":103903,"children":119473},[119474,119475],{"id":104222,"depth":83,"text":104222},{"id":104358,"depth":83,"text":104358},{"id":104965,"depth":66,"text":104966},{"id":104997,"depth":66,"text":104998},{"id":105102,"depth":66,"text":105103,"children":119479},[119480,119481,119483,119484,119486,119487],{"id":119129,"depth":83,"text":119130},{"id":119151,"depth":83,"text":119482},"data.ctrl[:] = action 维度错误",{"id":119186,"depth":83,"text":119187},{"id":119210,"depth":83,"text":119485},"observation_space 维度和 obs 不一致",{"id":119260,"depth":83,"text":119261},{"id":119292,"depth":83,"text":119293},{"id":119328,"depth":66,"text":119329},{"id":119444,"depth":66,"text":119445},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":116027,"description":47},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":119496,"title":119497,"body":119498,"description":119921,"extension":3153,"meta":119922,"navigation":122,"path":119923,"seo":119924,"stem":119925,"__hash__":119926},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":119499,"toc":119911},[119500,119504,119507,119510,119530,119536,119542,119552,119555,119558,119578,119581,119585,119588,119594,119597,119611,119614,119617,119691,119694,119700,119703,119726,119729,119779,119782,119788,119791,119794,119797,119816,119819,119825,119828,119831,119834,119854,119857,119860,119863,119908],[10,119501,119503],{"id":119502},"mujoco-学习","MuJoCo 学习",[14,119505,119506],{},"初版",[14,119508,119509],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[1696,119511,119512,119515,119518,119527],{},[32,119513,119514],{},"MuJoCo 模型文件在描述什么。",[32,119516,119517],{},"Python 代码怎样读取和推进仿真。",[32,119519,119520,3426,119522,3426,119524,119526],{},[49,119521,106680],{},[49,119523,107010],{},[49,119525,107013],{}," 这些数组为什么重要。",[32,119528,119529],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,119531,119532,119533,119535],{},"默认环境为 Fedora 44、Python >= 3.10、",[49,119534,103677],{}," 官方 Python bindings。",[14,119537,119538,119539,119541],{},"注意：本文禁止使用 ",[49,119540,103662],{},"。所有示例均使用：",[42,119543,119544],{"className":33028,"code":104228,"language":33030,"meta":47,"style":47},[49,119545,119546],{"__ignoreMap":47},[52,119547,119548,119550],{"class":54,"line":55},[52,119549,33042],{"class":58},[52,119551,103951],{"class":79},[18,119553,119554],{"id":119554},"适合谁阅读",[14,119556,119557],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[1696,119559,119560,119563,119566,119569],{},[32,119561,119562],{},"没学过 MuJoCo，只会一点 Python。",[32,119564,119565],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[32,119567,119568],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[32,119570,119571,119572,119574,119575,119577],{},"以前接触过 ",[49,119573,103662],{},"，现在想迁移到官方 ",[49,119576,103671],{}," Python bindings。",[14,119579,119580],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[18,119582,119584],{"id":119583},"mujoco-到底是什么","MuJoCo 到底是什么",[14,119586,119587],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[42,119589,119592],{"className":119590,"code":119591,"language":8154,"meta":47},[8152],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[49,119593,119591],{"__ignoreMap":47},[14,119595,119596],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[1696,119598,119599,119602,119605,119608],{},[32,119600,119601],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[32,119603,119604],{},"快速测试控制算法，不必一开始就上真实机器人。",[32,119606,119607],{},"生成强化学习环境。",[32,119609,119610],{},"采集状态、动作、图像、奖励等训练数据。",[18,119612,119613],{"id":119613},"学习前的心智模型",[14,119615,119616],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[3353,119618,119619,119631],{},[3356,119620,119621],{},[3359,119622,119623,119626,119629],{},[3362,119624,119625],{"align":26385},"部分",[3362,119627,119628],{"align":26385},"负责什么",[3362,119630,23835],{"align":26385},[3399,119632,119633,119644,119656,119668,119680],{},[3359,119634,119635,119638,119641],{},[3404,119636,119637],{"align":26385},"MJCF XML",[3404,119639,119640],{"align":26385},"定义世界和机器人结构",[3404,119642,119643],{"align":26385},"地面、盒子、关节、电机、摄像头",[3359,119645,119646,119650,119653],{},[3404,119647,119648],{"align":26385},[49,119649,103359],{},[3404,119651,119652],{"align":26385},"编译后的静态模型",[3404,119654,119655],{"align":26385},"有几个关节、有几个电机、时间步长是多少",[3359,119657,119658,119662,119665],{},[3404,119659,119660],{"align":26385},[49,119661,103369],{},[3404,119663,119664],{"align":26385},"运行中的动态状态",[3404,119666,119667],{"align":26385},"当前时间、位置、速度、电机输入",[3359,119669,119670,119674,119677],{},[3404,119671,119672],{"align":26385},[49,119673,103865],{},[3404,119675,119676],{"align":26385},"推进一步物理仿真",[3404,119678,119679],{"align":26385},"根据重力、力、碰撞更新状态",[3359,119681,119682,119685,119688],{},[3404,119683,119684],{"align":26385},"Viewer \u002F Renderer",[3404,119686,119687],{"align":26385},"把仿真显示出来",[3404,119689,119690],{"align":26385},"打开窗口或保存图片",[14,119692,119693],{},"一句话总结：",[42,119695,119698],{"className":119696,"code":119697,"language":8154,"meta":47},[8152],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[49,119699,119697],{"__ignoreMap":47},[14,119701,119702],{},"参考来源：",[29,119704,119705,119712,119719],{},[32,119706,119707,119708],{},"MuJoCo Python 官方文档：",[3451,119709,119710],{"href":119710,"rel":119711},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[26514],[32,119713,119714,119715],{},"MuJoCo XML Reference：",[3451,119716,119717],{"href":119717,"rel":119718},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[26514],[32,119720,119721,119722],{},"MuJoCo Overview：",[3451,119723,119724],{"href":119724,"rel":119725},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[26514],[18,119727,119728],{"id":119728},"章节目录",[1696,119730,119731,119737,119743,119749,119755,119761,119767,119773],{},[32,119732,119733],{},[3451,119734,119736],{"href":119735},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[32,119738,119739],{},[3451,119740,119742],{"href":119741},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[32,119744,119745],{},[3451,119746,119748],{"href":119747},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[32,119750,119751],{},[3451,119752,119754],{"href":119753},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[32,119756,119757],{},[3451,119758,119760],{"href":119759},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[32,119762,119763],{},[3451,119764,119766],{"href":119765},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[32,119768,119769],{},[3451,119770,119772],{"href":119771},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[32,119774,119775],{},[3451,119776,119778],{"href":119777},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[18,119780,119781],{"id":119781},"推荐学习路线",[42,119783,119786],{"className":119784,"code":119785,"language":8154,"meta":47},[8152],"环境安装\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",[49,119787,119785],{"__ignoreMap":47},[14,119789,119790],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[18,119792,119793],{"id":119793},"建议的目录结构",[14,119795,119796],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[42,119798,119800],{"className":26471,"code":119799,"language":26473,"meta":47,"style":47},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[49,119801,119802,119810],{"__ignoreMap":47},[52,119803,119804,119806,119808],{"class":54,"line":55},[52,119805,103916],{"class":75},[52,119807,31866],{"class":308},[52,119809,103921],{"class":62},[52,119811,119812,119814],{"class":54,"line":66},[52,119813,103926],{"class":308},[52,119815,103921],{"class":62},[14,119817,119818],{},"每一章的代码都单独保存：",[42,119820,119823],{"className":119821,"code":119822,"language":8154,"meta":47},[8152],"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",[49,119824,119822],{"__ignoreMap":47},[14,119826,119827],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[18,119829,119830],{"id":119830},"学习方法",[14,119832,119833],{},"每章建议按这个顺序操作：",[1696,119835,119836,119839,119842,119845,119848,119851],{},[32,119837,119838],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[32,119840,119841],{},"复制最小可运行代码，保存成指定文件。",[32,119843,119844],{},"运行代码，确认没有报错。",[32,119846,119847],{},"对照“运行结果说明”理解输出。",[32,119849,119850],{},"做“验证步骤”，主动改一两个参数。",[32,119852,119853],{},"遇到报错先看“常见错误与解决方案”。",[14,119855,119856],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[18,119858,119859],{"id":119859},"全局排错顺序",[14,119861,119862],{},"遇到问题时，按下面顺序查：",[1696,119864,119865,119871,119877,119882,119885,119888,119895,119905],{},[32,119866,119867,119868],{},"Python 环境是否激活：",[49,119869,119870],{},"which python",[32,119872,119873,119874],{},"MuJoCo 是否能导入：",[49,119875,119876],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[32,119878,119879,119880],{},"是否误装了 ",[49,119881,103662],{},[32,119883,119884],{},"XML 标签是否闭合、属性是否拼写正确",[32,119886,119887],{},"actuator 引用的 joint 名字是否存在",[32,119889,119890,119892,119893],{},[49,119891,103726],{}," 的长度是否等于 ",[49,119894,104808],{},[32,119896,108235,119897,85189,119899,119901,119902],{},[49,119898,106680],{},[49,119900,107010],{}," 后是否调用了 ",[49,119903,119904],{},"mujoco.mj_forward",[32,119906,119907],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[3141,119909,119910],{},"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":47,"searchDepth":66,"depth":66,"links":119912},[119913,119914,119915,119916,119917,119918,119919,119920],{"id":119554,"depth":66,"text":119554},{"id":119583,"depth":66,"text":119584},{"id":119613,"depth":66,"text":119613},{"id":119728,"depth":66,"text":119728},{"id":119781,"depth":66,"text":119781},{"id":119793,"depth":66,"text":119793},{"id":119830,"depth":66,"text":119830},{"id":119859,"depth":66,"text":119859},"仿真搭建。",{"category":26027},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":119497,"description":119921},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119928,"title":119929,"body":119930,"description":26025,"extension":3153,"meta":120385,"navigation":122,"path":120386,"seo":120387,"stem":120388,"__hash__":120389},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119931,"toc":120383},[119932,119935,119938,119944,120380],[10,119933,119929],{"id":119934},"_1-最常用的基本操作更新",[14,119936,119937],{},"装linux系统教程：",[14,119939,119940],{},[3451,119941,119942],{"href":119942,"rel":119943},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[26514],[42,119945,119949],{"className":119946,"code":119947,"language":119948,"meta":47,"style":47},"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",[49,119950,119951,119956,119961,119970,119975,119984,119989,120009,120014,120025,120030,120039,120044,120072,120077,120096,120101,120120,120124,120129,120145,120149,120154,120184,120188,120193,120209,120213,120218,120233,120237,120242,120258,120262,120267,120279,120291,120295,120300,120317,120321,120326,120344,120348,120353,120362,120366,120371],{"__ignoreMap":47},[52,119952,119953],{"class":54,"line":55},[52,119954,119955],{"class":94},"#更新相关的知识\n",[52,119957,119958],{"class":54,"line":66},[52,119959,119960],{"class":94},"# 更新软件包列表（从服务器获取最新软件信息）\n",[52,119962,119963,119965,119968],{"class":54,"line":83},[52,119964,27226],{"class":75},[52,119966,119967],{"class":62}," apt",[52,119969,28892],{"class":62},[52,119971,119972],{"class":54,"line":91},[52,119973,119974],{"class":94},"# 升级所有可更新的软件包（不删除旧包）\n",[52,119976,119977,119979,119981],{"class":54,"line":98},[52,119978,27226],{"class":75},[52,119980,119967],{"class":62},[52,119982,119983],{"class":62}," upgrade\n",[52,119985,119986],{"class":54,"line":107},[52,119987,119988],{"class":94},"#更新和升级软件包\n",[52,119990,119991,119993,119995,119998,120000,120002,120004,120007],{"class":54,"line":113},[52,119992,27226],{"class":75},[52,119994,119967],{"class":62},[52,119996,119997],{"class":62}," update",[52,119999,28840],{"class":79},[52,120001,27226],{"class":75},[52,120003,119967],{"class":62},[52,120005,120006],{"class":62}," upgrade",[52,120008,103631],{"class":308},[52,120010,120011],{"class":54,"line":119},[52,120012,120013],{"class":94},"#列出可更新的软件包及版本信息\n",[52,120015,120016,120019,120022],{"class":54,"line":126},[52,120017,120018],{"class":75},"apt",[52,120020,120021],{"class":62}," list",[52,120023,120024],{"class":308}," --upgradable\n",[52,120026,120027],{"class":54,"line":132},[52,120028,120029],{"class":94},"#彻底升级（处理依赖关系，可能删除旧包）\n",[52,120031,120032,120034,120036],{"class":54,"line":138},[52,120033,27226],{"class":75},[52,120035,119967],{"class":62},[52,120037,120038],{"class":62}," full-upgrade\n",[52,120040,120041],{"class":54,"line":144},[52,120042,120043],{"class":94},"#设置指定版本\n",[52,120045,120046,120048,120050,120052,120054,120057,120059,120061,120063,120065,120068,120070],{"class":54,"line":153},[52,120047,27226],{"class":75},[52,120049,119967],{"class":62},[52,120051,26483],{"class":62},[52,120053,31552],{"class":58},[52,120055,120056],{"class":62},"package_nam",[52,120058,3292],{"class":79},[52,120060,2674],{"class":58},[52,120062,292],{"class":62},[52,120064,698],{"class":58},[52,120066,120067],{"class":62},"version_numbe",[52,120069,3866],{"class":79},[52,120071,53957],{"class":58},[52,120073,120074],{"class":54,"line":159},[52,120075,120076],{"class":94},"#只安装软件包不升级\n",[52,120078,120079,120081,120083,120085,120087,120089,120091,120093],{"class":54,"line":167},[52,120080,27226],{"class":75},[52,120082,119967],{"class":62},[52,120084,26483],{"class":62},[52,120086,31552],{"class":58},[52,120088,120056],{"class":62},[52,120090,3292],{"class":79},[52,120092,2674],{"class":58},[52,120094,120095],{"class":308}," --no-upgrade\n",[52,120097,120098],{"class":54,"line":173},[52,120099,120100],{"class":94},"#只升级，不存在就不安装\n",[52,120102,120103,120105,120107,120109,120111,120113,120115,120117],{"class":54,"line":181},[52,120104,27226],{"class":75},[52,120106,119967],{"class":62},[52,120108,26483],{"class":62},[52,120110,31552],{"class":58},[52,120112,120056],{"class":62},[52,120114,3292],{"class":79},[52,120116,2674],{"class":58},[52,120118,120119],{"class":308}," --only-upgrade\n",[52,120121,120122],{"class":54,"line":186},[52,120123,123],{"emptyLinePlaceholder":122},[52,120125,120126],{"class":54,"line":191},[52,120127,120128],{"class":94},"#安装指定的软件命令\n",[52,120130,120131,120133,120135,120137,120139,120141,120143],{"class":54,"line":196},[52,120132,27226],{"class":75},[52,120134,119967],{"class":62},[52,120136,26483],{"class":62},[52,120138,31552],{"class":58},[52,120140,120056],{"class":62},[52,120142,3292],{"class":79},[52,120144,53957],{"class":58},[52,120146,120147],{"class":54,"line":201},[52,120148,123],{"emptyLinePlaceholder":122},[52,120150,120151],{"class":54,"line":206},[52,120152,120153],{"class":94},"#安装多个软件包\n",[52,120155,120156,120158,120160,120162,120164,120167,120170,120172,120174,120177,120179,120181],{"class":54,"line":211},[52,120157,27226],{"class":75},[52,120159,119967],{"class":62},[52,120161,26483],{"class":62},[52,120163,31552],{"class":58},[52,120165,120166],{"class":62},"package_",[52,120168,120169],{"class":58},"1>",[52,120171,31552],{"class":58},[52,120173,120166],{"class":62},[52,120175,120176],{"class":58},"2>",[52,120178,31552],{"class":58},[52,120180,120166],{"class":62},[52,120182,120183],{"class":58},"3>\n",[52,120185,120186],{"class":54,"line":218},[52,120187,123],{"emptyLinePlaceholder":122},[52,120189,120190],{"class":54,"line":223},[52,120191,120192],{"class":94},"#更新指定的软件命令\n",[52,120194,120195,120197,120199,120201,120203,120205,120207],{"class":54,"line":230},[52,120196,27226],{"class":75},[52,120198,119967],{"class":62},[52,120200,119997],{"class":62},[52,120202,31552],{"class":58},[52,120204,120056],{"class":62},[52,120206,3292],{"class":79},[52,120208,53957],{"class":58},[52,120210,120211],{"class":54,"line":239},[52,120212,123],{"emptyLinePlaceholder":122},[52,120214,120215],{"class":54,"line":251},[52,120216,120217],{"class":94},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[52,120219,120220,120222,120225,120227,120229,120231],{"class":54,"line":256},[52,120221,120018],{"class":75},[52,120223,120224],{"class":62}," show",[52,120226,31552],{"class":58},[52,120228,120056],{"class":62},[52,120230,3292],{"class":79},[52,120232,53957],{"class":58},[52,120234,120235],{"class":54,"line":262},[52,120236,123],{"emptyLinePlaceholder":122},[52,120238,120239],{"class":54,"line":268},[52,120240,120241],{"class":94},"#删除软件包命令\n",[52,120243,120244,120246,120248,120250,120252,120254,120256],{"class":54,"line":280},[52,120245,27226],{"class":75},[52,120247,119967],{"class":62},[52,120249,28729],{"class":62},[52,120251,31552],{"class":58},[52,120253,120056],{"class":62},[52,120255,3292],{"class":79},[52,120257,53957],{"class":58},[52,120259,120260],{"class":54,"line":286},[52,120261,123],{"emptyLinePlaceholder":122},[52,120263,120264],{"class":54,"line":300},[52,120265,120266],{"class":94},"# 清理旧版本和缓存（释放磁盘空间）\n",[52,120268,120269,120271,120273,120276],{"class":54,"line":314},[52,120270,27226],{"class":75},[52,120272,119967],{"class":62},[52,120274,120275],{"class":62}," autoremove",[52,120277,120278],{"class":94},"  # 删除不再需要的依赖和库文件\n",[52,120280,120281,120283,120285,120288],{"class":54,"line":327},[52,120282,27226],{"class":75},[52,120284,119967],{"class":62},[52,120286,120287],{"class":62}," clean",[52,120289,120290],{"class":94},"       # 清理下载的缓存包\n",[52,120292,120293],{"class":54,"line":333},[52,120294,123],{"emptyLinePlaceholder":122},[52,120296,120297],{"class":54,"line":360},[52,120298,120299],{"class":94},"#移除软件包及配置文件\n",[52,120301,120302,120304,120306,120309,120311,120313,120315],{"class":54,"line":365},[52,120303,27226],{"class":75},[52,120305,119967],{"class":62},[52,120307,120308],{"class":62}," purge",[52,120310,31552],{"class":58},[52,120312,120056],{"class":62},[52,120314,3292],{"class":79},[52,120316,53957],{"class":58},[52,120318,120319],{"class":54,"line":371},[52,120320,123],{"emptyLinePlaceholder":122},[52,120322,120323],{"class":54,"line":400},[52,120324,120325],{"class":94},"#查找软件包命令\n",[52,120327,120328,120330,120332,120335,120337,120340,120342],{"class":54,"line":405},[52,120329,27226],{"class":75},[52,120331,119967],{"class":62},[52,120333,120334],{"class":62}," search",[52,120336,31552],{"class":58},[52,120338,120339],{"class":62},"keywor",[52,120341,3524],{"class":79},[52,120343,53957],{"class":58},[52,120345,120346],{"class":54,"line":411},[52,120347,123],{"emptyLinePlaceholder":122},[52,120349,120350],{"class":54,"line":424},[52,120351,120352],{"class":94},"#列出所有已安装的包\n",[52,120354,120355,120357,120359],{"class":54,"line":436},[52,120356,120018],{"class":75},[52,120358,120021],{"class":62},[52,120360,120361],{"class":308}," --installed\n",[52,120363,120364],{"class":54,"line":449},[52,120365,123],{"emptyLinePlaceholder":122},[52,120367,120368],{"class":54,"line":2160},[52,120369,120370],{"class":94},"#列出所有已安装的包的版本信息\n",[52,120372,120373,120375,120377],{"class":54,"line":2186},[52,120374,120018],{"class":75},[52,120376,120021],{"class":62},[52,120378,120379],{"class":308}," --all-versions\n",[3141,120381,120382],{},"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":47,"searchDepth":66,"depth":66,"links":120384},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119929,"description":26025},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":120391,"title":120392,"body":120393,"description":26025,"extension":3153,"meta":121134,"navigation":122,"path":121135,"seo":121136,"stem":121137,"__hash__":121138},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":120394,"toc":121121},[120395,120398,120402,120405,120411,120415,120419,120425,120430,120435,120440,120445,120450,120453,120456,120459,120462,120466,120469,120474,120477,120482,120485,120490,120497,120500,120503,120506,120509,120512,120523,120527,120531,120536,120541,120545,120550,120554,120559,120563,120567,120572,120575,120620,120625,120629,120633,120638,120644,120649,120659,120664,120674,120679,120684,120711,120715,120718,120723,120726,120751,120755,120760,120763,120768,120773,120793,120798,120801,120816,120820,120873,120876,120881,120885,120888,120903,120906,120909,120914,120918,120922,120925,120929,120933,120936,120941,120946,120950,120957,120965,120968,120975,120980,120985,120988,120993,121000,121005,121012,121016,121018,121023,121027,121030,121033,121038,121041,121046,121049,121054,121059,121064,121068,121073,121077,121118],[10,120396,120392],{"id":120397},"_2-linux装机教程",[18,120399,120401],{"id":120400},"_21-实体机","2.1 实体机",[14,120403,120404],{},"使用清华源：（Ubuntu24.04）",[14,120406,120407],{},[3451,120408,120409],{"href":120409,"rel":120410},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[26514],[18,120412,120414],{"id":120413},"_22-普通虚拟机","2.2 普通虚拟机",[3195,120416,120418],{"id":120417},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,120420,120421],{},[3451,120422,120423],{"href":120423,"rel":120424},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[26514],[14,120426,120427],{},[4509,120428],{"alt":47,"src":120429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,120431,120432],{},[4509,120433],{"alt":47,"src":120434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,120436,120437],{},[4509,120438],{"alt":47,"src":120439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,120441,120442],{},[4509,120443],{"alt":47,"src":120444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,120446,120447],{},[4509,120448],{"alt":47,"src":120449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,120451,120452],{},"内存4G（4096MB）；",[14,120454,120455],{},"CPU给4个核；",[14,120457,120458],{},"硬盘动态分配60G；",[14,120460,120461],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[3195,120463,120465],{"id":120464},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,120467,120468],{},"按照1.1的步骤下载Ubuntu",[14,120470,120471],{},[4509,120472],{"alt":47,"src":120473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,120475,120476],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,120478,120479],{},[4509,120480],{"alt":47,"src":120481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,120483,120484],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,120486,120487],{},[4509,120488],{"alt":47,"src":120489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,120491,120492,120493,120496],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2389,120494,120495],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,120498,120499],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,120501,120502],{},"将改动写入磁盘吗 继续",[14,120504,120505],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,120507,120508],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,120510,120511],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,120513,120514,120515,120518,120519,120522],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2389,120516,120517],{},"除了"," 选不发送系统信息与不升级之外， ",[2389,120520,120521],{},"其它"," 都跳过或前进）",[3195,120524,120526],{"id":120525},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[24646,120528,120530],{"id":120529},"_2231-全屏","2.2.3.1 全屏",[14,120532,120533],{},[4509,120534],{"alt":47,"src":120535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,120537,120538],{},[4509,120539],{"alt":47,"src":120540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[24646,120542,120544],{"id":120543},"_2232-文件交换","2.2.3.2 文件交换",[14,120546,120547],{},[4509,120548],{"alt":47,"src":120549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[24646,120551,120553],{"id":120552},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,120555,120556],{},[4509,120557],{"alt":47,"src":120558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[18,120560,120562],{"id":120561},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[3195,120564,120566],{"id":120565},"_231-简介与优缺点","2.3.1 简介与优缺点",[1696,120568,120569],{},[32,120570,120571],{},"什么情况下推荐？",[14,120573,120574],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[1696,120576,120577],{"start":66},[32,120578,120579,120580],{},"优缺点：",[1696,120581,120582,120612],{},[32,120583,120584,120585],{},"优点：",[1696,120586,120587,120590,120597,120600,120603,120606,120609],{},[32,120588,120589],{},"WSL2是最好的Linux发行版;(bushi)",[32,120591,120592,120593,120596],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2389,120594,120595],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[32,120598,120599],{},"非常方便调用USB设备，可以USB直通;",[32,120601,120602],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[32,120604,120605],{},"非常方便Win与WSL2互相传文件等协同操作;",[32,120607,120608],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[32,120610,120611],{},"非常方便使用Windows的VScode远程开发;",[32,120613,120614,120615],{},"缺点：",[1696,120616,120617],{},[32,120618,120619],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,120621,120622],{},[4509,120623],{"alt":47,"src":120624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[3195,120626,120628],{"id":120627},"_232-安装教程","2.3.2 安装教程",[24646,120630,120632],{"id":120631},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[1696,120634,120635],{},[32,120636,120637],{},"方法一(图形界面)",[14,120639,120640,120641,27268],{},"用Win+R输入",[49,120642,120643],{},"appwiz.cpl",[14,120645,120646],{},[4509,120647],{"alt":47,"src":120648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,120650,120651,120652,120655,120656,29123],{},"点击OK进入 ",[2389,120653,120654],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2389,120657,120658],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,120660,120661],{},[4509,120662],{"alt":47,"src":120663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,120665,120666,120667,103668,120670,120673],{},"选择 ",[2389,120668,120669],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2389,120671,120672],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,120675,120676],{},[4509,120677],{"alt":47,"src":120678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[1696,120680,120681],{"start":66},[32,120682,120683],{},"方法二(命令行)",[42,120685,120689],{"className":120686,"code":120687,"language":120688,"meta":47,"style":47},"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",[49,120690,120691,120696,120701,120706],{"__ignoreMap":47},[52,120692,120693],{"class":54,"line":55},[52,120694,120695],{},"# 开启 Linux 子系统\n",[52,120697,120698],{"class":54,"line":66},[52,120699,120700],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[52,120702,120703],{"class":54,"line":83},[52,120704,120705],{},"# 开启虚拟机平台\n",[52,120707,120708],{"class":54,"line":91},[52,120709,120710],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[24646,120712,120714],{"id":120713},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,120716,120717],{},"用管理员权限打开powershell",[14,120719,120720],{},[4509,120721],{"alt":47,"src":120722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,120724,120725],{},"升级WSL并设置默认版本为WSL2",[42,120727,120729],{"className":120686,"code":120728,"language":120688,"meta":47,"style":47},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[49,120730,120731,120736,120741,120746],{"__ignoreMap":47},[52,120732,120733],{"class":54,"line":55},[52,120734,120735],{},"# 更新 wsl\n",[52,120737,120738],{"class":54,"line":66},[52,120739,120740],{},"wsl --update\n",[52,120742,120743],{"class":54,"line":83},[52,120744,120745],{},"# 将 wsl 版本设置为 wsl2\n",[52,120747,120748],{"class":54,"line":91},[52,120749,120750],{},"wsl --set-default-version 2\n",[24646,120752,120754],{"id":120753},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[1696,120756,120757],{},[32,120758,120759],{},"方式一(商店下载)",[14,120761,120762],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,120764,120765],{},[4509,120766],{"alt":47,"src":120767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[1696,120769,120770],{"start":66},[32,120771,120772],{},"方式二(命令行安装)",[42,120774,120776],{"className":120686,"code":120775,"language":120688,"meta":47,"style":47},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[49,120777,120778,120783,120788],{"__ignoreMap":47},[52,120779,120780],{"class":54,"line":55},[52,120781,120782],{},"# 列出可安装的 Linux 版本\n",[52,120784,120785],{"class":54,"line":66},[52,120786,120787],{},"#（需要科学手段）\n",[52,120789,120790],{"class":54,"line":83},[52,120791,120792],{},"wsl --list --online\n",[14,120794,120795],{},[4509,120796],{"alt":47,"src":120797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,120799,120800],{},"选择对应发行版并安装",[42,120802,120804],{"className":120686,"code":120803,"language":120688,"meta":47,"style":47},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[49,120805,120806,120811],{"__ignoreMap":47},[52,120807,120808],{"class":54,"line":55},[52,120809,120810],{},"# Ubuntu安装完毕后需要重启系统\n",[52,120812,120813],{"class":54,"line":66},[52,120814,120815],{},"wsl --install -d Ubuntu-24.04\n",[24646,120817,120819],{"id":120818},"_2324-查看系统状态","2.3.2.4 查看系统状态",[42,120821,120823],{"className":120686,"code":120822,"language":120688,"meta":47,"style":47},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[49,120824,120825,120830,120835,120840,120845,120849,120853,120858,120863,120868],{"__ignoreMap":47},[52,120826,120827],{"class":54,"line":55},[52,120828,120829],{},"# 查看 wsl\n",[52,120831,120832],{"class":54,"line":66},[52,120833,120834],{},"wsl -l\n",[52,120836,120837],{"class":54,"line":83},[52,120838,120839],{},"# 查看 wsl 运行版本或模式\n",[52,120841,120842],{"class":54,"line":91},[52,120843,120844],{},"wsl -l -v\n",[52,120846,120847],{"class":54,"line":98},[52,120848,123],{"emptyLinePlaceholder":122},[52,120850,120851],{"class":54,"line":107},[52,120852,123],{"emptyLinePlaceholder":122},[52,120854,120855],{"class":54,"line":113},[52,120856,120857],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[52,120859,120860],{"class":54,"line":119},[52,120861,120862],{},"wsl --set-version \u003Cdistro> 2\n",[52,120864,120865],{"class":54,"line":126},[52,120866,120867],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[52,120869,120870],{"class":54,"line":132},[52,120871,120872],{},"wsl --unregister \u003Cdistro>\n",[14,120874,120875],{},"输出Version为2即正常",[14,120877,120878],{},[4509,120879],{"alt":47,"src":120880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[24646,120882,120884],{"id":120883},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,120886,120887],{},"直接在Powershell里输入wsl命令进入子系统",[42,120889,120891],{"className":120686,"code":120890,"language":120688,"meta":47,"style":47},"# 进入子系统\nwsl\n",[49,120892,120893,120898],{"__ignoreMap":47},[52,120894,120895],{"class":54,"line":55},[52,120896,120897],{},"# 进入子系统\n",[52,120899,120900],{"class":54,"line":66},[52,120901,120902],{},"wsl\n",[14,120904,120905],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,120907,120908],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,120910,120911],{},[4509,120912],{"alt":47,"src":120913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[3195,120915,120917],{"id":120916},"_233-配置各种环境","2.3.3 配置各种环境",[24646,120919,120921],{"id":120920},"_2331-换源","2.3.3.1 换源",[14,120923,120924],{},"(同实体机LINUX，往下找教程)",[24646,120926,120928],{"id":120927},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[25558,120930,120932],{"id":120931},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,120934,120935],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,120937,120938],{},[4509,120939],{"alt":47,"src":120940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,120942,120943],{},[4509,120944],{"alt":47,"src":120945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[25558,120947,120949],{"id":120948},"_23322-cuda","2.3.3.2.2 CUDA",[14,120951,120952,120953],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[3451,120954,120955],{"href":120955,"rel":120956},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[26514],[14,120958,120959,120962],{},[4509,120960],{"alt":47,"src":120961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[4509,120963],{"alt":47,"src":120964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,120966,120967],{},"在下方的网站，选择合适的版本。",[14,120969,120970,120971],{},"WSL2 专属 CUDA 指南：",[3451,120972,120973],{"href":120973,"rel":120974},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[26514],[14,120976,120977],{},[2389,120978,120979],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,120981,120982],{},[4509,120983],{"alt":47,"src":120984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,120986,120987],{},"挨行敲一遍",[14,120989,120990],{},[4509,120991],{"alt":47,"src":120992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,120994,120995,120996,120999],{},"敲完后，输入",[49,120997,120998],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,121001,121002],{},[4509,121003],{"alt":47,"src":121004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,121006,121007,121008,121011],{},"（请详看下方教程的",[2389,121009,121010],{},"安装CUDA的配置环境来看","如何配置环境）",[25558,121013,121015],{"id":121014},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,121017,120924],{},[14,121019,121020],{},[4509,121021],{"alt":47,"src":121022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[24646,121024,121026],{"id":121025},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,121028,121029],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,121031,121032],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,121034,121035],{},[4509,121036],{"alt":47,"src":121037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,121039,121040],{},"连接WSL2",[14,121042,121043],{},[4509,121044],{"alt":47,"src":121045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,121047,121048],{},"远程开发成功。",[14,121050,121051],{},[4509,121052],{"alt":47,"src":121053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,121055,121056],{},[4509,121057],{"alt":47,"src":121058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,121060,121061],{},[4509,121062],{"alt":47,"src":121063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[24646,121065,121067],{"id":121066},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,121069,121070],{},[4509,121071],{"alt":47,"src":121072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[24646,121074,121076],{"id":121075},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[42,121078,121080],{"className":119946,"code":121079,"language":119948,"meta":47,"style":47},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[49,121081,121082,121090,121098,121109,121113],{"__ignoreMap":47},[52,121083,121084,121086,121088],{"class":54,"line":55},[52,121085,27226],{"class":75},[52,121087,119967],{"class":62},[52,121089,28892],{"class":62},[52,121091,121092,121094,121096],{"class":54,"line":66},[52,121093,27226],{"class":75},[52,121095,119967],{"class":62},[52,121097,119983],{"class":62},[52,121099,121100,121102,121104,121106],{"class":54,"line":83},[52,121101,27226],{"class":75},[52,121103,119967],{"class":62},[52,121105,26483],{"class":62},[52,121107,121108],{"class":62}," mesa-utils\n",[52,121110,121111],{"class":54,"line":91},[52,121112,123],{"emptyLinePlaceholder":122},[52,121114,121115],{"class":54,"line":98},[52,121116,121117],{"class":94},"#然后重启wsl2即可\n",[3141,121119,121120],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":47,"searchDepth":66,"depth":66,"links":121122},[121123,121124,121129],{"id":120400,"depth":66,"text":120401},{"id":120413,"depth":66,"text":120414,"children":121125},[121126,121127,121128],{"id":120417,"depth":83,"text":120418},{"id":120464,"depth":83,"text":120465},{"id":120525,"depth":83,"text":120526},{"id":120561,"depth":66,"text":120562,"children":121130},[121131,121132,121133],{"id":120565,"depth":83,"text":120566},{"id":120627,"depth":83,"text":120628},{"id":120916,"depth":83,"text":120917},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":120392,"description":26025},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":121140,"title":121141,"body":121142,"description":26025,"extension":3153,"meta":124078,"navigation":122,"path":124079,"seo":124080,"stem":124081,"__hash__":124082},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":121143,"toc":124050},[121144,121147,121151,121157,121161,121167,121171,121359,121362,121367,121371,121375,121378,121381,121387,121392,121395,121398,121403,121436,121441,121445,121522,121525,121530,121534,121537,121576,121579,121588,121606,121611,121618,121735,121740,121743,121770,121775,121779,121788,121838,121845,121849,121852,121866,121873,121907,121912,121916,121939,121942,121947,121951,121954,121957,121960,122002,122006,122009,122012,122053,122057,122061,122064,122069,122074,122077,122100,122103,122111,122116,122119,122124,122129,122132,122137,122141,122146,122169,122174,122236,122244,122249,122254,122257,122262,122265,122270,122275,122293,122298,122304,122309,122323,122327,122330,122333,122336,122379,122382,122387,122488,122491,122496,122500,122504,122541,122545,122549,122553,122599,122603,122648,122652,122659,122667,122722,122725,122802,122805,122828,122832,122835,122840,122845,122853,122856,122861,122866,122871,122874,122879,122888,122891,122896,122899,122970,122975,122978,122983,122986,122991,122994,122999,123002,123007,123012,123015,123090,123093,123106,123111,123114,123128,123131,123160,123165,123194,123197,123202,123206,123211,123220,123223,123228,123231,123236,123239,123242,123247,123250,123255,123260,123263,123268,123271,123396,123401,123431,123434,123439,123444,123461,123464,123507,123510,123537,123542,123555,123698,123702,123707,123721,123724,123775,123778,123808,123811,123827,123832,123846,123849,123916,123921,123930,123935,123938,123950,123955,123962,123986,123989,123994,123997,124016,124021,124028,124040,124047],[10,121145,121141],{"id":121146},"_3-安装必备配置",[18,121148,121150],{"id":121149},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[42,121152,121155],{"className":121153,"code":121154,"language":8154},[8152],"  打开下方网站（注意，该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",[49,121156,121154],{"__ignoreMap":47},[3195,121158,121160],{"id":121159},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[42,121162,121165],{"className":121163,"code":121164,"language":8154},[8152],"  输入以下命令\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",[49,121166,121164],{"__ignoreMap":47},[3195,121168,121170],{"id":121169},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[42,121172,121176],{"className":121173,"code":121174,"language":121175,"meta":47,"style":47},"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",[49,121177,121178,121186,121197,121209,121223,121227,121237,121242,121246,121250,121255,121259,121271,121275,121280,121284,121295,121299,121315,121319,121330,121334,121339,121343,121351],{"__ignoreMap":47},[52,121179,121180,121182,121184],{"class":54,"line":55},[52,121181,27226],{"class":75},[52,121183,119967],{"class":62},[52,121185,28892],{"class":62},[52,121187,121188,121190,121192,121194],{"class":54,"line":66},[52,121189,27226],{"class":75},[52,121191,119967],{"class":62},[52,121193,26483],{"class":62},[52,121195,121196],{"class":62}," vim\n",[52,121198,121199,121201,121204,121206],{"class":54,"line":83},[52,121200,27226],{"class":75},[52,121202,121203],{"class":62}," rm",[52,121205,27975],{"class":308},[52,121207,121208],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list\n",[52,121210,121211,121213,121215,121217,121220],{"class":54,"line":91},[52,121212,27226],{"class":75},[52,121214,121203],{"class":62},[52,121216,27975],{"class":308},[52,121218,121219],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[52,121221,121222],{"class":308},"**\n",[52,121224,121225],{"class":54,"line":98},[52,121226,123],{"emptyLinePlaceholder":122},[52,121228,121229,121231,121234],{"class":54,"line":107},[52,121230,27226],{"class":75},[52,121232,121233],{"class":62}," vim",[52,121235,121236],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[52,121238,121239],{"class":54,"line":113},[52,121240,121241],{"class":62},"```\n",[52,121243,121244],{"class":54,"line":119},[52,121245,123],{"emptyLinePlaceholder":122},[52,121247,121248],{"class":54,"line":126},[52,121249,123],{"emptyLinePlaceholder":122},[52,121251,121252],{"class":54,"line":132},[52,121253,121254],{"class":75},"选择好Ubuntu版本后，复制下方的内容。\n",[52,121256,121257],{"class":54,"line":138},[52,121258,123],{"emptyLinePlaceholder":122},[52,121260,121261,121263,121266,121269],{"class":54,"line":144},[52,121262,3439],{"class":58},[52,121264,121265],{"class":62},"[](",[52,121267,121268],{"class":75},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[52,121270,708],{"class":62},[52,121272,121273],{"class":54,"line":153},[52,121274,123],{"emptyLinePlaceholder":122},[52,121276,121277],{"class":54,"line":159},[52,121278,121279],{"class":75},"粘贴进去\n",[52,121281,121282],{"class":54,"line":167},[52,121283,123],{"emptyLinePlaceholder":122},[52,121285,121286,121288,121290,121293],{"class":54,"line":173},[52,121287,3439],{"class":58},[52,121289,121265],{"class":62},[52,121291,121292],{"class":75},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[52,121294,708],{"class":62},[52,121296,121297],{"class":54,"line":181},[52,121298,123],{"emptyLinePlaceholder":122},[52,121300,121301,121304,121307,121310,121312],{"class":54,"line":186},[52,121302,121303],{"class":75},"按一下ESC，然后英文冒号，输入",[52,121305,121306],{"class":62}," `",[52,121308,121309],{"class":75},":wq!",[52,121311,4157],{"class":62},[52,121313,121314],{"class":75},"然后回车\n",[52,121316,121317],{"class":54,"line":191},[52,121318,123],{"emptyLinePlaceholder":122},[52,121320,121321,121323,121325,121328],{"class":54,"line":196},[52,121322,3439],{"class":58},[52,121324,121265],{"class":62},[52,121326,121327],{"class":75},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[52,121329,708],{"class":62},[52,121331,121332],{"class":54,"line":201},[52,121333,123],{"emptyLinePlaceholder":122},[52,121335,121336],{"class":54,"line":206},[52,121337,121338],{"class":75},"输入以下命令\n",[52,121340,121341],{"class":54,"line":211},[52,121342,123],{"emptyLinePlaceholder":122},[52,121344,121345,121348],{"class":54,"line":218},[52,121346,121347],{"class":62},"```",[52,121349,121350],{"class":75},"Bash\n",[52,121352,121353,121355,121357],{"class":54,"line":223},[52,121354,27226],{"class":75},[52,121356,119967],{"class":62},[52,121358,28892],{"class":62},[14,121360,121361],{},"这里被替换成对应学校则成功",[14,121363,121364],{},[4509,121365],{"alt":47,"src":121366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[18,121368,121370],{"id":121369},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[3195,121372,121374],{"id":121373},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,121376,121377],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,121379,121380],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,121382,121383],{},[3451,121384,121385],{"href":121385,"rel":121386},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[26514],[14,121388,121389],{},[4509,121390],{"alt":47,"src":121391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,121393,121394],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,121396,121397],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,121399,121400],{},[4509,121401],{"alt":47,"src":121402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[42,121404,121406],{"className":119946,"code":121405,"language":119948,"meta":47,"style":47},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[49,121407,121408,121413,121420,121425],{"__ignoreMap":47},[52,121409,121410],{"class":54,"line":55},[52,121411,121412],{"class":94},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[52,121414,121415,121417],{"class":54,"line":66},[52,121416,103926],{"class":308},[52,121418,121419],{"class":62}," ~\u002FDownloads\n",[52,121421,121422],{"class":54,"line":83},[52,121423,121424],{"class":94},"#下方chrome安装包名不一定是这个，根据名字来看\n",[52,121426,121427,121429,121431,121433],{"class":54,"line":91},[52,121428,27226],{"class":75},[52,121430,119967],{"class":62},[52,121432,26483],{"class":62},[52,121434,121435],{"class":62}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,121437,121438],{},[4509,121439],{"alt":47,"src":121440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[3195,121442,121444],{"id":121443},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[42,121446,121448],{"className":119946,"code":121447,"language":119948,"meta":47,"style":47},"# 老版\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",[49,121449,121450,121455,121463,121474,121479,121483,121488,121498,121506,121517],{"__ignoreMap":47},[52,121451,121452],{"class":54,"line":55},[52,121453,121454],{"class":94},"# 老版\n",[52,121456,121457,121459,121461],{"class":54,"line":66},[52,121458,27226],{"class":75},[52,121460,119967],{"class":62},[52,121462,28892],{"class":62},[52,121464,121465,121467,121469,121471],{"class":54,"line":83},[52,121466,27226],{"class":75},[52,121468,119967],{"class":62},[52,121470,26483],{"class":62},[52,121472,121473],{"class":62}," neofetch\n",[52,121475,121476],{"class":54,"line":91},[52,121477,121478],{"class":75},"neofetch\n",[52,121480,121481],{"class":54,"line":98},[52,121482,123],{"emptyLinePlaceholder":122},[52,121484,121485],{"class":54,"line":107},[52,121486,121487],{"class":94},"# 新版\n",[52,121489,121490,121492,121495],{"class":54,"line":113},[52,121491,27226],{"class":75},[52,121493,121494],{"class":62}," add-apt-repository",[52,121496,121497],{"class":62}," ppa:zhangsongcui3371\u002Ffastfetch\n",[52,121499,121500,121502,121504],{"class":54,"line":119},[52,121501,27226],{"class":75},[52,121503,119967],{"class":62},[52,121505,28892],{"class":62},[52,121507,121508,121510,121512,121514],{"class":54,"line":126},[52,121509,27226],{"class":75},[52,121511,119967],{"class":62},[52,121513,26483],{"class":62},[52,121515,121516],{"class":62}," fastfetch\n",[52,121518,121519],{"class":54,"line":132},[52,121520,121521],{"class":75},"fastfetch\n",[14,121523,121524],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,121526,121527],{},[4509,121528],{"alt":47,"src":121529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[3195,121531,121533],{"id":121532},"_323-移除snap应用","3.2.3 移除snap应用",[14,121535,121536],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[42,121538,121540],{"className":119946,"code":121539,"language":119948,"meta":47,"style":47},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[49,121541,121542,121554,121565],{"__ignoreMap":47},[52,121543,121544,121546,121548,121551],{"class":54,"line":55},[52,121545,27226],{"class":75},[52,121547,29163],{"class":62},[52,121549,121550],{"class":62}," disable",[52,121552,121553],{"class":62}," snapd.service\n",[52,121555,121556,121558,121560,121562],{"class":54,"line":66},[52,121557,27226],{"class":75},[52,121559,29163],{"class":62},[52,121561,121550],{"class":62},[52,121563,121564],{"class":62}," snapd.socket\n",[52,121566,121567,121569,121571,121573],{"class":54,"line":83},[52,121568,27226],{"class":75},[52,121570,29163],{"class":62},[52,121572,121550],{"class":62},[52,121574,121575],{"class":62}," snapd.seeded.service\n",[14,121577,121578],{},"然后查看snap应用列表",[14,121580,121581,121582,121587],{},"根据你安装的选择不同（最小安装或普通安装），有",[3451,121583,121586],{"href":121584,"rel":121585},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[26514],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[42,121589,121591],{"className":119946,"code":121590,"language":119948,"meta":47,"style":47},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[49,121592,121593,121598],{"__ignoreMap":47},[52,121594,121595],{"class":54,"line":55},[52,121596,121597],{"class":94},"# 查询当前系统上snap安装了哪些app\n",[52,121599,121600,121603],{"class":54,"line":66},[52,121601,121602],{"class":75},"snap",[52,121604,121605],{"class":62}," list\n",[14,121607,121608],{},[4509,121609],{"alt":47,"src":121610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,121612,121613,121614,121617],{},"卸载掉图中所有应用，按照 ",[2389,121615,121616],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[42,121619,121621],{"className":119946,"code":121620,"language":119948,"meta":47,"style":47},"#移除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",[49,121622,121623,121628,121640,121645,121656,121661,121672,121677,121688,121693,121697,121702,121713,121724],{"__ignoreMap":47},[52,121624,121625],{"class":54,"line":55},[52,121626,121627],{"class":94},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[52,121629,121630,121632,121635,121637],{"class":54,"line":66},[52,121631,27226],{"class":75},[52,121633,121634],{"class":62}," snap",[52,121636,28729],{"class":62},[52,121638,121639],{"class":62}," snap-store\n",[52,121641,121642],{"class":54,"line":83},[52,121643,121644],{"class":94},"#移除firefox浏览器\n",[52,121646,121647,121649,121651,121653],{"class":54,"line":91},[52,121648,27226],{"class":75},[52,121650,121634],{"class":62},[52,121652,28729],{"class":62},[52,121654,121655],{"class":62}," firefox\n",[52,121657,121658],{"class":54,"line":98},[52,121659,121660],{"class":94},"#移除gnome-42-2204\n",[52,121662,121663,121665,121667,121669],{"class":54,"line":107},[52,121664,27226],{"class":75},[52,121666,121634],{"class":62},[52,121668,28729],{"class":62},[52,121670,121671],{"class":62}," gnome-42-2204\n",[52,121673,121674],{"class":54,"line":113},[52,121675,121676],{"class":94},"#移除gtk-common-themes\n",[52,121678,121679,121681,121683,121685],{"class":54,"line":119},[52,121680,27226],{"class":75},[52,121682,121634],{"class":62},[52,121684,28729],{"class":62},[52,121686,121687],{"class":62}," gtk-common-themes\n",[52,121689,121690],{"class":54,"line":126},[52,121691,121692],{"class":94},"#移除其它...\n",[52,121694,121695],{"class":54,"line":132},[52,121696,963],{"class":79},[52,121698,121699],{"class":54,"line":138},[52,121700,121701],{"class":94},"#移除core22,bare以及snapd\n",[52,121703,121704,121706,121708,121710],{"class":54,"line":144},[52,121705,27226],{"class":75},[52,121707,121634],{"class":62},[52,121709,28729],{"class":62},[52,121711,121712],{"class":62}," core22\n",[52,121714,121715,121717,121719,121721],{"class":54,"line":153},[52,121716,27226],{"class":75},[52,121718,121634],{"class":62},[52,121720,28729],{"class":62},[52,121722,121723],{"class":62}," bare\n",[52,121725,121726,121728,121730,121732],{"class":54,"line":159},[52,121727,27226],{"class":75},[52,121729,121634],{"class":62},[52,121731,28729],{"class":62},[52,121733,121734],{"class":62}," snapd\n",[14,121736,121737],{},[4509,121738],{"alt":47,"src":121739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,121741,121742],{},"输入以下命令查看是否还有snap包",[42,121744,121746],{"className":119946,"code":121745,"language":119948,"meta":47,"style":47},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[49,121747,121748,121754,121758,121762,121766],{"__ignoreMap":47},[52,121749,121750,121752],{"class":54,"line":55},[52,121751,121602],{"class":75},[52,121753,121605],{"class":62},[52,121755,121756],{"class":54,"line":66},[52,121757,121454],{"class":94},[52,121759,121760],{"class":54,"line":83},[52,121761,121478],{"class":75},[52,121763,121764],{"class":54,"line":91},[52,121765,121487],{"class":94},[52,121767,121768],{"class":54,"line":98},[52,121769,121521],{"class":75},[14,121771,121772],{},[4509,121773],{"alt":47,"src":121774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[3195,121776,121778],{"id":121777},"_324-移除snap","3.2.4 移除snap",[14,121780,121781,121782,121787],{},"在删除掉",[3451,121783,121786],{"href":121784,"rel":121785},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[26514],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[42,121789,121791],{"className":119946,"code":121790,"language":119948,"meta":47,"style":47}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[49,121792,121793,121798,121811,121816,121827],{"__ignoreMap":47},[52,121794,121795],{"class":54,"line":55},[52,121796,121797],{"class":94}," #使用apt移除掉snap\n",[52,121799,121800,121802,121804,121806,121809],{"class":54,"line":66},[52,121801,27226],{"class":75},[52,121803,119967],{"class":62},[52,121805,120275],{"class":62},[52,121807,121808],{"class":308}," --purge",[52,121810,121734],{"class":62},[52,121812,121813],{"class":54,"line":83},[52,121814,121815],{"class":94},"#移除snapd的一些目录\n",[52,121817,121818,121820,121822,121824],{"class":54,"line":91},[52,121819,27226],{"class":75},[52,121821,121203],{"class":62},[52,121823,27975],{"class":308},[52,121825,121826],{"class":62}," \u002Fvar\u002Fcache\u002Fsnapd\n",[52,121828,121829,121831,121833,121835],{"class":54,"line":98},[52,121830,27226],{"class":75},[52,121832,121203],{"class":62},[52,121834,27975],{"class":308},[52,121836,121837],{"class":62}," ~\u002Fsnap\n",[14,121839,121840,121841,121844],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[49,121842,121843],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[3195,121846,121848],{"id":121847},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,121850,121851],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[42,121853,121855],{"className":119946,"code":121854,"language":119948,"meta":47,"style":47},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[49,121856,121857],{"__ignoreMap":47},[52,121858,121859,121861,121863],{"class":54,"line":55},[52,121860,27226],{"class":75},[52,121862,121233],{"class":62},[52,121864,121865],{"class":62}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,121867,121868,121869,121872],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[49,121870,121871],{},":wq"," 回车",[42,121874,121876],{"className":119946,"code":121875,"language":119948,"meta":47,"style":47},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[49,121877,121878,121885,121899],{"__ignoreMap":47},[52,121879,121880,121883],{"class":54,"line":55},[52,121881,121882],{"class":75},"Package:",[52,121884,121734],{"class":62},[52,121886,121887,121890,121893,121896],{"class":54,"line":66},[52,121888,121889],{"class":75},"Pin:",[52,121891,121892],{"class":62}," release",[52,121894,121895],{"class":62}," a=",[52,121897,121898],{"class":308},"*\n",[52,121900,121901,121904],{"class":54,"line":83},[52,121902,121903],{"class":75},"Pin-Priority:",[52,121905,121906],{"class":308}," -10\n",[14,121908,121909],{},[4509,121910],{"alt":47,"src":121911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[3195,121913,121915],{"id":121914},"_326-测试是否成功","3.2.6 测试是否成功",[42,121917,121919],{"className":119946,"code":121918,"language":119948,"meta":47,"style":47},"sudo apt update\nsudo apt install firefox\n",[49,121920,121921,121929],{"__ignoreMap":47},[52,121922,121923,121925,121927],{"class":54,"line":55},[52,121924,27226],{"class":75},[52,121926,119967],{"class":62},[52,121928,28892],{"class":62},[52,121930,121931,121933,121935,121937],{"class":54,"line":66},[52,121932,27226],{"class":75},[52,121934,119967],{"class":62},[52,121936,26483],{"class":62},[52,121938,121655],{"class":62},[14,121940,121941],{},"这里提示snapd无法被安装，就证明成功了",[14,121943,121944],{},[4509,121945],{"alt":47,"src":121946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[3195,121948,121950],{"id":121949},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,121952,121953],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,121955,121956],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,121958,121959],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[42,121961,121963],{"className":119946,"code":121962,"language":119948,"meta":47,"style":47},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[49,121964,121965,121970,121979,121984,121992],{"__ignoreMap":47},[52,121966,121967],{"class":54,"line":55},[52,121968,121969],{"class":94},"# 添加Mozilla提供的源\n",[52,121971,121972,121974,121976],{"class":54,"line":66},[52,121973,27226],{"class":75},[52,121975,121494],{"class":62},[52,121977,121978],{"class":62}," ppa:mozillateam\u002Fppa\n",[52,121980,121981],{"class":54,"line":83},[52,121982,121983],{"class":94},"# 安装Firefox\n",[52,121985,121986,121988,121990],{"class":54,"line":91},[52,121987,27226],{"class":75},[52,121989,119967],{"class":62},[52,121991,28892],{"class":62},[52,121993,121994,121996,121998,122000],{"class":54,"line":98},[52,121995,27226],{"class":75},[52,121997,119967],{"class":62},[52,121999,26483],{"class":62},[52,122001,121655],{"class":62},[3195,122003,122005],{"id":122004},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,122007,122008],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,122010,122011],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[42,122013,122015],{"className":119946,"code":122014,"language":119948,"meta":47,"style":47},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[49,122016,122017,122022,122032,122040,122044],{"__ignoreMap":47},[52,122018,122019],{"class":54,"line":55},[52,122020,122021],{"class":94},"#删掉禁止安装snap的配置文件\n",[52,122023,122024,122026,122028,122030],{"class":54,"line":66},[52,122025,27226],{"class":75},[52,122027,121203],{"class":62},[52,122029,27975],{"class":308},[52,122031,121865],{"class":62},[52,122033,122034,122036,122038],{"class":54,"line":83},[52,122035,27226],{"class":75},[52,122037,119967],{"class":62},[52,122039,28892],{"class":62},[52,122041,122042],{"class":54,"line":91},[52,122043,123],{"emptyLinePlaceholder":122},[52,122045,122046,122048,122050],{"class":54,"line":98},[52,122047,27226],{"class":75},[52,122049,119967],{"class":62},[52,122051,122052],{"class":62}," dist-update\n",[18,122054,122056],{"id":122055},"_33-中文输入法","3.3 中文输入法",[3195,122058,122060],{"id":122059},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,122062,122063],{},"官网下载搜狗输入法",[14,122065,122066],{},[4509,122067],{"alt":47,"src":122068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,122070,122071],{},[4509,122072],{"alt":47,"src":122073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,122075,122076],{},"打开终端输入如下",[42,122078,122080],{"className":119946,"code":122079,"language":119948,"meta":47,"style":47},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[49,122081,122082,122089],{"__ignoreMap":47},[52,122083,122084,122086],{"class":54,"line":55},[52,122085,103926],{"class":308},[52,122087,122088],{"class":62}," ~\u002FDownloads\u002F\n",[52,122090,122091,122093,122095,122097],{"class":54,"line":66},[52,122092,27226],{"class":75},[52,122094,119967],{"class":62},[52,122096,26483],{"class":62},[52,122098,122099],{"class":62}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,122101,122102],{},"打开Fcitx",[14,122104,122105,122108],{},[4509,122106],{"alt":47,"src":122107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[4509,122109],{"alt":47,"src":122110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,122112,122113],{},[4509,122114],{"alt":47,"src":122115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,122117,122118],{},"添加搜狗输入法",[14,122120,122121],{},[4509,122122],{"alt":47,"src":122123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,122125,122126],{},[4509,122127],{"alt":47,"src":122128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,122130,122131],{},"将搜狗输入法设置为唯一输入法",[14,122133,122134],{},[4509,122135],{"alt":47,"src":122136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[3195,122138,122140],{"id":122139},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[1696,122142,122143],{},[32,122144,122145],{},"卸载旧输入法",[42,122147,122149],{"className":121173,"code":122148,"language":121175,"meta":47,"style":47},"sudo apt purge fcitx* ibus*\n",[49,122150,122151],{"__ignoreMap":47},[52,122152,122153,122155,122157,122159,122162,122164,122167],{"class":54,"line":55},[52,122154,27226],{"class":75},[52,122156,119967],{"class":62},[52,122158,120308],{"class":62},[52,122160,122161],{"class":62}," fcitx",[52,122163,3053],{"class":308},[52,122165,122166],{"class":62}," ibus",[52,122168,121898],{"class":308},[1696,122170,122171],{"start":66},[32,122172,122173],{},"安装Fcitx5",[42,122175,122177],{"className":119946,"code":122176,"language":119948,"meta":47,"style":47},"# 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",[49,122178,122179,122184,122198,122202,122207,122216,122224],{"__ignoreMap":47},[52,122180,122181],{"class":54,"line":55},[52,122182,122183],{"class":94},"# Ubuntu22.04及以上、Debian12及以上\n",[52,122185,122186,122188,122190,122192,122195],{"class":54,"line":66},[52,122187,27226],{"class":75},[52,122189,119967],{"class":62},[52,122191,26483],{"class":62},[52,122193,122194],{"class":62}," fcitx5",[52,122196,122197],{"class":62}," fcitx5-chinese-addons\n",[52,122199,122200],{"class":54,"line":83},[52,122201,123],{"emptyLinePlaceholder":122},[52,122203,122204],{"class":54,"line":91},[52,122205,122206],{"class":94},"# Ubuntu20.04\n",[52,122208,122209,122211,122213],{"class":54,"line":98},[52,122210,27226],{"class":75},[52,122212,121494],{"class":62},[52,122214,122215],{"class":62}," ppa:zhsj\u002Ffcitx5\n",[52,122217,122218,122220,122222],{"class":54,"line":107},[52,122219,27226],{"class":75},[52,122221,119967],{"class":62},[52,122223,28892],{"class":62},[52,122225,122226,122228,122230,122232,122234],{"class":54,"line":113},[52,122227,27226],{"class":75},[52,122229,119967],{"class":62},[52,122231,26483],{"class":62},[52,122233,122194],{"class":62},[52,122235,122197],{"class":62},[1696,122237,122238,122241],{"start":83},[32,122239,122240],{},"Reboot System",[32,122242,122243],{},"启动Fcitx5",[14,122245,122246],{},[4509,122247],{"alt":47,"src":122248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[1696,122250,122251],{"start":98},[32,122252,122253],{},"修改一些设置",[14,122255,122256],{},"将Pinyin和Keyboard - English US加入到左边。",[14,122258,122259],{},[4509,122260],{"alt":47,"src":122261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,122263,122264],{},"添加快捷键以便于更好切换中英文",[14,122266,122267],{},[4509,122268],{"alt":47,"src":122269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[1696,122271,122272],{"start":107},[32,122273,122274],{},"重启",[42,122276,122278],{"className":121173,"code":122277,"language":121175,"meta":47,"style":47},"sudo shutdown -r now\n",[49,122279,122280],{"__ignoreMap":47},[52,122281,122282,122284,122287,122290],{"class":54,"line":55},[52,122283,27226],{"class":75},[52,122285,122286],{"class":62}," shutdown",[52,122288,122289],{"class":308}," -r",[52,122291,122292],{"class":62}," now\n",[1696,122294,122295],{"start":113},[32,122296,122297],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,122299,122300],{},[3451,122301,122302],{"href":122302,"rel":122303},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[26514],[1696,122305,122306],{"start":119},[32,122307,122308],{},"再重启",[42,122310,122311],{"className":121173,"code":122277,"language":121175,"meta":47,"style":47},[49,122312,122313],{"__ignoreMap":47},[52,122314,122315,122317,122319,122321],{"class":54,"line":55},[52,122316,27226],{"class":75},[52,122318,122286],{"class":62},[52,122320,122289],{"class":308},[52,122322,122292],{"class":62},[18,122324,122326],{"id":122325},"_34-pip3源替换","3.4 pip3源替换",[14,122328,122329],{},"非Debian系发行版需要做。",[14,122331,122332],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,122334,122335],{},"使用dnf的系统也可能不用做。",[42,122337,122339],{"className":119946,"code":122338,"language":119948,"meta":47,"style":47},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[49,122340,122341,122346,122353,122358,122363],{"__ignoreMap":47},[52,122342,122343],{"class":54,"line":55},[52,122344,122345],{"class":94},"# 检查是否已安装 pip\n",[52,122347,122348,122351],{"class":54,"line":66},[52,122349,122350],{"class":75},"pip3",[52,122352,28943],{"class":308},[52,122354,122355],{"class":54,"line":83},[52,122356,122357],{"class":94},"# 如果未安装，先安装 pip3（见下方）\n",[52,122359,122360],{"class":54,"line":91},[52,122361,122362],{"class":94},"# 配置 pip 使用清华源\n",[52,122364,122365,122367,122370,122373,122376],{"class":54,"line":98},[52,122366,122350],{"class":75},[52,122368,122369],{"class":62}," config",[52,122371,122372],{"class":62}," set",[52,122374,122375],{"class":62}," global.index-url",[52,122377,122378],{"class":62}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,122380,122381],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,122383,122384],{},[4509,122385],{"alt":47,"src":122386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[42,122388,122390],{"className":119946,"code":122389,"language":119948,"meta":47,"style":47},"#安装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",[49,122391,122392,122397,122405,122416,122420,122425,122444,122448,122453,122465,122469,122474],{"__ignoreMap":47},[52,122393,122394],{"class":54,"line":55},[52,122395,122396],{"class":94},"#安装pip3\n",[52,122398,122399,122401,122403],{"class":54,"line":66},[52,122400,27226],{"class":75},[52,122402,119967],{"class":62},[52,122404,28892],{"class":62},[52,122406,122407,122409,122411,122413],{"class":54,"line":83},[52,122408,27226],{"class":75},[52,122410,28726],{"class":62},[52,122412,26483],{"class":62},[52,122414,122415],{"class":62}," python3-pip\n",[52,122417,122418],{"class":54,"line":91},[52,122419,123],{"emptyLinePlaceholder":122},[52,122421,122422],{"class":54,"line":98},[52,122423,122424],{"class":94},"#更新pip3\n",[52,122426,122427,122429,122431,122433,122435,122437,122440,122442],{"class":54,"line":107},[52,122428,103529],{"class":75},[52,122430,103532],{"class":308},[52,122432,103555],{"class":62},[52,122434,26483],{"class":62},[52,122436,29080],{"class":308},[52,122438,122439],{"class":62}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[52,122441,103560],{"class":308},[52,122443,103563],{"class":62},[52,122445,122446],{"class":54,"line":113},[52,122447,123],{"emptyLinePlaceholder":122},[52,122449,122450],{"class":54,"line":119},[52,122451,122452],{"class":94},"#设置pip源为清华源\n",[52,122454,122455,122457,122459,122461,122463],{"class":54,"line":126},[52,122456,122350],{"class":75},[52,122458,122369],{"class":62},[52,122460,122372],{"class":62},[52,122462,122375],{"class":62},[52,122464,122378],{"class":62},[52,122466,122467],{"class":54,"line":132},[52,122468,123],{"emptyLinePlaceholder":122},[52,122470,122471],{"class":54,"line":138},[52,122472,122473],{"class":94},"#测试\n",[52,122475,122476,122478,122480,122482,122484,122486],{"class":54,"line":144},[52,122477,103529],{"class":75},[52,122479,103532],{"class":308},[52,122481,103555],{"class":62},[52,122483,26483],{"class":62},[52,122485,103560],{"class":308},[52,122487,103563],{"class":62},[14,122489,122490],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,122492,122493],{},[4509,122494],{"alt":47,"src":122495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[18,122497,122499],{"id":122498},"_35-显卡驱动安装","3.5 显卡驱动安装",[3195,122501,122503],{"id":122502},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[42,122505,122507],{"className":121173,"code":122506,"language":121175,"meta":47,"style":47},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[49,122508,122509,122514,122529,122534],{"__ignoreMap":47},[52,122510,122511],{"class":54,"line":55},[52,122512,122513],{"class":94},"# 如果是使用apt安装的驱动\n",[52,122515,122516,122518,122520,122522,122524,122527],{"class":54,"line":66},[52,122517,27226],{"class":75},[52,122519,28726],{"class":62},[52,122521,28729],{"class":62},[52,122523,121808],{"class":308},[52,122525,122526],{"class":62}," nvidia",[52,122528,121898],{"class":308},[52,122530,122531],{"class":54,"line":83},[52,122532,122533],{"class":94},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[52,122535,122536,122538],{"class":54,"line":91},[52,122537,27226],{"class":75},[52,122539,122540],{"class":62}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[3195,122542,122544],{"id":122543},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[24646,122546,122548],{"id":122547},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[25558,122550,122552],{"id":122551},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[42,122554,122556],{"className":121173,"code":122555,"language":121175,"meta":47,"style":47},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[49,122557,122558,122563,122574,122579,122589,122594],{"__ignoreMap":47},[52,122559,122560],{"class":54,"line":55},[52,122561,122562],{"class":94},"# 安装英伟达驱动\n",[52,122564,122565,122567,122569,122571],{"class":54,"line":66},[52,122566,27226],{"class":75},[52,122568,119967],{"class":62},[52,122570,26483],{"class":62},[52,122572,122573],{"class":62}," nvidia-driver-版本号\n",[52,122575,122576],{"class":54,"line":83},[52,122577,122578],{"class":94},"# 重启 \n",[52,122580,122581,122583,122585,122587],{"class":54,"line":91},[52,122582,27226],{"class":75},[52,122584,122286],{"class":62},[52,122586,122289],{"class":308},[52,122588,122292],{"class":62},[52,122590,122591],{"class":54,"line":98},[52,122592,122593],{"class":94},"# 检查驱动是否安装成功\n",[52,122595,122596],{"class":54,"line":107},[52,122597,122598],{"class":75},"nvidia-smi\n",[25558,122600,122602],{"id":122601},"_35212-debian","3.5.2.1.2 Debian",[42,122604,122606],{"className":121173,"code":122605,"language":121175,"meta":47,"style":47},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[49,122607,122608,122612,122626,122630,122640,122644],{"__ignoreMap":47},[52,122609,122610],{"class":54,"line":55},[52,122611,122562],{"class":94},[52,122613,122614,122616,122618,122620,122623],{"class":54,"line":66},[52,122615,27226],{"class":75},[52,122617,119967],{"class":62},[52,122619,26483],{"class":62},[52,122621,122622],{"class":62}," nvidia-driver",[52,122624,122625],{"class":62}," nvidia-settings\n",[52,122627,122628],{"class":54,"line":83},[52,122629,122578],{"class":94},[52,122631,122632,122634,122636,122638],{"class":54,"line":91},[52,122633,27226],{"class":75},[52,122635,122286],{"class":62},[52,122637,122289],{"class":308},[52,122639,122292],{"class":62},[52,122641,122642],{"class":54,"line":98},[52,122643,122593],{"class":94},[52,122645,122646],{"class":54,"line":107},[52,122647,122598],{"class":75},[24646,122649,122651],{"id":122650},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,122653,122654,122655,122658],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2389,122656,122657],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,122660,122661,122662],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[26202,122663,122664],{},[2389,122665,122666],{},"（也可以不禁用桌面环境，直接进行下一步。）",[42,122668,122670],{"className":121173,"code":122669,"language":121175,"meta":47,"style":47},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[49,122671,122672,122677,122687,122692,122705,122710],{"__ignoreMap":47},[52,122673,122674],{"class":54,"line":55},[52,122675,122676],{"class":94},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[52,122678,122679,122681,122684],{"class":54,"line":66},[52,122680,27226],{"class":75},[52,122682,122683],{"class":62}," telinit",[52,122685,122686],{"class":308}," 3\n",[52,122688,122689],{"class":54,"line":83},[52,122690,122691],{"class":94},"# ubuntu 使用下方命令\n",[52,122693,122694,122696,122699,122702],{"class":54,"line":91},[52,122695,27226],{"class":75},[52,122697,122698],{"class":62}," service",[52,122700,122701],{"class":62}," lightdm",[52,122703,122704],{"class":62}," stop\n",[52,122706,122707],{"class":54,"line":98},[52,122708,122709],{"class":94},"# Fedora 使用下方命令\n",[52,122711,122712,122714,122716,122719],{"class":54,"line":107},[52,122713,27226],{"class":75},[52,122715,29163],{"class":62},[52,122717,122718],{"class":62}," isolate",[52,122720,122721],{"class":62}," multi-user.target\n",[14,122723,122724],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[42,122726,122728],{"className":121173,"code":122727,"language":121175,"meta":47,"style":47},"# 编译环境+准备工作\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",[49,122729,122730,122735,122746,122751,122758,122763,122775,122780,122787,122792],{"__ignoreMap":47},[52,122731,122732],{"class":54,"line":55},[52,122733,122734],{"class":94},"# 编译环境+准备工作\n",[52,122736,122737,122739,122741,122743],{"class":54,"line":66},[52,122738,27226],{"class":75},[52,122740,119967],{"class":62},[52,122742,26483],{"class":62},[52,122744,122745],{"class":62}," build-essential\n",[52,122747,122748],{"class":54,"line":83},[52,122749,122750],{"class":94},"# 进入到.run目录中\n",[52,122752,122753,122755],{"class":54,"line":91},[52,122754,103926],{"class":308},[52,122756,122757],{"class":62}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[52,122759,122760],{"class":54,"line":98},[52,122761,122762],{"class":94},"# 给驱动文件增加可执行权限：\n",[52,122764,122765,122767,122769,122772],{"class":54,"line":107},[52,122766,27226],{"class":75},[52,122768,27229],{"class":62},[52,122770,122771],{"class":62}," a+x",[52,122773,122774],{"class":62}," NVIDIA-Linux-x86_64-550.107.02.run\n",[52,122776,122777],{"class":54,"line":113},[52,122778,122779],{"class":94},"# 然后执行安装：\n",[52,122781,122782,122784],{"class":54,"line":119},[52,122783,27226],{"class":75},[52,122785,122786],{"class":62}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[52,122788,122789],{"class":54,"line":126},[52,122790,122791],{"class":94},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[52,122793,122794,122796,122799],{"class":54,"line":132},[52,122795,27226],{"class":75},[52,122797,122798],{"class":62}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[52,122800,122801],{"class":308},"  --no-opengl-files\n",[14,122803,122804],{},"安装完毕重启即可",[42,122806,122808],{"className":121173,"code":122807,"language":121175,"meta":47,"style":47},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[49,122809,122810,122814,122820,122824],{"__ignoreMap":47},[52,122811,122812],{"class":54,"line":55},[52,122813,122578],{"class":94},[52,122815,122816,122818],{"class":54,"line":66},[52,122817,27226],{"class":75},[52,122819,29297],{"class":62},[52,122821,122822],{"class":54,"line":83},[52,122823,122593],{"class":94},[52,122825,122826],{"class":54,"line":91},[52,122827,122598],{"class":75},[3195,122829,122831],{"id":122830},"_353-安装cuda","3.5.3 安装CUDA",[14,122833,122834],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,122836,122837],{},[4509,122838],{"alt":47,"src":122839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[1696,122841,122842],{},[32,122843,122844],{},"先查看显卡驱动所支持的最高CUDA版本",[42,122846,122847],{"className":121173,"code":122598,"language":121175,"meta":47,"style":47},[49,122848,122849],{"__ignoreMap":47},[52,122850,122851],{"class":54,"line":55},[52,122852,122598],{"class":75},[14,122854,122855],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,122857,122858],{},[4509,122859],{"alt":47,"src":122860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[1696,122862,122863],{"start":66},[32,122864,122865],{},"下载CUDA并安装CUDA",[14,122867,120952,122868],{},[3451,122869,120955],{"href":120955,"rel":122870},[26514],[14,122872,122873],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,122875,122876],{},[4509,122877],{"alt":47,"src":122878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,122880,122881,122882,122887],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[3451,122883,122886],{"href":122884,"rel":122885},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[26514],"Vinci机器人队单片机教程","）",[14,122889,122890],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,122892,122893],{},[4509,122894],{"alt":47,"src":122895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,122897,122898],{},"将最下方框框里的命令敲入终端",[42,122900,122902],{"className":121173,"code":122901,"language":121175,"meta":47,"style":47},"# 在当前文件夹下创建一个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",[49,122903,122904,122909,122918,122923,122930,122935,122943,122948,122959,122964],{"__ignoreMap":47},[52,122905,122906],{"class":54,"line":55},[52,122907,122908],{"class":94},"# 在当前文件夹下创建一个ttt的子文件夹\n",[52,122910,122911,122913,122915],{"class":54,"line":66},[52,122912,103916],{"class":75},[52,122914,31866],{"class":308},[52,122916,122917],{"class":62}," .\u002Fttt\n",[52,122919,122920],{"class":54,"line":83},[52,122921,122922],{"class":94},"# 进入ttt文件夹\n",[52,122924,122925,122927],{"class":54,"line":91},[52,122926,103926],{"class":308},[52,122928,122929],{"class":62}," ttt\n",[52,122931,122932],{"class":54,"line":98},[52,122933,122934],{"class":94},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[52,122936,122937,122940],{"class":54,"line":107},[52,122938,122939],{"class":75},"wget",[52,122941,122942],{"class":62}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[52,122944,122945],{"class":54,"line":113},[52,122946,122947],{"class":94},"# 给予权限\n",[52,122949,122950,122952,122954,122956],{"class":54,"line":119},[52,122951,27226],{"class":75},[52,122953,27229],{"class":62},[52,122955,122771],{"class":62},[52,122957,122958],{"class":62}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[52,122960,122961],{"class":54,"line":126},[52,122962,122963],{"class":94},"# 运行脚本\n",[52,122965,122966,122968],{"class":54,"line":132},[52,122967,27226],{"class":75},[52,122969,122958],{"class":62},[14,122971,122972],{},[4509,122973],{"alt":47,"src":122974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,122976,122977],{},"正在安装中：",[14,122979,122980],{},[4509,122981],{"alt":47,"src":122982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,122984,122985],{},"输入accept接受即可",[14,122987,122988],{},[4509,122989],{"alt":47,"src":122990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,122992,122993],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,122995,122996],{},[4509,122997],{"alt":47,"src":122998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,123000,123001],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,123003,123004],{},[4509,123005],{"alt":47,"src":123006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[1696,123008,123009],{"start":83},[32,123010,123011],{},"配置环境",[14,123013,123014],{},"根据上方确认一下路径，比如我上面红色框起来的为",[42,123016,123018],{"className":121173,"code":123017,"language":121175,"meta":47,"style":47},"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",[49,123019,123020,123036,123051],{"__ignoreMap":47},[52,123021,123022,123025,123028,123031,123034],{"class":54,"line":55},[52,123023,123024],{"class":75},"Please",[52,123026,123027],{"class":62}," make",[52,123029,123030],{"class":62}," sure",[52,123032,123033],{"class":62}," that",[52,123035,963],{"class":79},[52,123037,123038,123040,123043,123046,123049],{"class":54,"line":66},[52,123039,54921],{"class":75},[52,123041,123042],{"class":62},"   PATH",[52,123044,123045],{"class":62}," includes",[52,123047,123048],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[52,123050,963],{"class":79},[52,123052,123053,123055,123058,123060,123063,123066,123068,123071,123074,123077,123080,123082,123085,123087],{"class":54,"line":83},[52,123054,54921],{"class":75},[52,123056,123057],{"class":62},"   LD_LIBRARY_PATH",[52,123059,123045],{"class":62},[52,123061,123062],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[52,123064,123065],{"class":62}," or,",[52,123067,8176],{"class":62},[52,123069,123070],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[52,123072,123073],{"class":62}," to",[52,123075,123076],{"class":62}," \u002Fetc\u002Fld.so.conf",[52,123078,123079],{"class":62}," and",[52,123081,29880],{"class":62},[52,123083,123084],{"class":62}," ldconfig",[52,123086,67254],{"class":62},[52,123088,123089],{"class":62}," root\n",[14,123091,123092],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[42,123094,123096],{"className":121173,"code":123095,"language":121175,"meta":47,"style":47},"which nvcc\n",[49,123097,123098],{"__ignoreMap":47},[52,123099,123100,123103],{"class":54,"line":55},[52,123101,123102],{"class":308},"which",[52,123104,123105],{"class":62}," nvcc\n",[14,123107,123108],{},[4509,123109],{"alt":47,"src":123110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,123112,123113],{},"所以我进行以下操作：",[42,123115,123117],{"className":121173,"code":123116,"language":121175,"meta":47,"style":47},"sudo vim ~\u002F.bashrc\n",[49,123118,123119],{"__ignoreMap":47},[52,123120,123121,123123,123125],{"class":54,"line":55},[52,123122,27226],{"class":75},[52,123124,121233],{"class":62},[52,123126,123127],{"class":62}," ~\u002F.bashrc\n",[14,123129,123130],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[42,123132,123134],{"className":121173,"code":123133,"language":121175,"meta":47,"style":47},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[49,123135,123136,123148],{"__ignoreMap":47},[52,123137,123138,123140,123143,123145],{"class":54,"line":55},[52,123139,27692],{"class":58},[52,123141,123142],{"class":79}," PATH",[52,123144,292],{"class":58},[52,123146,123147],{"class":79},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[52,123149,123150,123152,123155,123157],{"class":54,"line":66},[52,123151,27692],{"class":58},[52,123153,123154],{"class":79}," LD_LIBRARY_PATH",[52,123156,292],{"class":58},[52,123158,123159],{"class":79},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,123161,123162],{},[4509,123163],{"alt":47,"src":123164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[42,123166,123168],{"className":121173,"code":123167,"language":121175,"meta":47,"style":47},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[49,123169,123170,123175,123181,123186],{"__ignoreMap":47},[52,123171,123172],{"class":54,"line":55},[52,123173,123174],{"class":94},"# 刷新当前终端的环境变量\n",[52,123176,123177,123179],{"class":54,"line":66},[52,123178,103543],{"class":308},[52,123180,123127],{"class":62},[52,123182,123183],{"class":54,"line":83},[52,123184,123185],{"class":94},"# 验证CUDA是否安装成功\n",[52,123187,123188,123191],{"class":54,"line":91},[52,123189,123190],{"class":75},"nvcc",[52,123192,123193],{"class":308}," -V\n",[14,123195,123196],{},"出现下图这种则安装成功。",[14,123198,123199],{},[4509,123200],{"alt":47,"src":123201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[3195,123203,123205],{"id":123204},"_354-安装cudnn","3.5.4 安装cuDNN",[1696,123207,123208],{},[32,123209,123210],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,123212,123213,123214,123219],{},"前往 NVIDIA cuDNN 下载页面：",[3451,123215,123218],{"href":123216,"rel":123217},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[26514],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,123221,123222],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,123224,123225],{},[4509,123226],{"alt":47,"src":123227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,123229,123230],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,123232,123233],{},[4509,123234],{"alt":47,"src":123235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,123237,123238],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,123240,123241],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,123243,123244],{},[2389,123245,123246],{},"我这里选择所有Linux X86_64最通用的办法：",[14,123248,123249],{},"下载好的：",[14,123251,123252],{},[4509,123253],{"alt":47,"src":123254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[1696,123256,123257],{"start":66},[32,123258,123259],{},"安装cuDNN",[14,123261,123262],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,123264,123265],{},[4509,123266],{"alt":47,"src":123267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,123269,123270],{},"解压文件，并复制到对应位置完成安装",[42,123272,123274],{"className":121173,"code":123273,"language":121175,"meta":47,"style":47},"# 解压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",[49,123275,123276,123281,123292,123297,123304,123309,123325,123339,123344,123355,123364,123368,123384],{"__ignoreMap":47},[52,123277,123278],{"class":54,"line":55},[52,123279,123280],{"class":94},"# 解压cuDNN文件\n",[52,123282,123283,123286,123289],{"class":54,"line":66},[52,123284,123285],{"class":75},"tar",[52,123287,123288],{"class":308}," -xvf",[52,123290,123291],{"class":62}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[52,123293,123294],{"class":54,"line":83},[52,123295,123296],{"class":94},"# cd进文件夹\n",[52,123298,123299,123301],{"class":54,"line":91},[52,123300,103926],{"class":308},[52,123302,123303],{"class":62}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[52,123305,123306],{"class":54,"line":98},[52,123307,123308],{"class":94},"# 复制cuDNN文件到CUDA目录\n",[52,123310,123311,123313,123315,123318,123320,123323],{"class":54,"line":107},[52,123312,27226],{"class":75},[52,123314,30511],{"class":62},[52,123316,123317],{"class":62}," include\u002Fcudnn",[52,123319,3053],{"class":308},[52,123321,123322],{"class":62},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[52,123324,963],{"class":79},[52,123326,123327,123329,123331,123334,123336],{"class":54,"line":113},[52,123328,27226],{"class":75},[52,123330,30511],{"class":62},[52,123332,123333],{"class":62}," lib\u002Flibcudnn",[52,123335,3053],{"class":308},[52,123337,123338],{"class":62},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[52,123340,123341],{"class":54,"line":119},[52,123342,123343],{"class":94},"# 对比一下有没有缺文件\n",[52,123345,123346,123348,123351,123353],{"class":54,"line":126},[52,123347,29411],{"class":75},[52,123349,123350],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[52,123352,3053],{"class":308},[52,123354,963],{"class":79},[52,123356,123357,123359,123362],{"class":54,"line":132},[52,123358,29411],{"class":75},[52,123360,123361],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[52,123363,121898],{"class":308},[52,123365,123366],{"class":54,"line":138},[52,123367,122947],{"class":94},[52,123369,123370,123372,123374,123377,123379,123381],{"class":54,"line":144},[52,123371,27226],{"class":75},[52,123373,27229],{"class":62},[52,123375,123376],{"class":62}," a+r",[52,123378,123350],{"class":62},[52,123380,3053],{"class":308},[52,123382,123383],{"class":79},"   \n",[52,123385,123386,123388,123390,123392,123394],{"class":54,"line":153},[52,123387,27226],{"class":75},[52,123389,27229],{"class":62},[52,123391,123376],{"class":62},[52,123393,123361],{"class":62},[52,123395,121898],{"class":308},[1696,123397,123398],{"start":83},[32,123399,123400],{},"检查是否安装成功",[42,123402,123404],{"className":121173,"code":123403,"language":121175,"meta":47,"style":47},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[49,123405,123406,123411],{"__ignoreMap":47},[52,123407,123408],{"class":54,"line":55},[52,123409,123410],{"class":94},"# 检查cuDNN版本命令\n",[52,123412,123413,123416,123419,123421,123423,123426,123429],{"class":54,"line":66},[52,123414,123415],{"class":75},"cat",[52,123417,123418],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[52,123420,27759],{"class":58},[52,123422,32886],{"class":75},[52,123424,123425],{"class":62}," CUDNN_MAJOR",[52,123427,123428],{"class":308}," -A",[52,123430,50373],{"class":308},[14,123432,123433],{},"出现下图这样的就是安装成功了",[14,123435,123436],{},[4509,123437],{"alt":47,"src":123438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[1696,123440,123441],{"start":91},[32,123442,123443],{},"软链接(一般不需要)",[42,123445,123447],{"className":121173,"code":123446,"language":121175,"meta":47,"style":47},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[49,123448,123449,123454],{"__ignoreMap":47},[52,123450,123451],{"class":54,"line":55},[52,123452,123453],{"class":94},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[52,123455,123456,123458],{"class":54,"line":66},[52,123457,27226],{"class":75},[52,123459,123460],{"class":62}," ldconfig\n",[14,123462,123463],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[42,123465,123470],{"className":123466,"code":123467,"language":123468,"meta":123469,"style":47},"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",[49,123471,123472,123477,123482,123487,123492,123497,123502],{"__ignoreMap":47},[52,123473,123474],{"class":54,"line":55},[52,123475,123476],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[52,123478,123479],{"class":54,"line":66},[52,123480,123481],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[52,123483,123484],{"class":54,"line":83},[52,123485,123486],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[52,123488,123489],{"class":54,"line":91},[52,123490,123491],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[52,123493,123494],{"class":54,"line":98},[52,123495,123496],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[52,123498,123499],{"class":54,"line":107},[52,123500,123501],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[52,123503,123504],{"class":54,"line":113},[52,123505,123506],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,123508,123509],{},"运行下方的命令",[42,123511,123513],{"className":121173,"code":123512,"language":121175,"meta":47,"style":47},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[49,123514,123515,123520,123527,123532],{"__ignoreMap":47},[52,123516,123517],{"class":54,"line":55},[52,123518,123519],{"class":94},"# cd进入CUDA路径\n",[52,123521,123522,123524],{"class":54,"line":66},[52,123523,103926],{"class":308},[52,123525,123526],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[52,123528,123529],{"class":54,"line":83},[52,123530,123531],{"class":94}," # 查看本路径下的需要软链接的文件名\n",[52,123533,123534],{"class":54,"line":91},[52,123535,123536],{"class":75}," ls\n",[14,123538,123539],{},[4509,123540],{"alt":47,"src":123541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,123543,123544,123545,21058,123548,21058,123551,123554],{},"如上图，我需要将",[49,123546,123547],{},"libcudnn_xxx_xxxxx.so.8.9.7",[49,123549,123550],{},"libcudnn_xxx_xxxxx.so.8",[49,123552,123553],{},"libcudnn_xxx_xxxxx.so","软链接",[42,123556,123558],{"className":121173,"code":123557,"language":121175,"meta":47,"style":47},"# 创建符号链接。对于每个 .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",[49,123559,123560,123565,123581,123595,123609,123623,123637,123651,123665,123670,123676,123681],{"__ignoreMap":47},[52,123561,123562],{"class":54,"line":55},[52,123563,123564],{"class":94},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[52,123566,123567,123569,123572,123575,123578],{"class":54,"line":66},[52,123568,27226],{"class":75},[52,123570,123571],{"class":62}," ln",[52,123573,123574],{"class":308}," -sf",[52,123576,123577],{"class":62}," libcudnn_cnn_train.so.8.9.7",[52,123579,123580],{"class":62}," libcudnn_cnn_train.so.8\n",[52,123582,123583,123585,123587,123589,123592],{"class":54,"line":83},[52,123584,27226],{"class":75},[52,123586,123571],{"class":62},[52,123588,123574],{"class":308},[52,123590,123591],{"class":62}," libcudnn_adv_infer.so.8.9.7",[52,123593,123594],{"class":62}," libcudnn_adv_infer.so.8\n",[52,123596,123597,123599,123601,123603,123606],{"class":54,"line":91},[52,123598,27226],{"class":75},[52,123600,123571],{"class":62},[52,123602,123574],{"class":308},[52,123604,123605],{"class":62}," libcudnn_adv_train.so.8.9.7",[52,123607,123608],{"class":62}," libcudnn_adv_train.so.8\n",[52,123610,123611,123613,123615,123617,123620],{"class":54,"line":98},[52,123612,27226],{"class":75},[52,123614,123571],{"class":62},[52,123616,123574],{"class":308},[52,123618,123619],{"class":62}," libcudnn_cnn_infer.so.8.9.7",[52,123621,123622],{"class":62}," libcudnn_cnn_infer.so.8\n",[52,123624,123625,123627,123629,123631,123634],{"class":54,"line":107},[52,123626,27226],{"class":75},[52,123628,123571],{"class":62},[52,123630,123574],{"class":308},[52,123632,123633],{"class":62}," libcudnn.so.8.9.7",[52,123635,123636],{"class":62}," libcudnn.so.8\n",[52,123638,123639,123641,123643,123645,123648],{"class":54,"line":113},[52,123640,27226],{"class":75},[52,123642,123571],{"class":62},[52,123644,123574],{"class":308},[52,123646,123647],{"class":62}," libcudnn_ops_infer.so.8.9.7",[52,123649,123650],{"class":62}," libcudnn_ops_infer.so.8\n",[52,123652,123653,123655,123657,123659,123662],{"class":54,"line":119},[52,123654,27226],{"class":75},[52,123656,123571],{"class":62},[52,123658,123574],{"class":308},[52,123660,123661],{"class":62}," libcudnn_ops_train.so.8.9.7",[52,123663,123664],{"class":62}," libcudnn_ops_train.so.8\n",[52,123666,123667],{"class":54,"line":126},[52,123668,123669],{"class":94},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[52,123671,123672,123674],{"class":54,"line":132},[52,123673,27226],{"class":75},[52,123675,123460],{"class":62},[52,123677,123678],{"class":54,"line":138},[52,123679,123680],{"class":94},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[52,123682,123683,123685,123688,123691,123693,123696],{"class":54,"line":144},[52,123684,29411],{"class":75},[52,123686,123687],{"class":308}," -l",[52,123689,123690],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[52,123692,3053],{"class":308},[52,123694,123695],{"class":62},".so",[52,123697,121898],{"class":308},[3195,123699,123701],{"id":123700},"_355-常见问题","3.5.5 常见问题",[1696,123703,123704],{},[32,123705,123706],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[42,123708,123710],{"className":121173,"code":123709,"language":121175,"meta":47,"style":47},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[49,123711,123712],{"__ignoreMap":47},[52,123713,123714,123716,123718],{"class":54,"line":55},[52,123715,27226],{"class":75},[52,123717,121233],{"class":62},[52,123719,123720],{"class":62}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,123722,123723],{},"blacklist-nouveau.conf文件内容如下：",[42,123725,123727],{"className":121173,"code":123726,"language":121175,"meta":47,"style":47},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[49,123728,123729,123737,123744,123756,123766],{"__ignoreMap":47},[52,123730,123731,123734],{"class":54,"line":55},[52,123732,123733],{"class":75},"blacklist",[52,123735,123736],{"class":62}," nouveau\n",[52,123738,123739,123741],{"class":54,"line":66},[52,123740,123733],{"class":75},[52,123742,123743],{"class":62}," lbm-nouveau\n",[52,123745,123746,123748,123751,123754],{"class":54,"line":83},[52,123747,118580],{"class":75},[52,123749,123750],{"class":62}," nouveau",[52,123752,123753],{"class":62}," modeset=",[52,123755,6072],{"class":308},[52,123757,123758,123761,123763],{"class":54,"line":91},[52,123759,123760],{"class":308},"alias",[52,123762,123750],{"class":62},[52,123764,123765],{"class":62}," off\n",[52,123767,123768,123770,123773],{"class":54,"line":98},[52,123769,123760],{"class":308},[52,123771,123772],{"class":62}," lbm-nouveau",[52,123774,123765],{"class":62},[14,123776,123777],{},"接着运行下方命令",[42,123779,123781],{"className":121173,"code":123780,"language":121175,"meta":47,"style":47},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[49,123782,123783,123793,123798],{"__ignoreMap":47},[52,123784,123785,123787,123790],{"class":54,"line":55},[52,123786,27226],{"class":75},[52,123788,123789],{"class":62}," update-initramfs",[52,123791,123792],{"class":308}," -u\n",[52,123794,123795],{"class":54,"line":66},[52,123796,123797],{"class":75},"或者\n",[52,123799,123800,123802,123805],{"class":54,"line":83},[52,123801,27226],{"class":75},[52,123803,123804],{"class":62}," dracut",[52,123806,123807],{"class":308}," --force\n",[14,123809,123810],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[42,123812,123814],{"className":121173,"code":123813,"language":121175,"meta":47,"style":47},"lsmod | grep nouveau\n",[49,123815,123816],{"__ignoreMap":47},[52,123817,123818,123821,123823,123825],{"class":54,"line":55},[52,123819,123820],{"class":75},"lsmod",[52,123822,27759],{"class":58},[52,123824,32886],{"class":75},[52,123826,123736],{"class":62},[1696,123828,123829],{"start":66},[32,123830,123831],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[42,123833,123835],{"className":121173,"code":123834,"language":121175,"meta":47,"style":47},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[49,123836,123837],{"__ignoreMap":47},[52,123838,123839,123841,123843],{"class":54,"line":55},[52,123840,27226],{"class":75},[52,123842,121233],{"class":62},[52,123844,123845],{"class":62}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,123847,123848],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[42,123850,123852],{"className":121173,"code":123851,"language":121175,"meta":47,"style":47},"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",[49,123853,123854,123862,123870,123878,123885,123893,123903,123911],{"__ignoreMap":47},[52,123855,123856,123859],{"class":54,"line":55},[52,123857,123858],{"class":75},"Section",[52,123860,123861],{"class":62}," \"OutputClass\"\n",[52,123863,123864,123867],{"class":54,"line":66},[52,123865,123866],{"class":75},"   Identifier",[52,123868,123869],{"class":62}," \"nvidia\"\n",[52,123871,123872,123875],{"class":54,"line":83},[52,123873,123874],{"class":75},"   MatchDriver",[52,123876,123877],{"class":62}," \"nvidia-drm\"\n",[52,123879,123880,123883],{"class":54,"line":91},[52,123881,123882],{"class":75},"   Driver",[52,123884,123869],{"class":62},[52,123886,123887,123890],{"class":54,"line":98},[52,123888,123889],{"class":75},"   Option",[52,123891,123892],{"class":62}," \"AllowEmptyInitialConfiguration\"\n",[52,123894,123895,123897,123900],{"class":54,"line":107},[52,123896,123889],{"class":75},[52,123898,123899],{"class":62}," \"PrimaryGPU\"",[52,123901,123902],{"class":62}," \"yes\"\n",[52,123904,123905,123908],{"class":54,"line":113},[52,123906,123907],{"class":75},"   ModulePath",[52,123909,123910],{"class":62}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[52,123912,123913],{"class":54,"line":119},[52,123914,123915],{"class":75},"EndSection\n",[1696,123917,123918],{"start":83},[32,123919,123920],{},"安装N卡驱动提示错误",[42,123922,123924],{"className":123466,"code":123923,"language":123468,"meta":123469,"style":47},"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",[49,123925,123926],{"__ignoreMap":47},[52,123927,123928],{"class":54,"line":55},[52,123929,123923],{},[1696,123931,123932],{},[32,123933,123934],{},"检查当前运行的内核版本：",[14,123936,123937],{},"运行以下命令以查看你当前正在使用的内核版本：",[42,123939,123941],{"className":119946,"code":123940,"language":119948,"meta":47,"style":47},"uname -r\n",[49,123942,123943],{"__ignoreMap":47},[52,123944,123945,123947],{"class":54,"line":55},[52,123946,72854],{"class":75},[52,123948,123949],{"class":308}," -r\n",[1696,123951,123952],{"start":66},[32,123953,123954],{},"安装内核开发文件：",[14,123956,123957,123958,123961],{},"确保你已经安装了与当前内核版本相匹配的 ",[49,123959,123960],{},"kernel-devel"," 包。运行以下命令来安装：",[42,123963,123965],{"className":119946,"code":123964,"language":119948,"meta":47,"style":47},"sudo dnf install kernel-devel-$(uname -r)\n",[49,123966,123967],{"__ignoreMap":47},[52,123968,123969,123971,123973,123975,123978,123980,123982,123984],{"class":54,"line":55},[52,123970,27226],{"class":75},[52,123972,28965],{"class":62},[52,123974,26483],{"class":62},[52,123976,123977],{"class":62}," kernel-devel-",[52,123979,27749],{"class":79},[52,123981,72854],{"class":75},[52,123983,122289],{"class":308},[52,123985,708],{"class":79},[14,123987,123988],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[1696,123990,123991],{"start":83},[32,123992,123993],{},"安装内核源代码（如果需要）：",[14,123995,123996],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[42,123998,124000],{"className":119946,"code":123999,"language":119948,"meta":47,"style":47},"sudo dnf install kernel-headers kernel-source\n",[49,124001,124002],{"__ignoreMap":47},[52,124003,124004,124006,124008,124010,124013],{"class":54,"line":55},[52,124005,27226],{"class":75},[52,124007,28965],{"class":62},[52,124009,26483],{"class":62},[52,124011,124012],{"class":62}," kernel-headers",[52,124014,124015],{"class":62}," kernel-source\n",[1696,124017,124018],{"start":91},[32,124019,124020],{},"检查安装：",[14,124022,124023,124024,124027],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[49,124025,124026],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[42,124029,124031],{"className":119946,"code":124030,"language":119948,"meta":47,"style":47},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[49,124032,124033],{"__ignoreMap":47},[52,124034,124035,124037],{"class":54,"line":55},[52,124036,29411],{"class":75},[52,124038,124039],{"class":62}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,124041,124042,124043,124046],{},"如果仍然遇到问题，可以通过 ",[49,124044,124045],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[3141,124048,124049],{},"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":47,"searchDepth":66,"depth":66,"links":124051},[124052,124056,124066,124070,124071],{"id":121149,"depth":66,"text":121150,"children":124053},[124054,124055],{"id":121159,"depth":83,"text":121160},{"id":121169,"depth":83,"text":121170},{"id":121369,"depth":66,"text":121370,"children":124057},[124058,124059,124060,124061,124062,124063,124064,124065],{"id":121373,"depth":83,"text":121374},{"id":121443,"depth":83,"text":121444},{"id":121532,"depth":83,"text":121533},{"id":121777,"depth":83,"text":121778},{"id":121847,"depth":83,"text":121848},{"id":121914,"depth":83,"text":121915},{"id":121949,"depth":83,"text":121950},{"id":122004,"depth":83,"text":122005},{"id":122055,"depth":66,"text":122056,"children":124067},[124068,124069],{"id":122059,"depth":83,"text":122060},{"id":122139,"depth":83,"text":122140},{"id":122325,"depth":66,"text":122326},{"id":122498,"depth":66,"text":122499,"children":124072},[124073,124074,124075,124076,124077],{"id":122502,"depth":83,"text":122503},{"id":122543,"depth":83,"text":122544},{"id":122830,"depth":83,"text":122831},{"id":123204,"depth":83,"text":123205},{"id":123700,"depth":83,"text":123701},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":121141,"description":26025},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":124084,"title":124085,"body":124086,"description":26025,"extension":3153,"meta":124426,"navigation":122,"path":124427,"seo":124428,"stem":124429,"__hash__":124430},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":124087,"toc":124424},[124088,124091,124096,124099,124345,124350,124353,124389,124392,124421],[10,124089,124085],{"id":124090},"_4-命令教程长期积累",[1696,124092,124093],{},[32,124094,124095],{},"大多数命令",[14,124097,124098],{},"常用 Linux 命令速查：",[42,124100,124102],{"className":119946,"code":124101,"language":119948,"meta":47,"style":47},"# 文件与目录\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",[49,124103,124104,124109,124116,124123,124131,124138,124145,124153,124161,124168,124175,124183,124187,124192,124199,124207,124214,124218,124223,124230,124238,124246,124254,124262,124266,124271,124279,124286,124293,124301,124309,124313,124318,124327,124336],{"__ignoreMap":47},[52,124105,124106],{"class":54,"line":55},[52,124107,124108],{"class":94},"# 文件与目录\n",[52,124110,124111,124113],{"class":54,"line":66},[52,124112,29411],{"class":75},[52,124114,124115],{"class":94},"        # 列出目录内容\n",[52,124117,124118,124120],{"class":54,"line":83},[52,124119,103926],{"class":308},[52,124121,124122],{"class":94},"        # 切换目录\n",[52,124124,124125,124128],{"class":54,"line":91},[52,124126,124127],{"class":308},"pwd",[52,124129,124130],{"class":94},"       # 显示当前路径\n",[52,124132,124133,124135],{"class":54,"line":98},[52,124134,103916],{"class":75},[52,124136,124137],{"class":94},"     # 创建目录\n",[52,124139,124140,124142],{"class":54,"line":107},[52,124141,27972],{"class":75},[52,124143,124144],{"class":94},"        # 删除文件或目录\n",[52,124146,124147,124150],{"class":54,"line":113},[52,124148,124149],{"class":75},"cp",[52,124151,124152],{"class":94},"        # 复制文件或目录\n",[52,124154,124155,124158],{"class":54,"line":119},[52,124156,124157],{"class":75},"mv",[52,124159,124160],{"class":94},"        # 移动\u002F重命名文件或目录\n",[52,124162,124163,124165],{"class":54,"line":126},[52,124164,103933],{"class":75},[52,124166,124167],{"class":94},"     # 创建空文件\n",[52,124169,124170,124172],{"class":54,"line":132},[52,124171,123415],{"class":75},[52,124173,124174],{"class":94},"       # 查看文件内容\n",[52,124176,124177,124180],{"class":54,"line":138},[52,124178,124179],{"class":75},"head\u002Ftail",[52,124181,124182],{"class":94}," # 查看文件头部\u002F尾部\n",[52,124184,124185],{"class":54,"line":144},[52,124186,123],{"emptyLinePlaceholder":122},[52,124188,124189],{"class":54,"line":153},[52,124190,124191],{"class":94},"# 权限管理\n",[52,124193,124194,124196],{"class":54,"line":159},[52,124195,27261],{"class":75},[52,124197,124198],{"class":94},"     # 修改文件权限\n",[52,124200,124201,124204],{"class":54,"line":167},[52,124202,124203],{"class":75},"chown",[52,124205,124206],{"class":94},"     # 修改文件所有者\n",[52,124208,124209,124211],{"class":54,"line":173},[52,124210,27226],{"class":75},[52,124212,124213],{"class":94},"      # 以管理员身份执行\n",[52,124215,124216],{"class":54,"line":181},[52,124217,123],{"emptyLinePlaceholder":122},[52,124219,124220],{"class":54,"line":186},[52,124221,124222],{"class":94},"# 系统信息\n",[52,124224,124225,124227],{"class":54,"line":191},[52,124226,72854],{"class":75},[52,124228,124229],{"class":94},"     # 系统信息\n",[52,124231,124232,124235],{"class":54,"line":196},[52,124233,124234],{"class":75},"df",[52,124236,124237],{"class":94},"        # 磁盘使用情况\n",[52,124239,124240,124243],{"class":54,"line":201},[52,124241,124242],{"class":75},"free",[52,124244,124245],{"class":94},"      # 内存使用情况\n",[52,124247,124248,124251],{"class":54,"line":206},[52,124249,124250],{"class":75},"top\u002Fhtop",[52,124252,124253],{"class":94},"  # 进程监控\n",[52,124255,124256,124259],{"class":54,"line":211},[52,124257,124258],{"class":75},"ps",[52,124260,124261],{"class":94},"        # 查看进程\n",[52,124263,124264],{"class":54,"line":218},[52,124265,123],{"emptyLinePlaceholder":122},[52,124267,124268],{"class":54,"line":223},[52,124269,124270],{"class":94},"# 网络\n",[52,124272,124273,124276],{"class":54,"line":230},[52,124274,124275],{"class":75},"ping",[52,124277,124278],{"class":94},"      # 测试网络连通性\n",[52,124280,124281,124283],{"class":54,"line":239},[52,124282,29499],{"class":75},[52,124284,124285],{"class":94},"      # 发送 HTTP 请求\n",[52,124287,124288,124290],{"class":54,"line":251},[52,124289,122939],{"class":75},[52,124291,124292],{"class":94},"      # 下载文件\n",[52,124294,124295,124298],{"class":54,"line":256},[52,124296,124297],{"class":75},"ssh",[52,124299,124300],{"class":94},"       # 远程登录\n",[52,124302,124303,124306],{"class":54,"line":262},[52,124304,124305],{"class":75},"scp",[52,124307,124308],{"class":94},"       # 远程文件传输\n",[52,124310,124311],{"class":54,"line":268},[52,124312,123],{"emptyLinePlaceholder":122},[52,124314,124315],{"class":54,"line":280},[52,124316,124317],{"class":94},"# 包管理（Debian\u002FUbuntu）\n",[52,124319,124320,124322,124324],{"class":54,"line":286},[52,124321,120018],{"class":75},[52,124323,119997],{"class":62},[52,124325,124326],{"class":94},"   # 更新软件源\n",[52,124328,124329,124331,124333],{"class":54,"line":300},[52,124330,120018],{"class":75},[52,124332,26483],{"class":62},[52,124334,124335],{"class":94},"  # 安装软件包\n",[52,124337,124338,124340,124342],{"class":54,"line":314},[52,124339,120018],{"class":75},[52,124341,28729],{"class":62},[52,124343,124344],{"class":94},"   # 卸载软件包\n",[1696,124346,124347],{"start":66},[32,124348,124349],{},"KDE Dolphin 以root打开",[14,124351,124352],{},"kde5",[42,124354,124356],{"className":119946,"code":124355,"language":119948,"meta":47,"style":47},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[49,124357,124358],{"__ignoreMap":47},[52,124359,124360,124363,124366,124369,124371,124373,124376,124379,124381,124384,124386],{"class":54,"line":55},[52,124361,124362],{"class":75},"pkexec",[52,124364,124365],{"class":62}," env",[52,124367,124368],{"class":62}," DISPLAY=",[52,124370,30793],{"class":79},[52,124372,30851],{"class":62},[52,124374,124375],{"class":79},"$XAUTHORITY ",[52,124377,124378],{"class":62},"KDE_SESSION_VERSION=",[52,124380,1805],{"class":308},[52,124382,124383],{"class":62}," KDE_FULL_SESSION=",[52,124385,4410],{"class":308},[52,124387,124388],{"class":62}," dolphin\n",[14,124390,124391],{},"kde6",[42,124393,124395],{"className":119946,"code":124394,"language":119948,"meta":47,"style":47},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[49,124396,124397],{"__ignoreMap":47},[52,124398,124399,124401,124403,124405,124407,124409,124411,124413,124415,124417,124419],{"class":54,"line":55},[52,124400,124362],{"class":75},[52,124402,124365],{"class":62},[52,124404,124368],{"class":62},[52,124406,30793],{"class":79},[52,124408,30851],{"class":62},[52,124410,124375],{"class":79},[52,124412,124378],{"class":62},[52,124414,1125],{"class":308},[52,124416,124383],{"class":62},[52,124418,4410],{"class":308},[52,124420,124388],{"class":62},[3141,124422,124423],{},"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":47,"searchDepth":66,"depth":66,"links":124425},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":124085,"description":26025},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":124432,"title":124433,"body":124434,"description":26025,"extension":3153,"meta":124448,"navigation":122,"path":124449,"seo":124450,"stem":124451,"__hash__":124452},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":124435,"toc":124446},[124436,124439],[10,124437,124433],{"id":124438},"_5-各种环境配置",[14,124440,124441],{},[3451,124442,124445],{"href":124443,"rel":124444},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[26514],"电控组环境搭建大全",{"title":47,"searchDepth":66,"depth":66,"links":124447},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":124433,"description":26025},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":124454,"title":124455,"body":124456,"description":26025,"extension":3153,"meta":124804,"navigation":122,"path":124805,"seo":124806,"stem":124807,"__hash__":124808},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":124457,"toc":124796},[124458,124461,124465,124469,124473,124478,124485,124489,124782,124786,124793],[10,124459,124455],{"id":124460},"_6-拓展功能",[18,124462,124464],{"id":124463},"_61-wine","6.1 Wine",[18,124466,124468],{"id":124467},"_62-android","6.2 Android",[3195,124470,124472],{"id":124471},"_621-i卡a卡","6.2.1 I卡、A卡",[1696,124474,124475],{},[32,124476,124477],{},"Wayland-Waydroid(体验超级好)",[14,124479,124480,124481],{},"Waydroid 官网与安装指南：",[3451,124482,124483],{"href":124483,"rel":124484},"https:\u002F\u002Fwaydro.id\u002F",[26514],[3195,124486,124488],{"id":124487},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[1696,124490,124491],{},[32,124492,124493,124494,124496,124497,124501,124503,124506,124511,124708],{},"QEMU-KVM虚拟机 + BlissOS-X86",[56366,124495],{},"BlissOS 官网下载：",[3451,124498,124499],{"href":124499,"rel":124500},"https:\u002F\u002Fblissos.org\u002F",[26514],[56366,124502],{},[4509,124504],{"alt":47,"src":124505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[1696,124507,124508],{"start":83},[32,124509,124510],{},"比较推荐的配置",[42,124512,124514],{"className":119946,"code":124513,"language":119948,"meta":47,"style":47},"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",[49,124515,124516,124523,124533,124543,124553,124565,124575,124582,124592,124601,124610,124620,124630,124639,124649,124659,124671,124681,124690,124700],{"__ignoreMap":47},[52,124517,124518,124521],{"class":54,"line":55},[52,124519,124520],{"class":75},"qemu-system-x86_64",[52,124522,27328],{"class":308},[52,124524,124525,124528,124531],{"class":54,"line":66},[52,124526,124527],{"class":308},"        -M",[52,124529,124530],{"class":62}," q35,vmport=off",[52,124532,27328],{"class":308},[52,124534,124535,124538,124541],{"class":54,"line":83},[52,124536,124537],{"class":308},"        -accel",[52,124539,124540],{"class":62}," kvm",[52,124542,27328],{"class":308},[52,124544,124545,124548,124551],{"class":54,"line":91},[52,124546,124547],{"class":308},"        -cpu",[52,124549,124550],{"class":62}," qemu64,+sse3,+sse4.2",[52,124552,27328],{"class":308},[52,124554,124555,124558,124561,124563],{"class":54,"line":98},[52,124556,124557],{"class":308},"        -smp",[52,124559,124560],{"class":62}," 8,cores=",[52,124562,3504],{"class":308},[52,124564,27328],{"class":308},[52,124566,124567,124570,124573],{"class":54,"line":107},[52,124568,124569],{"class":308},"        -m",[52,124571,124572],{"class":62}," 6G",[52,124574,27328],{"class":308},[52,124576,124577,124580],{"class":54,"line":113},[52,124578,124579],{"class":308},"        -usb",[52,124581,27328],{"class":308},[52,124583,124584,124587,124590],{"class":54,"line":119},[52,124585,124586],{"class":308},"        -device",[52,124588,124589],{"class":62}," virtio-tablet",[52,124591,27328],{"class":308},[52,124593,124594,124596,124599],{"class":54,"line":126},[52,124595,124586],{"class":308},[52,124597,124598],{"class":62}," virtio-keyboard",[52,124600,27328],{"class":308},[52,124602,124603,124605,124608],{"class":54,"line":132},[52,124604,124586],{"class":308},[52,124606,124607],{"class":62}," usb-tablet",[52,124609,27328],{"class":308},[52,124611,124612,124615,124618],{"class":54,"line":138},[52,124613,124614],{"class":308},"        -bios",[52,124616,124617],{"class":62}," OVMF-pure-efi64.fd",[52,124619,27328],{"class":308},[52,124621,124622,124625,124628],{"class":54,"line":144},[52,124623,124624],{"class":308},"        -net",[52,124626,124627],{"class":62}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[52,124629,27328],{"class":308},[52,124631,124632,124634,124637],{"class":54,"line":153},[52,124633,124624],{"class":308},[52,124635,124636],{"class":62}," nic,model=virtio",[52,124638,27328],{"class":308},[52,124640,124641,124644,124647],{"class":54,"line":159},[52,124642,124643],{"class":308},"        -audio",[52,124645,124646],{"class":62}," sdl,model=hda",[52,124648,27328],{"class":308},[52,124650,124651,124654,124657],{"class":54,"line":167},[52,124652,124653],{"class":308},"        -display",[52,124655,124656],{"class":62}," sdl,gl=on,show-cursor=on",[52,124658,27328],{"class":308},[52,124660,124661,124663,124666,124669],{"class":54,"line":173},[52,124662,124586],{"class":308},[52,124664,124665],{"class":62}," virtio-vga-gl,xres=1920,yres=",[52,124667,124668],{"class":308},"1080",[52,124670,27328],{"class":308},[52,124672,124673,124676,124679],{"class":54,"line":181},[52,124674,124675],{"class":308},"        -drive",[52,124677,124678],{"class":62}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[52,124680,27328],{"class":308},[52,124682,124683,124685,124688],{"class":54,"line":186},[52,124684,124675],{"class":308},[52,124686,124687],{"class":62}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[52,124689,27328],{"class":308},[52,124691,124692,124695,124698],{"class":54,"line":191},[52,124693,124694],{"class":308},"        -monitor",[52,124696,124697],{"class":62}," stdio",[52,124699,27328],{"class":308},[52,124701,124702,124705],{"class":54,"line":196},[52,124703,124704],{"class":308},"        -serial",[52,124706,124707],{"class":62}," none\n",[1696,124709,124710],{"start":98},[32,124711,124712,124713],{},"常用操作：",[1696,124714,124715,124718,124774],{},[32,124716,124717],{},"全屏：Ctrl+Alt+F",[32,124719,124720,124721,124726],{},"adb调试",[1696,124722,124723],{},[32,124724,124725],{},"使Linux与Android用ADB连接。",[42,124727,124729],{"className":119946,"code":124728,"language":119948,"meta":47,"style":47},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[49,124730,124731,124736,124747,124752,124764,124769],{"__ignoreMap":47},[52,124732,124733],{"class":54,"line":55},[52,124734,124735],{"class":94},"# 连接安卓\n",[52,124737,124738,124741,124744],{"class":54,"line":66},[52,124739,124740],{"class":75},"adb",[52,124742,124743],{"class":62}," connect",[52,124745,124746],{"class":308}," 127.0.0.1\n",[52,124748,124749],{"class":54,"line":83},[52,124750,124751],{"class":94},"# 打开shell\n",[52,124753,124754,124756,124758,124761],{"class":54,"line":91},[52,124755,124740],{"class":75},[52,124757,29533],{"class":308},[52,124759,124760],{"class":62}," 127.0.0.1:5555",[52,124762,124763],{"class":62}," shell\n",[52,124765,124766],{"class":54,"line":98},[52,124767,124768],{"class":94},"# 使用root权限\n",[52,124770,124771],{"class":54,"line":107},[52,124772,124773],{"class":75},"su\n",[32,124775,124776,124777],{},"中文输入法",[1696,124778,124779],{},[32,124780,124781],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[18,124783,124785],{"id":124784},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,124787,124788,124789],{},"rEFInd 官网与文档：",[3451,124790,124791],{"href":124791,"rel":124792},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[26514],[3141,124794,124795],{},"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":47,"searchDepth":66,"depth":66,"links":124797},[124798,124799,124803],{"id":124463,"depth":66,"text":124464},{"id":124467,"depth":66,"text":124468,"children":124800},[124801,124802],{"id":124471,"depth":83,"text":124472},{"id":124487,"depth":83,"text":124488},{"id":124784,"depth":66,"text":124785},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":124455,"description":26025},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":124810,"title":124811,"body":124812,"description":26025,"extension":3153,"meta":128111,"navigation":122,"path":128112,"seo":128113,"stem":128114,"__hash__":128115},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":124813,"toc":128085},[124814,124817,124821,124824,124831,125081,125084,125156,125159,125163,125167,125172,125175,125178,125181,125186,125189,125192,125195,125200,125203,125208,125211,125214,125219,125222,125227,125230,125234,125238,125241,125246,125249,125263,125266,125269,125278,125281,125290,125293,125296,125305,125308,125317,125320,125323,125332,125335,125338,125353,125356,125359,125368,125373,125376,125379,125388,125391,125400,125403,125412,125415,125424,125429,125432,125440,125445,125448,125457,125460,125468,125473,125476,125485,125488,125491,125495,125498,125503,125506,125511,125525,125530,125535,125546,125551,125557,125562,125577,125582,125585,125590,125595,125600,125608,125613,125620,125625,125636,125641,125644,125648,125651,125654,125659,125662,125681,125686,125689,125698,125703,125706,125728,125731,125761,125764,125769,125772,125786,125791,125810,125813,125816,125821,125833,125838,125843,125846,125851,125854,125869,125872,125877,125882,125886,125891,125931,125934,125938,125944,125950,125955,125958,125965,125970,125977,125980,125983,125990,126004,126007,126067,126070,126084,126096,126099,126102,126105,126169,126172,126175,126178,126198,126201,126206,126213,126217,126220,126224,126229,126234,126238,126241,126244,126286,126291,126294,126316,126331,126333,126338,126350,126410,126412,126414,126468,126470,126472,126478,126483,126486,126491,126495,126498,126560,126565,126568,126570,126574,126586,126668,126670,126672,126726,126732,126734,126738,126743,126745,126750,126754,126774,126809,126813,126816,126819,126822,126829,126832,126844,126847,126862,126865,126884,126932,126935,126952,126955,126969,126974,126977,126986,127001,127013,127051,127056,127065,127070,127075,127101,127110,127114,127118,127123,127126,127130,127134,127139,127142,127147,127150,127155,127158,127163,127166,127170,127175,127178,127183,127186,127190,127195,127198,127203,127206,127211,127214,127218,127223,127226,127231,127234,127239,127242,127246,127251,127254,127259,127262,127267,127270,127275,127278,127283,127286,127291,127294,127298,127303,127306,127311,127318,127322,127327,127330,127335,127338,127342,127347,127350,127353,127356,127359,127362,127366,127369,127379,127384,127389,127411,127416,127421,127428,127432,127437,127440,127443,127448,127451,127454,127457,127460,127463,127466,127469,127472,127475,127478,127481,127484,127489,127494,127499,127504,127509,127514,127519,127522,127526,127529,127533,127538,127543,127548,127553,127557,127563,127571,127576,127579,127584,127599,127602,127607,127641,127656,127659,127714,127740,127752,127755,127764,127767,127782,127787,127790,127796,127801,127804,127809,127812,127817,127822,127829,127832,127847,127850,127885,127890,127898,127936,127939,127942,127947,127950,127955,127966,128000,128005,128008,128017,128022,128028,128031,128036,128045,128050,128053,128056,128061,128069,128072,128077,128082],[10,124815,124811],{"id":124816},"_7-其他操作",[18,124818,124820],{"id":124819},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,124822,124823],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,124825,124826,124827,124830],{},"进入工控机的硬盘目录，进入",[49,124828,124829],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[42,124832,124836],{"className":124833,"code":124834,"language":124835,"meta":47,"style":47},"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",[49,124837,124838,124846,124857,124864,124871,124883,124890,124902,124913,124924,124931,124938,124945,124957,124969,124976,124988,125000,125007,125019,125031,125043,125054,125061,125072],{"__ignoreMap":47},[52,124839,124840,124843],{"class":54,"line":55},[52,124841,124842],{"class":53950},"network",[52,124844,124845],{"class":79},": \n",[52,124847,124848,124851,124853,124855],{"class":54,"line":66},[52,124849,124850],{"class":53950},"  version",[52,124852,54087],{"class":79},[52,124854,564],{"class":308},[52,124856,963],{"class":79},[52,124858,124859,124862],{"class":54,"line":83},[52,124860,124861],{"class":53950},"  wifis",[52,124863,124845],{"class":79},[52,124865,124866,124869],{"class":54,"line":91},[52,124867,124868],{"class":53950},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[52,124870,124845],{"class":79},[52,124872,124873,124876,124878,124881],{"class":54,"line":98},[52,124874,124875],{"class":53950},"      renderer",[52,124877,54087],{"class":79},[52,124879,124880],{"class":62},"NetworkManager",[52,124882,963],{"class":79},[52,124884,124885,124888],{"class":54,"line":107},[52,124886,124887],{"class":53950},"      match",[52,124889,124845],{"class":79},[52,124891,124892,124895,124897,124900],{"class":54,"line":113},[52,124893,124894],{"class":53950},"        name",[52,124896,54087],{"class":79},[52,124898,124899],{"class":62},"\"wlan0\"",[52,124901,963],{"class":79},[52,124903,124904,124907,124909,124911],{"class":54,"line":119},[52,124905,124906],{"class":53950},"      dhcp4",[52,124908,54087],{"class":79},[52,124910,4410],{"class":308},[52,124912,963],{"class":79},[52,124914,124915,124918,124920,124922],{"class":54,"line":126},[52,124916,124917],{"class":53950},"      dhcp6",[52,124919,54087],{"class":79},[52,124921,4410],{"class":308},[52,124923,963],{"class":79},[52,124925,124926,124929],{"class":54,"line":132},[52,124927,124928],{"class":53950},"      access-points",[52,124930,124845],{"class":79},[52,124932,124933,124936],{"class":54,"line":138},[52,124934,124935],{"class":62},"        \"EMIS_Vinci_Robocon_5G\"",[52,124937,124845],{"class":79},[52,124939,124940,124943],{"class":54,"line":144},[52,124941,124942],{"class":53950},"          auth",[52,124944,124845],{"class":79},[52,124946,124947,124950,124952,124955],{"class":54,"line":153},[52,124948,124949],{"class":53950},"            key-management",[52,124951,54087],{"class":79},[52,124953,124954],{"class":62},"\"psk\"",[52,124956,963],{"class":79},[52,124958,124959,124962,124964,124967],{"class":54,"line":159},[52,124960,124961],{"class":53950},"            password",[52,124963,54087],{"class":79},[52,124965,124966],{"class":62},"\"vinci666\"",[52,124968,963],{"class":79},[52,124970,124971,124974],{"class":54,"line":167},[52,124972,124973],{"class":53950},"          networkmanager",[52,124975,124845],{"class":79},[52,124977,124978,124981,124983,124986],{"class":54,"line":173},[52,124979,124980],{"class":53950},"            uuid",[52,124982,54087],{"class":79},[52,124984,124985],{"class":62},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[52,124987,963],{"class":79},[52,124989,124990,124993,124995,124998],{"class":54,"line":181},[52,124991,124992],{"class":53950},"            name",[52,124994,54087],{"class":79},[52,124996,124997],{"class":62},"\"EMIS_Vinci_Robocon_5G\"",[52,124999,963],{"class":79},[52,125001,125002,125005],{"class":54,"line":186},[52,125003,125004],{"class":53950},"            passthrough",[52,125006,124845],{"class":79},[52,125008,125009,125012,125014,125017],{"class":54,"line":191},[52,125010,125011],{"class":53950},"              wifi-security.auth-alg",[52,125013,54087],{"class":79},[52,125015,125016],{"class":62},"\"open\"",[52,125018,963],{"class":79},[52,125020,125021,125024,125026,125029],{"class":54,"line":196},[52,125022,125023],{"class":53950},"              ipv6.addr-gen-mode",[52,125025,54087],{"class":79},[52,125027,125028],{"class":62},"\"default\"",[52,125030,963],{"class":79},[52,125032,125033,125036,125038,125041],{"class":54,"line":201},[52,125034,125035],{"class":53950},"              ipv6.ip6-privacy",[52,125037,54087],{"class":79},[52,125039,125040],{"class":62},"\"-1\"",[52,125042,963],{"class":79},[52,125044,125045,125048,125050,125052],{"class":54,"line":206},[52,125046,125047],{"class":53950},"              proxy._",[52,125049,54087],{"class":79},[52,125051,10607],{"class":62},[52,125053,963],{"class":79},[52,125055,125056,125059],{"class":54,"line":211},[52,125057,125058],{"class":53950},"      networkmanager",[52,125060,124845],{"class":79},[52,125062,125063,125066,125068,125070],{"class":54,"line":218},[52,125064,125065],{"class":53950},"        uuid",[52,125067,54087],{"class":79},[52,125069,124985],{"class":62},[52,125071,963],{"class":79},[52,125073,125074,125076,125078],{"class":54,"line":223},[52,125075,124894],{"class":53950},[52,125077,54087],{"class":79},[52,125079,125080],{"class":62},"\"EMIS_Vinci_Robocon_5G\"\n",[14,125082,125083],{},"将其改为新wifi的名和密码：",[42,125085,125087],{"className":124833,"code":125086,"language":124835,"meta":47,"style":47},"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",[49,125088,125089,125095,125104,125110,125117,125126,125134,125140,125146],{"__ignoreMap":47},[52,125090,125091,125093],{"class":54,"line":55},[52,125092,124842],{"class":53950},[52,125094,6718],{"class":79},[52,125096,125097,125099,125101],{"class":54,"line":66},[52,125098,124850],{"class":53950},[52,125100,54087],{"class":79},[52,125102,125103],{"class":308},"2\n",[52,125105,125106,125108],{"class":54,"line":83},[52,125107,124861],{"class":53950},[52,125109,6718],{"class":79},[52,125111,125112,125115],{"class":54,"line":91},[52,125113,125114],{"class":53950},"    wlan0",[52,125116,6718],{"class":79},[52,125118,125119,125121,125123],{"class":54,"line":98},[52,125120,124906],{"class":53950},[52,125122,54087],{"class":79},[52,125124,125125],{"class":308},"true\n",[52,125127,125128,125130,125132],{"class":54,"line":107},[52,125129,124917],{"class":53950},[52,125131,54087],{"class":79},[52,125133,125125],{"class":308},[52,125135,125136,125138],{"class":54,"line":113},[52,125137,124928],{"class":53950},[52,125139,6718],{"class":79},[52,125141,125142,125144],{"class":54,"line":119},[52,125143,124935],{"class":62},[52,125145,6718],{"class":79},[52,125147,125148,125151,125153],{"class":54,"line":126},[52,125149,125150],{"class":53950},"          password",[52,125152,54087],{"class":79},[52,125154,125155],{"class":62},"\"vinci666\"\n",[14,125157,125158],{},"工控机开机即可连上网。",[18,125160,125162],{"id":125161},"_72-ssh远程开发","7.2 SSH远程开发",[3195,125164,125166],{"id":125165},"_721-环境准备","7.2.1 环境准备",[14,125168,125169],{},[2389,125170,125171],{},"1.硬件准备",[14,125173,125174],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,125176,125177],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,125179,125180],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,125182,125183],{},[2389,125184,125185],{},"2.设置固定IP",[14,125187,125188],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,125190,125191],{},"1.进入设置界面",[14,125193,125194],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,125196,125197],{},[4509,125198],{"alt":47,"src":125199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,125201,125202],{},"2.配置所连接的网络",[14,125204,125205],{},[4509,125206],{"alt":47,"src":125207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,125209,125210],{},"3.设置固定IP",[14,125212,125213],{},"查看当前IP地址。",[14,125215,125216],{},[4509,125217],{"alt":47,"src":125218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,125220,125221],{},"设置固定IP。",[14,125223,125224],{},[4509,125225],{"alt":47,"src":125226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,125228,125229],{},"至此，IP配置完毕。",[3195,125231,125233],{"id":125232},"_722-环境搭建","7.2.2 环境搭建",[14,125235,125236],{},[2389,125237,28403],{},[14,125239,125240],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,125242,125243],{},[2389,125244,125245],{},"实现",[14,125247,125248],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[1696,125250,125251,125254,125257,125260],{},[32,125252,125253],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[32,125255,125256],{},"远程主机启动SSH服务；",[32,125258,125259],{},"本地主机登陆远程主机；",[32,125261,125262],{},"实现数据传输。",[14,125264,125265],{},"1.安装SSH客户端与服务端",[14,125267,125268],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[42,125270,125272],{"className":123466,"code":125271,"language":123468,"meta":123469,"style":47}," sudo apt install openssh-server\n",[49,125273,125274],{"__ignoreMap":47},[52,125275,125276],{"class":54,"line":55},[52,125277,125271],{},[14,125279,125280],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[42,125282,125284],{"className":123466,"code":125283,"language":123468,"meta":123469,"style":47},"sudo apt install openssh-client\n",[49,125285,125286],{"__ignoreMap":47},[52,125287,125288],{"class":54,"line":55},[52,125289,125283],{},[14,125291,125292],{},"2.远程主机启动SSH服务",[14,125294,125295],{},"远程主机启动 ssh 服务命令如下：",[42,125297,125299],{"className":123466,"code":125298,"language":123468,"meta":123469,"style":47},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[49,125300,125301],{"__ignoreMap":47},[52,125302,125303],{"class":54,"line":55},[52,125304,125298],{},[14,125306,125307],{},"启动后可使用如下命令查看服务是否正常运行：",[42,125309,125311],{"className":123466,"code":125310,"language":123468,"meta":123469,"style":47},"ps -e | grep ssh\n",[49,125312,125313],{"__ignoreMap":47},[52,125314,125315],{"class":54,"line":55},[52,125316,125310],{},[14,125318,125319],{},"如果启动成功，会包含 sshd 程序。",[14,125321,125322],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[42,125324,125326],{"className":123466,"code":125325,"language":123468,"meta":123469,"style":47},"sudo systemctl enable ssh\n",[49,125327,125328],{"__ignoreMap":47},[52,125329,125330],{"class":54,"line":55},[52,125331,125325],{},[14,125333,125334],{},"3.本地远程登录",[14,125336,125337],{},"登录远程主机可以调用如下命令:",[42,125339,125341],{"className":119946,"code":125340,"language":119948,"meta":47,"style":47},"ssh -X 用户名@ip地址\n",[49,125342,125343],{"__ignoreMap":47},[52,125344,125345,125347,125350],{"class":54,"line":55},[52,125346,124297],{"class":75},[52,125348,125349],{"class":308}," -X",[52,125351,125352],{"class":62}," 用户名@ip地址\n",[14,125354,125355],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,125357,125358],{},"如果退出，可以调用exit命令：",[42,125360,125362],{"className":123466,"code":125361,"language":123468,"meta":123469,"style":47},"exit\n",[49,125363,125364],{"__ignoreMap":47},[52,125365,125366],{"class":54,"line":55},[52,125367,125361],{},[14,125369,125370],{},[2389,125371,125372],{},"4.实现数据传输",[14,125374,125375],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,125377,125378],{},"上传文件指令格式如下：",[42,125380,125382],{"className":123466,"code":125381,"language":123468,"meta":123469,"style":47},"scp 本地文件路径 账号@ip:路径\n",[49,125383,125384],{"__ignoreMap":47},[52,125385,125386],{"class":54,"line":55},[52,125387,125381],{},[14,125389,125390],{},"上传文件夹指令格式如下：",[42,125392,125394],{"className":123466,"code":125393,"language":123468,"meta":123469,"style":47},"scp -r 本地文件夹路径 账号@ip:路径\n",[49,125395,125396],{"__ignoreMap":47},[52,125397,125398],{"class":54,"line":55},[52,125399,125393],{},[14,125401,125402],{},"下载文件指令格式如下：",[42,125404,125406],{"className":123466,"code":125405,"language":123468,"meta":123469,"style":47},"scp 账号@ip:路径 本地文件夹路径\n",[49,125407,125408],{"__ignoreMap":47},[52,125409,125410],{"class":54,"line":55},[52,125411,125405],{},[14,125413,125414],{},"下载文件夹指令格式如下：",[42,125416,125418],{"className":123466,"code":125417,"language":123468,"meta":123469,"style":47},"scp -r 账号@ip:路径 本地文件夹路径\n",[49,125419,125420],{"__ignoreMap":47},[52,125421,125422],{"class":54,"line":55},[52,125423,125417],{},[14,125425,125426],{},[2389,125427,125428],{},"优化",[14,125430,125431],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[1696,125433,125434,125437],{},[32,125435,125436],{},"本地生成密钥对；",[32,125438,125439],{},"将公钥上传至远程主机。",[14,125441,125442],{},[2389,125443,125444],{},"1.生成密钥对",[14,125446,125447],{},"本地客户端生成公私钥：（一路回车默认即可）",[42,125449,125451],{"className":123466,"code":125450,"language":123468,"meta":123469,"style":47},"ssh-keygen\n",[49,125452,125453],{"__ignoreMap":47},[52,125454,125455],{"class":54,"line":55},[52,125456,125450],{},[14,125458,125459],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[1696,125461,125462,125465],{},[32,125463,125464],{},"id_rsa （私钥）；",[32,125466,125467],{},"id_rsa.pub (公钥)。",[14,125469,125470],{},[2389,125471,125472],{},"2.公钥上传",[14,125474,125475],{},"上传指令如下：",[42,125477,125479],{"className":123466,"code":125478,"language":123468,"meta":123469,"style":47},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[49,125480,125481],{"__ignoreMap":47},[52,125482,125483],{"class":54,"line":55},[52,125484,125478],{},[14,125486,125487],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,125489,125490],{},"以后再远程登录就无需录入密码了。",[3195,125492,125494],{"id":125493},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,125496,125497],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,125499,125500],{},[2389,125501,125502],{},"1.准备工作",[14,125504,125505],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,125507,125508],{},[2389,125509,125510],{},"2.为VScode安装远程开发插件",[14,125512,125513,125514,125517,125518,125521,125522,31035],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[49,125515,125516],{},"扩展：商店","的搜索栏输入",[49,125519,125520],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[49,125523,125524],{},"安装",[14,125526,125527],{},[4509,125528],{"alt":47,"src":125529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,125531,125532],{},[2389,125533,125534],{},"3.配置远程连接",[14,125536,125537,125538,125541,125542,125545],{},"步骤1：使用快捷键",[49,125539,125540],{},"ctrl + shift + p","打开命令输入窗口，并输入",[49,125543,125544],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,125547,125548],{},[4509,125549],{"alt":47,"src":125550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,125552,125553,125554,31035],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[49,125555,125556],{},"Add New SSH Host",[14,125558,125559],{},[4509,125560],{"alt":47,"src":125561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,125563,125564,125565,125568,125569,125572,125573,125576],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[49,125566,125567],{},"ssh +X ubuntu@192.168.43.164","，其中，",[49,125570,125571],{},"ubuntu","需要替换为你的登录用户名，",[49,125574,125575],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,125578,125579],{},[4509,125580],{"alt":47,"src":125581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,125583,125584],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,125586,125587],{},[4509,125588],{"alt":47,"src":125589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,125591,125592],{},[4509,125593],{"alt":47,"src":125594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,125596,125597],{},[2389,125598,125599],{},"4.使用",[14,125601,125602,125603,125541,125605,125607],{},"步骤1：继续使用快捷键",[49,125604,125540],{},[49,125606,125544],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,125609,125610],{},[4509,125611],{"alt":47,"src":125612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,125614,125615,125616,125619],{},"或者，也可以点击侧边栏的",[49,125617,125618],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,125621,125622],{},[4509,125623],{"alt":47,"src":125624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,125626,125627,125628,125631,125632,125635],{},"步骤2：选择菜单栏的",[49,125629,125630],{},"文件","下的",[49,125633,125634],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,125637,125638],{},[4509,125639],{"alt":47,"src":125640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,125642,125643],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[18,125645,125647],{"id":125646},"_73-远程桌面","7.3 远程桌面",[14,125649,125650],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,125652,125653],{},"我们选择使用VNC来看。",[1696,125655,125656],{},[32,125657,125658],{},"安装VNC服务器：",[14,125660,125661],{},"这里以TigerVNC为例进行安装：",[42,125663,125665],{"className":119946,"code":125664,"language":119948,"meta":47,"style":47},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[49,125666,125667],{"__ignoreMap":47},[52,125668,125669,125671,125673,125675,125678],{"class":54,"line":55},[52,125670,27226],{"class":75},[52,125672,119967],{"class":62},[52,125674,26483],{"class":62},[52,125676,125677],{"class":62}," tigervnc-standalone-server",[52,125679,125680],{"class":62}," tigervnc-common\n",[1696,125682,125683],{"start":66},[32,125684,125685],{},"设置VNC密码：",[14,125687,125688],{},"为VNC用户设置密码，运行以下命令：",[42,125690,125692],{"className":119946,"code":125691,"language":119948,"meta":47,"style":47},"vncpasswd\n",[49,125693,125694],{"__ignoreMap":47},[52,125695,125696],{"class":54,"line":55},[52,125697,125691],{"class":75},[1696,125699,125700],{"start":83},[32,125701,125702],{},"配置VNC启动脚本:",[14,125704,125705],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[42,125707,125709],{"className":119946,"code":125708,"language":119948,"meta":47,"style":47},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[49,125710,125711,125720],{"__ignoreMap":47},[52,125712,125713,125715,125717],{"class":54,"line":55},[52,125714,103916],{"class":75},[52,125716,31866],{"class":308},[52,125718,125719],{"class":62}," ~\u002F.vnc\n",[52,125721,125722,125725],{"class":54,"line":66},[52,125723,125724],{"class":75},"nano",[52,125726,125727],{"class":62}," ~\u002F.vnc\u002Fxstartup\n",[14,125729,125730],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[42,125732,125734],{"className":119946,"code":125733,"language":119948,"meta":47,"style":47},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[49,125735,125736,125741,125749,125756],{"__ignoreMap":47},[52,125737,125738],{"class":54,"line":55},[52,125739,125740],{"class":94},"#!\u002Fbin\u002Fsh\n",[52,125742,125743,125746],{"class":54,"line":66},[52,125744,125745],{"class":308},"unset",[52,125747,125748],{"class":62}," SESSION_MANAGER\n",[52,125750,125751,125753],{"class":54,"line":83},[52,125752,125745],{"class":308},[52,125754,125755],{"class":62}," DBUS_SESSION_BUS_ADDRESS\n",[52,125757,125758],{"class":54,"line":91},[52,125759,125760],{"class":75},"gnome-session\n",[14,125762,125763],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[1696,125765,125766],{"start":91},[32,125767,125768],{},"给予执行权限：",[14,125770,125771],{},"为xstartup文件设置执行权限：",[42,125773,125775],{"className":119946,"code":125774,"language":119948,"meta":47,"style":47},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[49,125776,125777],{"__ignoreMap":47},[52,125778,125779,125781,125784],{"class":54,"line":55},[52,125780,27261],{"class":75},[52,125782,125783],{"class":62}," +x",[52,125785,125727],{"class":62},[1696,125787,125788],{"start":98},[32,125789,125790],{},"启动VNC服务器：",[42,125792,125794],{"className":119946,"code":125793,"language":119948,"meta":47,"style":47},"vncserver -geometry 1920x1080 -localhost=0\n",[49,125795,125796],{"__ignoreMap":47},[52,125797,125798,125801,125804,125807],{"class":54,"line":55},[52,125799,125800],{"class":75},"vncserver",[52,125802,125803],{"class":308}," -geometry",[52,125805,125806],{"class":62}," 1920x1080",[52,125808,125809],{"class":308}," -localhost=0\n",[14,125811,125812],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,125814,125815],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[1696,125817,125818],{"start":107},[32,125819,125820],{},"查看已开启的VNC服务器：",[42,125822,125824],{"className":119946,"code":125823,"language":119948,"meta":47,"style":47},"vncserver -list\n",[49,125825,125826],{"__ignoreMap":47},[52,125827,125828,125830],{"class":54,"line":55},[52,125829,125800],{"class":75},[52,125831,125832],{"class":308}," -list\n",[14,125834,125835],{},[4509,125836],{"alt":47,"src":125837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[1696,125839,125840],{"start":113},[32,125841,125842],{},"连接到VNC服务器：",[14,125844,125845],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[1696,125847,125848],{"start":119},[32,125849,125850],{},"停止VNC服务器：",[14,125852,125853],{},"如果需要停止VNC服务器，可以使用以下命令：",[42,125855,125857],{"className":119946,"code":125856,"language":119948,"meta":47,"style":47},"vncserver -kill :1\n",[49,125858,125859],{"__ignoreMap":47},[52,125860,125861,125863,125866],{"class":54,"line":55},[52,125862,125800],{"class":75},[52,125864,125865],{"class":308}," -kill",[52,125867,125868],{"class":62}," :1\n",[14,125870,125871],{},"将:1替换为你实际使用的显示编号。",[14,125873,125874],{},[4509,125875],{"alt":47,"src":125876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,125878,125879],{},[4509,125880],{"alt":47,"src":125881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[18,125883,125885],{"id":125884},"_74-usb端口设置","7.4 USB端口设置",[14,125887,125888],{},[2389,125889,125890],{},"首先先配置好权限",[42,125892,125894],{"className":119946,"code":125893,"language":119948,"meta":47,"style":47},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[49,125895,125896,125901,125914,125921,125926],{"__ignoreMap":47},[52,125897,125898],{"class":54,"line":55},[52,125899,125900],{"class":94},"# 将用户权限提高\n",[52,125902,125903,125905,125907,125909,125912],{"class":54,"line":66},[52,125904,27226],{"class":75},[52,125906,29224],{"class":62},[52,125908,29227],{"class":308},[52,125910,125911],{"class":62}," dialout",[52,125913,29232],{"class":79},[52,125915,125916,125918],{"class":54,"line":83},[52,125917,29251],{"class":75},[52,125919,125920],{"class":62}," dialout\n",[52,125922,125923],{"class":54,"line":91},[52,125924,125925],{"class":94},"# 查看下面命令是否输出dialout（若输出才正常）\n",[52,125927,125928],{"class":54,"line":98},[52,125929,125930],{"class":75},"groups\n",[14,125932,125933],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[3195,125935,125937],{"id":125936},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,125939,125940,125943],{},[2389,125941,125942],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,125945,125946,125949],{},[2389,125947,125948],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,125951,125952],{},[2389,125953,125954],{},"流程如下：",[14,125956,125957],{},"（1）.查找设备idVendor和idProduct",[14,125959,125960,125961,125964],{},"接入两个USB设备，在终端调用指令",[49,125962,125963],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,125966,125967],{},[4509,125968],{"alt":47,"src":125969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,125971,125972,125973,125976],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[49,125974,125975],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,125978,125979],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,125981,125982],{},"（2）.编写映射规则",[14,125984,125985,125986,125989],{},"在",[49,125987,125988],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[42,125991,125993],{"className":119946,"code":125992,"language":119948,"meta":47,"style":47},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[49,125994,125995],{"__ignoreMap":47},[52,125996,125997,125999,126001],{"class":54,"line":55},[52,125998,27226],{"class":75},[52,126000,121233],{"class":62},[52,126002,126003],{"class":62}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,126005,126006],{},"输入如下内容：",[42,126008,126010],{"className":119946,"code":126009,"language":119948,"meta":47,"style":47},"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",[49,126011,126012,126042],{"__ignoreMap":47},[52,126013,126014,126017,126019,126022,126025,126028,126031,126033,126036,126039],{"class":54,"line":55},[52,126015,126016],{"class":79},"KERNEL",[52,126018,292],{"class":58},[52,126020,126021],{"class":62},"=\"ttyUSB*\",",[52,126023,126024],{"class":75}," ATTRS",[52,126026,126027],{"class":62},"{idVendor}==",[52,126029,126030],{"class":75},"\"10c4\"",[52,126032,389],{"class":75},[52,126034,126035],{"class":62}," ATTRS{idProduct}==\"ea60\",",[52,126037,126038],{"class":62}," MODE:=\"0777\",",[52,126040,126041],{"class":62}," SYMLINK+=\"mylidar\"\n",[52,126043,126044,126046,126048,126050,126052,126054,126057,126059,126062,126064],{"class":54,"line":66},[52,126045,126016],{"class":79},[52,126047,292],{"class":58},[52,126049,126021],{"class":62},[52,126051,126024],{"class":75},[52,126053,126027],{"class":62},[52,126055,126056],{"class":75},"\"1a86\"",[52,126058,389],{"class":75},[52,126060,126061],{"class":62}," ATTRS{idProduct}==\"7523\",",[52,126063,126038],{"class":62},[52,126065,126066],{"class":62}," SYMLINK+=\"mycar\"\n",[14,126068,126069],{},"代码解释：",[29,126071,126072,126075,126078,126081],{},[32,126073,126074],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[32,126076,126077],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[32,126079,126080],{},"SYMLINK是符号连接，即绑定的别名；",[32,126082,126083],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,126085,126086,126087,126090,126093],{},"***小提示：***",[26202,126088,126089],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[49,126091,126092],{},"\u002Fetc\u002Fudev\u002Frule.d",[26202,126094,126095],{},"目录即可。",[14,126097,126098],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,126100,126101],{},"（3）.使规则生效",[14,126103,126104],{},"在终端下输入如下指令：",[42,126106,126108],{"className":119946,"code":126107,"language":119948,"meta":47,"style":47},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[49,126109,126110,126115,126127,126138,126142,126147,126160],{"__ignoreMap":47},[52,126111,126112],{"class":54,"line":55},[52,126113,126114],{"class":94},"# Ubuntu用下方命令\n",[52,126116,126117,126119,126121,126124],{"class":54,"line":66},[52,126118,27226],{"class":75},[52,126120,122698],{"class":62},[52,126122,126123],{"class":62}," udev",[52,126125,126126],{"class":62}," reload\n",[52,126128,126129,126131,126133,126135],{"class":54,"line":83},[52,126130,27226],{"class":75},[52,126132,122698],{"class":62},[52,126134,126123],{"class":62},[52,126136,126137],{"class":62}," restart\n",[52,126139,126140],{"class":54,"line":91},[52,126141,123],{"emptyLinePlaceholder":122},[52,126143,126144],{"class":54,"line":98},[52,126145,126146],{"class":94},"#Fedora用下方命令\n",[52,126148,126149,126151,126154,126157],{"class":54,"line":107},[52,126150,27226],{"class":75},[52,126152,126153],{"class":62}," udevadm",[52,126155,126156],{"class":62}," control",[52,126158,126159],{"class":308}," --reload\n",[52,126161,126162,126164,126166],{"class":54,"line":113},[52,126163,27226],{"class":75},[52,126165,126153],{"class":62},[52,126167,126168],{"class":62}," trigger\n",[14,126170,126171],{},"再重新插拔设备即可。",[14,126173,126174],{},"（4）.测试",[14,126176,126177],{},"终端下输入如下指令",[42,126179,126181],{"className":119946,"code":126180,"language":119948,"meta":47,"style":47},"ll \u002Fdev | grep ttyUSB\n",[49,126182,126183],{"__ignoreMap":47},[52,126184,126185,126188,126191,126193,126195],{"class":54,"line":55},[52,126186,126187],{"class":75},"ll",[52,126189,126190],{"class":62}," \u002Fdev",[52,126192,27759],{"class":58},[52,126194,32886],{"class":75},[52,126196,126197],{"class":62}," ttyUSB\n",[14,126199,126200],{},"运行结果如下：",[14,126202,126203],{},[4509,126204],{"alt":47,"src":126205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,126207,126208,126209,126212],{},"也可以多次插拔USB设备，会发现设备端口",[49,126210,126211],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,126214,126215],{},[2389,126216,120614],{},[14,126218,126219],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[3195,126221,126223],{"id":126222},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,126225,126226,126228],{},[2389,126227,125942],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,126230,126231,126233],{},[2389,126232,125948],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,126235,126236],{},[2389,126237,125954],{},[14,126239,126240],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,126242,126243],{},"调用如下指令查看第一台雷达的USB信息：",[42,126245,126247],{"className":119946,"code":126246,"language":119948,"meta":47,"style":47},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[49,126248,126249,126269],{"__ignoreMap":47},[52,126250,126251,126254,126256,126259,126262,126264,126266],{"class":54,"line":55},[52,126252,126253],{"class":75},"udevadm",[52,126255,72471],{"class":62},[52,126257,126258],{"class":308}," --attribute-walk",[52,126260,126261],{"class":308}," --name=\u002Fdev\u002FttyUSB0",[52,126263,27759],{"class":58},[52,126265,32886],{"class":75},[52,126267,126268],{"class":62}," KERNELS\n",[52,126270,126271,126273,126275,126277,126280,126282,126284],{"class":54,"line":66},[52,126272,126253],{"class":75},[52,126274,72471],{"class":62},[52,126276,126258],{"class":308},[52,126278,126279],{"class":308}," --name=\u002Fdev\u002FttyACM0",[52,126281,27759],{"class":58},[52,126283,32886],{"class":75},[52,126285,126268],{"class":62},[14,126287,126288],{},[4509,126289],{"alt":47,"src":126290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,126292,126293],{},"调用如下指令查看第二台雷达的USB信息：",[42,126295,126297],{"className":119946,"code":126296,"language":119948,"meta":47,"style":47},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[49,126298,126299],{"__ignoreMap":47},[52,126300,126301,126303,126305,126307,126310,126312,126314],{"class":54,"line":55},[52,126302,126253],{"class":75},[52,126304,72471],{"class":62},[52,126306,126258],{"class":308},[52,126308,126309],{"class":308}," --name=\u002Fdev\u002FttyUSB1",[52,126311,27759],{"class":58},[52,126313,32886],{"class":75},[52,126315,126268],{"class":62},[14,126317,126318,126319,126322,126323,126326,126327,126330],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[49,126320,126321],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[49,126324,126325],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2389,126328,126329],{},"唯一性标识","”。",[14,126332,125982],{},[14,126334,125985,126335,126337],{},[49,126336,125988],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[42,126339,126340],{"className":119946,"code":125992,"language":119948,"meta":47,"style":47},[49,126341,126342],{"__ignoreMap":47},[52,126343,126344,126346,126348],{"class":54,"line":55},[52,126345,27226],{"class":75},[52,126347,121233],{"class":62},[52,126349,126003],{"class":62},[42,126351,126353],{"className":119946,"code":126352,"language":119948,"meta":47,"style":47},"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",[49,126354,126355,126384],{"__ignoreMap":47},[52,126356,126357,126359,126361,126363,126366,126368,126371,126374,126376,126379,126381],{"class":54,"line":55},[52,126358,126016],{"class":79},[52,126360,292],{"class":58},[52,126362,126021],{"class":62},[52,126364,126365],{"class":79}," KERNELS",[52,126367,292],{"class":58},[52,126369,126370],{"class":62},"=\"1-1.3:1.0\",",[52,126372,126373],{"class":75}," MODE:",[52,126375,292],{"class":62},[52,126377,126378],{"class":75},"\"0777\"",[52,126380,389],{"class":75},[52,126382,126383],{"class":62}," SYMLINK+=\"rplidar_front\"\n",[52,126385,126386,126388,126390,126392,126394,126396,126399,126401,126403,126405,126407],{"class":54,"line":66},[52,126387,126016],{"class":79},[52,126389,292],{"class":58},[52,126391,126021],{"class":62},[52,126393,126365],{"class":79},[52,126395,292],{"class":58},[52,126397,126398],{"class":62},"=\"1-1.4:1.0\",",[52,126400,126373],{"class":75},[52,126402,292],{"class":62},[52,126404,126378],{"class":75},[52,126406,389],{"class":75},[52,126408,126409],{"class":62}," SYMLINK+=\"rplidar_back\"\n",[14,126411,126101],{},[14,126413,126104],{},[42,126415,126416],{"className":119946,"code":126107,"language":119948,"meta":47,"style":47},[49,126417,126418,126422,126432,126442,126446,126450,126460],{"__ignoreMap":47},[52,126419,126420],{"class":54,"line":55},[52,126421,126114],{"class":94},[52,126423,126424,126426,126428,126430],{"class":54,"line":66},[52,126425,27226],{"class":75},[52,126427,122698],{"class":62},[52,126429,126123],{"class":62},[52,126431,126126],{"class":62},[52,126433,126434,126436,126438,126440],{"class":54,"line":83},[52,126435,27226],{"class":75},[52,126437,122698],{"class":62},[52,126439,126123],{"class":62},[52,126441,126137],{"class":62},[52,126443,126444],{"class":54,"line":91},[52,126445,123],{"emptyLinePlaceholder":122},[52,126447,126448],{"class":54,"line":98},[52,126449,126146],{"class":94},[52,126451,126452,126454,126456,126458],{"class":54,"line":107},[52,126453,27226],{"class":75},[52,126455,126153],{"class":62},[52,126457,126156],{"class":62},[52,126459,126159],{"class":308},[52,126461,126462,126464,126466],{"class":54,"line":113},[52,126463,27226],{"class":75},[52,126465,126153],{"class":62},[52,126467,126168],{"class":62},[14,126469,126171],{},[14,126471,126174],{},[14,126473,126177,126474,126477],{},[49,126475,126476],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,126479,126480],{},[4509,126481],{"alt":47,"src":126482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,126484,126485],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,126487,126488,126490],{},[2389,126489,120614],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[3195,126492,126494],{"id":126493},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,126496,126497],{},"（1）.查看所连接的主机USB接口的信息",[42,126499,126501],{"className":119946,"code":126500,"language":119948,"meta":47,"style":47},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[49,126502,126503,126533],{"__ignoreMap":47},[52,126504,126505,126507,126509,126512,126514,126516,126518,126520,126523,126526,126528,126531],{"class":54,"line":55},[52,126506,126253],{"class":75},[52,126508,72471],{"class":62},[52,126510,126511],{"class":308}," -a",[52,126513,31866],{"class":308},[52,126515,31072],{"class":79},[52,126517,126253],{"class":75},[52,126519,72471],{"class":62},[52,126521,126522],{"class":308}," -q",[52,126524,126525],{"class":62}," path",[52,126527,27765],{"class":308},[52,126529,126530],{"class":62}," \u002Fdev\u002FttyACM0",[52,126532,708],{"class":79},[52,126534,126535,126537,126539,126541,126543,126545,126547,126549,126551,126553,126555,126558],{"class":54,"line":66},[52,126536,126253],{"class":75},[52,126538,72471],{"class":62},[52,126540,126511],{"class":308},[52,126542,31866],{"class":308},[52,126544,31072],{"class":79},[52,126546,126253],{"class":75},[52,126548,72471],{"class":62},[52,126550,126522],{"class":308},[52,126552,126525],{"class":62},[52,126554,27765],{"class":308},[52,126556,126557],{"class":62}," \u002Fdev\u002FttyUSB0",[52,126559,708],{"class":79},[14,126561,126562],{},[4509,126563],{"alt":47,"src":126564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,126566,126567],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,126569,125982],{},[14,126571,125985,126572,126337],{},[49,126573,125988],{},[42,126575,126576],{"className":119946,"code":125992,"language":119948,"meta":47,"style":47},[49,126577,126578],{"__ignoreMap":47},[52,126579,126580,126582,126584],{"class":54,"line":55},[52,126581,27226],{"class":75},[52,126583,121233],{"class":62},[52,126585,126003],{"class":62},[42,126587,126589],{"className":119946,"code":126588,"language":119948,"meta":47,"style":47},"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",[49,126590,126591,126619,126645],{"__ignoreMap":47},[52,126592,126593,126595,126597,126600,126602,126604,126606,126608,126611,126614,126616],{"class":54,"line":55},[52,126594,126016],{"class":79},[52,126596,292],{"class":58},[52,126598,126599],{"class":62},"=\"ttyACM*\",",[52,126601,126024],{"class":75},[52,126603,126027],{"class":62},[52,126605,126056],{"class":75},[52,126607,389],{"class":75},[52,126609,126610],{"class":62}," ATTRS{idProduct}==\"55d4\",",[52,126612,126613],{"class":62}," ATTRS{serial}==\"0001\",",[52,126615,126038],{"class":62},[52,126617,126618],{"class":62}," SYMLINK+=\"ttyACM_MCU\"\n",[52,126620,126621,126623,126625,126627,126629,126631,126633,126635,126637,126640,126642],{"class":54,"line":66},[52,126622,126016],{"class":79},[52,126624,292],{"class":58},[52,126626,126599],{"class":62},[52,126628,126024],{"class":75},[52,126630,126027],{"class":62},[52,126632,126056],{"class":75},[52,126634,389],{"class":75},[52,126636,126610],{"class":62},[52,126638,126639],{"class":62}," ATTRS{serial}==\"0002\",",[52,126641,126038],{"class":62},[52,126643,126644],{"class":62}," SYMLINK+=\"ttyACM_Lidar\"\n",[52,126646,126647,126649,126651,126653,126655,126657,126659,126661,126663,126665],{"class":54,"line":83},[52,126648,126016],{"class":79},[52,126650,292],{"class":58},[52,126652,126021],{"class":62},[52,126654,126024],{"class":75},[52,126656,126027],{"class":62},[52,126658,126056],{"class":75},[52,126660,389],{"class":75},[52,126662,126061],{"class":62},[52,126664,126038],{"class":62},[52,126666,126667],{"class":62}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,126669,126101],{},[14,126671,126104],{},[42,126673,126674],{"className":119946,"code":126107,"language":119948,"meta":47,"style":47},[49,126675,126676,126680,126690,126700,126704,126708,126718],{"__ignoreMap":47},[52,126677,126678],{"class":54,"line":55},[52,126679,126114],{"class":94},[52,126681,126682,126684,126686,126688],{"class":54,"line":66},[52,126683,27226],{"class":75},[52,126685,122698],{"class":62},[52,126687,126123],{"class":62},[52,126689,126126],{"class":62},[52,126691,126692,126694,126696,126698],{"class":54,"line":83},[52,126693,27226],{"class":75},[52,126695,122698],{"class":62},[52,126697,126123],{"class":62},[52,126699,126137],{"class":62},[52,126701,126702],{"class":54,"line":91},[52,126703,123],{"emptyLinePlaceholder":122},[52,126705,126706],{"class":54,"line":98},[52,126707,126146],{"class":94},[52,126709,126710,126712,126714,126716],{"class":54,"line":107},[52,126711,27226],{"class":75},[52,126713,126153],{"class":62},[52,126715,126156],{"class":62},[52,126717,126159],{"class":308},[52,126719,126720,126722,126724],{"class":54,"line":113},[52,126721,27226],{"class":75},[52,126723,126153],{"class":62},[52,126725,126168],{"class":62},[14,126727,126728,126729],{},"再重新插拔设备即可，或者 ",[2389,126730,126731],{},"直接重启系统。",[14,126733,126174],{},[14,126735,126177,126736,126477],{},[49,126737,126476],{},[14,126739,126740],{},[4509,126741],{"alt":47,"src":126742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,126744,126485],{},[14,126746,126747,126749],{},[2389,126748,120614],{}," 一些设备可能没有串口号等。",[3195,126751,126753],{"id":126752},"_744-其他注意事项","7.4.4 其他注意事项",[14,126755,126756,126757,126759,126760,126763,126764,21058,126767,126770,126771,126773],{},"并非所有的USB设备端口号都是",[49,126758,126211],{},"的格式，比如Arduino的端口号可能是",[49,126761,126762],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[49,126765,126766],{},"videon",[49,126768,126769],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[49,126772,126766],{},"端口，绑定时需要关联的也是该接口。",[14,126775,126776,126777,126780,126781,126784,126785,126787,126788,126791,126792,126795,126796,126799,126800,126799,126803,126799,126806,31035],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[49,126778,126779],{},"KERNEL==\"ttyUSB*\"","修改为",[49,126782,126783],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[49,126786,126779],{},"修改为类似于",[49,126789,126790],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[49,126793,126794],{},"video[0,2,4,6]","表示可以绑定的端口为",[49,126797,126798],{},"video0","或",[49,126801,126802],{},"video2",[49,126804,126805],{},"video4",[49,126807,126808],{},"video6",[18,126810,126812],{"id":126811},"_75-挂载内网网页","7.5 挂载内网网页",[14,126814,126815],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,126817,126818],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,126820,126821],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,126823,126824,126825],{},"Termux 下载地址（F-Droid）：",[3451,126826,126827],{"href":126827,"rel":126828},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[26514],[14,126830,126831],{},"首先打开app后，先更新软件缓存：",[42,126833,126835],{"className":119946,"code":126834,"language":119948,"meta":47,"style":47},"pkg update\n",[49,126836,126837],{"__ignoreMap":47},[52,126838,126839,126842],{"class":54,"line":55},[52,126840,126841],{"class":75},"pkg",[52,126843,28892],{"class":62},[14,126845,126846],{},"然后换源",[42,126848,126850],{"className":119946,"code":126849,"language":119948,"meta":47,"style":47},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[49,126851,126852],{"__ignoreMap":47},[52,126853,126854,126856,126859],{"class":54,"line":55},[52,126855,125724],{"class":75},[52,126857,126858],{"class":79}," $PREFIX",[52,126860,126861],{"class":62},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,126863,126864],{},"将该文件内容替换为下面：",[42,126866,126868],{"className":119946,"code":126867,"language":119948,"meta":47,"style":47},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[49,126869,126870],{"__ignoreMap":47},[52,126871,126872,126875,126878,126881],{"class":54,"line":55},[52,126873,126874],{"class":75},"deb",[52,126876,126877],{"class":62}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[52,126879,126880],{"class":62}," stable",[52,126882,126883],{"class":62}," main\n",[29,126885,126886,126913],{},[32,126887,126888,126889,126891,126892],{},"如果你使用的是",[49,126890,125724],{},"编辑器：",[29,126893,126894,126901,126907],{},[32,126895,126896,126897,126900],{},"按 ",[49,126898,126899],{},"Ctrl+O"," 保存文件。",[32,126902,126896,126903,126906],{},[49,126904,126905],{},"Enter"," 确认文件名。",[32,126908,126896,126909,126912],{},[49,126910,126911],{},"Ctrl+X"," 退出编辑器。",[32,126914,126888,126915,126891,126918],{},[49,126916,126917],{},"vim",[29,126919,126920,126926],{},[32,126921,126896,126922,126925],{},[49,126923,126924],{},"Esc"," 退出编辑模式。",[32,126927,126928,126929,126931],{},"输入 ",[49,126930,121871],{}," 保存并退出。",[14,126933,126934],{},"接下来重新更新软件源：",[42,126936,126938],{"className":119946,"code":126937,"language":119948,"meta":47,"style":47},"pkg update && pkg upgrade\n",[49,126939,126940],{"__ignoreMap":47},[52,126941,126942,126944,126946,126948,126950],{"class":54,"line":55},[52,126943,126841],{"class":75},[52,126945,119997],{"class":62},[52,126947,28840],{"class":79},[52,126949,126841],{"class":75},[52,126951,119983],{"class":62},[14,126953,126954],{},"安装python：",[42,126956,126958],{"className":119946,"code":126957,"language":119948,"meta":47,"style":47},"pkg install python\n",[49,126959,126960],{"__ignoreMap":47},[52,126961,126962,126964,126966],{"class":54,"line":55},[52,126963,126841],{"class":75},[52,126965,26483],{"class":62},[52,126967,126968],{"class":62}," python\n",[14,126970,126971,29123],{},[2389,126972,126973],{},"通过Termux访问设备存储",[14,126975,126976],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[42,126978,126980],{"className":119946,"code":126979,"language":119948,"meta":47,"style":47},"termux-setup-storage\n",[49,126981,126982],{"__ignoreMap":47},[52,126983,126984],{"class":54,"line":55},[52,126985,126979],{"class":75},[1696,126987,126988],{},[32,126989,126990,29123,126993],{},[2389,126991,126992],{},"进入HTML文件所在的目录",[1696,126994,126995],{},[32,126996,126997,126998,127000],{},"使用",[49,126999,103926],{},"命令进入HTML文件所在的目录：",[42,127002,127004],{"className":119946,"code":127003,"language":119948,"meta":47,"style":47},"cd ~\u002Fyour_html_folder\n",[49,127005,127006],{"__ignoreMap":47},[52,127007,127008,127010],{"class":54,"line":55},[52,127009,103926],{"class":308},[52,127011,127012],{"class":62}," ~\u002Fyour_html_folder\n",[1696,127014,127015],{"start":66},[32,127016,127017,29123,127020,127025,127042],{},[2389,127018,127019],{},"启动Python HTTP服务器",[1696,127021,127022],{},[32,127023,127024],{},"运行以下命令启动一个简单的HTTP服务器：",[42,127026,127028],{"className":119946,"code":127027,"language":119948,"meta":47,"style":47},"python -m http.server 8000\n",[49,127029,127030],{"__ignoreMap":47},[52,127031,127032,127034,127036,127039],{"class":54,"line":55},[52,127033,33030],{"class":75},[52,127035,103532],{"class":308},[52,127037,127038],{"class":62}," http.server",[52,127040,127041],{"class":308}," 8000\n",[1696,127043,127044],{"start":83},[32,127045,127046,127047,127050],{},"这会在端口",[49,127048,127049],{},"8000","上启动一个Web服务器。",[29,127052,127053],{},[32,127054,127055],{},"启动服务器后，Termux会显示日志信息，例如：",[42,127057,127059],{"className":123466,"code":127058,"language":123468,"meta":123469,"style":47},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[49,127060,127061],{"__ignoreMap":47},[52,127062,127063],{"class":54,"line":55},[52,127064,127058],{},[29,127066,127067],{},[32,127068,127069],{},"这表示服务器已成功启动。",[14,127071,127072],{},[2389,127073,127074],{},"在浏览器中访问HTML文件",[1696,127076,127077],{},[32,127078,127079,29123,127082,127087],{},[2389,127080,127081],{},"在同一设备上访问",[1696,127083,127084],{},[32,127085,127086],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[42,127088,127091],{"className":127089,"code":127090,"language":74314,"meta":47,"style":47},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[49,127092,127093],{"__ignoreMap":47},[52,127094,127095,127098],{"class":54,"line":55},[52,127096,127097],{"class":79},"http:",[52,127099,127100],{"class":94},"\u002F\u002Flocalhost:8000\n",[29,127102,127103],{},[32,127104,127105,127106,127109],{},"如果HTML文件中有",[49,127107,127108],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[18,127111,127113],{"id":127112},"_76-linux重点知识","7.6 Linux重点知识",[3195,127115,127117],{"id":127116},"_761-关于点的说明","7.6.1 关于点的说明",[14,127119,127120],{},[4509,127121],{"alt":47,"src":127122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,127124,127125],{},"一点本目录，两点上目录",[3195,127127,127129],{"id":127128},"_762-目录","7.6.2 目录",[24646,127131,127133],{"id":127132},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,127135,127136],{},[2389,127137,127138],{},"\u002Fboot:",[14,127140,127141],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,127143,127144],{},[2389,127145,127146],{},"\u002Fetc:",[14,127148,127149],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,127151,127152],{},[2389,127153,127154],{},"\u002Flib：",[14,127156,127157],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,127159,127160],{},[2389,127161,127162],{},"\u002Fsys:",[14,127164,127165],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[24646,127167,127169],{"id":127168},"_7622-指令集合","7.6.2.2 指令集合",[14,127171,127172],{},[2389,127173,127174],{},"\u002Fbin:",[14,127176,127177],{},"为二进制文件的缩写，存放最经常使用的命令",[14,127179,127180],{},[2389,127181,127182],{},"\u002Fsbin:",[14,127184,127185],{},"只有系统管理员才能使用的程序和指令",[24646,127187,127189],{"id":127188},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,127191,127192],{},[2389,127193,127194],{},"\u002Fdev:",[14,127196,127197],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,127199,127200],{},[2389,127201,127202],{},"\u002Fmedia:",[14,127204,127205],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,127207,127208],{},[2389,127209,127210],{},"\u002Fmnt:",[14,127212,127213],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[24646,127215,127217],{"id":127216},"_7624-临时文件","7.6.2.4 临时文件",[14,127219,127220],{},[2389,127221,127222],{},"\u002Frun:",[14,127224,127225],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,127227,127228],{},[2389,127229,127230],{},"\u002Flost+found:",[14,127232,127233],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,127235,127236],{},[2389,127237,127238],{},"\u002Ftmp:",[14,127240,127241],{},"这个目录是用来存放一些临时文件的",[24646,127243,127245],{"id":127244},"_7625-账户","7.6.2.5 账户",[14,127247,127248],{},[2389,127249,127250],{},"\u002Froot：",[14,127252,127253],{},"系统管理员的用户主目录",[14,127255,127256,29123],{},[2389,127257,127258],{},"\u002Fhome",[14,127260,127261],{},"用户的主目录，以用户的账号命名的",[14,127263,127264,29123],{},[2389,127265,127266],{},"\u002Fusr",[14,127268,127269],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,127271,127272],{},[2389,127273,127274],{},"\u002Fusr\u002Fbin：",[14,127276,127277],{},"系统用户使用的应用程序与指令",[14,127279,127280],{},[2389,127281,127282],{},"\u002Fusr\u002Fsbin：",[14,127284,127285],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,127287,127288],{},[2389,127289,127290],{},"\u002Fusr\u002Fsrc：",[14,127292,127293],{},"内核源代码默认的放置目录",[24646,127295,127297],{"id":127296},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,127299,127300],{},[2389,127301,127302],{},"\u002Fvar：",[14,127304,127305],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,127307,127308],{},[2389,127309,127310],{},"\u002Fproc:",[14,127312,127313,127314,127317],{},"管理 ",[2389,127315,127316],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[24646,127319,127321],{"id":127320},"_7627-扩展用的","7.6.2.7 扩展用的",[14,127323,127324],{},[2389,127325,127326],{},"\u002Fopt:",[14,127328,127329],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,127331,127332],{},[2389,127333,127334],{},"\u002Fsrv:",[14,127336,127337],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[3195,127339,127341],{"id":127340},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,127343,127344],{},[4509,127345],{"alt":47,"src":127346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,127348,127349],{},"windows-->linux:",[14,127351,127352],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,127354,127355],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,127357,127358],{},"linux传输文件到windows",[14,127360,127361],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[3195,127363,127365],{"id":127364},"_764-易忘知识","7.6.4 易忘知识",[14,127367,127368],{},"操作系统内核查看",[42,127370,127371],{"className":119946,"code":123940,"language":119948,"meta":47,"style":47},[49,127372,127373],{"__ignoreMap":47},[52,127374,127375,127377],{"class":54,"line":55},[52,127376,72854],{"class":75},[52,127378,123949],{"class":308},[14,127380,127381],{},[4509,127382],{"alt":47,"src":127383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,127385,127386],{},[4509,127387],{"alt":47,"src":127388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[42,127390,127392],{"className":119946,"code":127391,"language":119948,"meta":47,"style":47},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[49,127393,127394,127406],{"__ignoreMap":47},[52,127395,127396,127398,127401,127404],{"class":54,"line":55},[52,127397,124157],{"class":75},[52,127399,127400],{"class":62}," mvtest",[52,127402,127403],{"class":62}," mvtest2",[52,127405,963],{"class":79},[52,127407,127408],{"class":54,"line":66},[52,127409,127410],{"class":75},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,127412,127413],{},[4509,127414],{"alt":47,"src":127415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,127417,127418],{},[4509,127419],{"alt":47,"src":127420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,127422,127423,127424,127427],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[49,127425,127426],{},"du -a"," 可以快速查看磁盘使用细节。",[3195,127429,127431],{"id":127430},"_765-vim","7.6.5 Vim",[14,127433,127434],{},[4509,127435],{"alt":47,"src":127436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,127438,127439],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,127441,127442],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,127444,127445],{},[2389,127446,127447],{},"1.命令模式：",[14,127449,127450],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,127452,127453],{},"x 删除当前光标所在处的字符",[14,127455,127456],{},"：切换到底线命令模式，以在最底一行输入命令",[14,127458,127459],{},"a 进行插入模式，在光标下一个位置输入文本",[14,127461,127462],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,127464,127465],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,127467,127468],{},"dd 剪切当前行",[14,127470,127471],{},"yy 复制当前行",[14,127473,127474],{},"p 粘贴剪贴板内容到光标下方",[14,127476,127477],{},"P 粘贴剪贴板内容到光标上方",[14,127479,127480],{},"u 撤销上一次操作",[14,127482,127483],{},"ctrl+r 重做上一次操作",[14,127485,127486,127488],{},[3985,127487],{}," 保存文件",[14,127490,127491,127493],{},[3842,127492],{}," 退出Vim编辑器",[14,127495,127496,127498],{},[3842,127497],{},"! 强制退出Vim编辑器，不保存修改",[14,127500,127501],{},[2389,127502,127503],{},"2.输入模式：",[14,127505,127506],{},[4509,127507],{"alt":47,"src":127508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,127510,127511],{},[2389,127512,127513],{},"3.底线命令模式：",[14,127515,127516],{},[4509,127517],{"alt":47,"src":127518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,127520,127521],{},"按下esc可以退出底线命令模式",[3195,127523,127525],{"id":127524},"_766-apt","7.6.6 apt",[14,127527,127528],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[3195,127530,127532],{"id":127531},"_767-home与root的区别","7.6.7 home与root的区别",[14,127534,127535],{},[4509,127536],{"alt":47,"src":127537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,127539,127540],{},[4509,127541],{"alt":47,"src":127542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,127544,127545],{},[4509,127546],{"alt":47,"src":127547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,127549,127550],{},[4509,127551],{"alt":47,"src":127552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[3195,127554,127556],{"id":127555},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,127558,127559],{},[3451,127560,127561],{"href":127561,"rel":127562},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[26514],[1696,127564,127565,127568],{},[32,127566,127567],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[32,127569,127570],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,127572,127573],{},[4509,127574],{"alt":47,"src":127575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,127577,127578],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,127580,127581],{},[4509,127582],{"alt":47,"src":127583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[42,127585,127587],{"className":123466,"code":127586,"language":123468,"meta":123469,"style":47},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[49,127588,127589,127594],{"__ignoreMap":47},[52,127590,127591],{"class":54,"line":55},[52,127592,127593],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[52,127595,127596],{"class":54,"line":66},[52,127597,127598],{},".\u002Fpycharm.sh\n",[14,127600,127601],{},"3️⃣创建.desktop文件",[14,127603,127604],{},[2389,127605,127606],{},"原理：",[29,127608,127609,127619],{},[32,127610,127611,127612,127618],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2389,127613,127614,127617],{},[49,127615,127616],{},".desktop"," 文件"," 来识别应用。",[32,127620,127621,127623,127624],{},[49,127622,127616],{}," 文件相当于一个“应用注册表”，告诉系统：",[29,127625,127626,127629,127632,127635,127638],{},[32,127627,127628],{},"应用名字（Name）",[32,127630,127631],{},"图标（Icon）",[32,127633,127634],{},"执行命令（Exec）",[32,127636,127637],{},"分类（Categories）",[32,127639,127640],{},"是否需要终端（Terminal）",[42,127642,127644],{"className":123466,"code":127643,"language":123468,"meta":123469,"style":47},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[49,127645,127646,127651],{"__ignoreMap":47},[52,127647,127648],{"class":54,"line":55},[52,127649,127650],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[52,127652,127653],{"class":54,"line":66},[52,127654,127655],{},"nano pycharm.desktop\n",[14,127657,127658],{},"nano是一个命令行下的编辑器，也可以使用vim",[42,127660,127662],{"className":123466,"code":127661,"language":123468,"meta":123469,"style":47},"[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",[49,127663,127664,127669,127674,127679,127684,127689,127694,127699,127704,127709],{"__ignoreMap":47},[52,127665,127666],{"class":54,"line":55},[52,127667,127668],{},"[Desktop Entry]\n",[52,127670,127671],{"class":54,"line":66},[52,127672,127673],{},"Version=1.0\n",[52,127675,127676],{"class":54,"line":83},[52,127677,127678],{},"Type=Application\n",[52,127680,127681],{"class":54,"line":91},[52,127682,127683],{},"Name=PyCharm\n",[52,127685,127686],{"class":54,"line":98},[52,127687,127688],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[52,127690,127691],{"class":54,"line":107},[52,127692,127693],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[52,127695,127696],{"class":54,"line":113},[52,127697,127698],{},"Comment=JetBrains PyCharm IDE\n",[52,127700,127701],{"class":54,"line":119},[52,127702,127703],{},"Categories=Development;IDE;\n",[52,127705,127706],{"class":54,"line":126},[52,127707,127708],{},"Terminal=false\n",[52,127710,127711],{"class":54,"line":132},[52,127712,127713],{},"StartupWMClass=jetbrains-pycharm\n",[29,127715,127716,127722,127728,127734],{},[32,127717,127718,127721],{},[49,127719,127720],{},"Exec"," → 点击图标时执行的命令",[32,127723,127724,127727],{},[49,127725,127726],{},"Icon"," → 显示在菜单和桌面上的图标",[32,127729,127730,127733],{},[49,127731,127732],{},"Terminal=false"," → 不打开终端",[32,127735,127736,127739],{},[49,127737,127738],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[127741,127742,127743],"blockquote",{},[14,127744,127745,127746,127748,127749],{},"可以理解成 ",[49,127747,127616],{}," 文件是 Linux 的 ",[2389,127750,127751],{},"快捷方式配置文件",[14,127753,127754],{},"4️⃣设置可执行权限",[42,127756,127758],{"className":123466,"code":127757,"language":123468,"meta":123469,"style":47},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[49,127759,127760],{"__ignoreMap":47},[52,127761,127762],{"class":54,"line":55},[52,127763,127757],{},[14,127765,127766],{},"5️⃣桌面图标启动的话如下：",[42,127768,127770],{"className":123466,"code":127769,"language":123468,"meta":123469,"style":47},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[49,127771,127772,127777],{"__ignoreMap":47},[52,127773,127774],{"class":54,"line":55},[52,127775,127776],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[52,127778,127779],{"class":54,"line":66},[52,127780,127781],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[1696,127783,127784],{"start":83},[32,127785,127786],{},"下载Appimage文件实现软件的安装",[14,127788,127789],{},"1️⃣先下载appimage",[14,127791,127792],{},[3451,127793,127794],{"href":127794,"rel":127795},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[26514],[14,127797,127798],{},[4509,127799],{"alt":47,"src":127800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,127802,127803],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,127805,127806],{},[4509,127807],{"alt":47,"src":127808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,127810,127811],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,127813,127814],{},[4509,127815],{"alt":47,"src":127816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,127818,127819],{},[4509,127820],{"alt":47,"src":127821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,127823,127824,127825,127828],{},"3️⃣给他们放在",[49,127826,127827],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,127830,127831],{},"4️⃣给软件执行权限",[42,127833,127835],{"className":123466,"code":127834,"language":123468,"meta":123469,"style":47},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[49,127836,127837,127842],{"__ignoreMap":47},[52,127838,127839],{"class":54,"line":55},[52,127840,127841],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[52,127843,127844],{"class":54,"line":66},[52,127845,127846],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,127848,127849],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[42,127851,127853],{"className":119946,"code":127852,"language":119948,"meta":47,"style":47},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[49,127854,127855,127862,127869,127875],{"__ignoreMap":47},[52,127856,127857,127859],{"class":54,"line":55},[52,127858,103926],{"class":308},[52,127860,127861],{"class":62}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[52,127863,127864,127866],{"class":54,"line":66},[52,127865,103933],{"class":75},[52,127867,127868],{"class":62}," .\u002Fqqmusic.desktop\n",[52,127870,127871,127873],{"class":54,"line":83},[52,127872,126917],{"class":75},[52,127874,127868],{"class":62},[52,127876,127877,127879,127881,127883],{"class":54,"line":91},[52,127878,27226],{"class":75},[52,127880,27229],{"class":62},[52,127882,125783],{"class":62},[52,127884,127868],{"class":62},[14,127886,127887,127889],{},[49,127888,103933],{},"：一个 Linux 命令，主要功能是：",[29,127891,127892,127895],{},[32,127893,127894],{},"如果文件不存在，就创建一个新的空文件",[32,127896,127897],{},"如果文件已存在，就更新该文件的最后修改时间",[42,127899,127901],{"className":123466,"code":127900,"language":123468,"meta":123469,"style":47},"[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",[49,127902,127903,127907,127912,127917,127922,127926,127931],{"__ignoreMap":47},[52,127904,127905],{"class":54,"line":55},[52,127906,127668],{},[52,127908,127909],{"class":54,"line":66},[52,127910,127911],{},"Name=QQ音乐\n",[52,127913,127914],{"class":54,"line":83},[52,127915,127916],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[52,127918,127919],{"class":54,"line":91},[52,127920,127921],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[52,127923,127924],{"class":54,"line":98},[52,127925,127678],{},[52,127927,127928],{"class":54,"line":107},[52,127929,127930],{},"Categories=Audio;Music;Player;\n",[52,127932,127933],{"class":54,"line":113},[52,127934,127935],{},"Comment=QQ Music Client for Linux\n",[14,127937,127938],{},"将文件复制进去",[14,127940,127941],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,127943,127944],{},[4509,127945],{"alt":47,"src":127946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,127948,127949],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,127951,127952],{},[4509,127953],{"alt":47,"src":127954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,127956,127957,127958,127961,127962,127965],{},"如果你用的不是KDE，那么也可以直接修改",[49,127959,127960],{},"qqmuic.desktop","：在exec的末尾加上",[49,127963,127964],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[42,127967,127969],{"className":123466,"code":127968,"language":123468,"meta":123469,"style":47},"[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",[49,127970,127971,127975,127979,127984,127988,127992,127996],{"__ignoreMap":47},[52,127972,127973],{"class":54,"line":55},[52,127974,127668],{},[52,127976,127977],{"class":54,"line":66},[52,127978,127911],{},[52,127980,127981],{"class":54,"line":83},[52,127982,127983],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[52,127985,127986],{"class":54,"line":91},[52,127987,127921],{},[52,127989,127990],{"class":54,"line":98},[52,127991,127678],{},[52,127993,127994],{"class":54,"line":107},[52,127995,127930],{},[52,127997,127998],{"class":54,"line":113},[52,127999,127935],{},[14,128001,128002],{},[4509,128003],{"alt":47,"src":128004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,128006,128007],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[42,128009,128011],{"className":123466,"code":128010,"language":123468,"meta":123469,"style":47},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[49,128012,128013],{"__ignoreMap":47},[52,128014,128015],{"class":54,"line":55},[52,128016,128010],{},[1696,128018,128019],{"start":91},[32,128020,128021],{},"去Flathub上安装软件",[14,128023,128024],{},[3451,128025,128026],{"href":128026,"rel":128027},"https:\u002F\u002Fflathub.org\u002F",[26514],[14,128029,128030],{},"1️⃣去上面的官网搜索软件+下载软件",[14,128032,128033],{},[4509,128034],{"alt":47,"src":128035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[42,128037,128039],{"className":123466,"code":128038,"language":123468,"meta":123469,"style":47},"flatpak install flathub com.obsproject.Studio\n",[49,128040,128041],{"__ignoreMap":47},[52,128042,128043],{"class":54,"line":55},[52,128044,128038],{},[14,128046,128047],{},[4509,128048],{"alt":47,"src":128049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,128051,128052],{},"2️⃣运行软件",[14,128054,128055],{},"a.官方方式：",[14,128057,128058],{},[4509,128059],{"alt":47,"src":128060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[42,128062,128063],{"className":123466,"code":128038,"language":123468,"meta":123469,"style":47},[49,128064,128065],{"__ignoreMap":47},[52,128066,128067],{"class":54,"line":55},[52,128068,128038],{},[14,128070,128071],{},"b.当普通软件运行：",[14,128073,128074],{},[4509,128075],{"alt":47,"src":128076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,128078,128079],{},[4509,128080],{"alt":47,"src":128081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[3141,128083,128084],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":47,"searchDepth":66,"depth":66,"links":128086},[128087,128088,128093,128094,128100,128101],{"id":124819,"depth":66,"text":124820},{"id":125161,"depth":66,"text":125162,"children":128089},[128090,128091,128092],{"id":125165,"depth":83,"text":125166},{"id":125232,"depth":83,"text":125233},{"id":125493,"depth":83,"text":125494},{"id":125646,"depth":66,"text":125647},{"id":125884,"depth":66,"text":125885,"children":128095},[128096,128097,128098,128099],{"id":125936,"depth":83,"text":125937},{"id":126222,"depth":83,"text":126223},{"id":126493,"depth":83,"text":126494},{"id":126752,"depth":83,"text":126753},{"id":126811,"depth":66,"text":126812},{"id":127112,"depth":66,"text":127113,"children":128102},[128103,128104,128105,128106,128107,128108,128109,128110],{"id":127116,"depth":83,"text":127117},{"id":127128,"depth":83,"text":127129},{"id":127340,"depth":83,"text":127341},{"id":127364,"depth":83,"text":127365},{"id":127430,"depth":83,"text":127431},{"id":127524,"depth":83,"text":127525},{"id":127531,"depth":83,"text":127532},{"id":127555,"depth":83,"text":127556},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":124811,"description":26025},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":128117,"title":128118,"body":128119,"description":26025,"extension":3153,"meta":128123,"navigation":122,"path":128124,"seo":128125,"stem":128126,"__hash__":128127},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":128120,"toc":128121},[],{"title":47,"searchDepth":66,"depth":66,"links":128122},[],{"category":32913},"\u002Fwiki\u002F2025-01-27-linux",{"title":128118,"description":26025},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":128129,"title":128130,"body":128131,"description":128135,"extension":3153,"meta":128526,"navigation":122,"path":128527,"seo":128528,"stem":128529,"__hash__":128530},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":128132,"toc":128524},[128133,128136,128140,128157,128160,128213,128217,128219,128259,128268,128272,128275,128516,128521],[14,128134,128135],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,128137,128139],{"id":128138},"_1ubuntu环境配置","1.Ubuntu环境配置",[1696,128141,128142,128145,128148,128151,128154],{},[32,128143,128144],{},"ubuntu环境换源",[32,128146,128147],{},"安装cuda",[32,128149,128150],{},"安装miniconda",[32,128152,128153],{},"安装pytorch",[32,128155,128156],{},"安装genesis",[14,128158,128159],{},"参考链接：",[42,128161,128163],{"className":26471,"code":128162,"language":26473,"meta":47,"style":47},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[49,128164,128165],{"__ignoreMap":47},[52,128166,128167,128170,128173,128176,128178,128181,128184,128186,128189,128192,128194,128197,128200,128202,128205,128208,128210],{"class":54,"line":55},[52,128168,128169],{"class":75},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[52,128171,128172],{"class":62},"=blogdetail",[52,128174,128175],{"class":79},"&sharetype",[52,128177,292],{"class":58},[52,128179,128180],{"class":62},"blogdetail",[52,128182,128183],{"class":79},"&sharerId",[52,128185,292],{"class":58},[52,128187,128188],{"class":62},"144728092",[52,128190,128191],{"class":79},"&sharerefer",[52,128193,292],{"class":58},[52,128195,128196],{"class":62},"PC",[52,128198,128199],{"class":79},"&sharesource",[52,128201,292],{"class":58},[52,128203,128204],{"class":62},"qq_69379513",[52,128206,128207],{"class":79},"&sharefrom",[52,128209,292],{"class":58},[52,128211,128212],{"class":62},"from_link\n",[10,128214,128216],{"id":128215},"_2genesis-报错issue","2.Genesis 报错issue",[14,128218,128159],{},[42,128220,128221],{"className":26471,"code":128162,"language":26473,"meta":47,"style":47},[49,128222,128223],{"__ignoreMap":47},[52,128224,128225,128227,128229,128231,128233,128235,128237,128239,128241,128243,128245,128247,128249,128251,128253,128255,128257],{"class":54,"line":55},[52,128226,128169],{"class":75},[52,128228,128172],{"class":62},[52,128230,128175],{"class":79},[52,128232,292],{"class":58},[52,128234,128180],{"class":62},[52,128236,128183],{"class":79},[52,128238,292],{"class":58},[52,128240,128188],{"class":62},[52,128242,128191],{"class":79},[52,128244,292],{"class":58},[52,128246,128196],{"class":62},[52,128248,128199],{"class":79},[52,128250,292],{"class":58},[52,128252,128204],{"class":62},[52,128254,128207],{"class":79},[52,128256,292],{"class":58},[52,128258,128212],{"class":62},[42,128260,128262],{"className":26471,"code":128261,"language":26473,"meta":47,"style":47},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[49,128263,128264],{"__ignoreMap":47},[52,128265,128266],{"class":54,"line":55},[52,128267,128261],{"class":75},[10,128269,128271],{"id":128270},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,128273,128274],{},"hello_robot.py",[42,128276,128278],{"className":33028,"code":128277,"language":33030,"meta":47,"style":47},"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",[49,128279,128280,128286,128301,128305,128317,128329,128333,128346,128350,128369,128379,128389,128403,128407,128411,128416,128420,128430,128437,128451,128458,128468,128473,128477,128495,128500,128504,128511],{"__ignoreMap":47},[52,128281,128282,128284],{"class":54,"line":55},[52,128283,33042],{"class":58},[52,128285,47955],{"class":79},[52,128287,128288,128291,128294,128296,128298],{"class":54,"line":66},[52,128289,128290],{"class":79},"os.environ[",[52,128292,128293],{"class":62},"'PYOPENGL_PLATFORM'",[52,128295,7415],{"class":79},[52,128297,292],{"class":58},[52,128299,128300],{"class":62}," 'glx'\n",[52,128302,128303],{"class":54,"line":83},[52,128304,123],{"emptyLinePlaceholder":122},[52,128306,128307,128309,128312,128314],{"class":54,"line":91},[52,128308,33042],{"class":58},[52,128310,128311],{"class":79}," genesis ",[52,128313,34033],{"class":58},[52,128315,128316],{"class":79}," gs\n",[52,128318,128319,128321,128324,128326],{"class":54,"line":98},[52,128320,33387],{"class":58},[52,128322,128323],{"class":79}," pynput ",[52,128325,33042],{"class":58},[52,128327,128328],{"class":79}," keyboard\n",[52,128330,128331],{"class":54,"line":107},[52,128332,123],{"emptyLinePlaceholder":122},[52,128334,128335,128338,128341,128343],{"class":54,"line":113},[52,128336,128337],{"class":79},"gs.init(",[52,128339,128340],{"class":1223},"backend",[52,128342,292],{"class":58},[52,128344,128345],{"class":79},"gs.gpu)\n",[52,128347,128348],{"class":54,"line":119},[52,128349,123],{"emptyLinePlaceholder":122},[52,128351,128352,128355,128357,128360,128363,128365,128367],{"class":54,"line":126},[52,128353,128354],{"class":79},"scene ",[52,128356,292],{"class":58},[52,128358,128359],{"class":79}," gs.Scene(",[52,128361,128362],{"class":1223},"show_viewer",[52,128364,292],{"class":58},[52,128366,34126],{"class":308},[52,128368,708],{"class":79},[52,128370,128371,128374,128376],{"class":54,"line":132},[52,128372,128373],{"class":79},"plane ",[52,128375,292],{"class":58},[52,128377,128378],{"class":79}," scene.add_entity(gs.morphs.Plane())\n",[52,128380,128381,128384,128386],{"class":54,"line":138},[52,128382,128383],{"class":79},"franka ",[52,128385,292],{"class":58},[52,128387,128388],{"class":79}," scene.add_entity(\n",[52,128390,128391,128394,128396,128398,128401],{"class":54,"line":144},[52,128392,128393],{"class":79},"    gs.morphs.MJCF(",[52,128395,48004],{"class":1223},[52,128397,292],{"class":58},[52,128399,128400],{"class":62},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[52,128402,40697],{"class":79},[52,128404,128405],{"class":54,"line":153},[52,128406,708],{"class":79},[52,128408,128409],{"class":54,"line":159},[52,128410,123],{"emptyLinePlaceholder":122},[52,128412,128413],{"class":54,"line":167},[52,128414,128415],{"class":79},"scene.build()\n",[52,128417,128418],{"class":54,"line":173},[52,128419,123],{"emptyLinePlaceholder":122},[52,128421,128422,128424,128427],{"class":54,"line":181},[52,128423,34597],{"class":58},[52,128425,128426],{"class":75}," on_press",[52,128428,128429],{"class":79},"(key):\n",[52,128431,128432,128435],{"class":54,"line":186},[52,128433,128434],{"class":58},"    try",[52,128436,6718],{"class":79},[52,128438,128439,128441,128444,128446,128449],{"class":54,"line":191},[52,128440,5497],{"class":58},[52,128442,128443],{"class":79}," key.char ",[52,128445,5938],{"class":58},[52,128447,128448],{"class":62}," 'q'",[52,128450,6718],{"class":79},[52,128452,128453,128455],{"class":54,"line":196},[52,128454,18380],{"class":58},[52,128456,128457],{"class":308}," False\n",[52,128459,128460,128463,128466],{"class":54,"line":201},[52,128461,128462],{"class":58},"    except",[52,128464,128465],{"class":308}," AttributeError",[52,128467,6718],{"class":79},[52,128469,128470],{"class":54,"line":206},[52,128471,128472],{"class":58},"        pass\n",[52,128474,128475],{"class":54,"line":211},[52,128476,123],{"emptyLinePlaceholder":122},[52,128478,128479,128482,128484,128487,128490,128492],{"class":54,"line":218},[52,128480,128481],{"class":79},"listener ",[52,128483,292],{"class":58},[52,128485,128486],{"class":79}," keyboard.Listener(",[52,128488,128489],{"class":1223},"on_press",[52,128491,292],{"class":58},[52,128493,128494],{"class":79},"on_press)\n",[52,128496,128497],{"class":54,"line":223},[52,128498,128499],{"class":79},"listener.start()\n",[52,128501,128502],{"class":54,"line":230},[52,128503,123],{"emptyLinePlaceholder":122},[52,128505,128506,128508],{"class":54,"line":239},[52,128507,111313],{"class":58},[52,128509,128510],{"class":79}," listener.running:\n",[52,128512,128513],{"class":54,"line":251},[52,128514,128515],{"class":79},"    scene.step()\n",[14,128517,128518],{},[4509,128519],{"alt":47,"src":128520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[3141,128522,128523],{},"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":47,"searchDepth":66,"depth":66,"links":128525},[],{"category":26027},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":128130,"description":128135},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128532,"title":128533,"body":128534,"description":26025,"extension":3153,"meta":128549,"navigation":122,"path":128550,"seo":128551,"stem":128552,"__hash__":128553},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128535,"toc":128546},[128536,128539,128543],[10,128537,128533],{"id":128538},"_1-基础知识",[18,128540,128542],{"id":128541},"_11-js的组成","1.1 js的组成",[14,128544,128545],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":47,"searchDepth":66,"depth":66,"links":128547},[128548],{"id":128541,"depth":66,"text":128542},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128533,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128555,"title":128556,"body":128557,"description":26025,"extension":3153,"meta":128696,"navigation":122,"path":128697,"seo":128698,"stem":128699,"__hash__":128700},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128558,"toc":128684},[128559,128562,128566,128569,128573,128583,128587,128590,128593,128596,128600,128607,128613,128617,128623,128634,128638,128641,128645,128648,128652,128655,128659,128662,128666,128669,128672,128675,128678,128681],[10,128560,128556],{"id":128561},"_2-vscode必备内容",[18,128563,128565],{"id":128564},"_21-标签分类","2.1 标签分类",[14,128567,128568],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[18,128570,128572],{"id":128571},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,128574,128575,128576,128578,128579,128582],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[49,128577,3439],{}," 然后按 ",[49,128580,128581],{},"Tab","，快速自动生成基本结构。",[18,128584,128586],{"id":128585},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,128588,128589],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,128591,128592],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,128594,128595],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[18,128597,128599],{"id":128598},"_24-视图缩放","2.4 视图缩放",[14,128601,128602,128603,128606],{},"缩放视图 ",[49,128604,128605],{},"ctrl+"," 可实现代码增大。",[14,128608,128609,128612],{},[49,128610,128611],{},"ctrl-"," 可实现代码减小。",[18,128614,128616],{"id":128615},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,128618,128619,128620,31035],{},"VSCode 新建文件快捷键为 ",[49,128621,128622],{},"ctrl+N",[14,128624,128625,128626,128629,128630,128633],{},"保存快捷键为 ",[49,128627,128628],{},"ctrl+S","，将文本保存为 ",[49,128631,128632],{},".html"," 文件。",[18,128635,128637],{"id":128636},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,128639,128640],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[18,128642,128644],{"id":128643},"_27-vscode-icons","2.7 vscode-icons",[14,128646,128647],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[18,128649,128651],{"id":128650},"_28-easy-less","2.8 Easy LESS",[14,128653,128654],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[18,128656,128658],{"id":128657},"_29-会了吧插件","2.9 会了吧插件",[14,128660,128661],{},"会了吧插件可以展示代码中英语单词的意思。",[18,128663,128665],{"id":128664},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,128667,128668],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,128670,128671],{},"②选定多个相同的单词:ctrl+D",[14,128673,128674],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,128676,128677],{},"④全局替换某些单词:ctrl+h",[14,128679,128680],{},"⑤快速定位到某一行:ctrl+g",[14,128682,128683],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":47,"searchDepth":66,"depth":66,"links":128685},[128686,128687,128688,128689,128690,128691,128692,128693,128694,128695],{"id":128564,"depth":66,"text":128565},{"id":128571,"depth":66,"text":128572},{"id":128585,"depth":66,"text":128586},{"id":128598,"depth":66,"text":128599},{"id":128615,"depth":66,"text":128616},{"id":128636,"depth":66,"text":128637},{"id":128643,"depth":66,"text":128644},{"id":128650,"depth":66,"text":128651},{"id":128657,"depth":66,"text":128658},{"id":128664,"depth":66,"text":128665},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128556,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":128702,"title":128703,"body":128704,"description":26025,"extension":3153,"meta":128863,"navigation":122,"path":128864,"seo":128865,"stem":128866,"__hash__":128867},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":128705,"toc":128855},[128706,128709,128713,128723,128729,128735,128739,128748,128752,128757,128760,128763,128767,128770,128780,128789,128798,128807,128817,128824,128829,128834,128847],[10,128707,128703],{"id":128708},"_3-html文本与容器标签",[18,128710,128712],{"id":128711},"_31-标题标签","3.1 标题标签",[14,128714,128715,128718,128719,128722],{},[49,128716,128717],{},"\u003Ch1>","我是一级标签",[49,128720,128721],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,128724,128725,128718,128727],{},[49,128726,128717],{},[49,128728,128721],{},[14,128730,125985,128731,128734],{},[49,128732,128733],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[18,128736,128738],{"id":128737},"_32-段落标签","3.2 段落标签",[14,128740,128741,128744,128745],{},[49,128742,128743],{},"\u003Cp>","....",[49,128746,128747],{},"\u003C\u002Fp>",[18,128749,128751],{"id":128750},"_33-换行标签","3.3 换行标签",[14,128753,128754],{},[49,128755,128756],{},"\u003Cbr \u002F>",[14,128758,128759],{},"具有强制换行的作用",[14,128761,128762],{},"单标签",[18,128764,128766],{"id":128765},"_34-文本格式化标签","3.4 文本格式化标签",[14,128768,128769],{},"提供粗体、斜体和下划线等效果",[14,128771,128772,128773,85189,128776,128779],{},"加粗：",[49,128774,128775],{},"\u003Cstrong>...\u003C\u002Fstrong>",[49,128777,128778],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,128781,128782,128783,85189,128786,128779],{},"斜体：",[49,128784,128785],{},"\u003Cem>...\u003C\u002Fem>",[49,128787,128788],{},"\u003Ci>...\u003C\u002Fi>",[14,128790,128791,128792,85189,128795,128779],{},"删除线：",[49,128793,128794],{},"\u003Cdel>...\u003C\u002Fdel>",[49,128796,128797],{},"\u003Cs>...\u003C\u002Fs>",[14,128799,128800,128801,85189,128804,128779],{},"下划线：",[49,128802,128803],{},"\u003Cins>...\u003C\u002Fins>",[49,128805,128806],{},"\u003Cu>...\u003C\u002Fu>",[18,128808,128810,128811,21058,128814,105343],{"id":128809},"_35-div和span标签","3.5 ",[49,128812,128813],{},"\u003Cdiv>",[49,128815,128816],{},"\u003Cspan>",[14,128818,128819,103668,128821,128823],{},[49,128820,128813],{},[49,128822,128816],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,128825,128826],{},[49,128827,128828],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,128830,128831],{},[49,128832,128833],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,128835,128836,128837,128839,128840,128842,128843,128846],{},"两者特点：①",[49,128838,128813],{}," 标签用来布局，但一行通常只放一个 ",[49,128841,128813],{},"。可以理解为一个大盒子，独占一行，在 ",[49,128844,128845],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,128848,79899,128849,128851,128852,128854],{},[49,128850,128816],{}," 标签也可用于布局，一行可以放多个 ",[49,128853,128816],{},"，可理解为小盒子。",{"title":47,"searchDepth":66,"depth":66,"links":128856},[128857,128858,128859,128860,128861],{"id":128711,"depth":66,"text":128712},{"id":128737,"depth":66,"text":128738},{"id":128750,"depth":66,"text":128751},{"id":128765,"depth":66,"text":128766},{"id":128809,"depth":66,"text":128862},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":128703,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128869,"title":128870,"body":128871,"description":26025,"extension":3153,"meta":129068,"navigation":122,"path":129069,"seo":129070,"stem":129071,"__hash__":129072},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128872,"toc":129060},[128873,128876,128880,128883,128889,128896,128902,128908,128911,128914,128917,128920,128923,128926,128929,128933,128936,128939,128942,128948,128954,128960,128967,128971,128977,128983,128986,128989,128995,129001,129007,129010,129013,129017,129020,129030,129036,129040,129049,129053,129056],[10,128874,128870],{"id":128875},"_4-html图像与链接",[18,128877,128879],{"id":128878},"_41-图像标签","4.1 图像标签",[14,128881,128882],{},"（1）标签",[14,128884,128885,128888],{},[49,128886,128887],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,128890,128891,128892,128895],{},"src是",[49,128893,128894],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,128897,128898,128899],{},"alt:文本，替换文本。图像不能显示的文字 ",[49,128900,128901],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,128903,128904,128905],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[49,128906,128907],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,128909,128910],{},"width:像素，设置图像的宽度",[14,128912,128913],{},"height:像素，设置图像的高度",[14,128915,128916],{},"border：像素，设置图像的边框粗细",[14,128918,128919],{},"（2）图像标签属性的注意点：",[14,128921,128922],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,128924,128925],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,128927,128928],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[18,128930,128932],{"id":128931},"_42-路径注意要点","4.2 路径注意要点：",[14,128934,128935],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,128937,128938],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,128940,128941],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,128943,128944,128945],{},"①同一级路径：图像文件位于HTML文件同一级，如",[49,128946,128947],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,128949,128950,128951],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[49,128952,128953],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,128955,128956,128957],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[49,128958,128959],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,128961,128962,128963,2844],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[3451,128964,128965],{"href":128965,"rel":128966},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[26514],[18,128968,128970],{"id":128969},"_43-超链接标签","4.3 超链接标签",[14,128972,128973,128976],{},[49,128974,128975],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,128978,128979,128980],{},"①语法格式：",[49,128981,128982],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,128984,128985],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,128987,128988],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,128990,128991,128992],{},"③链接分类：外部链接：",[49,128993,128994],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,128996,128997,128998],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[49,128999,129000],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,129002,129003,129004],{},"空链接：如果当时没有确定链接目标时，",[49,129005,129006],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,129008,129009],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,129011,129012],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[18,129014,129016],{"id":129015},"_44-锚点链接","4.4 锚点链接",[14,129018,129019],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,129021,129022,129023,129026,129027],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[49,129024,129025],{},"\u003Ca href=\"#two\">","第二级",[49,129028,129029],{},"\u003C\u002Fa>",[14,129031,129032,129033],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[49,129034,129035],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[18,129037,129039],{"id":129038},"_45-注释标签","4.5 注释标签",[14,129041,129042,129045,129046],{},[49,129043,129044],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[49,129047,129048],{},"ctrl+\u002F",[18,129050,129052],{"id":129051},"_46-特殊字符","4.6 特殊字符",[14,129054,129055],{},"可以实现添加多个空格",[4509,129057],{"style":129058,"src":129059},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":47,"searchDepth":66,"depth":66,"links":129061},[129062,129063,129064,129065,129066,129067],{"id":128878,"depth":66,"text":128879},{"id":128931,"depth":66,"text":128932},{"id":128969,"depth":66,"text":128970},{"id":129015,"depth":66,"text":129016},{"id":129038,"depth":66,"text":129039},{"id":129051,"depth":66,"text":129052},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128870,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":129074,"title":129075,"body":129076,"description":26025,"extension":3153,"meta":129369,"navigation":122,"path":129370,"seo":129371,"stem":129372,"__hash__":129373},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":129077,"toc":129360},[129078,129081,129085,129088,129091,129094,129097,129100,129103,129106,129109,129112,129132,129138,129142,129145,129148,129151,129154,129157,129160,129164,129167,129170,129173,129176,129189,129194,129197,129200,129215,129218,129221,129224,129227,129230,129234,129237,129244,129247,129250,129253,129256,129259,129265,129268,129271,129277,129280,129283,129286,129292,129295,129298,129312,129319,129322,129325,129332,129341,129344,129347,129350,129354,129357],[10,129079,129075],{"id":129080},"_5-html表格列表与表单",[18,129082,129084],{"id":129083},"_51-表格标签","5.1 表格标签",[14,129086,129087],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,129089,129090],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,129092,129093],{},"②表格基本语法：",[4509,129095],{"style":129058,"src":129096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,129098,129099],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[4509,129101],{"style":129058,"src":129102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,129104,129105],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[4509,129107],{"style":129058,"src":129108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,129110,129111],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,129113,129114,129117,129118,129120,129121,129124,129125,129127,129128,129131],{},[49,129115,129116],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[49,129119,129116],{},"内部必须拥有",[49,129122,129123],{},"\u003Ctr>","标签，一般位于第一行，",[49,129126,129116],{},"比",[49,129129,129130],{},"\u003Cth>","范围广",[14,129133,129134,129137],{},[49,129135,129136],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[18,129139,129141],{"id":129140},"_52-合并单元格","5.2 合并单元格",[14,129143,129144],{},"（1）合并单元格方式：",[14,129146,129147],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,129149,129150],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,129152,129153],{},"（2）目标单元格：",[14,129155,129156],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,129158,129159],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[18,129161,129163],{"id":129162},"_53-列表标签","5.3 列表标签",[14,129165,129166],{},"（1）分类：无序列表、有序列表、自定义列表",[14,129168,129169],{},"①无序列表：",[4509,129171],{"style":129058,"src":129172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,129174,129175],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,129177,129178,129181,129182,129185,129186,129188],{},[49,129179,129180],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[49,129183,129184],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[49,129187,129180],{},"中输入其他标签或文字是不对的",[14,129190,129191,129193],{},[49,129192,129184],{},"之间相当于一个容器，可以容纳所有元素",[14,129195,129196],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,129198,129199],{},"在css中去除前边的小圆点采用如下代码:",[42,129201,129205],{"className":129202,"code":129203,"language":129204,"meta":47,"style":47},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[49,129206,129207],{"__ignoreMap":47},[52,129208,129209,129212],{"class":54,"line":55},[52,129210,129211],{"class":53950},"list-style",[52,129213,129214],{"class":79},": none;\n",[14,129216,129217],{},"②有序列表：",[4509,129219],{"style":129058,"src":129220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,129222,129223],{},"③自定义列表：",[4509,129225],{"style":129058,"src":129226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[4509,129228],{"style":129058,"src":129229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[18,129231,129233],{"id":129232},"_54-表单标签","5.4 表单标签",[14,129235,129236],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,129238,129239,129240,129243],{},"（1）表单域：包含单元素的区域，",[49,129241,129242],{},"\u003Cform>","标签可以实现信息的收集和传递。",[4509,129245],{"style":129058,"src":129246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,129248,129249],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,129251,129252],{},"表单元素提交必须有name属性",[14,129254,129255],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,129257,129258],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,129260,79876,129261,129264],{},[49,129262,129263],{},"\u003Cinput>","输入表单元素",[4509,129266],{"style":129058,"src":129267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[4509,129269],{"style":129058,"src":129270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,129272,129273,129274],{},"单选按钮：",[49,129275,129276],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[4509,129278],{"style":129058,"src":129279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,129281,129282],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[4509,129284],{"style":129058,"src":129285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,129287,129288,129291],{},[2389,129289,129290],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,129293,129294],{},"②select下拉表单元素：可以节约页面控件",[4509,129296],{"style":129058,"src":129297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,129299,129300,16443,129302,129305,129306,129308,129309,129311],{},[2389,129301,3252],{},[49,129303,129304],{},"\u003Cselect>","中至少包含一对",[49,129307,105364],{},"；在",[49,129310,105364],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,129313,129314,129315,129318],{},"③",[49,129316,129317],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[4509,129320],{"style":129058,"src":129321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,129323,129324],{},"3行20列",[18,129326,129328,129329,105343],{"id":129327},"_55-lable标签","5.5 ",[49,129330,129331],{},"\u003Clable>",[14,129333,129334,129335,129337,129338,129340],{},"它不是表单标签，但常常与表单标签搭配使用，",[49,129336,129331],{},"标签用于绑定一个表单标签，当点击",[49,129339,129331],{},"标签内的文本",[14,129342,129343],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[4509,129345],{"style":129058,"src":129346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[4509,129348],{"style":129058,"src":129349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[18,129351,129353],{"id":129352},"_56-实例","5.6 实例",[4509,129355],{"style":129058,"src":129356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[3141,129358,129359],{},"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":47,"searchDepth":66,"depth":66,"links":129361},[129362,129363,129364,129365,129366,129368],{"id":129083,"depth":66,"text":129084},{"id":129140,"depth":66,"text":129141},{"id":129162,"depth":66,"text":129163},{"id":129232,"depth":66,"text":129233},{"id":129327,"depth":66,"text":129367},"5.5 \u003Clable>标签",{"id":129352,"depth":66,"text":129353},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":129075,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":129375,"title":129376,"body":129377,"description":26025,"extension":3153,"meta":129926,"navigation":122,"path":129927,"seo":129928,"stem":129929,"__hash__":129930},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":129378,"toc":129901},[129379,129382,129386,129389,129392,129396,129399,129402,129405,129408,129411,129414,129417,129421,129424,129428,129431,129434,129437,129441,129444,129447,129450,129456,129459,129462,129465,129468,129471,129474,129477,129510,129514,129517,129520,129523,129527,129530,129533,129536,129539,129542,129546,129549,129552,129555,129559,129562,129566,129569,129573,129576,129581,129585,129588,129592,129595,129598,129601,129604,129631,129634,129638,129641,129644,129649,129652,129655,129659,129662,129667,129670,129673,129676,129680,129683,129686,129689,129693,129696,129699,129702,129706,129710,129713,129753,129756,129760,129767,129770,129774,129777,129823,129827,129830,129833,129836,129864,129868,129871,129898],[10,129380,129376],{"id":129381},"_6-css语法与文本样式",[18,129383,129385],{"id":129384},"_61-css语法规范","6.1 css语法规范",[14,129387,129388],{},"由两部分组成，选择器及一条或多条声明",[4509,129390],{"style":129058,"src":129391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,129393,129394],{},[2389,129395,3252],{},[14,129397,129398],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,129400,129401],{},"②属性与属性值以“键值对”的形式出现",[14,129403,129404],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,129406,129407],{},"④属性和属性值之间用英文“;”分开",[4509,129409],{"style":129058,"src":129410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[4509,129412],{"style":129058,"src":129413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[4509,129415],{"style":129058,"src":129416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[18,129418,129420],{"id":129419},"_62-css选择器","6.2 css选择器",[14,129422,129423],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[3195,129425,129427],{"id":129426},"_621-标签选择器","6.2.1 标签选择器",[14,129429,129430],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,129432,129433],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[4509,129435],{"style":129058,"src":129436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[3195,129438,129440],{"id":129439},"_622-类选择器","6.2.2 类选择器",[14,129442,129443],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,129445,129446],{},"②样例",[4509,129448],{"style":129058,"src":129449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,129451,129452,129453,129455],{},"③ ",[2389,129454,129290],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,129457,129458],{},"可以理解为给这个标签起了个名字，来表示；",[14,129460,129461],{},"长名称或词组可以使用横线来为选择器命名；",[14,129463,129464],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,129466,129467],{},"命名要有意义；",[4509,129469],{"style":129058,"src":129470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,129472,129473],{},"类选择器也可以指定特殊的元素p.center{}",[14,129475,129476],{},"p.center和.center都对",[42,129478,129480],{"className":129202,"code":129479,"language":129204,"meta":47,"style":47},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[49,129481,129482,129487,129496,129506],{"__ignoreMap":47},[52,129483,129484],{"class":54,"line":55},[52,129485,129486],{"class":94},"\u002F* 类选择器指定特殊元素 *\u002F\n",[52,129488,129489,129491,129494],{"class":54,"line":66},[52,129490,14],{"class":53950},[52,129492,129493],{"class":75},".center",[52,129495,18220],{"class":79},[52,129497,129498,129500,129502,129504],{"class":54,"line":83},[52,129499,73176],{"class":308},[52,129501,54087],{"class":79},[52,129503,54242],{"class":308},[52,129505,80],{"class":79},[52,129507,129508],{"class":54,"line":91},[52,129509,452],{"class":79},[3195,129511,129513],{"id":129512},"_623-多类名使用","6.2.3 多类名使用",[14,129515,129516],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[4509,129518],{"style":129058,"src":129519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,129521,129522],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[3195,129524,129526],{"id":129525},"_624-id选择器","6.2.4 id选择器",[14,129528,129529],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,129531,129532],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[4509,129534],{"style":129058,"src":129535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,129537,129538],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,129540,129541],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[3195,129543,129545],{"id":129544},"_625-通配符选择器","6.2.5 通配符选择器",[14,129547,129548],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,129550,129551],{},"* {",[14,129553,129554],{},"color=\"red\"}",[3195,129556,129558],{"id":129557},"_626-总结","6.2.6 总结",[4509,129560],{"style":129058,"src":129561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[18,129563,129565],{"id":129564},"_63-css字体属性","6.3 css字体属性",[14,129567,129568],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[3195,129570,129572],{"id":129571},"_631-字体系列","6.3.1 字体系列",[14,129574,129575],{},"font-family: '宋体';",[14,129577,129578,129580],{},[2389,129579,3252],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[3195,129582,129584],{"id":129583},"_632-字体大小","6.3.2 字体大小",[14,129586,129587],{},"font-size: 20px",[14,129589,129590,29123],{},[2389,129591,129290],{},[14,129593,129594],{},"①px（像素）大小是网页的最常用单位",[14,129596,129597],{},"②谷歌浏览器默认为16px",[14,129599,129600],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,129602,129603],{},"④可以给body指定整个页面的大小：会自动引用",[42,129605,129607],{"className":129202,"code":129606,"language":129204,"meta":47,"style":47},"body {\n  font-size: 16px;\n}\n",[49,129608,129609,129615,129627],{"__ignoreMap":47},[52,129610,129611,129613],{"class":54,"line":55},[52,129612,54450],{"class":53950},[52,129614,18220],{"class":79},[52,129616,129617,129619,129621,129623,129625],{"class":54,"line":66},[52,129618,73276],{"class":308},[52,129620,54087],{"class":79},[52,129622,3798],{"class":308},[52,129624,54142],{"class":58},[52,129626,80],{"class":79},[52,129628,129629],{"class":54,"line":83},[52,129630,452],{"class":79},[14,129632,129633],{},"⑤标题标签比较特殊，需要单独指定大小",[3195,129635,129637],{"id":129636},"_633-字体粗细","6.3.3 字体粗细",[14,129639,129640],{},"font-weight: bold;",[14,129642,129643],{},"font-weight: 100；",[14,129645,129646,129648],{},[2389,129647,3252],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,129650,129651],{},"font-weight= 400;",[14,129653,129654],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[3195,129656,129658],{"id":129657},"_634-文字样式","6.3.4 文字样式",[14,129660,129661],{},"font-style: normal；",[14,129663,129664,29123],{},[2389,129665,129666],{},"属性值",[14,129668,129669],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,129671,129672],{},"②italic：浏览器会显示斜体的字体样式",[4509,129674],{"style":129058,"src":129675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[3195,129677,129679],{"id":129678},"_635-字体符合属性","6.3.5 字体符合属性",[4509,129681],{"style":129058,"src":129682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[4509,129684],{"style":129058,"src":129685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,129687,129688],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,129690,129691,29123],{},[2389,129692,129290],{},[14,129694,129695],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,129697,129698],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,129700,129701],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[18,129703,129705],{"id":129704},"_64-css-test文本属性","6.4 css test文本属性",[3195,129707,129709],{"id":129708},"_641-文本颜色","6.4.1 文本颜色",[14,129711,129712],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[42,129714,129716],{"className":129202,"code":129715,"language":129204,"meta":47,"style":47},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[49,129717,129718,129723,129729,129739,129744,129749],{"__ignoreMap":47},[52,129719,129720],{"class":54,"line":55},[52,129721,129722],{"class":94},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[52,129724,129725,129727],{"class":54,"line":66},[52,129726,14],{"class":53950},[52,129728,18220],{"class":79},[52,129730,129731,129733,129735,129737],{"class":54,"line":83},[52,129732,73555],{"class":308},[52,129734,54087],{"class":79},[52,129736,60071],{"class":308},[52,129738,80],{"class":79},[52,129740,129741],{"class":54,"line":91},[52,129742,129743],{"class":94},"  \u002F* color: #ff0000; *\u002F\n",[52,129745,129746],{"class":54,"line":98},[52,129747,129748],{"class":94},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[52,129750,129751],{"class":54,"line":107},[52,129752,452],{"class":79},[4509,129754],{"style":129058,"src":129755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[3195,129757,129759],{"id":129758},"_642-对齐文本","6.4.2 对齐文本",[14,129761,129762,129763,129766],{},"text-align属于用于设置元素内文本内容的 ",[2389,129764,129765],{},"水平对齐"," 方式",[14,129768,129769],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[3195,129771,129773],{"id":129772},"_643-装饰文本","6.4.3 装饰文本",[14,129775,129776],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[42,129778,129780],{"className":129202,"code":129779,"language":129204,"meta":47,"style":47},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[49,129781,129782,129788,129798,129802,129808,129819],{"__ignoreMap":47},[52,129783,129784,129786],{"class":54,"line":55},[52,129785,3451],{"class":53950},[52,129787,18220],{"class":79},[52,129789,129790,129792,129794,129796],{"class":54,"line":66},[52,129791,73152],{"class":308},[52,129793,54087],{"class":79},[52,129795,57387],{"class":308},[52,129797,80],{"class":79},[52,129799,129800],{"class":54,"line":83},[52,129801,452],{"class":79},[52,129803,129804,129806],{"class":54,"line":91},[52,129805,14],{"class":53950},[52,129807,18220],{"class":79},[52,129809,129810,129812,129814,129817],{"class":54,"line":98},[52,129811,73152],{"class":308},[52,129813,54087],{"class":79},[52,129815,129816],{"class":308},"underline",[52,129818,80],{"class":79},[52,129820,129821],{"class":54,"line":107},[52,129822,452],{"class":79},[3195,129824,129826],{"id":129825},"_644-文本缩进","6.4.4 文本缩进",[14,129828,129829],{},"实现文本的第一行首行缩进自己指定的距离",[14,129831,129832],{},"20px往右边走；-20px往左边走",[14,129834,129835],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[42,129837,129839],{"className":129202,"code":129838,"language":129204,"meta":47,"style":47},"p {\n  text-indent: 2em;\n}\n",[49,129840,129841,129847,129860],{"__ignoreMap":47},[52,129842,129843,129845],{"class":54,"line":55},[52,129844,14],{"class":53950},[52,129846,18220],{"class":79},[52,129848,129849,129852,129854,129856,129858],{"class":54,"line":66},[52,129850,129851],{"class":308},"  text-indent",[52,129853,54087],{"class":79},[52,129855,564],{"class":308},[52,129857,26202],{"class":58},[52,129859,80],{"class":79},[52,129861,129862],{"class":54,"line":83},[52,129863,452],{"class":79},[3195,129865,129867],{"id":129866},"_645-行间距","6.4.5 行间距",[14,129869,129870],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[42,129872,129874],{"className":129202,"code":129873,"language":129204,"meta":47,"style":47},"p {\n  line-height: 1.6;\n}\n",[49,129875,129876,129882,129894],{"__ignoreMap":47},[52,129877,129878,129880],{"class":54,"line":55},[52,129879,14],{"class":53950},[52,129881,18220],{"class":79},[52,129883,129884,129887,129889,129892],{"class":54,"line":66},[52,129885,129886],{"class":308},"  line-height",[52,129888,54087],{"class":79},[52,129890,129891],{"class":308},"1.6",[52,129893,80],{"class":79},[52,129895,129896],{"class":54,"line":83},[52,129897,452],{"class":79},[3141,129899,129900],{},"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":47,"searchDepth":66,"depth":66,"links":129902},[129903,129904,129912,129919],{"id":129384,"depth":66,"text":129385},{"id":129419,"depth":66,"text":129420,"children":129905},[129906,129907,129908,129909,129910,129911],{"id":129426,"depth":83,"text":129427},{"id":129439,"depth":83,"text":129440},{"id":129512,"depth":83,"text":129513},{"id":129525,"depth":83,"text":129526},{"id":129544,"depth":83,"text":129545},{"id":129557,"depth":83,"text":129558},{"id":129564,"depth":66,"text":129565,"children":129913},[129914,129915,129916,129917,129918],{"id":129571,"depth":83,"text":129572},{"id":129583,"depth":83,"text":129584},{"id":129636,"depth":83,"text":129637},{"id":129657,"depth":83,"text":129658},{"id":129678,"depth":83,"text":129679},{"id":129704,"depth":66,"text":129705,"children":129920},[129921,129922,129923,129924,129925],{"id":129708,"depth":83,"text":129709},{"id":129758,"depth":83,"text":129759},{"id":129772,"depth":83,"text":129773},{"id":129825,"depth":83,"text":129826},{"id":129866,"depth":83,"text":129867},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":129376,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129932,"title":129933,"body":129934,"description":26025,"extension":3153,"meta":130583,"navigation":122,"path":130584,"seo":130585,"stem":130586,"__hash__":130587},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129935,"toc":130564},[129936,129939,129943,129947,130007,130011,130021,130024,130027,130031,130056,130060,130063,130066,130069,130072,130075,130079,130082,130085,130127,130130,130156,130162,130165,130169,130173,130179,130182,130185,130188,130191,130194,130197,130242,130246,130249,130252,130256,130260,130289,130292,130297,130300,130303,130306,130309,130313,130317,130320,130322,130325,130329,130332,130336,130339,130342,130345,130349,130353,130359,130369,130372,130375,130378,130381,130384,130507,130515,130523,130561],[10,129937,129933],{"id":129938},"_7-css引入方式与选择器进阶",[18,129940,129942],{"id":129941},"_71-css引入方式","7.1 css引入方式",[3195,129944,129946],{"id":129945},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[42,129948,129952],{"className":129949,"code":129950,"language":129951,"meta":47,"style":47},"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",[49,129953,129954,129962,129969,129981,129994,129999],{"__ignoreMap":47},[52,129955,129956,129958,129960],{"class":54,"line":55},[52,129957,698],{"class":79},[52,129959,3141],{"class":53950},[52,129961,53957],{"class":79},[52,129963,129964,129967],{"class":54,"line":66},[52,129965,129966],{"class":53950},"  h1",[52,129968,18220],{"class":79},[52,129970,129971,129974,129976,129979],{"class":54,"line":83},[52,129972,129973],{"class":308},"    color",[52,129975,54087],{"class":79},[52,129977,129978],{"class":308},"blue",[52,129980,80],{"class":79},[52,129982,129983,129986,129988,129990,129992],{"class":54,"line":91},[52,129984,129985],{"class":308},"    font-size",[52,129987,54087],{"class":79},[52,129989,3990],{"class":308},[52,129991,54142],{"class":58},[52,129993,80],{"class":79},[52,129995,129996],{"class":54,"line":98},[52,129997,129998],{"class":79},"  }\n",[52,130000,130001,130003,130005],{"class":54,"line":107},[52,130002,54435],{"class":79},[52,130004,3141],{"class":53950},[52,130006,53957],{"class":79},[14,130008,130009,29123],{},[2389,130010,129290],{},[14,130012,79876,130013,130016,130017,130020],{},[49,130014,130015],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[49,130018,130019],{},"\u003Chead>","标签中",[14,130022,130023],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,130025,130026],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[3195,130028,130030],{"id":130029},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[42,130032,130034],{"className":129949,"code":130033,"language":129951,"meta":47,"style":47},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[49,130035,130036],{"__ignoreMap":47},[52,130037,130038,130040,130042,130044,130046,130049,130052,130054],{"class":54,"line":55},[52,130039,698],{"class":79},[52,130041,14],{"class":53950},[52,130043,65276],{"class":75},[52,130045,292],{"class":79},[52,130047,130048],{"class":62},"\"color: red; font-size: 16px;\"",[52,130050,130051],{"class":79},">这是一个段落\u003C\u002F",[52,130053,14],{"class":53950},[52,130055,53957],{"class":79},[14,130057,130058,29123],{},[2389,130059,129290],{},[14,130061,130062],{},"①style其实就是标签的属性",[14,130064,130065],{},"②在双引号中间，写法要符合css规范",[14,130067,130068],{},"③可以控制当前的标签设置样式",[14,130070,130071],{},"④书写繁琐，简单时才用",[14,130073,130074],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[3195,130076,130078],{"id":130077},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,130080,130081],{},"使用最多，单独建一个css文件，然后html引用",[14,130083,130084],{},"①css文件部分： style.css",[42,130086,130088],{"className":129202,"code":130087,"language":129204,"meta":47,"style":47},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[49,130089,130090,130095,130101,130111,130123],{"__ignoreMap":47},[52,130091,130092],{"class":54,"line":55},[52,130093,130094],{"class":94},"\u002F* style.css *\u002F\n",[52,130096,130097,130099],{"class":54,"line":66},[52,130098,10],{"class":53950},[52,130100,18220],{"class":79},[52,130102,130103,130105,130107,130109],{"class":54,"line":83},[52,130104,73555],{"class":308},[52,130106,54087],{"class":79},[52,130108,129978],{"class":308},[52,130110,80],{"class":79},[52,130112,130113,130115,130117,130119,130121],{"class":54,"line":91},[52,130114,73276],{"class":308},[52,130116,54087],{"class":79},[52,130118,3990],{"class":308},[52,130120,54142],{"class":58},[52,130122,80],{"class":79},[52,130124,130125],{"class":54,"line":98},[52,130126,452],{"class":79},[14,130128,130129],{},"②html部分",[42,130131,130133],{"className":129949,"code":130132,"language":129951,"meta":47,"style":47},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[49,130134,130135],{"__ignoreMap":47},[52,130136,130137,130139,130141,130143,130145,130147,130149,130151,130154],{"class":54,"line":55},[52,130138,698],{"class":79},[52,130140,71655],{"class":53950},[52,130142,71658],{"class":75},[52,130144,292],{"class":79},[52,130146,71663],{"class":62},[52,130148,63707],{"class":75},[52,130150,292],{"class":79},[52,130152,130153],{"class":62},"\"style.css\"",[52,130155,53957],{"class":79},[14,130157,130158,130161],{},[49,130159,130160],{},"\u003Chr>","水平线标签（但是不常用！）",[14,130163,130164],{},"ctrl+0回到页面原来大小",[18,130166,130168],{"id":130167},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[3195,130170,130172],{"id":130171},"_721-快速生成html","7.2.1 快速生成html",[14,130174,130175,130176],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[49,130177,130178],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,130180,130181],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,130183,130184],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,130186,130187],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,130189,130190],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,130192,130193],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,130195,130196],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[42,130198,130200],{"className":129949,"code":130199,"language":129951,"meta":47,"style":47},"\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",[49,130201,130202,130207,130212,130217,130222,130227,130232,130237],{"__ignoreMap":47},[52,130203,130204],{"class":54,"line":55},[52,130205,130206],{"class":94},"\u003C!-- Emmet 语法示例 -->\n",[52,130208,130209],{"class":54,"line":66},[52,130210,130211],{"class":94},"\u003C!-- div*3        → 生成3个div -->\n",[52,130213,130214],{"class":54,"line":83},[52,130215,130216],{"class":94},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[52,130218,130219],{"class":54,"line":91},[52,130220,130221],{"class":94},"\u003C!-- div+p        → 兄弟div和p -->\n",[52,130223,130224],{"class":54,"line":98},[52,130225,130226],{"class":94},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[52,130228,130229],{"class":54,"line":107},[52,130230,130231],{"class":94},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[52,130233,130234],{"class":54,"line":113},[52,130235,130236],{"class":94},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[52,130238,130239],{"class":54,"line":119},[52,130240,130241],{"class":94},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[3195,130243,130245],{"id":130244},"_722-快速生成css","7.2.2 快速生成css",[14,130247,130248],{},"简写开头",[14,130250,130251],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[18,130253,130255],{"id":130254},"_73-css复合选择器","7.3 css复合选择器",[3195,130257,130259],{"id":130258},"_731-后代选择器","7.3.1 后代选择器",[42,130261,130263],{"className":129202,"code":130262,"language":129204,"meta":47,"style":47},".parent .child {\n  color: blue;\n}\n",[49,130264,130265,130275,130285],{"__ignoreMap":47},[52,130266,130267,130270,130273],{"class":54,"line":55},[52,130268,130269],{"class":75},".parent",[52,130271,130272],{"class":75}," .child",[52,130274,18220],{"class":79},[52,130276,130277,130279,130281,130283],{"class":54,"line":66},[52,130278,73555],{"class":308},[52,130280,54087],{"class":79},[52,130282,129978],{"class":308},[52,130284,80],{"class":79},[52,130286,130287],{"class":54,"line":83},[52,130288,452],{"class":79},[14,130290,130291],{},"元素1 元素2 {样式声明}",[14,130293,130294],{},[2389,130295,130296],{},"注意点:",[14,130298,130299],{},"①元素1和元素2中间用空格隔开",[14,130301,130302],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,130304,130305],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,130307,130308],{},"④元素1和元素2可以是任意基础选择器",[3195,130310,130312],{"id":130311},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,130314,130315],{},[2389,130316,130296],{},[14,130318,130319],{},"①元素1和元素2中间用大于号隔开",[14,130321,130302],{},[14,130323,130324],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[3195,130326,130328],{"id":130327},"_733-并集选择器","7.3.3 并集选择器",[14,130330,130331],{},"元素1，元素2 {样式声明}",[14,130333,130334],{},[2389,130335,130296],{},[14,130337,130338],{},"①元素1和元素2中间用逗号隔开",[14,130340,130341],{},"②逗号可以理解为和的意思",[14,130343,130344],{},"③并集选择器通常用于集体声明",[3195,130346,130348],{"id":130347},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,130350,130351],{},[2389,130352,130296],{},[14,130354,130355,130356,130358],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[71655,130357],{},"－:visited－:hover－:active。",[14,130360,130361,130362,130365,130366,28390],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[130363,130364],"hover",{}," 、 ",[130367,130368],"first-child",{},[14,130370,130371],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,130373,130374],{},"link对没访问的进行设置",[14,130376,130377],{},"vistied对已访问的进行改变",[14,130379,130380],{},"hover鼠标经过就会变",[14,130382,130383],{},"active常按(点)就会变",[42,130385,130387],{"className":129202,"code":130386,"language":129204,"meta":47,"style":47},"\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",[49,130388,130389,130394,130403,130413,130423,130427,130436,130447,130451,130459,130469,130479,130483,130492,130503],{"__ignoreMap":47},[52,130390,130391],{"class":54,"line":55},[52,130392,130393],{"class":94},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[52,130395,130396,130398,130401],{"class":54,"line":66},[52,130397,3451],{"class":53950},[52,130399,130400],{"class":75},":link",[52,130402,18220],{"class":79},[52,130404,130405,130407,130409,130411],{"class":54,"line":83},[52,130406,73555],{"class":308},[52,130408,54087],{"class":79},[52,130410,65019],{"class":308},[52,130412,80],{"class":79},[52,130414,130415,130417,130419,130421],{"class":54,"line":91},[52,130416,73152],{"class":308},[52,130418,54087],{"class":79},[52,130420,57387],{"class":308},[52,130422,80],{"class":79},[52,130424,130425],{"class":54,"line":98},[52,130426,452],{"class":79},[52,130428,130429,130431,130434],{"class":54,"line":107},[52,130430,3451],{"class":53950},[52,130432,130433],{"class":75},":visited",[52,130435,18220],{"class":79},[52,130437,130438,130440,130442,130445],{"class":54,"line":113},[52,130439,73555],{"class":308},[52,130441,54087],{"class":79},[52,130443,130444],{"class":308},"purple",[52,130446,80],{"class":79},[52,130448,130449],{"class":54,"line":119},[52,130450,452],{"class":79},[52,130452,130453,130455,130457],{"class":54,"line":126},[52,130454,3451],{"class":53950},[52,130456,63590],{"class":75},[52,130458,18220],{"class":79},[52,130460,130461,130463,130465,130467],{"class":54,"line":132},[52,130462,73555],{"class":308},[52,130464,54087],{"class":79},[52,130466,57539],{"class":308},[52,130468,80],{"class":79},[52,130470,130471,130473,130475,130477],{"class":54,"line":138},[52,130472,73152],{"class":308},[52,130474,54087],{"class":79},[52,130476,129816],{"class":308},[52,130478,80],{"class":79},[52,130480,130481],{"class":54,"line":144},[52,130482,452],{"class":79},[52,130484,130485,130487,130490],{"class":54,"line":153},[52,130486,3451],{"class":53950},[52,130488,130489],{"class":75},":active",[52,130491,18220],{"class":79},[52,130493,130494,130496,130498,130501],{"class":54,"line":159},[52,130495,73555],{"class":308},[52,130497,54087],{"class":79},[52,130499,130500],{"class":308},"green",[52,130502,80],{"class":79},[52,130504,130505],{"class":54,"line":167},[52,130506,452],{"class":79},[3195,130508,130510,130511,130514],{"id":130509},"_735-伪类选择器","7.3.5 ",[130512,130513],"focus",{},"伪类选择器",[14,130516,130517,130519,130520,130522],{},[130512,130518],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[49,130521,129263],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[42,130524,130526],{"className":129202,"code":130525,"language":129204,"meta":47,"style":47},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[49,130527,130528,130536,130547,130557],{"__ignoreMap":47},[52,130529,130530,130532,130534],{"class":54,"line":55},[52,130531,56471],{"class":53950},[52,130533,64550],{"class":75},[52,130535,18220],{"class":79},[52,130537,130538,130541,130543,130545],{"class":54,"line":66},[52,130539,130540],{"class":308},"  border-color",[52,130542,54087],{"class":79},[52,130544,57539],{"class":308},[52,130546,80],{"class":79},[52,130548,130549,130551,130553,130555],{"class":54,"line":83},[52,130550,73448],{"class":308},[52,130552,54087],{"class":79},[52,130554,57387],{"class":308},[52,130556,80],{"class":79},[52,130558,130559],{"class":54,"line":91},[52,130560,452],{"class":79},[3141,130562,130563],{},"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":47,"searchDepth":66,"depth":66,"links":130565},[130566,130571,130575],{"id":129941,"depth":66,"text":129942,"children":130567},[130568,130569,130570],{"id":129945,"depth":83,"text":129946},{"id":130029,"depth":83,"text":130030},{"id":130077,"depth":83,"text":130078},{"id":130167,"depth":66,"text":130168,"children":130572},[130573,130574],{"id":130171,"depth":83,"text":130172},{"id":130244,"depth":83,"text":130245},{"id":130254,"depth":66,"text":130255,"children":130576},[130577,130578,130579,130580,130581],{"id":130258,"depth":83,"text":130259},{"id":130311,"depth":83,"text":130312},{"id":130327,"depth":83,"text":130328},{"id":130347,"depth":83,"text":130348},{"id":130509,"depth":83,"text":130582},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129933,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130589,"title":130590,"body":130591,"description":26025,"extension":3153,"meta":132514,"navigation":122,"path":132515,"seo":132516,"stem":132517,"__hash__":132518},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":130592,"toc":132488},[130593,130596,130600,130609,130613,130639,130644,130647,130650,130653,130656,130660,130663,130673,130681,130685,130720,130725,130728,130731,130734,130737,130741,130744,130753,130757,130770,130775,130778,130781,130784,130788,130791,130795,130798,130853,130856,130887,130890,130944,130948,130951,131117,131240,131243,131246,131249,131252,131256,131259,131263,131266,131269,131273,131276,131307,131334,131362,131365,131369,131395,131438,131442,131536,131539,131566,131569,131572,131575,131578,131581,131584,131587,131590,131593,131597,131654,131681,131685,131733,131737,131778,131780,131783,131786,131789,131792,131796,131888,131891,131894,131897,131901,132024,132225,132229,132233,132236,132239,132242,132246,132249,132252,132277,132280,132283,132286,132289,132292,132296,132304,132366,132369,132427,132430,132433,132436,132439,132442,132445,132448,132485],[10,130594,130590],{"id":130595},"_8-css显示模式与背景特性",[18,130597,130599],{"id":130598},"_81-css元素显示模式","8.1 css元素显示模式",[14,130601,130602,130603,130605,130606,130608],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[49,130604,128813],{},"自己占一行，比如一行可以放多个",[49,130607,128816],{},"，HTML 元素一般分为块元素和行内元素两种类型",[3195,130610,130612],{"id":130611},"_811-块元素","8.1.1 块元素",[14,130614,130615,130616,130618,130619,3426,130622,3426,130624,3426,130626,3426,130629,3426,130632,130635,130636,130638],{},"常见的块元素有",[49,130617,128717],{},"~",[49,130620,130621],{},"\u003Ch6>",[49,130623,128743],{},[49,130625,128813],{},[49,130627,130628],{},"\u003Cul>",[49,130630,130631],{},"\u003Col>",[49,130633,130634],{},"\u003Cli>","等，其中 ",[49,130637,128813],{}," 标签是最典型的块元素",[14,130640,130641],{},[2389,130642,130643],{},"块级元素的特点：",[14,130645,130646],{},"① 比较霸道，自己独占一行。",[14,130648,130649],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,130651,130652],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,130654,130655],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,130657,130658],{},[2389,130659,3252],{},[14,130661,130662],{},"①文字类的元素内不能使用块级元素",[14,130664,79899,130665,130667,130668,130670,130671],{},[49,130666,128743],{}," 标签主要用于存放文字，因此 ",[49,130669,128743],{}," 里面不能放块级元素，特别是不能放",[49,130672,128813],{},[14,130674,130675,130676,130618,130678,130680],{},"⑥同理， ",[49,130677,128717],{},[49,130679,130621],{},"等都是文字类块级标签，里面也不能放其他块级元素",[3195,130682,130684],{"id":130683},"_812-行内元素","8.1.2 行内元素",[14,130686,130687,130688,3426,130690,3426,130693,3426,130696,3426,130699,3426,130702,3426,130705,3426,130708,3426,130711,3426,130714,130716,130717,130719],{},"常见的行内元素有 ",[49,130689,128975],{},[49,130691,130692],{},"\u003Cstrong>",[49,130694,130695],{},"\u003Cb>",[49,130697,130698],{},"\u003Cem>",[49,130700,130701],{},"\u003Ci>",[49,130703,130704],{},"\u003Cdel>",[49,130706,130707],{},"\u003Cs>",[49,130709,130710],{},"\u003Cins>",[49,130712,130713],{},"\u003Cu>",[49,130715,128816],{}," 等，其中 ",[49,130718,128816],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,130721,130722],{},[2389,130723,130724],{},"特点：",[14,130726,130727],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,130729,130730],{},"② 高、宽直接设置是无效的。",[14,130732,130733],{},"③ 默认宽度就是它本身内容的宽度。",[14,130735,130736],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,130738,130739],{},[2389,130740,3252],{},[14,130742,130743],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,130745,130746,130747,130749,130750,130752],{},"②特殊情况链接 ",[49,130748,128975],{}," 里面可以放块级元素，但是给 ",[49,130751,128975],{}," 转换一下块级模式最安全",[3195,130754,130756],{"id":130755},"_813-行内块元素","8.1.3 行内块元素",[14,130758,130759,130760,3426,130763,3426,130766,130769],{},"在行内元素中有几个特殊的标签 —— ",[49,130761,130762],{},"\u003Cimg \u002F>",[49,130764,130765],{},"\u003Cinput \u002F>",[49,130767,130768],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,130771,130772],{},[2389,130773,130774],{},"行内块元素的特点：",[14,130776,130777],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,130779,130780],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,130782,130783],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[3195,130785,130787],{"id":130786},"_814-总结","8.1.4 总结",[4509,130789],{"style":129058,"src":130790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[3195,130792,130794],{"id":130793},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,130796,130797],{},"①转换为块元素：display:block;",[42,130799,130801],{"className":129202,"code":130800,"language":129204,"meta":47,"style":47},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[49,130802,130803,130808,130814,130825,130837,130849],{"__ignoreMap":47},[52,130804,130805],{"class":54,"line":55},[52,130806,130807],{"class":94},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[52,130809,130810,130812],{"class":54,"line":66},[52,130811,3451],{"class":53950},[52,130813,18220],{"class":79},[52,130815,130816,130819,130821,130823],{"class":54,"line":83},[52,130817,130818],{"class":308},"  display",[52,130820,54087],{"class":79},[52,130822,63519],{"class":308},[52,130824,80],{"class":79},[52,130826,130827,130829,130831,130833,130835],{"class":54,"line":91},[52,130828,73218],{"class":308},[52,130830,54087],{"class":79},[52,130832,591],{"class":308},[52,130834,54142],{"class":58},[52,130836,80],{"class":79},[52,130838,130839,130841,130843,130845,130847],{"class":54,"line":98},[52,130840,73438],{"class":308},[52,130842,54087],{"class":79},[52,130844,2007],{"class":308},[52,130846,54142],{"class":58},[52,130848,80],{"class":79},[52,130850,130851],{"class":54,"line":107},[52,130852,452],{"class":79},[14,130854,130855],{},"②转换为行内元素：display:inline;",[42,130857,130859],{"className":129202,"code":130858,"language":129204,"meta":47,"style":47},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[49,130860,130861,130866,130872,130883],{"__ignoreMap":47},[52,130862,130863],{"class":54,"line":55},[52,130864,130865],{"class":94},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[52,130867,130868,130870],{"class":54,"line":66},[52,130869,54261],{"class":53950},[52,130871,18220],{"class":79},[52,130873,130874,130876,130878,130881],{"class":54,"line":83},[52,130875,130818],{"class":308},[52,130877,54087],{"class":79},[52,130879,130880],{"class":308},"inline",[52,130882,80],{"class":79},[52,130884,130885],{"class":54,"line":91},[52,130886,452],{"class":79},[14,130888,130889],{},"③转换为行内块：display:inline-block;",[42,130891,130893],{"className":129202,"code":130892,"language":129204,"meta":47,"style":47},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[49,130894,130895,130900,130906,130916,130928,130940],{"__ignoreMap":47},[52,130896,130897],{"class":54,"line":55},[52,130898,130899],{"class":94},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[52,130901,130902,130904],{"class":54,"line":66},[52,130903,52],{"class":53950},[52,130905,18220],{"class":79},[52,130907,130908,130910,130912,130914],{"class":54,"line":83},[52,130909,130818],{"class":308},[52,130911,54087],{"class":79},[52,130913,75033],{"class":308},[52,130915,80],{"class":79},[52,130917,130918,130920,130922,130924,130926],{"class":54,"line":91},[52,130919,73218],{"class":308},[52,130921,54087],{"class":79},[52,130923,3809],{"class":308},[52,130925,54142],{"class":58},[52,130927,80],{"class":79},[52,130929,130930,130932,130934,130936,130938],{"class":54,"line":98},[52,130931,73438],{"class":308},[52,130933,54087],{"class":79},[52,130935,4137],{"class":308},[52,130937,54142],{"class":58},[52,130939,80],{"class":79},[52,130941,130942],{"class":54,"line":107},[52,130943,452],{"class":79},[3195,130945,130947],{"id":130946},"_816-小米侧边栏","8.1.6 小米侧边栏",[4509,130949],{"style":129058,"src":130950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[42,130952,130954],{"className":129949,"code":130953,"language":129951,"meta":47,"style":47},"\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",[49,130955,130956,130961,130976,130995,131014,131033,131052,131071,131090,131109],{"__ignoreMap":47},[52,130957,130958],{"class":54,"line":55},[52,130959,130960],{"class":94},"\u003C!-- 小米侧边栏案例 -->\n",[52,130962,130963,130965,130967,130969,130971,130974],{"class":54,"line":66},[52,130964,698],{"class":79},[52,130966,54261],{"class":53950},[52,130968,56136],{"class":75},[52,130970,292],{"class":79},[52,130972,130973],{"class":62},"\"sidebar\"",[52,130975,53957],{"class":79},[52,130977,130978,130980,130982,130984,130986,130988,130991,130993],{"class":54,"line":83},[52,130979,54794],{"class":79},[52,130981,3451],{"class":53950},[52,130983,63707],{"class":75},[52,130985,292],{"class":79},[52,130987,63712],{"class":62},[52,130989,130990],{"class":79},">手机 电话卡\u003C\u002F",[52,130992,3451],{"class":53950},[52,130994,53957],{"class":79},[52,130996,130997,130999,131001,131003,131005,131007,131010,131012],{"class":54,"line":91},[52,130998,54794],{"class":79},[52,131000,3451],{"class":53950},[52,131002,63707],{"class":75},[52,131004,292],{"class":79},[52,131006,63712],{"class":62},[52,131008,131009],{"class":79},">电视 盒子\u003C\u002F",[52,131011,3451],{"class":53950},[52,131013,53957],{"class":79},[52,131015,131016,131018,131020,131022,131024,131026,131029,131031],{"class":54,"line":98},[52,131017,54794],{"class":79},[52,131019,3451],{"class":53950},[52,131021,63707],{"class":75},[52,131023,292],{"class":79},[52,131025,63712],{"class":62},[52,131027,131028],{"class":79},">笔记本 平板\u003C\u002F",[52,131030,3451],{"class":53950},[52,131032,53957],{"class":79},[52,131034,131035,131037,131039,131041,131043,131045,131048,131050],{"class":54,"line":107},[52,131036,54794],{"class":79},[52,131038,3451],{"class":53950},[52,131040,63707],{"class":75},[52,131042,292],{"class":79},[52,131044,63712],{"class":62},[52,131046,131047],{"class":79},">出行 穿戴\u003C\u002F",[52,131049,3451],{"class":53950},[52,131051,53957],{"class":79},[52,131053,131054,131056,131058,131060,131062,131064,131067,131069],{"class":54,"line":113},[52,131055,54794],{"class":79},[52,131057,3451],{"class":53950},[52,131059,63707],{"class":75},[52,131061,292],{"class":79},[52,131063,63712],{"class":62},[52,131065,131066],{"class":79},">智能 路由器\u003C\u002F",[52,131068,3451],{"class":53950},[52,131070,53957],{"class":79},[52,131072,131073,131075,131077,131079,131081,131083,131086,131088],{"class":54,"line":119},[52,131074,54794],{"class":79},[52,131076,3451],{"class":53950},[52,131078,63707],{"class":75},[52,131080,292],{"class":79},[52,131082,63712],{"class":62},[52,131084,131085],{"class":79},">健康 儿童\u003C\u002F",[52,131087,3451],{"class":53950},[52,131089,53957],{"class":79},[52,131091,131092,131094,131096,131098,131100,131102,131105,131107],{"class":54,"line":126},[52,131093,54794],{"class":79},[52,131095,3451],{"class":53950},[52,131097,63707],{"class":75},[52,131099,292],{"class":79},[52,131101,63712],{"class":62},[52,131103,131104],{"class":79},">耳机 音响\u003C\u002F",[52,131106,3451],{"class":53950},[52,131108,53957],{"class":79},[52,131110,131111,131113,131115],{"class":54,"line":132},[52,131112,54435],{"class":79},[52,131114,54261],{"class":53950},[52,131116,53957],{"class":79},[42,131118,131120],{"className":129202,"code":131119,"language":129204,"meta":47,"style":47},".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",[49,131121,131122,131131,131141,131154,131166,131178,131190,131200,131211,131215,131225,131236],{"__ignoreMap":47},[52,131123,131124,131127,131129],{"class":54,"line":55},[52,131125,131126],{"class":75},".sidebar",[52,131128,4446],{"class":53950},[52,131130,18220],{"class":79},[52,131132,131133,131135,131137,131139],{"class":54,"line":66},[52,131134,130818],{"class":308},[52,131136,54087],{"class":79},[52,131138,63519],{"class":308},[52,131140,80],{"class":79},[52,131142,131143,131145,131147,131150,131152],{"class":54,"line":83},[52,131144,73218],{"class":308},[52,131146,54087],{"class":79},[52,131148,131149],{"class":308},"234",[52,131151,54142],{"class":58},[52,131153,80],{"class":79},[52,131155,131156,131158,131160,131162,131164],{"class":54,"line":91},[52,131157,73438],{"class":308},[52,131159,54087],{"class":79},[52,131161,3655],{"class":308},[52,131163,54142],{"class":58},[52,131165,80],{"class":79},[52,131167,131168,131170,131172,131174,131176],{"class":54,"line":98},[52,131169,129886],{"class":308},[52,131171,54087],{"class":79},[52,131173,3655],{"class":308},[52,131175,54142],{"class":58},[52,131177,80],{"class":79},[52,131179,131180,131182,131184,131186,131188],{"class":54,"line":107},[52,131181,73473],{"class":308},[52,131183,54087],{"class":79},[52,131185,4137],{"class":308},[52,131187,54142],{"class":58},[52,131189,80],{"class":79},[52,131191,131192,131194,131196,131198],{"class":54,"line":113},[52,131193,73555],{"class":308},[52,131195,54087],{"class":79},[52,131197,63492],{"class":308},[52,131199,80],{"class":79},[52,131201,131202,131204,131206,131209],{"class":54,"line":119},[52,131203,73528],{"class":308},[52,131205,54087],{"class":79},[52,131207,131208],{"class":308},"#55585a",[52,131210,80],{"class":79},[52,131212,131213],{"class":54,"line":126},[52,131214,452],{"class":79},[52,131216,131217,131219,131221,131223],{"class":54,"line":132},[52,131218,131126],{"class":75},[52,131220,4446],{"class":53950},[52,131222,63590],{"class":75},[52,131224,18220],{"class":79},[52,131226,131227,131229,131231,131234],{"class":54,"line":138},[52,131228,73528],{"class":308},[52,131230,54087],{"class":79},[52,131232,131233],{"class":308},"#ff6700",[52,131235,80],{"class":79},[52,131237,131238],{"class":54,"line":144},[52,131239,452],{"class":79},[4509,131241],{"style":129058,"src":131242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,131244,131245],{},"行高=盒子高度：实现文字的垂直居中",[14,131247,131248],{},"原理讲解：",[4509,131250],{"style":129058,"src":131251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[18,131253,131255],{"id":131254},"_82-css背景","8.2 css背景",[14,131257,131258],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[3195,131260,131262],{"id":131261},"_821-背景颜色","8.2.1 背景颜色",[14,131264,131265],{},"background-color:颜色值;",[14,131267,131268],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[3195,131270,131272],{"id":131271},"_822-背景图片","8.2.2 背景图片",[14,131274,131275],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[42,131277,131279],{"className":129202,"code":131278,"language":129204,"meta":47,"style":47},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[49,131280,131281,131287,131303],{"__ignoreMap":47},[52,131282,131283,131285],{"class":54,"line":55},[52,131284,54261],{"class":53950},[52,131286,18220],{"class":79},[52,131288,131289,131292,131294,131296,131298,131301],{"class":54,"line":66},[52,131290,131291],{"class":308},"  background-image",[52,131293,54087],{"class":79},[52,131295,64376],{"class":308},[52,131297,1216],{"class":79},[52,131299,131300],{"class":1223},"images\u002Fbg.png",[52,131302,2737],{"class":79},[52,131304,131305],{"class":54,"line":83},[52,131306,452],{"class":79},[3353,131308,131309,131318],{},[3356,131310,131311],{},[3359,131312,131313,131316],{},[3362,131314,131315],{"align":26385},"参数值",[3362,131317,105346],{"align":26385},[3399,131319,131320,131327],{},[3359,131321,131322,131324],{},[3404,131323,57387],{"align":26385},[3404,131325,131326],{"align":26385},"无背景图（默认的）",[3359,131328,131329,131331],{},[3404,131330,64376],{"align":26385},[3404,131332,131333],{"align":26385},"使用绝对或相对地址指定背景图像",[42,131335,131336],{"className":129202,"code":131278,"language":129204,"meta":47,"style":47},[49,131337,131338,131344,131358],{"__ignoreMap":47},[52,131339,131340,131342],{"class":54,"line":55},[52,131341,54261],{"class":53950},[52,131343,18220],{"class":79},[52,131345,131346,131348,131350,131352,131354,131356],{"class":54,"line":66},[52,131347,131291],{"class":308},[52,131349,54087],{"class":79},[52,131351,64376],{"class":308},[52,131353,1216],{"class":79},[52,131355,131300],{"class":1223},[52,131357,2737],{"class":79},[52,131359,131360],{"class":54,"line":83},[52,131361,452],{"class":79},[14,131363,131364],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[3195,131366,131368],{"id":131367},"_823-背景平铺","8.2.3 背景平铺",[42,131370,131372],{"className":129202,"code":131371,"language":129204,"meta":47,"style":47},"div {\n  background-repeat: no-repeat;\n}\n",[49,131373,131374,131380,131391],{"__ignoreMap":47},[52,131375,131376,131378],{"class":54,"line":55},[52,131377,54261],{"class":53950},[52,131379,18220],{"class":79},[52,131381,131382,131385,131387,131389],{"class":54,"line":66},[52,131383,131384],{"class":308},"  background-repeat",[52,131386,54087],{"class":79},[52,131388,64386],{"class":308},[52,131390,80],{"class":79},[52,131392,131393],{"class":54,"line":83},[52,131394,452],{"class":79},[3353,131396,131397,131405],{},[3356,131398,131399],{},[3359,131400,131401,131403],{},[3362,131402,131315],{"align":26385},[3362,131404,105346],{"align":26385},[3399,131406,131407,131415,131422,131430],{},[3359,131408,131409,131412],{},[3404,131410,131411],{"align":26385},"repeat",[3404,131413,131414],{"align":26385},"背景图像在纵向和横向上平铺（默认的）",[3359,131416,131417,131419],{},[3404,131418,64386],{"align":26385},[3404,131420,131421],{"align":26385},"背景图像不平铺",[3359,131423,131424,131427],{},[3404,131425,131426],{"align":26385},"repeat-x",[3404,131428,131429],{"align":26385},"背景图像在横向上平铺",[3359,131431,131432,131435],{},[3404,131433,131434],{"align":26385},"repeat-y",[3404,131436,131437],{"align":26385},"背景图像在纵向平铺",[3195,131439,131441],{"id":131440},"_824-背景图片位置","8.2.4 背景图片位置",[42,131443,131445],{"className":129202,"code":131444,"language":129204,"meta":47,"style":47},"\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",[49,131446,131447,131452,131458,131472,131476,131481,131487,131503,131507,131512,131518,131532],{"__ignoreMap":47},[52,131448,131449],{"class":54,"line":55},[52,131450,131451],{"class":94},"\u002F* 方位名词 *\u002F\n",[52,131453,131454,131456],{"class":54,"line":66},[52,131455,54261],{"class":53950},[52,131457,18220],{"class":79},[52,131459,131460,131463,131465,131467,131470],{"class":54,"line":83},[52,131461,131462],{"class":308},"  background-position",[52,131464,54087],{"class":79},[52,131466,54242],{"class":308},[52,131468,131469],{"class":308}," top",[52,131471,80],{"class":79},[52,131473,131474],{"class":54,"line":91},[52,131475,452],{"class":79},[52,131477,131478],{"class":54,"line":98},[52,131479,131480],{"class":94},"\u002F* 精确单位 *\u002F\n",[52,131482,131483,131485],{"class":54,"line":107},[52,131484,54261],{"class":53950},[52,131486,18220],{"class":79},[52,131488,131489,131491,131493,131495,131497,131499,131501],{"class":54,"line":113},[52,131490,131462],{"class":308},[52,131492,54087],{"class":79},[52,131494,444],{"class":308},[52,131496,54142],{"class":58},[52,131498,60154],{"class":308},[52,131500,54142],{"class":58},[52,131502,80],{"class":79},[52,131504,131505],{"class":54,"line":119},[52,131506,452],{"class":79},[52,131508,131509],{"class":54,"line":126},[52,131510,131511],{"class":94},"\u002F* 混合单位 *\u002F\n",[52,131513,131514,131516],{"class":54,"line":132},[52,131515,54261],{"class":53950},[52,131517,18220],{"class":79},[52,131519,131520,131522,131524,131526,131528,131530],{"class":54,"line":138},[52,131521,131462],{"class":308},[52,131523,54087],{"class":79},[52,131525,444],{"class":308},[52,131527,54142],{"class":58},[52,131529,19792],{"class":308},[52,131531,80],{"class":79},[52,131533,131534],{"class":54,"line":144},[52,131535,452],{"class":79},[14,131537,131538],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[3353,131540,131541,131549],{},[3356,131542,131543],{},[3359,131544,131545,131547],{},[3362,131546,131315],{"align":26385},[3362,131548,28519],{"align":26385},[3399,131550,131551,131558],{},[3359,131552,131553,131555],{},[3404,131554,54618],{"align":26385},[3404,131556,131557],{"align":26385},"百分数|由浮点数和单位标识符组成的长度值",[3359,131559,131560,131563],{},[3404,131561,131562],{"align":26385},"position",[3404,131564,131565],{"align":26385},"top|center|bottom|left|center|right 方位名词",[14,131567,131568],{},"其他说明：",[14,131570,131571],{},"①参数是方位名词",[14,131573,131574],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,131576,131577],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,131579,131580],{},"②参数是精确单位",[14,131582,131583],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,131585,131586],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,131588,131589],{},"③参数是混合单位",[14,131591,131592],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[3195,131594,131596],{"id":131595},"_825-背景图片固定","8.2.5 背景图片固定",[42,131598,131600],{"className":129202,"code":131599,"language":129204,"meta":47,"style":47},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[49,131601,131602,131607,131613,131625,131629,131634,131640,131650],{"__ignoreMap":47},[52,131603,131604],{"class":54,"line":55},[52,131605,131606],{"class":94},"\u002F* 背景滚动（默认） *\u002F\n",[52,131608,131609,131611],{"class":54,"line":66},[52,131610,54261],{"class":53950},[52,131612,18220],{"class":79},[52,131614,131615,131618,131620,131623],{"class":54,"line":83},[52,131616,131617],{"class":308},"  background-attachment",[52,131619,54087],{"class":79},[52,131621,131622],{"class":308},"scroll",[52,131624,80],{"class":79},[52,131626,131627],{"class":54,"line":91},[52,131628,452],{"class":79},[52,131630,131631],{"class":54,"line":98},[52,131632,131633],{"class":94},"\u002F* 背景固定 *\u002F\n",[52,131635,131636,131638],{"class":54,"line":107},[52,131637,54261],{"class":53950},[52,131639,18220],{"class":79},[52,131641,131642,131644,131646,131648],{"class":54,"line":113},[52,131643,131617],{"class":308},[52,131645,54087],{"class":79},[52,131647,88883],{"class":308},[52,131649,80],{"class":79},[52,131651,131652],{"class":54,"line":119},[52,131653,452],{"class":79},[3353,131655,131656,131665],{},[3356,131657,131658],{},[3359,131659,131660,131663],{},[3362,131661,131662],{"align":26385},"参数",[3362,131664,105346],{"align":26385},[3399,131666,131667,131674],{},[3359,131668,131669,131671],{},[3404,131670,131622],{"align":26385},[3404,131672,131673],{"align":26385},"背景图像是随对象内容滚动",[3359,131675,131676,131678],{},[3404,131677,88883],{"align":26385},[3404,131679,131680],{"align":26385},"背景图像固定",[3195,131682,131684],{"id":131683},"_826-背景样式合写","8.2.6 背景样式合写",[42,131686,131688],{"className":129202,"code":131687,"language":129204,"meta":47,"style":47},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[49,131689,131690,131695,131701,131729],{"__ignoreMap":47},[52,131691,131692],{"class":54,"line":55},[52,131693,131694],{"class":94},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[52,131696,131697,131699],{"class":54,"line":66},[52,131698,54261],{"class":53950},[52,131700,18220],{"class":79},[52,131702,131703,131705,131707,131709,131712,131714,131716,131718,131720,131723,131725,131727],{"class":54,"line":83},[52,131704,73261],{"class":308},[52,131706,54087],{"class":79},[52,131708,63492],{"class":308},[52,131710,131711],{"class":308}," url",[52,131713,1216],{"class":79},[52,131715,131300],{"class":1223},[52,131717,16362],{"class":79},[52,131719,64386],{"class":308},[52,131721,131722],{"class":308}," fixed",[52,131724,19792],{"class":308},[52,131726,131469],{"class":308},[52,131728,80],{"class":79},[52,131730,131731],{"class":54,"line":91},[52,131732,452],{"class":79},[3195,131734,131736],{"id":131735},"_827-背景色半透明","8.2.7 背景色半透明",[42,131738,131740],{"className":129202,"code":131739,"language":129204,"meta":47,"style":47},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[49,131741,131742,131748,131774],{"__ignoreMap":47},[52,131743,131744,131746],{"class":54,"line":55},[52,131745,54261],{"class":53950},[52,131747,18220],{"class":79},[52,131749,131750,131752,131754,131756,131758,131760,131762,131764,131766,131768,131770,131772],{"class":54,"line":66},[52,131751,73261],{"class":308},[52,131753,54087],{"class":79},[52,131755,57760],{"class":308},[52,131757,1216],{"class":79},[52,131759,692],{"class":308},[52,131761,15083],{"class":79},[52,131763,692],{"class":308},[52,131765,15083],{"class":79},[52,131767,692],{"class":308},[52,131769,15083],{"class":79},[52,131771,103171],{"class":308},[52,131773,2737],{"class":79},[52,131775,131776],{"class":54,"line":83},[52,131777,452],{"class":79},[14,131779,102046],{},[14,131781,131782],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,131784,131785],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,131787,131788],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,131790,131791],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[3195,131793,131795],{"id":131794},"_828-总结","8.2.8 总结",[3353,131797,131798,131809],{},[3356,131799,131800],{},[3359,131801,131802,131805,131807],{},[3362,131803,131804],{"align":26385},"属性",[3362,131806,105346],{"align":26385},[3362,131808,3367],{"align":26385},[3399,131810,131811,131822,131833,131844,131855,131866,131877],{},[3359,131812,131813,131816,131819],{},[3404,131814,131815],{"align":26385},"background-color",[3404,131817,131818],{"align":26385},"背景颜色",[3404,131820,131821],{"align":26385},"预定义的颜色值\u002F十六进制\u002FRGB代码",[3359,131823,131824,131827,131830],{},[3404,131825,131826],{"align":26385},"background-image",[3404,131828,131829],{"align":26385},"背景图片",[3404,131831,131832],{"align":26385},"url(图片路径)",[3359,131834,131835,131838,131841],{},[3404,131836,131837],{"align":26385},"background-repeat",[3404,131839,131840],{"align":26385},"是否平铺",[3404,131842,131843],{"align":26385},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[3359,131845,131846,131849,131852],{},[3404,131847,131848],{"align":26385},"background-position",[3404,131850,131851],{"align":26385},"背景位置",[3404,131853,131854],{"align":26385},"length\u002Fposition 分别是x和y坐标",[3359,131856,131857,131860,131863],{},[3404,131858,131859],{"align":26385},"background-attachment",[3404,131861,131862],{"align":26385},"背景附着",[3404,131864,131865],{"align":26385},"scroll(背景滚动) \u002Ffixed (背景固定)",[3359,131867,131868,131871,131874],{},[3404,131869,131870],{"align":26385},"背景简写",[3404,131872,131873],{"align":26385},"书写更简单",[3404,131875,131876],{"align":26385},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[3359,131878,131879,131882,131885],{},[3404,131880,131881],{"align":26385},"背景半透明",[3404,131883,131884],{"align":26385},"背景颜色半透明",[3404,131886,131887],{"align":26385},"background: rgba(0,0,0.3); 后面必须是4个值",[14,131889,131890],{},"颜色渐变：",[4509,131892],{"style":129058,"src":131893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[4509,131895],{"style":129058,"src":131896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[3195,131898,131900],{"id":131899},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[42,131902,131904],{"className":129949,"code":131903,"language":129951,"meta":47,"style":47},"\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",[49,131905,131906,131921,131940,131959,131978,131997,132016],{"__ignoreMap":47},[52,131907,131908,131910,131912,131914,131916,131919],{"class":54,"line":55},[52,131909,698],{"class":79},[52,131911,54261],{"class":53950},[52,131913,56136],{"class":75},[52,131915,292],{"class":79},[52,131917,131918],{"class":62},"\"nav\"",[52,131920,53957],{"class":79},[52,131922,131923,131925,131927,131929,131931,131933,131936,131938],{"class":54,"line":66},[52,131924,54794],{"class":79},[52,131926,3451],{"class":53950},[52,131928,63707],{"class":75},[52,131930,292],{"class":79},[52,131932,63712],{"class":62},[52,131934,131935],{"class":79},">五彩导航1\u003C\u002F",[52,131937,3451],{"class":53950},[52,131939,53957],{"class":79},[52,131941,131942,131944,131946,131948,131950,131952,131955,131957],{"class":54,"line":83},[52,131943,54794],{"class":79},[52,131945,3451],{"class":53950},[52,131947,63707],{"class":75},[52,131949,292],{"class":79},[52,131951,63712],{"class":62},[52,131953,131954],{"class":79},">五彩导航2\u003C\u002F",[52,131956,3451],{"class":53950},[52,131958,53957],{"class":79},[52,131960,131961,131963,131965,131967,131969,131971,131974,131976],{"class":54,"line":91},[52,131962,54794],{"class":79},[52,131964,3451],{"class":53950},[52,131966,63707],{"class":75},[52,131968,292],{"class":79},[52,131970,63712],{"class":62},[52,131972,131973],{"class":79},">五彩导航3\u003C\u002F",[52,131975,3451],{"class":53950},[52,131977,53957],{"class":79},[52,131979,131980,131982,131984,131986,131988,131990,131993,131995],{"class":54,"line":98},[52,131981,54794],{"class":79},[52,131983,3451],{"class":53950},[52,131985,63707],{"class":75},[52,131987,292],{"class":79},[52,131989,63712],{"class":62},[52,131991,131992],{"class":79},">五彩导航4\u003C\u002F",[52,131994,3451],{"class":53950},[52,131996,53957],{"class":79},[52,131998,131999,132001,132003,132005,132007,132009,132012,132014],{"class":54,"line":107},[52,132000,54794],{"class":79},[52,132002,3451],{"class":53950},[52,132004,63707],{"class":75},[52,132006,292],{"class":79},[52,132008,63712],{"class":62},[52,132010,132011],{"class":79},">五彩导航5\u003C\u002F",[52,132013,3451],{"class":53950},[52,132015,53957],{"class":79},[52,132017,132018,132020,132022],{"class":54,"line":113},[52,132019,54435],{"class":79},[52,132021,54261],{"class":53950},[52,132023,53957],{"class":79},[42,132025,132027],{"className":129202,"code":132026,"language":129204,"meta":47,"style":47},".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",[49,132028,132029,132038,132048,132060,132072,132082,132094,132104,132108,132133,132156,132179,132202],{"__ignoreMap":47},[52,132030,132031,132034,132036],{"class":54,"line":55},[52,132032,132033],{"class":75},".nav",[52,132035,4446],{"class":53950},[52,132037,18220],{"class":79},[52,132039,132040,132042,132044,132046],{"class":54,"line":66},[52,132041,130818],{"class":308},[52,132043,54087],{"class":79},[52,132045,75033],{"class":308},[52,132047,80],{"class":79},[52,132049,132050,132052,132054,132056,132058],{"class":54,"line":83},[52,132051,73218],{"class":308},[52,132053,54087],{"class":79},[52,132055,4007],{"class":308},[52,132057,54142],{"class":58},[52,132059,80],{"class":79},[52,132061,132062,132064,132066,132068,132070],{"class":54,"line":91},[52,132063,73438],{"class":308},[52,132065,54087],{"class":79},[52,132067,4046],{"class":308},[52,132069,54142],{"class":58},[52,132071,80],{"class":79},[52,132073,132074,132076,132078,132080],{"class":54,"line":98},[52,132075,73176],{"class":308},[52,132077,54087],{"class":79},[52,132079,54242],{"class":308},[52,132081,80],{"class":79},[52,132083,132084,132086,132088,132090,132092],{"class":54,"line":107},[52,132085,129886],{"class":308},[52,132087,54087],{"class":79},[52,132089,4046],{"class":308},[52,132091,54142],{"class":58},[52,132093,80],{"class":79},[52,132095,132096,132098,132100,132102],{"class":54,"line":113},[52,132097,73555],{"class":308},[52,132099,54087],{"class":79},[52,132101,63492],{"class":308},[52,132103,80],{"class":79},[52,132105,132106],{"class":54,"line":119},[52,132107,452],{"class":79},[52,132109,132110,132112,132114,132117,132119,132121,132124,132126,132128,132130],{"class":54,"line":126},[52,132111,132033],{"class":75},[52,132113,4446],{"class":53950},[52,132115,132116],{"class":75},":nth-child",[52,132118,1216],{"class":79},[52,132120,629],{"class":308},[52,132122,132123],{"class":79},") { ",[52,132125,131815],{"class":308},[52,132127,54087],{"class":79},[52,132129,131233],{"class":308},[52,132131,132132],{"class":79},"; }\n",[52,132134,132135,132137,132139,132141,132143,132145,132147,132149,132151,132154],{"class":54,"line":132},[52,132136,132033],{"class":75},[52,132138,4446],{"class":53950},[52,132140,132116],{"class":75},[52,132142,1216],{"class":79},[52,132144,564],{"class":308},[52,132146,132123],{"class":79},[52,132148,131815],{"class":308},[52,132150,54087],{"class":79},[52,132152,132153],{"class":308},"#ff0000",[52,132155,132132],{"class":79},[52,132157,132158,132160,132162,132164,132166,132168,132170,132172,132174,132177],{"class":54,"line":138},[52,132159,132033],{"class":75},[52,132161,4446],{"class":53950},[52,132163,132116],{"class":75},[52,132165,1216],{"class":79},[52,132167,2313],{"class":308},[52,132169,132123],{"class":79},[52,132171,131815],{"class":308},[52,132173,54087],{"class":79},[52,132175,132176],{"class":308},"#00a4ff",[52,132178,132132],{"class":79},[52,132180,132181,132183,132185,132187,132189,132191,132193,132195,132197,132200],{"class":54,"line":144},[52,132182,132033],{"class":75},[52,132184,4446],{"class":53950},[52,132186,132116],{"class":75},[52,132188,1216],{"class":79},[52,132190,3504],{"class":308},[52,132192,132123],{"class":79},[52,132194,131815],{"class":308},[52,132196,54087],{"class":79},[52,132198,132199],{"class":308},"#ff00ff",[52,132201,132132],{"class":79},[52,132203,132204,132206,132208,132210,132212,132214,132216,132218,132220,132223],{"class":54,"line":153},[52,132205,132033],{"class":75},[52,132207,4446],{"class":53950},[52,132209,132116],{"class":75},[52,132211,1216],{"class":79},[52,132213,1805],{"class":308},[52,132215,132123],{"class":79},[52,132217,131815],{"class":308},[52,132219,54087],{"class":79},[52,132221,132222],{"class":308},"#00ff00",[52,132224,132132],{"class":79},[18,132226,132228],{"id":132227},"_83-css三大特性","8.3 css三大特性",[3195,132230,132232],{"id":132231},"_831-层叠性","8.3.1 层叠性",[14,132234,132235],{},"为了解决样式冲突问题",[14,132237,132238],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,132240,132241],{},"   ②样式不冲突，不会层叠",[3195,132243,132245],{"id":132244},"_832-继承性","8.3.2 继承性",[14,132247,132248],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,132250,132251],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[42,132253,132255],{"className":129202,"code":132254,"language":129204,"meta":47,"style":47},"p {\n  color: #333;\n}\n",[49,132256,132257,132263,132273],{"__ignoreMap":47},[52,132258,132259,132261],{"class":54,"line":55},[52,132260,14],{"class":53950},[52,132262,18220],{"class":79},[52,132264,132265,132267,132269,132271],{"class":54,"line":66},[52,132266,73555],{"class":308},[52,132268,54087],{"class":79},[52,132270,65019],{"class":308},[52,132272,80],{"class":79},[52,132274,132275],{"class":54,"line":83},[52,132276,452],{"class":79},[4509,132278],{"style":129058,"src":132279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,132281,132282],{},"解释：①行高可以跟单位也可以不跟单位",[14,132284,132285],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,132287,132288],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,132290,132291],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[3195,132293,132295],{"id":132294},"_833-优先级","8.3.3 优先级",[1696,132297,132298,132301],{},[32,132299,132300],{},"选择器相同，则执行层叠性",[32,132302,132303],{},"选择器不同，则根据选择器权重执行",[3353,132305,132306,132316],{},[3356,132307,132308],{},[3359,132309,132310,132313],{},[3362,132311,132312],{"align":26385},"选择器",[3362,132314,132315],{"align":26385},"选择器权重",[3399,132317,132318,132326,132334,132342,132350,132358],{},[3359,132319,132320,132323],{},[3404,132321,132322],{"align":26385},"继承 或者*",[3404,132324,132325],{"align":26385},"0，0，0，0",[3359,132327,132328,132331],{},[3404,132329,132330],{"align":26385},"标签选择器",[3404,132332,132333],{"align":26385},"0，0，0，1",[3359,132335,132336,132339],{},[3404,132337,132338],{"align":26385},"类选择器，伪类选择器",[3404,132340,132341],{"align":26385},"0，0，1，0",[3359,132343,132344,132347],{},[3404,132345,132346],{"align":26385},"ID选择器",[3404,132348,132349],{"align":26385},"0，1，0，0",[3359,132351,132352,132355],{},[3404,132353,132354],{"align":26385},"行内样式",[3404,132356,132357],{"align":26385},"1，0，0，0",[3359,132359,132360,132363],{},[3404,132361,132362],{"align":26385},"！important",[3404,132364,132365],{"align":26385},"无穷大",[14,132367,132368],{},"! important用法：",[42,132370,132372],{"className":129202,"code":132371,"language":129204,"meta":47,"style":47},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[49,132373,132374,132379,132385,132398,132402,132407,132413,132423],{"__ignoreMap":47},[52,132375,132376],{"class":54,"line":55},[52,132377,132378],{"class":94},"\u002F* !important 拥有最高优先级 *\u002F\n",[52,132380,132381,132383],{"class":54,"line":66},[52,132382,54261],{"class":53950},[52,132384,18220],{"class":79},[52,132386,132387,132389,132391,132393,132396],{"class":54,"line":83},[52,132388,73555],{"class":308},[52,132390,54087],{"class":79},[52,132392,54295],{"class":308},[52,132394,132395],{"class":58}," !important",[52,132397,80],{"class":79},[52,132399,132400],{"class":54,"line":91},[52,132401,452],{"class":79},[52,132403,132404],{"class":54,"line":98},[52,132405,132406],{"class":94},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[52,132408,132409,132411],{"class":54,"line":107},[52,132410,54261],{"class":53950},[52,132412,18220],{"class":79},[52,132414,132415,132417,132419,132421],{"class":54,"line":113},[52,132416,73555],{"class":308},[52,132418,54087],{"class":79},[52,132420,60071],{"class":308},[52,132422,80],{"class":79},[52,132424,132425],{"class":54,"line":119},[52,132426,452],{"class":79},[14,132428,132429],{},"优先级注意点：",[14,132431,132432],{},"①权重是有4组数字组成,但是不会有进位",[14,132434,132435],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,132437,132438],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,132440,132441],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,132443,132444],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,132446,132447],{},"⑥复合选择器",[3353,132449,132450,132460],{},[3356,132451,132452],{},[3359,132453,132454,132457],{},[3362,132455,132456],{"align":26385},"div ul li",[3362,132458,132459],{"align":26385},"0,0,0,3",[3399,132461,132462,132470,132478],{},[3359,132463,132464,132467],{},[3404,132465,132466],{"align":26385},".nav ul li",[3404,132468,132469],{"align":26385},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[3359,132471,132472,132475],{},[3404,132473,132474],{"align":26385},"a:hover",[3404,132476,132477],{"align":26385},"0,0,1,1",[3359,132479,132480,132483],{},[3404,132481,132482],{"align":26385},".nav a",[3404,132484,132477],{"align":26385},[3141,132486,132487],{},"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":47,"searchDepth":66,"depth":66,"links":132489},[132490,132498,132509],{"id":130598,"depth":66,"text":130599,"children":132491},[132492,132493,132494,132495,132496,132497],{"id":130611,"depth":83,"text":130612},{"id":130683,"depth":83,"text":130684},{"id":130755,"depth":83,"text":130756},{"id":130786,"depth":83,"text":130787},{"id":130793,"depth":83,"text":130794},{"id":130946,"depth":83,"text":130947},{"id":131254,"depth":66,"text":131255,"children":132499},[132500,132501,132502,132503,132504,132505,132506,132507,132508],{"id":131261,"depth":83,"text":131262},{"id":131271,"depth":83,"text":131272},{"id":131367,"depth":83,"text":131368},{"id":131440,"depth":83,"text":131441},{"id":131595,"depth":83,"text":131596},{"id":131683,"depth":83,"text":131684},{"id":131735,"depth":83,"text":131736},{"id":131794,"depth":83,"text":131795},{"id":131899,"depth":83,"text":131900},{"id":132227,"depth":66,"text":132228,"children":132510},[132511,132512,132513],{"id":132231,"depth":83,"text":132232},{"id":132244,"depth":83,"text":132245},{"id":132294,"depth":83,"text":132295},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130590,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132520,"title":132521,"body":132522,"description":26025,"extension":3153,"meta":134112,"navigation":122,"path":134113,"seo":134114,"stem":134115,"__hash__":134116},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132523,"toc":134091},[132524,132527,132531,132534,132537,132540,132543,132546,132549,132552,132556,132564,132601,132637,132640,132654,132659,132693,132696,132789,132794,132797,132827,132830,132835,132843,132847,132854,132900,132944,132949,132952,132955,132958,132961,132964,132967,132969,132972,132976,132981,133025,133030,133033,133036,133073,133078,133081,133084,133087,133090,133122,133125,133128,133131,133163,133166,133169,133172,133176,133179,133211,133214,133218,133238,133241,133249,133252,133256,133261,133264,133296,133301,133304,133342,133346,133351,133354,133357,133388,133391,133408,133413,133465,133525,133530,133584,133622,133626,133630,133633,133637,133645,133648,133650,133661,133666,133714,133748,133751,133754,133757,133760,133804,133807,133810,133813,133816,133819,133822,133866,133869,133872,133875,133878,133881,133884,133890,133893,133937,133940,133943,133946,133949,133952,133996,133999,134001,134004,134008,134012,134050,134054,134057,134060,134064,134072,134076,134079,134082,134085,134088],[10,132525,132521],{"id":132526},"_9-css盒模型浮动与切图",[18,132528,132530],{"id":132529},"_91-盒子模型","9.1 盒子模型",[14,132532,132533],{},"利用盒子来设计网页",[14,132535,132536],{},"盒子包含：边框、外边距、内边距、实际内容",[14,132538,132539],{},"网页布局设置：",[14,132541,132542],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,132544,132545],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,132547,132548],{},"③往盒子里装内容",[4509,132550],{"style":129058,"src":132551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[3195,132553,132555],{"id":132554},"_911-边框border","9.1.1 边框（border）",[1696,132557,132558,132561],{},[32,132559,132560],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[32,132562,132563],{},"语法",[42,132565,132567],{"className":129202,"code":132566,"language":129204,"meta":47,"style":47},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[49,132568,132569,132574,132580,132597],{"__ignoreMap":47},[52,132570,132571],{"class":54,"line":55},[52,132572,132573],{"class":94},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[52,132575,132576,132578],{"class":54,"line":66},[52,132577,54261],{"class":53950},[52,132579,18220],{"class":79},[52,132581,132582,132584,132586,132588,132590,132592,132595],{"class":54,"line":83},[52,132583,73546],{"class":308},[52,132585,54087],{"class":79},[52,132587,629],{"class":308},[52,132589,54142],{"class":58},[52,132591,54171],{"class":308},[52,132593,132594],{"class":308}," #ccc",[52,132596,80],{"class":79},[52,132598,132599],{"class":54,"line":91},[52,132600,452],{"class":79},[3353,132602,132603,132611],{},[3356,132604,132605],{},[3359,132606,132607,132609],{},[3362,132608,131804],{"align":26385},[3362,132610,105346],{"align":26385},[3399,132612,132613,132621,132629],{},[3359,132614,132615,132618],{},[3404,132616,132617],{"align":26385},"border-width",[3404,132619,132620],{"align":26385},"定义边框粗细，单位是px",[3359,132622,132623,132626],{},[3404,132624,132625],{"align":26385},"border-style",[3404,132627,132628],{"align":26385},"边框的样式",[3359,132630,132631,132634],{},[3404,132632,132633],{"align":26385},"border-color",[3404,132635,132636],{"align":26385},"边框的颜色",[14,132638,132639],{},"边框样式 border-style 可以设置如下值：",[29,132641,132642,132645,132648,132651],{},[32,132643,132644],{},"none：没有边框即忽略所有边框的宽度（默认值）",[32,132646,132647],{},"solid：边框为单实线(最为常用的)",[32,132649,132650],{},"dashed：边框为虚线",[32,132652,132653],{},"dotted：边框为点线",[1696,132655,132656],{"start":83},[32,132657,132658],{},"边框的合写分写",[42,132660,132661],{"className":129202,"code":132566,"language":129204,"meta":47,"style":47},[49,132662,132663,132667,132673,132689],{"__ignoreMap":47},[52,132664,132665],{"class":54,"line":55},[52,132666,132573],{"class":94},[52,132668,132669,132671],{"class":54,"line":66},[52,132670,54261],{"class":53950},[52,132672,18220],{"class":79},[52,132674,132675,132677,132679,132681,132683,132685,132687],{"class":54,"line":83},[52,132676,73546],{"class":308},[52,132678,54087],{"class":79},[52,132680,629],{"class":308},[52,132682,54142],{"class":58},[52,132684,54171],{"class":308},[52,132686,132594],{"class":308},[52,132688,80],{"class":79},[52,132690,132691],{"class":54,"line":91},[52,132692,452],{"class":79},[14,132694,132695],{},"边框分开写法：",[42,132697,132699],{"className":129202,"code":132698,"language":129204,"meta":47,"style":47},"\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",[49,132700,132701,132706,132712,132730,132748,132767,132785],{"__ignoreMap":47},[52,132702,132703],{"class":54,"line":55},[52,132704,132705],{"class":94},"\u002F* 边框分开写法 *\u002F\n",[52,132707,132708,132710],{"class":54,"line":66},[52,132709,54261],{"class":53950},[52,132711,18220],{"class":79},[52,132713,132714,132717,132719,132721,132723,132725,132728],{"class":54,"line":83},[52,132715,132716],{"class":308},"  border-top",[52,132718,54087],{"class":79},[52,132720,629],{"class":308},[52,132722,54142],{"class":58},[52,132724,54171],{"class":308},[52,132726,132727],{"class":308}," #000",[52,132729,80],{"class":79},[52,132731,132732,132735,132737,132739,132741,132743,132746],{"class":54,"line":91},[52,132733,132734],{"class":308},"  border-right",[52,132736,54087],{"class":79},[52,132738,564],{"class":308},[52,132740,54142],{"class":58},[52,132742,64891],{"class":308},[52,132744,132745],{"class":308}," #333",[52,132747,80],{"class":79},[52,132749,132750,132753,132755,132757,132759,132762,132765],{"class":54,"line":98},[52,132751,132752],{"class":308},"  border-bottom",[52,132754,54087],{"class":79},[52,132756,2313],{"class":308},[52,132758,54142],{"class":58},[52,132760,132761],{"class":308}," dotted",[52,132763,132764],{"class":308}," #666",[52,132766,80],{"class":79},[52,132768,132769,132772,132774,132776,132778,132780,132783],{"class":54,"line":107},[52,132770,132771],{"class":308},"  border-left",[52,132773,54087],{"class":79},[52,132775,629],{"class":308},[52,132777,54142],{"class":58},[52,132779,54171],{"class":308},[52,132781,132782],{"class":308}," #999",[52,132784,80],{"class":79},[52,132786,132787],{"class":54,"line":113},[52,132788,452],{"class":79},[1696,132790,132791],{"start":91},[32,132792,132793],{},"表格的细线边框",[14,132795,132796],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[42,132798,132800],{"className":129202,"code":132799,"language":129204,"meta":47,"style":47},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[49,132801,132802,132807,132813,132823],{"__ignoreMap":47},[52,132803,132804],{"class":54,"line":55},[52,132805,132806],{"class":94},"\u002F* 表格细线边框合并 *\u002F\n",[52,132808,132809,132811],{"class":54,"line":66},[52,132810,3353],{"class":53950},[52,132812,18220],{"class":79},[52,132814,132815,132817,132819,132821],{"class":54,"line":83},[52,132816,73228],{"class":308},[52,132818,54087],{"class":79},[52,132820,67685],{"class":308},[52,132822,80],{"class":79},[52,132824,132825],{"class":54,"line":91},[52,132826,452],{"class":79},[14,132828,132829],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[1696,132831,132832],{"start":98},[32,132833,132834],{},"解决边框额外增加盒子的实际大小的方法：",[29,132836,132837,132840],{},[32,132838,132839],{},"测量盒子大小的时候,不量边框",[32,132841,132842],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[3195,132844,132846],{"id":132845},"_912-内边距","9.1.2 内边距",[1696,132848,132849,132852],{},[32,132850,132851],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[32,132853,132563],{},[3353,132855,132856,132866],{},[3356,132857,132858],{},[3359,132859,132860,132863],{},[3362,132861,132862],{"align":26385},"值的个数",[3362,132864,132865],{"align":26385},"表达意思",[3399,132867,132868,132876,132884,132892],{},[3359,132869,132870,132873],{},[3404,132871,132872],{"align":26385},"padding: 5px;",[3404,132874,132875],{"align":26385},"1个值，代表上下左右都有5个元素",[3359,132877,132878,132881],{},[3404,132879,132880],{"align":26385},"padding: 5px 10px;",[3404,132882,132883],{"align":26385},"2个值，代表上下内边距为5像素，左右内边距为10像素",[3359,132885,132886,132889],{},[3404,132887,132888],{"align":26385},"padding: 5px 10px 20px;",[3404,132890,132891],{"align":26385},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[3359,132893,132894,132897],{},[3404,132895,132896],{"align":26385},"padding: 5px 10px 20px 30px;",[3404,132898,132899],{"align":26385},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[3353,132901,132902,132910],{},[3356,132903,132904],{},[3359,132905,132906,132908],{},[3362,132907,131804],{"align":26385},[3362,132909,105346],{"align":26385},[3399,132911,132912,132920,132928,132936],{},[3359,132913,132914,132917],{},[3404,132915,132916],{"align":26385},"padding-left",[3404,132918,132919],{"align":26385},"左内边距",[3359,132921,132922,132925],{},[3404,132923,132924],{"align":26385},"padding-right",[3404,132926,132927],{"align":26385},"右内边距",[3359,132929,132930,132933],{},[3404,132931,132932],{"align":26385},"padding-top",[3404,132934,132935],{"align":26385},"上内边距",[3359,132937,132938,132941],{},[3404,132939,132940],{"align":26385},"padding-bottom",[3404,132942,132943],{"align":26385},"下内边距",[1696,132945,132946],{"start":83},[32,132947,132948],{},"内边距会影响盒子的实际大小",[14,132950,132951],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,132953,132954],{},"①内容和边框有了距离，添加了内边距",[14,132956,132957],{},"②padding影响了盒子实际大小",[14,132959,132960],{},"内边距对盒子大小的影响：",[14,132962,132963],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,132965,132966],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,132968,97870],{},[14,132970,132971],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[3195,132973,132975],{"id":132974},"_913-外边距","9.1.3 外边距",[1696,132977,132978],{},[32,132979,132980],{},"控制盒子与盒子之间的距离",[3353,132982,132983,132991],{},[3356,132984,132985],{},[3359,132986,132987,132989],{},[3362,132988,131804],{"align":26385},[3362,132990,105346],{"align":26385},[3399,132992,132993,133001,133009,133017],{},[3359,132994,132995,132998],{},[3404,132996,132997],{"align":26385},"margin-left",[3404,132999,133000],{"align":26385},"左外边距",[3359,133002,133003,133006],{},[3404,133004,133005],{"align":26385},"margin-right",[3404,133007,133008],{"align":26385},"右外边距",[3359,133010,133011,133014],{},[3404,133012,133013],{"align":26385},"margin-top",[3404,133015,133016],{"align":26385},"上外边距",[3359,133018,133019,133022],{},[3404,133020,133021],{"align":26385},"margin-bottom",[3404,133023,133024],{"align":26385},"下外边距",[1696,133026,133027],{"start":66},[32,133028,133029],{},"外边距可以让块级盒子水平居中的两个条件：",[14,133031,133032],{},"①盒子必须指定了宽度（width）",[14,133034,133035],{},"②盒子左右的外边距都设置为 auto",[42,133037,133039],{"className":129202,"code":133038,"language":129204,"meta":47,"style":47},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[49,133040,133041,133046,133053,133069],{"__ignoreMap":47},[52,133042,133043],{"class":54,"line":55},[52,133044,133045],{"class":94},"\u002F* margin 复合写法（同上） *\u002F\n",[52,133047,133048,133051],{"class":54,"line":66},[52,133049,133050],{"class":75},".box",[52,133052,18220],{"class":79},[52,133054,133055,133057,133059,133061,133063,133066],{"class":54,"line":83},[52,133056,73120],{"class":308},[52,133058,54087],{"class":79},[52,133060,692],{"class":308},[52,133062,54206],{"class":308},[52,133064,133065],{"class":79},";  ",[52,133067,133068],{"class":94},"\u002F* 块级盒子水平居中 *\u002F\n",[52,133070,133071],{"class":54,"line":91},[52,133072,452],{"class":79},[1696,133074,133075],{"start":83},[32,133076,133077],{},"外边距塌陷问题",[14,133079,133080],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[4509,133082],{"style":129058,"src":133083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,133085,133086],{},"解决方案：",[14,133088,133089],{},"①可以为父亲元素定义上边距",[42,133091,133092],{"className":129202,"code":133038,"language":129204,"meta":47,"style":47},[49,133093,133094,133098,133104,133118],{"__ignoreMap":47},[52,133095,133096],{"class":54,"line":55},[52,133097,133045],{"class":94},[52,133099,133100,133102],{"class":54,"line":66},[52,133101,133050],{"class":75},[52,133103,18220],{"class":79},[52,133105,133106,133108,133110,133112,133114,133116],{"class":54,"line":83},[52,133107,73120],{"class":308},[52,133109,54087],{"class":79},[52,133111,692],{"class":308},[52,133113,54206],{"class":308},[52,133115,133065],{"class":79},[52,133117,133068],{"class":94},[52,133119,133120],{"class":54,"line":91},[52,133121,452],{"class":79},[14,133123,133124],{},"②可以为父亲元素定义上内边距",[14,133126,133127],{},"③可以为父亲元素添加overflow:hidden",[4509,133129],{"style":129058,"src":133130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[42,133132,133133],{"className":129202,"code":133038,"language":129204,"meta":47,"style":47},[49,133134,133135,133139,133145,133159],{"__ignoreMap":47},[52,133136,133137],{"class":54,"line":55},[52,133138,133045],{"class":94},[52,133140,133141,133143],{"class":54,"line":66},[52,133142,133050],{"class":75},[52,133144,18220],{"class":79},[52,133146,133147,133149,133151,133153,133155,133157],{"class":54,"line":83},[52,133148,73120],{"class":308},[52,133150,54087],{"class":79},[52,133152,692],{"class":308},[52,133154,54206],{"class":308},[52,133156,133065],{"class":79},[52,133158,133068],{"class":94},[52,133160,133161],{"class":54,"line":91},[52,133162,452],{"class":79},[4509,133164],{"style":129058,"src":133165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,133167,133168],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,133170,133171],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[3195,133173,133175],{"id":133174},"_914-清除内外边距","9.1.4 清除内外边距",[14,133177,133178],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[42,133180,133181],{"className":129202,"code":133038,"language":129204,"meta":47,"style":47},[49,133182,133183,133187,133193,133207],{"__ignoreMap":47},[52,133184,133185],{"class":54,"line":55},[52,133186,133045],{"class":94},[52,133188,133189,133191],{"class":54,"line":66},[52,133190,133050],{"class":75},[52,133192,18220],{"class":79},[52,133194,133195,133197,133199,133201,133203,133205],{"class":54,"line":83},[52,133196,73120],{"class":308},[52,133198,54087],{"class":79},[52,133200,692],{"class":308},[52,133202,54206],{"class":308},[52,133204,133065],{"class":79},[52,133206,133068],{"class":94},[52,133208,133209],{"class":54,"line":91},[52,133210,452],{"class":79},[14,133212,133213],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[3195,133215,133217],{"id":133216},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[29,133219,133220,133223,133226,133229,133232,133235],{},[32,133221,133222],{},"文件→打开 ：可以打开我们要测量的图片",[32,133224,133225],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[32,133227,133228],{},"右击标尺，把里面的单位改为像素",[32,133230,133231],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[32,133233,133234],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[32,133236,133237],{},"用选区拖动 可以测量大小",[4509,133239],{"style":129058,"src":133240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[29,133242,133243,133246],{},[32,133244,133245],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[32,133247,133248],{},"吸管取色工具",[4509,133250],{"style":129058,"src":133251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[3195,133253,133255],{"id":133254},"_916-案例","9.1.6 案例",[1696,133257,133258],{},[32,133259,133260],{},"小米商品",[4509,133262],{"style":129058,"src":133263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[42,133265,133266],{"className":129202,"code":133038,"language":129204,"meta":47,"style":47},[49,133267,133268,133272,133278,133292],{"__ignoreMap":47},[52,133269,133270],{"class":54,"line":55},[52,133271,133045],{"class":94},[52,133273,133274,133276],{"class":54,"line":66},[52,133275,133050],{"class":75},[52,133277,18220],{"class":79},[52,133279,133280,133282,133284,133286,133288,133290],{"class":54,"line":83},[52,133281,73120],{"class":308},[52,133283,54087],{"class":79},[52,133285,692],{"class":308},[52,133287,54206],{"class":308},[52,133289,133065],{"class":79},[52,133291,133068],{"class":94},[52,133293,133294],{"class":54,"line":91},[52,133295,452],{"class":79},[1696,133297,133298],{"start":66},[32,133299,133300],{},"快报模块",[4509,133302],{"style":129058,"src":133303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[42,133305,133307],{"className":129949,"code":133306,"language":129951,"meta":47,"style":47},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[49,133308,133309,133314,133329,133334],{"__ignoreMap":47},[52,133310,133311],{"class":54,"line":55},[52,133312,133313],{"class":94},"\u003C!-- HTML 代码示例 -->\n",[52,133315,133316,133318,133320,133322,133324,133327],{"class":54,"line":66},[52,133317,698],{"class":79},[52,133319,54261],{"class":53950},[52,133321,56136],{"class":75},[52,133323,292],{"class":79},[52,133325,133326],{"class":62},"\"example\"",[52,133328,53957],{"class":79},[52,133330,133331],{"class":54,"line":83},[52,133332,133333],{"class":79},"  示例内容\n",[52,133335,133336,133338,133340],{"class":54,"line":91},[52,133337,54435],{"class":79},[52,133339,54261],{"class":53950},[52,133341,53957],{"class":79},[3195,133343,133345],{"id":133344},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[1696,133347,133348],{},[32,133349,133350],{},"圆角边框",[14,133352,133353],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[4509,133355],{"style":129058,"src":133356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[42,133358,133360],{"className":129202,"code":133359,"language":129204,"meta":47,"style":47},"div {\n  border: 1px solid #ccc;\n}\n",[49,133361,133362,133368,133384],{"__ignoreMap":47},[52,133363,133364,133366],{"class":54,"line":55},[52,133365,54261],{"class":53950},[52,133367,18220],{"class":79},[52,133369,133370,133372,133374,133376,133378,133380,133382],{"class":54,"line":66},[52,133371,73546],{"class":308},[52,133373,54087],{"class":79},[52,133375,629],{"class":308},[52,133377,54142],{"class":58},[52,133379,54171],{"class":308},[52,133381,132594],{"class":308},[52,133383,80],{"class":79},[52,133385,133386],{"class":54,"line":83},[52,133387,452],{"class":79},[14,133389,133390],{},"解释:",[29,133392,133393,133396,133399,133402,133405],{},[32,133394,133395],{},"参数值可以为数值或百分比的形式",[32,133397,133398],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[32,133400,133401],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[32,133403,133404],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[32,133406,133407],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[1696,133409,133410],{"start":66},[32,133411,133412],{},"盒子阴影",[42,133414,133416],{"className":129202,"code":133415,"language":129204,"meta":47,"style":47},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[49,133417,133418,133424,133461],{"__ignoreMap":47},[52,133419,133420,133422],{"class":54,"line":55},[52,133421,54261],{"class":53950},[52,133423,18220],{"class":79},[52,133425,133426,133429,133431,133433,133435,133437,133439,133441,133443,133445,133447,133449,133451,133453,133455,133457,133459],{"class":54,"line":66},[52,133427,133428],{"class":308},"  box-shadow",[52,133430,54087],{"class":79},[52,133432,692],{"class":308},[52,133434,17403],{"class":308},[52,133436,54142],{"class":58},[52,133438,5051],{"class":308},[52,133440,54142],{"class":58},[52,133442,81417],{"class":308},[52,133444,1216],{"class":79},[52,133446,692],{"class":308},[52,133448,15083],{"class":79},[52,133450,692],{"class":308},[52,133452,15083],{"class":79},[52,133454,692],{"class":308},[52,133456,15083],{"class":79},[52,133458,88860],{"class":308},[52,133460,2737],{"class":79},[52,133462,133463],{"class":54,"line":83},[52,133464,452],{"class":79},[3353,133466,133467,133475],{},[3356,133468,133469],{},[3359,133470,133471,133473],{},[3362,133472,3367],{"align":26385},[3362,133474,30139],{"align":26385},[3399,133476,133477,133485,133493,133501,133509,133517],{},[3359,133478,133479,133482],{},[3404,133480,133481],{"align":26385},"h-shadow",[3404,133483,133484],{"align":26385},"必需,水平阴影的位置,允许负值",[3359,133486,133487,133490],{},[3404,133488,133489],{"align":26385},"v-shadow",[3404,133491,133492],{"align":26385},"必需,垂直阴影的位置,允许负值",[3359,133494,133495,133498],{},[3404,133496,133497],{"align":26385},"blur",[3404,133499,133500],{"align":26385},"可选,模糊距离,就是影子的虚实",[3359,133502,133503,133506],{},[3404,133504,133505],{"align":26385},"spread",[3404,133507,133508],{"align":26385},"可选,阴影尺寸",[3359,133510,133511,133514],{},[3404,133512,133513],{"align":26385},"color",[3404,133515,133516],{"align":26385},"可选,阴影的颜色",[3359,133518,133519,133522],{},[3404,133520,133521],{"align":26385},"inset",[3404,133523,133524],{"align":26385},"可选,将外部阴影(outset)改为内部阴影",[1696,133526,133527],{"start":83},[32,133528,133529],{},"文字阴影",[42,133531,133533],{"className":129202,"code":133532,"language":129204,"meta":47,"style":47},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[49,133534,133535,133541,133580],{"__ignoreMap":47},[52,133536,133537,133539],{"class":54,"line":55},[52,133538,14],{"class":53950},[52,133540,18220],{"class":79},[52,133542,133543,133546,133548,133550,133552,133554,133556,133558,133560,133562,133564,133566,133568,133570,133572,133574,133576,133578],{"class":54,"line":66},[52,133544,133545],{"class":308},"  text-shadow",[52,133547,54087],{"class":79},[52,133549,629],{"class":308},[52,133551,54142],{"class":58},[52,133553,27768],{"class":308},[52,133555,54142],{"class":58},[52,133557,17403],{"class":308},[52,133559,54142],{"class":58},[52,133561,81417],{"class":308},[52,133563,1216],{"class":79},[52,133565,692],{"class":308},[52,133567,15083],{"class":79},[52,133569,692],{"class":308},[52,133571,15083],{"class":79},[52,133573,692],{"class":308},[52,133575,15083],{"class":79},[52,133577,103171],{"class":308},[52,133579,2737],{"class":79},[52,133581,133582],{"class":54,"line":83},[52,133583,452],{"class":79},[3353,133585,133586,133594],{},[3356,133587,133588],{},[3359,133589,133590,133592],{},[3362,133591,3367],{"align":26385},[3362,133593,30139],{"align":26385},[3399,133595,133596,133602,133609,133616],{},[3359,133597,133598,133600],{},[3404,133599,133481],{"align":26385},[3404,133601,133484],{"align":26385},[3359,133603,133604,133606],{},[3404,133605,133489],{"align":26385},[3404,133607,133608],{"align":26385},"必需,垂直阴影位置,允许负值",[3359,133610,133611,133613],{},[3404,133612,133497],{"align":26385},[3404,133614,133615],{"align":26385},"可选,模糊的距离",[3359,133617,133618,133620],{},[3404,133619,133513],{"align":26385},[3404,133621,133516],{"align":26385},[18,133623,133625],{"id":133624},"_92-浮动","9.2 浮动",[3195,133627,133629],{"id":133628},"_921-浮动介绍","9.2.1 浮动介绍",[14,133631,133632],{},"在16.2中详细介绍",[3195,133634,133636],{"id":133635},"_922-清除浮动","9.2.2 清除浮动",[1696,133638,133639,133642],{},[32,133640,133641],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[32,133643,133644],{},"清除浮动的本质",[14,133646,133647],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,133649,1453],{},[29,133651,133652,133655,133658],{},[32,133653,133654],{},"如果父盒子本身有高度，则不需要清除浮动",[32,133656,133657],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[32,133659,133660],{},"父级有了高度，就不会影响下面的标准流了",[1696,133662,133663],{"start":83},[32,133664,133665],{},"清除浮动样式",[42,133667,133669],{"className":129202,"code":133668,"language":129204,"meta":47,"style":47},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[49,133670,133671,133678,133689,133693,133700,133710],{"__ignoreMap":47},[52,133672,133673,133676],{"class":54,"line":55},[52,133674,133675],{"class":75},".left",[52,133677,18220],{"class":79},[52,133679,133680,133683,133685,133687],{"class":54,"line":66},[52,133681,133682],{"class":308},"  float",[52,133684,54087],{"class":79},[52,133686,26385],{"class":308},[52,133688,80],{"class":79},[52,133690,133691],{"class":54,"line":83},[52,133692,452],{"class":79},[52,133694,133695,133698],{"class":54,"line":91},[52,133696,133697],{"class":75},".right",[52,133699,18220],{"class":79},[52,133701,133702,133704,133706,133708],{"class":54,"line":98},[52,133703,133682],{"class":308},[52,133705,54087],{"class":79},[52,133707,75172],{"class":308},[52,133709,80],{"class":79},[52,133711,133712],{"class":54,"line":107},[52,133713,452],{"class":79},[3353,133715,133716,133724],{},[3356,133717,133718],{},[3359,133719,133720,133722],{},[3362,133721,129666],{"align":26385},[3362,133723,30139],{"align":26385},[3399,133725,133726,133733,133740],{},[3359,133727,133728,133730],{},[3404,133729,26385],{"align":26385},[3404,133731,133732],{"align":26385},"不允许左侧有浮动元素（清除左侧浮动的影响）",[3359,133734,133735,133737],{},[3404,133736,75172],{"align":26385},[3404,133738,133739],{"align":26385},"不允许右侧有浮动元素（清除右侧浮动的影响）",[3359,133741,133742,133745],{},[3404,133743,133744],{"align":26385},"both",[3404,133746,133747],{"align":26385},"同时清除左右侧浮动的影响",[14,133749,133750],{},"法一",[14,133752,133753],{},"额外标签法也称为隔墙法",[14,133755,133756],{},"使用方式：",[14,133758,133759],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[42,133761,133762],{"className":129202,"code":133668,"language":129204,"meta":47,"style":47},[49,133763,133764,133770,133780,133784,133790,133800],{"__ignoreMap":47},[52,133765,133766,133768],{"class":54,"line":55},[52,133767,133675],{"class":75},[52,133769,18220],{"class":79},[52,133771,133772,133774,133776,133778],{"class":54,"line":66},[52,133773,133682],{"class":308},[52,133775,54087],{"class":79},[52,133777,26385],{"class":308},[52,133779,80],{"class":79},[52,133781,133782],{"class":54,"line":83},[52,133783,452],{"class":79},[52,133785,133786,133788],{"class":54,"line":91},[52,133787,133697],{"class":75},[52,133789,18220],{"class":79},[52,133791,133792,133794,133796,133798],{"class":54,"line":98},[52,133793,133682],{"class":308},[52,133795,54087],{"class":79},[52,133797,75172],{"class":308},[52,133799,80],{"class":79},[52,133801,133802],{"class":54,"line":107},[52,133803,452],{"class":79},[14,133805,133806],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,133808,133809],{},"优点： 通俗易懂，书写方便",[14,133811,133812],{},"缺点： 添加许多无意义的标签，结构化较差",[14,133814,133815],{},"注意： 要求这个新的空标签必须是块级元素。",[14,133817,133818],{},"法二",[14,133820,133821],{},"父级添加overflow属性",[42,133823,133824],{"className":129202,"code":133668,"language":129204,"meta":47,"style":47},[49,133825,133826,133832,133842,133846,133852,133862],{"__ignoreMap":47},[52,133827,133828,133830],{"class":54,"line":55},[52,133829,133675],{"class":75},[52,133831,18220],{"class":79},[52,133833,133834,133836,133838,133840],{"class":54,"line":66},[52,133835,133682],{"class":308},[52,133837,54087],{"class":79},[52,133839,26385],{"class":308},[52,133841,80],{"class":79},[52,133843,133844],{"class":54,"line":83},[52,133845,452],{"class":79},[52,133847,133848,133850],{"class":54,"line":91},[52,133849,133697],{"class":75},[52,133851,18220],{"class":79},[52,133853,133854,133856,133858,133860],{"class":54,"line":98},[52,133855,133682],{"class":308},[52,133857,54087],{"class":79},[52,133859,75172],{"class":308},[52,133861,80],{"class":79},[52,133863,133864],{"class":54,"line":107},[52,133865,452],{"class":79},[14,133867,133868],{},"overflow: hidden;",[14,133870,133871],{},"优点：代码简洁",[14,133873,133874],{},"缺点：无法显示溢出的部分",[14,133876,133877],{},"注意：是给父元素添加代码",[14,133879,133880],{},"法三",[14,133882,133883],{},"父级添加after伪元素",[14,133885,133886,133889],{},[133887,133888],"after",{}," 方式是额外标签法的升级版",[14,133891,133892],{},"使用的时候复制就可以",[42,133894,133895],{"className":129202,"code":133668,"language":129204,"meta":47,"style":47},[49,133896,133897,133903,133913,133917,133923,133933],{"__ignoreMap":47},[52,133898,133899,133901],{"class":54,"line":55},[52,133900,133675],{"class":75},[52,133902,18220],{"class":79},[52,133904,133905,133907,133909,133911],{"class":54,"line":66},[52,133906,133682],{"class":308},[52,133908,54087],{"class":79},[52,133910,26385],{"class":308},[52,133912,80],{"class":79},[52,133914,133915],{"class":54,"line":83},[52,133916,452],{"class":79},[52,133918,133919,133921],{"class":54,"line":91},[52,133920,133697],{"class":75},[52,133922,18220],{"class":79},[52,133924,133925,133927,133929,133931],{"class":54,"line":98},[52,133926,133682],{"class":308},[52,133928,54087],{"class":79},[52,133930,75172],{"class":308},[52,133932,80],{"class":79},[52,133934,133935],{"class":54,"line":107},[52,133936,452],{"class":79},[14,133938,133939],{},"优点：没有增加标签，结构更简单",[14,133941,133942],{},"缺点：照顾低版本浏览器",[14,133944,133945],{},"代表网站： 百度、淘宝网、网易等",[14,133947,133948],{},"法四",[14,133950,133951],{},"父级添加双伪元素",[42,133953,133954],{"className":129202,"code":133668,"language":129204,"meta":47,"style":47},[49,133955,133956,133962,133972,133976,133982,133992],{"__ignoreMap":47},[52,133957,133958,133960],{"class":54,"line":55},[52,133959,133675],{"class":75},[52,133961,18220],{"class":79},[52,133963,133964,133966,133968,133970],{"class":54,"line":66},[52,133965,133682],{"class":308},[52,133967,54087],{"class":79},[52,133969,26385],{"class":308},[52,133971,80],{"class":79},[52,133973,133974],{"class":54,"line":83},[52,133975,452],{"class":79},[52,133977,133978,133980],{"class":54,"line":91},[52,133979,133697],{"class":75},[52,133981,18220],{"class":79},[52,133983,133984,133986,133988,133990],{"class":54,"line":98},[52,133985,133682],{"class":308},[52,133987,54087],{"class":79},[52,133989,75172],{"class":308},[52,133991,80],{"class":79},[52,133993,133994],{"class":54,"line":107},[52,133995,452],{"class":79},[14,133997,133998],{},"优点：代码更简洁",[14,134000,133942],{},[14,134002,134003],{},"代表网站：小米、腾讯等",[18,134005,134007],{"id":134006},"_93-ps切图","9.3 PS切图",[3195,134009,134011],{"id":134010},"_931-常见图片格式","9.3.1 常见图片格式",[3353,134013,134014,134024],{},[3356,134015,134016],{},[3359,134017,134018,134021],{},[3362,134019,134020],{"align":26385},"jpg图像格式",[3362,134022,134023],{"align":26385},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[3399,134025,134026,134034,134042],{},[3359,134027,134028,134031],{},[3404,134029,134030],{"align":26385},"gif图像格式",[3404,134032,134033],{"align":26385},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[3359,134035,134036,134039],{},[3404,134037,134038],{"align":26385},"png图像格式",[3404,134040,134041],{"align":26385},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[3359,134043,134044,134047],{},[3404,134045,134046],{"align":26385},"PSD图像格式",[3404,134048,134049],{"align":26385},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[3195,134051,134053],{"id":134052},"_932-图层切图","9.3.2 图层切图",[14,134055,134056],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,134058,134059],{},"按住shift选中两个图层->图层菜单->合并图层",[3195,134061,134063],{"id":134062},"_933-切片切图","9.3.3 切片切图",[29,134065,134066,134069],{},[32,134067,134068],{},"利用切片工具手动划出",[32,134070,134071],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[3195,134073,134075],{"id":134074},"_934-切图步骤","9.3.4 切图步骤",[14,134077,134078],{},"用切片工具选中：",[4509,134080],{"style":129058,"src":134081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,134083,134084],{},"文件 -> 导出",[4509,134086],{"style":129058,"src":134087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[3141,134089,134090],{},"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":47,"searchDepth":66,"depth":66,"links":134092},[134093,134102,134106],{"id":132529,"depth":66,"text":132530,"children":134094},[134095,134096,134097,134098,134099,134100,134101],{"id":132554,"depth":83,"text":132555},{"id":132845,"depth":83,"text":132846},{"id":132974,"depth":83,"text":132975},{"id":133174,"depth":83,"text":133175},{"id":133216,"depth":83,"text":133217},{"id":133254,"depth":83,"text":133255},{"id":133344,"depth":83,"text":133345},{"id":133624,"depth":66,"text":133625,"children":134103},[134104,134105],{"id":133628,"depth":83,"text":133629},{"id":133635,"depth":83,"text":133636},{"id":134006,"depth":66,"text":134007,"children":134107},[134108,134109,134110,134111],{"id":134010,"depth":83,"text":134011},{"id":134052,"depth":83,"text":134053},{"id":134062,"depth":83,"text":134063},{"id":134074,"depth":83,"text":134075},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132521,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":134118,"title":134119,"body":134120,"description":26025,"extension":3153,"meta":134761,"navigation":122,"path":134762,"seo":134763,"stem":134764,"__hash__":134765},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":134121,"toc":134749},[134122,134125,134129,134155,134189,134193,134197,134200,134242,134249,134259,134267,134269,134272,134275,134278,134285,134299,134303,134306,134335,134339,134342,134356,134360,134363,134391,134395,134398,134424,134428,134433,134466,134471,134499,134503,134520,134566,134571,134615,134632,134739,134747],[10,134123,134119],{"id":134124},"_10-css规范与学成在线案例",[18,134126,134128],{"id":134127},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[1696,134130,134131,134137,134143,134149],{},[32,134132,134133,134136],{},[2389,134134,134135],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[32,134138,134139,134142],{},[2389,134140,134141],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[32,134144,134145,134148],{},[2389,134146,134147],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[32,134150,134151,134154],{},[2389,134152,134153],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[42,134156,134157],{"className":129202,"code":132566,"language":129204,"meta":47,"style":47},[49,134158,134159,134163,134169,134185],{"__ignoreMap":47},[52,134160,134161],{"class":54,"line":55},[52,134162,132573],{"class":94},[52,134164,134165,134167],{"class":54,"line":66},[52,134166,54261],{"class":53950},[52,134168,18220],{"class":79},[52,134170,134171,134173,134175,134177,134179,134181,134183],{"class":54,"line":83},[52,134172,73546],{"class":308},[52,134174,54087],{"class":79},[52,134176,629],{"class":308},[52,134178,54142],{"class":58},[52,134180,54171],{"class":308},[52,134182,132594],{"class":308},[52,134184,80],{"class":79},[52,134186,134187],{"class":54,"line":91},[52,134188,452],{"class":79},[18,134190,134192],{"id":134191},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[3195,134194,134196],{"id":134195},"_1021-header头部制作","10.2.1 header头部制作",[4509,134198],{"style":129058,"src":134199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[29,134201,134202,134209,134216,134222,134229,134236],{},[32,134203,134204,134205,134208],{},"1号是版心盒子 ",[2389,134206,134207],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[32,134210,134211,134212,134215],{},"版心盒子 里面包含 2号盒子 ",[2389,134213,134214],{},"logo"," 图标",[32,134217,134218,134219,134221],{},"版心盒子 里面包含 3号盒子 ",[2389,134220,56363],{}," 导航栏",[32,134223,134224,134225,134228],{},"版心盒子 里面包含 4号盒子 ",[2389,134226,134227],{},"search"," 搜索框",[32,134230,134231,134232,134235],{},"版心盒子 里面包含 5号盒子 ",[2389,134233,134234],{},"user"," 个人信息",[32,134237,134238,134239],{},"注意，要求里面的 ",[2389,134240,134241],{},"4个子盒子 必须都浮动",[1696,134243,134244],{},[32,134245,134246],{},[2389,134247,134248],{},"导航栏注意点:",[14,134250,134251,134252,134255,134256],{},"实际开发中， ",[2389,134253,134254],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2389,134257,134258],{},"用 li 包含链接(li+a)的做法",[29,134260,134261,134264],{},[32,134262,134263],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[32,134265,134266],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,134268,1453],{},[14,134270,134271],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,134273,134274],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,134276,134277],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[1696,134279,134280],{"start":66},[32,134281,134282],{},[2389,134283,134284],{},"4号盒子search的细节：",[29,134286,134287,134290,134293],{},[32,134288,134289],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[32,134291,134292],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[32,134294,134295,134298],{},[49,134296,134297],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[3195,134300,134302],{"id":134301},"_1022-banner制作","10.2.2 banner制作",[4509,134304],{"style":129058,"src":134305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[29,134307,134308,134315,134321,134328],{},[32,134309,134310,134311,134314],{},"1号盒子是通栏的大盒子 ",[2389,134312,134313],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[32,134316,134317,134318,134320],{},"2号盒子是版心 ",[2389,134319,3985],{}," ， 要水平居中对齐",[32,134322,134323,134324,134327],{},"3号盒子版心内，左对齐 ",[2389,134325,134326],{},"subnav"," 侧导航栏",[32,134329,134330,134331,134334],{},"4号盒子版心内，右对齐 ",[2389,134332,134333],{},"course"," 课程",[3195,134336,134338],{"id":134337},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[4509,134340],{"style":129058,"src":134341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[29,134343,134344,134347,134350,134353],{},[32,134345,134346],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[32,134348,134349],{},"1号盒子是标题 H3 左侧浮动",[32,134351,134352],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[32,134354,134355],{},"3号盒子 右浮动 mod 修改",[3195,134357,134359],{"id":134358},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[4509,134361],{"style":129058,"src":134362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[29,134364,134365,134371,134378,134385,134388],{},[32,134366,134367,134368,134370],{},"1号盒子为最大的盒子 ",[2389,134369,56364],{}," 版心水平居中对齐",[32,134372,134373,134374,134377],{},"2号盒子为上面部分 ",[2389,134375,134376],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[32,134379,134380,134381,134384],{},"3号盒子为底下部分 ",[2389,134382,134383],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[32,134386,134387],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[32,134389,134390],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[3195,134392,134394],{"id":134393},"_1025-底部模块制作","10.2.5 底部模块制作",[4509,134396],{"style":129058,"src":134397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[29,134399,134400,134407,134410,134417],{},[32,134401,134402,134403,134406],{},"1号盒子通栏大盒子 底部 ",[2389,134404,134405],{},"footer"," 给高度 底色是白色",[32,134408,134409],{},"2号盒子版心水平居中",[32,134411,134412,134413,134416],{},"3号盒子版权 ",[2389,134414,134415],{},"copyright"," 左对齐",[32,134418,134419,134420,134423],{},"4号盒子 链接组 ",[2389,134421,134422],{},"links"," 右对齐",[3195,134425,134427],{"id":134426},"_1026-代码模块","10.2.6 代码模块",[1696,134429,134430],{},[32,134431,134432],{},"html部分",[42,134434,134436],{"className":129949,"code":134435,"language":129951,"meta":47,"style":47},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[49,134437,134438],{"__ignoreMap":47},[52,134439,134440,134442,134444,134446,134448,134451,134454,134456,134459,134462,134464],{"class":54,"line":55},[52,134441,698],{"class":79},[52,134443,3451],{"class":53950},[52,134445,63707],{"class":75},[52,134447,292],{"class":79},[52,134449,134450],{"class":62},"\"https:\u002F\u002Fexample.com\"",[52,134452,134453],{"class":75}," target",[52,134455,292],{"class":79},[52,134457,134458],{"class":62},"\"_blank\"",[52,134460,134461],{"class":79},">链接文字\u003C\u002F",[52,134463,3451],{"class":53950},[52,134465,53957],{"class":79},[1696,134467,134468],{"start":66},[32,134469,134470],{},"css部分",[42,134472,134473],{"className":129949,"code":134435,"language":129951,"meta":47,"style":47},[49,134474,134475],{"__ignoreMap":47},[52,134476,134477,134479,134481,134483,134485,134487,134489,134491,134493,134495,134497],{"class":54,"line":55},[52,134478,698],{"class":79},[52,134480,3451],{"class":53950},[52,134482,63707],{"class":75},[52,134484,292],{"class":79},[52,134486,134450],{"class":62},[52,134488,134453],{"class":75},[52,134490,292],{"class":79},[52,134492,134458],{"class":62},[52,134494,134461],{"class":79},[52,134496,3451],{"class":53950},[52,134498,53957],{"class":79},[3195,134500,134502],{"id":134501},"_1027-收获","10.2.7 收获",[1696,134504,134505,134508,134511,134514,134517],{},[32,134506,134507],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[32,134509,134510],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[32,134512,134513],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[32,134515,134516],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[32,134518,134519],{},"遗忘代码",[42,134521,134523],{"className":129202,"code":134522,"language":129204,"meta":47,"style":47},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[49,134524,134525,134547,134552,134562],{"__ignoreMap":47},[52,134526,134527,134529,134531,134533,134535,134537,134539,134541,134543,134545],{"class":54,"line":55},[52,134528,54261],{"class":53950},[52,134530,15083],{"class":79},[52,134532,14],{"class":53950},[52,134534,15083],{"class":79},[52,134536,10],{"class":53950},[52,134538,15083],{"class":79},[52,134540,29],{"class":53950},[52,134542,15083],{"class":79},[52,134544,32],{"class":53950},[52,134546,18220],{"class":79},[52,134548,134549],{"class":54,"line":66},[52,134550,134551],{"class":94},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[52,134553,134554,134556,134558,134560],{"class":54,"line":83},[52,134555,130818],{"class":308},[52,134557,54087],{"class":79},[52,134559,63519],{"class":308},[52,134561,80],{"class":79},[52,134563,134564],{"class":54,"line":91},[52,134565,452],{"class":79},[1696,134567,134568],{"start":107},[32,134569,134570],{},"html引css的程序",[42,134572,134573],{"className":129202,"code":134522,"language":129204,"meta":47,"style":47},[49,134574,134575,134597,134601,134611],{"__ignoreMap":47},[52,134576,134577,134579,134581,134583,134585,134587,134589,134591,134593,134595],{"class":54,"line":55},[52,134578,54261],{"class":53950},[52,134580,15083],{"class":79},[52,134582,14],{"class":53950},[52,134584,15083],{"class":79},[52,134586,10],{"class":53950},[52,134588,15083],{"class":79},[52,134590,29],{"class":53950},[52,134592,15083],{"class":79},[52,134594,32],{"class":53950},[52,134596,18220],{"class":79},[52,134598,134599],{"class":54,"line":66},[52,134600,134551],{"class":94},[52,134602,134603,134605,134607,134609],{"class":54,"line":83},[52,134604,130818],{"class":308},[52,134606,54087],{"class":79},[52,134608,63519],{"class":308},[52,134610,80],{"class":79},[52,134612,134613],{"class":54,"line":91},[52,134614,452],{"class":79},[1696,134616,134617,134620,134623,134626,134629],{"start":113},[32,134618,134619],{},"浮动的盒子不会有外边距合并问题",[32,134621,134622],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[32,134624,134625],{},"ctrl+g快速定位行；shift+alt多个光标",[32,134627,134628],{},"学习上方各个模块的选择器起名方法，以后就这样用",[32,134630,134631],{},"在写选择器时尽量写全一些，例如",[42,134633,134635],{"className":129202,"code":134634,"language":129204,"meta":47,"style":47},"\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",[49,134636,134637,134642,134658,134663,134678,134683,134698,134703,134718,134723],{"__ignoreMap":47},[52,134638,134639],{"class":54,"line":55},[52,134640,134641],{"class":94},"\u002F* 静态定位（默认） *\u002F\n",[52,134643,134644,134647,134649,134651,134653,134656],{"class":54,"line":66},[52,134645,134646],{"class":75},".static",[52,134648,82457],{"class":79},[52,134650,131562],{"class":308},[52,134652,54087],{"class":79},[52,134654,134655],{"class":308},"static",[52,134657,132132],{"class":79},[52,134659,134660],{"class":54,"line":83},[52,134661,134662],{"class":94},"\u002F* 相对定位 *\u002F\n",[52,134664,134665,134668,134670,134672,134674,134676],{"class":54,"line":91},[52,134666,134667],{"class":75},".relative",[52,134669,82457],{"class":79},[52,134671,131562],{"class":308},[52,134673,54087],{"class":79},[52,134675,57414],{"class":308},[52,134677,132132],{"class":79},[52,134679,134680],{"class":54,"line":98},[52,134681,134682],{"class":94},"\u002F* 绝对定位 *\u002F\n",[52,134684,134685,134688,134690,134692,134694,134696],{"class":54,"line":107},[52,134686,134687],{"class":75},".absolute",[52,134689,82457],{"class":79},[52,134691,131562],{"class":308},[52,134693,54087],{"class":79},[52,134695,57481],{"class":308},[52,134697,132132],{"class":79},[52,134699,134700],{"class":54,"line":113},[52,134701,134702],{"class":94},"\u002F* 固定定位 *\u002F\n",[52,134704,134705,134708,134710,134712,134714,134716],{"class":54,"line":119},[52,134706,134707],{"class":75},".fixed",[52,134709,82457],{"class":79},[52,134711,131562],{"class":308},[52,134713,54087],{"class":79},[52,134715,88883],{"class":308},[52,134717,132132],{"class":79},[52,134719,134720],{"class":54,"line":126},[52,134721,134722],{"class":94},"\u002F* 粘性定位 *\u002F\n",[52,134724,134725,134728,134730,134732,134734,134737],{"class":54,"line":132},[52,134726,134727],{"class":75},".sticky",[52,134729,82457],{"class":79},[52,134731,131562],{"class":308},[52,134733,54087],{"class":79},[52,134735,134736],{"class":308},"sticky",[52,134738,132132],{"class":79},[1696,134740,134741,134744],{"start":144},[32,134742,134743],{},"一定要用好注释",[32,134745,134746],{},"浮动的盒子不会有外边距合并的问题",[3141,134748,134090],{},{"title":47,"searchDepth":66,"depth":66,"links":134750},[134751,134752],{"id":134127,"depth":66,"text":134128},{"id":134191,"depth":66,"text":134192,"children":134753},[134754,134755,134756,134757,134758,134759,134760],{"id":134195,"depth":83,"text":134196},{"id":134301,"depth":83,"text":134302},{"id":134337,"depth":83,"text":134338},{"id":134358,"depth":83,"text":134359},{"id":134393,"depth":83,"text":134394},{"id":134426,"depth":83,"text":134427},{"id":134501,"depth":83,"text":134502},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":134119,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":134767,"title":134768,"body":134769,"description":26025,"extension":3153,"meta":136255,"navigation":122,"path":136256,"seo":136257,"stem":136258,"__hash__":136259},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":134770,"toc":136247},[134771,134774,134778,134782,134793,134797,134814,134858,134891,134894,134911,134914,134917,134961,134965,134969,134972,134975,134979,134982,134993,135056,135097,135100,135115,135169,135177,135180,135191,135245,135271,135274,135287,135341,135373,135427,135450,135504,135507,135510,135517,135571,135592,135646,135649,135652,135737,135745,135802,135825,135829,135832,135850,135854,135873,135927,135965,135969,135972,135975,135997,136001,136009,136012,136017,136028,136031,136035,136049,136093,136096,136100,136103,136108,136134,136139,136216,136219,136223,136226,136229,136232,136235,136238,136241,136244],[10,134772,134768],{"id":134773},"_11-传统布局与定位体系",[18,134775,134777],{"id":134776},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[3195,134779,134781],{"id":134780},"_1111-普通流标准流","11.1.1 普通流（标准流）",[29,134783,134784,134787,134790],{},[32,134785,134786],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[32,134788,134789],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[32,134791,134792],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[3195,134794,134796],{"id":134795},"_1112-浮动","11.1.2 浮动",[29,134798,134799,134802,134805,134808,134811],{},[32,134800,134801],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[32,134803,134804],{},"浮动可以改变元素标签默认的排列方式",[32,134806,134807],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[32,134809,134810],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[32,134812,134813],{},"在使用行内块转换时盒子之间是有空隙的",[42,134815,134816],{"className":129202,"code":133668,"language":129204,"meta":47,"style":47},[49,134817,134818,134824,134834,134838,134844,134854],{"__ignoreMap":47},[52,134819,134820,134822],{"class":54,"line":55},[52,134821,133675],{"class":75},[52,134823,18220],{"class":79},[52,134825,134826,134828,134830,134832],{"class":54,"line":66},[52,134827,133682],{"class":308},[52,134829,54087],{"class":79},[52,134831,26385],{"class":308},[52,134833,80],{"class":79},[52,134835,134836],{"class":54,"line":83},[52,134837,452],{"class":79},[52,134839,134840,134842],{"class":54,"line":91},[52,134841,133697],{"class":75},[52,134843,18220],{"class":79},[52,134845,134846,134848,134850,134852],{"class":54,"line":98},[52,134847,133682],{"class":308},[52,134849,54087],{"class":79},[52,134851,75172],{"class":308},[52,134853,80],{"class":79},[52,134855,134856],{"class":54,"line":107},[52,134857,452],{"class":79},[3353,134859,134860,134868],{},[3356,134861,134862],{},[3359,134863,134864,134866],{},[3362,134865,129666],{"align":26385},[3362,134867,30139],{"align":26385},[3399,134869,134870,134877,134884],{},[3359,134871,134872,134874],{},[3404,134873,57387],{"align":26385},[3404,134875,134876],{"align":26385},"元素不浮动（默认值）",[3359,134878,134879,134881],{},[3404,134880,26385],{"align":26385},[3404,134882,134883],{"align":26385},"元素向左浮动",[3359,134885,134886,134888],{},[3404,134887,75172],{"align":26385},[3404,134889,134890],{"align":26385},"元素向右浮动",[14,134892,134893],{},"浮动重点：",[29,134895,134896,134899,134902,134905,134908],{},[32,134897,134898],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[32,134900,134901],{},"浮动的元素会一行内显示并且元素顶部对齐",[32,134903,134904],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[32,134906,134907],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[32,134909,134910],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,134912,134913],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,134915,134916],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[42,134918,134919],{"className":129202,"code":133668,"language":129204,"meta":47,"style":47},[49,134920,134921,134927,134937,134941,134947,134957],{"__ignoreMap":47},[52,134922,134923,134925],{"class":54,"line":55},[52,134924,133675],{"class":75},[52,134926,18220],{"class":79},[52,134928,134929,134931,134933,134935],{"class":54,"line":66},[52,134930,133682],{"class":308},[52,134932,54087],{"class":79},[52,134934,26385],{"class":308},[52,134936,80],{"class":79},[52,134938,134939],{"class":54,"line":83},[52,134940,452],{"class":79},[52,134942,134943,134945],{"class":54,"line":91},[52,134944,133697],{"class":75},[52,134946,18220],{"class":79},[52,134948,134949,134951,134953,134955],{"class":54,"line":98},[52,134950,133682],{"class":308},[52,134952,54087],{"class":79},[52,134954,75172],{"class":308},[52,134956,80],{"class":79},[52,134958,134959],{"class":54,"line":107},[52,134960,452],{"class":79},[3195,134962,134964],{"id":134963},"_1113-定位","11.1.3 定位",[24646,134966,134968],{"id":134967},"_11131-使用场景","11.1.3.1 使用场景",[14,134970,134971],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,134973,134974],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[24646,134976,134978],{"id":134977},"_11132-定位组成","11.1.3.2 定位组成",[14,134980,134981],{},"定位 = 定位模式 + 边偏移",[1696,134983,134984],{},[32,134985,134986,134989,134990],{},[2389,134987,134988],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2389,134991,134992],{},"定位模式",[42,134994,134996],{"className":129202,"code":134995,"language":129204,"meta":47,"style":47},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[49,134997,134998,135004,135018,135035,135052],{"__ignoreMap":47},[52,134999,135000,135002],{"class":54,"line":55},[52,135001,133050],{"class":75},[52,135003,18220],{"class":79},[52,135005,135006,135009,135011,135013,135015],{"class":54,"line":66},[52,135007,135008],{"class":308},"  position",[52,135010,54087],{"class":79},[52,135012,57414],{"class":308},[52,135014,133065],{"class":79},[52,135016,135017],{"class":94},"\u002F* 定位模式 *\u002F\n",[52,135019,135020,135023,135025,135027,135029,135032],{"class":54,"line":83},[52,135021,135022],{"class":308},"  top",[52,135024,54087],{"class":79},[52,135026,3649],{"class":308},[52,135028,54142],{"class":58},[52,135030,135031],{"class":79},";           ",[52,135033,135034],{"class":94},"\u002F* 边偏移：上 *\u002F\n",[52,135036,135037,135040,135042,135044,135046,135049],{"class":54,"line":91},[52,135038,135039],{"class":308},"  left",[52,135041,54087],{"class":79},[52,135043,444],{"class":308},[52,135045,54142],{"class":58},[52,135047,135048],{"class":79},";          ",[52,135050,135051],{"class":94},"\u002F* 边偏移：左 *\u002F\n",[52,135053,135054],{"class":54,"line":98},[52,135055,452],{"class":79},[3353,135057,135058,135067],{},[3356,135059,135060],{},[3359,135061,135062,135064],{},[3362,135063,3367],{"align":26385},[3362,135065,135066],{"align":26385},"语义",[3399,135068,135069,135076,135083,135090],{},[3359,135070,135071,135073],{},[3404,135072,134655],{"align":26385},[3404,135074,135075],{"align":26385},"静态定位",[3359,135077,135078,135080],{},[3404,135079,57414],{"align":26385},[3404,135081,135082],{"align":26385},"相对定位",[3359,135084,135085,135087],{},[3404,135086,57481],{"align":26385},[3404,135088,135089],{"align":26385},"绝对定位",[3359,135091,135092,135094],{},[3404,135093,88883],{"align":26385},[3404,135095,135096],{"align":26385},"固定定位",[14,135098,135099],{},"（1）静态定位：",[29,135101,135102,135113],{},[32,135103,135104,135105,135108,135109,135112],{},"静态定位是元素的 ",[2389,135106,135107],{},"默认定位方式"," ， ",[2389,135110,135111],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[32,135114,8148],{},[42,135116,135117],{"className":129202,"code":134995,"language":129204,"meta":47,"style":47},[49,135118,135119,135125,135137,135151,135165],{"__ignoreMap":47},[52,135120,135121,135123],{"class":54,"line":55},[52,135122,133050],{"class":75},[52,135124,18220],{"class":79},[52,135126,135127,135129,135131,135133,135135],{"class":54,"line":66},[52,135128,135008],{"class":308},[52,135130,54087],{"class":79},[52,135132,57414],{"class":308},[52,135134,133065],{"class":79},[52,135136,135017],{"class":94},[52,135138,135139,135141,135143,135145,135147,135149],{"class":54,"line":83},[52,135140,135022],{"class":308},[52,135142,54087],{"class":79},[52,135144,3649],{"class":308},[52,135146,54142],{"class":58},[52,135148,135031],{"class":79},[52,135150,135034],{"class":94},[52,135152,135153,135155,135157,135159,135161,135163],{"class":54,"line":91},[52,135154,135039],{"class":308},[52,135156,54087],{"class":79},[52,135158,444],{"class":308},[52,135160,54142],{"class":58},[52,135162,135048],{"class":79},[52,135164,135051],{"class":94},[52,135166,135167],{"class":54,"line":98},[52,135168,452],{"class":79},[29,135170,135171,135174],{},[32,135172,135173],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[32,135175,135176],{},"静态定位在布局时我们几乎不用的",[14,135178,135179],{},"（2）相对定位",[29,135181,135182,135189],{},[32,135183,135184,135185,135188],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2389,135186,135187],{},"原来的位置"," 来说的（自恋型）",[32,135190,8148],{},[42,135192,135193],{"className":129202,"code":134995,"language":129204,"meta":47,"style":47},[49,135194,135195,135201,135213,135227,135241],{"__ignoreMap":47},[52,135196,135197,135199],{"class":54,"line":55},[52,135198,133050],{"class":75},[52,135200,18220],{"class":79},[52,135202,135203,135205,135207,135209,135211],{"class":54,"line":66},[52,135204,135008],{"class":308},[52,135206,54087],{"class":79},[52,135208,57414],{"class":308},[52,135210,133065],{"class":79},[52,135212,135017],{"class":94},[52,135214,135215,135217,135219,135221,135223,135225],{"class":54,"line":83},[52,135216,135022],{"class":308},[52,135218,54087],{"class":79},[52,135220,3649],{"class":308},[52,135222,54142],{"class":58},[52,135224,135031],{"class":79},[52,135226,135034],{"class":94},[52,135228,135229,135231,135233,135235,135237,135239],{"class":54,"line":91},[52,135230,135039],{"class":308},[52,135232,54087],{"class":79},[52,135234,444],{"class":308},[52,135236,54142],{"class":58},[52,135238,135048],{"class":79},[52,135240,135051],{"class":94},[52,135242,135243],{"class":54,"line":98},[52,135244,452],{"class":79},[29,135246,135247],{},[32,135248,135249,135250,135252,135253,135255,135256,135259,135260,135263,135264,135266,135267,135270],{},"相对定位的特点：",[56366,135251],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[56366,135254],{},"  ② ",[2389,135257,135258],{},"原来"," 在标准流的 ",[2389,135261,135262],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[56366,135265],{},"  ③因此， ",[2389,135268,135269],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,135272,135273],{},"（3）绝对定位",[29,135275,135276,135285],{},[32,135277,135278,135280,135281,135284],{},[2389,135279,135089],{}," 是元素在移动位置的时候，是相对于它 ",[2389,135282,135283],{},"祖先元素"," 来说的（拼爹型）",[32,135286,8148],{},[42,135288,135289],{"className":129202,"code":134995,"language":129204,"meta":47,"style":47},[49,135290,135291,135297,135309,135323,135337],{"__ignoreMap":47},[52,135292,135293,135295],{"class":54,"line":55},[52,135294,133050],{"class":75},[52,135296,18220],{"class":79},[52,135298,135299,135301,135303,135305,135307],{"class":54,"line":66},[52,135300,135008],{"class":308},[52,135302,54087],{"class":79},[52,135304,57414],{"class":308},[52,135306,133065],{"class":79},[52,135308,135017],{"class":94},[52,135310,135311,135313,135315,135317,135319,135321],{"class":54,"line":83},[52,135312,135022],{"class":308},[52,135314,54087],{"class":79},[52,135316,3649],{"class":308},[52,135318,54142],{"class":58},[52,135320,135031],{"class":79},[52,135322,135034],{"class":94},[52,135324,135325,135327,135329,135331,135333,135335],{"class":54,"line":91},[52,135326,135039],{"class":308},[52,135328,54087],{"class":79},[52,135330,444],{"class":308},[52,135332,54142],{"class":58},[52,135334,135048],{"class":79},[52,135336,135051],{"class":94},[52,135338,135339],{"class":54,"line":98},[52,135340,452],{"class":79},[29,135342,135343,135358,135367,135370],{},[32,135344,135345,135346,135348,135349,135351,135352,135354,135355,135357],{},"绝对定位的特点：",[56366,135347],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[56366,135350],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[56366,135353],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[56366,135356],{},"  (4)固定定位",[32,135359,135360,135362,135363,135366],{},[2389,135361,135096],{}," 是元素 ",[2389,135364,135365],{},"固定于浏览器可视区的位置"," 。（认死理型）",[32,135368,135369],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[32,135371,135372],{},"语法:",[42,135374,135375],{"className":129202,"code":134995,"language":129204,"meta":47,"style":47},[49,135376,135377,135383,135395,135409,135423],{"__ignoreMap":47},[52,135378,135379,135381],{"class":54,"line":55},[52,135380,133050],{"class":75},[52,135382,18220],{"class":79},[52,135384,135385,135387,135389,135391,135393],{"class":54,"line":66},[52,135386,135008],{"class":308},[52,135388,54087],{"class":79},[52,135390,57414],{"class":308},[52,135392,133065],{"class":79},[52,135394,135017],{"class":94},[52,135396,135397,135399,135401,135403,135405,135407],{"class":54,"line":83},[52,135398,135022],{"class":308},[52,135400,54087],{"class":79},[52,135402,3649],{"class":308},[52,135404,54142],{"class":58},[52,135406,135031],{"class":79},[52,135408,135034],{"class":94},[52,135410,135411,135413,135415,135417,135419,135421],{"class":54,"line":91},[52,135412,135039],{"class":308},[52,135414,54087],{"class":79},[52,135416,444],{"class":308},[52,135418,54142],{"class":58},[52,135420,135048],{"class":79},[52,135422,135051],{"class":94},[52,135424,135425],{"class":54,"line":98},[52,135426,452],{"class":79},[29,135428,135429,135438],{},[32,135430,135431,135432,135434,135435,135437],{},"特点:",[56366,135433],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[56366,135436],{},"  ②固定定位不再占有原先的位置,完全脱标",[32,135439,135440,135441,135443,135444,135446,135447,135449],{},"固定在版心位置的方法:",[56366,135442],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[56366,135445],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[56366,135448],{},"  实例：",[42,135451,135452],{"className":129202,"code":134995,"language":129204,"meta":47,"style":47},[49,135453,135454,135460,135472,135486,135500],{"__ignoreMap":47},[52,135455,135456,135458],{"class":54,"line":55},[52,135457,133050],{"class":75},[52,135459,18220],{"class":79},[52,135461,135462,135464,135466,135468,135470],{"class":54,"line":66},[52,135463,135008],{"class":308},[52,135465,54087],{"class":79},[52,135467,57414],{"class":308},[52,135469,133065],{"class":79},[52,135471,135017],{"class":94},[52,135473,135474,135476,135478,135480,135482,135484],{"class":54,"line":83},[52,135475,135022],{"class":308},[52,135477,54087],{"class":79},[52,135479,3649],{"class":308},[52,135481,54142],{"class":58},[52,135483,135031],{"class":79},[52,135485,135034],{"class":94},[52,135487,135488,135490,135492,135494,135496,135498],{"class":54,"line":91},[52,135489,135039],{"class":308},[52,135491,54087],{"class":79},[52,135493,444],{"class":308},[52,135495,54142],{"class":58},[52,135497,135048],{"class":79},[52,135499,135051],{"class":94},[52,135501,135502],{"class":54,"line":98},[52,135503,452],{"class":79},[4509,135505],{"style":129058,"src":135506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,135508,135509],{},"(5)粘性定位",[29,135511,135512,135515],{},[32,135513,135514],{},"粘性定位可以被认为是相对定位和固定定位的混合",[32,135516,8148],{},[42,135518,135519],{"className":129202,"code":134995,"language":129204,"meta":47,"style":47},[49,135520,135521,135527,135539,135553,135567],{"__ignoreMap":47},[52,135522,135523,135525],{"class":54,"line":55},[52,135524,133050],{"class":75},[52,135526,18220],{"class":79},[52,135528,135529,135531,135533,135535,135537],{"class":54,"line":66},[52,135530,135008],{"class":308},[52,135532,54087],{"class":79},[52,135534,57414],{"class":308},[52,135536,133065],{"class":79},[52,135538,135017],{"class":94},[52,135540,135541,135543,135545,135547,135549,135551],{"class":54,"line":83},[52,135542,135022],{"class":308},[52,135544,54087],{"class":79},[52,135546,3649],{"class":308},[52,135548,54142],{"class":58},[52,135550,135031],{"class":79},[52,135552,135034],{"class":94},[52,135554,135555,135557,135559,135561,135563,135565],{"class":54,"line":91},[52,135556,135039],{"class":308},[52,135558,54087],{"class":79},[52,135560,444],{"class":308},[52,135562,54142],{"class":58},[52,135564,135048],{"class":79},[52,135566,135051],{"class":94},[52,135568,135569],{"class":54,"line":98},[52,135570,452],{"class":79},[29,135572,135573],{},[32,135574,135575,135576,135578,135579,135581,135582,135584,135585,135588,135589,135591],{},"粘性定位的特点：",[56366,135577],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[56366,135580],{},"  ②粘性定位占有原先的位置（相对定位特点）",[56366,135583],{},"  ③必须添加 top 、left、right、bottom ",[2389,135586,135587],{},"其中一个"," 才有效",[56366,135590],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[42,135593,135594],{"className":129202,"code":134995,"language":129204,"meta":47,"style":47},[49,135595,135596,135602,135614,135628,135642],{"__ignoreMap":47},[52,135597,135598,135600],{"class":54,"line":55},[52,135599,133050],{"class":75},[52,135601,18220],{"class":79},[52,135603,135604,135606,135608,135610,135612],{"class":54,"line":66},[52,135605,135008],{"class":308},[52,135607,54087],{"class":79},[52,135609,57414],{"class":308},[52,135611,133065],{"class":79},[52,135613,135017],{"class":94},[52,135615,135616,135618,135620,135622,135624,135626],{"class":54,"line":83},[52,135617,135022],{"class":308},[52,135619,54087],{"class":79},[52,135621,3649],{"class":308},[52,135623,54142],{"class":58},[52,135625,135031],{"class":79},[52,135627,135034],{"class":94},[52,135629,135630,135632,135634,135636,135638,135640],{"class":54,"line":91},[52,135631,135039],{"class":308},[52,135633,54087],{"class":79},[52,135635,444],{"class":308},[52,135637,54142],{"class":58},[52,135639,135048],{"class":79},[52,135641,135051],{"class":94},[52,135643,135644],{"class":54,"line":98},[52,135645,452],{"class":79},[4509,135647],{"style":129058,"src":135648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,135650,135651],{},"(6)总结",[3353,135653,135654,135669],{},[3356,135655,135656],{},[3359,135657,135658,135660,135663,135666],{},[3362,135659,134992],{"align":26385},[3362,135661,135662],{"align":26385},"是否脱标",[3362,135664,135665],{"align":26385},"移动位置",[3362,135667,135668],{"align":26385},"是否常用",[3399,135670,135671,135684,135698,135712,135725],{},[3359,135672,135673,135676,135678,135681],{},[3404,135674,135675],{"align":26385},"Static 静态定位",[3404,135677,107328],{"align":26385},[3404,135679,135680],{"align":26385},"不能使用边偏移",[3404,135682,135683],{"align":26385},"很少",[3359,135685,135686,135689,135692,135695],{},[3404,135687,135688],{"align":26385},"Relative 相对定位",[3404,135690,135691],{"align":26385},"否(占有位置)",[3404,135693,135694],{"align":26385},"相对于自身位置移动",[3404,135696,135697],{"align":26385},"基本单独使用",[3359,135699,135700,135703,135706,135709],{},[3404,135701,135702],{"align":26385},"Absolute 绝对定位",[3404,135704,135705],{"align":26385},"是(不占有位置)",[3404,135707,135708],{"align":26385},"带有定位的父级",[3404,135710,135711],{"align":26385},"要和定位父级元素搭配使用",[3359,135713,135714,135717,135719,135722],{},[3404,135715,135716],{"align":26385},"Fixed 固定定位",[3404,135718,135705],{"align":26385},[3404,135720,135721],{"align":26385},"浏览器可视区",[3404,135723,135724],{"align":26385},"单独使用,不需要父级",[3359,135726,135727,135730,135732,135734],{},[3404,135728,135729],{"align":26385},"Sticky 粘性定位",[3404,135731,135691],{"align":26385},[3404,135733,135721],{"align":26385},[3404,135735,135736],{"align":26385},"当前阶段少",[1696,135738,135739],{"start":66},[32,135740,135741,135744],{},[2389,135742,135743],{},"边偏移"," 则决定了该元素的最终位置",[3353,135746,135747,135758],{},[3356,135748,135749],{},[3359,135750,135751,135754,135756],{},[3362,135752,135753],{"align":26385},"边偏移属性",[3362,135755,30142],{"align":26385},[3362,135757,30139],{"align":26385},[3399,135759,135760,135771,135782,135792],{},[3359,135761,135762,135765,135768],{},[3404,135763,135764],{"align":26385},"top",[3404,135766,135767],{"align":26385},"top: 80px;",[3404,135769,135770],{"align":26385},"顶端偏移量，定义元素相对于父元素上边线的距离",[3359,135772,135773,135776,135779],{},[3404,135774,135775],{"align":26385},"bottom",[3404,135777,135778],{"align":26385},"bottom: 80px ;",[3404,135780,135781],{"align":26385},"底部偏移量，定义元素相对于其父元素下边线的距离",[3359,135783,135784,135786,135789],{},[3404,135785,26385],{"align":26385},[3404,135787,135788],{"align":26385},"left: 80px ;",[3404,135790,135791],{"align":26385},"左侧偏移量，定义元素相对于其父元素左边线的距离",[3359,135793,135794,135796,135799],{},[3404,135795,75172],{"align":26385},[3404,135797,135798],{"align":26385},"right: 80px ;",[3404,135800,135801],{"align":26385},"右侧偏移量，定义元素相对于其父元素右边线的距离",[29,135803,135804],{},[32,135805,1453,135806,135808,135809,135811,135812,135814,135815,135818,135819,135821,135822,135824],{},[56366,135807],{},"  ① ",[2389,135810,135743],{}," 需要和 ",[2389,135813,134992],{}," 联合使用， ",[2389,135816,135817],{},"单独使用无效"," ；",[56366,135820],{},"  ②top和bottom不要同时使用",[56366,135823],{},"  ③left和right不要同时使用",[24646,135826,135828],{"id":135827},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,135830,135831],{},"子级是绝对定位的话，父级要用相对定位",[29,135833,135834,135837,135840,135843],{},[32,135835,135836],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[32,135838,135839],{},"父盒子需要加定位限制子盒子在父盒子内显示",[32,135841,135842],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[32,135844,135845,135846,135849],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2389,135847,135848],{},"子绝父绝"," 也会遇到",[24646,135851,135853],{"id":135852},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[29,135855,135856,135871],{},[32,135857,135858,135859,135862,135863,135866,135867,135870],{},"在使用 ",[2389,135860,135861],{},"定位"," 布局时，可能会 ",[2389,135864,135865],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2389,135868,135869],{},"z-index"," 来控制盒子的前后次序 (z轴)",[32,135872,8148],{},[42,135874,135875],{"className":129202,"code":134995,"language":129204,"meta":47,"style":47},[49,135876,135877,135883,135895,135909,135923],{"__ignoreMap":47},[52,135878,135879,135881],{"class":54,"line":55},[52,135880,133050],{"class":75},[52,135882,18220],{"class":79},[52,135884,135885,135887,135889,135891,135893],{"class":54,"line":66},[52,135886,135008],{"class":308},[52,135888,54087],{"class":79},[52,135890,57414],{"class":308},[52,135892,133065],{"class":79},[52,135894,135017],{"class":94},[52,135896,135897,135899,135901,135903,135905,135907],{"class":54,"line":83},[52,135898,135022],{"class":308},[52,135900,54087],{"class":79},[52,135902,3649],{"class":308},[52,135904,54142],{"class":58},[52,135906,135031],{"class":79},[52,135908,135034],{"class":94},[52,135910,135911,135913,135915,135917,135919,135921],{"class":54,"line":91},[52,135912,135039],{"class":308},[52,135914,54087],{"class":79},[52,135916,444],{"class":308},[52,135918,54142],{"class":58},[52,135920,135048],{"class":79},[52,135922,135051],{"class":94},[52,135924,135925],{"class":54,"line":98},[52,135926,452],{"class":79},[29,135928,135929],{},[32,135930,135931,135932,135808,135934,135936,135937,130365,135940,85189,135943,135945,135946,135948,135949,135952,135953,135818,135956,135958,135959,135962,135964],{},"z-index的特性",[56366,135933],{},[2389,135935,129666],{}," ： ",[2389,135938,135939],{},"正整数",[2389,135941,135942],{},"负整数",[2389,135944,692],{}," ，默认值是 0，数值越大，盒子越靠上；",[56366,135947],{},"  ②如果 ",[2389,135950,135951],{},"属性值相同"," ，则按照书写顺序， ",[2389,135954,135955],{},"后来居上",[56366,135957],{},"  ③数字后面 ",[2389,135960,135961],{},"不能加单位",[56366,135963],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[24646,135966,135968],{"id":135967},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,135970,135971],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,135973,135974],{},"方法:",[29,135976,135977,135987],{},[32,135978,135979,135980,135983,135984],{},"left: 50%; 让 ",[2389,135981,135982],{},"盒子的左侧"," 移动到 ",[2389,135985,135986],{},"父级元素的水平中心位置",[32,135988,135989,135990,135993,135994],{},"margin-left: -100px; 让盒子 ",[2389,135991,135992],{},"向左"," 移动 ",[2389,135995,135996],{},"自身宽度的一半",[24646,135998,136000],{"id":135999},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[1696,136002,136003,136006],{},[32,136004,136005],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[32,136007,136008],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,136010,136011],{},"也就是说绝对定位和固定定位和浮动类似",[1696,136013,136014],{"start":83},[32,136015,136016],{},"display 是显示模式， 可以改变显示模式有以下方式:",[29,136018,136019,136022,136025],{},[32,136020,136021],{},"可以用inline-block 转换为行内块",[32,136023,136024],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[32,136026,136027],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,136029,136030],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[24646,136032,136034],{"id":136033},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[1696,136036,136037,136040,136043,136046],{},[32,136038,136039],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[32,136041,136042],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[32,136044,136045],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[32,136047,136048],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[42,136050,136051],{"className":129202,"code":133668,"language":129204,"meta":47,"style":47},[49,136052,136053,136059,136069,136073,136079,136089],{"__ignoreMap":47},[52,136054,136055,136057],{"class":54,"line":55},[52,136056,133675],{"class":75},[52,136058,18220],{"class":79},[52,136060,136061,136063,136065,136067],{"class":54,"line":66},[52,136062,133682],{"class":308},[52,136064,54087],{"class":79},[52,136066,26385],{"class":308},[52,136068,80],{"class":79},[52,136070,136071],{"class":54,"line":83},[52,136072,452],{"class":79},[52,136074,136075,136077],{"class":54,"line":91},[52,136076,133697],{"class":75},[52,136078,18220],{"class":79},[52,136080,136081,136083,136085,136087],{"class":54,"line":98},[52,136082,133682],{"class":308},[52,136084,54087],{"class":79},[52,136086,75172],{"class":308},[52,136088,80],{"class":79},[52,136090,136091],{"class":54,"line":107},[52,136092,452],{"class":79},[4509,136094],{"style":129058,"src":136095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[24646,136097,136099],{"id":136098},"_11138-轮播图","11.1.3.8 轮播图",[4509,136101],{"style":129058,"src":136102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[1696,136104,136105],{},[32,136106,136107],{},"制作顺序:",[29,136109,136110,136113,136116,136125],{},[32,136111,136112],{},"大盒子我们类名为： tb-promo 淘宝广告",[32,136114,136115],{},"里面先放一张图片",[32,136117,136118,136119,136121,136122,136124],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[56366,136120],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[56366,136123],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[32,136126,136127,136128,136130,136131,136133],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[56366,136129],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[56366,136132],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[1696,136135,136136],{"start":66},[32,136137,136138],{},"代码模块",[42,136140,136142],{"className":129202,"code":136141,"language":129204,"meta":47,"style":47},"\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",[49,136143,136144,136149,136156,136166,136176,136186,136190,136195,136202,136212],{"__ignoreMap":47},[52,136145,136146],{"class":54,"line":55},[52,136147,136148],{"class":94},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[52,136150,136151,136154],{"class":54,"line":66},[52,136152,136153],{"class":75},".son",[52,136155,18220],{"class":79},[52,136157,136158,136160,136162,136164],{"class":54,"line":83},[52,136159,135008],{"class":308},[52,136161,54087],{"class":79},[52,136163,57481],{"class":308},[52,136165,80],{"class":79},[52,136167,136168,136170,136172,136174],{"class":54,"line":91},[52,136169,135022],{"class":308},[52,136171,54087],{"class":79},[52,136173,692],{"class":308},[52,136175,80],{"class":79},[52,136177,136178,136180,136182,136184],{"class":54,"line":98},[52,136179,135039],{"class":308},[52,136181,54087],{"class":79},[52,136183,692],{"class":308},[52,136185,80],{"class":79},[52,136187,136188],{"class":54,"line":107},[52,136189,452],{"class":79},[52,136191,136192],{"class":54,"line":113},[52,136193,136194],{"class":94},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[52,136196,136197,136200],{"class":54,"line":119},[52,136198,136199],{"class":75},".father",[52,136201,18220],{"class":79},[52,136203,136204,136206,136208,136210],{"class":54,"line":126},[52,136205,135008],{"class":308},[52,136207,54087],{"class":79},[52,136209,57414],{"class":308},[52,136211,80],{"class":79},[52,136213,136214],{"class":54,"line":132},[52,136215,452],{"class":79},[14,136217,136218],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[3195,136220,136222],{"id":136221},"_1114-定位数值的移动","11.1.4 定位数值的移动",[4509,136224],{"style":129058,"src":136225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,136227,136228],{},"✨ 黄金口诀：",[14,136230,136231],{},"\"TOP正下负上，LEFT正右负左\"",[14,136233,136234],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,136236,136237],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,136239,136240],{},"✨ 简单记：",[14,136242,136243],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[3141,136245,136246],{},"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":47,"searchDepth":66,"depth":66,"links":136248},[136249],{"id":134776,"depth":66,"text":134777,"children":136250},[136251,136252,136253,136254],{"id":134780,"depth":83,"text":134781},{"id":134795,"depth":83,"text":134796},{"id":134963,"depth":83,"text":134964},{"id":136221,"depth":83,"text":136222},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":134768,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":136261,"title":136262,"body":136263,"description":26025,"extension":3153,"meta":137686,"navigation":122,"path":137687,"seo":137688,"stem":137689,"__hash__":137690},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":136264,"toc":137665},[136265,136268,136272,136280,136284,136289,136297,136309,136313,136318,136326,136337,136341,136346,136387,136395,136399,136402,136405,136408,136502,136505,136599,136602,136696,136699,136702,136737,136740,136743,136773,136776,136779,136782,136785,136788,136791,136794,136864,136867,136871,136875,136916,136920,136926,136929,136932,136936,136939,136942,136945,137026,137029,137032,137036,137040,137043,137046,137049,137052,137055,137061,137070,137074,137093,137097,137107,137110,137113,137116,137119,137122,137125,137128,137131,137140,137144,137153,137156,137161,137214,137219,137385,137388,137391,137396,137399,137402,137405,137408,137413,137561,137564,137567,137572,137575,137580,137614,137617,137620,137624,137627,137634,137637,137640,137643,137646,137649,137652,137655,137659,137662],[10,136266,136262],{"id":136267},"_12-显示隐藏与图形资源",[18,136269,136271],{"id":136270},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[29,136273,136274,136277],{},[32,136275,136276],{},"目的:让一个元素在页面中消失或者显示出来",[32,136278,136279],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[3195,136281,136283],{"id":136282},"_1211-display-显示","12.1.1 display 显示",[1696,136285,136286],{},[32,136287,136288],{},"display 设置或检索对象是否及如何显示",[29,136290,136291,136294],{},[32,136292,136293],{},"display: none;隐藏对象",[32,136295,136296],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[1696,136298,136299,136306],{"start":66},[32,136300,136301,136302,136305],{},"特点： display 隐藏元素后， ",[2389,136303,136304],{},"不再占"," 有原来的位置",[32,136307,136308],{},"在js中使用非常的广泛",[3195,136310,136312],{"id":136311},"_1212-visibility可见性","12.1.2 visibility可见性",[1696,136314,136315],{},[32,136316,136317],{},"visibility 属性用于指定一个元素应可见还是隐藏",[29,136319,136320,136323],{},[32,136321,136322],{},"visibility： visible；元素可见",[32,136324,136325],{},"visibility：hidden；元素隐藏",[1696,136327,136328,136331,136334],{"start":66},[32,136329,136330],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[32,136332,136333],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[32,136335,136336],{},"隐藏后继续占有原有位置",[3195,136338,136340],{"id":136339},"_1213-overflow溢出","12.1.3 overflow溢出",[29,136342,136343],{},[32,136344,136345],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[3353,136347,136348,136356],{},[3356,136349,136350],{},[3359,136351,136352,136354],{},[3362,136353,129666],{"align":26385},[3362,136355,30139],{"align":26385},[3399,136357,136358,136366,136373,136380],{},[3359,136359,136360,136363],{},[3404,136361,136362],{"align":26385},"visible",[3404,136364,136365],{"align":26385},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[3359,136367,136368,136370],{},[3404,136369,64364],{"align":26385},[3404,136371,136372],{"align":26385},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[3359,136374,136375,136377],{},[3404,136376,131622],{"align":26385},[3404,136378,136379],{"align":26385},"不管超出内容否，总是显示滚动条",[3359,136381,136382,136384],{},[3404,136383,75313],{"align":26385},[3404,136385,136386],{"align":26385},"超出自动显示滚动条，不超出不显示滚动条",[29,136388,136389,136392],{},[32,136390,136391],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[32,136393,136394],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[3195,136396,136398],{"id":136397},"_1214-案例收获","12.1.4 案例收获",[4509,136400],{"style":129058,"src":136401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,136403,136404],{},"问题：没做出来动态效果，使用hover没实现",[14,136406,136407],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[42,136409,136410],{"className":129202,"code":134634,"language":129204,"meta":47,"style":47},[49,136411,136412,136416,136430,136434,136448,136452,136466,136470,136484,136488],{"__ignoreMap":47},[52,136413,136414],{"class":54,"line":55},[52,136415,134641],{"class":94},[52,136417,136418,136420,136422,136424,136426,136428],{"class":54,"line":66},[52,136419,134646],{"class":75},[52,136421,82457],{"class":79},[52,136423,131562],{"class":308},[52,136425,54087],{"class":79},[52,136427,134655],{"class":308},[52,136429,132132],{"class":79},[52,136431,136432],{"class":54,"line":83},[52,136433,134662],{"class":94},[52,136435,136436,136438,136440,136442,136444,136446],{"class":54,"line":91},[52,136437,134667],{"class":75},[52,136439,82457],{"class":79},[52,136441,131562],{"class":308},[52,136443,54087],{"class":79},[52,136445,57414],{"class":308},[52,136447,132132],{"class":79},[52,136449,136450],{"class":54,"line":98},[52,136451,134682],{"class":94},[52,136453,136454,136456,136458,136460,136462,136464],{"class":54,"line":107},[52,136455,134687],{"class":75},[52,136457,82457],{"class":79},[52,136459,131562],{"class":308},[52,136461,54087],{"class":79},[52,136463,57481],{"class":308},[52,136465,132132],{"class":79},[52,136467,136468],{"class":54,"line":113},[52,136469,134702],{"class":94},[52,136471,136472,136474,136476,136478,136480,136482],{"class":54,"line":119},[52,136473,134707],{"class":75},[52,136475,82457],{"class":79},[52,136477,131562],{"class":308},[52,136479,54087],{"class":79},[52,136481,88883],{"class":308},[52,136483,132132],{"class":79},[52,136485,136486],{"class":54,"line":126},[52,136487,134722],{"class":94},[52,136489,136490,136492,136494,136496,136498,136500],{"class":54,"line":132},[52,136491,134727],{"class":75},[52,136493,82457],{"class":79},[52,136495,131562],{"class":308},[52,136497,54087],{"class":79},[52,136499,134736],{"class":308},[52,136501,132132],{"class":79},[14,136503,136504],{},"完整代码：",[42,136506,136507],{"className":129202,"code":134634,"language":129204,"meta":47,"style":47},[49,136508,136509,136513,136527,136531,136545,136549,136563,136567,136581,136585],{"__ignoreMap":47},[52,136510,136511],{"class":54,"line":55},[52,136512,134641],{"class":94},[52,136514,136515,136517,136519,136521,136523,136525],{"class":54,"line":66},[52,136516,134646],{"class":75},[52,136518,82457],{"class":79},[52,136520,131562],{"class":308},[52,136522,54087],{"class":79},[52,136524,134655],{"class":308},[52,136526,132132],{"class":79},[52,136528,136529],{"class":54,"line":83},[52,136530,134662],{"class":94},[52,136532,136533,136535,136537,136539,136541,136543],{"class":54,"line":91},[52,136534,134667],{"class":75},[52,136536,82457],{"class":79},[52,136538,131562],{"class":308},[52,136540,54087],{"class":79},[52,136542,57414],{"class":308},[52,136544,132132],{"class":79},[52,136546,136547],{"class":54,"line":98},[52,136548,134682],{"class":94},[52,136550,136551,136553,136555,136557,136559,136561],{"class":54,"line":107},[52,136552,134687],{"class":75},[52,136554,82457],{"class":79},[52,136556,131562],{"class":308},[52,136558,54087],{"class":79},[52,136560,57481],{"class":308},[52,136562,132132],{"class":79},[52,136564,136565],{"class":54,"line":113},[52,136566,134702],{"class":94},[52,136568,136569,136571,136573,136575,136577,136579],{"class":54,"line":119},[52,136570,134707],{"class":75},[52,136572,82457],{"class":79},[52,136574,131562],{"class":308},[52,136576,54087],{"class":79},[52,136578,88883],{"class":308},[52,136580,132132],{"class":79},[52,136582,136583],{"class":54,"line":126},[52,136584,134722],{"class":94},[52,136586,136587,136589,136591,136593,136595,136597],{"class":54,"line":132},[52,136588,134727],{"class":75},[52,136590,82457],{"class":79},[52,136592,131562],{"class":308},[52,136594,54087],{"class":79},[52,136596,134736],{"class":308},[52,136598,132132],{"class":79},[14,136600,136601],{},"分布思路重点详解：",[42,136603,136604],{"className":129202,"code":134634,"language":129204,"meta":47,"style":47},[49,136605,136606,136610,136624,136628,136642,136646,136660,136664,136678,136682],{"__ignoreMap":47},[52,136607,136608],{"class":54,"line":55},[52,136609,134641],{"class":94},[52,136611,136612,136614,136616,136618,136620,136622],{"class":54,"line":66},[52,136613,134646],{"class":75},[52,136615,82457],{"class":79},[52,136617,131562],{"class":308},[52,136619,54087],{"class":79},[52,136621,134655],{"class":308},[52,136623,132132],{"class":79},[52,136625,136626],{"class":54,"line":83},[52,136627,134662],{"class":94},[52,136629,136630,136632,136634,136636,136638,136640],{"class":54,"line":91},[52,136631,134667],{"class":75},[52,136633,82457],{"class":79},[52,136635,131562],{"class":308},[52,136637,54087],{"class":79},[52,136639,57414],{"class":308},[52,136641,132132],{"class":79},[52,136643,136644],{"class":54,"line":98},[52,136645,134682],{"class":94},[52,136647,136648,136650,136652,136654,136656,136658],{"class":54,"line":107},[52,136649,134687],{"class":75},[52,136651,82457],{"class":79},[52,136653,131562],{"class":308},[52,136655,54087],{"class":79},[52,136657,57481],{"class":308},[52,136659,132132],{"class":79},[52,136661,136662],{"class":54,"line":113},[52,136663,134702],{"class":94},[52,136665,136666,136668,136670,136672,136674,136676],{"class":54,"line":119},[52,136667,134707],{"class":75},[52,136669,82457],{"class":79},[52,136671,131562],{"class":308},[52,136673,54087],{"class":79},[52,136675,88883],{"class":308},[52,136677,132132],{"class":79},[52,136679,136680],{"class":54,"line":126},[52,136681,134722],{"class":94},[52,136683,136684,136686,136688,136690,136692,136694],{"class":54,"line":132},[52,136685,134727],{"class":75},[52,136687,82457],{"class":79},[52,136689,131562],{"class":308},[52,136691,54087],{"class":79},[52,136693,134736],{"class":308},[52,136695,132132],{"class":79},[4509,136697],{"style":129058,"src":136698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,136700,136701],{},"图片太大，盒子太小，此时需要修改图片的大小",[42,136703,136705],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[49,136706,136707],{"__ignoreMap":47},[52,136708,136709,136711,136713,136715,136717,136720,136722,136724,136727,136730,136732,136735],{"class":54,"line":55},[52,136710,698],{"class":79},[52,136712,4509],{"class":53950},[52,136714,57889],{"class":75},[52,136716,292],{"class":79},[52,136718,136719],{"class":62},"\"images\u002Fpic.jpg\"",[52,136721,57897],{"class":75},[52,136723,292],{"class":79},[52,136725,136726],{"class":62},"\"描述文字\"",[52,136728,136729],{"class":75}," title",[52,136731,292],{"class":79},[52,136733,136734],{"class":62},"\"悬停提示\"",[52,136736,53957],{"class":79},[4509,136738],{"style":129058,"src":136739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,136741,136742],{},"制造遮罩层",[42,136744,136745],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,136746,136747],{"__ignoreMap":47},[52,136748,136749,136751,136753,136755,136757,136759,136761,136763,136765,136767,136769,136771],{"class":54,"line":55},[52,136750,698],{"class":79},[52,136752,4509],{"class":53950},[52,136754,57889],{"class":75},[52,136756,292],{"class":79},[52,136758,136719],{"class":62},[52,136760,57897],{"class":75},[52,136762,292],{"class":79},[52,136764,136726],{"class":62},[52,136766,136729],{"class":75},[52,136768,292],{"class":79},[52,136770,136734],{"class":62},[52,136772,53957],{"class":79},[14,136774,136775],{},"此时是这样的为标准流",[4509,136777],{"style":129058,"src":136778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,136780,136781],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,136783,136784],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,136786,136787],{},"让他在中间，用center(background-position)",[14,136789,136790],{},"将需要变的尽可能放到一个盒子中",[14,136792,136793],{},"放大盒子上内部盒子发生变化",[42,136795,136797],{"className":129202,"code":136796,"language":129204,"meta":47,"style":47},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[49,136798,136799,136805,136815,136819,136826,136836,136848,136860],{"__ignoreMap":47},[52,136800,136801,136803],{"class":54,"line":55},[52,136802,130269],{"class":75},[52,136804,18220],{"class":79},[52,136806,136807,136809,136811,136813],{"class":54,"line":66},[52,136808,135008],{"class":308},[52,136810,54087],{"class":79},[52,136812,57414],{"class":308},[52,136814,80],{"class":79},[52,136816,136817],{"class":54,"line":83},[52,136818,452],{"class":79},[52,136820,136821,136824],{"class":54,"line":91},[52,136822,136823],{"class":75},".child",[52,136825,18220],{"class":79},[52,136827,136828,136830,136832,136834],{"class":54,"line":98},[52,136829,135008],{"class":308},[52,136831,54087],{"class":79},[52,136833,57481],{"class":308},[52,136835,80],{"class":79},[52,136837,136838,136840,136842,136844,136846],{"class":54,"line":107},[52,136839,135022],{"class":308},[52,136841,54087],{"class":79},[52,136843,3852],{"class":308},[52,136845,1998],{"class":58},[52,136847,80],{"class":79},[52,136849,136850,136852,136854,136856,136858],{"class":54,"line":113},[52,136851,135039],{"class":308},[52,136853,54087],{"class":79},[52,136855,3852],{"class":308},[52,136857,1998],{"class":58},[52,136859,80],{"class":79},[52,136861,136862],{"class":54,"line":119},[52,136863,452],{"class":79},[14,136865,136866],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[18,136868,136870],{"id":136869},"_122-精灵图","12.2 精灵图",[3195,136872,136874],{"id":136873},"_1221-理解","12.2.1 理解",[1696,136876,136877,136895],{},[32,136878,136879,136880,135108,136883,136886,136887,136890,136891,136894],{},"目的： ",[2389,136881,136882],{},"为了有效地减少服务器接收和发送请求的次数",[2389,136884,136885],{},"提高"," 页面的 ",[2389,136888,136889],{},"加载速度"," ，出现了 ",[2389,136892,136893],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[32,136896,136897,136898,136900,136901,136903,136904,136906,136907,136909,136910,136912,136913,136915],{},"使用精灵图核心：",[56366,136899],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[56366,136902],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[56366,136905],{},"  ③移动背景图片位置， 此时可以使用 background-position",[56366,136908],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[56366,136911],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[56366,136914],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[3195,136917,136919],{"id":136918},"_1222-扒图","12.2.2 扒图",[42,136921,136924],{"className":136922,"code":136923,"language":8154},[8152],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[49,136925,136923],{"__ignoreMap":47},[4509,136927],{"style":129058,"src":136928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[4509,136930],{"style":129058,"src":136931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[3195,136933,136935],{"id":136934},"_1223-精灵图的实现","12.2.3 精灵图的实现",[4509,136937],{"style":129058,"src":136938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,136940,136941],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[4509,136943],{"style":129058,"src":136944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[42,136946,136948],{"className":129202,"code":136947,"language":129204,"meta":47,"style":47},"\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",[49,136949,136950,136955,136962,136974,136986,137005,137022],{"__ignoreMap":47},[52,136951,136952],{"class":54,"line":55},[52,136953,136954],{"class":94},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[52,136956,136957,136960],{"class":54,"line":66},[52,136958,136959],{"class":75},".icon",[52,136961,18220],{"class":79},[52,136963,136964,136966,136968,136970,136972],{"class":54,"line":83},[52,136965,73218],{"class":308},[52,136967,54087],{"class":79},[52,136969,444],{"class":308},[52,136971,54142],{"class":58},[52,136973,80],{"class":79},[52,136975,136976,136978,136980,136982,136984],{"class":54,"line":91},[52,136977,73438],{"class":308},[52,136979,54087],{"class":79},[52,136981,444],{"class":308},[52,136983,54142],{"class":58},[52,136985,80],{"class":79},[52,136987,136988,136990,136992,136994,136996,136999,137001,137003],{"class":54,"line":98},[52,136989,73261],{"class":308},[52,136991,54087],{"class":79},[52,136993,64376],{"class":308},[52,136995,1216],{"class":79},[52,136997,136998],{"class":1223},"sprites.png",[52,137000,16362],{"class":79},[52,137002,64386],{"class":308},[52,137004,80],{"class":79},[52,137006,137007,137009,137011,137013,137015,137018,137020],{"class":54,"line":107},[52,137008,131462],{"class":308},[52,137010,54087],{"class":79},[52,137012,54413],{"class":308},[52,137014,54142],{"class":58},[52,137016,137017],{"class":308}," -20",[52,137019,54142],{"class":58},[52,137021,80],{"class":79},[52,137023,137024],{"class":54,"line":113},[52,137025,452],{"class":79},[4509,137027],{"style":129058,"src":137028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,137030,137031],{},"在前端中坐标轴的正方向是右和下",[18,137033,137035],{"id":137034},"_123-字体图标","12.3 字体图标",[3195,137037,137039],{"id":137038},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,137041,137042],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,137044,137045],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,137047,137048],{},"1.图片文件还是比较大的。",[14,137050,137051],{},"2.图片本身放大和缩小会失真。",[14,137053,137054],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,137056,137057,137058,28390],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2389,137059,137060],{},"字体图标 iconfont",[14,137062,137063,137066,137067,31035],{},[2389,137064,137065],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2389,137068,137069],{},"展示的是图标，本质属于字体",[3195,137071,137073],{"id":137072},"_1232-字体图标的优点","12.3.2 字体图标的优点",[29,137075,137076,137081,137084,137087,137090],{},[32,137077,137078,137080],{},[2389,137079,28526],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[32,137082,137083],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[32,137085,137086],{},"兼容性：几乎支持所有的浏览器，请放心使用",[32,137088,137089],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[32,137091,137092],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[3195,137094,137096],{"id":137095},"_1233-字体库下载网站","12.3.3 字体库下载网站",[29,137098,137099],{},[32,137100,137101,137102],{},"icomoon字体库：",[3451,137103,137106],{"href":137104,"rel":137105},"http:\u002F\u002Ficomoon.io\u002F",[26514],"http:\u002F\u002Ficomoon.io",[14,137108,137109],{},"进去之后点icomoon app",[4509,137111],{"style":129058,"src":137112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,137114,137115],{},"可以对其编辑：",[4509,137117],{"style":129058,"src":137118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,137120,137121],{},"生成字体：",[4509,137123],{"style":129058,"src":137124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,137126,137127],{},"下载：",[4509,137129],{"style":129058,"src":137130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[29,137132,137133],{},[32,137134,137135,137136],{},"阿里iconfont字体库： ",[3451,137137,137138],{"href":137138,"rel":137139},"http:\u002F\u002Fwww.iconfont.cn\u002F",[26514],[3195,137141,137143],{"id":137142},"_1234-字体图标的引入","12.3.4 字体图标的引入",[1696,137145,137146],{},[32,137147,137148,137149,137152],{},"把下载包里面的 ",[2389,137150,137151],{},"fonts"," 文件夹放入页面根目录下",[4509,137154],{"style":129058,"src":137155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[1696,137157,137158],{"start":66},[32,137159,137160],{},"字体文件格式",[3353,137162,137163,137172],{},[3356,137164,137165],{},[3359,137166,137167,137170],{},[3362,137168,137169],{"align":26385},"格式",[3362,137171,26389],{"align":26385},[3399,137173,137174,137184,137194,137204],{},[3359,137175,137176,137181],{},[3404,137177,137178],{"align":26385},[2389,137179,137180],{},".ttf",[3404,137182,137183],{"align":26385},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[3359,137185,137186,137191],{},[3404,137187,137188],{"align":26385},[2389,137189,137190],{},".woff",[3404,137192,137193],{"align":26385},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[3359,137195,137196,137201],{},[3404,137197,137198],{"align":26385},[2389,137199,137200],{},".eot",[3404,137202,137203],{"align":26385},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[3359,137205,137206,137211],{},[3404,137207,137208],{"align":26385},[2389,137209,137210],{},"svg",[3404,137212,137213],{"align":26385},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[1696,137215,137216],{"start":83},[32,137217,137218],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[42,137220,137222],{"className":129202,"code":137221,"language":129204,"meta":47,"style":47},"\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",[49,137223,137224,137229,137236,137248,137264,137289,137310,137330,137350,137354,137360,137370,137381],{"__ignoreMap":47},[52,137225,137226],{"class":54,"line":55},[52,137227,137228],{"class":94},"\u002F* 引入字体图标 *\u002F\n",[52,137230,137231,137234],{"class":54,"line":66},[52,137232,137233],{"class":58},"@font-face",[52,137235,18220],{"class":79},[52,137237,137238,137241,137243,137246],{"class":54,"line":83},[52,137239,137240],{"class":308},"  font-family",[52,137242,54087],{"class":79},[52,137244,137245],{"class":62},"'icomoon'",[52,137247,80],{"class":79},[52,137249,137250,137253,137255,137257,137259,137262],{"class":54,"line":91},[52,137251,137252],{"class":308},"  src",[52,137254,54087],{"class":79},[52,137256,64376],{"class":308},[52,137258,1216],{"class":79},[52,137260,137261],{"class":62},"'fonts\u002Ficomoon.eot'",[52,137263,2737],{"class":79},[52,137265,137266,137268,137270,137272,137274,137277,137279,137282,137284,137287],{"class":54,"line":98},[52,137267,137252],{"class":308},[52,137269,54087],{"class":79},[52,137271,64376],{"class":308},[52,137273,1216],{"class":79},[52,137275,137276],{"class":62},"'fonts\u002Ficomoon.eot?#iefix'",[52,137278,16362],{"class":79},[52,137280,137281],{"class":308},"format",[52,137283,1216],{"class":79},[52,137285,137286],{"class":62},"'embedded-opentype'",[52,137288,40697],{"class":79},[52,137290,137291,137294,137296,137299,137301,137303,137305,137308],{"class":54,"line":107},[52,137292,137293],{"class":308},"       url",[52,137295,1216],{"class":79},[52,137297,137298],{"class":62},"'fonts\u002Ficomoon.woff'",[52,137300,16362],{"class":79},[52,137302,137281],{"class":308},[52,137304,1216],{"class":79},[52,137306,137307],{"class":62},"'woff'",[52,137309,40697],{"class":79},[52,137311,137312,137314,137316,137319,137321,137323,137325,137328],{"class":54,"line":113},[52,137313,137293],{"class":308},[52,137315,1216],{"class":79},[52,137317,137318],{"class":62},"'fonts\u002Ficomoon.ttf'",[52,137320,16362],{"class":79},[52,137322,137281],{"class":308},[52,137324,1216],{"class":79},[52,137326,137327],{"class":62},"'truetype'",[52,137329,40697],{"class":79},[52,137331,137332,137334,137336,137339,137341,137343,137345,137348],{"class":54,"line":119},[52,137333,137293],{"class":308},[52,137335,1216],{"class":79},[52,137337,137338],{"class":62},"'fonts\u002Ficomoon.svg#icomoon'",[52,137340,16362],{"class":79},[52,137342,137281],{"class":308},[52,137344,1216],{"class":79},[52,137346,137347],{"class":62},"'svg'",[52,137349,2737],{"class":79},[52,137351,137352],{"class":54,"line":126},[52,137353,452],{"class":79},[52,137355,137356,137358],{"class":54,"line":132},[52,137357,136959],{"class":75},[52,137359,18220],{"class":79},[52,137361,137362,137364,137366,137368],{"class":54,"line":138},[52,137363,137240],{"class":308},[52,137365,54087],{"class":79},[52,137367,137245],{"class":62},[52,137369,80],{"class":79},[52,137371,137372,137375,137377,137379],{"class":54,"line":144},[52,137373,137374],{"class":308},"  font-style",[52,137376,54087],{"class":79},[52,137378,66491],{"class":308},[52,137380,80],{"class":79},[52,137382,137383],{"class":54,"line":153},[52,137384,452],{"class":79},[14,137386,137387],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[4509,137389],{"style":129058,"src":137390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[1696,137392,137393],{"start":91},[32,137394,137395],{},"添加字体",[4509,137397],{"style":129058,"src":137398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,137400,137401],{},"复制：",[4509,137403],{"style":129058,"src":137404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,137406,137407],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[1696,137409,137410],{"start":98},[32,137411,137412],{},"代码展示：",[42,137414,137415],{"className":129202,"code":137221,"language":129204,"meta":47,"style":47},[49,137416,137417,137421,137427,137437,137451,137473,137491,137509,137527,137531,137537,137547,137557],{"__ignoreMap":47},[52,137418,137419],{"class":54,"line":55},[52,137420,137228],{"class":94},[52,137422,137423,137425],{"class":54,"line":66},[52,137424,137233],{"class":58},[52,137426,18220],{"class":79},[52,137428,137429,137431,137433,137435],{"class":54,"line":83},[52,137430,137240],{"class":308},[52,137432,54087],{"class":79},[52,137434,137245],{"class":62},[52,137436,80],{"class":79},[52,137438,137439,137441,137443,137445,137447,137449],{"class":54,"line":91},[52,137440,137252],{"class":308},[52,137442,54087],{"class":79},[52,137444,64376],{"class":308},[52,137446,1216],{"class":79},[52,137448,137261],{"class":62},[52,137450,2737],{"class":79},[52,137452,137453,137455,137457,137459,137461,137463,137465,137467,137469,137471],{"class":54,"line":98},[52,137454,137252],{"class":308},[52,137456,54087],{"class":79},[52,137458,64376],{"class":308},[52,137460,1216],{"class":79},[52,137462,137276],{"class":62},[52,137464,16362],{"class":79},[52,137466,137281],{"class":308},[52,137468,1216],{"class":79},[52,137470,137286],{"class":62},[52,137472,40697],{"class":79},[52,137474,137475,137477,137479,137481,137483,137485,137487,137489],{"class":54,"line":107},[52,137476,137293],{"class":308},[52,137478,1216],{"class":79},[52,137480,137298],{"class":62},[52,137482,16362],{"class":79},[52,137484,137281],{"class":308},[52,137486,1216],{"class":79},[52,137488,137307],{"class":62},[52,137490,40697],{"class":79},[52,137492,137493,137495,137497,137499,137501,137503,137505,137507],{"class":54,"line":113},[52,137494,137293],{"class":308},[52,137496,1216],{"class":79},[52,137498,137318],{"class":62},[52,137500,16362],{"class":79},[52,137502,137281],{"class":308},[52,137504,1216],{"class":79},[52,137506,137327],{"class":62},[52,137508,40697],{"class":79},[52,137510,137511,137513,137515,137517,137519,137521,137523,137525],{"class":54,"line":119},[52,137512,137293],{"class":308},[52,137514,1216],{"class":79},[52,137516,137338],{"class":62},[52,137518,16362],{"class":79},[52,137520,137281],{"class":308},[52,137522,1216],{"class":79},[52,137524,137347],{"class":62},[52,137526,2737],{"class":79},[52,137528,137529],{"class":54,"line":126},[52,137530,452],{"class":79},[52,137532,137533,137535],{"class":54,"line":132},[52,137534,136959],{"class":75},[52,137536,18220],{"class":79},[52,137538,137539,137541,137543,137545],{"class":54,"line":138},[52,137540,137240],{"class":308},[52,137542,54087],{"class":79},[52,137544,137245],{"class":62},[52,137546,80],{"class":79},[52,137548,137549,137551,137553,137555],{"class":54,"line":144},[52,137550,137374],{"class":308},[52,137552,54087],{"class":79},[52,137554,66491],{"class":308},[52,137556,80],{"class":79},[52,137558,137559],{"class":54,"line":153},[52,137560,452],{"class":79},[4509,137562],{"style":129058,"src":137563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,137565,137566],{},"更加细节展示：",[1696,137568,137569],{},[32,137570,137571],{},"html 标签内添加小图标",[4509,137573],{"style":129058,"src":137574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[1696,137576,137577],{"start":66},[32,137578,137579],{},"给标签定义字体",[42,137581,137582],{"className":129949,"code":133306,"language":129951,"meta":47,"style":47},[49,137583,137584,137588,137602,137606],{"__ignoreMap":47},[52,137585,137586],{"class":54,"line":55},[52,137587,133313],{"class":94},[52,137589,137590,137592,137594,137596,137598,137600],{"class":54,"line":66},[52,137591,698],{"class":79},[52,137593,54261],{"class":53950},[52,137595,56136],{"class":75},[52,137597,292],{"class":79},[52,137599,133326],{"class":62},[52,137601,53957],{"class":79},[52,137603,137604],{"class":54,"line":83},[52,137605,133333],{"class":79},[52,137607,137608,137610,137612],{"class":54,"line":91},[52,137609,54435],{"class":79},[52,137611,54261],{"class":53950},[52,137613,53957],{"class":79},[14,137615,137616],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[4509,137618],{"style":129058,"src":137619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[3195,137621,137623],{"id":137622},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,137625,137626],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,137628,137629,137630,137633],{},"把压缩包里面的 ",[2389,137631,137632],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,137635,137636],{},"打开网站，点下方：",[4509,137638],{"style":129058,"src":137639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[4509,137641],{"style":129058,"src":137642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[4509,137644],{"style":129058,"src":137645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,137647,137648],{},"点yes重新加载",[14,137650,137651],{},"然后重复之前的操作就可以实现了",[14,137653,137654],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[3195,137656,137658],{"id":137657},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[4509,137660],{"style":129058,"src":137661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[3141,137663,137664],{},"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":47,"searchDepth":66,"depth":66,"links":137666},[137667,137673,137678],{"id":136270,"depth":66,"text":136271,"children":137668},[137669,137670,137671,137672],{"id":136282,"depth":83,"text":136283},{"id":136311,"depth":83,"text":136312},{"id":136339,"depth":83,"text":136340},{"id":136397,"depth":83,"text":136398},{"id":136869,"depth":66,"text":136870,"children":137674},[137675,137676,137677],{"id":136873,"depth":83,"text":136874},{"id":136918,"depth":83,"text":136919},{"id":136934,"depth":83,"text":136935},{"id":137034,"depth":66,"text":137035,"children":137679},[137680,137681,137682,137683,137684,137685],{"id":137038,"depth":83,"text":137039},{"id":137072,"depth":83,"text":137073},{"id":137095,"depth":83,"text":137096},{"id":137142,"depth":83,"text":137143},{"id":137622,"depth":83,"text":137623},{"id":137657,"depth":83,"text":137658},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":136262,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":137692,"title":137693,"body":137694,"description":26025,"extension":3153,"meta":138921,"navigation":122,"path":138922,"seo":138923,"stem":138924,"__hash__":138925},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":137695,"toc":138902},[137696,137699,137703,137706,137720,137788,137818,137821,137825,137829,137931,137978,137982,137985,137988,138022,138025,138028,138031,138034,138037,138040,138043,138045,138048,138051,138054,138057,138060,138063,138066,138094,138097,138101,138104,138111,138114,138117,138143,138146,138150,138153,138156,138163,138167,138170,138172,138204,138207,138210,138222,138228,138231,138234,138237,138239,138243,138246,138249,138252,138297,138301,138303,138306,138313,138355,138358,138362,138367,138381,138385,138388,138391,138394,138397,138400,138434,138437,138440,138494,138497,138500,138503,138506,138558,138561,138564,138613,138617,138619,138622,138625,138628,138631,138634,138692,138695,138701,138704,138707,138739,138742,138746,138750,138753,138785,138789,138792,138836,138840,138843,138846,138849,138852,138855,138858,138861,138863,138866,138868,138871,138874,138877,138880,138885,138888,138890,138893,138896,138899],[10,137697,137693],{"id":137698},"_13-界面样式与布局技巧",[18,137700,137702],{"id":137701},"_131-css三角","13.1 css三角",[14,137704,137705],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[29,137707,137708,137711,137714,137717],{},[32,137709,137710],{},"用css 边框可以模拟三角效果",[32,137712,137713],{},"宽度高度为0",[32,137715,137716],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[32,137718,137719],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[42,137721,137723],{"className":129202,"code":137722,"language":129204,"meta":47,"style":47},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[49,137724,137725,137730,137737,137747,137757,137773,137784],{"__ignoreMap":47},[52,137726,137727],{"class":54,"line":55},[52,137728,137729],{"class":94},"\u002F* CSS 实现三角形 *\u002F\n",[52,137731,137732,137735],{"class":54,"line":66},[52,137733,137734],{"class":75},".triangle",[52,137736,18220],{"class":79},[52,137738,137739,137741,137743,137745],{"class":54,"line":83},[52,137740,73218],{"class":308},[52,137742,54087],{"class":79},[52,137744,692],{"class":308},[52,137746,80],{"class":79},[52,137748,137749,137751,137753,137755],{"class":54,"line":91},[52,137750,73438],{"class":308},[52,137752,54087],{"class":79},[52,137754,692],{"class":308},[52,137756,80],{"class":79},[52,137758,137759,137761,137763,137765,137767,137769,137771],{"class":54,"line":98},[52,137760,73546],{"class":308},[52,137762,54087],{"class":79},[52,137764,3649],{"class":308},[52,137766,54142],{"class":58},[52,137768,54171],{"class":308},[52,137770,66641],{"class":308},[52,137772,80],{"class":79},[52,137774,137775,137778,137780,137782],{"class":54,"line":107},[52,137776,137777],{"class":308},"  border-bottom-color",[52,137779,54087],{"class":79},[52,137781,65019],{"class":308},[52,137783,80],{"class":79},[52,137785,137786],{"class":54,"line":113},[52,137787,452],{"class":79},[42,137789,137790],{"className":129202,"code":133359,"language":129204,"meta":47,"style":47},[49,137791,137792,137798,137814],{"__ignoreMap":47},[52,137793,137794,137796],{"class":54,"line":55},[52,137795,54261],{"class":53950},[52,137797,18220],{"class":79},[52,137799,137800,137802,137804,137806,137808,137810,137812],{"class":54,"line":66},[52,137801,73546],{"class":308},[52,137803,54087],{"class":79},[52,137805,629],{"class":308},[52,137807,54142],{"class":58},[52,137809,54171],{"class":308},[52,137811,132594],{"class":308},[52,137813,80],{"class":79},[52,137815,137816],{"class":54,"line":83},[52,137817,452],{"class":79},[4509,137819],{"style":129058,"src":137820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[18,137822,137824],{"id":137823},"_132-css用户界面样式","13.2 css用户界面样式",[3195,137826,137828],{"id":137827},"_1321-鼠标样式","13.2.1 鼠标样式",[42,137830,137832],{"className":129202,"code":137831,"language":129204,"meta":47,"style":47},"\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",[49,137833,137834,137839,137858,137876,137895,137912],{"__ignoreMap":47},[52,137835,137836],{"class":54,"line":55},[52,137837,137838],{"class":94},"\u002F* 鼠标样式 *\u002F\n",[52,137840,137841,137843,137845,137848,137850,137852,137855],{"class":54,"line":66},[52,137842,54261],{"class":53950},[52,137844,82457],{"class":79},[52,137846,137847],{"class":308},"cursor",[52,137849,54087],{"class":79},[52,137851,64680],{"class":308},[52,137853,137854],{"class":79},"; }   ",[52,137856,137857],{"class":94},"\u002F* 手型 *\u002F\n",[52,137859,137860,137862,137864,137866,137868,137871,137873],{"class":54,"line":83},[52,137861,54261],{"class":53950},[52,137863,82457],{"class":79},[52,137865,137847],{"class":308},[52,137867,54087],{"class":79},[52,137869,137870],{"class":308},"default",[52,137872,137854],{"class":79},[52,137874,137875],{"class":94},"\u002F* 默认 *\u002F\n",[52,137877,137878,137880,137882,137884,137886,137889,137892],{"class":54,"line":91},[52,137879,54261],{"class":53950},[52,137881,82457],{"class":79},[52,137883,137847],{"class":308},[52,137885,54087],{"class":79},[52,137887,137888],{"class":308},"move",[52,137890,137891],{"class":79},"; }      ",[52,137893,137894],{"class":94},"\u002F* 移动 *\u002F\n",[52,137896,137897,137899,137901,137903,137905,137907,137909],{"class":54,"line":98},[52,137898,54261],{"class":53950},[52,137900,82457],{"class":79},[52,137902,137847],{"class":308},[52,137904,54087],{"class":79},[52,137906,8154],{"class":308},[52,137908,137891],{"class":79},[52,137910,137911],{"class":94},"\u002F* 文本 *\u002F\n",[52,137913,137914,137916,137918,137920,137922,137925,137928],{"class":54,"line":107},[52,137915,54261],{"class":53950},[52,137917,82457],{"class":79},[52,137919,137847],{"class":308},[52,137921,54087],{"class":79},[52,137923,137924],{"class":308},"not-allowed",[52,137926,137927],{"class":79},"; } ",[52,137929,137930],{"class":94},"\u002F* 禁止 *\u002F\n",[3353,137932,137933,137941],{},[3356,137934,137935],{},[3359,137936,137937,137939],{},[3362,137938,129666],{"align":26385},[3362,137940,30139],{"align":26385},[3399,137942,137943,137950,137957,137964,137971],{},[3359,137944,137945,137947],{},[3404,137946,137870],{"align":26385},[3404,137948,137949],{"align":26385},"小白 默认",[3359,137951,137952,137954],{},[3404,137953,64680],{"align":26385},[3404,137955,137956],{"align":26385},"小手",[3359,137958,137959,137961],{},[3404,137960,137888],{"align":26385},[3404,137962,137963],{"align":26385},"移动",[3359,137965,137966,137968],{},[3404,137967,8154],{"align":26385},[3404,137969,137970],{"align":26385},"文本",[3359,137972,137973,137975],{},[3404,137974,137924],{"align":26385},[3404,137976,137977],{"align":26385},"禁止",[3195,137979,137981],{"id":137980},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,137983,137984],{},"去除表单轮廓线",[14,137986,137987],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[42,137989,137990],{"className":129202,"code":132566,"language":129204,"meta":47,"style":47},[49,137991,137992,137996,138002,138018],{"__ignoreMap":47},[52,137993,137994],{"class":54,"line":55},[52,137995,132573],{"class":94},[52,137997,137998,138000],{"class":54,"line":66},[52,137999,54261],{"class":53950},[52,138001,18220],{"class":79},[52,138003,138004,138006,138008,138010,138012,138014,138016],{"class":54,"line":83},[52,138005,73546],{"class":308},[52,138007,54087],{"class":79},[52,138009,629],{"class":308},[52,138011,54142],{"class":58},[52,138013,54171],{"class":308},[52,138015,132594],{"class":308},[52,138017,80],{"class":79},[52,138019,138020],{"class":54,"line":91},[52,138021,452],{"class":79},[14,138023,138024],{},"文本域：",[4509,138026],{"style":129058,"src":138027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,138029,138030],{},"此时会有一个空白区域",[4509,138032],{"style":129058,"src":138033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,138035,138036],{},"写在同一行就不会出现这个问题",[4509,138038],{"style":129058,"src":138039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,138041,138042],{},"文本域是行内块元素，一定记住！！！",[14,138044,100883],{},[4509,138046],{"style":129058,"src":138047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,138049,138050],{},"文本域尽量放在一行",[14,138052,138053],{},"知识回顾：cols是列，rols是行",[4509,138055],{"style":129058,"src":138056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,138058,138059],{},"它可以进行拖动，显然这是我们不愿意看到的",[4509,138061],{"style":129058,"src":138062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,138064,138065],{},"使用resize进行解决",[42,138067,138069],{"className":129202,"code":138068,"language":129204,"meta":47,"style":47},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[49,138070,138071,138077,138090],{"__ignoreMap":47},[52,138072,138073,138075],{"class":54,"line":55},[52,138074,56471],{"class":53950},[52,138076,18220],{"class":79},[52,138078,138079,138081,138083,138085,138087],{"class":54,"line":66},[52,138080,73448],{"class":308},[52,138082,54087],{"class":79},[52,138084,57387],{"class":308},[52,138086,133065],{"class":79},[52,138088,138089],{"class":94},"\u002F* 取消表单轮廓线 *\u002F\n",[52,138091,138092],{"class":54,"line":83},[52,138093,452],{"class":79},[14,138095,138096],{},"此时就无法通过右下方实现拖动了",[3195,138098,138100],{"id":138099},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,138102,138103],{},"实现一个盒子中的文字和图片对齐",[14,138105,138106,138107,138110],{},"用于设置一个元素的 ",[2389,138108,138109],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,138112,138113],{},"图片和文字默认是基线对齐",[4509,138115],{"style":129058,"src":138116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[42,138118,138119],{"className":129202,"code":138068,"language":129204,"meta":47,"style":47},[49,138120,138121,138127,138139],{"__ignoreMap":47},[52,138122,138123,138125],{"class":54,"line":55},[52,138124,56471],{"class":53950},[52,138126,18220],{"class":79},[52,138128,138129,138131,138133,138135,138137],{"class":54,"line":66},[52,138130,73448],{"class":308},[52,138132,54087],{"class":79},[52,138134,57387],{"class":308},[52,138136,133065],{"class":79},[52,138138,138089],{"class":94},[52,138140,138141],{"class":54,"line":83},[52,138142,452],{"class":79},[4509,138144],{"style":129058,"src":138145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[24646,138147,138149],{"id":138148},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,138151,138152],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[4509,138154],{"style":129058,"src":138155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,138157,138158,138159,138162],{},"此时可以给图片、表单这些行内块元素的 ",[2389,138160,138161],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[24646,138164,138166],{"id":138165},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,138168,138169],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,138171,17281],{},[42,138173,138175],{"className":129202,"code":138174,"language":129204,"meta":47,"style":47},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[49,138176,138177,138182,138188,138200],{"__ignoreMap":47},[52,138178,138179],{"class":54,"line":55},[52,138180,138181],{"class":94},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[52,138183,138184,138186],{"class":54,"line":66},[52,138185,4509],{"class":53950},[52,138187,18220],{"class":79},[52,138189,138190,138193,138195,138198],{"class":54,"line":83},[52,138191,138192],{"class":308},"  vertical-align",[52,138194,54087],{"class":79},[52,138196,138197],{"class":308},"middle",[52,138199,80],{"class":79},[52,138201,138202],{"class":54,"line":91},[52,138203,452],{"class":79},[4509,138205],{"style":129058,"src":138206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,138208,138209],{},"主要解决方法有两种：",[1696,138211,138212],{},[32,138213,138214,138217,138218,138221],{},[2389,138215,138216],{},"给图片"," 添加 ",[2389,138219,138220],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,138223,138224,138225],{},"2.把图片转换为块级元素 ",[2389,138226,138227],{},"display: block",[14,138229,138230],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,138232,138233],{},"img {",[14,138235,138236],{},"vertical-align:middle;",[14,138238,4132],{},[3195,138240,138242],{"id":138241},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,138244,138245],{},"效果：",[4509,138247],{"style":129058,"src":138248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,138250,138251],{},"单行文本溢出显示省略号--必须满足三个条件：",[42,138253,138255],{"className":129202,"code":138254,"language":129204,"meta":47,"style":47},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[49,138256,138257,138262,138268,138278,138283,138293],{"__ignoreMap":47},[52,138258,138259],{"class":54,"line":55},[52,138260,138261],{"class":94},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[52,138263,138264,138266],{"class":54,"line":66},[52,138265,4509],{"class":53950},[52,138267,18220],{"class":79},[52,138269,138270,138272,138274,138276],{"class":54,"line":83},[52,138271,138192],{"class":308},[52,138273,54087],{"class":79},[52,138275,138197],{"class":308},[52,138277,80],{"class":79},[52,138279,138280],{"class":54,"line":91},[52,138281,138282],{"class":94},"  \u002F* 或 *\u002F\n",[52,138284,138285,138287,138289,138291],{"class":54,"line":98},[52,138286,130818],{"class":308},[52,138288,54087],{"class":79},[52,138290,63519],{"class":308},[52,138292,80],{"class":79},[52,138294,138295],{"class":54,"line":107},[52,138296,452],{"class":79},[3195,138298,138300],{"id":138299},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,138302,138245],{},[4509,138304],{"style":129058,"src":138305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,138307,138308,138309,138312],{},"多行文本溢出显示省略号， ",[2389,138310,138311],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[42,138314,138315],{"className":129202,"code":138254,"language":129204,"meta":47,"style":47},[49,138316,138317,138321,138327,138337,138341,138351],{"__ignoreMap":47},[52,138318,138319],{"class":54,"line":55},[52,138320,138261],{"class":94},[52,138322,138323,138325],{"class":54,"line":66},[52,138324,4509],{"class":53950},[52,138326,18220],{"class":79},[52,138328,138329,138331,138333,138335],{"class":54,"line":83},[52,138330,138192],{"class":308},[52,138332,54087],{"class":79},[52,138334,138197],{"class":308},[52,138336,80],{"class":79},[52,138338,138339],{"class":54,"line":91},[52,138340,138282],{"class":94},[52,138342,138343,138345,138347,138349],{"class":54,"line":98},[52,138344,130818],{"class":308},[52,138346,54087],{"class":79},[52,138348,63519],{"class":308},[52,138350,80],{"class":79},[52,138352,138353],{"class":54,"line":107},[52,138354,452],{"class":79},[14,138356,138357],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[18,138359,138361],{"id":138360},"_133-常见布局技巧","13.3 常见布局技巧",[14,138363,138364],{},[2389,138365,138366],{},"巧妙利用一个技术更快更好的布局：",[1696,138368,138369,138372,138375,138378],{},[32,138370,138371],{},"margin负值的运用",[32,138373,138374],{},"文字围绕浮动元素",[32,138376,138377],{},"行内块的巧妙运用",[32,138379,138380],{},"CSS三角强化",[3195,138382,138384],{"id":138383},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,138386,138387],{},"应用场景：",[4509,138389],{"style":129058,"src":138390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[4509,138392],{"style":129058,"src":138393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,138395,138396],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,138398,138399],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[42,138401,138402],{"className":129202,"code":132566,"language":129204,"meta":47,"style":47},[49,138403,138404,138408,138414,138430],{"__ignoreMap":47},[52,138405,138406],{"class":54,"line":55},[52,138407,132573],{"class":94},[52,138409,138410,138412],{"class":54,"line":66},[52,138411,54261],{"class":53950},[52,138413,18220],{"class":79},[52,138415,138416,138418,138420,138422,138424,138426,138428],{"class":54,"line":83},[52,138417,73546],{"class":308},[52,138419,54087],{"class":79},[52,138421,629],{"class":308},[52,138423,54142],{"class":58},[52,138425,54171],{"class":308},[52,138427,132594],{"class":308},[52,138429,80],{"class":79},[52,138431,138432],{"class":54,"line":91},[52,138433,452],{"class":79},[4509,138435],{"style":129058,"src":138436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,138438,138439],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[42,138441,138443],{"className":129202,"code":138442,"language":129204,"meta":47,"style":47},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[49,138444,138445,138450,138456,138466,138478,138490],{"__ignoreMap":47},[52,138446,138447],{"class":54,"line":55},[52,138448,138449],{"class":94},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[52,138451,138452,138454],{"class":54,"line":66},[52,138453,133050],{"class":75},[52,138455,18220],{"class":79},[52,138457,138458,138460,138462,138464],{"class":54,"line":83},[52,138459,135008],{"class":308},[52,138461,54087],{"class":79},[52,138463,57414],{"class":308},[52,138465,80],{"class":79},[52,138467,138468,138470,138472,138474,138476],{"class":54,"line":91},[52,138469,135022],{"class":308},[52,138471,54087],{"class":79},[52,138473,3649],{"class":308},[52,138475,54142],{"class":58},[52,138477,80],{"class":79},[52,138479,138480,138482,138484,138486,138488],{"class":54,"line":98},[52,138481,135039],{"class":308},[52,138483,54087],{"class":79},[52,138485,444],{"class":308},[52,138487,54142],{"class":58},[52,138489,80],{"class":79},[52,138491,138492],{"class":54,"line":107},[52,138493,452],{"class":79},[14,138495,138496],{},"加上上述代码会发现：",[4509,138498],{"style":129058,"src":138499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,138501,138502],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,138504,138505],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[42,138507,138508],{"className":129202,"code":138442,"language":129204,"meta":47,"style":47},[49,138509,138510,138514,138520,138530,138542,138554],{"__ignoreMap":47},[52,138511,138512],{"class":54,"line":55},[52,138513,138449],{"class":94},[52,138515,138516,138518],{"class":54,"line":66},[52,138517,133050],{"class":75},[52,138519,18220],{"class":79},[52,138521,138522,138524,138526,138528],{"class":54,"line":83},[52,138523,135008],{"class":308},[52,138525,54087],{"class":79},[52,138527,57414],{"class":308},[52,138529,80],{"class":79},[52,138531,138532,138534,138536,138538,138540],{"class":54,"line":91},[52,138533,135022],{"class":308},[52,138535,54087],{"class":79},[52,138537,3649],{"class":308},[52,138539,54142],{"class":58},[52,138541,80],{"class":79},[52,138543,138544,138546,138548,138550,138552],{"class":54,"line":98},[52,138545,135039],{"class":308},[52,138547,54087],{"class":79},[52,138549,444],{"class":308},[52,138551,54142],{"class":58},[52,138553,80],{"class":79},[52,138555,138556],{"class":54,"line":107},[52,138557,452],{"class":79},[14,138559,138560],{},"解决方式2：",[14,138562,138563],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[42,138565,138567],{"className":129202,"code":138566,"language":129204,"meta":47,"style":47},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[49,138568,138569,138575,138585,138597,138609],{"__ignoreMap":47},[52,138570,138571,138573],{"class":54,"line":55},[52,138572,54261],{"class":53950},[52,138574,18220],{"class":79},[52,138576,138577,138579,138581,138583],{"class":54,"line":66},[52,138578,135008],{"class":308},[52,138580,54087],{"class":79},[52,138582,57414],{"class":308},[52,138584,80],{"class":79},[52,138586,138587,138589,138591,138593,138595],{"class":54,"line":83},[52,138588,135022],{"class":308},[52,138590,54087],{"class":79},[52,138592,3649],{"class":308},[52,138594,54142],{"class":58},[52,138596,80],{"class":79},[52,138598,138599,138601,138603,138605,138607],{"class":54,"line":91},[52,138600,135039],{"class":308},[52,138602,54087],{"class":79},[52,138604,444],{"class":308},[52,138606,54142],{"class":58},[52,138608,80],{"class":79},[52,138610,138611],{"class":54,"line":98},[52,138612,452],{"class":79},[3195,138614,138616],{"id":138615},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,138618,138387],{},[4509,138620],{"style":129058,"src":138621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,138623,138624],{},"实现结构图：",[4509,138626],{"style":129058,"src":138627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,138629,138630],{},"巧妙运用浮动元素不会压住文字的特性",[14,138632,138633],{},"代码显示：",[42,138635,138637],{"className":129202,"code":138636,"language":129204,"meta":47,"style":47},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[49,138638,138639,138645,138655,138659,138664,138668,138674,138688],{"__ignoreMap":47},[52,138640,138641,138643],{"class":54,"line":55},[52,138642,133050],{"class":75},[52,138644,18220],{"class":79},[52,138646,138647,138649,138651,138653],{"class":54,"line":66},[52,138648,133682],{"class":308},[52,138650,54087],{"class":79},[52,138652,26385],{"class":308},[52,138654,80],{"class":79},[52,138656,138657],{"class":54,"line":83},[52,138658,452],{"class":79},[52,138660,138661],{"class":54,"line":91},[52,138662,138663],{"class":79},"```Css\n",[52,138665,138666],{"class":54,"line":98},[52,138667,133045],{"class":94},[52,138669,138670,138672],{"class":54,"line":107},[52,138671,133050],{"class":75},[52,138673,18220],{"class":79},[52,138675,138676,138678,138680,138682,138684,138686],{"class":54,"line":113},[52,138677,73120],{"class":308},[52,138679,54087],{"class":79},[52,138681,692],{"class":308},[52,138683,54206],{"class":308},[52,138685,133065],{"class":79},[52,138687,133068],{"class":94},[52,138689,138690],{"class":54,"line":119},[52,138691,452],{"class":79},[14,138693,138694],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[42,138696,138699],{"className":138697,"code":138698,"language":8154},[8152],"\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",[49,138700,138698],{"__ignoreMap":47},[4509,138702],{"style":129058,"src":138703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,138705,138706],{},"最终展示结果：",[42,138708,138709],{"className":129202,"code":133038,"language":129204,"meta":47,"style":47},[49,138710,138711,138715,138721,138735],{"__ignoreMap":47},[52,138712,138713],{"class":54,"line":55},[52,138714,133045],{"class":94},[52,138716,138717,138719],{"class":54,"line":66},[52,138718,133050],{"class":75},[52,138720,18220],{"class":79},[52,138722,138723,138725,138727,138729,138731,138733],{"class":54,"line":83},[52,138724,73120],{"class":308},[52,138726,54087],{"class":79},[52,138728,692],{"class":308},[52,138730,54206],{"class":308},[52,138732,133065],{"class":79},[52,138734,133068],{"class":94},[52,138736,138737],{"class":54,"line":91},[52,138738,452],{"class":79},[4509,138740],{"style":129058,"src":138741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[18,138743,138745],{"id":138744},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[3195,138747,138749],{"id":138748},"_1341-原理","13.4.1 原理",[4509,138751],{"style":129058,"src":138752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[42,138754,138755],{"className":129202,"code":133038,"language":129204,"meta":47,"style":47},[49,138756,138757,138761,138767,138781],{"__ignoreMap":47},[52,138758,138759],{"class":54,"line":55},[52,138760,133045],{"class":94},[52,138762,138763,138765],{"class":54,"line":66},[52,138764,133050],{"class":75},[52,138766,18220],{"class":79},[52,138768,138769,138771,138773,138775,138777,138779],{"class":54,"line":83},[52,138770,73120],{"class":308},[52,138772,54087],{"class":79},[52,138774,692],{"class":308},[52,138776,54206],{"class":308},[52,138778,133065],{"class":79},[52,138780,133068],{"class":94},[52,138782,138783],{"class":54,"line":91},[52,138784,452],{"class":79},[3195,138786,138788],{"id":138787},"_1342-实例","13.4.2 实例",[4509,138790],{"style":129058,"src":138791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[42,138793,138794],{"className":129202,"code":133668,"language":129204,"meta":47,"style":47},[49,138795,138796,138802,138812,138816,138822,138832],{"__ignoreMap":47},[52,138797,138798,138800],{"class":54,"line":55},[52,138799,133675],{"class":75},[52,138801,18220],{"class":79},[52,138803,138804,138806,138808,138810],{"class":54,"line":66},[52,138805,133682],{"class":308},[52,138807,54087],{"class":79},[52,138809,26385],{"class":308},[52,138811,80],{"class":79},[52,138813,138814],{"class":54,"line":83},[52,138815,452],{"class":79},[52,138817,138818,138820],{"class":54,"line":91},[52,138819,133697],{"class":75},[52,138821,18220],{"class":79},[52,138823,138824,138826,138828,138830],{"class":54,"line":98},[52,138825,133682],{"class":308},[52,138827,54087],{"class":79},[52,138829,75172],{"class":308},[52,138831,80],{"class":79},[52,138833,138834],{"class":54,"line":107},[52,138835,452],{"class":79},[18,138837,138839],{"id":138838},"_135-css的初始化","13.5 css的初始化",[14,138841,138842],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,138844,138845],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,138847,138848],{},"每个网页都必须首先进行 CSS初始化。",[14,138850,138851],{},"这里我们以 京东CSS初始化代码为例。",[14,138853,138854],{},"在网页右键查看网页源代码",[14,138856,138857],{},"找到css的link引入语句",[14,138859,138860],{},"然后ctrl+f 输入body",[14,138862,79876],{},[4509,138864],{"style":129058,"src":138865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,138867,79899],{},[4509,138869],{"style":129058,"src":138870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,138872,138873],{},"③打开了网页上传压缩的代码",[4509,138875],{"style":129058,"src":138876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,138878,138879],{},"④从body前可以查看这个网页的初始化代码",[14,138881,138882],{},[2389,138883,138884],{},"Unicode编码字体：",[14,138886,138887],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,138889,85857],{},[14,138891,138892],{},"黑体 \\9ED1\\4F53",[14,138894,138895],{},"宋体 \\5B8B\\4F53",[14,138897,138898],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[3141,138900,138901],{},"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":47,"searchDepth":66,"depth":66,"links":138903},[138904,138905,138912,138916,138920],{"id":137701,"depth":66,"text":137702},{"id":137823,"depth":66,"text":137824,"children":138906},[138907,138908,138909,138910,138911],{"id":137827,"depth":83,"text":137828},{"id":137980,"depth":83,"text":137981},{"id":138099,"depth":83,"text":138100},{"id":138241,"depth":83,"text":138242},{"id":138299,"depth":83,"text":138300},{"id":138360,"depth":66,"text":138361,"children":138913},[138914,138915],{"id":138383,"depth":83,"text":138384},{"id":138615,"depth":83,"text":138616},{"id":138744,"depth":66,"text":138745,"children":138917},[138918,138919],{"id":138748,"depth":83,"text":138749},{"id":138787,"depth":83,"text":138788},{"id":138838,"depth":66,"text":138839},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":137693,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138927,"title":138928,"body":138929,"description":26025,"extension":3153,"meta":140615,"navigation":122,"path":140616,"seo":140617,"stem":140618,"__hash__":140619},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138930,"toc":140604},[138931,138934,138938,138942,138945,138952,138955,138958,138996,138999,139001,139015,139019,139028,139032,139037,139040,139043,139046,139081,139086,139089,139119,139122,139127,139130,139133,139163,139166,139220,139223,139227,139232,139244,139247,139251,139281,139284,139289,139292,139322,139325,139329,139346,139350,139354,139357,139390,139393,139397,139400,139403,139406,139409,139412,139523,139526,139529,139532,139634,139637,139641,139645,139649,139652,139692,139695,139697,139713,139717,139720,139725,139806,139809,139812,139938,139943,139946,139954,139957,139962,140047,140050,140054,140057,140060,140064,140084,140089,140173,140176,140181,140184,140187,140265,140268,140271,140274,140277,140280,140285,140288,140291,140363,140366,140371,140374,140471,140474,140480,140483,140486,140489,140492,140495,140498,140501,140504,140508,140513,140516,140549,140554,140557,140598,140601],[10,138932,138928],{"id":138933},"_14-html5与css3新特性",[18,138935,138937],{"id":138936},"_141-html5的新特性","14.1 HTML5的新特性",[3195,138939,138941],{"id":138940},"_1411-基本标签","14.1.1 基本标签",[14,138943,138944],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,138946,138947,138948,138951],{},"这些新特性都有兼容性问题，基本是 ",[2389,138949,138950],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,138953,138954],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,138956,138957],{},"现在使用的是新特性：",[29,138959,138960,138966,138972,138978,138984,138990],{},[32,138961,138962,138965],{},[49,138963,138964],{},"\u003Cheader>"," 头部标签",[32,138967,138968,138971],{},[49,138969,138970],{},"\u003Cnav>"," 导航标签",[32,138973,138974,138977],{},[49,138975,138976],{},"\u003Carticle>"," 内容标签",[32,138979,138980,138983],{},[49,138981,138982],{},"\u003Csection>"," 定义文档某个区域",[32,138985,138986,138989],{},[49,138987,138988],{},"\u003Caside>"," 侧边栏标签",[32,138991,138992,138995],{},[49,138993,138994],{},"\u003Cfooter>"," 尾部标签",[4509,138997],{"style":129058,"src":138998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,139000,3252],{},[29,139002,139003,139006,139009,139012],{},[32,139004,139005],{},"这种语义化标准主要是针对搜索引擎的",[32,139007,139008],{},"这些标签页面中可以经常使用",[32,139010,139011],{},"在IE9中，需要把这些元素转换为块级元素",[32,139013,139014],{},"移动端更喜欢使用这些标签",[3195,139016,139018],{"id":139017},"_1412-多媒体标签","14.1.2 多媒体标签",[14,139020,139021,139022,139024,139025,139027],{},"音频 ",[2389,139023,30824],{}," 和视频 ",[2389,139026,30833],{}," 两个标签",[24646,139029,139031],{"id":139030},"_14121-视频标签-video","14.1.2.1 视频标签- video",[1696,139033,139034],{},[32,139035,139036],{},"支持格式：",[4509,139038],{"style":129058,"src":139039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,139041,139042],{},"尽量使用MP4，兼容性好",[14,139044,139045],{},"用MP4就可以",[42,139047,139049],{"className":129949,"code":139048,"language":129951,"meta":47,"style":47},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[49,139050,139051],{"__ignoreMap":47},[52,139052,139053,139055,139057,139059,139061,139064,139066,139069,139072,139075,139077,139079],{"class":54,"line":55},[52,139054,698],{"class":79},[52,139056,30833],{"class":53950},[52,139058,57889],{"class":75},[52,139060,292],{"class":79},[52,139062,139063],{"class":62},"\"movie.mp4\"",[52,139065,95073],{"class":75},[52,139067,139068],{"class":75}," autoplay",[52,139070,139071],{"class":75}," muted",[52,139073,139074],{"class":75}," loop",[52,139076,57964],{"class":79},[52,139078,30833],{"class":53950},[52,139080,53957],{"class":79},[1696,139082,139083],{"start":66},[32,139084,139085],{},"兼容写法",[14,139087,139088],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[42,139090,139091],{"className":129949,"code":139048,"language":129951,"meta":47,"style":47},[49,139092,139093],{"__ignoreMap":47},[52,139094,139095,139097,139099,139101,139103,139105,139107,139109,139111,139113,139115,139117],{"class":54,"line":55},[52,139096,698],{"class":79},[52,139098,30833],{"class":53950},[52,139100,57889],{"class":75},[52,139102,292],{"class":79},[52,139104,139063],{"class":62},[52,139106,95073],{"class":75},[52,139108,139068],{"class":75},[52,139110,139071],{"class":75},[52,139112,139074],{"class":75},[52,139114,57964],{"class":79},[52,139116,30833],{"class":53950},[52,139118,53957],{"class":79},[14,139120,139121],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1696,139123,139124],{"start":83},[32,139125,139126],{},"video常用属性",[4509,139128],{"style":129058,"src":139129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,139131,139132],{},"poster属性后面是跟的等待加载图片的地址",[42,139134,139135],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,139136,139137],{"__ignoreMap":47},[52,139138,139139,139141,139143,139145,139147,139149,139151,139153,139155,139157,139159,139161],{"class":54,"line":55},[52,139140,698],{"class":79},[52,139142,4509],{"class":53950},[52,139144,57889],{"class":75},[52,139146,292],{"class":79},[52,139148,136719],{"class":62},[52,139150,57897],{"class":75},[52,139152,292],{"class":79},[52,139154,136726],{"class":62},[52,139156,136729],{"class":75},[52,139158,292],{"class":79},[52,139160,136734],{"class":62},[52,139162,53957],{"class":79},[14,139164,139165],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[42,139167,139169],{"className":129202,"code":139168,"language":129204,"meta":47,"style":47},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[49,139170,139171,139176,139182,139206,139211,139216],{"__ignoreMap":47},[52,139172,139173],{"class":54,"line":55},[52,139174,139175],{"class":94},"\u002F* 2D 位移 *\u002F\n",[52,139177,139178,139180],{"class":54,"line":66},[52,139179,54261],{"class":53950},[52,139181,18220],{"class":79},[52,139183,139184,139187,139189,139192,139194,139196,139198,139200,139202,139204],{"class":54,"line":83},[52,139185,139186],{"class":308},"  transform",[52,139188,54087],{"class":79},[52,139190,139191],{"class":308},"translate",[52,139193,1216],{"class":79},[52,139195,591],{"class":308},[52,139197,54142],{"class":58},[52,139199,15083],{"class":79},[52,139201,3852],{"class":308},[52,139203,54142],{"class":58},[52,139205,2737],{"class":79},[52,139207,139208],{"class":54,"line":91},[52,139209,139210],{"class":94},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[52,139212,139213],{"class":54,"line":98},[52,139214,139215],{"class":94},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[52,139217,139218],{"class":54,"line":107},[52,139219,452],{"class":79},[14,139221,139222],{},"muted:自动静音属性",[24646,139224,139226],{"id":139225},"_14122-音频标签audio","14.1.2.2 音频标签audio",[1696,139228,139229],{},[32,139230,139231],{},"基本使用",[14,139233,139234,139235,139240,139241],{},"当前 ",[2389,139236,139237],{},[49,139238,139239],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2389,139242,139243],{},"mp3格式",[4509,139245],{"style":129058,"src":139246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[1696,139248,139249],{"start":66},[32,139250,139085],{},[42,139252,139253],{"className":129949,"code":139048,"language":129951,"meta":47,"style":47},[49,139254,139255],{"__ignoreMap":47},[52,139256,139257,139259,139261,139263,139265,139267,139269,139271,139273,139275,139277,139279],{"class":54,"line":55},[52,139258,698],{"class":79},[52,139260,30833],{"class":53950},[52,139262,57889],{"class":75},[52,139264,292],{"class":79},[52,139266,139063],{"class":62},[52,139268,95073],{"class":75},[52,139270,139068],{"class":75},[52,139272,139071],{"class":75},[52,139274,139074],{"class":75},[52,139276,57964],{"class":79},[52,139278,30833],{"class":53950},[52,139280,53957],{"class":79},[14,139282,139283],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1696,139285,139286],{"start":83},[32,139287,139288],{},"常用属性",[4509,139290],{"style":129058,"src":139291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[42,139293,139294],{"className":129949,"code":139048,"language":129951,"meta":47,"style":47},[49,139295,139296],{"__ignoreMap":47},[52,139297,139298,139300,139302,139304,139306,139308,139310,139312,139314,139316,139318,139320],{"class":54,"line":55},[52,139299,698],{"class":79},[52,139301,30833],{"class":53950},[52,139303,57889],{"class":75},[52,139305,292],{"class":79},[52,139307,139063],{"class":62},[52,139309,95073],{"class":75},[52,139311,139068],{"class":75},[52,139313,139071],{"class":75},[52,139315,139074],{"class":75},[52,139317,57964],{"class":79},[52,139319,30833],{"class":53950},[52,139321,53957],{"class":79},[14,139323,139324],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[24646,139326,139328],{"id":139327},"_14123-总结","14.1.2.3 总结",[29,139330,139331,139334,139337,139340,139343],{},[32,139332,139333],{},"音频标签和视频标签使用方式基本一致",[32,139335,139336],{},"浏览器支持情况不同",[32,139338,139339],{},"谷歌浏览器把音频和视频自动播放禁止了",[32,139341,139342],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[32,139344,139345],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[3195,139347,139349],{"id":139348},"_1413-表单元素","14.1.3 表单元素",[24646,139351,139353],{"id":139352},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[4509,139355],{"style":129058,"src":139356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[42,139358,139360],{"className":129949,"code":139359,"language":129951,"meta":47,"style":47},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[49,139361,139362],{"__ignoreMap":47},[52,139363,139364,139366,139368,139370,139372,139374,139376,139378,139381,139383,139385,139388],{"class":54,"line":55},[52,139365,698],{"class":79},[52,139367,56471],{"class":53950},[52,139369,56474],{"class":75},[52,139371,292],{"class":79},[52,139373,65349],{"class":62},[52,139375,17568],{"class":75},[52,139377,292],{"class":79},[52,139379,139380],{"class":62},"\"username\"",[52,139382,63670],{"class":75},[52,139384,292],{"class":79},[52,139386,139387],{"class":62},"\"请输入用户名\"",[52,139389,53957],{"class":79},[4509,139391],{"style":129058,"src":139392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[24646,139394,139396],{"id":139395},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[4509,139398],{"style":129058,"src":139399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,139401,139402],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,139404,139405],{},"快捷操作：",[4509,139407],{"style":129058,"src":139408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,139410,139411],{},"例子1：",[42,139413,139415],{"className":129949,"code":139414,"language":129951,"meta":47,"style":47},"\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",[49,139416,139417,139440,139467,139496,139515],{"__ignoreMap":47},[52,139418,139419,139421,139423,139425,139427,139430,139433,139435,139438],{"class":54,"line":55},[52,139420,698],{"class":79},[52,139422,69275],{"class":53950},[52,139424,69278],{"class":75},[52,139426,292],{"class":79},[52,139428,139429],{"class":62},"\"\u002Fsubmit\"",[52,139431,139432],{"class":75}," method",[52,139434,292],{"class":79},[52,139436,139437],{"class":62},"\"post\"",[52,139439,53957],{"class":79},[52,139441,139442,139444,139446,139448,139450,139452,139454,139456,139458,139460,139462,139465],{"class":54,"line":66},[52,139443,54794],{"class":79},[52,139445,56471],{"class":53950},[52,139447,56474],{"class":75},[52,139449,292],{"class":79},[52,139451,65349],{"class":62},[52,139453,17568],{"class":75},[52,139455,292],{"class":79},[52,139457,139380],{"class":62},[52,139459,63670],{"class":75},[52,139461,292],{"class":79},[52,139463,139464],{"class":62},"\"用户名\"",[52,139466,53957],{"class":79},[52,139468,139469,139471,139473,139475,139477,139480,139482,139484,139487,139489,139491,139494],{"class":54,"line":83},[52,139470,54794],{"class":79},[52,139472,56471],{"class":53950},[52,139474,56474],{"class":75},[52,139476,292],{"class":79},[52,139478,139479],{"class":62},"\"password\"",[52,139481,17568],{"class":75},[52,139483,292],{"class":79},[52,139485,139486],{"class":62},"\"pwd\"",[52,139488,63670],{"class":75},[52,139490,292],{"class":79},[52,139492,139493],{"class":62},"\"密码\"",[52,139495,53957],{"class":79},[52,139497,139498,139500,139502,139504,139506,139508,139511,139513],{"class":54,"line":91},[52,139499,54794],{"class":79},[52,139501,56537],{"class":53950},[52,139503,56474],{"class":75},[52,139505,292],{"class":79},[52,139507,69298],{"class":62},[52,139509,139510],{"class":79},">提交\u003C\u002F",[52,139512,56537],{"class":53950},[52,139514,53957],{"class":79},[52,139516,139517,139519,139521],{"class":54,"line":98},[52,139518,54435],{"class":79},[52,139520,69275],{"class":53950},[52,139522,53957],{"class":79},[4509,139524],{"style":129058,"src":139525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,139527,139528],{},"value是表单域的内容",[14,139530,139531],{},"例子2：",[42,139533,139534],{"className":129949,"code":139414,"language":129951,"meta":47,"style":47},[49,139535,139536,139556,139582,139608,139626],{"__ignoreMap":47},[52,139537,139538,139540,139542,139544,139546,139548,139550,139552,139554],{"class":54,"line":55},[52,139539,698],{"class":79},[52,139541,69275],{"class":53950},[52,139543,69278],{"class":75},[52,139545,292],{"class":79},[52,139547,139429],{"class":62},[52,139549,139432],{"class":75},[52,139551,292],{"class":79},[52,139553,139437],{"class":62},[52,139555,53957],{"class":79},[52,139557,139558,139560,139562,139564,139566,139568,139570,139572,139574,139576,139578,139580],{"class":54,"line":66},[52,139559,54794],{"class":79},[52,139561,56471],{"class":53950},[52,139563,56474],{"class":75},[52,139565,292],{"class":79},[52,139567,65349],{"class":62},[52,139569,17568],{"class":75},[52,139571,292],{"class":79},[52,139573,139380],{"class":62},[52,139575,63670],{"class":75},[52,139577,292],{"class":79},[52,139579,139464],{"class":62},[52,139581,53957],{"class":79},[52,139583,139584,139586,139588,139590,139592,139594,139596,139598,139600,139602,139604,139606],{"class":54,"line":83},[52,139585,54794],{"class":79},[52,139587,56471],{"class":53950},[52,139589,56474],{"class":75},[52,139591,292],{"class":79},[52,139593,139479],{"class":62},[52,139595,17568],{"class":75},[52,139597,292],{"class":79},[52,139599,139486],{"class":62},[52,139601,63670],{"class":75},[52,139603,292],{"class":79},[52,139605,139493],{"class":62},[52,139607,53957],{"class":79},[52,139609,139610,139612,139614,139616,139618,139620,139622,139624],{"class":54,"line":91},[52,139611,54794],{"class":79},[52,139613,56537],{"class":53950},[52,139615,56474],{"class":75},[52,139617,292],{"class":79},[52,139619,69298],{"class":62},[52,139621,139510],{"class":79},[52,139623,56537],{"class":53950},[52,139625,53957],{"class":79},[52,139627,139628,139630,139632],{"class":54,"line":98},[52,139629,54435],{"class":79},[52,139631,69275],{"class":53950},[52,139633,53957],{"class":79},[4509,139635],{"style":129058,"src":139636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[18,139638,139640],{"id":139639},"_142-css新特性","14.2 CSS新特性",[3195,139642,139644],{"id":139643},"_1421-新增选择器","14.2.1 新增选择器",[24646,139646,139648],{"id":139647},"_14211-属性选择器","14.2.1.1 属性选择器",[4509,139650],{"style":129058,"src":139651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[42,139653,139655],{"className":129202,"code":139654,"language":129204,"meta":47,"style":47},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[49,139656,139657,139672,139688],{"__ignoreMap":47},[52,139658,139659,139661,139663,139665,139667,139669],{"class":54,"line":55},[52,139660,56471],{"class":53950},[52,139662,4080],{"class":79},[52,139664,105757],{"class":75},[52,139666,292],{"class":58},[52,139668,65349],{"class":62},[52,139670,139671],{"class":79},"] {\n",[52,139673,139674,139676,139678,139680,139682,139684,139686],{"class":54,"line":66},[52,139675,73546],{"class":308},[52,139677,54087],{"class":79},[52,139679,629],{"class":308},[52,139681,54142],{"class":58},[52,139683,54171],{"class":308},[52,139685,132782],{"class":308},[52,139687,80],{"class":79},[52,139689,139690],{"class":54,"line":83},[52,139691,452],{"class":79},[4509,139693],{"style":129058,"src":139694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,139696,3252],{},[29,139698,139699,139702,139705,139708],{},[32,139700,139701],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[32,139703,139704],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[32,139706,139707],{},"属性选择器也可以选择出来自定义的属性",[32,139709,139710,139712],{},[2389,139711,1453],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[24646,139714,139716],{"id":139715},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[4509,139718],{"style":129058,"src":139719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[1696,139721,139722],{},[32,139723,139724],{},"fist-child",[42,139726,139728],{"className":129202,"code":139727,"language":129204,"meta":47,"style":47},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[49,139729,139730,139735,139750,139770,139788],{"__ignoreMap":47},[52,139731,139732],{"class":54,"line":55},[52,139733,139734],{"class":94},"\u002F* 属性选择器 *\u002F\n",[52,139736,139737,139739,139741,139743,139745,139747],{"class":54,"line":66},[52,139738,56471],{"class":53950},[52,139740,4080],{"class":79},[52,139742,105757],{"class":75},[52,139744,292],{"class":58},[52,139746,65349],{"class":62},[52,139748,139749],{"class":79},"] { }\n",[52,139751,139752,139754,139756,139758,139761,139764,139767],{"class":54,"line":83},[52,139753,56471],{"class":53950},[52,139755,4080],{"class":79},[52,139757,17342],{"class":75},[52,139759,139760],{"class":58},"^=",[52,139762,139763],{"class":62},"\"icon\"",[52,139765,139766],{"class":79},"] { }  ",[52,139768,139769],{"class":94},"\u002F* 以 icon 开头 *\u002F\n",[52,139771,139772,139774,139776,139778,139781,139783,139785],{"class":54,"line":91},[52,139773,56471],{"class":53950},[52,139775,4080],{"class":79},[52,139777,17342],{"class":75},[52,139779,139780],{"class":58},"$=",[52,139782,139763],{"class":62},[52,139784,139766],{"class":79},[52,139786,139787],{"class":94},"\u002F* 以 icon 结尾 *\u002F\n",[52,139789,139790,139792,139794,139796,139799,139801,139803],{"class":54,"line":98},[52,139791,56471],{"class":53950},[52,139793,4080],{"class":79},[52,139795,17342],{"class":75},[52,139797,139798],{"class":58},"*=",[52,139800,139763],{"class":62},[52,139802,139766],{"class":79},[52,139804,139805],{"class":94},"\u002F* 包含 icon *\u002F\n",[14,139807,139808],{},"ul的第一个儿子文本为红色",[14,139810,139811],{},"一定要在冒号前加空格，不然就是选中所有的了",[42,139813,139815],{"className":129202,"code":139814,"language":129204,"meta":47,"style":47},".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",[49,139816,139817,139823,139833,139837,139841,139846,139859,139872,139888,139905,139922],{"__ignoreMap":47},[52,139818,139819,139821],{"class":54,"line":55},[52,139820,129493],{"class":75},[52,139822,18220],{"class":79},[52,139824,139825,139827,139829,139831],{"class":54,"line":66},[52,139826,73555],{"class":308},[52,139828,54087],{"class":79},[52,139830,60071],{"class":308},[52,139832,80],{"class":79},[52,139834,139835],{"class":54,"line":83},[52,139836,452],{"class":79},[52,139838,139839],{"class":54,"line":91},[52,139840,138663],{"class":79},[52,139842,139843],{"class":54,"line":98},[52,139844,139845],{"class":94},"\u002F* 结构伪类选择器 *\u002F\n",[52,139847,139848,139850,139853,139856],{"class":54,"line":107},[52,139849,32],{"class":53950},[52,139851,139852],{"class":75},":first-child",[52,139854,139855],{"class":79}," { }           ",[52,139857,139858],{"class":94},"\u002F* 第一个 *\u002F\n",[52,139860,139861,139863,139866,139869],{"class":54,"line":113},[52,139862,32],{"class":53950},[52,139864,139865],{"class":75},":last-child",[52,139867,139868],{"class":79}," { }            ",[52,139870,139871],{"class":94},"\u002F* 最后一个 *\u002F\n",[52,139873,139874,139876,139878,139880,139882,139885],{"class":54,"line":119},[52,139875,32],{"class":53950},[52,139877,132116],{"class":75},[52,139879,1216],{"class":79},[52,139881,564],{"class":308},[52,139883,139884],{"class":79},") { }          ",[52,139886,139887],{"class":94},"\u002F* 第2个 *\u002F\n",[52,139889,139890,139892,139894,139896,139899,139902],{"class":54,"line":126},[52,139891,32],{"class":53950},[52,139893,132116],{"class":75},[52,139895,1216],{"class":79},[52,139897,139898],{"class":308},"2n",[52,139900,139901],{"class":79},") { }         ",[52,139903,139904],{"class":94},"\u002F* 偶数 *\u002F\n",[52,139906,139907,139909,139911,139913,139916,139919],{"class":54,"line":132},[52,139908,32],{"class":53950},[52,139910,132116],{"class":75},[52,139912,1216],{"class":79},[52,139914,139915],{"class":308},"2n+1",[52,139917,139918],{"class":79},") { }       ",[52,139920,139921],{"class":94},"\u002F* 奇数 *\u002F\n",[52,139923,139924,139926,139928,139930,139933,139935],{"class":54,"line":138},[52,139925,32],{"class":53950},[52,139927,132116],{"class":75},[52,139929,1216],{"class":79},[52,139931,139932],{"class":308},"-n+3",[52,139934,139918],{"class":79},[52,139936,139937],{"class":94},"\u002F* 前3个 *\u002F\n",[54261,139939,139942],{"className":139940},[139941],"example","\n  示例内容\n",[14,139944,139945],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[29,139947,139948],{},[32,139949,139950,139953],{},[49,139951,139952],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,139955,139956],{},"也就是说它选择的是熊大",[1696,139958,139959],{"start":107},[32,139960,139961],{},"权重",[42,139963,139965],{"className":129202,"code":139964,"language":129204,"meta":47,"style":47},"\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",[49,139966,139967,139971,139981,139991,140005,140019,140033],{"__ignoreMap":47},[52,139968,139969],{"class":54,"line":55},[52,139970,139845],{"class":94},[52,139972,139973,139975,139977,139979],{"class":54,"line":66},[52,139974,32],{"class":53950},[52,139976,139852],{"class":75},[52,139978,139855],{"class":79},[52,139980,139858],{"class":94},[52,139982,139983,139985,139987,139989],{"class":54,"line":83},[52,139984,32],{"class":53950},[52,139986,139865],{"class":75},[52,139988,139868],{"class":79},[52,139990,139871],{"class":94},[52,139992,139993,139995,139997,139999,140001,140003],{"class":54,"line":91},[52,139994,32],{"class":53950},[52,139996,132116],{"class":75},[52,139998,1216],{"class":79},[52,140000,564],{"class":308},[52,140002,139884],{"class":79},[52,140004,139887],{"class":94},[52,140006,140007,140009,140011,140013,140015,140017],{"class":54,"line":98},[52,140008,32],{"class":53950},[52,140010,132116],{"class":75},[52,140012,1216],{"class":79},[52,140014,139898],{"class":308},[52,140016,139901],{"class":79},[52,140018,139904],{"class":94},[52,140020,140021,140023,140025,140027,140029,140031],{"class":54,"line":107},[52,140022,32],{"class":53950},[52,140024,132116],{"class":75},[52,140026,1216],{"class":79},[52,140028,139915],{"class":308},[52,140030,139918],{"class":79},[52,140032,139921],{"class":94},[52,140034,140035,140037,140039,140041,140043,140045],{"class":54,"line":113},[52,140036,32],{"class":53950},[52,140038,132116],{"class":75},[52,140040,1216],{"class":79},[52,140042,139932],{"class":308},[52,140044,139918],{"class":79},[52,140046,139937],{"class":94},[14,140048,140049],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[24646,140051,140053],{"id":140052},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,140055,140056],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[4509,140058],{"style":129058,"src":140059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[1696,140061,140062],{},[32,140063,3252],{},[29,140065,140066,140069,140072,140075,140078,140081],{},[32,140067,140068],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[32,140070,140071],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[32,140073,140074],{},"语法： element::before {}",[32,140076,140077],{},"before 和 after 必须有 content 属性",[32,140079,140080],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[32,140082,140083],{},"伪元素选择器和标签选择器一样，权重为 1",[1696,140085,140086],{"start":66},[32,140087,140088],{},"实例",[42,140090,140091],{"className":129202,"code":139964,"language":129204,"meta":47,"style":47},[49,140092,140093,140097,140107,140117,140131,140145,140159],{"__ignoreMap":47},[52,140094,140095],{"class":54,"line":55},[52,140096,139845],{"class":94},[52,140098,140099,140101,140103,140105],{"class":54,"line":66},[52,140100,32],{"class":53950},[52,140102,139852],{"class":75},[52,140104,139855],{"class":79},[52,140106,139858],{"class":94},[52,140108,140109,140111,140113,140115],{"class":54,"line":83},[52,140110,32],{"class":53950},[52,140112,139865],{"class":75},[52,140114,139868],{"class":79},[52,140116,139871],{"class":94},[52,140118,140119,140121,140123,140125,140127,140129],{"class":54,"line":91},[52,140120,32],{"class":53950},[52,140122,132116],{"class":75},[52,140124,1216],{"class":79},[52,140126,564],{"class":308},[52,140128,139884],{"class":79},[52,140130,139887],{"class":94},[52,140132,140133,140135,140137,140139,140141,140143],{"class":54,"line":98},[52,140134,32],{"class":53950},[52,140136,132116],{"class":75},[52,140138,1216],{"class":79},[52,140140,139898],{"class":308},[52,140142,139901],{"class":79},[52,140144,139904],{"class":94},[52,140146,140147,140149,140151,140153,140155,140157],{"class":54,"line":107},[52,140148,32],{"class":53950},[52,140150,132116],{"class":75},[52,140152,1216],{"class":79},[52,140154,139915],{"class":308},[52,140156,139918],{"class":79},[52,140158,139921],{"class":94},[52,140160,140161,140163,140165,140167,140169,140171],{"class":54,"line":113},[52,140162,32],{"class":53950},[52,140164,132116],{"class":75},[52,140166,1216],{"class":79},[52,140168,139932],{"class":308},[52,140170,139918],{"class":79},[52,140172,139937],{"class":94},[4509,140174],{"style":129058,"src":140175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[1696,140177,140178],{"start":83},[32,140179,140180],{},"使用场景1",[4509,140182],{"style":129058,"src":140183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,140185,140186],{},"不需要再加盒子来整红色那部分了",[42,140188,140190],{"className":129202,"code":140189,"language":129204,"meta":47,"style":47},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[49,140191,140192,140197,140206,140217,140227,140231,140240,140251,140261],{"__ignoreMap":47},[52,140193,140194],{"class":54,"line":55},[52,140195,140196],{"class":94},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[52,140198,140199,140201,140204],{"class":54,"line":66},[52,140200,54261],{"class":53950},[52,140202,140203],{"class":75},"::before",[52,140205,18220],{"class":79},[52,140207,140208,140211,140213,140215],{"class":54,"line":83},[52,140209,140210],{"class":308},"  content",[52,140212,54087],{"class":79},[52,140214,10607],{"class":62},[52,140216,80],{"class":79},[52,140218,140219,140221,140223,140225],{"class":54,"line":91},[52,140220,130818],{"class":308},[52,140222,54087],{"class":79},[52,140224,63519],{"class":308},[52,140226,80],{"class":79},[52,140228,140229],{"class":54,"line":98},[52,140230,452],{"class":79},[52,140232,140233,140235,140238],{"class":54,"line":107},[52,140234,54261],{"class":53950},[52,140236,140237],{"class":75},"::after",[52,140239,18220],{"class":79},[52,140241,140242,140244,140246,140249],{"class":54,"line":113},[52,140243,140210],{"class":308},[52,140245,54087],{"class":79},[52,140247,140248],{"class":62},"\"→\"",[52,140250,80],{"class":79},[52,140252,140253,140255,140257,140259],{"class":54,"line":119},[52,140254,73555],{"class":308},[52,140256,54087],{"class":79},[52,140258,64720],{"class":308},[52,140260,80],{"class":79},[52,140262,140263],{"class":54,"line":126},[52,140264,452],{"class":79},[4509,140266],{"style":129058,"src":140267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,140269,140270],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[4509,140272],{"style":129058,"src":140273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,140275,140276],{},"但是在引用时需要先转义一下",[14,140278,140279],{},"content='\\e930'",[1696,140281,140282],{"start":91},[32,140283,140284],{},"使用场景2",[14,140286,140287],{},"仿土豆效果",[14,140289,140290],{},"通过使用伪元素选择器可以减少body中盒子的数量",[42,140292,140293],{"className":129202,"code":140189,"language":129204,"meta":47,"style":47},[49,140294,140295,140299,140307,140317,140327,140331,140339,140349,140359],{"__ignoreMap":47},[52,140296,140297],{"class":54,"line":55},[52,140298,140196],{"class":94},[52,140300,140301,140303,140305],{"class":54,"line":66},[52,140302,54261],{"class":53950},[52,140304,140203],{"class":75},[52,140306,18220],{"class":79},[52,140308,140309,140311,140313,140315],{"class":54,"line":83},[52,140310,140210],{"class":308},[52,140312,54087],{"class":79},[52,140314,10607],{"class":62},[52,140316,80],{"class":79},[52,140318,140319,140321,140323,140325],{"class":54,"line":91},[52,140320,130818],{"class":308},[52,140322,54087],{"class":79},[52,140324,63519],{"class":308},[52,140326,80],{"class":79},[52,140328,140329],{"class":54,"line":98},[52,140330,452],{"class":79},[52,140332,140333,140335,140337],{"class":54,"line":107},[52,140334,54261],{"class":53950},[52,140336,140237],{"class":75},[52,140338,18220],{"class":79},[52,140340,140341,140343,140345,140347],{"class":54,"line":113},[52,140342,140210],{"class":308},[52,140344,54087],{"class":79},[52,140346,140248],{"class":62},[52,140348,80],{"class":79},[52,140350,140351,140353,140355,140357],{"class":54,"line":119},[52,140352,73555],{"class":308},[52,140354,54087],{"class":79},[52,140356,64720],{"class":308},[52,140358,80],{"class":79},[52,140360,140361],{"class":54,"line":126},[52,140362,452],{"class":79},[4509,140364],{"style":129058,"src":140365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[1696,140367,140368],{"start":98},[32,140369,140370],{},"使用场景3",[14,140372,140373],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[42,140375,140377],{"className":129202,"code":140376,"language":129204,"meta":47,"style":47},".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",[49,140378,140379,140385,140395,140399,140403,140407,140415,140425,140435,140439,140447,140457,140467],{"__ignoreMap":47},[52,140380,140381,140383],{"class":54,"line":55},[52,140382,133050],{"class":75},[52,140384,18220],{"class":79},[52,140386,140387,140389,140391,140393],{"class":54,"line":66},[52,140388,133682],{"class":308},[52,140390,54087],{"class":79},[52,140392,26385],{"class":308},[52,140394,80],{"class":79},[52,140396,140397],{"class":54,"line":83},[52,140398,452],{"class":79},[52,140400,140401],{"class":54,"line":91},[52,140402,138663],{"class":79},[52,140404,140405],{"class":54,"line":98},[52,140406,140196],{"class":94},[52,140408,140409,140411,140413],{"class":54,"line":107},[52,140410,54261],{"class":53950},[52,140412,140203],{"class":75},[52,140414,18220],{"class":79},[52,140416,140417,140419,140421,140423],{"class":54,"line":113},[52,140418,140210],{"class":308},[52,140420,54087],{"class":79},[52,140422,10607],{"class":62},[52,140424,80],{"class":79},[52,140426,140427,140429,140431,140433],{"class":54,"line":119},[52,140428,130818],{"class":308},[52,140430,54087],{"class":79},[52,140432,63519],{"class":308},[52,140434,80],{"class":79},[52,140436,140437],{"class":54,"line":126},[52,140438,452],{"class":79},[52,140440,140441,140443,140445],{"class":54,"line":132},[52,140442,54261],{"class":53950},[52,140444,140237],{"class":75},[52,140446,18220],{"class":79},[52,140448,140449,140451,140453,140455],{"class":54,"line":138},[52,140450,140210],{"class":308},[52,140452,54087],{"class":79},[52,140454,140248],{"class":62},[52,140456,80],{"class":79},[52,140458,140459,140461,140463,140465],{"class":54,"line":144},[52,140460,73555],{"class":308},[52,140462,54087],{"class":79},[52,140464,64720],{"class":308},[52,140466,80],{"class":79},[52,140468,140469],{"class":54,"line":153},[52,140470,452],{"class":79},[14,140472,140473],{},"div {\nmargin: 0 auto;\n}",[42,140475,140478],{"className":140476,"code":140477,"language":8154},[8152],"\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",[49,140479,140477],{"__ignoreMap":47},[14,140481,140482],{},"如果想让多个元素都发生变化",[14,140484,140485],{},"不能如下操作：",[14,140487,140488],{},"transition: width 2s ease 0.5s;",[14,140490,140491],{},"transition: height 2s ease 0.5s;不对！！！",[14,140493,140494],{},"上方会样式冲突，导致不显示任何过渡效果",[14,140496,140497],{},"使用如下：加逗号隔开",[14,140499,140500],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,140502,140503],{},"transition all 2s ease;",[3195,140505,140507],{"id":140506},"_1426-过渡练习","14.2.6 过渡练习",[1696,140509,140510],{},[32,140511,140512],{},"进度条",[4509,140514],{"style":129058,"src":140515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[42,140517,140519],{"className":129202,"code":140518,"language":129204,"meta":47,"style":47},"div {\n  transition: all 0.3s ease;\n}\n",[49,140520,140521,140527,140545],{"__ignoreMap":47},[52,140522,140523,140525],{"class":54,"line":55},[52,140524,54261],{"class":53950},[52,140526,18220],{"class":79},[52,140528,140529,140532,140534,140536,140539,140541,140543],{"class":54,"line":66},[52,140530,140531],{"class":308},"  transition",[52,140533,54087],{"class":79},[52,140535,30771],{"class":308},[52,140537,140538],{"class":308}," 0.3",[52,140540,1291],{"class":58},[52,140542,81330],{"class":308},[52,140544,80],{"class":79},[52,140546,140547],{"class":54,"line":83},[52,140548,452],{"class":79},[1696,140550,140551],{"start":66},[32,140552,140553],{},"小米logo",[14,140555,140556],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[42,140558,140560],{"className":129202,"code":140559,"language":129204,"meta":47,"style":47},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[49,140561,140562,140567,140573,140589,140594],{"__ignoreMap":47},[52,140563,140564],{"class":54,"line":55},[52,140565,140566],{"class":94},"\u002F* CSS3 过渡 *\u002F\n",[52,140568,140569,140571],{"class":54,"line":66},[52,140570,54261],{"class":53950},[52,140572,18220],{"class":79},[52,140574,140575,140577,140579,140581,140583,140585,140587],{"class":54,"line":83},[52,140576,140531],{"class":308},[52,140578,54087],{"class":79},[52,140580,30771],{"class":308},[52,140582,140538],{"class":308},[52,140584,1291],{"class":58},[52,140586,81330],{"class":308},[52,140588,80],{"class":79},[52,140590,140591],{"class":54,"line":91},[52,140592,140593],{"class":94},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[52,140595,140596],{"class":54,"line":98},[52,140597,452],{"class":79},[14,140599,140600],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[3141,140602,140603],{},"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":47,"searchDepth":66,"depth":66,"links":140605},[140606,140611],{"id":138936,"depth":66,"text":138937,"children":140607},[140608,140609,140610],{"id":138940,"depth":83,"text":138941},{"id":139017,"depth":83,"text":139018},{"id":139348,"depth":83,"text":139349},{"id":139639,"depth":66,"text":139640,"children":140612},[140613,140614],{"id":139643,"depth":83,"text":139644},{"id":140506,"depth":83,"text":140507},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138928,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":140621,"title":140622,"body":140623,"description":26025,"extension":3153,"meta":142367,"navigation":122,"path":142368,"seo":142369,"stem":142370,"__hash__":142371},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":140624,"toc":142348},[140625,140628,140632,140635,140641,140647,140651,140653,140656,140659,140662,140665,140668,140671,140674,140678,140682,140685,140688,140691,140695,140698,140701,140706,140709,140712,140715,140719,140722,140731,140734,140737,140741,140744,140747,140752,140759,140773,140781,140788,140793,140796,140799,140802,140809,140813,140819,140825,140828,140831,140836,140842,140844,140852,140857,140860,140866,140868,140873,140878,140881,140883,140888,140891,140896,140901,140935,140939,140943,140946,140950,140953,141039,141042,141079,141082,141118,141122,141127,141140,141194,141196,141224,141226,141254,141260,141274,141276,141320,141322,141366,141369,141376,141387,141389,141416,141418,141444,141451,141467,141469,141563,141565,141659,141666,141669,141674,141680,141754,141757,141759,141795,141797,141833,141836,141843,141862,141865,141868,141870,141895,141897,141921,141924,141927,141957,141961,141964,142027,142029,142095,142097,142161,142164,142196,142198,142224,142226,142252,142255,142286,142288,142314,142316,142342,142345],[10,140626,140622],{"id":140627},"_15-品优购项目上篇-搭建与公共模块",[18,140629,140631],{"id":140630},"_151-项目规划","15.1 项目规划",[4509,140633],{"style":129058,"src":140634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,140636,140637,140640],{},[2389,140638,140639],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,140642,140643,140646],{},[2389,140644,140645],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[18,140648,140650],{"id":140649},"_152-项目介绍","15.2 项目介绍",[14,140652,140639],{},[4509,140654],{"style":129058,"src":140655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,140657,140658],{},"主页：",[4509,140660],{"style":129058,"src":140661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,140663,140664],{},"列表页：",[4509,140666],{"style":129058,"src":140667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,140669,140670],{},"注册页：",[4509,140672],{"style":129058,"src":140673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[18,140675,140677],{"id":140676},"_153-项目搭建工作","15.3 项目搭建工作",[3195,140679,140681],{"id":140680},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[4509,140683],{"style":129058,"src":140684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,140686,140687],{},"经常更换的图片要放到upload文件夹中",[14,140689,140690],{},"不经常换的放到images文件夹中",[3195,140692,140694],{"id":140693},"_1532-创建文件如下","15.3.2 创建文件如下",[4509,140696],{"style":129058,"src":140697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[4509,140699],{"style":129058,"src":140700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,140702,140703],{},[2389,140704,140705],{},"初始化样式：",[14,140707,140708],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,140710,140711],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,140713,140714],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[3195,140716,140718],{"id":140717},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,140720,140721],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,140723,140724,140725,140730],{},"这里最典型的应用就是 ",[2389,140726,140727],{},[49,140728,140729],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[4509,140732],{"style":129058,"src":140733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,140735,140736],{},"通过link方法来引入",[3195,140738,140740],{"id":140739},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[4509,140742],{"style":129058,"src":140743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,140745,140746],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[1696,140748,140749],{},[32,140750,140751],{},"制作favicon图标",[14,140753,140754,140755,140758],{},"①把品优购图标切成 ",[49,140756,140757],{},"png"," 图片",[14,140760,140761,140762,140764,140765,140768,140769],{},"②把 ",[49,140763,140757],{}," 图片转换为 ",[49,140766,140767],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[3451,140770,140771],{"href":140771,"rel":140772},"http:\u002F\u002Fwww.bitbug.net\u002F",[26514],[1696,140774,140775,140778],{"start":66},[32,140776,140777],{},"favicon图标放到网站根目录下",[32,140779,140780],{},"HTML页面引入favicon",[14,140782,140783,140784,140787],{},"在html 页面里面的 ",[49,140785,140786],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,140789,140790],{},[49,140791,140792],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,140794,140795],{},"复制这行代码或者在生成这个的网站进行复制",[4509,140797],{"style":129058,"src":140798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,140800,140801],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,140803,140804,140805],{},"例如:",[3451,140806,140807],{"href":140807,"rel":140808},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[26514],[3195,140810,140812],{"id":140811},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,140814,140815,140818],{},[2389,140816,140817],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,140820,140821,140824],{},[2389,140822,140823],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,140826,140827],{},"页面必须有三个标签用来符合 SEO 优化",[4509,140829],{"style":129058,"src":140830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[1696,140832,140833],{},[32,140834,140835],{},"title网站标题",[14,140837,140838,140841],{},[2389,140839,140840],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,140843,71440],{},[29,140845,140846,140849],{},[32,140847,140848],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[32,140850,140851],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[1696,140853,140854],{"start":66},[32,140855,140856],{},"description网站描述",[14,140858,140859],{},"简要说明我们网站主要是做什么的",[14,140861,140862,140865],{},[2389,140863,140864],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,140867,71440],{},[14,140869,140870],{},[49,140871,140872],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[1696,140874,140875],{"start":83},[32,140876,140877],{},"keywords关键词",[14,140879,140880],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,140882,71440],{},[14,140884,140885],{},[49,140886,140887],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,140889,140890],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,140892,140893],{},[2389,140894,140895],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[1696,140897,140898],{"start":91},[32,140899,140900],{},"代码总结",[42,140902,140903],{"className":129949,"code":133306,"language":129951,"meta":47,"style":47},[49,140904,140905,140909,140923,140927],{"__ignoreMap":47},[52,140906,140907],{"class":54,"line":55},[52,140908,133313],{"class":94},[52,140910,140911,140913,140915,140917,140919,140921],{"class":54,"line":66},[52,140912,698],{"class":79},[52,140914,54261],{"class":53950},[52,140916,56136],{"class":75},[52,140918,292],{"class":79},[52,140920,133326],{"class":62},[52,140922,53957],{"class":79},[52,140924,140925],{"class":54,"line":83},[52,140926,133333],{"class":79},[52,140928,140929,140931,140933],{"class":54,"line":91},[52,140930,54435],{"class":79},[52,140932,54261],{"class":53950},[52,140934,53957],{"class":79},[18,140936,140938],{"id":140937},"_154-项目公共部分制作","15.4 项目公共部分制作",[3195,140940,140942],{"id":140941},"_1541-常用模块类命名","15.4.1 常用模块类命名",[4509,140944],{"style":129058,"src":140945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[3195,140947,140949],{"id":140948},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,140951,140952],{},"布局思路：",[29,140954,140955,140958,140961,140983,141016],{},[32,140956,140957],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[32,140959,140960],{},"里面包含版心的盒子",[32,140962,140963,140964],{},"版心盒子里面包含 1 号左侧盒子左浮动",[29,140965,140966,140974,140980],{},[32,140967,140968,140969,24148,140971,140973],{},"1 号盒子 里面包含一个",[49,140970,29],{},[49,140972,29],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[32,140975,140976,140977,140979],{},"里面的内容是水平排列，所以需要给",[49,140978,32],{},"设置浮动",[32,140981,140982],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[32,140984,140985,140986],{},"版心盒子里面包含 2 号右侧盒子右浮动",[29,140987,140988,141002,141007],{},[32,140989,140990,140991,24148,140993,140995,140996,140998,140999,141001],{},"2 号盒子 里面包含一个",[49,140992,29],{},[49,140994,29],{},"包裹",[49,140997,32],{},"，中间的",[49,141000,4108],{},"可以用样式去设置，也可以用字符 |",[32,141003,141004,141005,140979],{},"里面内容水平排列，给",[49,141006,32],{},[32,141008,141009,141010,141012,141013,141015],{},"找到里面所有偶数的 ",[49,141011,32],{}," 设置样式（偶数的 ",[49,141014,32],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[32,141017,141018,141019],{},"需要用到字体图标",[29,141020,141021,141027,141030,141033,141036],{},[32,141022,141023,141024],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[49,141025,141026],{},"arrow-icon",[32,141028,141029],{},"先要引入字体图片的资源",[32,141031,141032],{},"在样式里面利用 font-face 来进行声明",[32,141034,141035],{},"在伪元素的 content属性设置 图标的编码",[32,141037,141038],{},"给伪元素设置font-family属性",[14,141040,141041],{},"结构实例代码：",[42,141043,141045],{"className":129202,"code":141044,"language":129204,"meta":47,"style":47},"div::before {\n  content: \"\";\n  display: block;\n}\n",[49,141046,141047,141055,141065,141075],{"__ignoreMap":47},[52,141048,141049,141051,141053],{"class":54,"line":55},[52,141050,54261],{"class":53950},[52,141052,140203],{"class":75},[52,141054,18220],{"class":79},[52,141056,141057,141059,141061,141063],{"class":54,"line":66},[52,141058,140210],{"class":308},[52,141060,54087],{"class":79},[52,141062,10607],{"class":62},[52,141064,80],{"class":79},[52,141066,141067,141069,141071,141073],{"class":54,"line":83},[52,141068,130818],{"class":308},[52,141070,54087],{"class":79},[52,141072,63519],{"class":308},[52,141074,80],{"class":79},[52,141076,141077],{"class":54,"line":91},[52,141078,452],{"class":79},[14,141080,141081],{},"样式实例代码：",[42,141083,141084],{"className":129202,"code":141044,"language":129204,"meta":47,"style":47},[49,141085,141086,141094,141104,141114],{"__ignoreMap":47},[52,141087,141088,141090,141092],{"class":54,"line":55},[52,141089,54261],{"class":53950},[52,141091,140203],{"class":75},[52,141093,18220],{"class":79},[52,141095,141096,141098,141100,141102],{"class":54,"line":66},[52,141097,140210],{"class":308},[52,141099,54087],{"class":79},[52,141101,10607],{"class":62},[52,141103,80],{"class":79},[52,141105,141106,141108,141110,141112],{"class":54,"line":83},[52,141107,130818],{"class":308},[52,141109,54087],{"class":79},[52,141111,63519],{"class":308},[52,141113,80],{"class":79},[52,141115,141116],{"class":54,"line":91},[52,141117,452],{"class":79},[3195,141119,141121],{"id":141120},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[29,141123,141124],{},[32,141125,141126],{},"header 盒子必须要有高度",[14,141128,141129,141130,141132,141133],{},"1 号盒子是 ",[49,141131,134214],{}," 标志定位，在正常开发过程中， ",[2389,141134,141135,141136,141139],{},"logo的布局其实是有讲究的，需要进行 ",[49,141137,141138],{},"logoSEO","的优化 （★★★）",[29,141141,141142,141150,141158,141185],{},[32,141143,141144,141146,141147,141149],{},[49,141145,134214],{}," 里面首先放一个 ",[49,141148,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[32,141151,141152,141154,141155,141157],{},[49,141153,10],{}," 里面再放一个链接，可以返回首页的，把 ",[49,141156,134214],{}," 的背景图片给链接即可",[32,141159,141160,141161],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[29,141162,141163,141178],{},[32,141164,141165,141166,141169,141170,141173,141174,141177],{},"方法1：",[49,141167,141168],{},"text-indent"," 移到盒子外面（",[49,141171,141172],{},"text-indent: -9999px",") ，然后 ",[49,141175,141176],{},"overflow:hidden"," ，淘宝的做法",[32,141179,141180,141181,141184],{},"方法2：直接给 ",[49,141182,141183],{},"font-size: 0;"," 就看不到文字了，京东的做法",[32,141186,141187,141188,141190,141191,141193],{},"最后给链接一个 ",[49,141189,54057],{}," 属性，这样鼠标放到 ",[49,141192,134214],{}," 上就可以看到提示文字了",[14,141195,141041],{},[42,141197,141198],{"className":129949,"code":134435,"language":129951,"meta":47,"style":47},[49,141199,141200],{"__ignoreMap":47},[52,141201,141202,141204,141206,141208,141210,141212,141214,141216,141218,141220,141222],{"class":54,"line":55},[52,141203,698],{"class":79},[52,141205,3451],{"class":53950},[52,141207,63707],{"class":75},[52,141209,292],{"class":79},[52,141211,134450],{"class":62},[52,141213,134453],{"class":75},[52,141215,292],{"class":79},[52,141217,134458],{"class":62},[52,141219,134461],{"class":79},[52,141221,3451],{"class":53950},[52,141223,53957],{"class":79},[14,141225,141081],{},[42,141227,141228],{"className":129949,"code":134435,"language":129951,"meta":47,"style":47},[49,141229,141230],{"__ignoreMap":47},[52,141231,141232,141234,141236,141238,141240,141242,141244,141246,141248,141250,141252],{"class":54,"line":55},[52,141233,698],{"class":79},[52,141235,3451],{"class":53950},[52,141237,63707],{"class":75},[52,141239,292],{"class":79},[52,141241,134450],{"class":62},[52,141243,134453],{"class":75},[52,141245,292],{"class":79},[52,141247,134458],{"class":62},[52,141249,134461],{"class":79},[52,141251,3451],{"class":53950},[52,141253,53957],{"class":79},[14,141255,141256,141257,141259],{},"2 号盒子是 ",[49,141258,134227],{}," 搜索模块定位",[29,141261,141262,141265,141268,141271],{},[32,141263,141264],{},"search盒子利用定位的方式放在对应的位置",[32,141266,141267],{},"search盒子设置绝对定位，header盒子设置相对定位",[32,141269,141270],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[32,141272,141273],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,141275,141041],{},[42,141277,141278],{"className":129202,"code":134522,"language":129204,"meta":47,"style":47},[49,141279,141280,141302,141306,141316],{"__ignoreMap":47},[52,141281,141282,141284,141286,141288,141290,141292,141294,141296,141298,141300],{"class":54,"line":55},[52,141283,54261],{"class":53950},[52,141285,15083],{"class":79},[52,141287,14],{"class":53950},[52,141289,15083],{"class":79},[52,141291,10],{"class":53950},[52,141293,15083],{"class":79},[52,141295,29],{"class":53950},[52,141297,15083],{"class":79},[52,141299,32],{"class":53950},[52,141301,18220],{"class":79},[52,141303,141304],{"class":54,"line":66},[52,141305,134551],{"class":94},[52,141307,141308,141310,141312,141314],{"class":54,"line":83},[52,141309,130818],{"class":308},[52,141311,54087],{"class":79},[52,141313,63519],{"class":308},[52,141315,80],{"class":79},[52,141317,141318],{"class":54,"line":91},[52,141319,452],{"class":79},[14,141321,141081],{},[42,141323,141324],{"className":129202,"code":134522,"language":129204,"meta":47,"style":47},[49,141325,141326,141348,141352,141362],{"__ignoreMap":47},[52,141327,141328,141330,141332,141334,141336,141338,141340,141342,141344,141346],{"class":54,"line":55},[52,141329,54261],{"class":53950},[52,141331,15083],{"class":79},[52,141333,14],{"class":53950},[52,141335,15083],{"class":79},[52,141337,10],{"class":53950},[52,141339,15083],{"class":79},[52,141341,29],{"class":53950},[52,141343,15083],{"class":79},[52,141345,32],{"class":53950},[52,141347,18220],{"class":79},[52,141349,141350],{"class":54,"line":66},[52,141351,134551],{"class":94},[52,141353,141354,141356,141358,141360],{"class":54,"line":83},[52,141355,130818],{"class":308},[52,141357,54087],{"class":79},[52,141359,63519],{"class":308},[52,141361,80],{"class":79},[52,141363,141364],{"class":54,"line":91},[52,141365,452],{"class":79},[14,141367,141368],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,141370,141371,141372,141375],{},"3 号盒子是 ",[49,141373,141374],{},"hotwords"," 热词模块定位",[29,141377,141378,141381,141384],{},[32,141379,141380],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[32,141382,141383],{},"给里面所有的a标签设置 左右10px的外边距",[32,141385,141386],{},"给第一个a标签设置文字变红色（#c81623）",[14,141388,141041],{},[42,141390,141392],{"className":129202,"code":141391,"language":129204,"meta":47,"style":47},"div {\n  margin: 0 auto;\n}\n",[49,141393,141394,141400,141412],{"__ignoreMap":47},[52,141395,141396,141398],{"class":54,"line":55},[52,141397,54261],{"class":53950},[52,141399,18220],{"class":79},[52,141401,141402,141404,141406,141408,141410],{"class":54,"line":66},[52,141403,73120],{"class":308},[52,141405,54087],{"class":79},[52,141407,692],{"class":308},[52,141409,54206],{"class":308},[52,141411,80],{"class":79},[52,141413,141414],{"class":54,"line":83},[52,141415,452],{"class":79},[14,141417,141081],{},[42,141419,141420],{"className":129202,"code":141391,"language":129204,"meta":47,"style":47},[49,141421,141422,141428,141440],{"__ignoreMap":47},[52,141423,141424,141426],{"class":54,"line":55},[52,141425,54261],{"class":53950},[52,141427,18220],{"class":79},[52,141429,141430,141432,141434,141436,141438],{"class":54,"line":66},[52,141431,73120],{"class":308},[52,141433,54087],{"class":79},[52,141435,692],{"class":308},[52,141437,54206],{"class":308},[52,141439,80],{"class":79},[52,141441,141442],{"class":54,"line":83},[52,141443,452],{"class":79},[14,141445,141446,141447,141450],{},"4 号盒子是 ",[49,141448,141449],{},"shopcar"," 购物车模块",[29,141452,141453,141458,141461,141464],{},[32,141454,125985,141455,141457],{},[49,141456,141449],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[32,141459,141460],{},"count 统计部分用绝对定位做",[32,141462,141463],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[32,141465,141466],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,141468,141041],{},[42,141470,141471],{"className":129202,"code":134634,"language":129204,"meta":47,"style":47},[49,141472,141473,141477,141491,141495,141509,141513,141527,141531,141545,141549],{"__ignoreMap":47},[52,141474,141475],{"class":54,"line":55},[52,141476,134641],{"class":94},[52,141478,141479,141481,141483,141485,141487,141489],{"class":54,"line":66},[52,141480,134646],{"class":75},[52,141482,82457],{"class":79},[52,141484,131562],{"class":308},[52,141486,54087],{"class":79},[52,141488,134655],{"class":308},[52,141490,132132],{"class":79},[52,141492,141493],{"class":54,"line":83},[52,141494,134662],{"class":94},[52,141496,141497,141499,141501,141503,141505,141507],{"class":54,"line":91},[52,141498,134667],{"class":75},[52,141500,82457],{"class":79},[52,141502,131562],{"class":308},[52,141504,54087],{"class":79},[52,141506,57414],{"class":308},[52,141508,132132],{"class":79},[52,141510,141511],{"class":54,"line":98},[52,141512,134682],{"class":94},[52,141514,141515,141517,141519,141521,141523,141525],{"class":54,"line":107},[52,141516,134687],{"class":75},[52,141518,82457],{"class":79},[52,141520,131562],{"class":308},[52,141522,54087],{"class":79},[52,141524,57481],{"class":308},[52,141526,132132],{"class":79},[52,141528,141529],{"class":54,"line":113},[52,141530,134702],{"class":94},[52,141532,141533,141535,141537,141539,141541,141543],{"class":54,"line":119},[52,141534,134707],{"class":75},[52,141536,82457],{"class":79},[52,141538,131562],{"class":308},[52,141540,54087],{"class":79},[52,141542,88883],{"class":308},[52,141544,132132],{"class":79},[52,141546,141547],{"class":54,"line":126},[52,141548,134722],{"class":94},[52,141550,141551,141553,141555,141557,141559,141561],{"class":54,"line":132},[52,141552,134727],{"class":75},[52,141554,82457],{"class":79},[52,141556,131562],{"class":308},[52,141558,54087],{"class":79},[52,141560,134736],{"class":308},[52,141562,132132],{"class":79},[14,141564,141081],{},[42,141566,141567],{"className":129202,"code":134634,"language":129204,"meta":47,"style":47},[49,141568,141569,141573,141587,141591,141605,141609,141623,141627,141641,141645],{"__ignoreMap":47},[52,141570,141571],{"class":54,"line":55},[52,141572,134641],{"class":94},[52,141574,141575,141577,141579,141581,141583,141585],{"class":54,"line":66},[52,141576,134646],{"class":75},[52,141578,82457],{"class":79},[52,141580,131562],{"class":308},[52,141582,54087],{"class":79},[52,141584,134655],{"class":308},[52,141586,132132],{"class":79},[52,141588,141589],{"class":54,"line":83},[52,141590,134662],{"class":94},[52,141592,141593,141595,141597,141599,141601,141603],{"class":54,"line":91},[52,141594,134667],{"class":75},[52,141596,82457],{"class":79},[52,141598,131562],{"class":308},[52,141600,54087],{"class":79},[52,141602,57414],{"class":308},[52,141604,132132],{"class":79},[52,141606,141607],{"class":54,"line":98},[52,141608,134682],{"class":94},[52,141610,141611,141613,141615,141617,141619,141621],{"class":54,"line":107},[52,141612,134687],{"class":75},[52,141614,82457],{"class":79},[52,141616,131562],{"class":308},[52,141618,54087],{"class":79},[52,141620,57481],{"class":308},[52,141622,132132],{"class":79},[52,141624,141625],{"class":54,"line":113},[52,141626,134702],{"class":94},[52,141628,141629,141631,141633,141635,141637,141639],{"class":54,"line":119},[52,141630,134707],{"class":75},[52,141632,82457],{"class":79},[52,141634,131562],{"class":308},[52,141636,54087],{"class":79},[52,141638,88883],{"class":308},[52,141640,132132],{"class":79},[52,141642,141643],{"class":54,"line":126},[52,141644,134722],{"class":94},[52,141646,141647,141649,141651,141653,141655,141657],{"class":54,"line":132},[52,141648,134727],{"class":75},[52,141650,82457],{"class":79},[52,141652,131562],{"class":308},[52,141654,54087],{"class":79},[52,141656,134736],{"class":308},[52,141658,132132],{"class":79},[3195,141660,141662,141663,141665],{"id":141661},"_1544-nav导航模块制作","15.4.4 ",[49,141664,56363],{},"导航模块制作",[4509,141667],{"style":129058,"src":141668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,141670,141671,141673],{},[49,141672,56363],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,141675,141676,141677],{},"1 号盒子左侧浮动，",[49,141678,141679],{},"dropdown",[29,141681,141682,141692,141700,141706,141714,141724,141732,141743],{},[32,141683,141684,141685,103668,141688,141691],{},"1号盒子有讲究，根据相关性 里面包含 ",[49,141686,141687],{},".dt",[49,141689,141690],{},".dd"," 两个盒子",[32,141693,141694,141696,141697,141699],{},[49,141695,141687],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[49,141698,141690],{}," 挤到下面去了",[32,141701,141702,141703,141705],{},"给 ",[49,141704,141690],{}," 盒子设置宽度 和 高度，以及背景颜色",[32,141707,141702,141708,141710,141711,122887],{},[49,141709,141690],{}," 盒子里面定义 无序列表 （",[49,141712,141713],{},"ul > li > a",[32,141715,141716,141717,141719,141720,141723],{},"每个 ",[49,141718,32],{}," 都有一个高度（",[49,141721,141722],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[32,141725,141702,141726,141728,141729,122887],{},[49,141727,32],{}," 里面的a设置文字大小（",[49,141730,141731],{},"14px",[32,141733,141702,141734,141736,141737,141739,141740,141742],{},[49,141735,32],{}," 设置 ",[49,141738,130363],{},"，当鼠标移入的时候，让",[49,141741,32],{},"的背景变成白色，让里面的文字变成红色",[32,141744,141745,141747,141748,141750,141751,141753],{},[49,141746,32],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[49,141749,32],{},"的右侧，那么给",[49,141752,32],{},"设置相对定位",[14,141755,141756],{},"一定要注意相关性",[14,141758,141041],{},[42,141760,141761],{"className":129202,"code":141044,"language":129204,"meta":47,"style":47},[49,141762,141763,141771,141781,141791],{"__ignoreMap":47},[52,141764,141765,141767,141769],{"class":54,"line":55},[52,141766,54261],{"class":53950},[52,141768,140203],{"class":75},[52,141770,18220],{"class":79},[52,141772,141773,141775,141777,141779],{"class":54,"line":66},[52,141774,140210],{"class":308},[52,141776,54087],{"class":79},[52,141778,10607],{"class":62},[52,141780,80],{"class":79},[52,141782,141783,141785,141787,141789],{"class":54,"line":83},[52,141784,130818],{"class":308},[52,141786,54087],{"class":79},[52,141788,63519],{"class":308},[52,141790,80],{"class":79},[52,141792,141793],{"class":54,"line":91},[52,141794,452],{"class":79},[14,141796,141081],{},[42,141798,141799],{"className":129202,"code":141044,"language":129204,"meta":47,"style":47},[49,141800,141801,141809,141819,141829],{"__ignoreMap":47},[52,141802,141803,141805,141807],{"class":54,"line":55},[52,141804,54261],{"class":53950},[52,141806,140203],{"class":75},[52,141808,18220],{"class":79},[52,141810,141811,141813,141815,141817],{"class":54,"line":66},[52,141812,140210],{"class":308},[52,141814,54087],{"class":79},[52,141816,10607],{"class":62},[52,141818,80],{"class":79},[52,141820,141821,141823,141825,141827],{"class":54,"line":83},[52,141822,130818],{"class":308},[52,141824,54087],{"class":79},[52,141826,63519],{"class":308},[52,141828,80],{"class":79},[52,141830,141831],{"class":54,"line":91},[52,141832,452],{"class":79},[14,141834,141835],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,141837,141838,141839,141842],{},"2 号盒子左侧浮动，",[49,141840,141841],{},"navitems"," 导航栏组",[29,141844,141845,141850,141859],{},[32,141846,141847,141848],{},"里面结构是 ",[49,141849,141713],{},[32,141851,141852,141853,141855,141856,141858],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[49,141854,3451],{},"左右的",[49,141857,33533],{},"把两侧撑开",[32,141860,141861],{},"让文字垂直居中（行高等于高度）",[4509,141863],{"style":129058,"src":141864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,141866,141867],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,141869,141041],{},[42,141871,141873],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},".box {\n  float: left;\n}\n",[49,141874,141875,141881,141891],{"__ignoreMap":47},[52,141876,141877,141879],{"class":54,"line":55},[52,141878,133050],{"class":75},[52,141880,18220],{"class":79},[52,141882,141883,141885,141887,141889],{"class":54,"line":66},[52,141884,133682],{"class":308},[52,141886,54087],{"class":79},[52,141888,26385],{"class":308},[52,141890,80],{"class":79},[52,141892,141893],{"class":54,"line":83},[52,141894,452],{"class":79},[14,141896,141081],{},[42,141898,141899],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,141900,141901,141907,141917],{"__ignoreMap":47},[52,141902,141903,141905],{"class":54,"line":55},[52,141904,133050],{"class":75},[52,141906,18220],{"class":79},[52,141908,141909,141911,141913,141915],{"class":54,"line":66},[52,141910,133682],{"class":308},[52,141912,54087],{"class":79},[52,141914,26385],{"class":308},[52,141916,80],{"class":79},[52,141918,141919],{"class":54,"line":83},[52,141920,452],{"class":79},[14,141922,141923],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[4509,141925],{"style":129058,"src":141926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[42,141928,141929],{"className":129202,"code":133359,"language":129204,"meta":47,"style":47},[49,141930,141931,141937,141953],{"__ignoreMap":47},[52,141932,141933,141935],{"class":54,"line":55},[52,141934,54261],{"class":53950},[52,141936,18220],{"class":79},[52,141938,141939,141941,141943,141945,141947,141949,141951],{"class":54,"line":66},[52,141940,73546],{"class":308},[52,141942,54087],{"class":79},[52,141944,629],{"class":308},[52,141946,54142],{"class":58},[52,141948,54171],{"class":308},[52,141950,132594],{"class":308},[52,141952,80],{"class":79},[52,141954,141955],{"class":54,"line":83},[52,141956,452],{"class":79},[3195,141958,141960],{"id":141959},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[4509,141962],{"style":129058,"src":141963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[29,141965,141966,141971,141976],{},[32,141967,141968,141970],{},[49,141969,134405],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[32,141972,141973,141975],{},[49,141974,134405],{}," 里面有一个大的版心",[32,141977,141978,141979,141982,141983],{},"版心里面包含 1 号盒子，",[49,141980,141981],{},"mod_service"," 是服务模块，mod 是模块的意思",[29,141984,141985,141990,142003,142019,142024],{},[32,141986,141702,141987,141989],{},[49,141988,141981],{}," 设置高度（80px）和下边框",[32,141991,141992,141993,141996,141997,141999,142000,142002],{},"在里面定义 ",[49,141994,141995],{},"ul > li"," ,每个",[49,141998,32],{}," 宽度是300px 高度是 50px，给每个",[49,142001,32],{},"设置35px的左内边距",[32,142004,142005,142006,142008,142009,142011,142012,142014,142015,21058,142017,122887],{},"在每个",[49,142007,32],{},"里面，放一个 ",[49,142010,25558],{},"（里面放图标），一个",[49,142013,54261],{},"（里面放",[49,142016,54261],{},[49,142018,14],{},[32,142020,141702,142021,142023],{},[49,142022,25558],{},"设置浮动，让h5与这个div左右排列",[32,142025,142026],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,142028,141041],{},[42,142030,142032],{"className":129202,"code":142031,"language":129204,"meta":47,"style":47},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[49,142033,142034,142040,142052,142064,142091],{"__ignoreMap":47},[52,142035,142036,142038],{"class":54,"line":55},[52,142037,136959],{"class":75},[52,142039,18220],{"class":79},[52,142041,142042,142044,142046,142048,142050],{"class":54,"line":66},[52,142043,73218],{"class":308},[52,142045,54087],{"class":79},[52,142047,444],{"class":308},[52,142049,54142],{"class":58},[52,142051,80],{"class":79},[52,142053,142054,142056,142058,142060,142062],{"class":54,"line":83},[52,142055,73438],{"class":308},[52,142057,54087],{"class":79},[52,142059,444],{"class":308},[52,142061,54142],{"class":58},[52,142063,80],{"class":79},[52,142065,142066,142068,142070,142072,142074,142076,142078,142080,142083,142085,142087,142089],{"class":54,"line":91},[52,142067,73261],{"class":308},[52,142069,54087],{"class":79},[52,142071,64376],{"class":308},[52,142073,1216],{"class":79},[52,142075,136998],{"class":1223},[52,142077,16362],{"class":79},[52,142079,64386],{"class":308},[52,142081,142082],{"class":308}," -10",[52,142084,54142],{"class":58},[52,142086,137017],{"class":308},[52,142088,54142],{"class":58},[52,142090,80],{"class":79},[52,142092,142093],{"class":54,"line":98},[52,142094,452],{"class":79},[14,142096,141081],{},[42,142098,142099],{"className":129202,"code":142031,"language":129204,"meta":47,"style":47},[49,142100,142101,142107,142119,142131,142157],{"__ignoreMap":47},[52,142102,142103,142105],{"class":54,"line":55},[52,142104,136959],{"class":75},[52,142106,18220],{"class":79},[52,142108,142109,142111,142113,142115,142117],{"class":54,"line":66},[52,142110,73218],{"class":308},[52,142112,54087],{"class":79},[52,142114,444],{"class":308},[52,142116,54142],{"class":58},[52,142118,80],{"class":79},[52,142120,142121,142123,142125,142127,142129],{"class":54,"line":83},[52,142122,73438],{"class":308},[52,142124,54087],{"class":79},[52,142126,444],{"class":308},[52,142128,54142],{"class":58},[52,142130,80],{"class":79},[52,142132,142133,142135,142137,142139,142141,142143,142145,142147,142149,142151,142153,142155],{"class":54,"line":91},[52,142134,73261],{"class":308},[52,142136,54087],{"class":79},[52,142138,64376],{"class":308},[52,142140,1216],{"class":79},[52,142142,136998],{"class":1223},[52,142144,16362],{"class":79},[52,142146,64386],{"class":308},[52,142148,142082],{"class":308},[52,142150,54142],{"class":58},[52,142152,137017],{"class":308},[52,142154,54142],{"class":58},[52,142156,80],{"class":79},[52,142158,142159],{"class":54,"line":98},[52,142160,452],{"class":79},[14,142162,142163],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[29,142165,142166,142169,142175,142181,142193],{},[32,142167,142168],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[32,142170,142171,142172,122887],{},"里面的布局利用 自定义列表来实现（",[49,142173,142174],{},"dl > dt + dd",[32,142176,141702,142177,142180],{},[49,142178,142179],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[32,142182,141702,142183,142186,142187,21058,142189,142192],{},[49,142184,142185],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[49,142188,142185],{},[49,142190,142191],{},"dd","之间有些距离",[32,142194,142195],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,142197,141041],{},[42,142199,142200],{"className":129202,"code":141391,"language":129204,"meta":47,"style":47},[49,142201,142202,142208,142220],{"__ignoreMap":47},[52,142203,142204,142206],{"class":54,"line":55},[52,142205,54261],{"class":53950},[52,142207,18220],{"class":79},[52,142209,142210,142212,142214,142216,142218],{"class":54,"line":66},[52,142211,73120],{"class":308},[52,142213,54087],{"class":79},[52,142215,692],{"class":308},[52,142217,54206],{"class":308},[52,142219,80],{"class":79},[52,142221,142222],{"class":54,"line":83},[52,142223,452],{"class":79},[14,142225,141081],{},[42,142227,142228],{"className":129202,"code":141391,"language":129204,"meta":47,"style":47},[49,142229,142230,142236,142248],{"__ignoreMap":47},[52,142231,142232,142234],{"class":54,"line":55},[52,142233,54261],{"class":53950},[52,142235,18220],{"class":79},[52,142237,142238,142240,142242,142244,142246],{"class":54,"line":66},[52,142239,73120],{"class":308},[52,142241,54087],{"class":79},[52,142243,692],{"class":308},[52,142245,54206],{"class":308},[52,142247,80],{"class":79},[52,142249,142250],{"class":54,"line":83},[52,142251,452],{"class":79},[14,142253,142254],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[29,142256,142257,142266,142269,142280],{},[32,142258,142259,142260,142262,142263,142265],{},"分为上下两块，上面是 ",[49,142261,134422],{}," 友情链接，下面是 ",[49,142264,134415],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[32,142267,142268],{},"把内容分别复制到相应模块中",[32,142270,141702,142271,142273,142274,142276,142277,142279],{},[49,142272,134422],{}," 设置 15px 的下外边距，给",[49,142275,134422],{}," 里面 的 ",[49,142278,3451],{}," 标签设置 左右 3px 的外边距",[32,142281,142282,142283,142285],{},"给",[49,142284,134415],{}," 设置 20px 的行高",[14,142287,141041],{},[42,142289,142290],{"className":129202,"code":141391,"language":129204,"meta":47,"style":47},[49,142291,142292,142298,142310],{"__ignoreMap":47},[52,142293,142294,142296],{"class":54,"line":55},[52,142295,54261],{"class":53950},[52,142297,18220],{"class":79},[52,142299,142300,142302,142304,142306,142308],{"class":54,"line":66},[52,142301,73120],{"class":308},[52,142303,54087],{"class":79},[52,142305,692],{"class":308},[52,142307,54206],{"class":308},[52,142309,80],{"class":79},[52,142311,142312],{"class":54,"line":83},[52,142313,452],{"class":79},[14,142315,141081],{},[42,142317,142318],{"className":129202,"code":141391,"language":129204,"meta":47,"style":47},[49,142319,142320,142326,142338],{"__ignoreMap":47},[52,142321,142322,142324],{"class":54,"line":55},[52,142323,54261],{"class":53950},[52,142325,18220],{"class":79},[52,142327,142328,142330,142332,142334,142336],{"class":54,"line":66},[52,142329,73120],{"class":308},[52,142331,54087],{"class":79},[52,142333,692],{"class":308},[52,142335,54206],{"class":308},[52,142337,80],{"class":79},[52,142339,142340],{"class":54,"line":83},[52,142341,452],{"class":79},[14,142343,142344],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[3141,142346,142347],{},"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":47,"searchDepth":66,"depth":66,"links":142349},[142350,142351,142352,142359],{"id":140630,"depth":66,"text":140631},{"id":140649,"depth":66,"text":140650},{"id":140676,"depth":66,"text":140677,"children":142353},[142354,142355,142356,142357,142358],{"id":140680,"depth":83,"text":140681},{"id":140693,"depth":83,"text":140694},{"id":140717,"depth":83,"text":140718},{"id":140739,"depth":83,"text":140740},{"id":140811,"depth":83,"text":140812},{"id":140937,"depth":66,"text":140938,"children":142360},[142361,142362,142363,142364,142366],{"id":140941,"depth":83,"text":140942},{"id":140948,"depth":83,"text":140949},{"id":141120,"depth":83,"text":141121},{"id":141661,"depth":83,"text":142365},"15.4.4 nav导航模块制作",{"id":141959,"depth":83,"text":141960},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":140622,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":142373,"title":142374,"body":142375,"description":26025,"extension":3153,"meta":144777,"navigation":122,"path":144778,"seo":144779,"stem":144780,"__hash__":144781},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":142376,"toc":144754},[142377,142380,142384,142388,142400,142403,142406,142409,142420,142422,142446,142448,142472,142477,142480,142482,142518,142520,142556,142559,142564,142567,142570,142573,142603,142610,142613,142623,142625,142659,142662,142696,142702,142719,142721,142757,142759,142795,142800,142825,142827,142853,142855,142879,142886,142889,142953,142955,142997,142999,143039,143046,143051,143053,143083,143085,143115,143119,143122,143129,143141,143143,143169,143171,143195,143198,143200,143224,143230,143240,143242,143272,143274,143304,143311,143352,143354,143390,143392,143428,143432,143435,143438,143441,143447,143452,143455,143478,143481,143505,143508,143532,143537,143540,143543,143546,143549,143552,143626,143628,143658,143660,143690,143693,143696,143728,143732,143736,143750,143759,143762,143767,143769,143863,143865,143959,143982,143984,144008,144010,144034,144041,144044,144054,144056,144080,144085,144093,144095,144125,144130,144170,144172,144198,144200,144226,144230,144233,144238,144241,144245,144253,144260,144268,144270,144300,144302,144332,144340,144343,144346,144348,144378,144380,144410,144413,144418,144420,144444,144446,144470,144473,144558,144560,144584,144586,144610,144614,144616,144640,144642,144676,144680,144694,144697,144702,144705,144710,144713,144743,144751],[10,142378,142374],{"id":142379},"_16-品优购项目下篇-主体与页面开发",[18,142381,142383],{"id":142382},"_161-项目主体模块制作","16.1 项目主体模块制作",[3195,142385,142387],{"id":142386},"_1611-首页制作","16.1.1 首页制作",[14,142389,142390,142392,142393,142395,142396,142399],{},[2389,142391,104708],{}," 主体模块是 ",[2389,142394,76708],{}," 里面专有的，注意需要新的样式文件 ",[2389,142397,142398],{},"index.css，"," 就不要写在common.css中了",[4509,142401],{"style":129058,"src":142402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[4509,142404],{"style":129058,"src":142405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,142407,142408],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[29,142410,142411,142414,142417],{},[32,142412,142413],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[32,142415,142416],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[32,142418,142419],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,142421,141041],{},[42,142423,142424],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,142425,142426,142432,142442],{"__ignoreMap":47},[52,142427,142428,142430],{"class":54,"line":55},[52,142429,133050],{"class":75},[52,142431,18220],{"class":79},[52,142433,142434,142436,142438,142440],{"class":54,"line":66},[52,142435,133682],{"class":308},[52,142437,54087],{"class":79},[52,142439,26385],{"class":308},[52,142441,80],{"class":79},[52,142443,142444],{"class":54,"line":83},[52,142445,452],{"class":79},[14,142447,141081],{},[42,142449,142450],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,142451,142452,142458,142468],{"__ignoreMap":47},[52,142453,142454,142456],{"class":54,"line":55},[52,142455,133050],{"class":75},[52,142457,18220],{"class":79},[52,142459,142460,142462,142464,142466],{"class":54,"line":66},[52,142461,133682],{"class":308},[52,142463,54087],{"class":79},[52,142465,26385],{"class":308},[52,142467,80],{"class":79},[52,142469,142470],{"class":54,"line":83},[52,142471,452],{"class":79},[1696,142473,142474],{},[32,142475,142476],{},"左侧focus模块制作",[4509,142478],{"style":129058,"src":142479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,142481,141041],{},[42,142483,142484],{"className":129202,"code":130525,"language":129204,"meta":47,"style":47},[49,142485,142486,142494,142504,142514],{"__ignoreMap":47},[52,142487,142488,142490,142492],{"class":54,"line":55},[52,142489,56471],{"class":53950},[52,142491,64550],{"class":75},[52,142493,18220],{"class":79},[52,142495,142496,142498,142500,142502],{"class":54,"line":66},[52,142497,130540],{"class":308},[52,142499,54087],{"class":79},[52,142501,57539],{"class":308},[52,142503,80],{"class":79},[52,142505,142506,142508,142510,142512],{"class":54,"line":83},[52,142507,73448],{"class":308},[52,142509,54087],{"class":79},[52,142511,57387],{"class":308},[52,142513,80],{"class":79},[52,142515,142516],{"class":54,"line":91},[52,142517,452],{"class":79},[14,142519,141081],{},[42,142521,142522],{"className":129202,"code":130525,"language":129204,"meta":47,"style":47},[49,142523,142524,142532,142542,142552],{"__ignoreMap":47},[52,142525,142526,142528,142530],{"class":54,"line":55},[52,142527,56471],{"class":53950},[52,142529,64550],{"class":75},[52,142531,18220],{"class":79},[52,142533,142534,142536,142538,142540],{"class":54,"line":66},[52,142535,130540],{"class":308},[52,142537,54087],{"class":79},[52,142539,57539],{"class":308},[52,142541,80],{"class":79},[52,142543,142544,142546,142548,142550],{"class":54,"line":83},[52,142545,73448],{"class":308},[52,142547,54087],{"class":79},[52,142549,57387],{"class":308},[52,142551,80],{"class":79},[52,142553,142554],{"class":54,"line":91},[52,142555,452],{"class":79},[14,142557,142558],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[1696,142560,142561],{"start":66},[32,142562,142563],{},"右侧newsflash模块制作",[4509,142565],{"style":129058,"src":142566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,142568,142569],{},"右侧的模块 分为上中下三个盒子",[14,142571,142572],{},"结构代码：",[42,142574,142575],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,142576,142577],{"__ignoreMap":47},[52,142578,142579,142581,142583,142585,142587,142589,142591,142593,142595,142597,142599,142601],{"class":54,"line":55},[52,142580,698],{"class":79},[52,142582,4509],{"class":53950},[52,142584,57889],{"class":75},[52,142586,292],{"class":79},[52,142588,136719],{"class":62},[52,142590,57897],{"class":75},[52,142592,292],{"class":79},[52,142594,136726],{"class":62},[52,142596,136729],{"class":75},[52,142598,292],{"class":79},[52,142600,136734],{"class":62},[52,142602,53957],{"class":79},[14,142604,142605,142606,142609],{},"1 号盒子为 ",[49,142607,142608],{},"news"," 新闻模块 高度为 165px",[4509,142611],{"style":129058,"src":142612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,142614,142615,142616,142619,142620],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[49,142617,142618],{},"news-hd","，下面是 ",[49,142621,142622],{},"news-bd",[14,142624,142572],{},[42,142626,142627],{"className":129949,"code":133306,"language":129951,"meta":47,"style":47},[49,142628,142629,142633,142647,142651],{"__ignoreMap":47},[52,142630,142631],{"class":54,"line":55},[52,142632,133313],{"class":94},[52,142634,142635,142637,142639,142641,142643,142645],{"class":54,"line":66},[52,142636,698],{"class":79},[52,142638,54261],{"class":53950},[52,142640,56136],{"class":75},[52,142642,292],{"class":79},[52,142644,133326],{"class":62},[52,142646,53957],{"class":79},[52,142648,142649],{"class":54,"line":83},[52,142650,133333],{"class":79},[52,142652,142653,142655,142657],{"class":54,"line":91},[52,142654,54435],{"class":79},[52,142656,54261],{"class":53950},[52,142658,53957],{"class":79},[14,142660,142661],{},"样式代码：",[42,142663,142664],{"className":129949,"code":133306,"language":129951,"meta":47,"style":47},[49,142665,142666,142670,142684,142688],{"__ignoreMap":47},[52,142667,142668],{"class":54,"line":55},[52,142669,133313],{"class":94},[52,142671,142672,142674,142676,142678,142680,142682],{"class":54,"line":66},[52,142673,698],{"class":79},[52,142675,54261],{"class":53950},[52,142677,56136],{"class":75},[52,142679,292],{"class":79},[52,142681,133326],{"class":62},[52,142683,53957],{"class":79},[52,142685,142686],{"class":54,"line":83},[52,142687,133333],{"class":79},[52,142689,142690,142692,142694],{"class":54,"line":91},[52,142691,54435],{"class":79},[52,142693,54261],{"class":53950},[52,142695,53957],{"class":79},[14,142697,142698,142699,142701],{},"上面是",[49,142700,142618],{},"，设置高度是 33px，设置下边框",[29,142703,142704,142710],{},[32,142705,142706,142707,142709],{},"里面放一个",[49,142708,25558],{}," 标题",[32,142711,142712,142713,142715,142716,142718],{},"放一个a",[49,142714,105343],{},"，内容是 更多，然后让 ",[49,142717,3451],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,142720,142572],{},[42,142722,142723],{"className":129202,"code":141044,"language":129204,"meta":47,"style":47},[49,142724,142725,142733,142743,142753],{"__ignoreMap":47},[52,142726,142727,142729,142731],{"class":54,"line":55},[52,142728,54261],{"class":53950},[52,142730,140203],{"class":75},[52,142732,18220],{"class":79},[52,142734,142735,142737,142739,142741],{"class":54,"line":66},[52,142736,140210],{"class":308},[52,142738,54087],{"class":79},[52,142740,10607],{"class":62},[52,142742,80],{"class":79},[52,142744,142745,142747,142749,142751],{"class":54,"line":83},[52,142746,130818],{"class":308},[52,142748,54087],{"class":79},[52,142750,63519],{"class":308},[52,142752,80],{"class":79},[52,142754,142755],{"class":54,"line":91},[52,142756,452],{"class":79},[14,142758,142661],{},[42,142760,142761],{"className":129202,"code":141044,"language":129204,"meta":47,"style":47},[49,142762,142763,142771,142781,142791],{"__ignoreMap":47},[52,142764,142765,142767,142769],{"class":54,"line":55},[52,142766,54261],{"class":53950},[52,142768,140203],{"class":75},[52,142770,18220],{"class":79},[52,142772,142773,142775,142777,142779],{"class":54,"line":66},[52,142774,140210],{"class":308},[52,142776,54087],{"class":79},[52,142778,10607],{"class":62},[52,142780,80],{"class":79},[52,142782,142783,142785,142787,142789],{"class":54,"line":83},[52,142784,130818],{"class":308},[52,142786,54087],{"class":79},[52,142788,63519],{"class":308},[52,142790,80],{"class":79},[52,142792,142793],{"class":54,"line":91},[52,142794,452],{"class":79},[14,142796,142797,142798],{},"下面是",[49,142799,142622],{},[29,142801,142802,142810],{},[32,142803,142804,142805,103668,142807,142809],{},"里面包含 ",[49,142806,29],{},[49,142808,32],{}," 还有链接",[32,142811,142282,142812,142814,142815,142817,142818,142821,142822],{},[49,142813,32],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[49,142816,133868],{}," 2.设置 ",[49,142819,142820],{},"white-space: nowrap;"," 3. 设置 ",[49,142823,142824],{},"text-overflow: ellipsis;",[14,142826,142572],{},[42,142828,142830],{"className":129202,"code":142829,"language":129204,"meta":47,"style":47},"div {\n  overflow: hidden;\n}\n",[49,142831,142832,142838,142849],{"__ignoreMap":47},[52,142833,142834,142836],{"class":54,"line":55},[52,142835,54261],{"class":53950},[52,142837,18220],{"class":79},[52,142839,142840,142843,142845,142847],{"class":54,"line":66},[52,142841,142842],{"class":308},"  overflow",[52,142844,54087],{"class":79},[52,142846,64364],{"class":308},[52,142848,80],{"class":79},[52,142850,142851],{"class":54,"line":83},[52,142852,452],{"class":79},[14,142854,142661],{},[42,142856,142857],{"className":129202,"code":142829,"language":129204,"meta":47,"style":47},[49,142858,142859,142865,142875],{"__ignoreMap":47},[52,142860,142861,142863],{"class":54,"line":55},[52,142862,54261],{"class":53950},[52,142864,18220],{"class":79},[52,142866,142867,142869,142871,142873],{"class":54,"line":66},[52,142868,142842],{"class":308},[52,142870,54087],{"class":79},[52,142872,64364],{"class":308},[52,142874,80],{"class":79},[52,142876,142877],{"class":54,"line":83},[52,142878,452],{"class":79},[14,142880,142881,142882,142885],{},"2 号盒子为 ",[49,142883,142884],{},"lifeservice"," 生活服务模块 高度为 209px",[4509,142887],{"style":129058,"src":142888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[29,142890,142891,142894,142904,142928,142939],{},[32,142892,142893],{},"设置边框（左右下边框）",[32,142895,142896,142897,142900,142901,142903],{},"里面的内容 是 ",[49,142898,142899],{},"ul > 12*li","，给",[49,142902,32],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[32,142905,142906,142907],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[29,142908,142909,142914,142923],{},[32,142910,142911,142913],{},[49,142912,142884],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[32,142915,142916,142917,142919,142920,142922],{},"可以让 ",[49,142918,142884],{}," 里面的 ",[49,142921,29],{}," 宽度为 252，就可以装的下 4 个 小 li",[32,142924,142925,142927],{},[49,142926,142884],{}," 盒子 overflow 隐藏多余的部分就可以了",[32,142929,119117,142930,142932,142933,142935,142936,142938],{},[49,142931,32],{}," 里面放一个 ",[49,142934,3644],{},"（里面放图标），下面的文本用 ",[49,142937,14],{}," 标签包裹",[32,142940,141702,142941,142943,142944,142946,142947,141736,142949,142952],{},[49,142942,3644],{}," 设置 24px宽和28px的高（注意 ",[49,142945,3644],{}," 是行内元素， 转成行内块），给 ",[49,142948,32],{},[49,142950,142951],{},"text-align:center"," 让里面内容居中显示",[14,142954,142572],{},[42,142956,142958],{"className":129202,"code":142957,"language":129204,"meta":47,"style":47},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[49,142959,142960,142978,142983,142993],{"__ignoreMap":47},[52,142961,142962,142964,142966,142968,142970,142972,142974,142976],{"class":54,"line":55},[52,142963,52],{"class":53950},[52,142965,15083],{"class":79},[52,142967,3451],{"class":53950},[52,142969,15083],{"class":79},[52,142971,26202],{"class":53950},[52,142973,15083],{"class":79},[52,142975,2389],{"class":53950},[52,142977,18220],{"class":79},[52,142979,142980],{"class":54,"line":66},[52,142981,142982],{"class":94},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[52,142984,142985,142987,142989,142991],{"class":54,"line":83},[52,142986,130818],{"class":308},[52,142988,54087],{"class":79},[52,142990,130880],{"class":308},[52,142992,80],{"class":79},[52,142994,142995],{"class":54,"line":91},[52,142996,452],{"class":79},[14,142998,142661],{},[42,143000,143001],{"className":129202,"code":142957,"language":129204,"meta":47,"style":47},[49,143002,143003,143021,143025,143035],{"__ignoreMap":47},[52,143004,143005,143007,143009,143011,143013,143015,143017,143019],{"class":54,"line":55},[52,143006,52],{"class":53950},[52,143008,15083],{"class":79},[52,143010,3451],{"class":53950},[52,143012,15083],{"class":79},[52,143014,26202],{"class":53950},[52,143016,15083],{"class":79},[52,143018,2389],{"class":53950},[52,143020,18220],{"class":79},[52,143022,143023],{"class":54,"line":66},[52,143024,142982],{"class":94},[52,143026,143027,143029,143031,143033],{"class":54,"line":83},[52,143028,130818],{"class":308},[52,143030,54087],{"class":79},[52,143032,130880],{"class":308},[52,143034,80],{"class":79},[52,143036,143037],{"class":54,"line":91},[52,143038,452],{"class":79},[14,143040,143041,143042,143045],{},"3 号盒子为 ",[49,143043,143044],{},"bargain"," 特价商品",[29,143047,143048],{},[32,143049,143050],{},"这个比较简单，直接插入一张图片即可",[14,143052,142572],{},[42,143054,143055],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,143056,143057],{"__ignoreMap":47},[52,143058,143059,143061,143063,143065,143067,143069,143071,143073,143075,143077,143079,143081],{"class":54,"line":55},[52,143060,698],{"class":79},[52,143062,4509],{"class":53950},[52,143064,57889],{"class":75},[52,143066,292],{"class":79},[52,143068,136719],{"class":62},[52,143070,57897],{"class":75},[52,143072,292],{"class":79},[52,143074,136726],{"class":62},[52,143076,136729],{"class":75},[52,143078,292],{"class":79},[52,143080,136734],{"class":62},[52,143082,53957],{"class":79},[14,143084,142661],{},[42,143086,143087],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,143088,143089],{"__ignoreMap":47},[52,143090,143091,143093,143095,143097,143099,143101,143103,143105,143107,143109,143111,143113],{"class":54,"line":55},[52,143092,698],{"class":79},[52,143094,4509],{"class":53950},[52,143096,57889],{"class":75},[52,143098,292],{"class":79},[52,143100,136719],{"class":62},[52,143102,57897],{"class":75},[52,143104,292],{"class":79},[52,143106,136726],{"class":62},[52,143108,136729],{"class":75},[52,143110,292],{"class":79},[52,143112,136734],{"class":62},[52,143114,53957],{"class":79},[3195,143116,143118],{"id":143117},"_1612-推荐模块制作","16.1.2 推荐模块制作",[4509,143120],{"style":129058,"src":143121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,143123,143124,143125,143128],{},"大盒子 ",[49,143126,143127],{},"recom"," 推荐模块 recommend",[29,143130,143131],{},[32,143132,143133,143134,143136,143137,143140],{},"给这个 ",[49,143135,143127],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[49,143138,143139],{},"#ebebeb","），设置距离上边 12px",[14,143142,142572],{},[42,143144,143146],{"className":129202,"code":143145,"language":129204,"meta":47,"style":47},"div {\n  background-color: #f0f0f0;\n}\n",[49,143147,143148,143154,143165],{"__ignoreMap":47},[52,143149,143150,143152],{"class":54,"line":55},[52,143151,54261],{"class":53950},[52,143153,18220],{"class":79},[52,143155,143156,143158,143160,143163],{"class":54,"line":66},[52,143157,73528],{"class":308},[52,143159,54087],{"class":79},[52,143161,143162],{"class":308},"#f0f0f0",[52,143164,80],{"class":79},[52,143166,143167],{"class":54,"line":83},[52,143168,452],{"class":79},[14,143170,142661],{},[42,143172,143173],{"className":129202,"code":143145,"language":129204,"meta":47,"style":47},[49,143174,143175,143181,143191],{"__ignoreMap":47},[52,143176,143177,143179],{"class":54,"line":55},[52,143178,54261],{"class":53950},[52,143180,18220],{"class":79},[52,143182,143183,143185,143187,143189],{"class":54,"line":66},[52,143184,73528],{"class":308},[52,143186,54087],{"class":79},[52,143188,143162],{"class":308},[52,143190,80],{"class":79},[52,143192,143193],{"class":54,"line":83},[52,143194,452],{"class":79},[14,143196,143197],{},"里面包含 2 个盒子， 浮动即可",[14,143199,142572],{},[42,143201,143202],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,143203,143204,143210,143220],{"__ignoreMap":47},[52,143205,143206,143208],{"class":54,"line":55},[52,143207,133050],{"class":75},[52,143209,18220],{"class":79},[52,143211,143212,143214,143216,143218],{"class":54,"line":66},[52,143213,133682],{"class":308},[52,143215,54087],{"class":79},[52,143217,26385],{"class":308},[52,143219,80],{"class":79},[52,143221,143222],{"class":54,"line":83},[52,143223,452],{"class":79},[14,143225,143226,143227],{},"1 号盒子 ",[49,143228,143229],{},"recom_hd",[29,143231,143232,143235],{},[32,143233,143234],{},"设置宽度205px，高度163px",[32,143236,142706,143237,143239],{},[49,143238,4509],{},"标签，插入图片即可",[14,143241,142572],{},[42,143243,143244],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,143245,143246],{"__ignoreMap":47},[52,143247,143248,143250,143252,143254,143256,143258,143260,143262,143264,143266,143268,143270],{"class":54,"line":55},[52,143249,698],{"class":79},[52,143251,4509],{"class":53950},[52,143253,57889],{"class":75},[52,143255,292],{"class":79},[52,143257,136719],{"class":62},[52,143259,57897],{"class":75},[52,143261,292],{"class":79},[52,143263,136726],{"class":62},[52,143265,136729],{"class":75},[52,143267,292],{"class":79},[52,143269,136734],{"class":62},[52,143271,53957],{"class":79},[14,143273,142661],{},[42,143275,143276],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,143277,143278],{"__ignoreMap":47},[52,143279,143280,143282,143284,143286,143288,143290,143292,143294,143296,143298,143300,143302],{"class":54,"line":55},[52,143281,698],{"class":79},[52,143283,4509],{"class":53950},[52,143285,57889],{"class":75},[52,143287,292],{"class":79},[52,143289,136719],{"class":62},[52,143291,57897],{"class":75},[52,143293,292],{"class":79},[52,143295,136726],{"class":62},[52,143297,136729],{"class":75},[52,143299,292],{"class":79},[52,143301,136734],{"class":62},[52,143303,53957],{"class":79},[14,143305,143306,143307,143310],{},"2 号盒子 ",[49,143308,143309],{},"recom_bd"," ，注意里面的小竖线",[29,143312,143313,143324,143327,143332,143337],{},[32,143314,143315,143316,143318,143319,143321,143322],{},"右侧结构里面放 ",[49,143317,29],{}," 包含 4个 ",[49,143320,32],{},"，每个li里面包含一个",[49,143323,4509],{},[32,143325,143326],{},"直接利用切片工具把里面的内容当成一张图片",[32,143328,141702,143329,143331],{},[49,143330,32],{}," 设置浮动",[32,143333,141702,143334,143336],{},[49,143335,4509],{}," 设置宽高，宽度 248px，高度 163px",[32,143338,143339,143340,142900,143343,143345,143346,143348,143349],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[49,143341,143342],{},"top 10px",[49,143344,32],{},"设置相对定位（注意，最后一个",[49,143347,32],{},"不用设置伪元素），可以利用 ",[49,143350,143351],{},"nth-child(-n+3){...}",[14,143353,142572],{},[42,143355,143356],{"className":129202,"code":141044,"language":129204,"meta":47,"style":47},[49,143357,143358,143366,143376,143386],{"__ignoreMap":47},[52,143359,143360,143362,143364],{"class":54,"line":55},[52,143361,54261],{"class":53950},[52,143363,140203],{"class":75},[52,143365,18220],{"class":79},[52,143367,143368,143370,143372,143374],{"class":54,"line":66},[52,143369,140210],{"class":308},[52,143371,54087],{"class":79},[52,143373,10607],{"class":62},[52,143375,80],{"class":79},[52,143377,143378,143380,143382,143384],{"class":54,"line":83},[52,143379,130818],{"class":308},[52,143381,54087],{"class":79},[52,143383,63519],{"class":308},[52,143385,80],{"class":79},[52,143387,143388],{"class":54,"line":91},[52,143389,452],{"class":79},[14,143391,142661],{},[42,143393,143394],{"className":129202,"code":141044,"language":129204,"meta":47,"style":47},[49,143395,143396,143404,143414,143424],{"__ignoreMap":47},[52,143397,143398,143400,143402],{"class":54,"line":55},[52,143399,54261],{"class":53950},[52,143401,140203],{"class":75},[52,143403,18220],{"class":79},[52,143405,143406,143408,143410,143412],{"class":54,"line":66},[52,143407,140210],{"class":308},[52,143409,54087],{"class":79},[52,143411,10607],{"class":62},[52,143413,80],{"class":79},[52,143415,143416,143418,143420,143422],{"class":54,"line":83},[52,143417,130818],{"class":308},[52,143419,54087],{"class":79},[52,143421,63519],{"class":308},[52,143423,80],{"class":79},[52,143425,143426],{"class":54,"line":91},[52,143427,452],{"class":79},[3195,143429,143431],{"id":143430},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[4509,143433],{"style":129058,"src":143434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,143436,143437],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,143439,143440],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,143442,143443,143446],{},[49,143444,143445],{},"box_hd"," 制作",[14,143448,143226,143449,143451],{},[49,143450,143445],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[4509,143453],{"style":129058,"src":143454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[29,143456,143457,143462,143467,143470],{},[32,143458,143459,143461],{},[49,143460,143445],{}," 给 30px 的高度，2个像素的下边框",[32,143463,143464,143465],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[49,143466,141713],{},[32,143468,143469],{},"左侧盒左浮动，右侧盒子右浮动",[32,143471,143472,143474,143475,143477],{},[49,143473,3451],{},"标签之间的距离用左右的",[49,143476,33533],{},"撑开即可",[14,143479,143480],{},"结构代码",[42,143482,143483],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,143484,143485,143491,143501],{"__ignoreMap":47},[52,143486,143487,143489],{"class":54,"line":55},[52,143488,133050],{"class":75},[52,143490,18220],{"class":79},[52,143492,143493,143495,143497,143499],{"class":54,"line":66},[52,143494,133682],{"class":308},[52,143496,54087],{"class":79},[52,143498,26385],{"class":308},[52,143500,80],{"class":79},[52,143502,143503],{"class":54,"line":83},[52,143504,452],{"class":79},[14,143506,143507],{},"样式代码",[42,143509,143510],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,143511,143512,143518,143528],{"__ignoreMap":47},[52,143513,143514,143516],{"class":54,"line":55},[52,143515,133050],{"class":75},[52,143517,18220],{"class":79},[52,143519,143520,143522,143524,143526],{"class":54,"line":66},[52,143521,133682],{"class":308},[52,143523,54087],{"class":79},[52,143525,26385],{"class":308},[52,143527,80],{"class":79},[52,143529,143530],{"class":54,"line":83},[52,143531,452],{"class":79},[14,143533,143534,143446],{},[49,143535,143536],{},"box_bd",[14,143538,143539],{},"2 号盒子 box_bd，不要给高度",[4509,143541],{"style":129058,"src":143542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,143544,143545],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,143547,143548],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,143550,143551],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[29,143553,143554,143566,143582],{},[32,143555,143556,143558,143559,143562,143563,143565],{},[49,143557,143536],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[49,143560,143561],{},"tab_content","，在",[49,143564,143561],{}," 里面包裹tab选项卡对应的内容",[32,143567,143568,143569,143572,143573,143575,143576,143578,143579,143581],{},"内容被一个大盒子包裹（",[49,143570,143571],{},"tab_list_item","），里面是 ",[49,143574,29],{}," 包裹 5个 ",[49,143577,32],{},"，每个",[49,143580,32],{},"设置对应的宽度，然后设置浮动",[32,143583,143584,143585,143587,143588,143590,143591],{},"而这5个",[49,143586,32],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[49,143589,32],{},"设置",[29,143592,143593,143611,143614],{},[32,143594,143595,143596,143598,143599,143601,143602,143604,143605,143607,143608,143610],{},"第一个小 ",[49,143597,32],{}," 分为上下结构，上面是 ",[49,143600,29],{}," 包裹 ",[49,143603,32],{}," ，",[49,143606,32],{},"里面包裹 ",[49,143609,3451],{},"，下面插入一张图片",[32,143612,143613],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[32,143615,143616,143617,143619,143620,143622,143623,143625],{},"后面的小 ",[49,143618,32],{}," 里面先放一个",[49,143621,3451],{},"标签，然后在",[49,143624,3451],{},"标签里面插入图片即可",[14,143627,143480],{},[42,143629,143630],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,143631,143632],{"__ignoreMap":47},[52,143633,143634,143636,143638,143640,143642,143644,143646,143648,143650,143652,143654,143656],{"class":54,"line":55},[52,143635,698],{"class":79},[52,143637,4509],{"class":53950},[52,143639,57889],{"class":75},[52,143641,292],{"class":79},[52,143643,136719],{"class":62},[52,143645,57897],{"class":75},[52,143647,292],{"class":79},[52,143649,136726],{"class":62},[52,143651,136729],{"class":75},[52,143653,292],{"class":79},[52,143655,136734],{"class":62},[52,143657,53957],{"class":79},[14,143659,143507],{},[42,143661,143662],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,143663,143664],{"__ignoreMap":47},[52,143665,143666,143668,143670,143672,143674,143676,143678,143680,143682,143684,143686,143688],{"class":54,"line":55},[52,143667,698],{"class":79},[52,143669,4509],{"class":53950},[52,143671,57889],{"class":75},[52,143673,292],{"class":79},[52,143675,136719],{"class":62},[52,143677,57897],{"class":75},[52,143679,292],{"class":79},[52,143681,136726],{"class":62},[52,143683,136729],{"class":75},[52,143685,292],{"class":79},[52,143687,136734],{"class":62},[52,143689,53957],{"class":79},[14,143691,143692],{},"tab栏切换需求！！！！！！介绍：",[4509,143694],{"style":129058,"src":143695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[29,143697,143698,143706,143712,143715],{},[32,143699,143700,143703,143704],{},[49,143701,143702],{},"tab","栏的布局是 ",[49,143705,141713],{},[32,143707,143708,143709,143711],{},"有多少个",[49,143710,143702],{},"选项卡，那么对应就有多少个内容",[32,143713,143714],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[32,143716,143717,143718,143721,143722,143724,143725,143727],{},"等后面我们学习了",[49,143719,143720],{},"js","之后，我们就会配合",[49,143723,143720],{},"来实现，",[49,143726,143702],{},"栏的切换",[18,143729,143731],{"id":143730},"_162-列表制作","16.2 列表制作",[3195,143733,143735],{"id":143734},"_1621-准备工作","16.2.1 准备工作",[29,143737,143738,143741,143744,143747],{},[32,143739,143740],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[32,143742,143743],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[32,143745,143746],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[32,143748,143749],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[3195,143751,143753,143754,103668,143756,143758],{"id":143752},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[49,143755,134207],{},[49,143757,56363],{}," 修改",[4509,143760],{"style":129058,"src":143761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[29,143763,143764],{},[32,143765,143766],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,143768,142572],{},[42,143770,143771],{"className":129202,"code":134634,"language":129204,"meta":47,"style":47},[49,143772,143773,143777,143791,143795,143809,143813,143827,143831,143845,143849],{"__ignoreMap":47},[52,143774,143775],{"class":54,"line":55},[52,143776,134641],{"class":94},[52,143778,143779,143781,143783,143785,143787,143789],{"class":54,"line":66},[52,143780,134646],{"class":75},[52,143782,82457],{"class":79},[52,143784,131562],{"class":308},[52,143786,54087],{"class":79},[52,143788,134655],{"class":308},[52,143790,132132],{"class":79},[52,143792,143793],{"class":54,"line":83},[52,143794,134662],{"class":94},[52,143796,143797,143799,143801,143803,143805,143807],{"class":54,"line":91},[52,143798,134667],{"class":75},[52,143800,82457],{"class":79},[52,143802,131562],{"class":308},[52,143804,54087],{"class":79},[52,143806,57414],{"class":308},[52,143808,132132],{"class":79},[52,143810,143811],{"class":54,"line":98},[52,143812,134682],{"class":94},[52,143814,143815,143817,143819,143821,143823,143825],{"class":54,"line":107},[52,143816,134687],{"class":75},[52,143818,82457],{"class":79},[52,143820,131562],{"class":308},[52,143822,54087],{"class":79},[52,143824,57481],{"class":308},[52,143826,132132],{"class":79},[52,143828,143829],{"class":54,"line":113},[52,143830,134702],{"class":94},[52,143832,143833,143835,143837,143839,143841,143843],{"class":54,"line":119},[52,143834,134707],{"class":75},[52,143836,82457],{"class":79},[52,143838,131562],{"class":308},[52,143840,54087],{"class":79},[52,143842,88883],{"class":308},[52,143844,132132],{"class":79},[52,143846,143847],{"class":54,"line":126},[52,143848,134722],{"class":94},[52,143850,143851,143853,143855,143857,143859,143861],{"class":54,"line":132},[52,143852,134727],{"class":75},[52,143854,82457],{"class":79},[52,143856,131562],{"class":308},[52,143858,54087],{"class":79},[52,143860,134736],{"class":308},[52,143862,132132],{"class":79},[14,143864,142661],{},[42,143866,143867],{"className":129202,"code":134634,"language":129204,"meta":47,"style":47},[49,143868,143869,143873,143887,143891,143905,143909,143923,143927,143941,143945],{"__ignoreMap":47},[52,143870,143871],{"class":54,"line":55},[52,143872,134641],{"class":94},[52,143874,143875,143877,143879,143881,143883,143885],{"class":54,"line":66},[52,143876,134646],{"class":75},[52,143878,82457],{"class":79},[52,143880,131562],{"class":308},[52,143882,54087],{"class":79},[52,143884,134655],{"class":308},[52,143886,132132],{"class":79},[52,143888,143889],{"class":54,"line":83},[52,143890,134662],{"class":94},[52,143892,143893,143895,143897,143899,143901,143903],{"class":54,"line":91},[52,143894,134667],{"class":75},[52,143896,82457],{"class":79},[52,143898,131562],{"class":308},[52,143900,54087],{"class":79},[52,143902,57414],{"class":308},[52,143904,132132],{"class":79},[52,143906,143907],{"class":54,"line":98},[52,143908,134682],{"class":94},[52,143910,143911,143913,143915,143917,143919,143921],{"class":54,"line":107},[52,143912,134687],{"class":75},[52,143914,82457],{"class":79},[52,143916,131562],{"class":308},[52,143918,54087],{"class":79},[52,143920,57481],{"class":308},[52,143922,132132],{"class":79},[52,143924,143925],{"class":54,"line":113},[52,143926,134702],{"class":94},[52,143928,143929,143931,143933,143935,143937,143939],{"class":54,"line":119},[52,143930,134707],{"class":75},[52,143932,82457],{"class":79},[52,143934,131562],{"class":308},[52,143936,54087],{"class":79},[52,143938,88883],{"class":308},[52,143940,132132],{"class":79},[52,143942,143943],{"class":54,"line":126},[52,143944,134722],{"class":94},[52,143946,143947,143949,143951,143953,143955,143957],{"class":54,"line":132},[52,143948,134727],{"class":75},[52,143950,82457],{"class":79},[52,143952,131562],{"class":308},[52,143954,54087],{"class":79},[52,143956,134736],{"class":308},[52,143958,132132],{"class":79},[29,143960,143961,143972],{},[32,143962,143963,143964,143967,143968,103668,143970],{},"1 号盒子左侧浮动 ",[49,143965,143966],{},"sk_list"," 里面包含 ",[49,143969,29],{},[49,143971,32],{},[32,143973,143974,143975,143967,143978,103668,143980],{},"2 号盒子左侧浮动 ",[49,143976,143977],{},"sk_con",[49,143979,29],{},[49,143981,32],{},[14,143983,142572],{},[42,143985,143986],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,143987,143988,143994,144004],{"__ignoreMap":47},[52,143989,143990,143992],{"class":54,"line":55},[52,143991,133050],{"class":75},[52,143993,18220],{"class":79},[52,143995,143996,143998,144000,144002],{"class":54,"line":66},[52,143997,133682],{"class":308},[52,143999,54087],{"class":79},[52,144001,26385],{"class":308},[52,144003,80],{"class":79},[52,144005,144006],{"class":54,"line":83},[52,144007,452],{"class":79},[14,144009,142661],{},[42,144011,144012],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,144013,144014,144020,144030],{"__ignoreMap":47},[52,144015,144016,144018],{"class":54,"line":55},[52,144017,133050],{"class":75},[52,144019,18220],{"class":79},[52,144021,144022,144024,144026,144028],{"class":54,"line":66},[52,144023,133682],{"class":308},[52,144025,54087],{"class":79},[52,144027,26385],{"class":308},[52,144029,80],{"class":79},[52,144031,144032],{"class":54,"line":83},[52,144033,452],{"class":79},[3195,144035,144037,144038],{"id":144036},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[49,144039,144040],{},"sk_container",[4509,144042],{"style":129058,"src":144043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[29,144045,144046,144051],{},[32,144047,143226,144048,144050],{},[49,144049,144040],{}," 给宽度 1200，不要给高度",[32,144052,144053],{},"一定不要忘记清除浮动",[14,144055,142572],{},[42,144057,144058],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,144059,144060,144066,144076],{"__ignoreMap":47},[52,144061,144062,144064],{"class":54,"line":55},[52,144063,133050],{"class":75},[52,144065,18220],{"class":79},[52,144067,144068,144070,144072,144074],{"class":54,"line":66},[52,144069,133682],{"class":308},[52,144071,54087],{"class":79},[52,144073,26385],{"class":308},[52,144075,80],{"class":79},[52,144077,144078],{"class":54,"line":83},[52,144079,452],{"class":79},[1696,144081,144082],{},[32,144083,144084],{},"sk_hd制作",[29,144086,144087],{},[32,144088,143306,144089,144092],{},[49,144090,144091],{},"sk_hd"," ，插入图片即可",[14,144094,142572],{},[42,144096,144097],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,144098,144099],{"__ignoreMap":47},[52,144100,144101,144103,144105,144107,144109,144111,144113,144115,144117,144119,144121,144123],{"class":54,"line":55},[52,144102,698],{"class":79},[52,144104,4509],{"class":53950},[52,144106,57889],{"class":75},[52,144108,292],{"class":79},[52,144110,136719],{"class":62},[52,144112,57897],{"class":75},[52,144114,292],{"class":79},[52,144116,136726],{"class":62},[52,144118,136729],{"class":75},[52,144120,292],{"class":79},[52,144122,136734],{"class":62},[52,144124,53957],{"class":79},[1696,144126,144127],{"start":66},[32,144128,144129],{},"sk_bd制作",[29,144131,144132],{},[32,144133,144134,144135,144138,144139,103668,144141,144143],{},"3 号盒子 ",[49,144136,144137],{},"sk_bd"," ，里面包含很多的 ",[49,144140,29],{},[49,144142,32],{},[29,144144,144145,144154],{},[32,144146,144147,144148,144150,144151,144153],{},"当鼠标移入到 ",[49,144149,32],{}," 上面的时候显示红色的边框，在这里先给 ",[49,144152,32],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[32,144155,144156,144157,144159,144160,144162,144163,144166,144167,144169],{},"由于给每个 ",[49,144158,32],{}," 都设置了外边距，导致一行的最后一个 ",[49,144161,32],{}," 掉了下来，在这里我们利用 ",[49,144164,144165],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[49,144168,32],{},"，去掉外边距就好了",[14,144171,142572],{},[42,144173,144174],{"className":129202,"code":141391,"language":129204,"meta":47,"style":47},[49,144175,144176,144182,144194],{"__ignoreMap":47},[52,144177,144178,144180],{"class":54,"line":55},[52,144179,54261],{"class":53950},[52,144181,18220],{"class":79},[52,144183,144184,144186,144188,144190,144192],{"class":54,"line":66},[52,144185,73120],{"class":308},[52,144187,54087],{"class":79},[52,144189,692],{"class":308},[52,144191,54206],{"class":308},[52,144193,80],{"class":79},[52,144195,144196],{"class":54,"line":83},[52,144197,452],{"class":79},[14,144199,142661],{},[42,144201,144202],{"className":129202,"code":141391,"language":129204,"meta":47,"style":47},[49,144203,144204,144210,144222],{"__ignoreMap":47},[52,144205,144206,144208],{"class":54,"line":55},[52,144207,54261],{"class":53950},[52,144209,18220],{"class":79},[52,144211,144212,144214,144216,144218,144220],{"class":54,"line":66},[52,144213,73120],{"class":308},[52,144215,54087],{"class":79},[52,144217,692],{"class":308},[52,144219,54206],{"class":308},[52,144221,80],{"class":79},[52,144223,144224],{"class":54,"line":83},[52,144225,452],{"class":79},[18,144227,144229],{"id":144228},"_163-注册页面制作","16.3 注册页面制作",[4509,144231],{"style":129058,"src":144232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,144234,144235,144237],{},[2389,144236,1453],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[4509,144239],{"style":129058,"src":144240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[3195,144242,144244],{"id":144243},"_1631-准备工作","16.3.1 准备工作",[29,144246,144247,144250],{},[32,144248,144249],{},"创建register.html，引入 base.css，引入favicon图标",[32,144251,144252],{},"创建register.css ，在html页面进行引入",[3195,144254,144256,144257,144259],{"id":144255},"_1632-header-头部实现","16.3.2 ",[49,144258,134207],{}," 头部实现",[29,144261,144262,144265],{},[32,144263,144264],{},"整个内容用 版心 进行包裹",[32,144266,144267],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,144269,142572],{},[42,144271,144272],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,144273,144274],{"__ignoreMap":47},[52,144275,144276,144278,144280,144282,144284,144286,144288,144290,144292,144294,144296,144298],{"class":54,"line":55},[52,144277,698],{"class":79},[52,144279,4509],{"class":53950},[52,144281,57889],{"class":75},[52,144283,292],{"class":79},[52,144285,136719],{"class":62},[52,144287,57897],{"class":75},[52,144289,292],{"class":79},[52,144291,136726],{"class":62},[52,144293,136729],{"class":75},[52,144295,292],{"class":79},[52,144297,136734],{"class":62},[52,144299,53957],{"class":79},[14,144301,142661],{},[42,144303,144304],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,144305,144306],{"__ignoreMap":47},[52,144307,144308,144310,144312,144314,144316,144318,144320,144322,144324,144326,144328,144330],{"class":54,"line":55},[52,144309,698],{"class":79},[52,144311,4509],{"class":53950},[52,144313,57889],{"class":75},[52,144315,292],{"class":79},[52,144317,136719],{"class":62},[52,144319,57897],{"class":75},[52,144321,292],{"class":79},[52,144323,136726],{"class":62},[52,144325,136729],{"class":75},[52,144327,292],{"class":79},[52,144329,136734],{"class":62},[52,144331,53957],{"class":79},[3195,144333,144335,144336,144339],{"id":144334},"_1633-registerarea-主体模块实现","16.3.3 ",[49,144337,144338],{},"registerarea"," 主体模块实现",[4509,144341],{"style":129058,"src":144342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,144344,144345],{},"整个大盒子 高度为 522px，设置4个边框",[14,144347,142572],{},[42,144349,144350],{"className":129202,"code":133359,"language":129204,"meta":47,"style":47},[49,144351,144352,144358,144374],{"__ignoreMap":47},[52,144353,144354,144356],{"class":54,"line":55},[52,144355,54261],{"class":53950},[52,144357,18220],{"class":79},[52,144359,144360,144362,144364,144366,144368,144370,144372],{"class":54,"line":66},[52,144361,73546],{"class":308},[52,144363,54087],{"class":79},[52,144365,629],{"class":308},[52,144367,54142],{"class":58},[52,144369,54171],{"class":308},[52,144371,132594],{"class":308},[52,144373,80],{"class":79},[52,144375,144376],{"class":54,"line":83},[52,144377,452],{"class":79},[14,144379,142661],{},[42,144381,144382],{"className":129202,"code":133359,"language":129204,"meta":47,"style":47},[49,144383,144384,144390,144406],{"__ignoreMap":47},[52,144385,144386,144388],{"class":54,"line":55},[52,144387,54261],{"class":53950},[52,144389,18220],{"class":79},[52,144391,144392,144394,144396,144398,144400,144402,144404],{"class":54,"line":66},[52,144393,73546],{"class":308},[52,144395,54087],{"class":79},[52,144397,629],{"class":308},[52,144399,54142],{"class":58},[52,144401,54171],{"class":308},[52,144403,132594],{"class":308},[52,144405,80],{"class":79},[52,144407,144408],{"class":54,"line":83},[52,144409,452],{"class":79},[14,144411,144412],{},"1号盒子 是一个 h3 标签，放标题",[29,144414,144415],{},[32,144416,144417],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,144419,142572],{},[42,144421,144422],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,144423,144424,144430,144440],{"__ignoreMap":47},[52,144425,144426,144428],{"class":54,"line":55},[52,144427,133050],{"class":75},[52,144429,18220],{"class":79},[52,144431,144432,144434,144436,144438],{"class":54,"line":66},[52,144433,133682],{"class":308},[52,144435,54087],{"class":79},[52,144437,26385],{"class":308},[52,144439,80],{"class":79},[52,144441,144442],{"class":54,"line":83},[52,144443,452],{"class":79},[14,144445,142661],{},[42,144447,144448],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,144449,144450,144456,144466],{"__ignoreMap":47},[52,144451,144452,144454],{"class":54,"line":55},[52,144453,133050],{"class":75},[52,144455,18220],{"class":79},[52,144457,144458,144460,144462,144464],{"class":54,"line":66},[52,144459,133682],{"class":308},[52,144461,54087],{"class":79},[52,144463,26385],{"class":308},[52,144465,80],{"class":79},[52,144467,144468],{"class":54,"line":83},[52,144469,452],{"class":79},[14,144471,144472],{},"2号盒子 里面放注册的内容",[29,144474,144475,144478,144487,144501,144514,144517,144520,144538,144552],{},[32,144476,144477],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[32,144479,144480,144481,144483,144484,144486],{},"里面的内容利用 ",[49,144482,29],{}," 包含 ",[49,144485,32],{}," 来实现的（不需要用表格）",[32,144488,141716,144489,144491,144492,144494,144495,144497,144498,144500],{},[49,144490,32],{}," 里面，左侧放 ",[49,144493,36258],{}," 标签， 中间放",[49,144496,56471],{}," 标签， 右侧放 ",[49,144499,52],{}," 提示信息",[32,144502,144503,144504,144506,144507,144509,144510,144513],{},"左侧 ",[49,144505,36258],{},"里面的文字都是右对齐，我们可以给",[49,144508,36258],{},"设置一个宽度（88px），然后利用",[49,144511,144512],{},"text-align"," 来设置右对齐",[32,144515,144516],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[32,144518,144519],{},"右侧 span修饰一下文字颜色",[32,144521,144522,144523],{},"提示信息的样式优化",[29,144524,144525,144528,144531],{},[32,144526,144527],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[32,144529,144530],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[32,144532,144533,144534,144537],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[49,144535,144536],{},"vertical-algin"," 来设置 图片与文字对齐方式",[32,144539,144540,144541],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[29,144542,144543,144549],{},[32,144544,144545,144546,144548],{},"设置 ",[49,144547,26202],{}," 的 左右 12px 的内边距，设置一下文字颜色",[32,144550,144551],{},"分别设置 背景颜色",[32,144553,144554,144555,144557],{},"同意协议 和 完成注册 都是用 ",[49,144556,32],{}," 进行包裹",[14,144559,142572],{},[42,144561,144562],{"className":129202,"code":143145,"language":129204,"meta":47,"style":47},[49,144563,144564,144570,144580],{"__ignoreMap":47},[52,144565,144566,144568],{"class":54,"line":55},[52,144567,54261],{"class":53950},[52,144569,18220],{"class":79},[52,144571,144572,144574,144576,144578],{"class":54,"line":66},[52,144573,73528],{"class":308},[52,144575,54087],{"class":79},[52,144577,143162],{"class":308},[52,144579,80],{"class":79},[52,144581,144582],{"class":54,"line":83},[52,144583,452],{"class":79},[14,144585,142661],{},[42,144587,144588],{"className":129202,"code":143145,"language":129204,"meta":47,"style":47},[49,144589,144590,144596,144606],{"__ignoreMap":47},[52,144591,144592,144594],{"class":54,"line":55},[52,144593,54261],{"class":53950},[52,144595,18220],{"class":79},[52,144597,144598,144600,144602,144604],{"class":54,"line":66},[52,144599,73528],{"class":308},[52,144601,54087],{"class":79},[52,144603,143162],{"class":308},[52,144605,80],{"class":79},[52,144607,144608],{"class":54,"line":83},[52,144609,452],{"class":79},[3195,144611,144613],{"id":144612},"_1634-底部实现","16.3.4 底部实现",[14,144615,142572],{},[42,144617,144618],{"className":129202,"code":143145,"language":129204,"meta":47,"style":47},[49,144619,144620,144626,144636],{"__ignoreMap":47},[52,144621,144622,144624],{"class":54,"line":55},[52,144623,54261],{"class":53950},[52,144625,18220],{"class":79},[52,144627,144628,144630,144632,144634],{"class":54,"line":66},[52,144629,73528],{"class":308},[52,144631,54087],{"class":79},[52,144633,143162],{"class":308},[52,144635,80],{"class":79},[52,144637,144638],{"class":54,"line":83},[52,144639,452],{"class":79},[14,144641,142661],{},[42,144643,144644],{"className":129949,"code":133306,"language":129951,"meta":47,"style":47},[49,144645,144646,144650,144664,144668],{"__ignoreMap":47},[52,144647,144648],{"class":54,"line":55},[52,144649,133313],{"class":94},[52,144651,144652,144654,144656,144658,144660,144662],{"class":54,"line":66},[52,144653,698],{"class":79},[52,144655,54261],{"class":53950},[52,144657,56136],{"class":75},[52,144659,292],{"class":79},[52,144661,133326],{"class":62},[52,144663,53957],{"class":79},[52,144665,144666],{"class":54,"line":83},[52,144667,133333],{"class":79},[52,144669,144670,144672,144674],{"class":54,"line":91},[52,144671,54435],{"class":79},[52,144673,54261],{"class":53950},[52,144675,53957],{"class":79},[18,144677,144679],{"id":144678},"_164-项目总结","16.4 项目总结",[1696,144681,144682,144685,144688,144691],{},[32,144683,144684],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[32,144686,144687],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[32,144689,144690],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[32,144692,144693],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[4509,144695],{"style":129058,"src":144696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[1696,144698,144699],{"start":98},[32,144700,144701],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[4509,144703],{"style":129058,"src":144704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[1696,144706,144707],{"start":107},[32,144708,144709],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[4509,144711],{"style":129058,"src":144712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[42,144714,144715],{"className":129949,"code":139359,"language":129951,"meta":47,"style":47},[49,144716,144717],{"__ignoreMap":47},[52,144718,144719,144721,144723,144725,144727,144729,144731,144733,144735,144737,144739,144741],{"class":54,"line":55},[52,144720,698],{"class":79},[52,144722,56471],{"class":53950},[52,144724,56474],{"class":75},[52,144726,292],{"class":79},[52,144728,65349],{"class":62},[52,144730,17568],{"class":75},[52,144732,292],{"class":79},[52,144734,139380],{"class":62},[52,144736,63670],{"class":75},[52,144738,292],{"class":79},[52,144740,139387],{"class":62},[52,144742,53957],{"class":79},[1696,144744,144745,144748],{"start":113},[32,144746,144747],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[32,144749,144750],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[3141,144752,144753],{},"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":47,"searchDepth":66,"depth":66,"links":144755},[144756,144761,144768,144776],{"id":142382,"depth":66,"text":142383,"children":144757},[144758,144759,144760],{"id":142386,"depth":83,"text":142387},{"id":143117,"depth":83,"text":143118},{"id":143430,"depth":83,"text":143431},{"id":143730,"depth":66,"text":143731,"children":144762},[144763,144764,144766],{"id":143734,"depth":83,"text":143735},{"id":143752,"depth":83,"text":144765},"16.2.2 列表页 header 和 nav 修改",{"id":144036,"depth":83,"text":144767},"16.2.3 列表页主体 sk_container",{"id":144228,"depth":66,"text":144229,"children":144769},[144770,144771,144773,144775],{"id":144243,"depth":83,"text":144244},{"id":144255,"depth":83,"text":144772},"16.3.2 header 头部实现",{"id":144334,"depth":83,"text":144774},"16.3.3 registerarea 主体模块实现",{"id":144612,"depth":83,"text":144613},{"id":144678,"depth":66,"text":144679},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":142374,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":144783,"title":144784,"body":144785,"description":26025,"extension":3153,"meta":144893,"navigation":122,"path":144894,"seo":144895,"stem":144896,"__hash__":144897},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":144786,"toc":144888},[144787,144790,144794,144797,144800,144809,144818,144822,144827,144834,144852,144855,144858,144861,144864,144867,144870,144873,144876,144879,144882,144885],[10,144788,144784],{"id":144789},"_17-web服务器与网站发布",[18,144791,144793],{"id":144792},"_171-web服务器","17.1 Web服务器",[14,144795,144796],{},"把自己网站上传到服务器上，可以让其他人访问",[4509,144798],{"style":129058,"src":144799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,144801,144802,144805,144806],{},[2389,144803,144804],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2389,144807,144808],{},"Web 服务器等",[14,144810,144811,144812,103668,144815,28390],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2389,144813,144814],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2389,144816,144817],{},"远程服务器",[3195,144819,144821],{"id":144820},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,144823,144824],{},[2389,144825,144826],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,144828,144829,144830],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[3451,144831,144832],{"href":144832,"rel":144833},"http:\u002F\u002Ffree.3v.do\u002F",[26514],[29,144835,144836,144839,144842,144849],{},[32,144837,144838],{},"去免费空间网站注册账号。",[32,144840,144841],{},"记录下主机名、用户名、密码、域名。",[32,144843,144844,144845,144848],{},"利用 ",[49,144846,144847],{},"utftp"," 软件 上传网站到远程服务器",[32,144850,144851],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,144853,144854],{},"使用软件上传，对上传软件文件进行解压",[4509,144856],{"style":129058,"src":144857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[4509,144859],{"style":129058,"src":144860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,144862,144863],{},"输入刚刚申请的服务器账号信息：",[4509,144865],{"style":129058,"src":144866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[4509,144868],{"style":129058,"src":144869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[4509,144871],{"style":129058,"src":144872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[4509,144874],{"style":129058,"src":144875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,144877,144878],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[4509,144880],{"style":129058,"src":144881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,144883,144884],{},"浏览器输入域名即可访问",[14,144886,144887],{},"首页一定必须是index",{"title":47,"searchDepth":66,"depth":66,"links":144889},[144890],{"id":144792,"depth":66,"text":144793,"children":144891},[144892],{"id":144820,"depth":83,"text":144821},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":144784,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144899,"title":144900,"body":144901,"description":26025,"extension":3153,"meta":145828,"navigation":122,"path":145829,"seo":145830,"stem":145831,"__hash__":145832},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144902,"toc":145811},[144903,144906,144910,144913,144916,144927,144930,144934,144938,144943,144946,144949,144952,144955,144959,144985,144989,144993,144996,144999,145003,145036,145040,145043,145046,145110,145114,145118,145121,145124,145127,145131,145176,145180,145183,145213,145217,145221,145224,145227,145231,145234,145303,145306,145414,145416,145422,145426,145429,145432,145528,145531,145535,145559,145563,145566,145570,145573,145577,145580,145583,145586,145589,145593,145596,145599,145603,145607,145610,145613,145616,145619,145623,145626,145630,145633,145636,145681,145685,145689,145692,145695,145698,145730,145734,145737,145771,145775,145778,145808],[10,144904,144900],{"id":144905},"_18-2d动画与3d转换",[18,144907,144909],{"id":144908},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,144911,144912],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,144914,144915],{},"转换（transform）你可以简单理解为变形",[29,144917,144918,144921,144924],{},[32,144919,144920],{},"移动：translate",[32,144922,144923],{},"旋转：rotate",[32,144925,144926],{},"缩放：scale",[4509,144928],{"style":129058,"src":144929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[3195,144931,144933],{"id":144932},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[24646,144935,144937],{"id":144936},"_18111-translate介绍","18.1.1.1 translate介绍",[14,144939,144940,144941],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2389,144942,135861],{},[4509,144944],{"style":129058,"src":144945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,144947,144948],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,144950,144951],{},"对于行内元素无效",[14,144953,144954],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[24646,144956,144958],{"id":144957},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[42,144960,144961],{"className":129202,"code":141391,"language":129204,"meta":47,"style":47},[49,144962,144963,144969,144981],{"__ignoreMap":47},[52,144964,144965,144967],{"class":54,"line":55},[52,144966,54261],{"class":53950},[52,144968,18220],{"class":79},[52,144970,144971,144973,144975,144977,144979],{"class":54,"line":66},[52,144972,73120],{"class":308},[52,144974,54087],{"class":79},[52,144976,692],{"class":308},[52,144978,54206],{"class":308},[52,144980,80],{"class":79},[52,144982,144983],{"class":54,"line":83},[52,144984,452],{"class":79},[3195,144986,144988],{"id":144987},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[24646,144990,144992],{"id":144991},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,144994,144995],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[4509,144997],{"style":129058,"src":144998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[24646,145000,145002],{"id":145001},"_18122-旋转效果","18.1.2.2 旋转效果",[42,145004,145006],{"className":129202,"code":145005,"language":129204,"meta":47,"style":47},"div {\n  transform: rotate(45deg);\n}\n",[49,145007,145008,145014,145032],{"__ignoreMap":47},[52,145009,145010,145012],{"class":54,"line":55},[52,145011,54261],{"class":53950},[52,145013,18220],{"class":79},[52,145015,145016,145018,145020,145023,145025,145027,145030],{"class":54,"line":66},[52,145017,139186],{"class":308},[52,145019,54087],{"class":79},[52,145021,145022],{"class":308},"rotate",[52,145024,1216],{"class":79},[52,145026,3729],{"class":308},[52,145028,145029],{"class":58},"deg",[52,145031,2737],{"class":79},[52,145033,145034],{"class":54,"line":83},[52,145035,452],{"class":79},[24646,145037,145039],{"id":145038},"_18123-三角做法","18.1.2.3 三角做法",[14,145041,145042],{},"该下标当经过最外层大盒子时会实现向上反转",[4509,145044],{"style":129058,"src":145045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[42,145047,145048],{"className":129202,"code":137722,"language":129204,"meta":47,"style":47},[49,145049,145050,145054,145060,145070,145080,145096,145106],{"__ignoreMap":47},[52,145051,145052],{"class":54,"line":55},[52,145053,137729],{"class":94},[52,145055,145056,145058],{"class":54,"line":66},[52,145057,137734],{"class":75},[52,145059,18220],{"class":79},[52,145061,145062,145064,145066,145068],{"class":54,"line":83},[52,145063,73218],{"class":308},[52,145065,54087],{"class":79},[52,145067,692],{"class":308},[52,145069,80],{"class":79},[52,145071,145072,145074,145076,145078],{"class":54,"line":91},[52,145073,73438],{"class":308},[52,145075,54087],{"class":79},[52,145077,692],{"class":308},[52,145079,80],{"class":79},[52,145081,145082,145084,145086,145088,145090,145092,145094],{"class":54,"line":98},[52,145083,73546],{"class":308},[52,145085,54087],{"class":79},[52,145087,3649],{"class":308},[52,145089,54142],{"class":58},[52,145091,54171],{"class":308},[52,145093,66641],{"class":308},[52,145095,80],{"class":79},[52,145097,145098,145100,145102,145104],{"class":54,"line":107},[52,145099,137777],{"class":308},[52,145101,54087],{"class":79},[52,145103,65019],{"class":308},[52,145105,80],{"class":79},[52,145107,145108],{"class":54,"line":113},[52,145109,452],{"class":79},[3195,145111,145113],{"id":145112},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[24646,145115,145117],{"id":145116},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,145119,145120],{},"设置中心点",[4509,145122],{"style":129058,"src":145123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,145125,145126],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[24646,145128,145130],{"id":145129},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[42,145132,145134],{"className":129202,"code":145133,"language":129204,"meta":47,"style":47},"\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",[49,145135,145136,145141,145147,145162,145167,145172],{"__ignoreMap":47},[52,145137,145138],{"class":54,"line":55},[52,145139,145140],{"class":94},"\u002F* 转换中心点 *\u002F\n",[52,145142,145143,145145],{"class":54,"line":66},[52,145144,54261],{"class":53950},[52,145146,18220],{"class":79},[52,145148,145149,145152,145154,145156,145158,145160],{"class":54,"line":83},[52,145150,145151],{"class":308},"  transform-origin",[52,145153,54087],{"class":79},[52,145155,54242],{"class":308},[52,145157,19792],{"class":308},[52,145159,133065],{"class":79},[52,145161,137875],{"class":94},[52,145163,145164],{"class":54,"line":91},[52,145165,145166],{"class":94},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[52,145168,145169],{"class":54,"line":98},[52,145170,145171],{"class":94},"  \u002F* transform-origin: left top; *\u002F\n",[52,145173,145174],{"class":54,"line":107},[52,145175,452],{"class":79},[24646,145177,145179],{"id":145178},"_18133-旋转案例","18.1.3.3 旋转案例",[4509,145181],{"style":129058,"src":145182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[42,145184,145185],{"className":129202,"code":145005,"language":129204,"meta":47,"style":47},[49,145186,145187,145193,145209],{"__ignoreMap":47},[52,145188,145189,145191],{"class":54,"line":55},[52,145190,54261],{"class":53950},[52,145192,18220],{"class":79},[52,145194,145195,145197,145199,145201,145203,145205,145207],{"class":54,"line":66},[52,145196,139186],{"class":308},[52,145198,54087],{"class":79},[52,145200,145022],{"class":308},[52,145202,1216],{"class":79},[52,145204,3729],{"class":308},[52,145206,145029],{"class":58},[52,145208,2737],{"class":79},[52,145210,145211],{"class":54,"line":83},[52,145212,452],{"class":79},[3195,145214,145216],{"id":145215},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[24646,145218,145220],{"id":145219},"_18141-scale介绍","18.1.4.1 scale介绍",[14,145222,145223],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[4509,145225],{"style":129058,"src":145226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[24646,145228,145230],{"id":145229},"_18142-分页按钮","18.1.4.2 分页按钮",[4509,145232],{"style":129058,"src":145233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[42,145235,145237],{"className":129202,"code":145236,"language":129204,"meta":47,"style":47},"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",[49,145238,145239,145245,145261,145265,145269,145274,145280,145294,145299],{"__ignoreMap":47},[52,145240,145241,145243],{"class":54,"line":55},[52,145242,54261],{"class":53950},[52,145244,18220],{"class":79},[52,145246,145247,145249,145251,145254,145256,145259],{"class":54,"line":66},[52,145248,139186],{"class":308},[52,145250,54087],{"class":79},[52,145252,145253],{"class":308},"scale",[52,145255,1216],{"class":79},[52,145257,145258],{"class":308},"1.2",[52,145260,2737],{"class":79},[52,145262,145263],{"class":54,"line":83},[52,145264,452],{"class":79},[52,145266,145267],{"class":54,"line":91},[52,145268,138663],{"class":79},[52,145270,145271],{"class":54,"line":98},[52,145272,145273],{"class":94},"\u002F* 2D 缩放 *\u002F\n",[52,145275,145276,145278],{"class":54,"line":107},[52,145277,54261],{"class":53950},[52,145279,18220],{"class":79},[52,145281,145282,145284,145286,145288,145290,145292],{"class":54,"line":113},[52,145283,139186],{"class":308},[52,145285,54087],{"class":79},[52,145287,145253],{"class":308},[52,145289,1216],{"class":79},[52,145291,145258],{"class":308},[52,145293,2737],{"class":79},[52,145295,145296],{"class":54,"line":119},[52,145297,145298],{"class":94},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[52,145300,145301],{"class":54,"line":126},[52,145302,452],{"class":79},[14,145304,145305],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[42,145307,145309],{"className":129202,"code":145308,"language":129204,"meta":47,"style":47},"\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",[49,145310,145311,145316,145326,145347,145368,145372,145377,145383,145410],{"__ignoreMap":47},[52,145312,145313],{"class":54,"line":55},[52,145314,145315],{"class":94},"\u002F* 定义动画 *\u002F\n",[52,145317,145318,145321,145324],{"class":54,"line":66},[52,145319,145320],{"class":58},"@keyframes",[52,145322,145323],{"class":1223}," move",[52,145325,18220],{"class":79},[52,145327,145328,145331,145333,145335,145337,145340,145342,145344],{"class":54,"line":83},[52,145329,145330],{"class":75},"  0%",[52,145332,82457],{"class":79},[52,145334,50784],{"class":308},[52,145336,54087],{"class":79},[52,145338,145339],{"class":308},"translateX",[52,145341,1216],{"class":79},[52,145343,692],{"class":308},[52,145345,145346],{"class":79},"); }\n",[52,145348,145349,145352,145354,145356,145358,145360,145362,145364,145366],{"class":54,"line":91},[52,145350,145351],{"class":75},"  100%",[52,145353,82457],{"class":79},[52,145355,50784],{"class":308},[52,145357,54087],{"class":79},[52,145359,145339],{"class":308},[52,145361,1216],{"class":79},[52,145363,591],{"class":308},[52,145365,54142],{"class":58},[52,145367,145346],{"class":79},[52,145369,145370],{"class":54,"line":98},[52,145371,452],{"class":79},[52,145373,145374],{"class":54,"line":107},[52,145375,145376],{"class":94},"\u002F* 调用动画 *\u002F\n",[52,145378,145379,145381],{"class":54,"line":113},[52,145380,54261],{"class":53950},[52,145382,18220],{"class":79},[52,145384,145385,145388,145390,145392,145394,145396,145398,145400,145402,145405,145408],{"class":54,"line":119},[52,145386,145387],{"class":308},"  animation",[52,145389,54087],{"class":79},[52,145391,137888],{"class":308},[52,145393,27768],{"class":308},[52,145395,1291],{"class":58},[52,145397,81330],{"class":308},[52,145399,1444],{"class":308},[52,145401,1291],{"class":58},[52,145403,145404],{"class":308}," infinite",[52,145406,145407],{"class":308}," alternate",[52,145409,80],{"class":79},[52,145411,145412],{"class":54,"line":126},[52,145413,452],{"class":79},[14,145415,145305],{},[42,145417,145420],{"className":145418,"code":145419,"language":8154},[8152],"\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",[49,145421,145419],{"__ignoreMap":47},[24646,145423,145425],{"id":145424},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,145427,145428],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[4509,145430],{"style":129058,"src":145431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[42,145433,145434],{"className":129202,"code":145308,"language":129204,"meta":47,"style":47},[49,145435,145436,145440,145448,145466,145486,145490,145494,145500,145524],{"__ignoreMap":47},[52,145437,145438],{"class":54,"line":55},[52,145439,145315],{"class":94},[52,145441,145442,145444,145446],{"class":54,"line":66},[52,145443,145320],{"class":58},[52,145445,145323],{"class":1223},[52,145447,18220],{"class":79},[52,145449,145450,145452,145454,145456,145458,145460,145462,145464],{"class":54,"line":83},[52,145451,145330],{"class":75},[52,145453,82457],{"class":79},[52,145455,50784],{"class":308},[52,145457,54087],{"class":79},[52,145459,145339],{"class":308},[52,145461,1216],{"class":79},[52,145463,692],{"class":308},[52,145465,145346],{"class":79},[52,145467,145468,145470,145472,145474,145476,145478,145480,145482,145484],{"class":54,"line":91},[52,145469,145351],{"class":75},[52,145471,82457],{"class":79},[52,145473,50784],{"class":308},[52,145475,54087],{"class":79},[52,145477,145339],{"class":308},[52,145479,1216],{"class":79},[52,145481,591],{"class":308},[52,145483,54142],{"class":58},[52,145485,145346],{"class":79},[52,145487,145488],{"class":54,"line":98},[52,145489,452],{"class":79},[52,145491,145492],{"class":54,"line":107},[52,145493,145376],{"class":94},[52,145495,145496,145498],{"class":54,"line":113},[52,145497,54261],{"class":53950},[52,145499,18220],{"class":79},[52,145501,145502,145504,145506,145508,145510,145512,145514,145516,145518,145520,145522],{"class":54,"line":119},[52,145503,145387],{"class":308},[52,145505,54087],{"class":79},[52,145507,137888],{"class":308},[52,145509,27768],{"class":308},[52,145511,1291],{"class":58},[52,145513,81330],{"class":308},[52,145515,1444],{"class":308},[52,145517,1291],{"class":58},[52,145519,145404],{"class":308},[52,145521,145407],{"class":308},[52,145523,80],{"class":79},[52,145525,145526],{"class":54,"line":126},[52,145527,452],{"class":79},[14,145529,145530],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[3195,145532,145534],{"id":145533},"_1823-知识点回顾","18.2.3 知识点回顾",[42,145536,145537],{"className":129202,"code":131371,"language":129204,"meta":47,"style":47},[49,145538,145539,145545,145555],{"__ignoreMap":47},[52,145540,145541,145543],{"class":54,"line":55},[52,145542,54261],{"class":53950},[52,145544,18220],{"class":79},[52,145546,145547,145549,145551,145553],{"class":54,"line":66},[52,145548,131384],{"class":308},[52,145550,54087],{"class":79},[52,145552,64386],{"class":308},[52,145554,80],{"class":79},[52,145556,145557],{"class":54,"line":83},[52,145558,452],{"class":79},[18,145560,145562],{"id":145561},"_183-3d-转换","18.3 3D 转换",[14,145564,145565],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[3195,145567,145569],{"id":145568},"_1831-坐标轴认识","18.3.1 坐标轴认识",[4509,145571],{"style":129058,"src":145572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[3195,145574,145576],{"id":145575},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[4509,145578],{"style":129058,"src":145579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,145581,145582],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,145584,145585],{},"translate3d的效果需要搭配透视perspective来使用",[4509,145587],{"style":129058,"src":145588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[3195,145590,145592],{"id":145591},"_1833-透视-perspective","18.3.3 透视 perspective",[4509,145594],{"style":129058,"src":145595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,145597,145598],{},"透视写在父盒子上，单位为像素",[3195,145600,145602],{"id":145601},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[24646,145604,145606],{"id":145605},"_18341-分开解释","18.3.4.1 分开解释",[4509,145608],{"style":129058,"src":145609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[4509,145611],{"style":129058,"src":145612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[4509,145614],{"style":129058,"src":145615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,145617,145618],{},"总结来说就是左手原则",[24646,145620,145622],{"id":145621},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[4509,145624],{"style":129058,"src":145625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[3195,145627,145629],{"id":145628},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[4509,145631],{"style":129058,"src":145632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[4509,145634],{"style":129058,"src":145635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[42,145637,145639],{"className":129202,"code":145638,"language":129204,"meta":47,"style":47},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[49,145640,145641,145647,145660,145677],{"__ignoreMap":47},[52,145642,145643,145645],{"class":54,"line":55},[52,145644,54261],{"class":53950},[52,145646,18220],{"class":79},[52,145648,145649,145652,145654,145656,145658],{"class":54,"line":66},[52,145650,145651],{"class":308},"  perspective",[52,145653,54087],{"class":79},[52,145655,67724],{"class":308},[52,145657,54142],{"class":58},[52,145659,80],{"class":79},[52,145661,145662,145664,145666,145669,145671,145673,145675],{"class":54,"line":83},[52,145663,139186],{"class":308},[52,145665,54087],{"class":79},[52,145667,145668],{"class":308},"rotateX",[52,145670,1216],{"class":79},[52,145672,3729],{"class":308},[52,145674,145029],{"class":58},[52,145676,2737],{"class":79},[52,145678,145679],{"class":54,"line":91},[52,145680,452],{"class":79},[3195,145682,145684],{"id":145683},"_1836-案例","18.3.6 案例",[24646,145686,145688],{"id":145687},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[4509,145690],{"style":129058,"src":145691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[4509,145693],{"style":129058,"src":145694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[4509,145696],{"style":129058,"src":145697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[42,145699,145701],{"className":129202,"code":145700,"language":129204,"meta":47,"style":47},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[49,145702,145703,145708,145714,145726],{"__ignoreMap":47},[52,145704,145705],{"class":54,"line":55},[52,145706,145707],{"class":94},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[52,145709,145710,145712],{"class":54,"line":66},[52,145711,136199],{"class":75},[52,145713,18220],{"class":79},[52,145715,145716,145718,145720,145722,145724],{"class":54,"line":83},[52,145717,145651],{"class":308},[52,145719,54087],{"class":79},[52,145721,67724],{"class":308},[52,145723,54142],{"class":58},[52,145725,80],{"class":79},[52,145727,145728],{"class":54,"line":91},[52,145729,452],{"class":79},[24646,145731,145733],{"id":145732},"_18362-3d导航栏","18.3.6.2 3D导航栏",[4509,145735],{"style":129058,"src":145736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[42,145738,145739],{"className":129949,"code":133306,"language":129951,"meta":47,"style":47},[49,145740,145741,145745,145759,145763],{"__ignoreMap":47},[52,145742,145743],{"class":54,"line":55},[52,145744,133313],{"class":94},[52,145746,145747,145749,145751,145753,145755,145757],{"class":54,"line":66},[52,145748,698],{"class":79},[52,145750,54261],{"class":53950},[52,145752,56136],{"class":75},[52,145754,292],{"class":79},[52,145756,133326],{"class":62},[52,145758,53957],{"class":79},[52,145760,145761],{"class":54,"line":83},[52,145762,133333],{"class":79},[52,145764,145765,145767,145769],{"class":54,"line":91},[52,145766,54435],{"class":79},[52,145768,54261],{"class":53950},[52,145770,53957],{"class":79},[24646,145772,145774],{"id":145773},"_18363-旋转木马","18.3.6.3 旋转木马",[4509,145776],{"style":129058,"src":145777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[42,145779,145780],{"className":129202,"code":145005,"language":129204,"meta":47,"style":47},[49,145781,145782,145788,145804],{"__ignoreMap":47},[52,145783,145784,145786],{"class":54,"line":55},[52,145785,54261],{"class":53950},[52,145787,18220],{"class":79},[52,145789,145790,145792,145794,145796,145798,145800,145802],{"class":54,"line":66},[52,145791,139186],{"class":308},[52,145793,54087],{"class":79},[52,145795,145022],{"class":308},[52,145797,1216],{"class":79},[52,145799,3729],{"class":308},[52,145801,145029],{"class":58},[52,145803,2737],{"class":79},[52,145805,145806],{"class":54,"line":83},[52,145807,452],{"class":79},[3141,145809,145810],{},"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":47,"searchDepth":66,"depth":66,"links":145812},[145813,145820],{"id":144908,"depth":66,"text":144909,"children":145814},[145815,145816,145817,145818,145819],{"id":144932,"depth":83,"text":144933},{"id":144987,"depth":83,"text":144988},{"id":145112,"depth":83,"text":145113},{"id":145215,"depth":83,"text":145216},{"id":145533,"depth":83,"text":145534},{"id":145561,"depth":66,"text":145562,"children":145821},[145822,145823,145824,145825,145826,145827],{"id":145568,"depth":83,"text":145569},{"id":145575,"depth":83,"text":145576},{"id":145591,"depth":83,"text":145592},{"id":145601,"depth":83,"text":145602},{"id":145628,"depth":83,"text":145629},{"id":145683,"depth":83,"text":145684},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144900,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":145834,"title":145835,"body":145836,"description":26025,"extension":3153,"meta":146039,"navigation":122,"path":146040,"seo":146041,"stem":146042,"__hash__":146043},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":145837,"toc":146028},[145838,145841,145845,145848,145851,145855,145858,145861,145864,145868,145871,145875,145878,145882,145885,145889,145903,145907,145932,145935,145938,145955,145959,145963,145966,145969,145973,145976,145979,145997,146001,146004,146018,146022,146025],[10,145839,145835],{"id":145840},"_19-移动端基础-前缀现状与视口",[18,145842,145844],{"id":145843},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[4509,145846],{"style":129058,"src":145847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,145849,145850],{},"意思就是加个前缀，增加兼容性",[18,145852,145854],{"id":145853},"_192-移动端现状认识","19.2 移动端现状认识",[4509,145856],{"style":129058,"src":145857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,145859,145860],{},"调试方法：",[4509,145862],{"style":129058,"src":145863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[18,145865,145867],{"id":145866},"_193-视口","19.3 视口",[14,145869,145870],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[3195,145872,145874],{"id":145873},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[4509,145876],{"style":129058,"src":145877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[3195,145879,145881],{"id":145880},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[4509,145883],{"style":129058,"src":145884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[3195,145886,145888],{"id":145887},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[29,145890,145891,145894,145897,145900],{},[32,145892,145893],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[32,145895,145896],{},"理想视口，对设备来讲，是最理想的视口尺寸",[32,145898,145899],{},"需要手动添写meta视口标签通知浏览器操作",[32,145901,145902],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[3195,145904,145906],{"id":145905},"_1934-meta视口标签","19.3.4 meta视口标签",[42,145908,145910],{"className":129949,"code":145909,"language":129951,"meta":47,"style":47},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[49,145911,145912],{"__ignoreMap":47},[52,145913,145914,145916,145918,145920,145922,145924,145926,145928,145930],{"class":54,"line":55},[52,145915,698],{"class":79},[52,145917,53994],{"class":53950},[52,145919,17568],{"class":75},[52,145921,292],{"class":79},[52,145923,54041],{"class":62},[52,145925,54021],{"class":75},[52,145927,292],{"class":79},[52,145929,54048],{"class":62},[52,145931,53957],{"class":79},[4509,145933],{"style":129058,"src":145934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,145936,145937],{},"标准视口设置：",[1696,145939,145940,145943,145946,145949,145952],{},[32,145941,145942],{},"视口宽度和设备保持一致",[32,145944,145945],{},"视口的默认缩放比例1.0",[32,145947,145948],{},"不允许用户自行缩放",[32,145950,145951],{},"最大允许的缩放比例1.0",[32,145953,145954],{},"最小允许的缩放比例1.0",[3195,145956,145958],{"id":145957},"_1935-二倍图","19.3.5 二倍图",[24646,145960,145962],{"id":145961},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[4509,145964],{"style":129058,"src":145965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[4509,145967],{"style":129058,"src":145968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[24646,145970,145972],{"id":145971},"_19352-多倍图","19.3.5.2 多倍图",[4509,145974],{"style":129058,"src":145975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,145977,145978],{},"二倍图法，代码如下：",[42,145980,145982],{"className":129202,"code":145981,"language":129204,"meta":47,"style":47},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[49,145983,145984,145989],{"__ignoreMap":47},[52,145985,145986],{"class":54,"line":55},[52,145987,145988],{"class":94},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[52,145990,145991,145994],{"class":54,"line":66},[52,145992,145993],{"class":53950},"background-size",[52,145995,145996],{"class":79},": 50% 50%;\n",[24646,145998,146000],{"id":145999},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[4509,146002],{"style":129058,"src":146003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[1696,146005,146006,146009,146012,146015],{},[32,146007,146008],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[32,146010,146011],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[32,146013,146014],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[32,146016,146017],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[24646,146019,146021],{"id":146020},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[4509,146023],{"style":129058,"src":146024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[3141,146026,146027],{},"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":47,"searchDepth":66,"depth":66,"links":146029},[146030,146031,146032],{"id":145843,"depth":66,"text":145844},{"id":145853,"depth":66,"text":145854},{"id":145866,"depth":66,"text":145867,"children":146033},[146034,146035,146036,146037,146038],{"id":145873,"depth":83,"text":145874},{"id":145880,"depth":83,"text":145881},{"id":145887,"depth":83,"text":145888},{"id":145905,"depth":83,"text":145906},{"id":145957,"depth":83,"text":145958},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":145835,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":146045,"title":146046,"body":146047,"description":26025,"extension":3153,"meta":146924,"navigation":122,"path":146925,"seo":146926,"stem":146927,"__hash__":146928},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":146048,"toc":146908},[146049,146052,146056,146063,146066,146073,146076,146081,146084,146088,146092,146099,146102,146105,146109,146112,146115,146118,146121,146124,146128,146131,146135,146137,146140,146143,146146,146149,146151,146154,146156,146186,146188,146218,146222,146225,146229,146232,146249,146252,146255,146331,146333,146336,146339,146342,146345,146347,146350,146353,146357,146379,146382,146385,146389,146392,146398,146401,146405,146408,146411,146415,146418,146421,146424,146428,146431,146434,146437,146440,146444,146447,146451,146458,146461,146464,146467,146470,146480,146483,146486,146493,146496,146500,146503,146506,146510,146513,146516,146519,146564,146567,146570,146573,146575,146704,146706,146744,146747,146750,146752,146870,146872,146906],[10,146050,146046],{"id":146051},"_20-移动端布局实战上篇",[18,146053,146055],{"id":146054},"_201-移动端主流方案","20.1 移动端主流方案",[1696,146057,146058],{},[32,146059,146060],{},[2389,146061,146062],{},"单独移动端页面（主流）",[4509,146064],{"style":129058,"src":146065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[1696,146067,146068],{"start":66},[32,146069,146070],{},[2389,146071,146072],{},"响应式兼容PC移动端",[4509,146074],{"style":129058,"src":146075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[1696,146077,146078],{"start":83},[32,146079,146080],{},"两种页面选型布局方式",[4509,146082],{"style":129058,"src":146083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[18,146085,146087],{"id":146086},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[3195,146089,146091],{"id":146090},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,146093,146094,146095],{},"官网地址： ",[3451,146096,146097],{"href":146097,"rel":146098},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[26514],[4509,146100],{"style":129058,"src":146101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[4509,146103],{"style":129058,"src":146104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[3195,146106,146108],{"id":146107},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[4509,146110],{"style":129058,"src":146111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[4509,146113],{"style":129058,"src":146114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,146116,146117],{},"去除高亮：",[14,146119,146120],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,146122,146123],{},"-webkit- tap-highlight-color: transparent;",[18,146125,146127],{"id":146126},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[4509,146129],{"style":129058,"src":146130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[18,146132,146134],{"id":146133},"_204-流式布局案例","20.4 流式布局案例",[14,146136,3252],{},[14,146138,146139],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,146141,146142],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,146144,146145],{},"图片格式：",[4509,146147],{"style":129058,"src":146148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,146150,138245],{},[4509,146152],{"style":129058,"src":146153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,146155,142572],{},[42,146157,146158],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,146159,146160],{"__ignoreMap":47},[52,146161,146162,146164,146166,146168,146170,146172,146174,146176,146178,146180,146182,146184],{"class":54,"line":55},[52,146163,698],{"class":79},[52,146165,4509],{"class":53950},[52,146167,57889],{"class":75},[52,146169,292],{"class":79},[52,146171,136719],{"class":62},[52,146173,57897],{"class":75},[52,146175,292],{"class":79},[52,146177,136726],{"class":62},[52,146179,136729],{"class":75},[52,146181,292],{"class":79},[52,146183,136734],{"class":62},[52,146185,53957],{"class":79},[14,146187,142661],{},[42,146189,146190],{"className":129949,"code":136704,"language":129951,"meta":47,"style":47},[49,146191,146192],{"__ignoreMap":47},[52,146193,146194,146196,146198,146200,146202,146204,146206,146208,146210,146212,146214,146216],{"class":54,"line":55},[52,146195,698],{"class":79},[52,146197,4509],{"class":53950},[52,146199,57889],{"class":75},[52,146201,292],{"class":79},[52,146203,136719],{"class":62},[52,146205,57897],{"class":75},[52,146207,292],{"class":79},[52,146209,136726],{"class":62},[52,146211,136729],{"class":75},[52,146213,292],{"class":79},[52,146215,136734],{"class":62},[52,146217,53957],{"class":79},[18,146219,146221],{"id":146220},"_205-flex布局","20.5 flex布局",[4509,146223],{"style":129058,"src":146224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[3195,146226,146228],{"id":146227},"_2051-布局原理","20.5.1 布局原理",[14,146230,146231],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[29,146233,146234,146237,146240,146243,146246],{},[32,146235,146236],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[32,146238,146239],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[32,146241,146242],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[32,146244,146245],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[32,146247,146248],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,146250,146251],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,146253,146254],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[42,146256,146258],{"className":129202,"code":146257,"language":129204,"meta":47,"style":47},"\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",[49,146259,146260,146265,146272,146282,146294,146305,146316,146327],{"__ignoreMap":47},[52,146261,146262],{"class":54,"line":55},[52,146263,146264],{"class":94},"\u002F* Flex 弹性布局 *\u002F\n",[52,146266,146267,146270],{"class":54,"line":66},[52,146268,146269],{"class":75},".container",[52,146271,18220],{"class":79},[52,146273,146274,146276,146278,146280],{"class":54,"line":83},[52,146275,130818],{"class":308},[52,146277,54087],{"class":79},[52,146279,54127],{"class":308},[52,146281,80],{"class":79},[52,146283,146284,146287,146289,146292],{"class":54,"line":91},[52,146285,146286],{"class":308},"  flex-direction",[52,146288,54087],{"class":79},[52,146290,146291],{"class":308},"row",[52,146293,80],{"class":79},[52,146295,146296,146299,146301,146303],{"class":54,"line":98},[52,146297,146298],{"class":308},"  justify-content",[52,146300,54087],{"class":79},[52,146302,54318],{"class":308},[52,146304,80],{"class":79},[52,146306,146307,146310,146312,146314],{"class":54,"line":107},[52,146308,146309],{"class":308},"  align-items",[52,146311,54087],{"class":79},[52,146313,54242],{"class":308},[52,146315,80],{"class":79},[52,146317,146318,146321,146323,146325],{"class":54,"line":113},[52,146319,146320],{"class":308},"  flex-wrap",[52,146322,54087],{"class":79},[52,146324,81260],{"class":308},[52,146326,80],{"class":79},[52,146328,146329],{"class":54,"line":119},[52,146330,452],{"class":79},[14,146332,73103],{},[14,146334,146335],{},".form-item .male-label {",[14,146337,146338],{},"   margin-right: 20px;",[14,146340,146341],{},"   display: inline-flex;",[14,146343,146344],{},"   align-items: center;",[14,146346,4132],{},[4509,146348],{"style":129058,"src":146349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[4509,146351],{"style":129058,"src":146352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[3195,146354,146356],{"id":146355},"_2052-常见父项属性","20.5.2 常见父项属性",[1696,146358,146359,146362,146365,146368,146371,146374,146377],{},[32,146360,146361],{},"flex-direction：设置主轴的方向",[32,146363,146364],{},"justify-content：设置主轴上的子元素排列方式",[32,146366,146367],{},"flex-wrap：设置子元素是否换行",[32,146369,146370],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[32,146372,146373],{},"align-items：设置侧轴上的子元素排列方式（单行）",[32,146375,146376],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[32,146378,146361],{},[4509,146380],{"style":129058,"src":146381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[4509,146383],{"style":129058,"src":146384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[1696,146386,146387],{"start":66},[32,146388,146364],{},[4509,146390],{"style":129058,"src":146391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,146393,146394,146397],{},[49,146395,146396],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,146399,146400],{},"跟着主轴走",[1696,146402,146403],{"start":83},[32,146404,146367],{},[4509,146406],{"style":129058,"src":146407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,146409,146410],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[1696,146412,146413],{"start":91},[32,146414,146370],{},[4509,146416],{"style":129058,"src":146417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,146419,146420],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,146422,146423],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[1696,146425,146426],{"start":98},[32,146427,146373],{},[4509,146429],{"style":129058,"src":146430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,146432,146433],{},"align-items与align-content之间的区别：",[14,146435,146436],{},"单找items，多找content",[4509,146438],{"style":129058,"src":146439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[1696,146441,146442],{"start":107},[32,146443,146376],{},[4509,146445],{"style":129058,"src":146446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[3195,146448,146450],{"id":146449},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[1696,146452,146453],{},[32,146454,146455],{},[2389,146456,146457],{},"flex 属性",[14,146459,146460],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[4509,146462],{"style":129058,"src":146463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,146465,146466],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,146468,146469],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[1696,146471,146472],{"start":66},[32,146473,146474,16443,146477],{},[2389,146475,146476],{},"align-self",[2389,146478,146479],{},"控制子项自己在侧轴上的排列方式",[4509,146481],{"style":129058,"src":146482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,146484,146485],{},"单个子盒子在父盒子侧轴上的排列方式",[1696,146487,146488],{"start":83},[32,146489,146490,146492],{},[2389,146491,97947],{}," 属性定义项目的排列顺序",[4509,146494],{"style":129058,"src":146495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[3195,146497,146499],{"id":146498},"_2054-背景线性渐变","20.5.4 背景线性渐变",[4509,146501],{"style":129058,"src":146502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,146504,146505],{},"必须要添加浏览器的私有前缀",[3195,146507,146509],{"id":146508},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,146511,146512],{},"学到最重要的知识：",[14,146514,146515],{},"flex处理这样的布局思路",[4509,146517],{"style":129058,"src":146518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[42,146520,146522],{"className":129202,"code":146521,"language":129204,"meta":47,"style":47},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[49,146523,146524,146530,146540,146550,146560],{"__ignoreMap":47},[52,146525,146526,146528],{"class":54,"line":55},[52,146527,146269],{"class":75},[52,146529,18220],{"class":79},[52,146531,146532,146534,146536,146538],{"class":54,"line":66},[52,146533,130818],{"class":308},[52,146535,54087],{"class":79},[52,146537,54127],{"class":308},[52,146539,80],{"class":79},[52,146541,146542,146544,146546,146548],{"class":54,"line":83},[52,146543,146298],{"class":308},[52,146545,54087],{"class":79},[52,146547,54242],{"class":308},[52,146549,80],{"class":79},[52,146551,146552,146554,146556,146558],{"class":54,"line":91},[52,146553,146309],{"class":308},[52,146555,54087],{"class":79},[52,146557,54242],{"class":308},[52,146559,80],{"class":79},[52,146561,146562],{"class":54,"line":98},[52,146563,452],{"class":79},[14,146565,146566],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,146568,146569],{},"使用属性选择器",[4509,146571],{"style":129058,"src":146572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,146574,71539],{},[42,146576,146578],{"className":129949,"code":146577,"language":129951,"meta":47,"style":47},"\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",[49,146579,146580,146585,146599,146604,146624,146629,146648,146653,146672,146677,146696],{"__ignoreMap":47},[52,146581,146582],{"class":54,"line":55},[52,146583,146584],{"class":94},"\u003C!-- 携程网移动端案例结构 -->\n",[52,146586,146587,146589,146591,146593,146595,146597],{"class":54,"line":66},[52,146588,698],{"class":79},[52,146590,54261],{"class":53950},[52,146592,56136],{"class":75},[52,146594,292],{"class":79},[52,146596,94973],{"class":62},[52,146598,53957],{"class":79},[52,146600,146601],{"class":54,"line":83},[52,146602,146603],{"class":94},"  \u003C!-- 搜索栏 -->\n",[52,146605,146606,146608,146610,146612,146614,146617,146620,146622],{"class":54,"line":91},[52,146607,54794],{"class":79},[52,146609,54261],{"class":53950},[52,146611,56136],{"class":75},[52,146613,292],{"class":79},[52,146615,146616],{"class":62},"\"search-index\"",[52,146618,146619],{"class":79},">...\u003C\u002F",[52,146621,54261],{"class":53950},[52,146623,53957],{"class":79},[52,146625,146626],{"class":54,"line":98},[52,146627,146628],{"class":94},"  \u003C!-- 焦点图 -->\n",[52,146630,146631,146633,146635,146637,146639,146642,146644,146646],{"class":54,"line":107},[52,146632,54794],{"class":79},[52,146634,54261],{"class":53950},[52,146636,56136],{"class":75},[52,146638,292],{"class":79},[52,146640,146641],{"class":62},"\"focus\"",[52,146643,146619],{"class":79},[52,146645,54261],{"class":53950},[52,146647,53957],{"class":79},[52,146649,146650],{"class":54,"line":113},[52,146651,146652],{"class":94},"  \u003C!-- 主导航 -->\n",[52,146654,146655,146657,146659,146661,146663,146666,146668,146670],{"class":54,"line":119},[52,146656,54794],{"class":79},[52,146658,54261],{"class":53950},[52,146660,56136],{"class":75},[52,146662,292],{"class":79},[52,146664,146665],{"class":62},"\"local-nav\"",[52,146667,146619],{"class":79},[52,146669,54261],{"class":53950},[52,146671,53957],{"class":79},[52,146673,146674],{"class":54,"line":126},[52,146675,146676],{"class":94},"  \u003C!-- 子导航 -->\n",[52,146678,146679,146681,146683,146685,146687,146690,146692,146694],{"class":54,"line":132},[52,146680,54794],{"class":79},[52,146682,54261],{"class":53950},[52,146684,56136],{"class":75},[52,146686,292],{"class":79},[52,146688,146689],{"class":62},"\"nav-common\"",[52,146691,146619],{"class":79},[52,146693,54261],{"class":53950},[52,146695,53957],{"class":79},[52,146697,146698,146700,146702],{"class":54,"line":138},[52,146699,54435],{"class":79},[52,146701,54261],{"class":53950},[52,146703,53957],{"class":79},[14,146705,73103],{},[42,146707,146708],{"className":129202,"code":139654,"language":129204,"meta":47,"style":47},[49,146709,146710,146724,146740],{"__ignoreMap":47},[52,146711,146712,146714,146716,146718,146720,146722],{"class":54,"line":55},[52,146713,56471],{"class":53950},[52,146715,4080],{"class":79},[52,146717,105757],{"class":75},[52,146719,292],{"class":58},[52,146721,65349],{"class":62},[52,146723,139671],{"class":79},[52,146725,146726,146728,146730,146732,146734,146736,146738],{"class":54,"line":66},[52,146727,73546],{"class":308},[52,146729,54087],{"class":79},[52,146731,629],{"class":308},[52,146733,54142],{"class":58},[52,146735,54171],{"class":308},[52,146737,132782],{"class":308},[52,146739,80],{"class":79},[52,146741,146742],{"class":54,"line":83},[52,146743,452],{"class":79},[14,146745,146746],{},"总代码和效果展示：",[4509,146748],{"style":129058,"src":146749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,146751,71539],{},[42,146753,146754],{"className":129949,"code":146577,"language":129951,"meta":47,"style":47},[49,146755,146756,146760,146774,146778,146796,146800,146818,146822,146840,146844,146862],{"__ignoreMap":47},[52,146757,146758],{"class":54,"line":55},[52,146759,146584],{"class":94},[52,146761,146762,146764,146766,146768,146770,146772],{"class":54,"line":66},[52,146763,698],{"class":79},[52,146765,54261],{"class":53950},[52,146767,56136],{"class":75},[52,146769,292],{"class":79},[52,146771,94973],{"class":62},[52,146773,53957],{"class":79},[52,146775,146776],{"class":54,"line":83},[52,146777,146603],{"class":94},[52,146779,146780,146782,146784,146786,146788,146790,146792,146794],{"class":54,"line":91},[52,146781,54794],{"class":79},[52,146783,54261],{"class":53950},[52,146785,56136],{"class":75},[52,146787,292],{"class":79},[52,146789,146616],{"class":62},[52,146791,146619],{"class":79},[52,146793,54261],{"class":53950},[52,146795,53957],{"class":79},[52,146797,146798],{"class":54,"line":98},[52,146799,146628],{"class":94},[52,146801,146802,146804,146806,146808,146810,146812,146814,146816],{"class":54,"line":107},[52,146803,54794],{"class":79},[52,146805,54261],{"class":53950},[52,146807,56136],{"class":75},[52,146809,292],{"class":79},[52,146811,146641],{"class":62},[52,146813,146619],{"class":79},[52,146815,54261],{"class":53950},[52,146817,53957],{"class":79},[52,146819,146820],{"class":54,"line":113},[52,146821,146652],{"class":94},[52,146823,146824,146826,146828,146830,146832,146834,146836,146838],{"class":54,"line":119},[52,146825,54794],{"class":79},[52,146827,54261],{"class":53950},[52,146829,56136],{"class":75},[52,146831,292],{"class":79},[52,146833,146665],{"class":62},[52,146835,146619],{"class":79},[52,146837,54261],{"class":53950},[52,146839,53957],{"class":79},[52,146841,146842],{"class":54,"line":126},[52,146843,146676],{"class":94},[52,146845,146846,146848,146850,146852,146854,146856,146858,146860],{"class":54,"line":132},[52,146847,54794],{"class":79},[52,146849,54261],{"class":53950},[52,146851,56136],{"class":75},[52,146853,292],{"class":79},[52,146855,146689],{"class":62},[52,146857,146619],{"class":79},[52,146859,54261],{"class":53950},[52,146861,53957],{"class":79},[52,146863,146864,146866,146868],{"class":54,"line":138},[52,146865,54435],{"class":79},[52,146867,54261],{"class":53950},[52,146869,53957],{"class":79},[14,146871,73103],{},[42,146873,146874],{"className":129949,"code":133306,"language":129951,"meta":47,"style":47},[49,146875,146876,146880,146894,146898],{"__ignoreMap":47},[52,146877,146878],{"class":54,"line":55},[52,146879,133313],{"class":94},[52,146881,146882,146884,146886,146888,146890,146892],{"class":54,"line":66},[52,146883,698],{"class":79},[52,146885,54261],{"class":53950},[52,146887,56136],{"class":75},[52,146889,292],{"class":79},[52,146891,133326],{"class":62},[52,146893,53957],{"class":79},[52,146895,146896],{"class":54,"line":83},[52,146897,133333],{"class":79},[52,146899,146900,146902,146904],{"class":54,"line":91},[52,146901,54435],{"class":79},[52,146903,54261],{"class":53950},[52,146905,53957],{"class":79},[3141,146907,140603],{},{"title":47,"searchDepth":66,"depth":66,"links":146909},[146910,146911,146915,146916,146917],{"id":146054,"depth":66,"text":146055},{"id":146086,"depth":66,"text":146087,"children":146912},[146913,146914],{"id":146090,"depth":83,"text":146091},{"id":146107,"depth":83,"text":146108},{"id":146126,"depth":66,"text":146127},{"id":146133,"depth":66,"text":146134},{"id":146220,"depth":66,"text":146221,"children":146918},[146919,146920,146921,146922,146923],{"id":146227,"depth":83,"text":146228},{"id":146355,"depth":83,"text":146356},{"id":146449,"depth":83,"text":146450},{"id":146498,"depth":83,"text":146499},{"id":146508,"depth":83,"text":146509},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":146046,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146930,"title":146931,"body":146932,"description":26025,"extension":3153,"meta":148159,"navigation":122,"path":148160,"seo":148161,"stem":148162,"__hash__":148163},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146933,"toc":148137},[146934,146937,146941,146945,146948,146951,146955,146960,146963,146966,146969,146972,146975,147032,147035,147040,147043,147046,147050,147061,147065,147068,147071,147078,147083,147087,147090,147096,147099,147103,147106,147113,147116,147119,147126,147129,147136,147139,147142,147149,147152,147155,147157,147174,147178,147181,147184,147187,147191,147194,147197,147200,147203,147206,147209,147211,147214,147217,147279,147282,147392,147399,147405,147408,147411,147415,147418,147422,147427,147430,147437,147440,147446,147451,147454,147457,147460,147463,147466,147469,147472,147475,147531,147533,147559,147563,147566,147569,147572,147580,147583,147586,147590,147646,147649,147653,147659,147670,147673,147678,147681,147684,147690,147693,147696,147699,147702,147705,147708,147711,147714,147739,147745,147748,147751,147754,147757,147760,147763,147768,147771,147774,147777,147785,147788,147795,147798,147801,147803,147827,147829,147832,147835,147838,147841,147844,147847,147850,147884,147887,147890,147924,147931,147934,147937,147940,147943,147946,147949,147956,147959,147962,147965,147968,147975,147978,147981,147988,147991,147994,147998,148001,148004,148007,148010,148013,148016,148019,148022,148024,148048,148050,148074,148078,148089,148092,148095,148098,148101,148104,148107,148110,148113,148116,148119,148122,148125,148128,148131,148134],[10,146935,146931],{"id":146936},"_21-移动端布局实战下篇",[18,146938,146940],{"id":146939},"_211-rem适配布局","21.1 rem适配布局",[3195,146942,146944],{"id":146943},"_2111-rem单位","21.1.1 rem单位",[4509,146946],{"style":129058,"src":146947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,146949,146950],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[3195,146952,146954],{"id":146953},"_2112-媒体查询","21.1.2 媒体查询",[1696,146956,146957],{},[32,146958,146959],{},"参数介绍",[4509,146961],{"style":129058,"src":146962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[4509,146964],{"style":129058,"src":146965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[4509,146967],{"style":129058,"src":146968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[4509,146970],{"style":129058,"src":146971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[4509,146973],{"style":129058,"src":146974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[42,146976,146978],{"className":129202,"code":146977,"language":129204,"meta":47,"style":47},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[49,146979,146980,146985,147004,147011,147024,147028],{"__ignoreMap":47},[52,146981,146982],{"class":54,"line":55},[52,146983,146984],{"class":94},"\u002F* 媒体查询 *\u002F\n",[52,146986,146987,146990,146992,146995,146997,147000,147002],{"class":54,"line":66},[52,146988,146989],{"class":58},"@media",[52,146991,682],{"class":79},[52,146993,146994],{"class":308},"max-width",[52,146996,54087],{"class":79},[52,146998,146999],{"class":308},"768",[52,147001,54142],{"class":58},[52,147003,15090],{"class":79},[52,147005,147006,147009],{"class":54,"line":83},[52,147007,147008],{"class":75},"  .container",[52,147010,18220],{"class":79},[52,147012,147013,147016,147018,147020,147022],{"class":54,"line":91},[52,147014,147015],{"class":308},"    width",[52,147017,54087],{"class":79},[52,147019,591],{"class":308},[52,147021,1998],{"class":58},[52,147023,80],{"class":79},[52,147025,147026],{"class":54,"line":98},[52,147027,129998],{"class":79},[52,147029,147030],{"class":54,"line":107},[52,147031,452],{"class":79},[14,147033,147034],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[1696,147036,147037],{"start":66},[32,147038,147039],{},"引入资源",[4509,147041],{"style":129058,"src":147042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,147044,147045],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[3195,147047,147049],{"id":147048},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[29,147051,147052,147055,147058],{},[32,147053,147054],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[32,147056,147057],{},"媒体查询可以根据不同设备宽度来修改样式",[32,147059,147060],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[18,147062,147064],{"id":147063},"_212-less基础","21.2 Less基础",[14,147066,147067],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,147069,147070],{},"Less可以解决该问题，它是css的扩展语言",[14,147072,147073,147074],{},"Less中文网址： ",[3451,147075,147076],{"href":147076,"rel":147077},"http:\u002F\u002Flesscss.cn\u002F",[26514],[14,147079,147080],{},[2389,147081,147082],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[3195,147084,147086],{"id":147085},"_2121-less安装","21.2.1 less安装",[14,147088,147089],{},"如果使用vscode，则无需进行下方安装步骤",[14,147091,147092],{},[3451,147093,147094],{"href":147094,"rel":147095},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[26514],[4509,147097],{"style":129058,"src":147098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[3195,147100,147102],{"id":147101},"_2122-less使用","21.2.2 less使用",[14,147104,147105],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[1696,147107,147108],{},[32,147109,147110],{},[2389,147111,147112],{},"Less 变量",[4509,147114],{"style":129058,"src":147115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[4509,147117],{"style":129058,"src":147118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[1696,147120,147121],{"start":66},[32,147122,147123],{},[2389,147124,147125],{},"Less 编译",[4509,147127],{"style":129058,"src":147128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[1696,147130,147131],{"start":83},[32,147132,147133],{},[2389,147134,147135],{},"Less 嵌套",[4509,147137],{"style":129058,"src":147138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[4509,147140],{"style":129058,"src":147141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[1696,147143,147144],{"start":91},[32,147145,147146],{},[2389,147147,147148],{},"Less 运算",[4509,147150],{"style":129058,"src":147151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,147153,147154],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,147156,3252],{},[29,147158,147159,147162,147165,147168,147171],{},[32,147160,147161],{},"乘号（*）和除号（\u002F）的写法",[32,147163,147164],{},"运算符中间左右有个空格隔开 1px + 5",[32,147166,147167],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[32,147169,147170],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[32,147172,147173],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[18,147175,147177],{"id":147176},"_213-rem-适配方案","21.3 rem 适配方案",[14,147179,147180],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,147182,147183],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[4509,147185],{"style":129058,"src":147186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[3195,147188,147190],{"id":147189},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,147192,147193],{},"rem + 媒体查询 + less 技术",[4509,147195],{"style":129058,"src":147196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,147198,147199],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,147201,147202],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[4509,147204],{"style":129058,"src":147205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,147207,147208],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,147210,17281],{},[4509,147212],{"style":129058,"src":147213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,147215,147216],{},"index.html:",[42,147218,147220],{"className":129202,"code":147219,"language":129204,"meta":47,"style":47},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[49,147221,147222,147227,147233,147249,147253,147259,147275],{"__ignoreMap":47},[52,147223,147224],{"class":54,"line":55},[52,147225,147226],{"class":94},"\u002F* rem 适配方案 *\u002F\n",[52,147228,147229,147231],{"class":54,"line":66},[52,147230,53285],{"class":53950},[52,147232,18220],{"class":79},[52,147234,147235,147237,147239,147242,147244,147246],{"class":54,"line":83},[52,147236,73276],{"class":308},[52,147238,54087],{"class":79},[52,147240,147241],{"class":308},"62.5",[52,147243,1998],{"class":58},[52,147245,133065],{"class":79},[52,147247,147248],{"class":94},"\u002F* 1rem = 10px *\u002F\n",[52,147250,147251],{"class":54,"line":91},[52,147252,452],{"class":79},[52,147254,147255,147257],{"class":54,"line":98},[52,147256,133050],{"class":75},[52,147258,18220],{"class":79},[52,147260,147261,147263,147265,147267,147270,147272],{"class":54,"line":107},[52,147262,73218],{"class":308},[52,147264,54087],{"class":79},[52,147266,3649],{"class":308},[52,147268,147269],{"class":58},"rem",[52,147271,133065],{"class":79},[52,147273,147274],{"class":94},"\u002F* 100px *\u002F\n",[52,147276,147277],{"class":54,"line":113},[52,147278,452],{"class":79},[14,147280,147281],{},"common.less",[42,147283,147285],{"className":129202,"code":147284,"language":129204,"meta":47,"style":47},"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",[49,147286,147287,147293,147308,147312,147318,147332,147336,147340,147344,147350,147364,147368,147374,147388],{"__ignoreMap":47},[52,147288,147289,147291],{"class":54,"line":55},[52,147290,53285],{"class":53950},[52,147292,18220],{"class":79},[52,147294,147295,147297,147299,147301,147303,147305],{"class":54,"line":66},[52,147296,73276],{"class":308},[52,147298,54087],{"class":79},[52,147300,147241],{"class":308},[52,147302,1998],{"class":58},[52,147304,28717],{"class":79},[52,147306,147307],{"class":94},"\u002F* 10px *\u002F\n",[52,147309,147310],{"class":54,"line":83},[52,147311,452],{"class":79},[52,147313,147314,147316],{"class":54,"line":91},[52,147315,54261],{"class":53950},[52,147317,18220],{"class":79},[52,147319,147320,147322,147324,147326,147328,147330],{"class":54,"line":98},[52,147321,73218],{"class":308},[52,147323,54087],{"class":79},[52,147325,3649],{"class":308},[52,147327,147269],{"class":58},[52,147329,28717],{"class":79},[52,147331,147274],{"class":94},[52,147333,147334],{"class":54,"line":107},[52,147335,452],{"class":79},[52,147337,147338],{"class":54,"line":113},[52,147339,138663],{"class":79},[52,147341,147342],{"class":54,"line":119},[52,147343,147226],{"class":94},[52,147345,147346,147348],{"class":54,"line":126},[52,147347,53285],{"class":53950},[52,147349,18220],{"class":79},[52,147351,147352,147354,147356,147358,147360,147362],{"class":54,"line":132},[52,147353,73276],{"class":308},[52,147355,54087],{"class":79},[52,147357,147241],{"class":308},[52,147359,1998],{"class":58},[52,147361,133065],{"class":79},[52,147363,147248],{"class":94},[52,147365,147366],{"class":54,"line":138},[52,147367,452],{"class":79},[52,147369,147370,147372],{"class":54,"line":144},[52,147371,133050],{"class":75},[52,147373,18220],{"class":79},[52,147375,147376,147378,147380,147382,147384,147386],{"class":54,"line":153},[52,147377,73218],{"class":308},[52,147379,54087],{"class":79},[52,147381,3649],{"class":308},[52,147383,147269],{"class":58},[52,147385,133065],{"class":79},[52,147387,147274],{"class":94},[52,147389,147390],{"class":54,"line":159},[52,147391,452],{"class":79},[14,147393,147394,147395,147398],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[26202,147396,147397],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[42,147400,147403],{"className":147401,"code":147402,"language":8154},[8152],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[49,147404,147402],{"__ignoreMap":47},[14,147406,147407],{},"less保存时会自动变成.css文件",[14,147409,147410],{},"好好搞懂上述代码写法",[3195,147412,147414],{"id":147413},"_2132-样式导入样式","21.3.2 样式导入样式",[4509,147416],{"style":129058,"src":147417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[3195,147419,147421],{"id":147420},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[1696,147423,147424],{},[32,147425,147426],{},"准备工作",[4509,147428],{"style":129058,"src":147429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,147431,147432,147433],{},"github地址：",[3451,147434,147435],{"href":147435,"rel":147436},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[26514],[14,147438,147439],{},"下载之后，将index.js文件拖到项目中就可以了",[14,147441,147442,147443],{},"js文件引入到index.html中使用的是",[49,147444,147445],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[1696,147447,147448],{"start":66},[32,147449,147450],{},"vscode插件",[4509,147452],{"style":129058,"src":147453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,147455,147456],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,147458,147459],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[4509,147461],{"style":129058,"src":147462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,147464,147465],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[4509,147467],{"style":129058,"src":147468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,147470,147471],{},"修改成75就可以，alt+z为快捷键",[14,147473,147474],{},"index.css：",[42,147476,147477],{"className":129202,"code":147219,"language":129204,"meta":47,"style":47},[49,147478,147479,147483,147489,147503,147507,147513,147527],{"__ignoreMap":47},[52,147480,147481],{"class":54,"line":55},[52,147482,147226],{"class":94},[52,147484,147485,147487],{"class":54,"line":66},[52,147486,53285],{"class":53950},[52,147488,18220],{"class":79},[52,147490,147491,147493,147495,147497,147499,147501],{"class":54,"line":83},[52,147492,73276],{"class":308},[52,147494,54087],{"class":79},[52,147496,147241],{"class":308},[52,147498,1998],{"class":58},[52,147500,133065],{"class":79},[52,147502,147248],{"class":94},[52,147504,147505],{"class":54,"line":91},[52,147506,452],{"class":79},[52,147508,147509,147511],{"class":54,"line":98},[52,147510,133050],{"class":75},[52,147512,18220],{"class":79},[52,147514,147515,147517,147519,147521,147523,147525],{"class":54,"line":107},[52,147516,73218],{"class":308},[52,147518,54087],{"class":79},[52,147520,3649],{"class":308},[52,147522,147269],{"class":58},[52,147524,133065],{"class":79},[52,147526,147274],{"class":94},[52,147528,147529],{"class":54,"line":113},[52,147530,452],{"class":79},[14,147532,147216],{},[42,147534,147535],{"className":129202,"code":129606,"language":129204,"meta":47,"style":47},[49,147536,147537,147543,147555],{"__ignoreMap":47},[52,147538,147539,147541],{"class":54,"line":55},[52,147540,54450],{"class":53950},[52,147542,18220],{"class":79},[52,147544,147545,147547,147549,147551,147553],{"class":54,"line":66},[52,147546,73276],{"class":308},[52,147548,54087],{"class":79},[52,147550,3798],{"class":308},[52,147552,54142],{"class":58},[52,147554,80],{"class":79},[52,147556,147557],{"class":54,"line":83},[52,147558,452],{"class":79},[18,147560,147562],{"id":147561},"_214-响应式开发","21.4 响应式开发",[14,147564,147565],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[4509,147567],{"style":129058,"src":147568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,147570,147571],{},"做法：",[29,147573,147574,147577],{},[32,147575,147576],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[32,147578,147579],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[4509,147581],{"style":129058,"src":147582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,147584,147585],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[3195,147587,147589],{"id":147588},"_2141-简单代码示范","21.4.1 简单代码示范",[42,147591,147592],{"className":129202,"code":147219,"language":129204,"meta":47,"style":47},[49,147593,147594,147598,147604,147618,147622,147628,147642],{"__ignoreMap":47},[52,147595,147596],{"class":54,"line":55},[52,147597,147226],{"class":94},[52,147599,147600,147602],{"class":54,"line":66},[52,147601,53285],{"class":53950},[52,147603,18220],{"class":79},[52,147605,147606,147608,147610,147612,147614,147616],{"class":54,"line":83},[52,147607,73276],{"class":308},[52,147609,54087],{"class":79},[52,147611,147241],{"class":308},[52,147613,1998],{"class":58},[52,147615,133065],{"class":79},[52,147617,147248],{"class":94},[52,147619,147620],{"class":54,"line":91},[52,147621,452],{"class":79},[52,147623,147624,147626],{"class":54,"line":98},[52,147625,133050],{"class":75},[52,147627,18220],{"class":79},[52,147629,147630,147632,147634,147636,147638,147640],{"class":54,"line":107},[52,147631,73218],{"class":308},[52,147633,54087],{"class":79},[52,147635,3649],{"class":308},[52,147637,147269],{"class":58},[52,147639,133065],{"class":79},[52,147641,147274],{"class":94},[52,147643,147644],{"class":54,"line":113},[52,147645,452],{"class":79},[14,147647,147648],{},"父盒子一般命名为container",[3195,147650,147652],{"id":147651},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,147654,147655,147656],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2389,147657,147658],{},"使得 Web 开发更加快捷",[29,147660,147661],{},[32,147662,147663,147664],{},"官网：",[2389,147665,147666],{},[3451,147667,147668],{"href":147668,"rel":147669},"http:\u002F\u002Fgetbootstrap.com\u002F",[26514],[14,147671,147672],{},"可以直接去官网拿现成的东西",[1696,147674,147675],{},[32,147676,147677],{},"Bootstrap的使用",[14,147679,147680],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,147682,147683],{},"Bootstrap 使用四步曲：",[14,147685,147686,147689],{},[2389,147687,147688],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[4509,147691],{"style":129058,"src":147692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,147694,147695],{},"打开Bootstrap官网，然后下载",[4509,147697],{"style":129058,"src":147698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[4509,147700],{"style":129058,"src":147701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,147703,147704],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,147706,147707],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,147709,147710],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[4509,147712],{"style":129058,"src":147713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[42,147715,147717],{"className":129202,"code":147716,"language":129204,"meta":47,"style":47},".center {\n  color: red;\n}\n",[49,147718,147719,147725,147735],{"__ignoreMap":47},[52,147720,147721,147723],{"class":54,"line":55},[52,147722,129493],{"class":75},[52,147724,18220],{"class":79},[52,147726,147727,147729,147731,147733],{"class":54,"line":66},[52,147728,73555],{"class":308},[52,147730,54087],{"class":79},[52,147732,60071],{"class":308},[52,147734,80],{"class":79},[52,147736,147737],{"class":54,"line":83},[52,147738,452],{"class":79},[14,147740,147741,147744],{},[49,147742,147743],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[4509,147746],{"style":129058,"src":147747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[4509,147749],{"style":129058,"src":147750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[4509,147752],{"style":129058,"src":147753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,147755,147756],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[4509,147758],{"style":129058,"src":147759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,147761,147762],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[1696,147764,147765],{"start":66},[32,147766,147767],{},"布局容器",[4509,147769],{"style":129058,"src":147770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,147772,147773],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,147775,147776],{},"container-fluid用于移动式布局比较方便",[1696,147778,147779],{"start":83},[32,147780,147781,147782],{},"bootstrap ",[2389,147783,147784],{},"栅格系统原理",[4509,147786],{"style":129058,"src":147787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[1696,147789,147790],{"start":91},[32,147791,147792],{},[2389,147793,147794],{},"栅格选项参数",[4509,147796],{"style":129058,"src":147797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,147799,147800],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,147802,17281],{},[42,147804,147805],{"className":129202,"code":147716,"language":129204,"meta":47,"style":47},[49,147806,147807,147813,147823],{"__ignoreMap":47},[52,147808,147809,147811],{"class":54,"line":55},[52,147810,129493],{"class":75},[52,147812,18220],{"class":79},[52,147814,147815,147817,147819,147821],{"class":54,"line":66},[52,147816,73555],{"class":308},[52,147818,54087],{"class":79},[52,147820,60071],{"class":308},[52,147822,80],{"class":79},[52,147824,147825],{"class":54,"line":83},[52,147826,452],{"class":79},[14,147828,138245],{},[4509,147830],{"style":129058,"src":147831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,147833,147834],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,147836,147837],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,147839,147840],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,147842,147843],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,147845,147846],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,147848,147849],{},"汇总展示说明：",[42,147851,147852],{"className":129949,"code":133306,"language":129951,"meta":47,"style":47},[49,147853,147854,147858,147872,147876],{"__ignoreMap":47},[52,147855,147856],{"class":54,"line":55},[52,147857,133313],{"class":94},[52,147859,147860,147862,147864,147866,147868,147870],{"class":54,"line":66},[52,147861,698],{"class":79},[52,147863,54261],{"class":53950},[52,147865,56136],{"class":75},[52,147867,292],{"class":79},[52,147869,133326],{"class":62},[52,147871,53957],{"class":79},[52,147873,147874],{"class":54,"line":83},[52,147875,133333],{"class":79},[52,147877,147878,147880,147882],{"class":54,"line":91},[52,147879,54435],{"class":79},[52,147881,54261],{"class":53950},[52,147883,53957],{"class":79},[4509,147885],{"style":129058,"src":147886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,147888,147889],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[42,147891,147892],{"className":129949,"code":133306,"language":129951,"meta":47,"style":47},[49,147893,147894,147898,147912,147916],{"__ignoreMap":47},[52,147895,147896],{"class":54,"line":55},[52,147897,133313],{"class":94},[52,147899,147900,147902,147904,147906,147908,147910],{"class":54,"line":66},[52,147901,698],{"class":79},[52,147903,54261],{"class":53950},[52,147905,56136],{"class":75},[52,147907,292],{"class":79},[52,147909,133326],{"class":62},[52,147911,53957],{"class":79},[52,147913,147914],{"class":54,"line":83},[52,147915,133333],{"class":79},[52,147917,147918,147920,147922],{"class":54,"line":91},[52,147919,54435],{"class":79},[52,147921,54261],{"class":53950},[52,147923,53957],{"class":79},[1696,147925,147926],{"start":98},[32,147927,147928],{},[2389,147929,147930],{},"列嵌套",[4509,147932],{"style":129058,"src":147933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,147935,147936],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,147938,147939],{},"没加row内部这样：",[4509,147941],{"style":129058,"src":147942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,147944,147945],{},"加上row之后内部为：",[4509,147947],{"style":129058,"src":147948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[1696,147950,147951],{"start":107},[32,147952,147953],{},[2389,147954,147955],{},"列偏移",[4509,147957],{"style":129058,"src":147958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,147960,147961],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,147963,147964],{},"要加偏移量，即偏移份数",[14,147966,147967],{},"偏移的份数=12-两个盒子的份数",[1696,147969,147970],{"start":113},[32,147971,147972],{},[2389,147973,147974],{},"列排序",[4509,147976],{"style":129058,"src":147977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,147979,147980],{},"pull拉左；push推右",[1696,147982,147983],{"start":119},[32,147984,147985],{},[2389,147986,147987],{},"响应式工具",[4509,147989],{"style":129058,"src":147990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,147992,147993],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[3195,147995,147997],{"id":147996},"_2143-响应式小项目","21.4.3 响应式小项目",[14,147999,148000],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,148002,148003],{},"ul {",[14,148005,148006],{},"list-style: none;",[14,148008,148009],{},"margin:0;",[14,148011,148012],{},"padding:0; }",[4509,148014],{"style":129058,"src":148015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[4509,148017],{"style":129058,"src":148018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,148020,148021],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,148023,71539],{},[42,148025,148026],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,148027,148028,148034,148044],{"__ignoreMap":47},[52,148029,148030,148032],{"class":54,"line":55},[52,148031,133050],{"class":75},[52,148033,18220],{"class":79},[52,148035,148036,148038,148040,148042],{"class":54,"line":66},[52,148037,133682],{"class":308},[52,148039,54087],{"class":79},[52,148041,26385],{"class":308},[52,148043,80],{"class":79},[52,148045,148046],{"class":54,"line":83},[52,148047,452],{"class":79},[14,148049,73103],{},[42,148051,148052],{"className":129202,"code":141872,"language":129204,"meta":47,"style":47},[49,148053,148054,148060,148070],{"__ignoreMap":47},[52,148055,148056,148058],{"class":54,"line":55},[52,148057,133050],{"class":75},[52,148059,18220],{"class":79},[52,148061,148062,148064,148066,148068],{"class":54,"line":66},[52,148063,133682],{"class":308},[52,148065,54087],{"class":79},[52,148067,26385],{"class":308},[52,148069,80],{"class":79},[52,148071,148072],{"class":54,"line":83},[52,148073,452],{"class":79},[18,148075,148077],{"id":148076},"_215-swiper-插件使用","21.5 swiper 插件使用",[29,148079,148080,148083,148086],{},[32,148081,148082],{},"下载需要的css和js文件html页面中 引入相关文件",[32,148084,148085],{},"官网找到类似案例，复制html结构，css样式 js 语法",[32,148087,148088],{},"根据需求定制修改模块",[4509,148090],{"style":129058,"src":148091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,148093,148094],{},"解压后将这两部分放到项目中",[4509,148096],{"style":129058,"src":148097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,148099,148100],{},"这个插件可以帮助我们实现轮播图效果",[14,148102,148103],{},"用法：",[4509,148105],{"style":129058,"src":148106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,148108,148109],{},"找到自己喜欢的",[4509,148111],{"style":129058,"src":148112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,148114,148115],{},"右键，查看网页源代码",[4509,148117],{"style":129058,"src":148118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,148120,148121],{},"复制人家的结构内容",[14,148123,148124],{},"然后去看API文档：",[4509,148126],{"style":129058,"src":148127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,148129,148130],{},"可以看看如何修改样式",[14,148132,148133],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[3141,148135,148136],{},"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":47,"searchDepth":66,"depth":66,"links":148138},[148139,148144,148148,148153,148158],{"id":146939,"depth":66,"text":146940,"children":148140},[148141,148142,148143],{"id":146943,"depth":83,"text":146944},{"id":146953,"depth":83,"text":146954},{"id":147048,"depth":83,"text":147049},{"id":147063,"depth":66,"text":147064,"children":148145},[148146,148147],{"id":147085,"depth":83,"text":147086},{"id":147101,"depth":83,"text":147102},{"id":147176,"depth":66,"text":147177,"children":148149},[148150,148151,148152],{"id":147189,"depth":83,"text":147190},{"id":147413,"depth":83,"text":147414},{"id":147420,"depth":83,"text":147421},{"id":147561,"depth":66,"text":147562,"children":148154},[148155,148156,148157],{"id":147588,"depth":83,"text":147589},{"id":147651,"depth":83,"text":147652},{"id":147996,"depth":83,"text":147997},{"id":148076,"depth":66,"text":148077},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146931,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":148165,"title":148166,"body":148167,"description":26025,"extension":3153,"meta":148387,"navigation":122,"path":148388,"seo":148389,"stem":148390,"__hash__":148391},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":148168,"toc":148383},[148169,148172,148176,148179,148194,148199,148202,148207,148242,148247,148259,148264,148277,148282,148299,148304,148324,148329,148347,148350,148353,148356,148359,148363,148366,148369,148372,148375,148378,148381],[10,148170,148166],{"id":148171},"_22-代码提交与新型相对单位",[18,148173,148175],{"id":148174},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,148177,148178],{},"法1：",[1696,148180,148181,148188,148191],{},[32,148182,148183,148184],{},"登录网站注册：",[3451,148185,148186],{"href":148186,"rel":148187},"https:\u002F\u002Fgitee.com\u002F",[26514],[32,148189,148190],{},"码云创建新的仓库",[32,148192,148193],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[29,148195,148196],{},[32,148197,148198],{},"在网站根目录右键-- Git Bash Here",[4509,148200],{"style":129058,"src":148201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[29,148203,148204],{},[32,148205,148206],{},"如果是第一次利用git提交，请配置好全局选项",[42,148208,148210],{"className":119946,"code":148209,"language":119948,"meta":47,"style":47},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[49,148211,148212,148228],{"__ignoreMap":47},[52,148213,148214,148217,148219,148222,148225],{"class":54,"line":55},[52,148215,148216],{"class":75},"git",[52,148218,122369],{"class":62},[52,148220,148221],{"class":308}," --global",[52,148223,148224],{"class":62}," user.name",[52,148226,148227],{"class":62}," \"你的名字\"\n",[52,148229,148230,148232,148234,148236,148239],{"class":54,"line":66},[52,148231,148216],{"class":75},[52,148233,122369],{"class":62},[52,148235,148221],{"class":308},[52,148237,148238],{"class":62}," user.email",[52,148240,148241],{"class":62}," \"你的邮箱\"\n",[29,148243,148244],{},[32,148245,148246],{},"初始化仓库",[42,148248,148250],{"className":119946,"code":148249,"language":119948,"meta":47,"style":47},"git init\n",[49,148251,148252],{"__ignoreMap":47},[52,148253,148254,148256],{"class":54,"line":55},[52,148255,148216],{"class":75},[52,148257,148258],{"class":62}," init\n",[29,148260,148261],{},[32,148262,148263],{},"把本地文件放到暂存区",[42,148265,148267],{"className":119946,"code":148266,"language":119948,"meta":47,"style":47},"git add .\n",[49,148268,148269],{"__ignoreMap":47},[52,148270,148271,148273,148275],{"class":54,"line":55},[52,148272,148216],{"class":75},[52,148274,8176],{"class":62},[52,148276,31391],{"class":62},[29,148278,148279],{},[32,148280,148281],{},"把本地文件放到本地仓库里面",[42,148283,148285],{"className":119946,"code":148284,"language":119948,"meta":47,"style":47},"git commit -m \"first commit\"\n",[49,148286,148287],{"__ignoreMap":47},[52,148288,148289,148291,148294,148296],{"class":54,"line":55},[52,148290,148216],{"class":75},[52,148292,148293],{"class":62}," commit",[52,148295,103532],{"class":308},[52,148297,148298],{"class":62}," \"first commit\"\n",[29,148300,148301],{},[32,148302,148303],{},"链接远程仓库",[42,148305,148307],{"className":119946,"code":148306,"language":119948,"meta":47,"style":47},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[49,148308,148309],{"__ignoreMap":47},[52,148310,148311,148313,148316,148318,148321],{"class":54,"line":55},[52,148312,148216],{"class":75},[52,148314,148315],{"class":62}," remote",[52,148317,8176],{"class":62},[52,148319,148320],{"class":62}," origin",[52,148322,148323],{"class":62}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[29,148325,148326],{},[32,148327,148328],{},"把本地仓库的文件推送到远程仓库 push",[42,148330,148332],{"className":119946,"code":148331,"language":119948,"meta":47,"style":47},"git push -u origin master\n",[49,148333,148334],{"__ignoreMap":47},[52,148335,148336,148338,148340,148342,148344],{"class":54,"line":55},[52,148337,148216],{"class":75},[52,148339,31666],{"class":62},[52,148341,30940],{"class":308},[52,148343,148320],{"class":62},[52,148345,148346],{"class":62}," master\n",[4509,148348],{"style":129058,"src":148349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,148351,148352],{},"上方方法暂未实现，后边学完git后在整",[14,148354,148355],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[4509,148357],{"style":129058,"src":148358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[18,148360,148362],{"id":148361},"_222-新型相对单位","22.2 新型相对单位",[4509,148364],{"style":129058,"src":148365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[4509,148367],{"style":129058,"src":148368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,148370,148371],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,148373,148374],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[4509,148376],{"style":129058,"src":148377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,148379,148380],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[3141,148382,26607],{},{"title":47,"searchDepth":66,"depth":66,"links":148384},[148385,148386],{"id":148174,"depth":66,"text":148175},{"id":148361,"depth":66,"text":148362},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":148166,"description":26025},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":148393,"title":148394,"body":148395,"description":148399,"extension":3153,"meta":148400,"navigation":122,"path":148401,"seo":148402,"stem":148403,"__hash__":148404},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":148396,"toc":148397},[],{"title":47,"searchDepth":66,"depth":66,"links":148398},[],"自己正经开始学编程的第一门语言！",{"category":95489},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":148394,"description":148399},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":148406,"title":148407,"body":148408,"description":26025,"extension":3153,"meta":149555,"navigation":122,"path":149556,"seo":149557,"stem":149558,"__hash__":149559},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":148409,"toc":149531},[148410,148413,148417,148420,148423,148448,148451,148457,148461,148464,148491,148494,148534,148537,148549,148552,148558,148562,148566,148593,148610,148617,148621,148624,148650,148653,148657,148660,148700,148703,148720,148726,148730,148735,148779,148782,148800,148803,148871,148875,148882,148885,148900,148903,148912,148915,148926,148929,148938,148941,148958,148961,148976,148980,148984,148987,148989,149009,149013,149016,149019,149030,149033,149039,149043,149049,149076,149079,149091,149094,149105,149108,149114,149118,149124,149174,149177,149219,149222,149255,149258,149292,149296,149299,149319,149322,149358,149361,149374,149378,149382,149388,149391,149404,149408,149411,149417,149420,149424,149427,149430,149479,149483,149499,149505,149512,149518,149528],[10,148411,148407],{"id":148412},"_1-python环境与第一个程序",[18,148414,148416],{"id":148415},"_11-什么是python","1.1 什么是Python",[14,148418,148419],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,148421,148422],{},"理解 Python 时抓住三个关键词：",[1696,148424,148425,148428,148431],{},[32,148426,148427],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[32,148429,148430],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[32,148432,148433,148434,3426,148437,3426,148440,3426,148443,3426,148445,31035],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[49,148435,148436],{},"os",[49,148438,148439],{},"sys",[49,148441,148442],{},"json",[49,148444,60510],{},[49,148446,148447],{},"datetime",[14,148449,148450],{},"Python 程序的运行链路：",[42,148452,148455],{"className":148453,"code":148454,"language":8154,"meta":47},[8152],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[49,148456,148454],{"__ignoreMap":47},[18,148458,148460],{"id":148459},"_12-python解释器","1.2 Python解释器",[14,148462,148463],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[42,148465,148467],{"className":26471,"code":148466,"language":26473,"meta":47,"style":47},"python --version\npython3 --version\npython\npython3\n",[49,148468,148469,148475,148481,148486],{"__ignoreMap":47},[52,148470,148471,148473],{"class":54,"line":55},[52,148472,33030],{"class":75},[52,148474,28943],{"class":308},[52,148476,148477,148479],{"class":54,"line":66},[52,148478,103529],{"class":75},[52,148480,28943],{"class":308},[52,148482,148483],{"class":54,"line":83},[52,148484,148485],{"class":75},"python\n",[52,148487,148488],{"class":54,"line":91},[52,148489,148490],{"class":75},"python3\n",[14,148492,148493],{},"进入交互模式后，可以直接输入表达式：",[42,148495,148497],{"className":33028,"code":148496,"language":33030,"meta":47,"style":47},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[49,148498,148499,148510,148515,148529],{"__ignoreMap":47},[52,148500,148501,148504,148506,148508],{"class":54,"line":55},[52,148502,148503],{"class":58},">>>",[52,148505,27768],{"class":308},[52,148507,48216],{"class":58},[52,148509,50373],{"class":308},[52,148511,148512],{"class":54,"line":66},[52,148513,148514],{"class":308},"3\n",[52,148516,148517,148519,148522,148524,148527],{"class":54,"line":83},[52,148518,148503],{"class":58},[52,148520,148521],{"class":308}," print",[52,148523,1216],{"class":79},[52,148525,148526],{"class":62},"\"hello python\"",[52,148528,708],{"class":79},[52,148530,148531],{"class":54,"line":91},[52,148532,148533],{"class":79},"hello python\n",[14,148535,148536],{},"退出交互模式：",[42,148538,148540],{"className":33028,"code":148539,"language":33030,"meta":47,"style":47},"exit()\n",[49,148541,148542],{"__ignoreMap":47},[52,148543,148544,148547],{"class":54,"line":55},[52,148545,148546],{"class":308},"exit",[52,148548,248],{"class":79},[14,148550,148551],{},"或使用快捷键：",[42,148553,148556],{"className":148554,"code":148555,"language":8154,"meta":47},[8152],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[49,148557,148555],{"__ignoreMap":47},[18,148559,148561],{"id":148560},"_13-安装python","1.3 安装Python",[3195,148563,148565],{"id":148564},"_131-windows安装","1.3.1 Windows安装",[1696,148567,148568,148575,148578,148584,148590],{},[32,148569,148570,148571],{},"打开 Python 官网：",[3451,148572,148573],{"href":148573,"rel":148574},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[26514],[32,148576,148577],{},"下载 Windows Installer。",[32,148579,148580,148581,31035],{},"安装时勾选 ",[49,148582,148583],{},"Add Python to PATH",[32,148585,148586,148587,31035],{},"点击 ",[49,148588,148589],{},"Install Now",[32,148591,148592],{},"安装完成后打开命令提示符验证：",[42,148594,148596],{"className":26471,"code":148595,"language":26473,"meta":47,"style":47},"python --version\npip --version\n",[49,148597,148598,148604],{"__ignoreMap":47},[52,148599,148600,148602],{"class":54,"line":55},[52,148601,33030],{"class":75},[52,148603,28943],{"class":308},[52,148605,148606,148608],{"class":54,"line":66},[52,148607,26480],{"class":75},[52,148609,28943],{"class":308},[14,148611,148612,148613,148616],{},"如果提示 ",[49,148614,148615],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[3195,148618,148620],{"id":148619},"_132-macos安装","1.3.2 macOS安装",[14,148622,148623],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[42,148625,148627],{"className":26471,"code":148626,"language":26473,"meta":47,"style":47},"brew install python\npython3 --version\npip3 --version\n",[49,148628,148629,148638,148644],{"__ignoreMap":47},[52,148630,148631,148634,148636],{"class":54,"line":55},[52,148632,148633],{"class":75},"brew",[52,148635,26483],{"class":62},[52,148637,126968],{"class":62},[52,148639,148640,148642],{"class":54,"line":66},[52,148641,103529],{"class":75},[52,148643,28943],{"class":308},[52,148645,148646,148648],{"class":54,"line":83},[52,148647,122350],{"class":75},[52,148649,28943],{"class":308},[14,148651,148652],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[3195,148654,148656],{"id":148655},"_133-linux安装","1.3.3 Linux安装",[14,148658,148659],{},"Ubuntu\u002FDebian：",[42,148661,148663],{"className":26471,"code":148662,"language":26473,"meta":47,"style":47},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[49,148664,148665,148673,148688,148694],{"__ignoreMap":47},[52,148666,148667,148669,148671],{"class":54,"line":55},[52,148668,27226],{"class":75},[52,148670,119967],{"class":62},[52,148672,28892],{"class":62},[52,148674,148675,148677,148679,148681,148683,148685],{"class":54,"line":66},[52,148676,27226],{"class":75},[52,148678,119967],{"class":62},[52,148680,26483],{"class":62},[52,148682,107053],{"class":62},[52,148684,103448],{"class":62},[52,148686,148687],{"class":62}," python3-venv\n",[52,148689,148690,148692],{"class":54,"line":83},[52,148691,103529],{"class":75},[52,148693,28943],{"class":308},[52,148695,148696,148698],{"class":54,"line":91},[52,148697,122350],{"class":75},[52,148699,28943],{"class":308},[14,148701,148702],{},"Fedora：",[42,148704,148706],{"className":26471,"code":148705,"language":26473,"meta":47,"style":47},"sudo dnf install python3 python3-pip\n",[49,148707,148708],{"__ignoreMap":47},[52,148709,148710,148712,148714,148716,148718],{"class":54,"line":55},[52,148711,27226],{"class":75},[52,148713,28965],{"class":62},[52,148715,26483],{"class":62},[52,148717,107053],{"class":62},[52,148719,122415],{"class":62},[14,148721,148722,148723,148725],{},"Linux 上通常使用 ",[49,148724,103529],{}," 命令，避免和系统旧版本 Python 冲突。",[18,148727,148729],{"id":148728},"_14-pip包管理器","1.4 pip包管理器",[14,148731,148732,148734],{},[49,148733,26480],{}," 用来安装第三方库。",[42,148736,148738],{"className":26471,"code":148737,"language":26473,"meta":47,"style":47},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[49,148739,148740,148749,148758,148766,148772],{"__ignoreMap":47},[52,148741,148742,148744,148746],{"class":54,"line":55},[52,148743,26480],{"class":75},[52,148745,26483],{"class":62},[52,148747,148748],{"class":62}," requests\n",[52,148750,148751,148753,148756],{"class":54,"line":66},[52,148752,26480],{"class":75},[52,148754,148755],{"class":62}," uninstall",[52,148757,148748],{"class":62},[52,148759,148760,148762,148764],{"class":54,"line":83},[52,148761,26480],{"class":75},[52,148763,120224],{"class":62},[52,148765,148748],{"class":62},[52,148767,148768,148770],{"class":54,"line":91},[52,148769,26480],{"class":75},[52,148771,121605],{"class":62},[52,148773,148774,148776],{"class":54,"line":98},[52,148775,26480],{"class":75},[52,148777,148778],{"class":62}," freeze\n",[14,148780,148781],{},"国内网络较慢时可以临时使用镜像：",[42,148783,148785],{"className":26471,"code":148784,"language":26473,"meta":47,"style":47},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[49,148786,148787],{"__ignoreMap":47},[52,148788,148789,148791,148793,148796,148798],{"class":54,"line":55},[52,148790,26480],{"class":75},[52,148792,26483],{"class":62},[52,148794,148795],{"class":62}," requests",[52,148797,29080],{"class":308},[52,148799,122378],{"class":62},[14,148801,148802],{},"常见第三方库：",[3353,148804,148805,148814],{},[3356,148806,148807],{},[3359,148808,148809,148812],{},[3362,148810,148811],{},"库",[3362,148813,105346],{},[3399,148815,148816,148824,148831,148839,148847,148855,148863],{},[3359,148817,148818,148821],{},[3404,148819,148820],{},"requests",[3404,148822,148823],{},"网络请求",[3359,148825,148826,148828],{},[3404,148827,103276],{},[3404,148829,148830],{},"数值计算",[3359,148832,148833,148836],{},[3404,148834,148835],{},"pandas",[3404,148837,148838],{},"表格数据处理",[3359,148840,148841,148844],{},[3404,148842,148843],{},"matplotlib",[3404,148845,148846],{},"绘图",[3359,148848,148849,148852],{},[3404,148850,148851],{},"pyecharts",[3404,148853,148854],{},"ECharts 图表",[3359,148856,148857,148860],{},[3404,148858,148859],{},"flask",[3404,148861,148862],{},"Web 后端",[3359,148864,148865,148868],{},[3404,148866,148867],{},"pytest",[3404,148869,148870],{},"自动化测试",[18,148872,148874],{"id":148873},"_15-虚拟环境","1.5 虚拟环境",[14,148876,148877,148878,148881],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[49,148879,148880],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,148883,148884],{},"创建虚拟环境：",[42,148886,148888],{"className":26471,"code":148887,"language":26473,"meta":47,"style":47},"python -m venv .venv\n",[49,148889,148890],{"__ignoreMap":47},[52,148891,148892,148894,148896,148898],{"class":54,"line":55},[52,148893,33030],{"class":75},[52,148895,103532],{"class":308},[52,148897,103535],{"class":62},[52,148899,103538],{"class":62},[14,148901,148902],{},"Windows 激活：",[42,148904,148906],{"className":26471,"code":148905,"language":26473,"meta":47,"style":47},".venv\\Scripts\\activate\n",[49,148907,148908],{"__ignoreMap":47},[52,148909,148910],{"class":54,"line":55},[52,148911,148905],{"class":75},[14,148913,148914],{},"macOS\u002FLinux 激活：",[42,148916,148918],{"className":26471,"code":148917,"language":26473,"meta":47,"style":47},"source .venv\u002Fbin\u002Factivate\n",[49,148919,148920],{"__ignoreMap":47},[52,148921,148922,148924],{"class":54,"line":55},[52,148923,103543],{"class":308},[52,148925,103546],{"class":62},[14,148927,148928],{},"退出虚拟环境：",[42,148930,148932],{"className":26471,"code":148931,"language":26473,"meta":47,"style":47},"deactivate\n",[49,148933,148934],{"__ignoreMap":47},[52,148935,148936],{"class":54,"line":55},[52,148937,148931],{"class":75},[14,148939,148940],{},"保存依赖：",[42,148942,148944],{"className":26471,"code":148943,"language":26473,"meta":47,"style":47},"pip freeze > requirements.txt\n",[49,148945,148946],{"__ignoreMap":47},[52,148947,148948,148950,148953,148955],{"class":54,"line":55},[52,148949,26480],{"class":75},[52,148951,148952],{"class":62}," freeze",[52,148954,28872],{"class":58},[52,148956,148957],{"class":62}," requirements.txt\n",[14,148959,148960],{},"安装依赖：",[42,148962,148964],{"className":26471,"code":148963,"language":26473,"meta":47,"style":47},"pip install -r requirements.txt\n",[49,148965,148966],{"__ignoreMap":47},[52,148967,148968,148970,148972,148974],{"class":54,"line":55},[52,148969,26480],{"class":75},[52,148971,26483],{"class":62},[52,148973,122289],{"class":308},[52,148975,148957],{"class":62},[18,148977,148979],{"id":148978},"_16-开发工具","1.6 开发工具",[3195,148981,148983],{"id":148982},"_161-pycharm","1.6.1 PyCharm",[14,148985,148986],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,148988,124712],{},[1696,148990,148991,148994,148997,149003,149006],{},[32,148992,148993],{},"New Project：创建项目。",[32,148995,148996],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[32,148998,148999,149000,128633],{},"New Python File：创建 ",[49,149001,149002],{},".py",[32,149004,149005],{},"Run：运行当前文件。",[32,149007,149008],{},"Debug：断点调试。",[3195,149010,149012],{"id":149011},"_162-vs-code","1.6.2 VS Code",[14,149014,149015],{},"VS Code 轻量，适合后续多语言开发。",[14,149017,149018],{},"建议安装插件：",[1696,149020,149021,149024,149027],{},[32,149022,149023],{},"Python。",[32,149025,149026],{},"Pylance。",[32,149028,149029],{},"Jupyter。",[14,149031,149032],{},"选择解释器：",[42,149034,149037],{"className":149035,"code":149036,"language":8154,"meta":47},[8152],"Ctrl + Shift + P -> Python: Select Interpreter\n",[49,149038,149036],{"__ignoreMap":47},[18,149040,149042],{"id":149041},"_17-第一个python程序","1.7 第一个Python程序",[14,149044,149045,149046,27268],{},"创建文件 ",[49,149047,149048],{},"hello.py",[42,149050,149052],{"className":33028,"code":149051,"language":33030,"meta":47,"style":47},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[49,149053,149054,149065],{"__ignoreMap":47},[52,149055,149056,149058,149060,149063],{"class":54,"line":55},[52,149057,33065],{"class":308},[52,149059,1216],{"class":79},[52,149061,149062],{"class":62},"\"Hello World\"",[52,149064,708],{"class":79},[52,149066,149067,149069,149071,149074],{"class":54,"line":66},[52,149068,33065],{"class":308},[52,149070,1216],{"class":79},[52,149072,149073],{"class":62},"\"你好，Python\"",[52,149075,708],{"class":79},[14,149077,149078],{},"在终端运行：",[42,149080,149082],{"className":26471,"code":149081,"language":26473,"meta":47,"style":47},"python hello.py\n",[49,149083,149084],{"__ignoreMap":47},[52,149085,149086,149088],{"class":54,"line":55},[52,149087,33030],{"class":75},[52,149089,149090],{"class":62}," hello.py\n",[14,149092,149093],{},"或：",[42,149095,149097],{"className":26471,"code":149096,"language":26473,"meta":47,"style":47},"python3 hello.py\n",[49,149098,149099],{"__ignoreMap":47},[52,149100,149101,149103],{"class":54,"line":55},[52,149102,103529],{"class":75},[52,149104,149090],{"class":62},[14,149106,149107],{},"输出：",[42,149109,149112],{"className":149110,"code":149111,"language":8154,"meta":47},[8152],"Hello World\n你好，Python\n",[49,149113,149111],{"__ignoreMap":47},[18,149115,149117],{"id":149116},"_18-print函数","1.8 print函数",[14,149119,149120,149123],{},[49,149121,149122],{},"print()"," 用来输出内容。",[42,149125,149127],{"className":33028,"code":149126,"language":33030,"meta":47,"style":47},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[49,149128,149129,149139,149149,149159],{"__ignoreMap":47},[52,149130,149131,149133,149135,149137],{"class":54,"line":55},[52,149132,33065],{"class":308},[52,149134,1216],{"class":79},[52,149136,8809],{"class":62},[52,149138,708],{"class":79},[52,149140,149141,149143,149145,149147],{"class":54,"line":66},[52,149142,33065],{"class":308},[52,149144,1216],{"class":79},[52,149146,591],{"class":308},[52,149148,708],{"class":79},[52,149150,149151,149153,149155,149157],{"class":54,"line":83},[52,149152,33065],{"class":308},[52,149154,1216],{"class":79},[52,149156,3270],{"class":308},[52,149158,708],{"class":79},[52,149160,149161,149163,149165,149168,149170,149172],{"class":54,"line":91},[52,149162,33065],{"class":308},[52,149164,1216],{"class":79},[52,149166,149167],{"class":62},"\"年龄:\"",[52,149169,15083],{"class":79},[52,149171,309],{"class":308},[52,149173,708],{"class":79},[14,149175,149176],{},"多个内容用逗号隔开，默认中间加空格：",[42,149178,149180],{"className":33028,"code":149179,"language":33030,"meta":47,"style":47},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[49,149181,149182,149192,149202],{"__ignoreMap":47},[52,149183,149184,149187,149189],{"class":54,"line":55},[52,149185,149186],{"class":79},"name ",[52,149188,292],{"class":58},[52,149190,149191],{"class":62}," \"张三\"\n",[52,149193,149194,149197,149199],{"class":54,"line":66},[52,149195,149196],{"class":79},"age ",[52,149198,292],{"class":58},[52,149200,149201],{"class":308}," 18\n",[52,149203,149204,149206,149208,149211,149214,149216],{"class":54,"line":83},[52,149205,33065],{"class":308},[52,149207,1216],{"class":79},[52,149209,149210],{"class":62},"\"姓名:\"",[52,149212,149213],{"class":79},", name, ",[52,149215,149167],{"class":62},[52,149217,149218],{"class":79},", age)\n",[14,149220,149221],{},"修改分隔符：",[42,149223,149225],{"className":33028,"code":149224,"language":33030,"meta":47,"style":47},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[49,149226,149227],{"__ignoreMap":47},[52,149228,149229,149231,149233,149236,149238,149240,149242,149244,149246,149249,149251,149253],{"class":54,"line":55},[52,149230,33065],{"class":308},[52,149232,1216],{"class":79},[52,149234,149235],{"class":62},"\"2024\"",[52,149237,15083],{"class":79},[52,149239,56966],{"class":62},[52,149241,15083],{"class":79},[52,149243,56966],{"class":62},[52,149245,15083],{"class":79},[52,149247,149248],{"class":1223},"sep",[52,149250,292],{"class":58},[52,149252,35133],{"class":62},[52,149254,708],{"class":79},[14,149256,149257],{},"修改结尾符：",[42,149259,149261],{"className":33028,"code":149260,"language":33030,"meta":47,"style":47},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[49,149262,149263,149281],{"__ignoreMap":47},[52,149264,149265,149267,149269,149271,149273,149275,149277,149279],{"class":54,"line":55},[52,149266,33065],{"class":308},[52,149268,1216],{"class":79},[52,149270,8809],{"class":62},[52,149272,15083],{"class":79},[52,149274,48451],{"class":1223},[52,149276,292],{"class":58},[52,149278,7331],{"class":62},[52,149280,708],{"class":79},[52,149282,149283,149285,149287,149290],{"class":54,"line":66},[52,149284,33065],{"class":308},[52,149286,1216],{"class":79},[52,149288,149289],{"class":62},"\"python\"",[52,149291,708],{"class":79},[18,149293,149295],{"id":149294},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,149297,149298],{},"交互运行适合临时验证：",[42,149300,149302],{"className":33028,"code":149301,"language":33030,"meta":47,"style":47},">>> 10 * 3\n30\n",[49,149303,149304,149314],{"__ignoreMap":47},[52,149305,149306,149308,149310,149312],{"class":54,"line":55},[52,149307,148503],{"class":58},[52,149309,5051],{"class":308},[52,149311,872],{"class":58},[52,149313,122686],{"class":308},[52,149315,149316],{"class":54,"line":66},[52,149317,149318],{"class":308},"30\n",[14,149320,149321],{},"脚本运行适合保存程序：",[42,149323,149325],{"className":33028,"code":149324,"language":33030,"meta":47,"style":47},"price = 8\ncount = 5\nprint(price * count)\n",[49,149326,149327,149337,149346],{"__ignoreMap":47},[52,149328,149329,149332,149334],{"class":54,"line":55},[52,149330,149331],{"class":79},"price ",[52,149333,292],{"class":58},[52,149335,149336],{"class":308}," 8\n",[52,149338,149339,149342,149344],{"class":54,"line":66},[52,149340,149341],{"class":79},"count ",[52,149343,292],{"class":58},[52,149345,57077],{"class":308},[52,149347,149348,149350,149353,149355],{"class":54,"line":83},[52,149349,33065],{"class":308},[52,149351,149352],{"class":79},"(price ",[52,149354,3053],{"class":58},[52,149356,149357],{"class":79}," count)\n",[14,149359,149360],{},"实际学习中推荐：",[1696,149362,149363,149366,149371],{},[32,149364,149365],{},"临时试一个语法，用交互模式。",[32,149367,149368,149369,128633],{},"写完整练习，用 ",[49,149370,149002],{},[32,149372,149373],{},"写项目，用独立目录和虚拟环境。",[18,149375,149377],{"id":149376},"_110-常见错误","1.10 常见错误",[3195,149379,149381],{"id":149380},"_1101-命令找不到","1.10.1 命令找不到",[42,149383,149386],{"className":149384,"code":149385,"language":8154,"meta":47},[8152],"python: command not found\n",[49,149387,149385],{"__ignoreMap":47},[14,149389,149390],{},"原因：",[1696,149392,149393,149396,149399],{},[32,149394,149395],{},"没安装 Python。",[32,149397,149398],{},"PATH 没配置。",[32,149400,149401,149402,31035],{},"Linux\u002FmacOS 应该使用 ",[49,149403,103529],{},[3195,149405,149407],{"id":149406},"_1102-文件名冲突","1.10.2 文件名冲突",[14,149409,149410],{},"不要把文件命名为：",[42,149412,149415],{"className":149413,"code":149414,"language":8154,"meta":47},[8152],"random.py\njson.py\ntime.py\nrequests.py\n",[49,149416,149414],{"__ignoreMap":47},[14,149418,149419],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[3195,149421,149423],{"id":149422},"_1103-中文乱码","1.10.3 中文乱码",[14,149425,149426],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,149428,149429],{},"如果读写文件出现乱码，要明确指定编码：",[42,149431,149433],{"className":33028,"code":149432,"language":33030,"meta":47,"style":47},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[49,149434,149435,149469],{"__ignoreMap":47},[52,149436,149437,149439,149442,149444,149447,149449,149452,149454,149457,149459,149462,149464,149466],{"class":54,"line":55},[52,149438,110483],{"class":58},[52,149440,149441],{"class":308}," open",[52,149443,1216],{"class":79},[52,149445,149446],{"class":62},"\"data.txt\"",[52,149448,15083],{"class":79},[52,149450,149451],{"class":62},"\"r\"",[52,149453,15083],{"class":79},[52,149455,149456],{"class":1223},"encoding",[52,149458,292],{"class":58},[52,149460,149461],{"class":62},"\"utf-8\"",[52,149463,16362],{"class":79},[52,149465,34033],{"class":58},[52,149467,149468],{"class":79}," f:\n",[52,149470,149471,149474,149476],{"class":54,"line":66},[52,149472,149473],{"class":79},"    content ",[52,149475,292],{"class":58},[52,149477,149478],{"class":79}," f.read()\n",[18,149480,149482],{"id":149481},"_111-本章练习","1.11 本章练习",[1696,149484,149485,149488,149494],{},[32,149486,149487],{},"安装 Python，并在终端输出版本号。",[32,149489,149490,149491,149493],{},"新建 ",[49,149492,149048],{},"，输出自己的姓名、年龄、学习目标。",[32,149495,107016,149496,149498],{},[49,149497,149122],{}," 输出下面格式：",[42,149500,149503],{"className":149501,"code":149502,"language":8154,"meta":47},[8152],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[49,149504,149502],{"__ignoreMap":47},[1696,149506,149507],{"start":91},[32,149508,107016,149509,149511],{},[49,149510,149248],{}," 输出日期：",[42,149513,149516],{"className":149514,"code":149515,"language":8154,"meta":47},[8152],"2024-10-10\n",[49,149517,149515],{"__ignoreMap":47},[1696,149519,149520],{"start":98},[32,149521,107016,149522,149524,149525,149527],{},[49,149523,48451],{}," 让两次 ",[49,149526,149122],{}," 输出在同一行。",[3141,149529,149530],{},"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":47,"searchDepth":66,"depth":66,"links":149532},[149533,149534,149535,149540,149541,149542,149546,149547,149548,149549,149554],{"id":148415,"depth":66,"text":148416},{"id":148459,"depth":66,"text":148460},{"id":148560,"depth":66,"text":148561,"children":149536},[149537,149538,149539],{"id":148564,"depth":83,"text":148565},{"id":148619,"depth":83,"text":148620},{"id":148655,"depth":83,"text":148656},{"id":148728,"depth":66,"text":148729},{"id":148873,"depth":66,"text":148874},{"id":148978,"depth":66,"text":148979,"children":149543},[149544,149545],{"id":148982,"depth":83,"text":148983},{"id":149011,"depth":83,"text":149012},{"id":149041,"depth":66,"text":149042},{"id":149116,"depth":66,"text":149117},{"id":149294,"depth":66,"text":149295},{"id":149376,"depth":66,"text":149377,"children":149550},[149551,149552,149553],{"id":149380,"depth":83,"text":149381},{"id":149406,"depth":83,"text":149407},{"id":149422,"depth":83,"text":149423},{"id":149481,"depth":66,"text":149482},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":148407,"description":26025},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":149561,"title":149562,"body":149563,"description":26025,"extension":3153,"meta":151967,"navigation":122,"path":151968,"seo":151969,"stem":151970,"__hash__":151971},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":149564,"toc":151952},[149565,149568,149572,149575,149578,149595,149598,149640,149643,149647,149650,149653,149690,149693,149727,149730,149822,149826,149840,149843,149870,149873,149877,149980,149987,149990,150007,150011,150018,150207,150210,150283,150287,150290,150374,150377,150409,150413,150617,150620,150624,150630,150732,150735,150991,150995,150998,151001,151015,151017,151203,151207,151569,151575,151579,151582,151706,151709,151888,151891,151895,151928,151932,151949],[10,149566,149562],{"id":149567},"_10-json与pyecharts折线图",[18,149569,149571],{"id":149570},"_101-数据可视化","10.1 数据可视化",[14,149573,149574],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,149576,149577],{},"常见图表：",[1696,149579,149580,149583,149586,149589,149592],{},[32,149581,149582],{},"折线图：看趋势。",[32,149584,149585],{},"柱状图：看分类对比。",[32,149587,149588],{},"饼图：看占比。",[32,149590,149591],{},"地图：看地域分布。",[32,149593,149594],{},"散点图：看两个变量之间的关系。",[14,149596,149597],{},"Python 可视化常用库：",[3353,149599,149600,149608],{},[3356,149601,149602],{},[3359,149603,149604,149606],{},[3362,149605,148811],{},[3362,149607,26389],{},[3399,149609,149610,149617,149625,149632],{},[3359,149611,149612,149614],{},[3404,149613,148843],{},[3404,149615,149616],{},"基础、经典、可定制",[3359,149618,149619,149622],{},[3404,149620,149621],{},"seaborn",[3404,149623,149624],{},"统计图表更美观",[3359,149626,149627,149629],{},[3404,149628,148851],{},[3404,149630,149631],{},"生成交互式网页图表",[3359,149633,149634,149637],{},[3404,149635,149636],{},"plotly",[3404,149638,149639],{},"交互图表能力强",[14,149641,149642],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[18,149644,149646],{"id":149645},"_102-json回顾","10.2 JSON回顾",[14,149648,149649],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,149651,149652],{},"Python 字典：",[42,149654,149656],{"className":33028,"code":149655,"language":33030,"meta":47,"style":47},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[49,149657,149658,149666,149677,149686],{"__ignoreMap":47},[52,149659,149660,149662,149664],{"class":54,"line":55},[52,149661,104308],{"class":79},[52,149663,292],{"class":58},[52,149665,18220],{"class":79},[52,149667,149668,149671,149673,149675],{"class":54,"line":66},[52,149669,149670],{"class":62},"    \"name\"",[52,149672,54087],{"class":79},[52,149674,71919],{"class":62},[52,149676,34116],{"class":79},[52,149678,149679,149682,149684],{"class":54,"line":83},[52,149680,149681],{"class":62},"    \"value\"",[52,149683,54087],{"class":79},[52,149685,100108],{"class":308},[52,149687,149688],{"class":54,"line":91},[52,149689,452],{"class":79},[14,149691,149692],{},"JSON 字符串：",[42,149694,149697],{"className":149695,"code":149696,"language":148442,"meta":47,"style":47},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[49,149698,149699,149703,149714,149723],{"__ignoreMap":47},[52,149700,149701],{"class":54,"line":55},[52,149702,110],{"class":79},[52,149704,149705,149708,149710,149712],{"class":54,"line":66},[52,149706,149707],{"class":308},"  \"name\"",[52,149709,54087],{"class":79},[52,149711,71919],{"class":62},[52,149713,34116],{"class":79},[52,149715,149716,149719,149721],{"class":54,"line":83},[52,149717,149718],{"class":308},"  \"value\"",[52,149720,54087],{"class":79},[52,149722,100108],{"class":308},[52,149724,149725],{"class":54,"line":91},[52,149726,452],{"class":79},[14,149728,149729],{},"Python 与 JSON 的转换：",[42,149731,149733],{"className":33028,"code":149732,"language":33030,"meta":47,"style":47},"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",[49,149734,149735,149742,149746,149771,149775,149794,149801,149805,149815],{"__ignoreMap":47},[52,149736,149737,149739],{"class":54,"line":55},[52,149738,33042],{"class":58},[52,149740,149741],{"class":79}," json\n",[52,149743,149744],{"class":54,"line":66},[52,149745,123],{"emptyLinePlaceholder":122},[52,149747,149748,149750,149752,149754,149756,149758,149760,149762,149765,149767,149769],{"class":54,"line":83},[52,149749,104308],{"class":79},[52,149751,292],{"class":58},[52,149753,7420],{"class":79},[52,149755,65329],{"class":62},[52,149757,54087],{"class":79},[52,149759,71919],{"class":62},[52,149761,15083],{"class":79},[52,149763,149764],{"class":62},"\"value\"",[52,149766,54087],{"class":79},[52,149768,591],{"class":308},[52,149770,452],{"class":79},[52,149772,149773],{"class":54,"line":91},[52,149774,123],{"emptyLinePlaceholder":122},[52,149776,149777,149780,149782,149785,149788,149790,149792],{"class":54,"line":98},[52,149778,149779],{"class":79},"json_text ",[52,149781,292],{"class":58},[52,149783,149784],{"class":79}," json.dumps(data, ",[52,149786,149787],{"class":1223},"ensure_ascii",[52,149789,292],{"class":58},[52,149791,36637],{"class":308},[52,149793,708],{"class":79},[52,149795,149796,149798],{"class":54,"line":107},[52,149797,33065],{"class":308},[52,149799,149800],{"class":79},"(json_text)\n",[52,149802,149803],{"class":54,"line":113},[52,149804,123],{"emptyLinePlaceholder":122},[52,149806,149807,149810,149812],{"class":54,"line":119},[52,149808,149809],{"class":79},"new_data ",[52,149811,292],{"class":58},[52,149813,149814],{"class":79}," json.loads(json_text)\n",[52,149816,149817,149819],{"class":54,"line":126},[52,149818,33065],{"class":308},[52,149820,149821],{"class":79},"(new_data)\n",[18,149823,149825],{"id":149824},"_103-安装pyecharts","10.3 安装pyecharts",[42,149827,149829],{"className":26471,"code":149828,"language":26473,"meta":47,"style":47},"pip install pyecharts\n",[49,149830,149831],{"__ignoreMap":47},[52,149832,149833,149835,149837],{"class":54,"line":55},[52,149834,26480],{"class":75},[52,149836,26483],{"class":62},[52,149838,149839],{"class":62}," pyecharts\n",[14,149841,149842],{},"验证：",[42,149844,149846],{"className":33028,"code":149845,"language":33030,"meta":47,"style":47},"import pyecharts\n\nprint(pyecharts.__version__)\n",[49,149847,149848,149854,149858],{"__ignoreMap":47},[52,149849,149850,149852],{"class":54,"line":55},[52,149851,33042],{"class":58},[52,149853,149839],{"class":79},[52,149855,149856],{"class":54,"line":66},[52,149857,123],{"emptyLinePlaceholder":122},[52,149859,149860,149862,149865,149868],{"class":54,"line":83},[52,149861,33065],{"class":308},[52,149863,149864],{"class":79},"(pyecharts.",[52,149866,149867],{"class":308},"__version__",[52,149869,708],{"class":79},[14,149871,149872],{},"如果使用虚拟环境，要先激活环境再安装。",[18,149874,149876],{"id":149875},"_104-第一个折线图","10.4 第一个折线图",[42,149878,149880],{"className":33028,"code":149879,"language":33030,"meta":47,"style":47},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[49,149881,149882,149894,149898,149908,149938,149970],{"__ignoreMap":47},[52,149883,149884,149886,149889,149891],{"class":54,"line":55},[52,149885,33387],{"class":58},[52,149887,149888],{"class":79}," pyecharts.charts ",[52,149890,33042],{"class":58},[52,149892,149893],{"class":79}," Line\n",[52,149895,149896],{"class":54,"line":66},[52,149897,123],{"emptyLinePlaceholder":122},[52,149899,149900,149903,149905],{"class":54,"line":83},[52,149901,149902],{"class":79},"line ",[52,149904,292],{"class":58},[52,149906,149907],{"class":79}," Line()\n",[52,149909,149910,149913,149916,149918,149921,149923,149926,149928,149931,149933,149936],{"class":54,"line":91},[52,149911,149912],{"class":79},"line.add_xaxis([",[52,149914,149915],{"class":62},"\"周一\"",[52,149917,15083],{"class":79},[52,149919,149920],{"class":62},"\"周二\"",[52,149922,15083],{"class":79},[52,149924,149925],{"class":62},"\"周三\"",[52,149927,15083],{"class":79},[52,149929,149930],{"class":62},"\"周四\"",[52,149932,15083],{"class":79},[52,149934,149935],{"class":62},"\"周五\"",[52,149937,7629],{"class":79},[52,149939,149940,149943,149946,149948,149950,149952,149954,149956,149958,149960,149963,149965,149968],{"class":54,"line":98},[52,149941,149942],{"class":79},"line.add_yaxis(",[52,149944,149945],{"class":62},"\"销售额\"",[52,149947,80168],{"class":79},[52,149949,591],{"class":308},[52,149951,15083],{"class":79},[52,149953,4007],{"class":308},[52,149955,15083],{"class":79},[52,149957,4052],{"class":308},[52,149959,15083],{"class":79},[52,149961,149962],{"class":308},"150",[52,149964,15083],{"class":79},[52,149966,149967],{"class":308},"180",[52,149969,7629],{"class":79},[52,149971,149972,149975,149978],{"class":54,"line":107},[52,149973,149974],{"class":79},"line.render(",[52,149976,149977],{"class":62},"\"line.html\"",[52,149979,708],{"class":79},[14,149981,149982,149983,149986],{},"运行后会生成 ",[49,149984,149985],{},"line.html","，用浏览器打开即可看到图表。",[14,149988,149989],{},"核心步骤：",[1696,149991,149992,149995,149998,150001,150004],{},[32,149993,149994],{},"导入图表类。",[32,149996,149997],{},"创建图表对象。",[32,149999,150000],{},"添加 x 轴数据。",[32,150002,150003],{},"添加 y 轴数据。",[32,150005,150006],{},"渲染为 HTML。",[18,150008,150010],{"id":150009},"_105-全局配置","10.5 全局配置",[14,150012,150013,150014,150017],{},"常用配置在 ",[49,150015,150016],{},"pyecharts.options"," 中。",[42,150019,150021],{"className":33028,"code":150020,"language":33030,"meta":47,"style":47},"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",[49,150022,150023,150040,150050,150054,150062,150086,150114,150119,150138,150157,150175,150195,150199],{"__ignoreMap":47},[52,150024,150025,150027,150030,150032,150035,150037],{"class":54,"line":55},[52,150026,33387],{"class":58},[52,150028,150029],{"class":79}," pyecharts ",[52,150031,33042],{"class":58},[52,150033,150034],{"class":79}," options ",[52,150036,34033],{"class":58},[52,150038,150039],{"class":79}," opts\n",[52,150041,150042,150044,150046,150048],{"class":54,"line":66},[52,150043,33387],{"class":58},[52,150045,149888],{"class":79},[52,150047,33042],{"class":58},[52,150049,149893],{"class":79},[52,150051,150052],{"class":54,"line":83},[52,150053,123],{"emptyLinePlaceholder":122},[52,150055,150056,150058,150060],{"class":54,"line":91},[52,150057,149902],{"class":79},[52,150059,292],{"class":58},[52,150061,149907],{"class":79},[52,150063,150064,150066,150068,150070,150072,150074,150076,150078,150080,150082,150084],{"class":54,"line":98},[52,150065,149912],{"class":79},[52,150067,149915],{"class":62},[52,150069,15083],{"class":79},[52,150071,149920],{"class":62},[52,150073,15083],{"class":79},[52,150075,149925],{"class":62},[52,150077,15083],{"class":79},[52,150079,149930],{"class":62},[52,150081,15083],{"class":79},[52,150083,149935],{"class":62},[52,150085,7629],{"class":79},[52,150087,150088,150090,150092,150094,150096,150098,150100,150102,150104,150106,150108,150110,150112],{"class":54,"line":107},[52,150089,149942],{"class":79},[52,150091,149945],{"class":62},[52,150093,80168],{"class":79},[52,150095,591],{"class":308},[52,150097,15083],{"class":79},[52,150099,4007],{"class":308},[52,150101,15083],{"class":79},[52,150103,4052],{"class":308},[52,150105,15083],{"class":79},[52,150107,149962],{"class":308},[52,150109,15083],{"class":79},[52,150111,149967],{"class":308},[52,150113,7629],{"class":79},[52,150115,150116],{"class":54,"line":113},[52,150117,150118],{"class":79},"line.set_global_opts(\n",[52,150120,150121,150124,150126,150129,150131,150133,150136],{"class":54,"line":119},[52,150122,150123],{"class":1223},"    title_opts",[52,150125,292],{"class":58},[52,150127,150128],{"class":79},"opts.TitleOpts(",[52,150130,54057],{"class":1223},[52,150132,292],{"class":58},[52,150134,150135],{"class":62},"\"一周销售额\"",[52,150137,40697],{"class":79},[52,150139,150140,150143,150145,150148,150150,150152,150155],{"class":54,"line":126},[52,150141,150142],{"class":1223},"    xaxis_opts",[52,150144,292],{"class":58},[52,150146,150147],{"class":79},"opts.AxisOpts(",[52,150149,82460],{"class":1223},[52,150151,292],{"class":58},[52,150153,150154],{"class":62},"\"日期\"",[52,150156,40697],{"class":79},[52,150158,150159,150162,150164,150166,150168,150170,150173],{"class":54,"line":132},[52,150160,150161],{"class":1223},"    yaxis_opts",[52,150163,292],{"class":58},[52,150165,150147],{"class":79},[52,150167,82460],{"class":1223},[52,150169,292],{"class":58},[52,150171,150172],{"class":62},"\"金额\"",[52,150174,40697],{"class":79},[52,150176,150177,150180,150182,150185,150188,150190,150193],{"class":54,"line":138},[52,150178,150179],{"class":1223},"    tooltip_opts",[52,150181,292],{"class":58},[52,150183,150184],{"class":79},"opts.TooltipOpts(",[52,150186,150187],{"class":1223},"trigger",[52,150189,292],{"class":58},[52,150191,150192],{"class":62},"\"axis\"",[52,150194,40697],{"class":79},[52,150196,150197],{"class":54,"line":144},[52,150198,708],{"class":79},[52,150200,150201,150203,150205],{"class":54,"line":153},[52,150202,149974],{"class":79},[52,150204,149977],{"class":62},[52,150206,708],{"class":79},[14,150208,150209],{},"常见全局配置：",[3353,150211,150212,150221],{},[3356,150213,150214],{},[3359,150215,150216,150219],{},[3362,150217,150218],{},"配置",[3362,150220,105346],{},[3399,150222,150223,150233,150243,150253,150263,150273],{},[3359,150224,150225,150230],{},[3404,150226,150227],{},[49,150228,150229],{},"TitleOpts",[3404,150231,150232],{},"标题",[3359,150234,150235,150240],{},[3404,150236,150237],{},[49,150238,150239],{},"LegendOpts",[3404,150241,150242],{},"图例",[3359,150244,150245,150250],{},[3404,150246,150247],{},[49,150248,150249],{},"TooltipOpts",[3404,150251,150252],{},"提示框",[3359,150254,150255,150260],{},[3404,150256,150257],{},[49,150258,150259],{},"AxisOpts",[3404,150261,150262],{},"坐标轴",[3359,150264,150265,150270],{},[3404,150266,150267],{},[49,150268,150269],{},"VisualMapOpts",[3404,150271,150272],{},"视觉映射",[3359,150274,150275,150280],{},[3404,150276,150277],{},[49,150278,150279],{},"DataZoomOpts",[3404,150281,150282],{},"区域缩放",[18,150284,150286],{"id":150285},"_106-系列配置","10.6 系列配置",[14,150288,150289],{},"系列配置作用于某一组数据。",[42,150291,150293],{"className":33028,"code":150292,"language":33030,"meta":47,"style":47},"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",[49,150294,150295,150300,150311,150340,150351,150370],{"__ignoreMap":47},[52,150296,150297],{"class":54,"line":55},[52,150298,150299],{"class":79},"line.add_yaxis(\n",[52,150301,150302,150305,150307,150309],{"class":54,"line":66},[52,150303,150304],{"class":1223},"    series_name",[52,150306,292],{"class":58},[52,150308,149945],{"class":62},[52,150310,34116],{"class":79},[52,150312,150313,150316,150318,150320,150322,150324,150326,150328,150330,150332,150334,150336,150338],{"class":54,"line":83},[52,150314,150315],{"class":1223},"    y_axis",[52,150317,292],{"class":58},[52,150319,4080],{"class":79},[52,150321,591],{"class":308},[52,150323,15083],{"class":79},[52,150325,4007],{"class":308},[52,150327,15083],{"class":79},[52,150329,4052],{"class":308},[52,150331,15083],{"class":79},[52,150333,149962],{"class":308},[52,150335,15083],{"class":79},[52,150337,149967],{"class":308},[52,150339,90486],{"class":79},[52,150341,150342,150345,150347,150349],{"class":54,"line":91},[52,150343,150344],{"class":1223},"    is_smooth",[52,150346,292],{"class":58},[52,150348,34126],{"class":308},[52,150350,34116],{"class":79},[52,150352,150353,150356,150358,150361,150364,150366,150368],{"class":54,"line":98},[52,150354,150355],{"class":1223},"    label_opts",[52,150357,292],{"class":58},[52,150359,150360],{"class":79},"opts.LabelOpts(",[52,150362,150363],{"class":1223},"is_show",[52,150365,292],{"class":58},[52,150367,34126],{"class":308},[52,150369,40697],{"class":79},[52,150371,150372],{"class":54,"line":107},[52,150373,708],{"class":79},[14,150375,150376],{},"常用参数：",[1696,150378,150379,150385,150391,150397,150403],{},[32,150380,150381,150384],{},[49,150382,150383],{},"series_name","：系列名称。",[32,150386,150387,150390],{},[49,150388,150389],{},"y_axis","：y 轴数据。",[32,150392,150393,150396],{},[49,150394,150395],{},"is_smooth","：是否平滑曲线。",[32,150398,150399,150402],{},[49,150400,150401],{},"label_opts","：标签配置。",[32,150404,150405,150408],{},[49,150406,150407],{},"symbol_size","：标记点大小。",[18,150410,150412],{"id":150411},"_107-多条折线","10.7 多条折线",[42,150414,150416],{"className":33028,"code":150415,"language":33030,"meta":47,"style":47},"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",[49,150417,150418,150432,150442,150446,150475,150479,150487,150492,150530,150567,150571,150588,150604,150608],{"__ignoreMap":47},[52,150419,150420,150422,150424,150426,150428,150430],{"class":54,"line":55},[52,150421,33387],{"class":58},[52,150423,150029],{"class":79},[52,150425,33042],{"class":58},[52,150427,150034],{"class":79},[52,150429,34033],{"class":58},[52,150431,150039],{"class":79},[52,150433,150434,150436,150438,150440],{"class":54,"line":66},[52,150435,33387],{"class":58},[52,150437,149888],{"class":79},[52,150439,33042],{"class":58},[52,150441,149893],{"class":79},[52,150443,150444],{"class":54,"line":83},[52,150445,123],{"emptyLinePlaceholder":122},[52,150447,150448,150451,150453,150455,150457,150459,150461,150463,150465,150467,150469,150471,150473],{"class":54,"line":91},[52,150449,150450],{"class":79},"dates ",[52,150452,292],{"class":58},[52,150454,54876],{"class":79},[52,150456,149915],{"class":62},[52,150458,15083],{"class":79},[52,150460,149920],{"class":62},[52,150462,15083],{"class":79},[52,150464,149925],{"class":62},[52,150466,15083],{"class":79},[52,150468,149930],{"class":62},[52,150470,15083],{"class":79},[52,150472,149935],{"class":62},[52,150474,35896],{"class":79},[52,150476,150477],{"class":54,"line":98},[52,150478,123],{"emptyLinePlaceholder":122},[52,150480,150481,150483,150485],{"class":54,"line":107},[52,150482,149902],{"class":79},[52,150484,292],{"class":58},[52,150486,149907],{"class":79},[52,150488,150489],{"class":54,"line":113},[52,150490,150491],{"class":79},"line.add_xaxis(dates)\n",[52,150493,150494,150496,150499,150501,150503,150505,150508,150510,150512,150514,150516,150518,150520,150522,150524,150526,150528],{"class":54,"line":119},[52,150495,149942],{"class":79},[52,150497,150498],{"class":62},"\"线上销售\"",[52,150500,80168],{"class":79},[52,150502,591],{"class":308},[52,150504,15083],{"class":79},[52,150506,150507],{"class":308},"130",[52,150509,15083],{"class":79},[52,150511,4007],{"class":308},[52,150513,15083],{"class":79},[52,150515,23696],{"class":308},[52,150517,15083],{"class":79},[52,150519,856],{"class":308},[52,150521,114852],{"class":79},[52,150523,150395],{"class":1223},[52,150525,292],{"class":58},[52,150527,34126],{"class":308},[52,150529,708],{"class":79},[52,150531,150532,150534,150537,150539,150541,150543,150545,150547,150549,150551,150553,150555,150557,150559,150561,150563,150565],{"class":54,"line":126},[52,150533,149942],{"class":79},[52,150535,150536],{"class":62},"\"线下销售\"",[52,150538,80168],{"class":79},[52,150540,3809],{"class":308},[52,150542,15083],{"class":79},[52,150544,4052],{"class":308},[52,150546,15083],{"class":79},[52,150548,591],{"class":308},[52,150550,15083],{"class":79},[52,150552,4007],{"class":308},[52,150554,15083],{"class":79},[52,150556,149962],{"class":308},[52,150558,114852],{"class":79},[52,150560,150395],{"class":1223},[52,150562,292],{"class":58},[52,150564,34126],{"class":308},[52,150566,708],{"class":79},[52,150568,150569],{"class":54,"line":132},[52,150570,150118],{"class":79},[52,150572,150573,150575,150577,150579,150581,150583,150586],{"class":54,"line":138},[52,150574,150123],{"class":1223},[52,150576,292],{"class":58},[52,150578,150128],{"class":79},[52,150580,54057],{"class":1223},[52,150582,292],{"class":58},[52,150584,150585],{"class":62},"\"线上线下销售趋势\"",[52,150587,40697],{"class":79},[52,150589,150590,150592,150594,150596,150598,150600,150602],{"class":54,"line":144},[52,150591,150179],{"class":1223},[52,150593,292],{"class":58},[52,150595,150184],{"class":79},[52,150597,150187],{"class":1223},[52,150599,292],{"class":58},[52,150601,150192],{"class":62},[52,150603,40697],{"class":79},[52,150605,150606],{"class":54,"line":153},[52,150607,708],{"class":79},[52,150609,150610,150612,150615],{"class":54,"line":159},[52,150611,149974],{"class":79},[52,150613,150614],{"class":62},"\"sales.html\"",[52,150616,708],{"class":79},[14,150618,150619],{},"多条折线适合比较不同指标或不同地区。",[18,150621,150623],{"id":150622},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,150625,150626,150627,27268],{},"假设 ",[49,150628,150629],{},"sales.json",[42,150631,150633],{"className":149695,"code":150632,"language":148442,"meta":47,"style":47},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[49,150634,150635,150640,150672,150700,150728],{"__ignoreMap":47},[52,150636,150637],{"class":54,"line":55},[52,150638,150639],{"class":79},"[\n",[52,150641,150642,150645,150648,150650,150652,150654,150657,150659,150661,150663,150666,150668,150670],{"class":54,"line":66},[52,150643,150644],{"class":79},"  {",[52,150646,150647],{"class":308},"\"date\"",[52,150649,54087],{"class":79},[52,150651,149915],{"class":62},[52,150653,15083],{"class":79},[52,150655,150656],{"class":308},"\"online\"",[52,150658,54087],{"class":79},[52,150660,591],{"class":308},[52,150662,15083],{"class":79},[52,150664,150665],{"class":308},"\"offline\"",[52,150667,54087],{"class":79},[52,150669,3809],{"class":308},[52,150671,594],{"class":79},[52,150673,150674,150676,150678,150680,150682,150684,150686,150688,150690,150692,150694,150696,150698],{"class":54,"line":83},[52,150675,150644],{"class":79},[52,150677,150647],{"class":308},[52,150679,54087],{"class":79},[52,150681,149920],{"class":62},[52,150683,15083],{"class":79},[52,150685,150656],{"class":308},[52,150687,54087],{"class":79},[52,150689,150507],{"class":308},[52,150691,15083],{"class":79},[52,150693,150665],{"class":308},[52,150695,54087],{"class":79},[52,150697,4052],{"class":308},[52,150699,594],{"class":79},[52,150701,150702,150704,150706,150708,150710,150712,150714,150716,150718,150720,150722,150724,150726],{"class":54,"line":91},[52,150703,150644],{"class":79},[52,150705,150647],{"class":308},[52,150707,54087],{"class":79},[52,150709,149925],{"class":62},[52,150711,15083],{"class":79},[52,150713,150656],{"class":308},[52,150715,54087],{"class":79},[52,150717,4007],{"class":308},[52,150719,15083],{"class":79},[52,150721,150665],{"class":308},[52,150723,54087],{"class":79},[52,150725,591],{"class":308},[52,150727,452],{"class":79},[52,150729,150730],{"class":54,"line":98},[52,150731,35896],{"class":79},[14,150733,150734],{},"读取并绘图：",[42,150736,150738],{"className":33028,"code":150737,"language":33030,"meta":47,"style":47},"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",[49,150739,150740,150746,150760,150770,150774,150806,150819,150823,150831,150840,150849,150853,150865,150874,150883,150892,150896,150904,150908,150925,150942,150946,150963,150979,150983],{"__ignoreMap":47},[52,150741,150742,150744],{"class":54,"line":55},[52,150743,33042],{"class":58},[52,150745,149741],{"class":79},[52,150747,150748,150750,150752,150754,150756,150758],{"class":54,"line":66},[52,150749,33387],{"class":58},[52,150751,150029],{"class":79},[52,150753,33042],{"class":58},[52,150755,150034],{"class":79},[52,150757,34033],{"class":58},[52,150759,150039],{"class":79},[52,150761,150762,150764,150766,150768],{"class":54,"line":83},[52,150763,33387],{"class":58},[52,150765,149888],{"class":79},[52,150767,33042],{"class":58},[52,150769,149893],{"class":79},[52,150771,150772],{"class":54,"line":91},[52,150773,123],{"emptyLinePlaceholder":122},[52,150775,150776,150778,150780,150782,150785,150787,150789,150791,150793,150795,150797,150799,150801,150804],{"class":54,"line":98},[52,150777,110483],{"class":58},[52,150779,149441],{"class":308},[52,150781,1216],{"class":79},[52,150783,150784],{"class":62},"\"sales.json\"",[52,150786,15083],{"class":79},[52,150788,149451],{"class":62},[52,150790,15083],{"class":79},[52,150792,149456],{"class":1223},[52,150794,292],{"class":58},[52,150796,149461],{"class":62},[52,150798,16362],{"class":79},[52,150800,34033],{"class":58},[52,150802,150803],{"class":1223}," file",[52,150805,6718],{"class":79},[52,150807,150808,150810,150812,150815,150817],{"class":54,"line":107},[52,150809,104071],{"class":79},[52,150811,292],{"class":58},[52,150813,150814],{"class":79}," json.load(",[52,150816,48004],{"class":1223},[52,150818,708],{"class":79},[52,150820,150821],{"class":54,"line":113},[52,150822,123],{"emptyLinePlaceholder":122},[52,150824,150825,150827,150829],{"class":54,"line":119},[52,150826,150450],{"class":79},[52,150828,292],{"class":58},[52,150830,54488],{"class":79},[52,150832,150833,150836,150838],{"class":54,"line":126},[52,150834,150835],{"class":79},"online_sales ",[52,150837,292],{"class":58},[52,150839,54488],{"class":79},[52,150841,150842,150845,150847],{"class":54,"line":132},[52,150843,150844],{"class":79},"offline_sales ",[52,150846,292],{"class":58},[52,150848,54488],{"class":79},[52,150850,150851],{"class":54,"line":138},[52,150852,123],{"emptyLinePlaceholder":122},[52,150854,150855,150857,150860,150862],{"class":54,"line":144},[52,150856,6014],{"class":58},[52,150858,150859],{"class":79}," item ",[52,150861,28693],{"class":58},[52,150863,150864],{"class":79}," data:\n",[52,150866,150867,150870,150872],{"class":54,"line":153},[52,150868,150869],{"class":79},"    dates.append(item[",[52,150871,150647],{"class":62},[52,150873,7629],{"class":79},[52,150875,150876,150879,150881],{"class":54,"line":159},[52,150877,150878],{"class":79},"    online_sales.append(item[",[52,150880,150656],{"class":62},[52,150882,7629],{"class":79},[52,150884,150885,150888,150890],{"class":54,"line":167},[52,150886,150887],{"class":79},"    offline_sales.append(item[",[52,150889,150665],{"class":62},[52,150891,7629],{"class":79},[52,150893,150894],{"class":54,"line":173},[52,150895,123],{"emptyLinePlaceholder":122},[52,150897,150898,150900,150902],{"class":54,"line":181},[52,150899,149902],{"class":79},[52,150901,292],{"class":58},[52,150903,149907],{"class":79},[52,150905,150906],{"class":54,"line":186},[52,150907,150491],{"class":79},[52,150909,150910,150912,150914,150917,150919,150921,150923],{"class":54,"line":191},[52,150911,149942],{"class":79},[52,150913,150498],{"class":62},[52,150915,150916],{"class":79},", online_sales, ",[52,150918,150395],{"class":1223},[52,150920,292],{"class":58},[52,150922,34126],{"class":308},[52,150924,708],{"class":79},[52,150926,150927,150929,150931,150934,150936,150938,150940],{"class":54,"line":196},[52,150928,149942],{"class":79},[52,150930,150536],{"class":62},[52,150932,150933],{"class":79},", offline_sales, ",[52,150935,150395],{"class":1223},[52,150937,292],{"class":58},[52,150939,34126],{"class":308},[52,150941,708],{"class":79},[52,150943,150944],{"class":54,"line":201},[52,150945,150118],{"class":79},[52,150947,150948,150950,150952,150954,150956,150958,150961],{"class":54,"line":206},[52,150949,150123],{"class":1223},[52,150951,292],{"class":58},[52,150953,150128],{"class":79},[52,150955,54057],{"class":1223},[52,150957,292],{"class":58},[52,150959,150960],{"class":62},"\"销售趋势\"",[52,150962,40697],{"class":79},[52,150964,150965,150967,150969,150971,150973,150975,150977],{"class":54,"line":211},[52,150966,150179],{"class":1223},[52,150968,292],{"class":58},[52,150970,150184],{"class":79},[52,150972,150187],{"class":1223},[52,150974,292],{"class":58},[52,150976,150192],{"class":62},[52,150978,40697],{"class":79},[52,150980,150981],{"class":54,"line":218},[52,150982,708],{"class":79},[52,150984,150985,150987,150989],{"class":54,"line":223},[52,150986,149974],{"class":79},[52,150988,150614],{"class":62},[52,150990,708],{"class":79},[18,150992,150994],{"id":150993},"_109-数据清洗","10.9 数据清洗",[14,150996,150997],{},"真实数据经常不整齐，需要清洗。",[14,150999,151000],{},"常见问题：",[1696,151002,151003,151006,151009,151012],{},[32,151004,151005],{},"数字是字符串。",[32,151007,151008],{},"字段缺失。",[32,151010,151011],{},"空值。",[32,151013,151014],{},"日期格式不统一。",[14,151016,17783],{},[42,151018,151020],{"className":33028,"code":151019,"language":33030,"meta":47,"style":47},"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",[49,151021,151022,151031,151054,151074,151095,151099,151103,151111,151120,151124,151135,151149,151158,151163,151167,151175,151185,151189,151196],{"__ignoreMap":47},[52,151023,151024,151027,151029],{"class":54,"line":55},[52,151025,151026],{"class":79},"raw_data ",[52,151028,292],{"class":58},[52,151030,58097],{"class":79},[52,151032,151033,151036,151038,151040,151042,151044,151047,151049,151052],{"class":54,"line":66},[52,151034,151035],{"class":79},"    {",[52,151037,150647],{"class":62},[52,151039,54087],{"class":79},[52,151041,149915],{"class":62},[52,151043,15083],{"class":79},[52,151045,151046],{"class":62},"\"sales\"",[52,151048,54087],{"class":79},[52,151050,151051],{"class":62},"\"100\"",[52,151053,594],{"class":79},[52,151055,151056,151058,151060,151062,151064,151066,151068,151070,151072],{"class":54,"line":83},[52,151057,151035],{"class":79},[52,151059,150647],{"class":62},[52,151061,54087],{"class":79},[52,151063,149920],{"class":62},[52,151065,15083],{"class":79},[52,151067,151046],{"class":62},[52,151069,54087],{"class":79},[52,151071,10607],{"class":62},[52,151073,594],{"class":79},[52,151075,151076,151078,151080,151082,151084,151086,151088,151090,151093],{"class":54,"line":91},[52,151077,151035],{"class":79},[52,151079,150647],{"class":62},[52,151081,54087],{"class":79},[52,151083,149925],{"class":62},[52,151085,15083],{"class":79},[52,151087,151046],{"class":62},[52,151089,54087],{"class":79},[52,151091,151092],{"class":62},"\"120\"",[52,151094,594],{"class":79},[52,151096,151097],{"class":54,"line":98},[52,151098,35896],{"class":79},[52,151100,151101],{"class":54,"line":107},[52,151102,123],{"emptyLinePlaceholder":122},[52,151104,151105,151107,151109],{"class":54,"line":113},[52,151106,150450],{"class":79},[52,151108,292],{"class":58},[52,151110,54488],{"class":79},[52,151112,151113,151116,151118],{"class":54,"line":119},[52,151114,151115],{"class":79},"sales ",[52,151117,292],{"class":58},[52,151119,54488],{"class":79},[52,151121,151122],{"class":54,"line":126},[52,151123,123],{"emptyLinePlaceholder":122},[52,151125,151126,151128,151130,151132],{"class":54,"line":132},[52,151127,6014],{"class":58},[52,151129,150859],{"class":79},[52,151131,28693],{"class":58},[52,151133,151134],{"class":79}," raw_data:\n",[52,151136,151137,151140,151142,151145,151147],{"class":54,"line":138},[52,151138,151139],{"class":79},"    value ",[52,151141,292],{"class":58},[52,151143,151144],{"class":79}," item.get(",[52,151146,151046],{"class":62},[52,151148,708],{"class":79},[52,151150,151151,151153,151155],{"class":54,"line":144},[52,151152,6088],{"class":58},[52,151154,41580],{"class":58},[52,151156,151157],{"class":79}," value:\n",[52,151159,151160],{"class":54,"line":153},[52,151161,151162],{"class":58},"        continue\n",[52,151164,151165],{"class":54,"line":159},[52,151166,123],{"emptyLinePlaceholder":122},[52,151168,151169,151171,151173],{"class":54,"line":167},[52,151170,150869],{"class":79},[52,151172,150647],{"class":62},[52,151174,7629],{"class":79},[52,151176,151177,151180,151182],{"class":54,"line":173},[52,151178,151179],{"class":79},"    sales.append(",[52,151181,242],{"class":308},[52,151183,151184],{"class":79},"(value))\n",[52,151186,151187],{"class":54,"line":181},[52,151188,123],{"emptyLinePlaceholder":122},[52,151190,151191,151193],{"class":54,"line":186},[52,151192,33065],{"class":308},[52,151194,151195],{"class":79},"(dates)\n",[52,151197,151198,151200],{"class":54,"line":191},[52,151199,33065],{"class":308},[52,151201,151202],{"class":79},"(sales)\n",[18,151204,151206],{"id":151205},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[42,151208,151210],{"className":33028,"code":151209,"language":33030,"meta":47,"style":47},"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",[49,151211,151212,151226,151236,151240,151248,151269,151291,151313,151335,151357,151361,151365,151387,151408,151412,151420,151424,151428,151438,151447,151457,151473,151477,151481,151498,151514,151530,151546,151556,151560],{"__ignoreMap":47},[52,151213,151214,151216,151218,151220,151222,151224],{"class":54,"line":55},[52,151215,33387],{"class":58},[52,151217,150029],{"class":79},[52,151219,33042],{"class":58},[52,151221,150034],{"class":79},[52,151223,34033],{"class":58},[52,151225,150039],{"class":79},[52,151227,151228,151230,151232,151234],{"class":54,"line":66},[52,151229,33387],{"class":58},[52,151231,149888],{"class":79},[52,151233,33042],{"class":58},[52,151235,149893],{"class":79},[52,151237,151238],{"class":54,"line":83},[52,151239,123],{"emptyLinePlaceholder":122},[52,151241,151242,151244,151246],{"class":54,"line":91},[52,151243,151115],{"class":79},[52,151245,292],{"class":58},[52,151247,58097],{"class":79},[52,151249,151250,151252,151254,151256,151259,151261,151263,151265,151267],{"class":54,"line":98},[52,151251,151035],{"class":79},[52,151253,150647],{"class":62},[52,151255,54087],{"class":79},[52,151257,151258],{"class":62},"\"2024-10-01\"",[52,151260,15083],{"class":79},[52,151262,86734],{"class":62},[52,151264,54087],{"class":79},[52,151266,94673],{"class":308},[52,151268,594],{"class":79},[52,151270,151271,151273,151275,151277,151280,151282,151284,151286,151289],{"class":54,"line":107},[52,151272,151035],{"class":79},[52,151274,150647],{"class":62},[52,151276,54087],{"class":79},[52,151278,151279],{"class":62},"\"2024-10-02\"",[52,151281,15083],{"class":79},[52,151283,86734],{"class":62},[52,151285,54087],{"class":79},[52,151287,151288],{"class":308},"1800",[52,151290,594],{"class":79},[52,151292,151293,151295,151297,151299,151302,151304,151306,151308,151311],{"class":54,"line":113},[52,151294,151035],{"class":79},[52,151296,150647],{"class":62},[52,151298,54087],{"class":79},[52,151300,151301],{"class":62},"\"2024-10-03\"",[52,151303,15083],{"class":79},[52,151305,86734],{"class":62},[52,151307,54087],{"class":79},[52,151309,151310],{"class":308},"1500",[52,151312,594],{"class":79},[52,151314,151315,151317,151319,151321,151324,151326,151328,151330,151333],{"class":54,"line":119},[52,151316,151035],{"class":79},[52,151318,150647],{"class":62},[52,151320,54087],{"class":79},[52,151322,151323],{"class":62},"\"2024-10-04\"",[52,151325,15083],{"class":79},[52,151327,86734],{"class":62},[52,151329,54087],{"class":79},[52,151331,151332],{"class":308},"2100",[52,151334,594],{"class":79},[52,151336,151337,151339,151341,151343,151346,151348,151350,151352,151355],{"class":54,"line":126},[52,151338,151035],{"class":79},[52,151340,150647],{"class":62},[52,151342,54087],{"class":79},[52,151344,151345],{"class":62},"\"2024-10-05\"",[52,151347,15083],{"class":79},[52,151349,86734],{"class":62},[52,151351,54087],{"class":79},[52,151353,151354],{"class":308},"2600",[52,151356,594],{"class":79},[52,151358,151359],{"class":54,"line":132},[52,151360,35896],{"class":79},[52,151362,151363],{"class":54,"line":138},[52,151364,123],{"emptyLinePlaceholder":122},[52,151366,151367,151369,151371,151374,151376,151378,151380,151382,151384],{"class":54,"line":144},[52,151368,150450],{"class":79},[52,151370,292],{"class":58},[52,151372,151373],{"class":79}," [item[",[52,151375,150647],{"class":62},[52,151377,7415],{"class":79},[52,151379,6014],{"class":58},[52,151381,150859],{"class":79},[52,151383,28693],{"class":58},[52,151385,151386],{"class":79}," sales]\n",[52,151388,151389,151392,151394,151396,151398,151400,151402,151404,151406],{"class":54,"line":153},[52,151390,151391],{"class":79},"amounts ",[52,151393,292],{"class":58},[52,151395,151373],{"class":79},[52,151397,86734],{"class":62},[52,151399,7415],{"class":79},[52,151401,6014],{"class":58},[52,151403,150859],{"class":79},[52,151405,28693],{"class":58},[52,151407,151386],{"class":79},[52,151409,151410],{"class":54,"line":159},[52,151411,123],{"emptyLinePlaceholder":122},[52,151413,151414,151416,151418],{"class":54,"line":167},[52,151415,149902],{"class":79},[52,151417,292],{"class":58},[52,151419,149907],{"class":79},[52,151421,151422],{"class":54,"line":173},[52,151423,150491],{"class":79},[52,151425,151426],{"class":54,"line":181},[52,151427,150299],{"class":79},[52,151429,151430,151432,151434,151436],{"class":54,"line":186},[52,151431,150304],{"class":1223},[52,151433,292],{"class":58},[52,151435,149945],{"class":62},[52,151437,34116],{"class":79},[52,151439,151440,151442,151444],{"class":54,"line":191},[52,151441,150315],{"class":1223},[52,151443,292],{"class":58},[52,151445,151446],{"class":79},"amounts,\n",[52,151448,151449,151451,151453,151455],{"class":54,"line":196},[52,151450,150344],{"class":1223},[52,151452,292],{"class":58},[52,151454,34126],{"class":308},[52,151456,34116],{"class":79},[52,151458,151459,151461,151463,151465,151467,151469,151471],{"class":54,"line":201},[52,151460,150355],{"class":1223},[52,151462,292],{"class":58},[52,151464,150360],{"class":79},[52,151466,150363],{"class":1223},[52,151468,292],{"class":58},[52,151470,34126],{"class":308},[52,151472,40697],{"class":79},[52,151474,151475],{"class":54,"line":206},[52,151476,708],{"class":79},[52,151478,151479],{"class":54,"line":211},[52,151480,150118],{"class":79},[52,151482,151483,151485,151487,151489,151491,151493,151496],{"class":54,"line":218},[52,151484,150123],{"class":1223},[52,151486,292],{"class":58},[52,151488,150128],{"class":79},[52,151490,54057],{"class":1223},[52,151492,292],{"class":58},[52,151494,151495],{"class":62},"\"每日销售额\"",[52,151497,40697],{"class":79},[52,151499,151500,151502,151504,151506,151508,151510,151512],{"class":54,"line":223},[52,151501,150142],{"class":1223},[52,151503,292],{"class":58},[52,151505,150147],{"class":79},[52,151507,82460],{"class":1223},[52,151509,292],{"class":58},[52,151511,150154],{"class":62},[52,151513,40697],{"class":79},[52,151515,151516,151518,151520,151522,151524,151526,151528],{"class":54,"line":230},[52,151517,150161],{"class":1223},[52,151519,292],{"class":58},[52,151521,150147],{"class":79},[52,151523,82460],{"class":1223},[52,151525,292],{"class":58},[52,151527,150172],{"class":62},[52,151529,40697],{"class":79},[52,151531,151532,151534,151536,151538,151540,151542,151544],{"class":54,"line":239},[52,151533,150179],{"class":1223},[52,151535,292],{"class":58},[52,151537,150184],{"class":79},[52,151539,150187],{"class":1223},[52,151541,292],{"class":58},[52,151543,150192],{"class":62},[52,151545,40697],{"class":79},[52,151547,151548,151551,151553],{"class":54,"line":251},[52,151549,151550],{"class":1223},"    datazoom_opts",[52,151552,292],{"class":58},[52,151554,151555],{"class":79},"[opts.DataZoomOpts()],\n",[52,151557,151558],{"class":54,"line":256},[52,151559,708],{"class":79},[52,151561,151562,151564,151567],{"class":54,"line":262},[52,151563,149974],{"class":79},[52,151565,151566],{"class":62},"\"daily_sales.html\"",[52,151568,708],{"class":79},[14,151570,151571,151574],{},[49,151572,151573],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[18,151576,151578],{"id":151577},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,151580,151581],{},"如果数据结构如下：",[42,151583,151585],{"className":33028,"code":151584,"language":33030,"meta":47,"style":47},"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",[49,151586,151587,151595,151603,151625,151646,151651,151658,151678,151698,151702],{"__ignoreMap":47},[52,151588,151589,151591,151593],{"class":54,"line":55},[52,151590,104308],{"class":79},[52,151592,292],{"class":58},[52,151594,18220],{"class":79},[52,151596,151597,151600],{"class":54,"line":66},[52,151598,151599],{"class":62},"    \"北京\"",[52,151601,151602],{"class":79},": [\n",[52,151604,151605,151607,151609,151611,151614,151616,151619,151621,151623],{"class":54,"line":83},[52,151606,580],{"class":79},[52,151608,150647],{"class":62},[52,151610,54087],{"class":79},[52,151612,151613],{"class":62},"\"2024-01-01\"",[52,151615,15083],{"class":79},[52,151617,151618],{"class":62},"\"confirm\"",[52,151620,54087],{"class":79},[52,151622,3649],{"class":308},[52,151624,594],{"class":79},[52,151626,151627,151629,151631,151633,151636,151638,151640,151642,151644],{"class":54,"line":91},[52,151628,580],{"class":79},[52,151630,150647],{"class":62},[52,151632,54087],{"class":79},[52,151634,151635],{"class":62},"\"2024-01-02\"",[52,151637,15083],{"class":79},[52,151639,151618],{"class":62},[52,151641,54087],{"class":79},[52,151643,3698],{"class":308},[52,151645,594],{"class":79},[52,151647,151648],{"class":54,"line":98},[52,151649,151650],{"class":79},"    ],\n",[52,151652,151653,151656],{"class":54,"line":107},[52,151654,151655],{"class":62},"    \"上海\"",[52,151657,151602],{"class":79},[52,151659,151660,151662,151664,151666,151668,151670,151672,151674,151676],{"class":54,"line":113},[52,151661,580],{"class":79},[52,151663,150647],{"class":62},[52,151665,54087],{"class":79},[52,151667,151613],{"class":62},[52,151669,15083],{"class":79},[52,151671,151618],{"class":62},[52,151673,54087],{"class":79},[52,151675,3600],{"class":308},[52,151677,594],{"class":79},[52,151679,151680,151682,151684,151686,151688,151690,151692,151694,151696],{"class":54,"line":119},[52,151681,580],{"class":79},[52,151683,150647],{"class":62},[52,151685,54087],{"class":79},[52,151687,151635],{"class":62},[52,151689,15083],{"class":79},[52,151691,151618],{"class":62},[52,151693,54087],{"class":79},[52,151695,3723],{"class":308},[52,151697,594],{"class":79},[52,151699,151700],{"class":54,"line":126},[52,151701,151650],{"class":79},[52,151703,151704],{"class":54,"line":132},[52,151705,452],{"class":79},[14,151707,151708],{},"绘制多地区趋势：",[42,151710,151712],{"className":33028,"code":151711,"language":33030,"meta":47,"style":47},"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",[49,151713,151714,151728,151738,151742,151767,151771,151779,151783,151787,151799,151821,151834,151838,151842,151859,151875,151879],{"__ignoreMap":47},[52,151715,151716,151718,151720,151722,151724,151726],{"class":54,"line":55},[52,151717,33387],{"class":58},[52,151719,150029],{"class":79},[52,151721,33042],{"class":58},[52,151723,150034],{"class":79},[52,151725,34033],{"class":58},[52,151727,150039],{"class":79},[52,151729,151730,151732,151734,151736],{"class":54,"line":66},[52,151731,33387],{"class":58},[52,151733,149888],{"class":79},[52,151735,33042],{"class":58},[52,151737,149893],{"class":79},[52,151739,151740],{"class":54,"line":83},[52,151741,123],{"emptyLinePlaceholder":122},[52,151743,151744,151746,151748,151750,151752,151754,151756,151758,151760,151763,151765],{"class":54,"line":91},[52,151745,150450],{"class":79},[52,151747,292],{"class":58},[52,151749,151373],{"class":79},[52,151751,150647],{"class":62},[52,151753,7415],{"class":79},[52,151755,6014],{"class":58},[52,151757,150859],{"class":79},[52,151759,28693],{"class":58},[52,151761,151762],{"class":79}," data[",[52,151764,71919],{"class":62},[52,151766,80177],{"class":79},[52,151768,151769],{"class":54,"line":98},[52,151770,123],{"emptyLinePlaceholder":122},[52,151772,151773,151775,151777],{"class":54,"line":107},[52,151774,149902],{"class":79},[52,151776,292],{"class":58},[52,151778,149907],{"class":79},[52,151780,151781],{"class":54,"line":113},[52,151782,150491],{"class":79},[52,151784,151785],{"class":54,"line":119},[52,151786,123],{"emptyLinePlaceholder":122},[52,151788,151789,151791,151794,151796],{"class":54,"line":126},[52,151790,6014],{"class":58},[52,151792,151793],{"class":79}," city, records ",[52,151795,28693],{"class":58},[52,151797,151798],{"class":79}," data.items():\n",[52,151800,151801,151804,151806,151808,151810,151812,151814,151816,151818],{"class":54,"line":132},[52,151802,151803],{"class":79},"    values ",[52,151805,292],{"class":58},[52,151807,151373],{"class":79},[52,151809,151618],{"class":62},[52,151811,7415],{"class":79},[52,151813,6014],{"class":58},[52,151815,150859],{"class":79},[52,151817,28693],{"class":58},[52,151819,151820],{"class":79}," records]\n",[52,151822,151823,151826,151828,151830,151832],{"class":54,"line":138},[52,151824,151825],{"class":79},"    line.add_yaxis(city, values, ",[52,151827,150395],{"class":1223},[52,151829,292],{"class":58},[52,151831,34126],{"class":308},[52,151833,708],{"class":79},[52,151835,151836],{"class":54,"line":144},[52,151837,123],{"emptyLinePlaceholder":122},[52,151839,151840],{"class":54,"line":153},[52,151841,150118],{"class":79},[52,151843,151844,151846,151848,151850,151852,151854,151857],{"class":54,"line":159},[52,151845,150123],{"class":1223},[52,151847,292],{"class":58},[52,151849,150128],{"class":79},[52,151851,54057],{"class":1223},[52,151853,292],{"class":58},[52,151855,151856],{"class":62},"\"多地区趋势图\"",[52,151858,40697],{"class":79},[52,151860,151861,151863,151865,151867,151869,151871,151873],{"class":54,"line":167},[52,151862,150179],{"class":1223},[52,151864,292],{"class":58},[52,151866,150184],{"class":79},[52,151868,150187],{"class":1223},[52,151870,292],{"class":58},[52,151872,150192],{"class":62},[52,151874,40697],{"class":79},[52,151876,151877],{"class":54,"line":173},[52,151878,708],{"class":79},[52,151880,151881,151883,151886],{"class":54,"line":181},[52,151882,149974],{"class":79},[52,151884,151885],{"class":62},"\"trend.html\"",[52,151887,708],{"class":79},[14,151889,151890],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[18,151892,151894],{"id":151893},"_1012-易错点","10.12 易错点",[1696,151896,151897,151903,151909,151919,151925],{},[32,151898,151899,151902],{},[49,151900,151901],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[32,151904,151905,151908],{},[49,151906,151907],{},"render()"," 生成的是 HTML，不是图片。",[32,151910,151911,151912,151915,151916,31035],{},"JSON 字符串用 ",[49,151913,151914],{},"json.loads()","，JSON 文件用 ",[49,151917,151918],{},"json.load()",[32,151920,151921,151922,31035],{},"中文 JSON 保存时加 ",[49,151923,151924],{},"ensure_ascii=False",[32,151926,151927],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[18,151929,151931],{"id":151930},"_1013-本章练习","10.13 本章练习",[1696,151933,151934,151937,151940,151943,151946],{},[32,151935,151936],{},"安装 pyecharts 并生成第一个折线图。",[32,151938,151939],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[32,151941,151942],{},"绘制两条折线，对比线上和线下销售额。",[32,151944,151945],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[32,151947,151948],{},"对含有空值的销售数据进行清洗后再绘图。",[3141,151950,151951],{},"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":47,"searchDepth":66,"depth":66,"links":151953},[151954,151955,151956,151957,151958,151959,151960,151961,151962,151963,151964,151965,151966],{"id":149570,"depth":66,"text":149571},{"id":149645,"depth":66,"text":149646},{"id":149824,"depth":66,"text":149825},{"id":149875,"depth":66,"text":149876},{"id":150009,"depth":66,"text":150010},{"id":150285,"depth":66,"text":150286},{"id":150411,"depth":66,"text":150412},{"id":150622,"depth":66,"text":150623},{"id":150993,"depth":66,"text":150994},{"id":151205,"depth":66,"text":151206},{"id":151577,"depth":66,"text":151578},{"id":151893,"depth":66,"text":151894},{"id":151930,"depth":66,"text":151931},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":149562,"description":26025},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":151973,"title":151974,"body":151975,"description":26025,"extension":3153,"meta":154335,"navigation":122,"path":154336,"seo":154337,"stem":154338,"__hash__":154339},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151976,"toc":154312},[151977,151980,151984,151987,151990,152066,152069,152160,152163,152167,152170,152214,152227,152231,152234,152301,152304,152308,152311,152395,152403,152407,152412,152553,152556,152567,152573,152579,152693,152697,152700,152703,152956,152959,152963,152966,153070,153073,153077,153228,153232,153239,153352,153356,153359,153465,153468,153472,153475,153506,153509,153614,153617,153621,153625,153635,153703,153707,153714,153778,153781,153785,153791,153887,153896,153900,154224,154233,154237,154265,154269,154309],[10,151978,151974],{"id":151979},"_11-面向对象基础",[18,151981,151983],{"id":151982},"_111-什么是面向对象","11.1 什么是面向对象",[14,151985,151986],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,151988,151989],{},"面向过程：",[42,151991,151993],{"className":33028,"code":151992,"language":33030,"meta":47,"style":47},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[49,151994,151995,152004,152012,152016,152026,152057,152061],{"__ignoreMap":47},[52,151996,151997,151999,152001],{"class":54,"line":55},[52,151998,149186],{"class":79},[52,152000,292],{"class":58},[52,152002,152003],{"class":62}," \"小明\"\n",[52,152005,152006,152008,152010],{"class":54,"line":66},[52,152007,149196],{"class":79},[52,152009,292],{"class":58},[52,152011,149201],{"class":308},[52,152013,152014],{"class":54,"line":83},[52,152015,123],{"emptyLinePlaceholder":122},[52,152017,152018,152020,152023],{"class":54,"line":91},[52,152019,34597],{"class":58},[52,152021,152022],{"class":75}," introduce",[52,152024,152025],{"class":79},"(name, age):\n",[52,152027,152028,152030,152032,152034,152037,152039,152041,152043,152046,152048,152050,152052,152055],{"class":54,"line":98},[52,152029,33949],{"class":308},[52,152031,1216],{"class":79},[52,152033,3273],{"class":58},[52,152035,152036],{"class":62},"\"我叫",[52,152038,383],{"class":308},[52,152040,82460],{"class":79},[52,152042,4132],{"class":308},[52,152044,152045],{"class":62},"，今年",[52,152047,383],{"class":308},[52,152049,72871],{"class":79},[52,152051,4132],{"class":308},[52,152053,152054],{"class":62},"岁\"",[52,152056,708],{"class":79},[52,152058,152059],{"class":54,"line":107},[52,152060,123],{"emptyLinePlaceholder":122},[52,152062,152063],{"class":54,"line":113},[52,152064,152065],{"class":79},"introduce(name, age)\n",[14,152067,152068],{},"面向对象：",[42,152070,152072],{"className":33028,"code":152071,"language":33030,"meta":47,"style":47},"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",[49,152073,152074,152082,152090,152119,152123,152127,152137,152146,152155],{"__ignoreMap":47},[52,152075,152076,152078,152080],{"class":54,"line":55},[52,152077,17342],{"class":58},[52,152079,274],{"class":75},[52,152081,6718],{"class":79},[52,152083,152084,152086,152088],{"class":54,"line":66},[52,152085,33451],{"class":58},[52,152087,152022],{"class":75},[52,152089,33457],{"class":79},[52,152091,152092,152094,152096,152098,152100,152103,152105,152107,152109,152111,152113,152115,152117],{"class":54,"line":83},[52,152093,35101],{"class":308},[52,152095,1216],{"class":79},[52,152097,3273],{"class":58},[52,152099,152036],{"class":62},[52,152101,152102],{"class":308},"{self",[52,152104,82951],{"class":79},[52,152106,4132],{"class":308},[52,152108,152045],{"class":62},[52,152110,152102],{"class":308},[52,152112,82963],{"class":79},[52,152114,4132],{"class":308},[52,152116,152054],{"class":62},[52,152118,708],{"class":79},[52,152120,152121],{"class":54,"line":91},[52,152122,123],{"emptyLinePlaceholder":122},[52,152124,152125],{"class":54,"line":98},[52,152126,123],{"emptyLinePlaceholder":122},[52,152128,152129,152132,152134],{"class":54,"line":107},[52,152130,152131],{"class":79},"student ",[52,152133,292],{"class":58},[52,152135,152136],{"class":79}," Student()\n",[52,152138,152139,152142,152144],{"class":54,"line":113},[52,152140,152141],{"class":79},"student.name ",[52,152143,292],{"class":58},[52,152145,152003],{"class":62},[52,152147,152148,152151,152153],{"class":54,"line":119},[52,152149,152150],{"class":79},"student.age ",[52,152152,292],{"class":58},[52,152154,149201],{"class":308},[52,152156,152157],{"class":54,"line":126},[52,152158,152159],{"class":79},"student.introduce()\n",[14,152161,152162],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[18,152164,152166],{"id":152165},"_112-类和对象","11.2 类和对象",[14,152168,152169],{},"类是模板，对象是根据模板创建出来的具体实例。",[42,152171,152173],{"className":33028,"code":152172,"language":33030,"meta":47,"style":47},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[49,152174,152175,152183,152188,152192,152196,152205],{"__ignoreMap":47},[52,152176,152177,152179,152181],{"class":54,"line":55},[52,152178,17342],{"class":58},[52,152180,274],{"class":75},[52,152182,6718],{"class":79},[52,152184,152185],{"class":54,"line":66},[52,152186,152187],{"class":58},"    pass\n",[52,152189,152190],{"class":54,"line":83},[52,152191,123],{"emptyLinePlaceholder":122},[52,152193,152194],{"class":54,"line":91},[52,152195,123],{"emptyLinePlaceholder":122},[52,152197,152198,152201,152203],{"class":54,"line":98},[52,152199,152200],{"class":79},"student1 ",[52,152202,292],{"class":58},[52,152204,152136],{"class":79},[52,152206,152207,152210,152212],{"class":54,"line":107},[52,152208,152209],{"class":79},"student2 ",[52,152211,292],{"class":58},[52,152213,152136],{"class":79},[14,152215,152216,152219,152220,103668,152223,152226],{},[49,152217,152218],{},"Student"," 是类，",[49,152221,152222],{},"student1",[49,152224,152225],{},"student2"," 是对象。",[18,152228,152230],{"id":152229},"_113-属性","11.3 属性",[14,152232,152233],{},"属性是对象保存的数据。",[42,152235,152237],{"className":33028,"code":152236,"language":33030,"meta":47,"style":47},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[49,152238,152239,152247,152251,152255,152259,152267,152275,152283,152287,152294],{"__ignoreMap":47},[52,152240,152241,152243,152245],{"class":54,"line":55},[52,152242,17342],{"class":58},[52,152244,274],{"class":75},[52,152246,6718],{"class":79},[52,152248,152249],{"class":54,"line":66},[52,152250,152187],{"class":58},[52,152252,152253],{"class":54,"line":83},[52,152254,123],{"emptyLinePlaceholder":122},[52,152256,152257],{"class":54,"line":91},[52,152258,123],{"emptyLinePlaceholder":122},[52,152260,152261,152263,152265],{"class":54,"line":98},[52,152262,152131],{"class":79},[52,152264,292],{"class":58},[52,152266,152136],{"class":79},[52,152268,152269,152271,152273],{"class":54,"line":107},[52,152270,152141],{"class":79},[52,152272,292],{"class":58},[52,152274,152003],{"class":62},[52,152276,152277,152279,152281],{"class":54,"line":113},[52,152278,152150],{"class":79},[52,152280,292],{"class":58},[52,152282,149201],{"class":308},[52,152284,152285],{"class":54,"line":119},[52,152286,123],{"emptyLinePlaceholder":122},[52,152288,152289,152291],{"class":54,"line":126},[52,152290,33065],{"class":308},[52,152292,152293],{"class":79},"(student.name)\n",[52,152295,152296,152298],{"class":54,"line":132},[52,152297,33065],{"class":308},[52,152299,152300],{"class":79},"(student.age)\n",[14,152302,152303],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[18,152305,152307],{"id":152306},"_114-方法","11.4 方法",[14,152309,152310],{},"类中的函数叫方法。",[42,152312,152313],{"className":33028,"code":152071,"language":33030,"meta":47,"style":47},[49,152314,152315,152323,152331,152359,152363,152367,152375,152383,152391],{"__ignoreMap":47},[52,152316,152317,152319,152321],{"class":54,"line":55},[52,152318,17342],{"class":58},[52,152320,274],{"class":75},[52,152322,6718],{"class":79},[52,152324,152325,152327,152329],{"class":54,"line":66},[52,152326,33451],{"class":58},[52,152328,152022],{"class":75},[52,152330,33457],{"class":79},[52,152332,152333,152335,152337,152339,152341,152343,152345,152347,152349,152351,152353,152355,152357],{"class":54,"line":83},[52,152334,35101],{"class":308},[52,152336,1216],{"class":79},[52,152338,3273],{"class":58},[52,152340,152036],{"class":62},[52,152342,152102],{"class":308},[52,152344,82951],{"class":79},[52,152346,4132],{"class":308},[52,152348,152045],{"class":62},[52,152350,152102],{"class":308},[52,152352,82963],{"class":79},[52,152354,4132],{"class":308},[52,152356,152054],{"class":62},[52,152358,708],{"class":79},[52,152360,152361],{"class":54,"line":91},[52,152362,123],{"emptyLinePlaceholder":122},[52,152364,152365],{"class":54,"line":98},[52,152366,123],{"emptyLinePlaceholder":122},[52,152368,152369,152371,152373],{"class":54,"line":107},[52,152370,152131],{"class":79},[52,152372,292],{"class":58},[52,152374,152136],{"class":79},[52,152376,152377,152379,152381],{"class":54,"line":113},[52,152378,152141],{"class":79},[52,152380,292],{"class":58},[52,152382,152003],{"class":62},[52,152384,152385,152387,152389],{"class":54,"line":119},[52,152386,152150],{"class":79},[52,152388,292],{"class":58},[52,152390,149201],{"class":308},[52,152392,152393],{"class":54,"line":126},[52,152394,152159],{"class":79},[14,152396,152397,152399,152400,152402],{},[49,152398,33473],{}," 表示当前对象。调用方法时不需要手动传入 ",[49,152401,33473],{},"，Python 会自动传。",[18,152404,152406],{"id":152405},"_115-构造方法__init__","11.5 构造方法__init__",[14,152408,152409,152411],{},[49,152410,33479],{}," 在对象创建时自动执行，用于初始化属性。",[42,152413,152415],{"className":33028,"code":152414,"language":33030,"meta":47,"style":47},"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",[49,152416,152417,152425,152434,152446,152458,152469,152473,152481,152519,152523,152527,152549],{"__ignoreMap":47},[52,152418,152419,152421,152423],{"class":54,"line":55},[52,152420,17342],{"class":58},[52,152422,274],{"class":75},[52,152424,6718],{"class":79},[52,152426,152427,152429,152431],{"class":54,"line":66},[52,152428,33451],{"class":58},[52,152430,33454],{"class":308},[52,152432,152433],{"class":79},"(self, name, age, score):\n",[52,152435,152436,152438,152441,152443],{"class":54,"line":83},[52,152437,33495],{"class":308},[52,152439,152440],{"class":79},".name ",[52,152442,292],{"class":58},[52,152444,152445],{"class":79}," name\n",[52,152447,152448,152450,152453,152455],{"class":54,"line":91},[52,152449,33495],{"class":308},[52,152451,152452],{"class":79},".age ",[52,152454,292],{"class":58},[52,152456,152457],{"class":79}," age\n",[52,152459,152460,152462,152465,152467],{"class":54,"line":98},[52,152461,33495],{"class":308},[52,152463,152464],{"class":79},".score ",[52,152466,292],{"class":58},[52,152468,4623],{"class":79},[52,152470,152471],{"class":54,"line":107},[52,152472,123],{"emptyLinePlaceholder":122},[52,152474,152475,152477,152479],{"class":54,"line":113},[52,152476,33451],{"class":58},[52,152478,152022],{"class":75},[52,152480,33457],{"class":79},[52,152482,152483,152485,152487,152489,152491,152493,152495,152497,152499,152501,152503,152505,152508,152510,152513,152515,152517],{"class":54,"line":119},[52,152484,35101],{"class":308},[52,152486,1216],{"class":79},[52,152488,3273],{"class":58},[52,152490,152036],{"class":62},[52,152492,152102],{"class":308},[52,152494,82951],{"class":79},[52,152496,4132],{"class":308},[52,152498,152045],{"class":62},[52,152500,152102],{"class":308},[52,152502,82963],{"class":79},[52,152504,4132],{"class":308},[52,152506,152507],{"class":62},"岁，成绩",[52,152509,152102],{"class":308},[52,152511,152512],{"class":79},".score",[52,152514,4132],{"class":308},[52,152516,2844],{"class":62},[52,152518,708],{"class":79},[52,152520,152521],{"class":54,"line":126},[52,152522,123],{"emptyLinePlaceholder":122},[52,152524,152525],{"class":54,"line":132},[52,152526,123],{"emptyLinePlaceholder":122},[52,152528,152529,152531,152533,152536,152539,152541,152543,152545,152547],{"class":54,"line":138},[52,152530,152131],{"class":79},[52,152532,292],{"class":58},[52,152534,152535],{"class":79}," Student(",[52,152537,152538],{"class":62},"\"小明\"",[52,152540,15083],{"class":79},[52,152542,309],{"class":308},[52,152544,15083],{"class":79},[52,152546,4174],{"class":308},[52,152548,708],{"class":79},[52,152550,152551],{"class":54,"line":144},[52,152552,152159],{"class":79},[14,152554,152555],{},"构造方法的好处：",[1696,152557,152558,152561,152564],{},[32,152559,152560],{},"创建对象时必须提供必要数据。",[32,152562,152563],{},"属性初始化集中，不容易漏。",[32,152565,152566],{},"对象状态更完整。",[18,152568,152570,152571],{"id":152569},"_116-str","11.6 ",[2389,152572,4350],{},[14,152574,152575,152576,31035],{},"直接打印对象时，默认输出不直观。可以定义 ",[49,152577,152578],{},"__str__",[42,152580,152582],{"className":33028,"code":152581,"language":33030,"meta":47,"style":47},"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",[49,152583,152584,152592,152601,152611,152621,152625,152634,152662,152666,152670,152686],{"__ignoreMap":47},[52,152585,152586,152588,152590],{"class":54,"line":55},[52,152587,17342],{"class":58},[52,152589,274],{"class":75},[52,152591,6718],{"class":79},[52,152593,152594,152596,152598],{"class":54,"line":66},[52,152595,33451],{"class":58},[52,152597,33454],{"class":308},[52,152599,152600],{"class":79},"(self, name, age):\n",[52,152602,152603,152605,152607,152609],{"class":54,"line":83},[52,152604,33495],{"class":308},[52,152606,152440],{"class":79},[52,152608,292],{"class":58},[52,152610,152445],{"class":79},[52,152612,152613,152615,152617,152619],{"class":54,"line":91},[52,152614,33495],{"class":308},[52,152616,152452],{"class":79},[52,152618,292],{"class":58},[52,152620,152457],{"class":79},[52,152622,152623],{"class":54,"line":98},[52,152624,123],{"emptyLinePlaceholder":122},[52,152626,152627,152629,152632],{"class":54,"line":107},[52,152628,33451],{"class":58},[52,152630,152631],{"class":308}," __str__",[52,152633,33457],{"class":79},[52,152635,152636,152638,152641,152644,152646,152648,152650,152653,152655,152657,152659],{"class":54,"line":113},[52,152637,17400],{"class":58},[52,152639,152640],{"class":58}," f",[52,152642,152643],{"class":62},"\"Student(name=",[52,152645,152102],{"class":308},[52,152647,82951],{"class":79},[52,152649,4132],{"class":308},[52,152651,152652],{"class":62},", age=",[52,152654,152102],{"class":308},[52,152656,82963],{"class":79},[52,152658,4132],{"class":308},[52,152660,152661],{"class":62},")\"\n",[52,152663,152664],{"class":54,"line":119},[52,152665,123],{"emptyLinePlaceholder":122},[52,152667,152668],{"class":54,"line":126},[52,152669,123],{"emptyLinePlaceholder":122},[52,152671,152672,152674,152676,152678,152680,152682,152684],{"class":54,"line":132},[52,152673,152131],{"class":79},[52,152675,292],{"class":58},[52,152677,152535],{"class":79},[52,152679,152538],{"class":62},[52,152681,15083],{"class":79},[52,152683,309],{"class":308},[52,152685,708],{"class":79},[52,152687,152688,152690],{"class":54,"line":138},[52,152689,33065],{"class":308},[52,152691,152692],{"class":79},"(student)\n",[18,152694,152696],{"id":152695},"_117-封装","11.7 封装",[14,152698,152699],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,152701,152702],{},"Python 中以双下划线开头的属性通常视为私有属性。",[42,152704,152706],{"className":33028,"code":152705,"language":33030,"meta":47,"style":47},"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",[49,152707,152708,152717,152726,152738,152750,152754,152763,152772,152776,152786,152799,152810,152815,152826,152830,152839,152851,152862,152866,152879,152890,152894,152905,152909,152913,152931,152940,152949],{"__ignoreMap":47},[52,152709,152710,152712,152715],{"class":54,"line":55},[52,152711,17342],{"class":58},[52,152713,152714],{"class":75}," Account",[52,152716,6718],{"class":79},[52,152718,152719,152721,152723],{"class":54,"line":66},[52,152720,33451],{"class":58},[52,152722,33454],{"class":308},[52,152724,152725],{"class":79},"(self, owner, balance):\n",[52,152727,152728,152730,152733,152735],{"class":54,"line":83},[52,152729,33495],{"class":308},[52,152731,152732],{"class":79},".owner ",[52,152734,292],{"class":58},[52,152736,152737],{"class":79}," owner\n",[52,152739,152740,152742,152745,152747],{"class":54,"line":91},[52,152741,33495],{"class":308},[52,152743,152744],{"class":79},".__balance ",[52,152746,292],{"class":58},[52,152748,152749],{"class":79}," balance\n",[52,152751,152752],{"class":54,"line":98},[52,152753,123],{"emptyLinePlaceholder":122},[52,152755,152756,152758,152761],{"class":54,"line":107},[52,152757,33451],{"class":58},[52,152759,152760],{"class":75}," get_balance",[52,152762,33457],{"class":79},[52,152764,152765,152767,152769],{"class":54,"line":113},[52,152766,17400],{"class":58},[52,152768,41523],{"class":308},[52,152770,152771],{"class":79},".__balance\n",[52,152773,152774],{"class":54,"line":119},[52,152775,123],{"emptyLinePlaceholder":122},[52,152777,152778,152780,152783],{"class":54,"line":126},[52,152779,33451],{"class":58},[52,152781,152782],{"class":75}," deposit",[52,152784,152785],{"class":79},"(self, money):\n",[52,152787,152788,152790,152793,152795,152797],{"class":54,"line":132},[52,152789,5497],{"class":58},[52,152791,152792],{"class":79}," money ",[52,152794,4632],{"class":58},[52,152796,1444],{"class":308},[52,152798,6718],{"class":79},[52,152800,152801,152803,152805,152808],{"class":54,"line":138},[52,152802,37300],{"class":308},[52,152804,1216],{"class":79},[52,152806,152807],{"class":62},"\"存款金额必须大于0\"",[52,152809,708],{"class":79},[52,152811,152812],{"class":54,"line":144},[52,152813,152814],{"class":58},"            return\n",[52,152816,152817,152819,152821,152823],{"class":54,"line":153},[52,152818,33495],{"class":308},[52,152820,152744],{"class":79},[52,152822,1910],{"class":58},[52,152824,152825],{"class":79}," money\n",[52,152827,152828],{"class":54,"line":159},[52,152829,123],{"emptyLinePlaceholder":122},[52,152831,152832,152834,152837],{"class":54,"line":167},[52,152833,33451],{"class":58},[52,152835,152836],{"class":75}," withdraw",[52,152838,152785],{"class":79},[52,152840,152841,152843,152845,152847,152849],{"class":54,"line":173},[52,152842,5497],{"class":58},[52,152844,152792],{"class":79},[52,152846,4632],{"class":58},[52,152848,1444],{"class":308},[52,152850,6718],{"class":79},[52,152852,152853,152855,152857,152860],{"class":54,"line":181},[52,152854,37300],{"class":308},[52,152856,1216],{"class":79},[52,152858,152859],{"class":62},"\"取款金额必须大于0\"",[52,152861,708],{"class":79},[52,152863,152864],{"class":54,"line":186},[52,152865,152814],{"class":58},[52,152867,152868,152870,152872,152874,152876],{"class":54,"line":191},[52,152869,5497],{"class":58},[52,152871,152792],{"class":79},[52,152873,2674],{"class":58},[52,152875,41523],{"class":308},[52,152877,152878],{"class":79},".__balance:\n",[52,152880,152881,152883,152885,152888],{"class":54,"line":196},[52,152882,37300],{"class":308},[52,152884,1216],{"class":79},[52,152886,152887],{"class":62},"\"余额不足\"",[52,152889,708],{"class":79},[52,152891,152892],{"class":54,"line":201},[52,152893,152814],{"class":58},[52,152895,152896,152898,152900,152903],{"class":54,"line":206},[52,152897,33495],{"class":308},[52,152899,152744],{"class":79},[52,152901,152902],{"class":58},"-=",[52,152904,152825],{"class":79},[52,152906,152907],{"class":54,"line":211},[52,152908,123],{"emptyLinePlaceholder":122},[52,152910,152911],{"class":54,"line":218},[52,152912,123],{"emptyLinePlaceholder":122},[52,152914,152915,152918,152920,152923,152925,152927,152929],{"class":54,"line":223},[52,152916,152917],{"class":79},"account ",[52,152919,292],{"class":58},[52,152921,152922],{"class":79}," Account(",[52,152924,152538],{"class":62},[52,152926,15083],{"class":79},[52,152928,9373],{"class":308},[52,152930,708],{"class":79},[52,152932,152933,152936,152938],{"class":54,"line":230},[52,152934,152935],{"class":79},"account.deposit(",[52,152937,856],{"class":308},[52,152939,708],{"class":79},[52,152941,152942,152945,152947],{"class":54,"line":239},[52,152943,152944],{"class":79},"account.withdraw(",[52,152946,591],{"class":308},[52,152948,708],{"class":79},[52,152950,152951,152953],{"class":54,"line":251},[52,152952,33065],{"class":308},[52,152954,152955],{"class":79},"(account.get_balance())\n",[14,152957,152958],{},"封装的意义是避免外部随意修改内部状态。",[18,152960,152962],{"id":152961},"_118-继承","11.8 继承",[14,152964,152965],{},"继承可以让子类复用父类的属性和方法。",[42,152967,152969],{"className":33028,"code":152968,"language":33030,"meta":47,"style":47},"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",[49,152970,152971,152980,152989,153000,153004,153008,153022,153031,153042,153046,153050,153060,153065],{"__ignoreMap":47},[52,152972,152973,152975,152978],{"class":54,"line":55},[52,152974,17342],{"class":58},[52,152976,152977],{"class":75}," Animal",[52,152979,6718],{"class":79},[52,152981,152982,152984,152987],{"class":54,"line":66},[52,152983,33451],{"class":58},[52,152985,152986],{"class":75}," eat",[52,152988,33457],{"class":79},[52,152990,152991,152993,152995,152998],{"class":54,"line":83},[52,152992,35101],{"class":308},[52,152994,1216],{"class":79},[52,152996,152997],{"class":62},"\"吃东西\"",[52,152999,708],{"class":79},[52,153001,153002],{"class":54,"line":91},[52,153003,123],{"emptyLinePlaceholder":122},[52,153005,153006],{"class":54,"line":98},[52,153007,123],{"emptyLinePlaceholder":122},[52,153009,153010,153012,153015,153017,153020],{"class":54,"line":107},[52,153011,17342],{"class":58},[52,153013,153014],{"class":75}," Dog",[52,153016,1216],{"class":79},[52,153018,153019],{"class":75},"Animal",[52,153021,33436],{"class":79},[52,153023,153024,153026,153029],{"class":54,"line":113},[52,153025,33451],{"class":58},[52,153027,153028],{"class":75}," bark",[52,153030,33457],{"class":79},[52,153032,153033,153035,153037,153040],{"class":54,"line":119},[52,153034,35101],{"class":308},[52,153036,1216],{"class":79},[52,153038,153039],{"class":62},"\"汪汪\"",[52,153041,708],{"class":79},[52,153043,153044],{"class":54,"line":126},[52,153045,123],{"emptyLinePlaceholder":122},[52,153047,153048],{"class":54,"line":132},[52,153049,123],{"emptyLinePlaceholder":122},[52,153051,153052,153055,153057],{"class":54,"line":138},[52,153053,153054],{"class":79},"dog ",[52,153056,292],{"class":58},[52,153058,153059],{"class":79}," Dog()\n",[52,153061,153062],{"class":54,"line":144},[52,153063,153064],{"class":79},"dog.eat()\n",[52,153066,153067],{"class":54,"line":153},[52,153068,153069],{"class":79},"dog.bark()\n",[14,153071,153072],{},"子类可以扩展新方法，也可以重写父类方法。",[18,153074,153076],{"id":153075},"_119-方法重写","11.9 方法重写",[42,153078,153080],{"className":33028,"code":153079,"language":33030,"meta":47,"style":47},"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",[49,153081,153082,153090,153099,153110,153114,153118,153130,153138,153148,153152,153156,153169,153177,153188,153192,153196,153204,153214,153218,153223],{"__ignoreMap":47},[52,153083,153084,153086,153088],{"class":54,"line":55},[52,153085,17342],{"class":58},[52,153087,152977],{"class":75},[52,153089,6718],{"class":79},[52,153091,153092,153094,153097],{"class":54,"line":66},[52,153093,33451],{"class":58},[52,153095,153096],{"class":75}," speak",[52,153098,33457],{"class":79},[52,153100,153101,153103,153105,153108],{"class":54,"line":83},[52,153102,35101],{"class":308},[52,153104,1216],{"class":79},[52,153106,153107],{"class":62},"\"动物叫\"",[52,153109,708],{"class":79},[52,153111,153112],{"class":54,"line":91},[52,153113,123],{"emptyLinePlaceholder":122},[52,153115,153116],{"class":54,"line":98},[52,153117,123],{"emptyLinePlaceholder":122},[52,153119,153120,153122,153124,153126,153128],{"class":54,"line":107},[52,153121,17342],{"class":58},[52,153123,153014],{"class":75},[52,153125,1216],{"class":79},[52,153127,153019],{"class":75},[52,153129,33436],{"class":79},[52,153131,153132,153134,153136],{"class":54,"line":113},[52,153133,33451],{"class":58},[52,153135,153096],{"class":75},[52,153137,33457],{"class":79},[52,153139,153140,153142,153144,153146],{"class":54,"line":119},[52,153141,35101],{"class":308},[52,153143,1216],{"class":79},[52,153145,153039],{"class":62},[52,153147,708],{"class":79},[52,153149,153150],{"class":54,"line":126},[52,153151,123],{"emptyLinePlaceholder":122},[52,153153,153154],{"class":54,"line":132},[52,153155,123],{"emptyLinePlaceholder":122},[52,153157,153158,153160,153163,153165,153167],{"class":54,"line":138},[52,153159,17342],{"class":58},[52,153161,153162],{"class":75}," Cat",[52,153164,1216],{"class":79},[52,153166,153019],{"class":75},[52,153168,33436],{"class":79},[52,153170,153171,153173,153175],{"class":54,"line":144},[52,153172,33451],{"class":58},[52,153174,153096],{"class":75},[52,153176,33457],{"class":79},[52,153178,153179,153181,153183,153186],{"class":54,"line":153},[52,153180,35101],{"class":308},[52,153182,1216],{"class":79},[52,153184,153185],{"class":62},"\"喵喵\"",[52,153187,708],{"class":79},[52,153189,153190],{"class":54,"line":159},[52,153191,123],{"emptyLinePlaceholder":122},[52,153193,153194],{"class":54,"line":167},[52,153195,123],{"emptyLinePlaceholder":122},[52,153197,153198,153200,153202],{"class":54,"line":173},[52,153199,153054],{"class":79},[52,153201,292],{"class":58},[52,153203,153059],{"class":79},[52,153205,153206,153209,153211],{"class":54,"line":181},[52,153207,153208],{"class":79},"cat ",[52,153210,292],{"class":58},[52,153212,153213],{"class":79}," Cat()\n",[52,153215,153216],{"class":54,"line":186},[52,153217,123],{"emptyLinePlaceholder":122},[52,153219,153220],{"class":54,"line":191},[52,153221,153222],{"class":79},"dog.speak()\n",[52,153224,153225],{"class":54,"line":196},[52,153226,153227],{"class":79},"cat.speak()\n",[18,153229,153231],{"id":153230},"_1110-super","11.10 super",[14,153233,153234,153235,153238],{},"子类可以通过 ",[49,153236,153237],{},"super()"," 调用父类方法。",[42,153240,153242],{"className":33028,"code":153241,"language":33030,"meta":47,"style":47},"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",[49,153243,153244,153252,153261,153271,153275,153279,153291,153300,153311,153321,153325,153329,153345],{"__ignoreMap":47},[52,153245,153246,153248,153250],{"class":54,"line":55},[52,153247,17342],{"class":58},[52,153249,18217],{"class":75},[52,153251,6718],{"class":79},[52,153253,153254,153256,153258],{"class":54,"line":66},[52,153255,33451],{"class":58},[52,153257,33454],{"class":308},[52,153259,153260],{"class":79},"(self, name):\n",[52,153262,153263,153265,153267,153269],{"class":54,"line":83},[52,153264,33495],{"class":308},[52,153266,152440],{"class":79},[52,153268,292],{"class":58},[52,153270,152445],{"class":79},[52,153272,153273],{"class":54,"line":91},[52,153274,123],{"emptyLinePlaceholder":122},[52,153276,153277],{"class":54,"line":98},[52,153278,123],{"emptyLinePlaceholder":122},[52,153280,153281,153283,153285,153287,153289],{"class":54,"line":107},[52,153282,17342],{"class":58},[52,153284,274],{"class":75},[52,153286,1216],{"class":79},[52,153288,21694],{"class":75},[52,153290,33436],{"class":79},[52,153292,153293,153295,153297],{"class":54,"line":113},[52,153294,33451],{"class":58},[52,153296,33454],{"class":308},[52,153298,153299],{"class":79},"(self, name, score):\n",[52,153301,153302,153304,153306,153308],{"class":54,"line":119},[52,153303,33467],{"class":308},[52,153305,19909],{"class":79},[52,153307,33479],{"class":308},[52,153309,153310],{"class":79},"(name)\n",[52,153312,153313,153315,153317,153319],{"class":54,"line":126},[52,153314,33495],{"class":308},[52,153316,152464],{"class":79},[52,153318,292],{"class":58},[52,153320,4623],{"class":79},[52,153322,153323],{"class":54,"line":132},[52,153324,123],{"emptyLinePlaceholder":122},[52,153326,153327],{"class":54,"line":138},[52,153328,123],{"emptyLinePlaceholder":122},[52,153330,153331,153333,153335,153337,153339,153341,153343],{"class":54,"line":144},[52,153332,152131],{"class":79},[52,153334,292],{"class":58},[52,153336,152535],{"class":79},[52,153338,152538],{"class":62},[52,153340,15083],{"class":79},[52,153342,4174],{"class":308},[52,153344,708],{"class":79},[52,153346,153347,153349],{"class":54,"line":153},[52,153348,33065],{"class":308},[52,153350,153351],{"class":79},"(student.name, student.score)\n",[18,153353,153355],{"id":153354},"_1111-多态","11.11 多态",[14,153357,153358],{},"多态指不同对象响应同一个方法，表现出不同结果。",[42,153360,153362],{"className":33028,"code":153361,"language":33030,"meta":47,"style":47},"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",[49,153363,153364,153372,153380,153390,153394,153398,153406,153414,153424,153428,153432,153442,153447,153451,153455,153460],{"__ignoreMap":47},[52,153365,153366,153368,153370],{"class":54,"line":55},[52,153367,17342],{"class":58},[52,153369,153014],{"class":75},[52,153371,6718],{"class":79},[52,153373,153374,153376,153378],{"class":54,"line":66},[52,153375,33451],{"class":58},[52,153377,153096],{"class":75},[52,153379,33457],{"class":79},[52,153381,153382,153384,153386,153388],{"class":54,"line":83},[52,153383,35101],{"class":308},[52,153385,1216],{"class":79},[52,153387,153039],{"class":62},[52,153389,708],{"class":79},[52,153391,153392],{"class":54,"line":91},[52,153393,123],{"emptyLinePlaceholder":122},[52,153395,153396],{"class":54,"line":98},[52,153397,123],{"emptyLinePlaceholder":122},[52,153399,153400,153402,153404],{"class":54,"line":107},[52,153401,17342],{"class":58},[52,153403,153162],{"class":75},[52,153405,6718],{"class":79},[52,153407,153408,153410,153412],{"class":54,"line":113},[52,153409,33451],{"class":58},[52,153411,153096],{"class":75},[52,153413,33457],{"class":79},[52,153415,153416,153418,153420,153422],{"class":54,"line":119},[52,153417,35101],{"class":308},[52,153419,1216],{"class":79},[52,153421,153185],{"class":62},[52,153423,708],{"class":79},[52,153425,153426],{"class":54,"line":126},[52,153427,123],{"emptyLinePlaceholder":122},[52,153429,153430],{"class":54,"line":132},[52,153431,123],{"emptyLinePlaceholder":122},[52,153433,153434,153436,153439],{"class":54,"line":138},[52,153435,34597],{"class":58},[52,153437,153438],{"class":75}," make_sound",[52,153440,153441],{"class":79},"(animal):\n",[52,153443,153444],{"class":54,"line":144},[52,153445,153446],{"class":79},"    animal.speak()\n",[52,153448,153449],{"class":54,"line":153},[52,153450,123],{"emptyLinePlaceholder":122},[52,153452,153453],{"class":54,"line":159},[52,153454,123],{"emptyLinePlaceholder":122},[52,153456,153457],{"class":54,"line":167},[52,153458,153459],{"class":79},"make_sound(Dog())\n",[52,153461,153462],{"class":54,"line":173},[52,153463,153464],{"class":79},"make_sound(Cat())\n",[14,153466,153467],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[18,153469,153471],{"id":153470},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,153473,153474],{},"实例属性属于对象：",[42,153476,153478],{"className":33028,"code":153477,"language":33030,"meta":47,"style":47},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[49,153479,153480,153488,153496],{"__ignoreMap":47},[52,153481,153482,153484,153486],{"class":54,"line":55},[52,153483,17342],{"class":58},[52,153485,274],{"class":75},[52,153487,6718],{"class":79},[52,153489,153490,153492,153494],{"class":54,"line":66},[52,153491,33451],{"class":58},[52,153493,33454],{"class":308},[52,153495,153260],{"class":79},[52,153497,153498,153500,153502,153504],{"class":54,"line":83},[52,153499,33495],{"class":308},[52,153501,152440],{"class":79},[52,153503,292],{"class":58},[52,153505,152445],{"class":79},[14,153507,153508],{},"类属性属于类，所有对象共享：",[42,153510,153512],{"className":33028,"code":153511,"language":33030,"meta":47,"style":47},"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",[49,153513,153514,153522,153532,153536,153544,153554,153558,153562,153575,153589,153593,153600,153607],{"__ignoreMap":47},[52,153515,153516,153518,153520],{"class":54,"line":55},[52,153517,17342],{"class":58},[52,153519,274],{"class":75},[52,153521,6718],{"class":79},[52,153523,153524,153527,153529],{"class":54,"line":66},[52,153525,153526],{"class":79},"    school ",[52,153528,292],{"class":58},[52,153530,153531],{"class":62}," \"黑马学校\"\n",[52,153533,153534],{"class":54,"line":83},[52,153535,123],{"emptyLinePlaceholder":122},[52,153537,153538,153540,153542],{"class":54,"line":91},[52,153539,33451],{"class":58},[52,153541,33454],{"class":308},[52,153543,153260],{"class":79},[52,153545,153546,153548,153550,153552],{"class":54,"line":98},[52,153547,33495],{"class":308},[52,153549,152440],{"class":79},[52,153551,292],{"class":58},[52,153553,152445],{"class":79},[52,153555,153556],{"class":54,"line":107},[52,153557,123],{"emptyLinePlaceholder":122},[52,153559,153560],{"class":54,"line":113},[52,153561,123],{"emptyLinePlaceholder":122},[52,153563,153564,153567,153569,153571,153573],{"class":54,"line":119},[52,153565,153566],{"class":79},"s1 ",[52,153568,292],{"class":58},[52,153570,152535],{"class":79},[52,153572,152538],{"class":62},[52,153574,708],{"class":79},[52,153576,153577,153580,153582,153584,153587],{"class":54,"line":126},[52,153578,153579],{"class":79},"s2 ",[52,153581,292],{"class":58},[52,153583,152535],{"class":79},[52,153585,153586],{"class":62},"\"小红\"",[52,153588,708],{"class":79},[52,153590,153591],{"class":54,"line":132},[52,153592,123],{"emptyLinePlaceholder":122},[52,153594,153595,153597],{"class":54,"line":138},[52,153596,33065],{"class":308},[52,153598,153599],{"class":79},"(s1.school)\n",[52,153601,153602,153604],{"class":54,"line":144},[52,153603,33065],{"class":308},[52,153605,153606],{"class":79},"(s2.school)\n",[52,153608,153609,153611],{"class":54,"line":153},[52,153610,33065],{"class":308},[52,153612,153613],{"class":79},"(Student.school)\n",[14,153615,153616],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[18,153618,153620],{"id":153619},"_1113-类方法和静态方法","11.13 类方法和静态方法",[3195,153622,153624],{"id":153623},"_11131-类方法","11.13.1 类方法",[14,153626,153627,153628,153631,153632,31035],{},"类方法使用 ",[49,153629,153630],{},"@classmethod","，第一个参数通常是 ",[49,153633,153634],{},"cls",[42,153636,153638],{"className":33028,"code":153637,"language":33030,"meta":47,"style":47},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[49,153639,153640,153648,153656,153660,153668,153678,153688,153692,153696],{"__ignoreMap":47},[52,153641,153642,153644,153646],{"class":54,"line":55},[52,153643,17342],{"class":58},[52,153645,274],{"class":75},[52,153647,6718],{"class":79},[52,153649,153650,153652,153654],{"class":54,"line":66},[52,153651,153526],{"class":79},[52,153653,292],{"class":58},[52,153655,153531],{"class":62},[52,153657,153658],{"class":54,"line":83},[52,153659,123],{"emptyLinePlaceholder":122},[52,153661,153662,153665],{"class":54,"line":91},[52,153663,153664],{"class":75},"    @",[52,153666,153667],{"class":308},"classmethod\n",[52,153669,153670,153672,153675],{"class":54,"line":98},[52,153671,33451],{"class":58},[52,153673,153674],{"class":75}," get_school",[52,153676,153677],{"class":79},"(cls):\n",[52,153679,153680,153682,153685],{"class":54,"line":107},[52,153681,17400],{"class":58},[52,153683,153684],{"class":308}," cls",[52,153686,153687],{"class":79},".school\n",[52,153689,153690],{"class":54,"line":113},[52,153691,123],{"emptyLinePlaceholder":122},[52,153693,153694],{"class":54,"line":119},[52,153695,123],{"emptyLinePlaceholder":122},[52,153697,153698,153700],{"class":54,"line":126},[52,153699,33065],{"class":308},[52,153701,153702],{"class":79},"(Student.get_school())\n",[3195,153704,153706],{"id":153705},"_11132-静态方法","11.13.2 静态方法",[14,153708,153709,153710,153713],{},"静态方法使用 ",[49,153711,153712],{},"@staticmethod","，不需要访问实例和类。",[42,153715,153717],{"className":33028,"code":153716,"language":33030,"meta":47,"style":47},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[49,153718,153719,153728,153735,153744,153755,153759,153763],{"__ignoreMap":47},[52,153720,153721,153723,153726],{"class":54,"line":55},[52,153722,17342],{"class":58},[52,153724,153725],{"class":75}," MathUtils",[52,153727,6718],{"class":79},[52,153729,153730,153732],{"class":54,"line":66},[52,153731,153664],{"class":75},[52,153733,153734],{"class":308},"staticmethod\n",[52,153736,153737,153739,153741],{"class":54,"line":83},[52,153738,33451],{"class":58},[52,153740,8176],{"class":75},[52,153742,153743],{"class":79},"(a, b):\n",[52,153745,153746,153748,153750,153752],{"class":54,"line":91},[52,153747,17400],{"class":58},[52,153749,13517],{"class":79},[52,153751,2004],{"class":58},[52,153753,153754],{"class":79}," b\n",[52,153756,153757],{"class":54,"line":98},[52,153758,123],{"emptyLinePlaceholder":122},[52,153760,153761],{"class":54,"line":107},[52,153762,123],{"emptyLinePlaceholder":122},[52,153764,153765,153767,153770,153772,153774,153776],{"class":54,"line":113},[52,153766,33065],{"class":308},[52,153768,153769],{"class":79},"(MathUtils.add(",[52,153771,629],{"class":308},[52,153773,15083],{"class":79},[52,153775,564],{"class":308},[52,153777,33147],{"class":79},[14,153779,153780],{},"静态方法本质上是放在类命名空间里的普通函数。",[18,153782,153784],{"id":153783},"_1114-dataclass","11.14 dataclass",[14,153786,153787,153790],{},[49,153788,153789],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[42,153792,153794],{"className":33028,"code":153793,"language":33030,"meta":47,"style":47},"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",[49,153795,153796,153808,153812,153816,153821,153829,153837,153845,153853,153857,153861,153881],{"__ignoreMap":47},[52,153797,153798,153800,153803,153805],{"class":54,"line":55},[52,153799,33387],{"class":58},[52,153801,153802],{"class":79}," dataclasses ",[52,153804,33042],{"class":58},[52,153806,153807],{"class":79}," dataclass\n",[52,153809,153810],{"class":54,"line":66},[52,153811,123],{"emptyLinePlaceholder":122},[52,153813,153814],{"class":54,"line":83},[52,153815,123],{"emptyLinePlaceholder":122},[52,153817,153818],{"class":54,"line":91},[52,153819,153820],{"class":75},"@dataclass\n",[52,153822,153823,153825,153827],{"class":54,"line":98},[52,153824,17342],{"class":58},[52,153826,274],{"class":75},[52,153828,6718],{"class":79},[52,153830,153831,153834],{"class":54,"line":107},[52,153832,153833],{"class":79},"    name: ",[52,153835,153836],{"class":308},"str\n",[52,153838,153839,153842],{"class":54,"line":113},[52,153840,153841],{"class":79},"    age: ",[52,153843,153844],{"class":308},"int\n",[52,153846,153847,153850],{"class":54,"line":119},[52,153848,153849],{"class":79},"    score: ",[52,153851,153852],{"class":308},"float\n",[52,153854,153855],{"class":54,"line":126},[52,153856,123],{"emptyLinePlaceholder":122},[52,153858,153859],{"class":54,"line":132},[52,153860,123],{"emptyLinePlaceholder":122},[52,153862,153863,153865,153867,153869,153871,153873,153875,153877,153879],{"class":54,"line":138},[52,153864,152131],{"class":79},[52,153866,292],{"class":58},[52,153868,152535],{"class":79},[52,153870,152538],{"class":62},[52,153872,15083],{"class":79},[52,153874,309],{"class":308},[52,153876,15083],{"class":79},[52,153878,4174],{"class":308},[52,153880,708],{"class":79},[52,153882,153883,153885],{"class":54,"line":144},[52,153884,33065],{"class":308},[52,153886,152692],{"class":79},[14,153888,153889,153890,3426,153892,153895],{},"它会自动生成 ",[49,153891,33479],{},[49,153893,153894],{},"__repr__"," 等方法。适合数据模型类。",[18,153897,153899],{"id":153898},"_1115-小案例学生类","11.15 小案例：学生类",[42,153901,153903],{"className":33028,"code":153902,"language":33030,"meta":47,"style":47},"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",[49,153904,153905,153913,153922,153934,153944,153954,153964,153968,153977,153990,153994,154003,154009,154021,154033,154045,154057,154061,154065,154071,154081,154090,154100,154108,154116,154125,154129,154133,154141,154177,154181,154185,154210,154217],{"__ignoreMap":47},[52,153906,153907,153909,153911],{"class":54,"line":55},[52,153908,17342],{"class":58},[52,153910,274],{"class":75},[52,153912,6718],{"class":79},[52,153914,153915,153917,153919],{"class":54,"line":66},[52,153916,33451],{"class":58},[52,153918,33454],{"class":308},[52,153920,153921],{"class":79},"(self, student_id, name, age, score):\n",[52,153923,153924,153926,153929,153931],{"class":54,"line":83},[52,153925,33495],{"class":308},[52,153927,153928],{"class":79},".student_id ",[52,153930,292],{"class":58},[52,153932,153933],{"class":79}," student_id\n",[52,153935,153936,153938,153940,153942],{"class":54,"line":91},[52,153937,33495],{"class":308},[52,153939,152440],{"class":79},[52,153941,292],{"class":58},[52,153943,152445],{"class":79},[52,153945,153946,153948,153950,153952],{"class":54,"line":98},[52,153947,33495],{"class":308},[52,153949,152452],{"class":79},[52,153951,292],{"class":58},[52,153953,152457],{"class":79},[52,153955,153956,153958,153960,153962],{"class":54,"line":107},[52,153957,33495],{"class":308},[52,153959,152464],{"class":79},[52,153961,292],{"class":58},[52,153963,4623],{"class":79},[52,153965,153966],{"class":54,"line":113},[52,153967,123],{"emptyLinePlaceholder":122},[52,153969,153970,153972,153975],{"class":54,"line":119},[52,153971,33451],{"class":58},[52,153973,153974],{"class":75}," is_passed",[52,153976,33457],{"class":79},[52,153978,153979,153981,153983,153985,153987],{"class":54,"line":126},[52,153980,17400],{"class":58},[52,153982,41523],{"class":308},[52,153984,152464],{"class":79},[52,153986,4742],{"class":58},[52,153988,153989],{"class":308}," 60\n",[52,153991,153992],{"class":54,"line":132},[52,153993,123],{"emptyLinePlaceholder":122},[52,153995,153996,153998,154001],{"class":54,"line":138},[52,153997,33451],{"class":58},[52,153999,154000],{"class":75}," to_dict",[52,154002,33457],{"class":79},[52,154004,154005,154007],{"class":54,"line":144},[52,154006,17400],{"class":58},[52,154008,18220],{"class":79},[52,154010,154011,154014,154016,154018],{"class":54,"line":153},[52,154012,154013],{"class":62},"            \"student_id\"",[52,154015,54087],{"class":79},[52,154017,33473],{"class":308},[52,154019,154020],{"class":79},".student_id,\n",[52,154022,154023,154026,154028,154030],{"class":54,"line":159},[52,154024,154025],{"class":62},"            \"name\"",[52,154027,54087],{"class":79},[52,154029,33473],{"class":308},[52,154031,154032],{"class":79},".name,\n",[52,154034,154035,154038,154040,154042],{"class":54,"line":167},[52,154036,154037],{"class":62},"            \"age\"",[52,154039,54087],{"class":79},[52,154041,33473],{"class":308},[52,154043,154044],{"class":79},".age,\n",[52,154046,154047,154050,154052,154054],{"class":54,"line":173},[52,154048,154049],{"class":62},"            \"score\"",[52,154051,54087],{"class":79},[52,154053,33473],{"class":308},[52,154055,154056],{"class":79},".score,\n",[52,154058,154059],{"class":54,"line":181},[52,154060,2039],{"class":79},[52,154062,154063],{"class":54,"line":186},[52,154064,123],{"emptyLinePlaceholder":122},[52,154066,154067,154069],{"class":54,"line":191},[52,154068,153664],{"class":75},[52,154070,153667],{"class":308},[52,154072,154073,154075,154078],{"class":54,"line":196},[52,154074,33451],{"class":58},[52,154076,154077],{"class":75}," from_dict",[52,154079,154080],{"class":79},"(cls, data):\n",[52,154082,154083,154085,154087],{"class":54,"line":201},[52,154084,17400],{"class":58},[52,154086,153684],{"class":308},[52,154088,154089],{"class":79},"(\n",[52,154091,154092,154095,154098],{"class":54,"line":206},[52,154093,154094],{"class":79},"            data[",[52,154096,154097],{"class":62},"\"student_id\"",[52,154099,90486],{"class":79},[52,154101,154102,154104,154106],{"class":54,"line":211},[52,154103,154094],{"class":79},[52,154105,65329],{"class":62},[52,154107,90486],{"class":79},[52,154109,154110,154112,154114],{"class":54,"line":218},[52,154111,154094],{"class":79},[52,154113,71774],{"class":62},[52,154115,90486],{"class":79},[52,154117,154118,154120,154123],{"class":54,"line":223},[52,154119,154094],{"class":79},[52,154121,154122],{"class":62},"\"score\"",[52,154124,90486],{"class":79},[52,154126,154127],{"class":54,"line":230},[52,154128,40776],{"class":79},[52,154130,154131],{"class":54,"line":239},[52,154132,123],{"emptyLinePlaceholder":122},[52,154134,154135,154137,154139],{"class":54,"line":251},[52,154136,33451],{"class":58},[52,154138,152631],{"class":308},[52,154140,33457],{"class":79},[52,154142,154143,154145,154147,154149,154151,154154,154156,154159,154161,154163,154165,154167,154169,154171,154173,154175],{"class":54,"line":256},[52,154144,17400],{"class":58},[52,154146,152640],{"class":58},[52,154148,2844],{"class":62},[52,154150,152102],{"class":308},[52,154152,154153],{"class":79},".student_id",[52,154155,4132],{"class":308},[52,154157,154158],{"class":308}," {self",[52,154160,82951],{"class":79},[52,154162,4132],{"class":308},[52,154164,154158],{"class":308},[52,154166,82963],{"class":79},[52,154168,4132],{"class":308},[52,154170,154158],{"class":308},[52,154172,152512],{"class":79},[52,154174,4132],{"class":308},[52,154176,27783],{"class":62},[52,154178,154179],{"class":54,"line":262},[52,154180,123],{"emptyLinePlaceholder":122},[52,154182,154183],{"class":54,"line":268},[52,154184,123],{"emptyLinePlaceholder":122},[52,154186,154187,154189,154191,154193,154196,154198,154200,154202,154204,154206,154208],{"class":54,"line":280},[52,154188,152131],{"class":79},[52,154190,292],{"class":58},[52,154192,152535],{"class":79},[52,154194,154195],{"class":62},"\"001\"",[52,154197,15083],{"class":79},[52,154199,152538],{"class":62},[52,154201,15083],{"class":79},[52,154203,309],{"class":308},[52,154205,15083],{"class":79},[52,154207,4174],{"class":308},[52,154209,708],{"class":79},[52,154211,154212,154214],{"class":54,"line":286},[52,154213,33065],{"class":308},[52,154215,154216],{"class":79},"(student.is_passed())\n",[52,154218,154219,154221],{"class":54,"line":300},[52,154220,33065],{"class":308},[52,154222,154223],{"class":79},"(student.to_dict())\n",[14,154225,154226,103668,154229,154232],{},[49,154227,154228],{},"to_dict()",[49,154230,154231],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[18,154234,154236],{"id":154235},"_1116-易错点","11.16 易错点",[1696,154238,154239,154245,154251,154256,154259,154262],{},[32,154240,154241,154242,31035],{},"类名推荐使用大驼峰，如 ",[49,154243,154244],{},"StudentManager",[32,154246,154247,154248,154250],{},"方法第一个参数必须写 ",[49,154249,33473],{},"，调用时不用传。",[32,154252,154253,154255],{},[49,154254,33479],{}," 不是普通方法，它在创建对象时自动执行。",[32,154257,154258],{},"私有属性不是绝对安全，只是约定和名称改写。",[32,154260,154261],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[32,154263,154264],{},"类中方法太多时，说明职责可能过重。",[18,154266,154268],{"id":154267},"_1117-本章练习","11.17 本章练习",[1696,154270,154271,154277,154283,154288,154301],{},[32,154272,154273,154274,154276],{},"定义 ",[49,154275,152218],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[32,154278,154273,154279,154282],{},[49,154280,154281],{},"Account"," 类，实现存款、取款、查询余额。",[32,154284,154273,154285,154287],{},[49,154286,19874],{}," 类，计算圆的周长和面积。",[32,154289,154273,154290,3426,154293,154296,154297,154300],{},[49,154291,154292],{},"Dog",[49,154294,154295],{},"Cat"," 类，并用同一个函数调用它们的 ",[49,154298,154299],{},"speak()"," 方法。",[32,154302,107016,154303,154305,154306,31035],{},[49,154304,153789],{}," 定义一个商品类 ",[49,154307,154308],{},"Product",[3141,154310,154311],{},"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":47,"searchDepth":66,"depth":66,"links":154313},[154314,154315,154316,154317,154318,154319,154321,154322,154323,154324,154325,154326,154327,154331,154332,154333,154334],{"id":151982,"depth":66,"text":151983},{"id":152165,"depth":66,"text":152166},{"id":152229,"depth":66,"text":152230},{"id":152306,"depth":66,"text":152307},{"id":152405,"depth":66,"text":152406},{"id":152569,"depth":66,"text":154320},"11.6 str",{"id":152695,"depth":66,"text":152696},{"id":152961,"depth":66,"text":152962},{"id":153075,"depth":66,"text":153076},{"id":153230,"depth":66,"text":153231},{"id":153354,"depth":66,"text":153355},{"id":153470,"depth":66,"text":153471},{"id":153619,"depth":66,"text":153620,"children":154328},[154329,154330],{"id":153623,"depth":83,"text":153624},{"id":153705,"depth":83,"text":153706},{"id":153783,"depth":66,"text":153784},{"id":153898,"depth":66,"text":153899},{"id":154235,"depth":66,"text":154236},{"id":154267,"depth":66,"text":154268},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151974,"description":26025},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":154341,"title":154342,"body":154343,"description":26025,"extension":3153,"meta":157656,"navigation":122,"path":157657,"seo":157658,"stem":157659,"__hash__":157660},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":154344,"toc":157632},[154345,154348,154352,154355,154358,154387,154390,154398,154402,154406,154409,154432,154435,154441,154445,155891,155894,155915,155919,155922,155934,155937,156121,156124,156250,156253,156257,156261,156397,156401,156487,156491,156573,156577,156614,156618,156807,156811,156814,157044,157048,157051,157232,157235,157239,157242,157248,157251,157277,157281,157284,157298,157301,157326,157329,157343,157346,157363,157366,157383,157386,157403,157407,157433,157437,157460,157464,157467,157469,157475,157477,157498,157501,157507,157513,157517,157520,157596,157599,157603,157629],[10,154346,154342],{"id":154347},"_12-综合案例与复习路线",[18,154349,154351],{"id":154350},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,154353,154354],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,154356,154357],{},"一个合格的入门综合项目最好覆盖：",[1696,154359,154360,154363,154366,154369,154372,154375,154378,154381,154384],{},[32,154361,154362],{},"输入输出。",[32,154364,154365],{},"判断和循环。",[32,154367,154368],{},"函数拆分。",[32,154370,154371],{},"列表、字典等容器。",[32,154373,154374],{},"文件持久化。",[32,154376,154377],{},"异常处理。",[32,154379,154380],{},"模块拆分。",[32,154382,154383],{},"可选：面向对象。",[32,154385,154386],{},"可选：数据可视化。",[14,154388,154389],{},"本章整理两个方向：",[1696,154391,154392,154395],{},[32,154393,154394],{},"学生管理系统。",[32,154396,154397],{},"销售数据统计和可视化。",[18,154399,154401],{"id":154400},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[3195,154403,154405],{"id":154404},"_1221-需求","12.2.1 需求",[14,154407,154408],{},"实现一个命令行学生管理系统：",[1696,154410,154411,154414,154417,154420,154423,154426,154429],{},[32,154412,154413],{},"添加学生。",[32,154415,154416],{},"删除学生。",[32,154418,154419],{},"修改学生。",[32,154421,154422],{},"查询学生。",[32,154424,154425],{},"显示所有学生。",[32,154427,154428],{},"保存到 JSON 文件。",[32,154430,154431],{},"程序启动时自动读取 JSON 文件。",[14,154433,154434],{},"学生字段：",[42,154436,154439],{"className":154437,"code":154438,"language":8154,"meta":47},[8152],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[49,154440,154438],{"__ignoreMap":47},[18,154442,154444],{"id":154443},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[42,154446,154448],{"className":33028,"code":154447,"language":33030,"meta":47,"style":47},"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",[49,154449,154450,154456,154466,154470,154484,154488,154492,154501,154513,154519,154523,154529,154560,154570,154577,154588,154594,154598,154602,154612,154643,154669,154673,154677,154686,154697,154708,154719,154730,154741,154752,154763,154767,154771,154781,154793,154809,154816,154823,154827,154831,154841,154849,154856,154869,154879,154890,154894,154898,154907,154915,154921,154933,154941,154952,154956,154960,154969,154985,154989,154996,155007,155012,155016,155032,155047,155062,155066,155071,155079,155087,155095,155103,155107,155112,155123,155127,155131,155140,155155,155165,155169,155181,155192,155196,155200,155205,155209,155220,155224,155228,155237,155252,155260,155264,155276,155286,155290,155294,155309,155322,155335,155339,155352,155364,155376,155380,155384,155395,155399,155403,155412,155427,155435,155439,155451,155461,155465,155469,155474,155478,155482,155492,155498,155520,155539,155558,155577,155582,155586,155590,155599,155607,155618,155622,155626,155652,155662,155667,155671,155675,155683,155693,155697,155705,155710,155726,155730,155744,155749,155763,155768,155781,155786,155799,155804,155817,155822,155835,155846,155850,155856,155867,155871,155875,155887],{"__ignoreMap":47},[52,154451,154452,154454],{"class":54,"line":55},[52,154453,33042],{"class":58},[52,154455,149741],{"class":79},[52,154457,154458,154460,154462,154464],{"class":54,"line":66},[52,154459,33387],{"class":58},[52,154461,110961],{"class":79},[52,154463,33042],{"class":58},[52,154465,110966],{"class":79},[52,154467,154468],{"class":54,"line":83},[52,154469,123],{"emptyLinePlaceholder":122},[52,154471,154472,154475,154477,154479,154482],{"class":54,"line":91},[52,154473,154474],{"class":308},"DATA_FILE",[52,154476,16212],{"class":58},[52,154478,111195],{"class":79},[52,154480,154481],{"class":62},"\"students.json\"",[52,154483,708],{"class":79},[52,154485,154486],{"class":54,"line":98},[52,154487,123],{"emptyLinePlaceholder":122},[52,154489,154490],{"class":54,"line":107},[52,154491,123],{"emptyLinePlaceholder":122},[52,154493,154494,154496,154499],{"class":54,"line":113},[52,154495,34597],{"class":58},[52,154497,154498],{"class":75}," load_students",[52,154500,34603],{"class":79},[52,154502,154503,154505,154507,154510],{"class":54,"line":119},[52,154504,6088],{"class":58},[52,154506,41580],{"class":58},[52,154508,154509],{"class":308}," DATA_FILE",[52,154511,154512],{"class":79},".exists():\n",[52,154514,154515,154517],{"class":54,"line":126},[52,154516,17400],{"class":58},[52,154518,54488],{"class":79},[52,154520,154521],{"class":54,"line":132},[52,154522,123],{"emptyLinePlaceholder":122},[52,154524,154525,154527],{"class":54,"line":138},[52,154526,128434],{"class":58},[52,154528,6718],{"class":79},[52,154530,154531,154534,154536,154538,154540,154542,154544,154546,154548,154550,154552,154554,154556,154558],{"class":54,"line":144},[52,154532,154533],{"class":58},"        with",[52,154535,149441],{"class":308},[52,154537,1216],{"class":79},[52,154539,154474],{"class":308},[52,154541,15083],{"class":79},[52,154543,149451],{"class":62},[52,154545,15083],{"class":79},[52,154547,149456],{"class":1223},[52,154549,292],{"class":58},[52,154551,149461],{"class":62},[52,154553,16362],{"class":79},[52,154555,34033],{"class":58},[52,154557,150803],{"class":1223},[52,154559,6718],{"class":79},[52,154561,154562,154564,154566,154568],{"class":54,"line":153},[52,154563,18380],{"class":58},[52,154565,150814],{"class":79},[52,154567,48004],{"class":1223},[52,154569,708],{"class":79},[52,154571,154572,154574],{"class":54,"line":159},[52,154573,128462],{"class":58},[52,154575,154576],{"class":79}," json.JSONDecodeError:\n",[52,154578,154579,154581,154583,154586],{"class":54,"line":167},[52,154580,35101],{"class":308},[52,154582,1216],{"class":79},[52,154584,154585],{"class":62},"\"数据文件格式错误，已使用空数据启动\"",[52,154587,708],{"class":79},[52,154589,154590,154592],{"class":54,"line":173},[52,154591,17400],{"class":58},[52,154593,54488],{"class":79},[52,154595,154596],{"class":54,"line":181},[52,154597,123],{"emptyLinePlaceholder":122},[52,154599,154600],{"class":54,"line":186},[52,154601,123],{"emptyLinePlaceholder":122},[52,154603,154604,154606,154609],{"class":54,"line":191},[52,154605,34597],{"class":58},[52,154607,154608],{"class":75}," save_students",[52,154610,154611],{"class":79},"(students):\n",[52,154613,154614,154616,154618,154620,154622,154624,154627,154629,154631,154633,154635,154637,154639,154641],{"class":54,"line":196},[52,154615,36828],{"class":58},[52,154617,149441],{"class":308},[52,154619,1216],{"class":79},[52,154621,154474],{"class":308},[52,154623,15083],{"class":79},[52,154625,154626],{"class":62},"\"w\"",[52,154628,15083],{"class":79},[52,154630,149456],{"class":1223},[52,154632,292],{"class":58},[52,154634,149461],{"class":62},[52,154636,16362],{"class":79},[52,154638,34033],{"class":58},[52,154640,150803],{"class":1223},[52,154642,6718],{"class":79},[52,154644,154645,154648,154650,154652,154654,154656,154658,154660,154663,154665,154667],{"class":54,"line":201},[52,154646,154647],{"class":79},"        json.dump(students, ",[52,154649,48004],{"class":1223},[52,154651,15083],{"class":79},[52,154653,149787],{"class":1223},[52,154655,292],{"class":58},[52,154657,36637],{"class":308},[52,154659,15083],{"class":79},[52,154661,154662],{"class":1223},"indent",[52,154664,292],{"class":58},[52,154666,564],{"class":308},[52,154668,708],{"class":79},[52,154670,154671],{"class":54,"line":206},[52,154672,123],{"emptyLinePlaceholder":122},[52,154674,154675],{"class":54,"line":211},[52,154676,123],{"emptyLinePlaceholder":122},[52,154678,154679,154681,154684],{"class":54,"line":218},[52,154680,34597],{"class":58},[52,154682,154683],{"class":75}," show_menu",[52,154685,34603],{"class":79},[52,154687,154688,154690,154692,154695],{"class":54,"line":223},[52,154689,33949],{"class":308},[52,154691,1216],{"class":79},[52,154693,154694],{"class":62},"\"====== 学生管理系统 ======\"",[52,154696,708],{"class":79},[52,154698,154699,154701,154703,154706],{"class":54,"line":230},[52,154700,33949],{"class":308},[52,154702,1216],{"class":79},[52,154704,154705],{"class":62},"\"1. 添加学生\"",[52,154707,708],{"class":79},[52,154709,154710,154712,154714,154717],{"class":54,"line":239},[52,154711,33949],{"class":308},[52,154713,1216],{"class":79},[52,154715,154716],{"class":62},"\"2. 删除学生\"",[52,154718,708],{"class":79},[52,154720,154721,154723,154725,154728],{"class":54,"line":251},[52,154722,33949],{"class":308},[52,154724,1216],{"class":79},[52,154726,154727],{"class":62},"\"3. 修改学生\"",[52,154729,708],{"class":79},[52,154731,154732,154734,154736,154739],{"class":54,"line":256},[52,154733,33949],{"class":308},[52,154735,1216],{"class":79},[52,154737,154738],{"class":62},"\"4. 查询学生\"",[52,154740,708],{"class":79},[52,154742,154743,154745,154747,154750],{"class":54,"line":262},[52,154744,33949],{"class":308},[52,154746,1216],{"class":79},[52,154748,154749],{"class":62},"\"5. 显示所有学生\"",[52,154751,708],{"class":79},[52,154753,154754,154756,154758,154761],{"class":54,"line":268},[52,154755,33949],{"class":308},[52,154757,1216],{"class":79},[52,154759,154760],{"class":62},"\"0. 退出系统\"",[52,154762,708],{"class":79},[52,154764,154765],{"class":54,"line":280},[52,154766,123],{"emptyLinePlaceholder":122},[52,154768,154769],{"class":54,"line":286},[52,154770,123],{"emptyLinePlaceholder":122},[52,154772,154773,154775,154778],{"class":54,"line":300},[52,154774,34597],{"class":58},[52,154776,154777],{"class":75}," find_student",[52,154779,154780],{"class":79},"(students, student_id):\n",[52,154782,154783,154785,154788,154790],{"class":54,"line":314},[52,154784,679],{"class":58},[52,154786,154787],{"class":79}," student ",[52,154789,28693],{"class":58},[52,154791,154792],{"class":79}," students:\n",[52,154794,154795,154797,154800,154802,154804,154806],{"class":54,"line":327},[52,154796,5497],{"class":58},[52,154798,154799],{"class":79}," student[",[52,154801,154097],{"class":62},[52,154803,7415],{"class":79},[52,154805,5938],{"class":58},[52,154807,154808],{"class":79}," student_id:\n",[52,154810,154811,154813],{"class":54,"line":333},[52,154812,18380],{"class":58},[52,154814,154815],{"class":79}," student\n",[52,154817,154818,154820],{"class":54,"line":360},[52,154819,1441],{"class":58},[52,154821,154822],{"class":308}," None\n",[52,154824,154825],{"class":54,"line":365},[52,154826,123],{"emptyLinePlaceholder":122},[52,154828,154829],{"class":54,"line":371},[52,154830,123],{"emptyLinePlaceholder":122},[52,154832,154833,154835,154838],{"class":54,"line":400},[52,154834,34597],{"class":58},[52,154836,154837],{"class":75}," input_int",[52,154839,154840],{"class":79},"(prompt):\n",[52,154842,154843,154845,154847],{"class":54,"line":405},[52,154844,5262],{"class":58},[52,154846,97942],{"class":308},[52,154848,6718],{"class":79},[52,154850,154851,154854],{"class":54,"line":411},[52,154852,154853],{"class":58},"        try",[52,154855,6718],{"class":79},[52,154857,154858,154860,154862,154864,154866],{"class":54,"line":424},[52,154859,18380],{"class":58},[52,154861,2280],{"class":308},[52,154863,1216],{"class":79},[52,154865,56471],{"class":308},[52,154867,154868],{"class":79},"(prompt))\n",[52,154870,154871,154874,154877],{"class":54,"line":436},[52,154872,154873],{"class":58},"        except",[52,154875,154876],{"class":308}," ValueError",[52,154878,6718],{"class":79},[52,154880,154881,154883,154885,154888],{"class":54,"line":449},[52,154882,37300],{"class":308},[52,154884,1216],{"class":79},[52,154886,154887],{"class":62},"\"请输入整数\"",[52,154889,708],{"class":79},[52,154891,154892],{"class":54,"line":2160},[52,154893,123],{"emptyLinePlaceholder":122},[52,154895,154896],{"class":54,"line":2186},[52,154897,123],{"emptyLinePlaceholder":122},[52,154899,154900,154902,154905],{"class":54,"line":2209},[52,154901,34597],{"class":58},[52,154903,154904],{"class":75}," input_float",[52,154906,154840],{"class":79},[52,154908,154909,154911,154913],{"class":54,"line":2233},[52,154910,5262],{"class":58},[52,154912,97942],{"class":308},[52,154914,6718],{"class":79},[52,154916,154917,154919],{"class":54,"line":2238},[52,154918,154853],{"class":58},[52,154920,6718],{"class":79},[52,154922,154923,154925,154927,154929,154931],{"class":54,"line":2243},[52,154924,18380],{"class":58},[52,154926,112447],{"class":308},[52,154928,1216],{"class":79},[52,154930,56471],{"class":308},[52,154932,154868],{"class":79},[52,154934,154935,154937,154939],{"class":54,"line":2248},[52,154936,154873],{"class":58},[52,154938,154876],{"class":308},[52,154940,6718],{"class":79},[52,154942,154943,154945,154947,154950],{"class":54,"line":2257},[52,154944,37300],{"class":308},[52,154946,1216],{"class":79},[52,154948,154949],{"class":62},"\"请输入数字\"",[52,154951,708],{"class":79},[52,154953,154954],{"class":54,"line":2262},[52,154955,123],{"emptyLinePlaceholder":122},[52,154957,154958],{"class":54,"line":2268},[52,154959,123],{"emptyLinePlaceholder":122},[52,154961,154962,154964,154967],{"class":54,"line":2297},[52,154963,34597],{"class":58},[52,154965,154966],{"class":75}," add_student",[52,154968,154611],{"class":79},[52,154970,154971,154974,154976,154978,154980,154983],{"class":54,"line":2303},[52,154972,154973],{"class":79},"    student_id ",[52,154975,292],{"class":58},[52,154977,63255],{"class":308},[52,154979,1216],{"class":79},[52,154981,154982],{"class":62},"\"请输入学号:\"",[52,154984,708],{"class":79},[52,154986,154987],{"class":54,"line":2318},[52,154988,123],{"emptyLinePlaceholder":122},[52,154990,154991,154993],{"class":54,"line":2324},[52,154992,6088],{"class":58},[52,154994,154995],{"class":79}," find_student(students, student_id):\n",[52,154997,154998,155000,155002,155005],{"class":54,"line":2353},[52,154999,35101],{"class":308},[52,155001,1216],{"class":79},[52,155003,155004],{"class":62},"\"学号已存在\"",[52,155006,708],{"class":79},[52,155008,155009],{"class":54,"line":2362},[52,155010,155011],{"class":58},"        return\n",[52,155013,155014],{"class":54,"line":2368},[52,155015,123],{"emptyLinePlaceholder":122},[52,155017,155018,155021,155023,155025,155027,155030],{"class":54,"line":2376},[52,155019,155020],{"class":79},"    name ",[52,155022,292],{"class":58},[52,155024,63255],{"class":308},[52,155026,1216],{"class":79},[52,155028,155029],{"class":62},"\"请输入姓名:\"",[52,155031,708],{"class":79},[52,155033,155034,155037,155039,155042,155045],{"class":54,"line":2381},[52,155035,155036],{"class":79},"    age ",[52,155038,292],{"class":58},[52,155040,155041],{"class":79}," input_int(",[52,155043,155044],{"class":62},"\"请输入年龄:\"",[52,155046,708],{"class":79},[52,155048,155049,155052,155054,155057,155060],{"class":54,"line":19252},[52,155050,155051],{"class":79},"    score ",[52,155053,292],{"class":58},[52,155055,155056],{"class":79}," input_float(",[52,155058,155059],{"class":62},"\"请输入成绩:\"",[52,155061,708],{"class":79},[52,155063,155064],{"class":54,"line":19258},[52,155065,123],{"emptyLinePlaceholder":122},[52,155067,155068],{"class":54,"line":19281},[52,155069,155070],{"class":79},"    students.append({\n",[52,155072,155073,155076],{"class":54,"line":19287},[52,155074,155075],{"class":62},"        \"student_id\"",[52,155077,155078],{"class":79},": student_id,\n",[52,155080,155081,155084],{"class":54,"line":19310},[52,155082,155083],{"class":62},"        \"name\"",[52,155085,155086],{"class":79},": name,\n",[52,155088,155089,155092],{"class":54,"line":19324},[52,155090,155091],{"class":62},"        \"age\"",[52,155093,155094],{"class":79},": age,\n",[52,155096,155097,155100],{"class":54,"line":19344},[52,155098,155099],{"class":62},"        \"score\"",[52,155101,155102],{"class":79},": score,\n",[52,155104,155105],{"class":54,"line":19350},[52,155106,36111],{"class":79},[52,155108,155109],{"class":54,"line":19361},[52,155110,155111],{"class":79},"    save_students(students)\n",[52,155113,155114,155116,155118,155121],{"class":54,"line":19384},[52,155115,33949],{"class":308},[52,155117,1216],{"class":79},[52,155119,155120],{"class":62},"\"添加成功\"",[52,155122,708],{"class":79},[52,155124,155125],{"class":54,"line":19406},[52,155126,123],{"emptyLinePlaceholder":122},[52,155128,155129],{"class":54,"line":19411},[52,155130,123],{"emptyLinePlaceholder":122},[52,155132,155133,155135,155138],{"class":54,"line":19417},[52,155134,34597],{"class":58},[52,155136,155137],{"class":75}," delete_student",[52,155139,154611],{"class":79},[52,155141,155142,155144,155146,155148,155150,155153],{"class":54,"line":19431},[52,155143,154973],{"class":79},[52,155145,292],{"class":58},[52,155147,63255],{"class":308},[52,155149,1216],{"class":79},[52,155151,155152],{"class":62},"\"请输入要删除的学号:\"",[52,155154,708],{"class":79},[52,155156,155157,155160,155162],{"class":54,"line":19444},[52,155158,155159],{"class":79},"    student ",[52,155161,292],{"class":58},[52,155163,155164],{"class":79}," find_student(students, student_id)\n",[52,155166,155167],{"class":54,"line":19449},[52,155168,123],{"emptyLinePlaceholder":122},[52,155170,155171,155173,155175,155177,155179],{"class":54,"line":19463},[52,155172,6088],{"class":58},[52,155174,154787],{"class":79},[52,155176,41577],{"class":58},[52,155178,41583],{"class":308},[52,155180,6718],{"class":79},[52,155182,155183,155185,155187,155190],{"class":54,"line":19468},[52,155184,35101],{"class":308},[52,155186,1216],{"class":79},[52,155188,155189],{"class":62},"\"学生不存在\"",[52,155191,708],{"class":79},[52,155193,155194],{"class":54,"line":19474},[52,155195,155011],{"class":58},[52,155197,155198],{"class":54,"line":19479},[52,155199,123],{"emptyLinePlaceholder":122},[52,155201,155202],{"class":54,"line":19493},[52,155203,155204],{"class":79},"    students.remove(student)\n",[52,155206,155207],{"class":54,"line":19498},[52,155208,155111],{"class":79},[52,155210,155211,155213,155215,155218],{"class":54,"line":19503},[52,155212,33949],{"class":308},[52,155214,1216],{"class":79},[52,155216,155217],{"class":62},"\"删除成功\"",[52,155219,708],{"class":79},[52,155221,155222],{"class":54,"line":19517},[52,155223,123],{"emptyLinePlaceholder":122},[52,155225,155226],{"class":54,"line":19529},[52,155227,123],{"emptyLinePlaceholder":122},[52,155229,155230,155232,155235],{"class":54,"line":19534},[52,155231,34597],{"class":58},[52,155233,155234],{"class":75}," update_student",[52,155236,154611],{"class":79},[52,155238,155239,155241,155243,155245,155247,155250],{"class":54,"line":19547},[52,155240,154973],{"class":79},[52,155242,292],{"class":58},[52,155244,63255],{"class":308},[52,155246,1216],{"class":79},[52,155248,155249],{"class":62},"\"请输入要修改的学号:\"",[52,155251,708],{"class":79},[52,155253,155254,155256,155258],{"class":54,"line":19552},[52,155255,155159],{"class":79},[52,155257,292],{"class":58},[52,155259,155164],{"class":79},[52,155261,155262],{"class":54,"line":19557},[52,155263,123],{"emptyLinePlaceholder":122},[52,155265,155266,155268,155270,155272,155274],{"class":54,"line":19562},[52,155267,6088],{"class":58},[52,155269,154787],{"class":79},[52,155271,41577],{"class":58},[52,155273,41583],{"class":308},[52,155275,6718],{"class":79},[52,155277,155278,155280,155282,155284],{"class":54,"line":19575},[52,155279,35101],{"class":308},[52,155281,1216],{"class":79},[52,155283,155189],{"class":62},[52,155285,708],{"class":79},[52,155287,155288],{"class":54,"line":19580},[52,155289,155011],{"class":58},[52,155291,155292],{"class":54,"line":35283},[52,155293,123],{"emptyLinePlaceholder":122},[52,155295,155296,155298,155300,155302,155304,155307],{"class":54,"line":35289},[52,155297,155020],{"class":79},[52,155299,292],{"class":58},[52,155301,63255],{"class":308},[52,155303,1216],{"class":79},[52,155305,155306],{"class":62},"\"请输入新姓名:\"",[52,155308,708],{"class":79},[52,155310,155311,155313,155315,155317,155320],{"class":54,"line":35295},[52,155312,155036],{"class":79},[52,155314,292],{"class":58},[52,155316,155041],{"class":79},[52,155318,155319],{"class":62},"\"请输入新年龄:\"",[52,155321,708],{"class":79},[52,155323,155324,155326,155328,155330,155333],{"class":54,"line":35301},[52,155325,155051],{"class":79},[52,155327,292],{"class":58},[52,155329,155056],{"class":79},[52,155331,155332],{"class":62},"\"请输入新成绩:\"",[52,155334,708],{"class":79},[52,155336,155337],{"class":54,"line":35307},[52,155338,123],{"emptyLinePlaceholder":122},[52,155340,155341,155344,155346,155348,155350],{"class":54,"line":35318},[52,155342,155343],{"class":79},"    student[",[52,155345,65329],{"class":62},[52,155347,7415],{"class":79},[52,155349,292],{"class":58},[52,155351,152445],{"class":79},[52,155353,155354,155356,155358,155360,155362],{"class":54,"line":35324},[52,155355,155343],{"class":79},[52,155357,71774],{"class":62},[52,155359,7415],{"class":79},[52,155361,292],{"class":58},[52,155363,152457],{"class":79},[52,155365,155366,155368,155370,155372,155374],{"class":54,"line":35344},[52,155367,155343],{"class":79},[52,155369,154122],{"class":62},[52,155371,7415],{"class":79},[52,155373,292],{"class":58},[52,155375,4623],{"class":79},[52,155377,155378],{"class":54,"line":35350},[52,155379,123],{"emptyLinePlaceholder":122},[52,155381,155382],{"class":54,"line":35361},[52,155383,155111],{"class":79},[52,155385,155386,155388,155390,155393],{"class":54,"line":35367},[52,155387,33949],{"class":308},[52,155389,1216],{"class":79},[52,155391,155392],{"class":62},"\"修改成功\"",[52,155394,708],{"class":79},[52,155396,155397],{"class":54,"line":35373},[52,155398,123],{"emptyLinePlaceholder":122},[52,155400,155401],{"class":54,"line":35379},[52,155402,123],{"emptyLinePlaceholder":122},[52,155404,155405,155407,155410],{"class":54,"line":35385},[52,155406,34597],{"class":58},[52,155408,155409],{"class":75}," query_student",[52,155411,154611],{"class":79},[52,155413,155414,155416,155418,155420,155422,155425],{"class":54,"line":35391},[52,155415,154973],{"class":79},[52,155417,292],{"class":58},[52,155419,63255],{"class":308},[52,155421,1216],{"class":79},[52,155423,155424],{"class":62},"\"请输入要查询的学号:\"",[52,155426,708],{"class":79},[52,155428,155429,155431,155433],{"class":54,"line":35397},[52,155430,155159],{"class":79},[52,155432,292],{"class":58},[52,155434,155164],{"class":79},[52,155436,155437],{"class":54,"line":35403},[52,155438,123],{"emptyLinePlaceholder":122},[52,155440,155441,155443,155445,155447,155449],{"class":54,"line":35423},[52,155442,6088],{"class":58},[52,155444,154787],{"class":79},[52,155446,41577],{"class":58},[52,155448,41583],{"class":308},[52,155450,6718],{"class":79},[52,155452,155453,155455,155457,155459],{"class":54,"line":35429},[52,155454,35101],{"class":308},[52,155456,1216],{"class":79},[52,155458,155189],{"class":62},[52,155460,708],{"class":79},[52,155462,155463],{"class":54,"line":35445},[52,155464,155011],{"class":58},[52,155466,155467],{"class":54,"line":35451},[52,155468,123],{"emptyLinePlaceholder":122},[52,155470,155471],{"class":54,"line":35465},[52,155472,155473],{"class":79},"    print_student(student)\n",[52,155475,155476],{"class":54,"line":35471},[52,155477,123],{"emptyLinePlaceholder":122},[52,155479,155480],{"class":54,"line":35486},[52,155481,123],{"emptyLinePlaceholder":122},[52,155483,155484,155486,155489],{"class":54,"line":35492},[52,155485,34597],{"class":58},[52,155487,155488],{"class":75}," print_student",[52,155490,155491],{"class":79},"(student):\n",[52,155493,155494,155496],{"class":54,"line":35501},[52,155495,33949],{"class":308},[52,155497,154089],{"class":79},[52,155499,155500,155503,155505,155507,155510,155513,155515,155518],{"class":54,"line":35507},[52,155501,155502],{"class":58},"        f",[52,155504,2844],{"class":62},[52,155506,383],{"class":308},[52,155508,155509],{"class":79},"student[",[52,155511,155512],{"class":62},"'student_id'",[52,155514,567],{"class":79},[52,155516,155517],{"class":308},"}\\t",[52,155519,27783],{"class":62},[52,155521,155522,155524,155526,155528,155530,155533,155535,155537],{"class":54,"line":35516},[52,155523,155502],{"class":58},[52,155525,2844],{"class":62},[52,155527,383],{"class":308},[52,155529,155509],{"class":79},[52,155531,155532],{"class":62},"'name'",[52,155534,567],{"class":79},[52,155536,155517],{"class":308},[52,155538,27783],{"class":62},[52,155540,155541,155543,155545,155547,155549,155552,155554,155556],{"class":54,"line":35522},[52,155542,155502],{"class":58},[52,155544,2844],{"class":62},[52,155546,383],{"class":308},[52,155548,155509],{"class":79},[52,155550,155551],{"class":62},"'age'",[52,155553,567],{"class":79},[52,155555,155517],{"class":308},[52,155557,27783],{"class":62},[52,155559,155560,155562,155564,155566,155568,155571,155573,155575],{"class":54,"line":35528},[52,155561,155502],{"class":58},[52,155563,2844],{"class":62},[52,155565,383],{"class":308},[52,155567,155509],{"class":79},[52,155569,155570],{"class":62},"'score'",[52,155572,567],{"class":79},[52,155574,4132],{"class":308},[52,155576,27783],{"class":62},[52,155578,155579],{"class":54,"line":35537},[52,155580,155581],{"class":79},"    )\n",[52,155583,155584],{"class":54,"line":35543},[52,155585,123],{"emptyLinePlaceholder":122},[52,155587,155588],{"class":54,"line":35554},[52,155589,123],{"emptyLinePlaceholder":122},[52,155591,155592,155594,155597],{"class":54,"line":35560},[52,155593,34597],{"class":58},[52,155595,155596],{"class":75}," show_all_students",[52,155598,154611],{"class":79},[52,155600,155601,155603,155605],{"class":54,"line":35579},[52,155602,6088],{"class":58},[52,155604,41580],{"class":58},[52,155606,154792],{"class":79},[52,155608,155609,155611,155613,155616],{"class":54,"line":35585},[52,155610,35101],{"class":308},[52,155612,1216],{"class":79},[52,155614,155615],{"class":62},"\"暂无学生\"",[52,155617,708],{"class":79},[52,155619,155620],{"class":54,"line":35596},[52,155621,155011],{"class":58},[52,155623,155624],{"class":54,"line":35602},[52,155625,123],{"emptyLinePlaceholder":122},[52,155627,155628,155630,155632,155635,155637,155640,155642,155645,155647,155650],{"class":54,"line":35622},[52,155629,33949],{"class":308},[52,155631,1216],{"class":79},[52,155633,155634],{"class":62},"\"学号",[52,155636,2171],{"class":308},[52,155638,155639],{"class":62},"姓名",[52,155641,2171],{"class":308},[52,155643,155644],{"class":62},"年龄",[52,155646,2171],{"class":308},[52,155648,155649],{"class":62},"成绩\"",[52,155651,708],{"class":79},[52,155653,155654,155656,155658,155660],{"class":54,"line":35638},[52,155655,679],{"class":58},[52,155657,154787],{"class":79},[52,155659,28693],{"class":58},[52,155661,154792],{"class":79},[52,155663,155664],{"class":54,"line":35644},[52,155665,155666],{"class":79},"        print_student(student)\n",[52,155668,155669],{"class":54,"line":35658},[52,155670,123],{"emptyLinePlaceholder":122},[52,155672,155673],{"class":54,"line":35664},[52,155674,123],{"emptyLinePlaceholder":122},[52,155676,155677,155679,155681],{"class":54,"line":35670},[52,155678,34597],{"class":58},[52,155680,245],{"class":75},[52,155682,34603],{"class":79},[52,155684,155685,155688,155690],{"class":54,"line":35681},[52,155686,155687],{"class":79},"    students ",[52,155689,292],{"class":58},[52,155691,155692],{"class":79}," load_students()\n",[52,155694,155695],{"class":54,"line":35687},[52,155696,123],{"emptyLinePlaceholder":122},[52,155698,155699,155701,155703],{"class":54,"line":35693},[52,155700,5262],{"class":58},[52,155702,97942],{"class":308},[52,155704,6718],{"class":79},[52,155706,155707],{"class":54,"line":35703},[52,155708,155709],{"class":79},"        show_menu()\n",[52,155711,155712,155715,155717,155719,155721,155724],{"class":54,"line":35709},[52,155713,155714],{"class":79},"        choice ",[52,155716,292],{"class":58},[52,155718,63255],{"class":308},[52,155720,1216],{"class":79},[52,155722,155723],{"class":62},"\"请输入操作:\"",[52,155725,708],{"class":79},[52,155727,155728],{"class":54,"line":35720},[52,155729,123],{"emptyLinePlaceholder":122},[52,155731,155732,155734,155737,155739,155742],{"class":54,"line":35726},[52,155733,5497],{"class":58},[52,155735,155736],{"class":79}," choice ",[52,155738,5938],{"class":58},[52,155740,155741],{"class":62}," \"1\"",[52,155743,6718],{"class":79},[52,155745,155746],{"class":54,"line":35736},[52,155747,155748],{"class":79},"            add_student(students)\n",[52,155750,155751,155754,155756,155758,155761],{"class":54,"line":35741},[52,155752,155753],{"class":58},"        elif",[52,155755,155736],{"class":79},[52,155757,5938],{"class":58},[52,155759,155760],{"class":62}," \"2\"",[52,155762,6718],{"class":79},[52,155764,155765],{"class":54,"line":35747},[52,155766,155767],{"class":79},"            delete_student(students)\n",[52,155769,155770,155772,155774,155776,155779],{"class":54,"line":35796},[52,155771,155753],{"class":58},[52,155773,155736],{"class":79},[52,155775,5938],{"class":58},[52,155777,155778],{"class":62}," \"3\"",[52,155780,6718],{"class":79},[52,155782,155783],{"class":54,"line":35843},[52,155784,155785],{"class":79},"            update_student(students)\n",[52,155787,155788,155790,155792,155794,155797],{"class":54,"line":35848},[52,155789,155753],{"class":58},[52,155791,155736],{"class":79},[52,155793,5938],{"class":58},[52,155795,155796],{"class":62}," \"4\"",[52,155798,6718],{"class":79},[52,155800,155801],{"class":54,"line":35854},[52,155802,155803],{"class":79},"            query_student(students)\n",[52,155805,155806,155808,155810,155812,155815],{"class":54,"line":35873},[52,155807,155753],{"class":58},[52,155809,155736],{"class":79},[52,155811,5938],{"class":58},[52,155813,155814],{"class":62}," \"5\"",[52,155816,6718],{"class":79},[52,155818,155819],{"class":54,"line":35879},[52,155820,155821],{"class":79},"            show_all_students(students)\n",[52,155823,155824,155826,155828,155830,155833],{"class":54,"line":35899},[52,155825,155753],{"class":58},[52,155827,155736],{"class":79},[52,155829,5938],{"class":58},[52,155831,155832],{"class":62}," \"0\"",[52,155834,6718],{"class":79},[52,155836,155837,155839,155841,155844],{"class":54,"line":35905},[52,155838,37300],{"class":308},[52,155840,1216],{"class":79},[52,155842,155843],{"class":62},"\"退出系统\"",[52,155845,708],{"class":79},[52,155847,155848],{"class":54,"line":35911},[52,155849,117748],{"class":58},[52,155851,155852,155854],{"class":54,"line":35921},[52,155853,5532],{"class":58},[52,155855,6718],{"class":79},[52,155857,155858,155860,155862,155865],{"class":54,"line":35926},[52,155859,37300],{"class":308},[52,155861,1216],{"class":79},[52,155863,155864],{"class":62},"\"输入错误\"",[52,155866,708],{"class":79},[52,155868,155869],{"class":54,"line":35932},[52,155870,123],{"emptyLinePlaceholder":122},[52,155872,155873],{"class":54,"line":35948},[52,155874,123],{"emptyLinePlaceholder":122},[52,155876,155877,155879,155881,155883,155885],{"class":54,"line":35993},[52,155878,4578],{"class":58},[52,155880,33870],{"class":308},[52,155882,104209],{"class":58},[52,155884,104212],{"class":62},[52,155886,6718],{"class":79},[52,155888,155889],{"class":54,"line":35999},[52,155890,104219],{"class":79},[14,155892,155893],{},"这个项目串联了：",[1696,155895,155896,155899,155902,155905,155908,155910],{},[32,155897,155898],{},"菜单循环。",[32,155900,155901],{},"函数封装。",[32,155903,155904],{},"列表字典。",[32,155906,155907],{},"JSON 读写。",[32,155909,154377],{},[32,155911,155912,31035],{},[49,155913,155914],{},"if __name__ == \"__main__\"",[18,155916,155918],{"id":155917},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,155920,155921],{},"可以进一步拆成两个类：",[1696,155923,155924,155929],{},[32,155925,155926,155928],{},[49,155927,152218],{},"：表示单个学生。",[32,155930,155931,155933],{},[49,155932,154244],{},"：负责学生增删改查和文件保存。",[14,155935,155936],{},"示意代码：",[42,155938,155940],{"className":33028,"code":155939,"language":33030,"meta":47,"style":47},"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",[49,155941,155942,155952,155956,155960,155964,155972,155979,155985,155991,155997,156001,156009,156015,156025,156035,156045,156055,156059,156063,156069,156077,156085,156093,156101,156109,156117],{"__ignoreMap":47},[52,155943,155944,155946,155948,155950],{"class":54,"line":55},[52,155945,33387],{"class":58},[52,155947,153802],{"class":79},[52,155949,33042],{"class":58},[52,155951,153807],{"class":79},[52,155953,155954],{"class":54,"line":66},[52,155955,123],{"emptyLinePlaceholder":122},[52,155957,155958],{"class":54,"line":83},[52,155959,123],{"emptyLinePlaceholder":122},[52,155961,155962],{"class":54,"line":91},[52,155963,153820],{"class":75},[52,155965,155966,155968,155970],{"class":54,"line":98},[52,155967,17342],{"class":58},[52,155969,274],{"class":75},[52,155971,6718],{"class":79},[52,155973,155974,155977],{"class":54,"line":107},[52,155975,155976],{"class":79},"    student_id: ",[52,155978,153836],{"class":308},[52,155980,155981,155983],{"class":54,"line":113},[52,155982,153833],{"class":79},[52,155984,153836],{"class":308},[52,155986,155987,155989],{"class":54,"line":119},[52,155988,153841],{"class":79},[52,155990,153844],{"class":308},[52,155992,155993,155995],{"class":54,"line":126},[52,155994,153849],{"class":79},[52,155996,153852],{"class":308},[52,155998,155999],{"class":54,"line":132},[52,156000,123],{"emptyLinePlaceholder":122},[52,156002,156003,156005,156007],{"class":54,"line":138},[52,156004,33451],{"class":58},[52,156006,154000],{"class":75},[52,156008,33457],{"class":79},[52,156010,156011,156013],{"class":54,"line":144},[52,156012,17400],{"class":58},[52,156014,18220],{"class":79},[52,156016,156017,156019,156021,156023],{"class":54,"line":153},[52,156018,154013],{"class":62},[52,156020,54087],{"class":79},[52,156022,33473],{"class":308},[52,156024,154020],{"class":79},[52,156026,156027,156029,156031,156033],{"class":54,"line":159},[52,156028,154025],{"class":62},[52,156030,54087],{"class":79},[52,156032,33473],{"class":308},[52,156034,154032],{"class":79},[52,156036,156037,156039,156041,156043],{"class":54,"line":167},[52,156038,154037],{"class":62},[52,156040,54087],{"class":79},[52,156042,33473],{"class":308},[52,156044,154044],{"class":79},[52,156046,156047,156049,156051,156053],{"class":54,"line":173},[52,156048,154049],{"class":62},[52,156050,54087],{"class":79},[52,156052,33473],{"class":308},[52,156054,154056],{"class":79},[52,156056,156057],{"class":54,"line":181},[52,156058,2039],{"class":79},[52,156060,156061],{"class":54,"line":186},[52,156062,123],{"emptyLinePlaceholder":122},[52,156064,156065,156067],{"class":54,"line":191},[52,156066,153664],{"class":75},[52,156068,153667],{"class":308},[52,156070,156071,156073,156075],{"class":54,"line":196},[52,156072,33451],{"class":58},[52,156074,154077],{"class":75},[52,156076,154080],{"class":79},[52,156078,156079,156081,156083],{"class":54,"line":201},[52,156080,17400],{"class":58},[52,156082,153684],{"class":308},[52,156084,154089],{"class":79},[52,156086,156087,156089,156091],{"class":54,"line":206},[52,156088,154094],{"class":79},[52,156090,154097],{"class":62},[52,156092,90486],{"class":79},[52,156094,156095,156097,156099],{"class":54,"line":211},[52,156096,154094],{"class":79},[52,156098,65329],{"class":62},[52,156100,90486],{"class":79},[52,156102,156103,156105,156107],{"class":54,"line":218},[52,156104,154094],{"class":79},[52,156106,71774],{"class":62},[52,156108,90486],{"class":79},[52,156110,156111,156113,156115],{"class":54,"line":223},[52,156112,154094],{"class":79},[52,156114,154122],{"class":62},[52,156116,90486],{"class":79},[52,156118,156119],{"class":54,"line":230},[52,156120,40776],{"class":79},[14,156122,156123],{},"管理器示意：",[42,156125,156127],{"className":33028,"code":156126,"language":33030,"meta":47,"style":47},"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",[49,156128,156129,156138,156146,156157,156161,156171,156184,156195,156202,156208,156212,156221,156230,156236,156243],{"__ignoreMap":47},[52,156130,156131,156133,156136],{"class":54,"line":55},[52,156132,17342],{"class":58},[52,156134,156135],{"class":75}," StudentManager",[52,156137,6718],{"class":79},[52,156139,156140,156142,156144],{"class":54,"line":66},[52,156141,33451],{"class":58},[52,156143,33454],{"class":308},[52,156145,33457],{"class":79},[52,156147,156148,156150,156153,156155],{"class":54,"line":83},[52,156149,33495],{"class":308},[52,156151,156152],{"class":79},".students ",[52,156154,292],{"class":58},[52,156156,54488],{"class":79},[52,156158,156159],{"class":54,"line":91},[52,156160,123],{"emptyLinePlaceholder":122},[52,156162,156163,156165,156168],{"class":54,"line":98},[52,156164,33451],{"class":58},[52,156166,156167],{"class":75}," find_by_id",[52,156169,156170],{"class":79},"(self, student_id):\n",[52,156172,156173,156175,156177,156179,156181],{"class":54,"line":107},[52,156174,1927],{"class":58},[52,156176,154787],{"class":79},[52,156178,28693],{"class":58},[52,156180,41523],{"class":308},[52,156182,156183],{"class":79},".students:\n",[52,156185,156186,156188,156191,156193],{"class":54,"line":113},[52,156187,7614],{"class":58},[52,156189,156190],{"class":79}," student.student_id ",[52,156192,5938],{"class":58},[52,156194,154808],{"class":79},[52,156196,156197,156200],{"class":54,"line":119},[52,156198,156199],{"class":58},"                return",[52,156201,154815],{"class":79},[52,156203,156204,156206],{"class":54,"line":126},[52,156205,17400],{"class":58},[52,156207,154822],{"class":308},[52,156209,156210],{"class":54,"line":132},[52,156211,123],{"emptyLinePlaceholder":122},[52,156213,156214,156216,156218],{"class":54,"line":138},[52,156215,33451],{"class":58},[52,156217,8176],{"class":75},[52,156219,156220],{"class":79},"(self, student):\n",[52,156222,156223,156225,156227],{"class":54,"line":144},[52,156224,5497],{"class":58},[52,156226,41523],{"class":308},[52,156228,156229],{"class":79},".find_by_id(student.student_id):\n",[52,156231,156232,156234],{"class":54,"line":153},[52,156233,18380],{"class":58},[52,156235,128457],{"class":308},[52,156237,156238,156240],{"class":54,"line":159},[52,156239,33495],{"class":308},[52,156241,156242],{"class":79},".students.append(student)\n",[52,156244,156245,156247],{"class":54,"line":167},[52,156246,17400],{"class":58},[52,156248,156249],{"class":308}," True\n",[14,156251,156252],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[18,156254,156256],{"id":156255},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[3195,156258,156260],{"id":156259},"_1251-数据结构","12.5.1 数据结构",[42,156262,156264],{"className":33028,"code":156263,"language":33030,"meta":47,"style":47},"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",[49,156265,156266,156274,156305,156335,156364,156393],{"__ignoreMap":47},[52,156267,156268,156270,156272],{"class":54,"line":55},[52,156269,151115],{"class":79},[52,156271,292],{"class":58},[52,156273,58097],{"class":79},[52,156275,156276,156278,156280,156282,156284,156286,156289,156291,156294,156296,156298,156300,156303],{"class":54,"line":66},[52,156277,151035],{"class":79},[52,156279,150647],{"class":62},[52,156281,54087],{"class":79},[52,156283,151258],{"class":62},[52,156285,15083],{"class":79},[52,156287,156288],{"class":62},"\"category\"",[52,156290,54087],{"class":79},[52,156292,156293],{"class":62},"\"手机\"",[52,156295,15083],{"class":79},[52,156297,86734],{"class":62},[52,156299,54087],{"class":79},[52,156301,156302],{"class":308},"12000",[52,156304,594],{"class":79},[52,156306,156307,156309,156311,156313,156315,156317,156319,156321,156324,156326,156328,156330,156333],{"class":54,"line":83},[52,156308,151035],{"class":79},[52,156310,150647],{"class":62},[52,156312,54087],{"class":79},[52,156314,151258],{"class":62},[52,156316,15083],{"class":79},[52,156318,156288],{"class":62},[52,156320,54087],{"class":79},[52,156322,156323],{"class":62},"\"电脑\"",[52,156325,15083],{"class":79},[52,156327,86734],{"class":62},[52,156329,54087],{"class":79},[52,156331,156332],{"class":308},"18000",[52,156334,594],{"class":79},[52,156336,156337,156339,156341,156343,156345,156347,156349,156351,156353,156355,156357,156359,156362],{"class":54,"line":91},[52,156338,151035],{"class":79},[52,156340,150647],{"class":62},[52,156342,54087],{"class":79},[52,156344,151279],{"class":62},[52,156346,15083],{"class":79},[52,156348,156288],{"class":62},[52,156350,54087],{"class":79},[52,156352,156293],{"class":62},[52,156354,15083],{"class":79},[52,156356,86734],{"class":62},[52,156358,54087],{"class":79},[52,156360,156361],{"class":308},"15000",[52,156363,594],{"class":79},[52,156365,156366,156368,156370,156372,156374,156376,156378,156380,156382,156384,156386,156388,156391],{"class":54,"line":98},[52,156367,151035],{"class":79},[52,156369,150647],{"class":62},[52,156371,54087],{"class":79},[52,156373,151279],{"class":62},[52,156375,15083],{"class":79},[52,156377,156288],{"class":62},[52,156379,54087],{"class":79},[52,156381,156323],{"class":62},[52,156383,15083],{"class":79},[52,156385,86734],{"class":62},[52,156387,54087],{"class":79},[52,156389,156390],{"class":308},"16000",[52,156392,594],{"class":79},[52,156394,156395],{"class":54,"line":107},[52,156396,35896],{"class":79},[3195,156398,156400],{"id":156399},"_1252-按日期统计","12.5.2 按日期统计",[42,156402,156404],{"className":33028,"code":156403,"language":33030,"meta":47,"style":47},"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",[49,156405,156406,156415,156419,156430,156444,156457,156476,156480],{"__ignoreMap":47},[52,156407,156408,156411,156413],{"class":54,"line":55},[52,156409,156410],{"class":79},"daily_total ",[52,156412,292],{"class":58},[52,156414,90518],{"class":79},[52,156416,156417],{"class":54,"line":66},[52,156418,123],{"emptyLinePlaceholder":122},[52,156420,156421,156423,156425,156427],{"class":54,"line":83},[52,156422,6014],{"class":58},[52,156424,150859],{"class":79},[52,156426,28693],{"class":58},[52,156428,156429],{"class":79}," sales:\n",[52,156431,156432,156435,156437,156440,156442],{"class":54,"line":91},[52,156433,156434],{"class":79},"    date ",[52,156436,292],{"class":58},[52,156438,156439],{"class":79}," item[",[52,156441,150647],{"class":62},[52,156443,35896],{"class":79},[52,156445,156446,156449,156451,156453,156455],{"class":54,"line":98},[52,156447,156448],{"class":79},"    amount ",[52,156450,292],{"class":58},[52,156452,156439],{"class":79},[52,156454,86734],{"class":62},[52,156456,35896],{"class":79},[52,156458,156459,156462,156464,156467,156469,156471,156473],{"class":54,"line":107},[52,156460,156461],{"class":79},"    daily_total[date] ",[52,156463,292],{"class":58},[52,156465,156466],{"class":79}," daily_total.get(date, ",[52,156468,692],{"class":308},[52,156470,16362],{"class":79},[52,156472,2004],{"class":58},[52,156474,156475],{"class":79}," amount\n",[52,156477,156478],{"class":54,"line":113},[52,156479,123],{"emptyLinePlaceholder":122},[52,156481,156482,156484],{"class":54,"line":119},[52,156483,33065],{"class":308},[52,156485,156486],{"class":79},"(daily_total)\n",[3195,156488,156490],{"id":156489},"_1253-按类别统计","12.5.3 按类别统计",[42,156492,156494],{"className":33028,"code":156493,"language":33030,"meta":47,"style":47},"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",[49,156495,156496,156505,156509,156519,156532,156544,156562,156566],{"__ignoreMap":47},[52,156497,156498,156501,156503],{"class":54,"line":55},[52,156499,156500],{"class":79},"category_total ",[52,156502,292],{"class":58},[52,156504,90518],{"class":79},[52,156506,156507],{"class":54,"line":66},[52,156508,123],{"emptyLinePlaceholder":122},[52,156510,156511,156513,156515,156517],{"class":54,"line":83},[52,156512,6014],{"class":58},[52,156514,150859],{"class":79},[52,156516,28693],{"class":58},[52,156518,156429],{"class":79},[52,156520,156521,156524,156526,156528,156530],{"class":54,"line":91},[52,156522,156523],{"class":79},"    category ",[52,156525,292],{"class":58},[52,156527,156439],{"class":79},[52,156529,156288],{"class":62},[52,156531,35896],{"class":79},[52,156533,156534,156536,156538,156540,156542],{"class":54,"line":98},[52,156535,156448],{"class":79},[52,156537,292],{"class":58},[52,156539,156439],{"class":79},[52,156541,86734],{"class":62},[52,156543,35896],{"class":79},[52,156545,156546,156549,156551,156554,156556,156558,156560],{"class":54,"line":107},[52,156547,156548],{"class":79},"    category_total[category] ",[52,156550,292],{"class":58},[52,156552,156553],{"class":79}," category_total.get(category, ",[52,156555,692],{"class":308},[52,156557,16362],{"class":79},[52,156559,2004],{"class":58},[52,156561,156475],{"class":79},[52,156563,156564],{"class":54,"line":113},[52,156565,123],{"emptyLinePlaceholder":122},[52,156567,156568,156570],{"class":54,"line":119},[52,156569,33065],{"class":308},[52,156571,156572],{"class":79},"(category_total)\n",[3195,156574,156576],{"id":156575},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[42,156578,156580],{"className":33028,"code":156579,"language":33030,"meta":47,"style":47},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[49,156581,156582,156607],{"__ignoreMap":47},[52,156583,156584,156587,156589,156591,156594,156597,156600,156603,156605],{"class":54,"line":55},[52,156585,156586],{"class":79},"top_date, top_amount ",[52,156588,292],{"class":58},[52,156590,8916],{"class":308},[52,156592,156593],{"class":79},"(daily_total.items(), ",[52,156595,156596],{"class":1223},"key",[52,156598,156599],{"class":58},"=lambda",[52,156601,156602],{"class":79}," item: item[",[52,156604,629],{"class":308},[52,156606,7629],{"class":79},[52,156608,156609,156611],{"class":54,"line":66},[52,156610,33065],{"class":308},[52,156612,156613],{"class":79},"(top_date, top_amount)\n",[18,156615,156617],{"id":156616},"_126-绘制柱状图","12.6 绘制柱状图",[42,156619,156621],{"className":33028,"code":156620,"language":33030,"meta":47,"style":47},"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",[49,156622,156623,156637,156648,156652,156660,156672,156684,156695,156699,156703,156713,156724,156738,156743,156760,156777,156793,156797],{"__ignoreMap":47},[52,156624,156625,156627,156629,156631,156633,156635],{"class":54,"line":55},[52,156626,33387],{"class":58},[52,156628,150029],{"class":79},[52,156630,33042],{"class":58},[52,156632,150034],{"class":79},[52,156634,34033],{"class":58},[52,156636,150039],{"class":79},[52,156638,156639,156641,156643,156645],{"class":54,"line":66},[52,156640,33387],{"class":58},[52,156642,149888],{"class":79},[52,156644,33042],{"class":58},[52,156646,156647],{"class":79}," Bar\n",[52,156649,156650],{"class":54,"line":83},[52,156651,123],{"emptyLinePlaceholder":122},[52,156653,156654,156656,156658],{"class":54,"line":91},[52,156655,156500],{"class":79},[52,156657,292],{"class":58},[52,156659,18220],{"class":79},[52,156661,156662,156665,156667,156670],{"class":54,"line":98},[52,156663,156664],{"class":62},"    \"手机\"",[52,156666,54087],{"class":79},[52,156668,156669],{"class":308},"27000",[52,156671,34116],{"class":79},[52,156673,156674,156677,156679,156682],{"class":54,"line":107},[52,156675,156676],{"class":62},"    \"电脑\"",[52,156678,54087],{"class":79},[52,156680,156681],{"class":308},"34000",[52,156683,34116],{"class":79},[52,156685,156686,156689,156691,156693],{"class":54,"line":113},[52,156687,156688],{"class":62},"    \"耳机\"",[52,156690,54087],{"class":79},[52,156692,127049],{"class":308},[52,156694,34116],{"class":79},[52,156696,156697],{"class":54,"line":119},[52,156698,452],{"class":79},[52,156700,156701],{"class":54,"line":126},[52,156702,123],{"emptyLinePlaceholder":122},[52,156704,156705,156708,156710],{"class":54,"line":132},[52,156706,156707],{"class":79},"bar ",[52,156709,292],{"class":58},[52,156711,156712],{"class":79}," Bar()\n",[52,156714,156715,156718,156721],{"class":54,"line":138},[52,156716,156717],{"class":79},"bar.add_xaxis(",[52,156719,156720],{"class":308},"list",[52,156722,156723],{"class":79},"(category_total.keys()))\n",[52,156725,156726,156729,156731,156733,156735],{"class":54,"line":144},[52,156727,156728],{"class":79},"bar.add_yaxis(",[52,156730,149945],{"class":62},[52,156732,15083],{"class":79},[52,156734,156720],{"class":308},[52,156736,156737],{"class":79},"(category_total.values()))\n",[52,156739,156740],{"class":54,"line":153},[52,156741,156742],{"class":79},"bar.set_global_opts(\n",[52,156744,156745,156747,156749,156751,156753,156755,156758],{"class":54,"line":159},[52,156746,150123],{"class":1223},[52,156748,292],{"class":58},[52,156750,150128],{"class":79},[52,156752,54057],{"class":1223},[52,156754,292],{"class":58},[52,156756,156757],{"class":62},"\"品类销售额\"",[52,156759,40697],{"class":79},[52,156761,156762,156764,156766,156768,156770,156772,156775],{"class":54,"line":167},[52,156763,150142],{"class":1223},[52,156765,292],{"class":58},[52,156767,150147],{"class":79},[52,156769,82460],{"class":1223},[52,156771,292],{"class":58},[52,156773,156774],{"class":62},"\"品类\"",[52,156776,40697],{"class":79},[52,156778,156779,156781,156783,156785,156787,156789,156791],{"class":54,"line":173},[52,156780,150161],{"class":1223},[52,156782,292],{"class":58},[52,156784,150147],{"class":79},[52,156786,82460],{"class":1223},[52,156788,292],{"class":58},[52,156790,149945],{"class":62},[52,156792,40697],{"class":79},[52,156794,156795],{"class":54,"line":181},[52,156796,708],{"class":79},[52,156798,156799,156802,156805],{"class":54,"line":186},[52,156800,156801],{"class":79},"bar.render(",[52,156803,156804],{"class":62},"\"category_sales.html\"",[52,156806,708],{"class":79},[18,156808,156810],{"id":156809},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,156812,156813],{},"时间线适合展示不同日期、月份、年份的数据变化。",[42,156815,156817],{"className":33028,"code":156816,"language":33030,"meta":47,"style":47},"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",[49,156818,156819,156833,156844,156848,156856,156880,156903,156928,156932,156936,156946,156950,156961,156970,156980,156994,157025,157030,157034],{"__ignoreMap":47},[52,156820,156821,156823,156825,156827,156829,156831],{"class":54,"line":55},[52,156822,33387],{"class":58},[52,156824,150029],{"class":79},[52,156826,33042],{"class":58},[52,156828,150034],{"class":79},[52,156830,34033],{"class":58},[52,156832,150039],{"class":79},[52,156834,156835,156837,156839,156841],{"class":54,"line":66},[52,156836,33387],{"class":58},[52,156838,149888],{"class":79},[52,156840,33042],{"class":58},[52,156842,156843],{"class":79}," Bar, Timeline\n",[52,156845,156846],{"class":54,"line":83},[52,156847,123],{"emptyLinePlaceholder":122},[52,156849,156850,156852,156854],{"class":54,"line":91},[52,156851,104308],{"class":79},[52,156853,292],{"class":58},[52,156855,18220],{"class":79},[52,156857,156858,156861,156864,156866,156868,156870,156872,156874,156876,156878],{"class":54,"line":98},[52,156859,156860],{"class":62},"    \"2024-10-01\"",[52,156862,156863],{"class":79},": {",[52,156865,156293],{"class":62},[52,156867,54087],{"class":79},[52,156869,156302],{"class":308},[52,156871,15083],{"class":79},[52,156873,156323],{"class":62},[52,156875,54087],{"class":79},[52,156877,156332],{"class":308},[52,156879,594],{"class":79},[52,156881,156882,156885,156887,156889,156891,156893,156895,156897,156899,156901],{"class":54,"line":107},[52,156883,156884],{"class":62},"    \"2024-10-02\"",[52,156886,156863],{"class":79},[52,156888,156293],{"class":62},[52,156890,54087],{"class":79},[52,156892,156361],{"class":308},[52,156894,15083],{"class":79},[52,156896,156323],{"class":62},[52,156898,54087],{"class":79},[52,156900,156390],{"class":308},[52,156902,594],{"class":79},[52,156904,156905,156908,156910,156912,156914,156917,156919,156921,156923,156926],{"class":54,"line":113},[52,156906,156907],{"class":62},"    \"2024-10-03\"",[52,156909,156863],{"class":79},[52,156911,156293],{"class":62},[52,156913,54087],{"class":79},[52,156915,156916],{"class":308},"17000",[52,156918,15083],{"class":79},[52,156920,156323],{"class":62},[52,156922,54087],{"class":79},[52,156924,156925],{"class":308},"19000",[52,156927,594],{"class":79},[52,156929,156930],{"class":54,"line":119},[52,156931,452],{"class":79},[52,156933,156934],{"class":54,"line":126},[52,156935,123],{"emptyLinePlaceholder":122},[52,156937,156938,156941,156943],{"class":54,"line":132},[52,156939,156940],{"class":79},"timeline ",[52,156942,292],{"class":58},[52,156944,156945],{"class":79}," Timeline()\n",[52,156947,156948],{"class":54,"line":138},[52,156949,123],{"emptyLinePlaceholder":122},[52,156951,156952,156954,156957,156959],{"class":54,"line":144},[52,156953,6014],{"class":58},[52,156955,156956],{"class":79}," date, category_data ",[52,156958,28693],{"class":58},[52,156960,151798],{"class":79},[52,156962,156963,156966,156968],{"class":54,"line":153},[52,156964,156965],{"class":79},"    bar ",[52,156967,292],{"class":58},[52,156969,156712],{"class":79},[52,156971,156972,156975,156977],{"class":54,"line":159},[52,156973,156974],{"class":79},"    bar.add_xaxis(",[52,156976,156720],{"class":308},[52,156978,156979],{"class":79},"(category_data.keys()))\n",[52,156981,156982,156985,156987,156989,156991],{"class":54,"line":167},[52,156983,156984],{"class":79},"    bar.add_yaxis(",[52,156986,149945],{"class":62},[52,156988,15083],{"class":79},[52,156990,156720],{"class":308},[52,156992,156993],{"class":79},"(category_data.values()))\n",[52,156995,156996,156999,157002,157004,157006,157008,157010,157012,157014,157016,157018,157020,157023],{"class":54,"line":173},[52,156997,156998],{"class":79},"    bar.set_global_opts(",[52,157000,157001],{"class":1223},"title_opts",[52,157003,292],{"class":58},[52,157005,150128],{"class":79},[52,157007,54057],{"class":1223},[52,157009,292],{"class":58},[52,157011,3273],{"class":58},[52,157013,2844],{"class":62},[52,157015,383],{"class":308},[52,157017,76576],{"class":79},[52,157019,4132],{"class":308},[52,157021,157022],{"class":62},"销售额\"",[52,157024,33147],{"class":79},[52,157026,157027],{"class":54,"line":181},[52,157028,157029],{"class":79},"    timeline.add(bar, date)\n",[52,157031,157032],{"class":54,"line":186},[52,157033,123],{"emptyLinePlaceholder":122},[52,157035,157036,157039,157042],{"class":54,"line":191},[52,157037,157038],{"class":79},"timeline.render(",[52,157040,157041],{"class":62},"\"timeline_sales.html\"",[52,157043,708],{"class":79},[18,157045,157047],{"id":157046},"_128-绘制地图","12.8 绘制地图",[14,157049,157050],{},"地图适合展示地区数据。",[42,157052,157054],{"className":33028,"code":157053,"language":33030,"meta":47,"style":47},"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",[49,157055,157056,157070,157081,157085,157093,157106,157118,157131,157144,157148,157152,157162,157177,157182,157199,157218,157222],{"__ignoreMap":47},[52,157057,157058,157060,157062,157064,157066,157068],{"class":54,"line":55},[52,157059,33387],{"class":58},[52,157061,150029],{"class":79},[52,157063,33042],{"class":58},[52,157065,150034],{"class":79},[52,157067,34033],{"class":58},[52,157069,150039],{"class":79},[52,157071,157072,157074,157076,157078],{"class":54,"line":66},[52,157073,33387],{"class":58},[52,157075,149888],{"class":79},[52,157077,33042],{"class":58},[52,157079,157080],{"class":79}," Map\n",[52,157082,157083],{"class":54,"line":83},[52,157084,123],{"emptyLinePlaceholder":122},[52,157086,157087,157089,157091],{"class":54,"line":91},[52,157088,104308],{"class":79},[52,157090,292],{"class":58},[52,157092,58097],{"class":79},[52,157094,157095,157098,157100,157102,157104],{"class":54,"line":98},[52,157096,157097],{"class":79},"    (",[52,157099,71919],{"class":62},[52,157101,15083],{"class":79},[52,157103,4007],{"class":308},[52,157105,40697],{"class":79},[52,157107,157108,157110,157112,157114,157116],{"class":54,"line":107},[52,157109,157097],{"class":79},[52,157111,71939],{"class":62},[52,157113,15083],{"class":79},[52,157115,149962],{"class":308},[52,157117,40697],{"class":79},[52,157119,157120,157122,157125,157127,157129],{"class":54,"line":113},[52,157121,157097],{"class":79},[52,157123,157124],{"class":62},"\"广东\"",[52,157126,15083],{"class":79},[52,157128,856],{"class":308},[52,157130,40697],{"class":79},[52,157132,157133,157135,157138,157140,157142],{"class":54,"line":119},[52,157134,157097],{"class":79},[52,157136,157137],{"class":62},"\"浙江\"",[52,157139,15083],{"class":79},[52,157141,149967],{"class":308},[52,157143,40697],{"class":79},[52,157145,157146],{"class":54,"line":126},[52,157147,35896],{"class":79},[52,157149,157150],{"class":54,"line":132},[52,157151,123],{"emptyLinePlaceholder":122},[52,157153,157154,157157,157159],{"class":54,"line":138},[52,157155,157156],{"class":79},"map_chart ",[52,157158,292],{"class":58},[52,157160,157161],{"class":79}," Map()\n",[52,157163,157164,157167,157169,157172,157175],{"class":54,"line":144},[52,157165,157166],{"class":79},"map_chart.add(",[52,157168,149945],{"class":62},[52,157170,157171],{"class":79},", data, ",[52,157173,157174],{"class":62},"\"china\"",[52,157176,708],{"class":79},[52,157178,157179],{"class":54,"line":153},[52,157180,157181],{"class":79},"map_chart.set_global_opts(\n",[52,157183,157184,157186,157188,157190,157192,157194,157197],{"class":54,"line":159},[52,157185,150123],{"class":1223},[52,157187,292],{"class":58},[52,157189,150128],{"class":79},[52,157191,54057],{"class":1223},[52,157193,292],{"class":58},[52,157195,157196],{"class":62},"\"地区销售额\"",[52,157198,40697],{"class":79},[52,157200,157201,157204,157206,157209,157212,157214,157216],{"class":54,"line":167},[52,157202,157203],{"class":1223},"    visualmap_opts",[52,157205,292],{"class":58},[52,157207,157208],{"class":79},"opts.VisualMapOpts(",[52,157210,157211],{"class":1223},"max_",[52,157213,292],{"class":58},[52,157215,856],{"class":308},[52,157217,40697],{"class":79},[52,157219,157220],{"class":54,"line":173},[52,157221,708],{"class":79},[52,157223,157224,157227,157230],{"class":54,"line":181},[52,157225,157226],{"class":79},"map_chart.render(",[52,157228,157229],{"class":62},"\"map_sales.html\"",[52,157231,708],{"class":79},[14,157233,157234],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[18,157236,157238],{"id":157237},"_129-项目拆分建议","12.9 项目拆分建议",[14,157240,157241],{},"当代码超过一个文件时，可以这样组织：",[42,157243,157246],{"className":157244,"code":157245,"language":8154,"meta":47},[8152],"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",[49,157247,157245],{"__ignoreMap":47},[14,157249,157250],{},"职责：",[1696,157252,157253,157259,157265,157271],{},[32,157254,157255,157258],{},[49,157256,157257],{},"main.py","：程序入口。",[32,157260,157261,157264],{},[49,157262,157263],{},"file_utils.py","：读写 JSON。",[32,157266,157267,157270],{},[49,157268,157269],{},"sales_service.py","：统计销售数据。",[32,157272,157273,157276],{},[49,157274,157275],{},"chart_builder.py","：生成图表。",[18,157278,157280],{"id":157279},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,157282,157283],{},"语法基础：",[1696,157285,157286,157289,157292,157295],{},[32,157287,157288],{},"会写变量、注释、输入输出。",[32,157290,157291],{},"会使用 int、float、str、bool。",[32,157293,157294],{},"会做类型转换。",[32,157296,157297],{},"会使用 f-string 格式化输出。",[14,157299,157300],{},"流程控制：",[1696,157302,157303,157309,157315,157323],{},[32,157304,157305,157306,31035],{},"会写 ",[49,157307,157308],{},"if elif else",[32,157310,157305,157311,103668,157313,31035],{},[49,157312,111313],{},[49,157314,6014],{},[32,157316,157317,157318,103668,157320,31035],{},"理解 ",[49,157319,5066],{},[49,157321,157322],{},"continue",[32,157324,157325],{},"能写嵌套循环。",[14,157327,157328],{},"函数：",[1696,157330,157331,157334,157337,157340],{},[32,157332,157333],{},"会定义和调用函数。",[32,157335,157336],{},"理解参数和返回值。",[32,157338,157339],{},"知道局部变量和全局变量。",[32,157341,157342],{},"会使用默认参数、关键字参数、不定长参数。",[14,157344,157345],{},"容器：",[1696,157347,157348,157351,157354,157357,157360],{},[32,157349,157350],{},"会使用列表增删改查。",[32,157352,157353],{},"会遍历列表、字典。",[32,157355,157356],{},"会使用切片。",[32,157358,157359],{},"会用集合去重。",[32,157361,157362],{},"会处理列表嵌套字典。",[14,157364,157365],{},"文件和模块：",[1696,157367,157368,157371,157374,157377,157380],{},[32,157369,157370],{},"会读写文本文件。",[32,157372,157373],{},"会读写 JSON。",[32,157375,157376],{},"会捕获常见异常。",[32,157378,157379],{},"会导入模块和第三方包。",[32,157381,157382],{},"会创建简单包结构。",[14,157384,157385],{},"项目能力：",[1696,157387,157388,157391,157394,157397,157400],{},[32,157389,157390],{},"能把代码拆成函数。",[32,157392,157393],{},"能把数据保存到文件。",[32,157395,157396],{},"能处理用户输入错误。",[32,157398,157399],{},"能写一个完整菜单程序。",[32,157401,157402],{},"能用 pyecharts 生成图表。",[18,157404,157406],{"id":157405},"_1211-推荐练习顺序","12.11 推荐练习顺序",[1696,157408,157409,157412,157415,157418,157421,157424,157427,157430],{},[32,157410,157411],{},"猜数字游戏。",[32,157413,157414],{},"ATM 菜单程序。",[32,157416,157417],{},"学生成绩统计。",[32,157419,157420],{},"学生管理系统函数版。",[32,157422,157423],{},"学生管理系统文件持久化版。",[32,157425,157426],{},"学生管理系统面向对象版。",[32,157428,157429],{},"销售数据统计。",[32,157431,157432],{},"销售数据可视化。",[18,157434,157436],{"id":157435},"_1212-常见学习误区","12.12 常见学习误区",[1696,157438,157439,157442,157445,157448,157451,157454,157457],{},[32,157440,157441],{},"只看视频不敲代码。",[32,157443,157444],{},"一报错就复制错误去搜，不先读报错位置。",[32,157446,157447],{},"变量名随便写，后续自己看不懂。",[32,157449,157450],{},"所有代码都写在一个文件一个函数里。",[32,157452,157453],{},"不保存练习代码，复习时没有材料。",[32,157455,157456],{},"还没掌握列表字典就急着学框架。",[32,157458,157459],{},"不会读官方文档，只依赖教程。",[18,157461,157463],{"id":157462},"_1213-如何读报错","12.13 如何读报错",[14,157465,157466],{},"报错通常从下往上看最后几行。",[14,157468,17783],{},[42,157470,157473],{"className":157471,"code":157472,"language":8154,"meta":47},[8152],"ValueError: invalid literal for int() with base 10: 'abc'\n",[49,157474,157472],{"__ignoreMap":47},[14,157476,27249],{},[1696,157478,157479,157485,157495],{},[32,157480,157481,157482,31035],{},"异常类型是 ",[49,157483,157484],{},"ValueError",[32,157486,109995,157487,157490,157491,157494],{},[49,157488,157489],{},"int()"," 无法把 ",[49,157492,157493],{},"'abc'"," 转成整数。",[32,157496,157497],{},"应该检查输入内容或增加异常处理。",[14,157499,157500],{},"再看文件名和行号：",[42,157502,157505],{"className":157503,"code":157504,"language":8154,"meta":47},[8152],"File \"main.py\", line 10, in \u003Cmodule>\n",[49,157506,157504],{"__ignoreMap":47},[14,157508,157509,157510,157512],{},"表示错误发生在 ",[49,157511,157257],{}," 第 10 行。",[18,157514,157516],{"id":157515},"_1214-后续学习方向","12.14 后续学习方向",[14,157518,157519],{},"Python 基础完成后，可以按兴趣选择方向：",[1696,157521,157522,157534,157543,157555,157566,157575,157585],{},[32,157523,157524,157525,3426,157528,3426,157531,31035],{},"自动化办公：",[49,157526,157527],{},"openpyxl",[49,157529,157530],{},"python-docx",[49,157532,157533],{},"pdfplumber",[32,157535,157536,157537,3426,157539,3426,157541,31035],{},"数据分析：",[49,157538,103276],{},[49,157540,148835],{},[49,157542,148843],{},[32,157544,157545,157546,3426,157549,3426,157552,31035],{},"Web 后端：",[49,157547,157548],{},"Flask",[49,157550,157551],{},"FastAPI",[49,157553,157554],{},"Django",[32,157556,157557,157558,3426,157560,3426,157563,31035],{},"爬虫：",[49,157559,148820],{},[49,157561,157562],{},"BeautifulSoup",[49,157564,157565],{},"Scrapy",[32,157567,157568,157569,3426,157571,157574],{},"测试开发：",[49,157570,148867],{},[49,157572,157573],{},"selenium","、接口测试。",[32,157576,157577,157578,3426,157580,3426,157582,31035],{},"人工智能：",[49,157579,103276],{},[49,157581,148835],{},[49,157583,157584],{},"pytorch",[32,157586,157587,157588,3426,157590,3426,157593,31035],{},"运维脚本：",[49,157589,148436],{},[49,157591,157592],{},"subprocess",[49,157594,157595],{},"paramiko",[14,157597,157598],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[18,157600,157602],{"id":157601},"_1215-结课练习","12.15 结课练习",[1696,157604,157605,157608,157611,157614,157617,157620,157623,157626],{},[32,157606,157607],{},"完成函数版学生管理系统。",[32,157609,157610],{},"给学生管理系统增加 JSON 持久化。",[32,157612,157613],{},"给学生管理系统增加异常处理。",[32,157615,157616],{},"把学生管理系统改成面向对象版。",[32,157618,157619],{},"使用 pyecharts 绘制学生成绩柱状图。",[32,157621,157622],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[32,157624,157625],{},"按品类统计销售额并绘制柱状图。",[32,157627,157628],{},"写一份自己的 Python 学习路线图。",[3141,157630,157631],{},"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":47,"searchDepth":66,"depth":66,"links":157633},[157634,157635,157638,157639,157640,157646,157647,157648,157649,157650,157651,157652,157653,157654,157655],{"id":154350,"depth":66,"text":154351},{"id":154400,"depth":66,"text":154401,"children":157636},[157637],{"id":154404,"depth":83,"text":154405},{"id":154443,"depth":66,"text":154444},{"id":155917,"depth":66,"text":155918},{"id":156255,"depth":66,"text":156256,"children":157641},[157642,157643,157644,157645],{"id":156259,"depth":83,"text":156260},{"id":156399,"depth":83,"text":156400},{"id":156489,"depth":83,"text":156490},{"id":156575,"depth":83,"text":156576},{"id":156616,"depth":66,"text":156617},{"id":156809,"depth":66,"text":156810},{"id":157046,"depth":66,"text":157047},{"id":157237,"depth":66,"text":157238},{"id":157279,"depth":66,"text":157280},{"id":157405,"depth":66,"text":157406},{"id":157435,"depth":66,"text":157436},{"id":157462,"depth":66,"text":157463},{"id":157515,"depth":66,"text":157516},{"id":157601,"depth":66,"text":157602},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":154342,"description":26025},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":157662,"title":157663,"body":157664,"description":26025,"extension":3153,"meta":160133,"navigation":122,"path":160134,"seo":160135,"stem":160136,"__hash__":160137},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":157665,"toc":160108},[157666,157669,157673,157676,157679,157699,157702,157725,157728,157731,157753,157756,157778,157782,157785,157825,157828,157949,157953,157956,157996,157999,158023,158026,158030,158033,158047,158080,158083,158118,158121,158144,158147,158180,158183,158185,158191,158266,158269,158275,158292,158332,158336,158339,158385,158387,158425,158428,158463,158466,158501,158504,158536,158539,158558,158562,158566,158679,158681,158756,158760,158806,158809,158835,158844,158848,158851,158914,158922,158950,158954,158994,159059,159063,159066,159105,159108,159153,159156,159217,159221,159248,159251,159279,159282,159286,159290,159355,159358,159396,159399,159431,159435,159534,159538,159541,159614,159617,159665,159669,159675,159715,159718,159765,159768,159817,159821,159823,159837,159839,160020,160024,160051,160071,160078,160082,160099,160105],[10,157667,157663],{"id":157668},"_2-基础语法变量与字符串",[18,157670,157672],{"id":157671},"_21-注释","2.1 注释",[14,157674,157675],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,157677,157678],{},"单行注释：",[42,157680,157682],{"className":33028,"code":157681,"language":33030,"meta":47,"style":47},"# 这是单行注释\nprint(\"hello\")\n",[49,157683,157684,157689],{"__ignoreMap":47},[52,157685,157686],{"class":54,"line":55},[52,157687,157688],{"class":94},"# 这是单行注释\n",[52,157690,157691,157693,157695,157697],{"class":54,"line":66},[52,157692,33065],{"class":308},[52,157694,1216],{"class":79},[52,157696,8809],{"class":62},[52,157698,708],{"class":79},[14,157700,157701],{},"多行说明常用三引号：",[42,157703,157705],{"className":33028,"code":157704,"language":33030,"meta":47,"style":47},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[49,157706,157707,157711,157716,157721],{"__ignoreMap":47},[52,157708,157709],{"class":54,"line":55},[52,157710,98348],{"class":62},[52,157712,157713],{"class":54,"line":66},[52,157714,157715],{"class":62},"这是多行说明。\n",[52,157717,157718],{"class":54,"line":83},[52,157719,157720],{"class":62},"常用于文件顶部说明、函数说明等。\n",[52,157722,157723],{"class":54,"line":91},[52,157724,98348],{"class":62},[14,157726,157727],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,157729,157730],{},"不好：",[42,157732,157734],{"className":33028,"code":157733,"language":33030,"meta":47,"style":47},"# age 加 1\nage = age + 1\n",[49,157735,157736,157741],{"__ignoreMap":47},[52,157737,157738],{"class":54,"line":55},[52,157739,157740],{"class":94},"# age 加 1\n",[52,157742,157743,157745,157747,157749,157751],{"class":54,"line":66},[52,157744,149196],{"class":79},[52,157746,292],{"class":58},[52,157748,18355],{"class":79},[52,157750,2004],{"class":58},[52,157752,58349],{"class":308},[14,157754,157755],{},"较好：",[42,157757,157759],{"className":33028,"code":157758,"language":33030,"meta":47,"style":47},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[49,157760,157761,157766],{"__ignoreMap":47},[52,157762,157763],{"class":54,"line":55},[52,157764,157765],{"class":94},"# 用户过完生日后，年龄增加一岁\n",[52,157767,157768,157770,157772,157774,157776],{"class":54,"line":66},[52,157769,149196],{"class":79},[52,157771,292],{"class":58},[52,157773,18355],{"class":79},[52,157775,2004],{"class":58},[52,157777,58349],{"class":308},[18,157779,157781],{"id":157780},"_22-字面量","2.2 字面量",[14,157783,157784],{},"字面量就是代码中直接写出来的数据。",[42,157786,157788],{"className":33028,"code":157787,"language":33030,"meta":47,"style":47},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[49,157789,157790,157797,157804,157811,157818],{"__ignoreMap":47},[52,157791,157792,157794],{"class":54,"line":55},[52,157793,591],{"class":308},[52,157795,157796],{"class":94},"          # 整数\n",[52,157798,157799,157801],{"class":54,"line":66},[52,157800,3270],{"class":308},[52,157802,157803],{"class":94},"         # 小数\n",[52,157805,157806,157808],{"class":54,"line":83},[52,157807,8809],{"class":62},[52,157809,157810],{"class":94},"      # 字符串\n",[52,157812,157813,157815],{"class":54,"line":91},[52,157814,34126],{"class":308},[52,157816,157817],{"class":94},"         # 布尔值\n",[52,157819,157820,157822],{"class":54,"line":98},[52,157821,98336],{"class":308},[52,157823,157824],{"class":94},"         # 空值\n",[14,157826,157827],{},"常见字面量类型：",[3353,157829,157830,157840],{},[3356,157831,157832],{},[3359,157833,157834,157836,157838],{},[3362,157835,26386],{},[3362,157837,30142],{},[3362,157839,28519],{},[3399,157841,157842,157853,157864,157875,157887,157899,157911,157924,157936],{},[3359,157843,157844,157846,157850],{},[3404,157845,242],{},[3404,157847,157848],{},[49,157849,591],{},[3404,157851,157852],{},"整数",[3359,157854,157855,157857,157861],{},[3404,157856,3262],{},[3404,157858,157859],{},[49,157860,3270],{},[3404,157862,157863],{},"浮点数",[3359,157865,157866,157868,157872],{},[3404,157867,4350],{},[3404,157869,157870],{},[49,157871,8809],{},[3404,157873,157874],{},"字符串",[3359,157876,157877,157879,157885],{},[3404,157878,4402],{},[3404,157880,157881,3426,157883],{},[49,157882,34126],{},[49,157884,36637],{},[3404,157886,68665],{},[3359,157888,157889,157892,157896],{},[3404,157890,157891],{},"NoneType",[3404,157893,157894],{},[49,157895,98336],{},[3404,157897,157898],{},"空值",[3359,157900,157901,157903,157908],{},[3404,157902,156720],{},[3404,157904,157905],{},[49,157906,157907],{},"[1, 2, 3]",[3404,157909,157910],{},"列表",[3359,157912,157913,157916,157921],{},[3404,157914,157915],{},"tuple",[3404,157917,157918],{},[49,157919,157920],{},"(1, 2, 3)",[3404,157922,157923],{},"元组",[3359,157925,157926,157928,157933],{},[3404,157927,117196],{},[3404,157929,157930],{},[49,157931,157932],{},"{\"name\": \"张三\"}",[3404,157934,157935],{},"字典",[3359,157937,157938,157941,157946],{},[3404,157939,157940],{},"set",[3404,157942,157943],{},[49,157944,157945],{},"{1, 2, 3}",[3404,157947,157948],{},"集合",[18,157950,157952],{"id":157951},"_23-变量","2.3 变量",[14,157954,157955],{},"变量是保存数据的名字。",[42,157957,157959],{"className":33028,"code":157958,"language":33030,"meta":47,"style":47},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[49,157960,157961,157969,157977,157987],{"__ignoreMap":47},[52,157962,157963,157965,157967],{"class":54,"line":55},[52,157964,149186],{"class":79},[52,157966,292],{"class":58},[52,157968,152003],{"class":62},[52,157970,157971,157973,157975],{"class":54,"line":66},[52,157972,149196],{"class":79},[52,157974,292],{"class":58},[52,157976,149201],{"class":308},[52,157978,157979,157982,157984],{"class":54,"line":83},[52,157980,157981],{"class":79},"height ",[52,157983,292],{"class":58},[52,157985,157986],{"class":308}," 1.75\n",[52,157988,157989,157992,157994],{"class":54,"line":91},[52,157990,157991],{"class":79},"is_student ",[52,157993,292],{"class":58},[52,157995,156249],{"class":308},[14,157997,157998],{},"Python 的变量不需要提前声明类型：",[42,158000,158002],{"className":33028,"code":158001,"language":33030,"meta":47,"style":47},"score = 100\nscore = \"满分\"\n",[49,158003,158004,158014],{"__ignoreMap":47},[52,158005,158006,158009,158011],{"class":54,"line":55},[52,158007,158008],{"class":79},"score ",[52,158010,292],{"class":58},[52,158012,158013],{"class":308}," 100\n",[52,158015,158016,158018,158020],{"class":54,"line":66},[52,158017,158008],{"class":79},[52,158019,292],{"class":58},[52,158021,158022],{"class":62}," \"满分\"\n",[14,158024,158025],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[18,158027,158029],{"id":158028},"_24-变量命名规则","2.4 变量命名规则",[14,158031,158032],{},"硬性规则：",[1696,158034,158035,158038,158041,158044],{},[32,158036,158037],{},"只能由字母、数字、下划线组成。",[32,158039,158040],{},"不能以数字开头。",[32,158042,158043],{},"不能使用 Python 关键字。",[32,158045,158046],{},"区分大小写。",[42,158048,158050],{"className":33028,"code":158049,"language":33030,"meta":47,"style":47},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[49,158051,158052,158061,158070],{"__ignoreMap":47},[52,158053,158054,158057,158059],{"class":54,"line":55},[52,158055,158056],{"class":79},"user_name ",[52,158058,292],{"class":58},[52,158060,149191],{"class":62},[52,158062,158063,158066,158068],{"class":54,"line":66},[52,158064,158065],{"class":79},"age2 ",[52,158067,292],{"class":58},[52,158069,149201],{"class":308},[52,158071,158072,158075,158077],{"class":54,"line":83},[52,158073,158074],{"class":79},"_token ",[52,158076,292],{"class":58},[52,158078,158079],{"class":62}," \"abc\"\n",[14,158081,158082],{},"错误写法：",[42,158084,158086],{"className":33028,"code":158085,"language":33030,"meta":47,"style":47},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[49,158087,158088,158097,158109],{"__ignoreMap":47},[52,158089,158090,158093,158095],{"class":54,"line":55},[52,158091,158092],{"class":80053},"2age",[52,158094,16212],{"class":58},[52,158096,149201],{"class":308},[52,158098,158099,158101,158103,158105,158107],{"class":54,"line":66},[52,158100,134234],{"class":79},[52,158102,2642],{"class":58},[52,158104,149186],{"class":79},[52,158106,292],{"class":58},[52,158108,149191],{"class":62},[52,158110,158111,158113,158115],{"class":54,"line":83},[52,158112,17342],{"class":58},[52,158114,16212],{"class":58},[52,158116,158117],{"class":62}," \"一班\"\n",[14,158119,158120],{},"查看关键字：",[42,158122,158124],{"className":33028,"code":158123,"language":33030,"meta":47,"style":47},"import keyword\n\nprint(keyword.kwlist)\n",[49,158125,158126,158133,158137],{"__ignoreMap":47},[52,158127,158128,158130],{"class":54,"line":55},[52,158129,33042],{"class":58},[52,158131,158132],{"class":79}," keyword\n",[52,158134,158135],{"class":54,"line":66},[52,158136,123],{"emptyLinePlaceholder":122},[52,158138,158139,158141],{"class":54,"line":83},[52,158140,33065],{"class":308},[52,158142,158143],{"class":79},"(keyword.kwlist)\n",[14,158145,158146],{},"推荐命名风格：",[42,158148,158150],{"className":33028,"code":158149,"language":33030,"meta":47,"style":47},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[49,158151,158152,158161,158171],{"__ignoreMap":47},[52,158153,158154,158157,158159],{"class":54,"line":55},[52,158155,158156],{"class":79},"student_name ",[52,158158,292],{"class":58},[52,158160,152003],{"class":62},[52,158162,158163,158166,158168],{"class":54,"line":66},[52,158164,158165],{"class":79},"total_price ",[52,158167,292],{"class":58},[52,158169,158170],{"class":308}," 99.8\n",[52,158172,158173,158176,158178],{"class":54,"line":83},[52,158174,158175],{"class":79},"is_finished ",[52,158177,292],{"class":58},[52,158179,128457],{"class":308},[14,158181,158182],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[18,158184,53382],{"id":53381},[14,158186,107016,158187,158190],{},[49,158188,158189],{},"type()"," 查看数据类型：",[42,158192,158194],{"className":33028,"code":158193,"language":33030,"meta":47,"style":47},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[49,158195,158196,158210,158224,158238,158252],{"__ignoreMap":47},[52,158197,158198,158200,158202,158204,158206,158208],{"class":54,"line":55},[52,158199,33065],{"class":308},[52,158201,1216],{"class":79},[52,158203,105757],{"class":308},[52,158205,1216],{"class":79},[52,158207,591],{"class":308},[52,158209,33147],{"class":79},[52,158211,158212,158214,158216,158218,158220,158222],{"class":54,"line":66},[52,158213,33065],{"class":308},[52,158215,1216],{"class":79},[52,158217,105757],{"class":308},[52,158219,1216],{"class":79},[52,158221,3270],{"class":308},[52,158223,33147],{"class":79},[52,158225,158226,158228,158230,158232,158234,158236],{"class":54,"line":83},[52,158227,33065],{"class":308},[52,158229,1216],{"class":79},[52,158231,105757],{"class":308},[52,158233,1216],{"class":79},[52,158235,8809],{"class":62},[52,158237,33147],{"class":79},[52,158239,158240,158242,158244,158246,158248,158250],{"class":54,"line":91},[52,158241,33065],{"class":308},[52,158243,1216],{"class":79},[52,158245,105757],{"class":308},[52,158247,1216],{"class":79},[52,158249,34126],{"class":308},[52,158251,33147],{"class":79},[52,158253,158254,158256,158258,158260,158262,158264],{"class":54,"line":98},[52,158255,33065],{"class":308},[52,158257,1216],{"class":79},[52,158259,105757],{"class":308},[52,158261,1216],{"class":79},[52,158263,98336],{"class":308},[52,158265,33147],{"class":79},[14,158267,158268],{},"输出类似：",[42,158270,158273],{"className":158271,"code":158272,"language":8154,"meta":47},[8152],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[49,158274,158272],{"__ignoreMap":47},[14,158276,1453,158277,109933,158279,158281,158282,158284,158285,24148,158287,158284,158289,158291],{},[49,158278,4402],{},[49,158280,242],{}," 的子类，",[49,158283,34126],{}," 可以当作 ",[49,158286,629],{},[49,158288,36637],{},[49,158290,692],{},"，但业务代码中不要滥用。",[42,158293,158295],{"className":33028,"code":158294,"language":33030,"meta":47,"style":47},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[49,158296,158297,158315],{"__ignoreMap":47},[52,158298,158299,158301,158303,158305,158307,158309,158312],{"class":54,"line":55},[52,158300,33065],{"class":308},[52,158302,1216],{"class":79},[52,158304,34126],{"class":308},[52,158306,48216],{"class":58},[52,158308,27768],{"class":308},[52,158310,158311],{"class":79},")   ",[52,158313,158314],{"class":94},"# 2\n",[52,158316,158317,158319,158321,158323,158325,158327,158329],{"class":54,"line":66},[52,158318,33065],{"class":308},[52,158320,1216],{"class":79},[52,158322,36637],{"class":308},[52,158324,48216],{"class":58},[52,158326,27768],{"class":308},[52,158328,48458],{"class":79},[52,158330,158331],{"class":94},"# 1\n",[18,158333,158335],{"id":158334},"_26-类型转换","2.6 类型转换",[14,158337,158338],{},"常用转换函数：",[42,158340,158342],{"className":33028,"code":158341,"language":33030,"meta":47,"style":47},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[49,158343,158344,158354,158365,158375],{"__ignoreMap":47},[52,158345,158346,158348,158350,158352],{"class":54,"line":55},[52,158347,242],{"class":308},[52,158349,1216],{"class":79},[52,158351,56966],{"class":62},[52,158353,708],{"class":79},[52,158355,158356,158358,158360,158363],{"class":54,"line":66},[52,158357,3262],{"class":308},[52,158359,1216],{"class":79},[52,158361,158362],{"class":62},"\"3.14\"",[52,158364,708],{"class":79},[52,158366,158367,158369,158371,158373],{"class":54,"line":83},[52,158368,4350],{"class":308},[52,158370,1216],{"class":79},[52,158372,591],{"class":308},[52,158374,708],{"class":79},[52,158376,158377,158379,158381,158383],{"class":54,"line":91},[52,158378,4402],{"class":308},[52,158380,1216],{"class":79},[52,158382,629],{"class":308},[52,158384,708],{"class":79},[14,158386,17783],{},[42,158388,158390],{"className":33028,"code":158389,"language":33030,"meta":47,"style":47},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[49,158391,158392,158401,158412],{"__ignoreMap":47},[52,158393,158394,158396,158398],{"class":54,"line":55},[52,158395,149196],{"class":79},[52,158397,292],{"class":58},[52,158399,158400],{"class":62}," \"18\"\n",[52,158402,158403,158405,158407,158409],{"class":54,"line":66},[52,158404,149196],{"class":79},[52,158406,292],{"class":58},[52,158408,2280],{"class":308},[52,158410,158411],{"class":79},"(age)\n",[52,158413,158414,158416,158419,158421,158423],{"class":54,"line":83},[52,158415,33065],{"class":308},[52,158417,158418],{"class":79},"(age ",[52,158420,2004],{"class":58},[52,158422,27768],{"class":308},[52,158424,708],{"class":79},[14,158426,158427],{},"输入得到的内容永远是字符串：",[42,158429,158431],{"className":33028,"code":158430,"language":33030,"meta":47,"style":47},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[49,158432,158433,158449],{"__ignoreMap":47},[52,158434,158435,158438,158440,158442,158444,158447],{"class":54,"line":55},[52,158436,158437],{"class":79},"num ",[52,158439,292],{"class":58},[52,158441,63255],{"class":308},[52,158443,1216],{"class":79},[52,158445,158446],{"class":62},"\"请输入数字:\"",[52,158448,708],{"class":79},[52,158450,158451,158453,158455,158457,158460],{"class":54,"line":66},[52,158452,33065],{"class":308},[52,158454,1216],{"class":79},[52,158456,105757],{"class":308},[52,158458,158459],{"class":79},"(num))  ",[52,158461,158462],{"class":94},"# str\n",[14,158464,158465],{},"如果要做数学运算，必须转换：",[42,158467,158469],{"className":33028,"code":158468,"language":33030,"meta":47,"style":47},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[49,158470,158471,158489],{"__ignoreMap":47},[52,158472,158473,158475,158477,158479,158481,158483,158485,158487],{"class":54,"line":55},[52,158474,158437],{"class":79},[52,158476,292],{"class":58},[52,158478,2280],{"class":308},[52,158480,1216],{"class":79},[52,158482,56471],{"class":308},[52,158484,1216],{"class":79},[52,158486,158446],{"class":62},[52,158488,33147],{"class":79},[52,158490,158491,158493,158495,158497,158499],{"class":54,"line":66},[52,158492,33065],{"class":308},[52,158494,48269],{"class":79},[52,158496,2004],{"class":58},[52,158498,5051],{"class":308},[52,158500,708],{"class":79},[14,158502,158503],{},"常见错误：",[42,158505,158507],{"className":33028,"code":158506,"language":33030,"meta":47,"style":47},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[49,158508,158509,158522],{"__ignoreMap":47},[52,158510,158511,158513,158515,158517,158519],{"class":54,"line":55},[52,158512,242],{"class":308},[52,158514,1216],{"class":79},[52,158516,158362],{"class":62},[52,158518,158311],{"class":79},[52,158520,158521],{"class":94},"# 错误\n",[52,158523,158524,158526,158528,158531,158534],{"class":54,"line":66},[52,158525,242],{"class":308},[52,158527,1216],{"class":79},[52,158529,158530],{"class":62},"\"abc\"",[52,158532,158533],{"class":79},")    ",[52,158535,158521],{"class":94},[14,158537,158538],{},"正确写法：",[42,158540,158542],{"className":33028,"code":158541,"language":33030,"meta":47,"style":47},"num = float(\"3.14\")\n",[49,158543,158544],{"__ignoreMap":47},[52,158545,158546,158548,158550,158552,158554,158556],{"class":54,"line":55},[52,158547,158437],{"class":79},[52,158549,292],{"class":58},[52,158551,112447],{"class":308},[52,158553,1216],{"class":79},[52,158555,158362],{"class":62},[52,158557,708],{"class":79},[18,158559,158561],{"id":158560},"_27-运算符","2.7 运算符",[3195,158563,158565],{"id":158564},"_271-算术运算符","2.7.1 算术运算符",[3353,158567,158568,158579],{},[3356,158569,158570],{},[3359,158571,158572,158575,158577],{},[3362,158573,158574],{},"运算符",[3362,158576,28519],{},[3362,158578,30142],{},[3399,158580,158581,158595,158609,158623,158637,158651,158665],{},[3359,158582,158583,158587,158590],{},[3404,158584,158585],{},[49,158586,2004],{},[3404,158588,158589],{},"加法",[3404,158591,158592],{},[49,158593,158594],{},"1 + 2",[3359,158596,158597,158601,158604],{},[3404,158598,158599],{},[49,158600,2642],{},[3404,158602,158603],{},"减法",[3404,158605,158606],{},[49,158607,158608],{},"5 - 3",[3359,158610,158611,158615,158618],{},[3404,158612,158613],{},[49,158614,3053],{},[3404,158616,158617],{},"乘法",[3404,158619,158620],{},[49,158621,158622],{},"2 * 3",[3359,158624,158625,158629,158632],{},[3404,158626,158627],{},[49,158628,2340],{},[3404,158630,158631],{},"除法，结果是浮点数",[3404,158633,158634],{},[49,158635,158636],{},"5 \u002F 2",[3359,158638,158639,158643,158646],{},[3404,158640,158641],{},[49,158642,35979],{},[3404,158644,158645],{},"整除",[3404,158647,158648],{},[49,158649,158650],{},"5 \u002F\u002F 2",[3359,158652,158653,158657,158660],{},[3404,158654,158655],{},[49,158656,1998],{},[3404,158658,158659],{},"取余",[3404,158661,158662],{},[49,158663,158664],{},"5 % 2",[3359,158666,158667,158671,158674],{},[3404,158668,158669],{},[49,158670,3139],{},[3404,158672,158673],{},"幂运算",[3404,158675,158676],{},[49,158677,158678],{},"2 ** 3",[14,158680,17783],{},[42,158682,158684],{"className":33028,"code":158683,"language":33030,"meta":47,"style":47},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[49,158685,158686,158704,158721,158738],{"__ignoreMap":47},[52,158687,158688,158690,158692,158694,158697,158699,158701],{"class":54,"line":55},[52,158689,33065],{"class":308},[52,158691,1216],{"class":79},[52,158693,1805],{"class":308},[52,158695,158696],{"class":58}," \u002F",[52,158698,17403],{"class":308},[52,158700,158311],{"class":79},[52,158702,158703],{"class":94},"# 2.5\n",[52,158705,158706,158708,158710,158712,158715,158717,158719],{"class":54,"line":66},[52,158707,33065],{"class":308},[52,158709,1216],{"class":79},[52,158711,1805],{"class":308},[52,158713,158714],{"class":58}," \u002F\u002F",[52,158716,17403],{"class":308},[52,158718,48458],{"class":79},[52,158720,158314],{"class":94},[52,158722,158723,158725,158727,158729,158732,158734,158736],{"class":54,"line":83},[52,158724,33065],{"class":308},[52,158726,1216],{"class":79},[52,158728,1805],{"class":308},[52,158730,158731],{"class":58}," %",[52,158733,17403],{"class":308},[52,158735,158311],{"class":79},[52,158737,158331],{"class":94},[52,158739,158740,158742,158744,158746,158749,158751,158753],{"class":54,"line":91},[52,158741,33065],{"class":308},[52,158743,1216],{"class":79},[52,158745,564],{"class":308},[52,158747,158748],{"class":58}," **",[52,158750,80720],{"class":308},[52,158752,48458],{"class":79},[52,158754,158755],{"class":94},"# 8\n",[3195,158757,158759],{"id":158758},"_272-赋值运算符","2.7.2 赋值运算符",[42,158761,158763],{"className":33028,"code":158762,"language":33030,"meta":47,"style":47},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[49,158764,158765,158773,158781,158789,158797],{"__ignoreMap":47},[52,158766,158767,158769,158771],{"class":54,"line":55},[52,158768,158437],{"class":79},[52,158770,292],{"class":58},[52,158772,61078],{"class":308},[52,158774,158775,158777,158779],{"class":54,"line":66},[52,158776,158437],{"class":79},[52,158778,1910],{"class":58},[52,158780,57077],{"class":308},[52,158782,158783,158785,158787],{"class":54,"line":83},[52,158784,158437],{"class":79},[52,158786,152902],{"class":58},[52,158788,50373],{"class":308},[52,158790,158791,158793,158795],{"class":54,"line":91},[52,158792,158437],{"class":79},[52,158794,139798],{"class":58},[52,158796,122686],{"class":308},[52,158798,158799,158801,158804],{"class":54,"line":98},[52,158800,158437],{"class":79},[52,158802,158803],{"class":58},"\u002F=",[52,158805,50373],{"class":308},[14,158807,158808],{},"等价关系：",[42,158810,158812],{"className":33028,"code":158811,"language":33030,"meta":47,"style":47},"num += 1\nnum = num + 1\n",[49,158813,158814,158822],{"__ignoreMap":47},[52,158815,158816,158818,158820],{"class":54,"line":55},[52,158817,158437],{"class":79},[52,158819,1910],{"class":58},[52,158821,58349],{"class":308},[52,158823,158824,158826,158828,158831,158833],{"class":54,"line":66},[52,158825,158437],{"class":79},[52,158827,292],{"class":58},[52,158829,158830],{"class":79}," num ",[52,158832,2004],{"class":58},[52,158834,58349],{"class":308},[14,158836,158837,158838,103668,158841,31035],{},"Python 没有 ",[49,158839,158840],{},"num++",[49,158842,158843],{},"num--",[3195,158845,158847],{"id":158846},"_273-比较运算符","2.7.3 比较运算符",[14,158849,158850],{},"比较运算结果是布尔值。",[42,158852,158854],{"className":33028,"code":158853,"language":33030,"meta":47,"style":47},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[49,158855,158856,158870,158885,158899],{"__ignoreMap":47},[52,158857,158858,158860,158862,158864,158866,158868],{"class":54,"line":55},[52,158859,33065],{"class":308},[52,158861,1216],{"class":79},[52,158863,3649],{"class":308},[52,158865,28872],{"class":58},[52,158867,1946],{"class":308},[52,158869,708],{"class":79},[52,158871,158872,158874,158876,158878,158881,158883],{"class":54,"line":66},[52,158873,33065],{"class":308},[52,158875,1216],{"class":79},[52,158877,3649],{"class":308},[52,158879,158880],{"class":58}," >=",[52,158882,5051],{"class":308},[52,158884,708],{"class":79},[52,158886,158887,158889,158891,158893,158895,158897],{"class":54,"line":83},[52,158888,33065],{"class":308},[52,158890,1216],{"class":79},[52,158892,3649],{"class":308},[52,158894,104209],{"class":58},[52,158896,5096],{"class":308},[52,158898,708],{"class":79},[52,158900,158901,158903,158905,158907,158910,158912],{"class":54,"line":91},[52,158902,33065],{"class":308},[52,158904,1216],{"class":79},[52,158906,3649],{"class":308},[52,158908,158909],{"class":58}," !=",[52,158911,5096],{"class":308},[52,158913,708],{"class":79},[14,158915,158916,158917,158919,158920,31035],{},"注意：判断相等用 ",[49,158918,5938],{},"，赋值用 ",[49,158921,292],{},[42,158923,158925],{"className":33028,"code":158924,"language":33030,"meta":47,"style":47},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[49,158926,158927,158939],{"__ignoreMap":47},[52,158928,158929,158931,158933,158936],{"class":54,"line":55},[52,158930,149196],{"class":79},[52,158932,292],{"class":58},[52,158934,158935],{"class":308}," 18",[52,158937,158938],{"class":94},"       # 赋值\n",[52,158940,158941,158943,158945,158947],{"class":54,"line":66},[52,158942,149196],{"class":79},[52,158944,5938],{"class":58},[52,158946,158935],{"class":308},[52,158948,158949],{"class":94},"      # 判断是否相等\n",[3195,158951,158953],{"id":158952},"_274-逻辑运算符","2.7.4 逻辑运算符",[3353,158955,158956,158964],{},[3356,158957,158958],{},[3359,158959,158960,158962],{},[3362,158961,158574],{},[3362,158963,28519],{},[3399,158965,158966,158975,158984],{},[3359,158967,158968,158972],{},[3404,158969,158970],{},[49,158971,33112],{},[3404,158973,158974],{},"并且",[3359,158976,158977,158981],{},[3404,158978,158979],{},[49,158980,117740],{},[3404,158982,158983],{},"或者",[3359,158985,158986,158991],{},[3404,158987,158988],{},[49,158989,158990],{},"not",[3404,158992,158993],{},"取反",[42,158995,158997],{"className":33028,"code":158996,"language":33030,"meta":47,"style":47},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[49,158998,158999,159007,159016,159020,159035,159049],{"__ignoreMap":47},[52,159000,159001,159003,159005],{"class":54,"line":55},[52,159002,149196],{"class":79},[52,159004,292],{"class":58},[52,159006,90715],{"class":308},[52,159008,159009,159012,159014],{"class":54,"line":66},[52,159010,159011],{"class":79},"has_ticket ",[52,159013,292],{"class":58},[52,159015,156249],{"class":308},[52,159017,159018],{"class":54,"line":83},[52,159019,123],{"emptyLinePlaceholder":122},[52,159021,159022,159024,159026,159028,159030,159032],{"class":54,"line":91},[52,159023,33065],{"class":308},[52,159025,158418],{"class":79},[52,159027,4742],{"class":58},[52,159029,158935],{"class":308},[52,159031,123079],{"class":58},[52,159033,159034],{"class":79}," has_ticket)\n",[52,159036,159037,159039,159041,159043,159045,159047],{"class":54,"line":98},[52,159038,33065],{"class":308},[52,159040,158418],{"class":79},[52,159042,698],{"class":58},[52,159044,158935],{"class":308},[52,159046,116851],{"class":58},[52,159048,159034],{"class":79},[52,159050,159051,159053,159055,159057],{"class":54,"line":107},[52,159052,33065],{"class":308},[52,159054,1216],{"class":79},[52,159056,158990],{"class":58},[52,159058,159034],{"class":79},[18,159060,159062],{"id":159061},"_28-字符串定义","2.8 字符串定义",[14,159064,159065],{},"三种常见写法：",[42,159067,159069],{"className":33028,"code":159068,"language":33030,"meta":47,"style":47},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[49,159070,159071,159081,159090,159100],{"__ignoreMap":47},[52,159072,159073,159076,159078],{"class":54,"line":55},[52,159074,159075],{"class":79},"name1 ",[52,159077,292],{"class":58},[52,159079,159080],{"class":62}," '小明'\n",[52,159082,159083,159086,159088],{"class":54,"line":66},[52,159084,159085],{"class":79},"name2 ",[52,159087,292],{"class":58},[52,159089,152003],{"class":62},[52,159091,159092,159095,159097],{"class":54,"line":83},[52,159093,159094],{"class":79},"text ",[52,159096,292],{"class":58},[52,159098,159099],{"class":62}," \"\"\"这是多行字符串\n",[52,159101,159102],{"class":54,"line":91},[52,159103,159104],{"class":62},"可以换行\"\"\"\n",[14,159106,159107],{},"字符串中包含引号：",[42,159109,159111],{"className":33028,"code":159110,"language":33030,"meta":47,"style":47},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[49,159112,159113,159123,159133],{"__ignoreMap":47},[52,159114,159115,159118,159120],{"class":54,"line":55},[52,159116,159117],{"class":79},"msg ",[52,159119,292],{"class":58},[52,159121,159122],{"class":62}," \"他说:'你好'\"\n",[52,159124,159125,159128,159130],{"class":54,"line":66},[52,159126,159127],{"class":79},"msg2 ",[52,159129,292],{"class":58},[52,159131,159132],{"class":62}," '他说:\"你好\"'\n",[52,159134,159135,159138,159140,159143,159146,159149,159151],{"class":54,"line":83},[52,159136,159137],{"class":79},"msg3 ",[52,159139,292],{"class":58},[52,159141,159142],{"class":62}," \"他说:",[52,159144,159145],{"class":308},"\\\"",[52,159147,159148],{"class":62},"你好",[52,159150,159145],{"class":308},[52,159152,27783],{"class":62},[14,159154,159155],{},"常见转义字符：",[3353,159157,159158,159167],{},[3356,159159,159160],{},[3359,159161,159162,159165],{},[3362,159163,159164],{},"写法",[3362,159166,103350],{},[3399,159168,159169,159179,159188,159198,159207],{},[3359,159170,159171,159176],{},[3404,159172,159173],{},[49,159174,159175],{},"\\n",[3404,159177,159178],{},"换行",[3359,159180,159181,159185],{},[3404,159182,159183],{},[49,159184,2171],{},[3404,159186,159187],{},"制表符",[3359,159189,159190,159195],{},[3404,159191,159192],{},[49,159193,159194],{},"\\\\",[3404,159196,159197],{},"反斜杠",[3359,159199,159200,159204],{},[3404,159201,159202],{},[49,159203,159145],{},[3404,159205,159206],{},"双引号",[3359,159208,159209,159214],{},[3404,159210,159211],{},[49,159212,159213],{},"\\'",[3404,159215,159216],{},"单引号",[18,159218,159220],{"id":159219},"_29-字符串拼接","2.9 字符串拼接",[42,159222,159224],{"className":33028,"code":159223,"language":33030,"meta":47,"style":47},"name = \"小明\"\nprint(\"你好，\" + name)\n",[49,159225,159226,159234],{"__ignoreMap":47},[52,159227,159228,159230,159232],{"class":54,"line":55},[52,159229,149186],{"class":79},[52,159231,292],{"class":58},[52,159233,152003],{"class":62},[52,159235,159236,159238,159240,159243,159245],{"class":54,"line":66},[52,159237,33065],{"class":308},[52,159239,1216],{"class":79},[52,159241,159242],{"class":62},"\"你好，\"",[52,159244,48216],{"class":58},[52,159246,159247],{"class":79}," name)\n",[14,159249,159250],{},"字符串只能和字符串拼接：",[42,159252,159254],{"className":33028,"code":159253,"language":33030,"meta":47,"style":47},"age = 18\nprint(\"年龄:\" + str(age))\n",[49,159255,159256,159264],{"__ignoreMap":47},[52,159257,159258,159260,159262],{"class":54,"line":55},[52,159259,149196],{"class":79},[52,159261,292],{"class":58},[52,159263,149201],{"class":308},[52,159265,159266,159268,159270,159272,159274,159276],{"class":54,"line":66},[52,159267,33065],{"class":308},[52,159269,1216],{"class":79},[52,159271,149167],{"class":62},[52,159273,48216],{"class":58},[52,159275,76569],{"class":308},[52,159277,159278],{"class":79},"(age))\n",[14,159280,159281],{},"更推荐使用格式化字符串。",[18,159283,159285],{"id":159284},"_210-字符串格式化","2.10 字符串格式化",[3195,159287,159289],{"id":159288},"_2101-百分号格式化","2.10.1 百分号格式化",[42,159291,159293],{"className":33028,"code":159292,"language":33030,"meta":47,"style":47},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[49,159294,159295,159303,159311,159320,159324],{"__ignoreMap":47},[52,159296,159297,159299,159301],{"class":54,"line":55},[52,159298,149186],{"class":79},[52,159300,292],{"class":58},[52,159302,152003],{"class":62},[52,159304,159305,159307,159309],{"class":54,"line":66},[52,159306,149196],{"class":79},[52,159308,292],{"class":58},[52,159310,149201],{"class":308},[52,159312,159313,159315,159317],{"class":54,"line":83},[52,159314,158008],{"class":79},[52,159316,292],{"class":58},[52,159318,159319],{"class":308}," 95.5\n",[52,159321,159322],{"class":54,"line":91},[52,159323,123],{"emptyLinePlaceholder":122},[52,159325,159326,159328,159330,159333,159336,159339,159342,159345,159348,159350,159352],{"class":54,"line":98},[52,159327,33065],{"class":308},[52,159329,1216],{"class":79},[52,159331,159332],{"class":62},"\"姓名:",[52,159334,159335],{"class":308},"%s",[52,159337,159338],{"class":62}," 年龄:",[52,159340,159341],{"class":308},"%d",[52,159343,159344],{"class":62}," 分数:",[52,159346,159347],{"class":308},"%.1f",[52,159349,2844],{"class":62},[52,159351,158731],{"class":58},[52,159353,159354],{"class":79}," (name, age, score))\n",[14,159356,159357],{},"常用占位符：",[3353,159359,159360,159369],{},[3356,159361,159362],{},[3359,159363,159364,159367],{},[3362,159365,159366],{},"占位符",[3362,159368,28519],{},[3399,159370,159371,159379,159387],{},[3359,159372,159373,159377],{},[3404,159374,159375],{},[49,159376,159335],{},[3404,159378,157874],{},[3359,159380,159381,159385],{},[3404,159382,159383],{},[49,159384,159341],{},[3404,159386,157852],{},[3359,159388,159389,159394],{},[3404,159390,159391],{},[49,159392,159393],{},"%f",[3404,159395,157863],{},[14,159397,159398],{},"精度控制：",[42,159400,159402],{"className":33028,"code":159401,"language":33030,"meta":47,"style":47},"price = 12.3456\nprint(\"%.2f\" % price)\n",[49,159403,159404,159413],{"__ignoreMap":47},[52,159405,159406,159408,159410],{"class":54,"line":55},[52,159407,149331],{"class":79},[52,159409,292],{"class":58},[52,159411,159412],{"class":308}," 12.3456\n",[52,159414,159415,159417,159419,159421,159424,159426,159428],{"class":54,"line":66},[52,159416,33065],{"class":308},[52,159418,1216],{"class":79},[52,159420,2844],{"class":62},[52,159422,159423],{"class":308},"%.2f",[52,159425,2844],{"class":62},[52,159427,158731],{"class":58},[52,159429,159430],{"class":79}," price)\n",[3195,159432,159434],{"id":159433},"_2102-format方法","2.10.2 format方法",[42,159436,159438],{"className":33028,"code":159437,"language":33030,"meta":47,"style":47},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[49,159439,159440,159448,159456,159460,159479,159499],{"__ignoreMap":47},[52,159441,159442,159444,159446],{"class":54,"line":55},[52,159443,149186],{"class":79},[52,159445,292],{"class":58},[52,159447,152003],{"class":62},[52,159449,159450,159452,159454],{"class":54,"line":66},[52,159451,149196],{"class":79},[52,159453,292],{"class":58},[52,159455,149201],{"class":308},[52,159457,159458],{"class":54,"line":83},[52,159459,123],{"emptyLinePlaceholder":122},[52,159461,159462,159464,159466,159468,159470,159472,159474,159476],{"class":54,"line":91},[52,159463,33065],{"class":308},[52,159465,1216],{"class":79},[52,159467,159332],{"class":62},[52,159469,35109],{"class":308},[52,159471,159338],{"class":62},[52,159473,35109],{"class":308},[52,159475,2844],{"class":62},[52,159477,159478],{"class":79},".format(name, age))\n",[52,159480,159481,159483,159485,159487,159490,159492,159495,159497],{"class":54,"line":98},[52,159482,33065],{"class":308},[52,159484,1216],{"class":79},[52,159486,159332],{"class":62},[52,159488,159489],{"class":308},"{0}",[52,159491,159338],{"class":62},[52,159493,159494],{"class":308},"{1}",[52,159496,2844],{"class":62},[52,159498,159478],{"class":79},[52,159500,159501,159503,159505,159507,159510,159512,159515,159517,159520,159522,159524,159527,159529,159531],{"class":54,"line":107},[52,159502,33065],{"class":308},[52,159504,1216],{"class":79},[52,159506,159332],{"class":62},[52,159508,159509],{"class":308},"{name}",[52,159511,159338],{"class":62},[52,159513,159514],{"class":308},"{age}",[52,159516,2844],{"class":62},[52,159518,159519],{"class":79},".format(",[52,159521,82460],{"class":1223},[52,159523,292],{"class":58},[52,159525,159526],{"class":79},"name, ",[52,159528,72871],{"class":1223},[52,159530,292],{"class":58},[52,159532,159533],{"class":79},"age))\n",[3195,159535,159537],{"id":159536},"_2103-f-string","2.10.3 f-string",[14,159539,159540],{},"推荐写法：",[42,159542,159544],{"className":33028,"code":159543,"language":33030,"meta":47,"style":47},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[49,159545,159546,159554,159562,159570,159574],{"__ignoreMap":47},[52,159547,159548,159550,159552],{"class":54,"line":55},[52,159549,149186],{"class":79},[52,159551,292],{"class":58},[52,159553,152003],{"class":62},[52,159555,159556,159558,159560],{"class":54,"line":66},[52,159557,149196],{"class":79},[52,159559,292],{"class":58},[52,159561,149201],{"class":308},[52,159563,159564,159566,159568],{"class":54,"line":83},[52,159565,158008],{"class":79},[52,159567,292],{"class":58},[52,159569,159319],{"class":308},[52,159571,159572],{"class":54,"line":91},[52,159573,123],{"emptyLinePlaceholder":122},[52,159575,159576,159578,159580,159582,159584,159586,159588,159590,159592,159594,159596,159598,159600,159602,159605,159608,159610,159612],{"class":54,"line":98},[52,159577,33065],{"class":308},[52,159579,1216],{"class":79},[52,159581,3273],{"class":58},[52,159583,159332],{"class":62},[52,159585,383],{"class":308},[52,159587,82460],{"class":79},[52,159589,4132],{"class":308},[52,159591,159338],{"class":62},[52,159593,383],{"class":308},[52,159595,72871],{"class":79},[52,159597,4132],{"class":308},[52,159599,159344],{"class":62},[52,159601,383],{"class":308},[52,159603,159604],{"class":79},"score",[52,159606,159607],{"class":58},":.1f",[52,159609,4132],{"class":308},[52,159611,2844],{"class":62},[52,159613,708],{"class":79},[14,159615,159616],{},"表达式也可以放进去：",[42,159618,159620],{"className":33028,"code":159619,"language":33030,"meta":47,"style":47},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[49,159621,159622,159630,159638],{"__ignoreMap":47},[52,159623,159624,159626,159628],{"class":54,"line":55},[52,159625,149331],{"class":79},[52,159627,292],{"class":58},[52,159629,149336],{"class":308},[52,159631,159632,159634,159636],{"class":54,"line":66},[52,159633,149341],{"class":79},[52,159635,292],{"class":58},[52,159637,57077],{"class":308},[52,159639,159640,159642,159644,159646,159649,159651,159653,159655,159658,159660,159663],{"class":54,"line":83},[52,159641,33065],{"class":308},[52,159643,1216],{"class":79},[52,159645,3273],{"class":58},[52,159647,159648],{"class":62},"\"总价:",[52,159650,383],{"class":308},[52,159652,149331],{"class":79},[52,159654,3053],{"class":58},[52,159656,159657],{"class":79}," count",[52,159659,4132],{"class":308},[52,159661,159662],{"class":62},"元\"",[52,159664,708],{"class":79},[18,159666,159668],{"id":159667},"_211-input输入","2.11 input输入",[14,159670,159671,159674],{},[49,159672,159673],{},"input()"," 会暂停程序，等待用户输入。",[42,159676,159678],{"className":33028,"code":159677,"language":33030,"meta":47,"style":47},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[49,159679,159680,159694],{"__ignoreMap":47},[52,159681,159682,159684,159686,159688,159690,159692],{"class":54,"line":55},[52,159683,149186],{"class":79},[52,159685,292],{"class":58},[52,159687,63255],{"class":308},[52,159689,1216],{"class":79},[52,159691,155029],{"class":62},[52,159693,708],{"class":79},[52,159695,159696,159698,159700,159702,159705,159707,159709,159711,159713],{"class":54,"line":66},[52,159697,33065],{"class":308},[52,159699,1216],{"class":79},[52,159701,3273],{"class":58},[52,159703,159704],{"class":62},"\"你好，",[52,159706,383],{"class":308},[52,159708,82460],{"class":79},[52,159710,4132],{"class":308},[52,159712,2844],{"class":62},[52,159714,708],{"class":79},[14,159716,159717],{},"输入整数：",[42,159719,159721],{"className":33028,"code":159720,"language":33030,"meta":47,"style":47},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[49,159722,159723,159741],{"__ignoreMap":47},[52,159724,159725,159727,159729,159731,159733,159735,159737,159739],{"class":54,"line":55},[52,159726,149196],{"class":79},[52,159728,292],{"class":58},[52,159730,2280],{"class":308},[52,159732,1216],{"class":79},[52,159734,56471],{"class":308},[52,159736,1216],{"class":79},[52,159738,155044],{"class":62},[52,159740,33147],{"class":79},[52,159742,159743,159745,159747,159749,159752,159754,159756,159758,159761,159763],{"class":54,"line":66},[52,159744,33065],{"class":308},[52,159746,1216],{"class":79},[52,159748,3273],{"class":58},[52,159750,159751],{"class":62},"\"明年你",[52,159753,383],{"class":308},[52,159755,149196],{"class":79},[52,159757,2004],{"class":58},[52,159759,159760],{"class":308}," 1}",[52,159762,152054],{"class":62},[52,159764,708],{"class":79},[14,159766,159767],{},"输入小数：",[42,159769,159771],{"className":33028,"code":159770,"language":33030,"meta":47,"style":47},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[49,159772,159773,159792],{"__ignoreMap":47},[52,159774,159775,159777,159779,159781,159783,159785,159787,159790],{"class":54,"line":55},[52,159776,157981],{"class":79},[52,159778,292],{"class":58},[52,159780,112447],{"class":308},[52,159782,1216],{"class":79},[52,159784,56471],{"class":308},[52,159786,1216],{"class":79},[52,159788,159789],{"class":62},"\"请输入身高:\"",[52,159791,33147],{"class":79},[52,159793,159794,159796,159798,159800,159803,159805,159807,159810,159812,159815],{"class":54,"line":66},[52,159795,33065],{"class":308},[52,159797,1216],{"class":79},[52,159799,3273],{"class":58},[52,159801,159802],{"class":62},"\"身高:",[52,159804,383],{"class":308},[52,159806,27631],{"class":79},[52,159808,159809],{"class":58},":.2f",[52,159811,4132],{"class":308},[52,159813,159814],{"class":62},"米\"",[52,159816,708],{"class":79},[18,159818,159820],{"id":159819},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,159822,125942],{},[1696,159824,159825,159828,159831,159834],{},[32,159826,159827],{},"输入商品单价。",[32,159829,159830],{},"输入购买数量。",[32,159832,159833],{},"输入折扣，例如 0.8 表示八折。",[32,159835,159836],{},"输出最终金额，保留两位小数。",[14,159838,2496],{},[42,159840,159842],{"className":33028,"code":159841,"language":33030,"meta":47,"style":47},"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",[49,159843,159844,159863,159882,159902,159906,159926,159930,159953,159974,159996],{"__ignoreMap":47},[52,159845,159846,159848,159850,159852,159854,159856,159858,159861],{"class":54,"line":55},[52,159847,149331],{"class":79},[52,159849,292],{"class":58},[52,159851,112447],{"class":308},[52,159853,1216],{"class":79},[52,159855,56471],{"class":308},[52,159857,1216],{"class":79},[52,159859,159860],{"class":62},"\"请输入商品单价:\"",[52,159862,33147],{"class":79},[52,159864,159865,159867,159869,159871,159873,159875,159877,159880],{"class":54,"line":66},[52,159866,149341],{"class":79},[52,159868,292],{"class":58},[52,159870,2280],{"class":308},[52,159872,1216],{"class":79},[52,159874,56471],{"class":308},[52,159876,1216],{"class":79},[52,159878,159879],{"class":62},"\"请输入购买数量:\"",[52,159881,33147],{"class":79},[52,159883,159884,159887,159889,159891,159893,159895,159897,159900],{"class":54,"line":83},[52,159885,159886],{"class":79},"discount ",[52,159888,292],{"class":58},[52,159890,112447],{"class":308},[52,159892,1216],{"class":79},[52,159894,56471],{"class":308},[52,159896,1216],{"class":79},[52,159898,159899],{"class":62},"\"请输入折扣:\"",[52,159901,33147],{"class":79},[52,159903,159904],{"class":54,"line":91},[52,159905,123],{"emptyLinePlaceholder":122},[52,159907,159908,159911,159913,159916,159918,159921,159923],{"class":54,"line":98},[52,159909,159910],{"class":79},"total ",[52,159912,292],{"class":58},[52,159914,159915],{"class":79}," price ",[52,159917,3053],{"class":58},[52,159919,159920],{"class":79}," count ",[52,159922,3053],{"class":58},[52,159924,159925],{"class":79}," discount\n",[52,159927,159928],{"class":54,"line":107},[52,159929,123],{"emptyLinePlaceholder":122},[52,159931,159932,159934,159936,159938,159941,159943,159945,159947,159949,159951],{"class":54,"line":113},[52,159933,33065],{"class":308},[52,159935,1216],{"class":79},[52,159937,3273],{"class":58},[52,159939,159940],{"class":62},"\"商品单价:",[52,159942,383],{"class":308},[52,159944,82465],{"class":79},[52,159946,159809],{"class":58},[52,159948,4132],{"class":308},[52,159950,2844],{"class":62},[52,159952,708],{"class":79},[52,159954,159955,159957,159959,159961,159964,159966,159968,159970,159972],{"class":54,"line":119},[52,159956,33065],{"class":308},[52,159958,1216],{"class":79},[52,159960,3273],{"class":58},[52,159962,159963],{"class":62},"\"购买数量:",[52,159965,383],{"class":308},[52,159967,87084],{"class":79},[52,159969,4132],{"class":308},[52,159971,2844],{"class":62},[52,159973,708],{"class":79},[52,159975,159976,159978,159980,159982,159985,159987,159990,159992,159994],{"class":54,"line":126},[52,159977,33065],{"class":308},[52,159979,1216],{"class":79},[52,159981,3273],{"class":58},[52,159983,159984],{"class":62},"\"折扣:",[52,159986,383],{"class":308},[52,159988,159989],{"class":79},"discount",[52,159991,4132],{"class":308},[52,159993,2844],{"class":62},[52,159995,708],{"class":79},[52,159997,159998,160000,160002,160004,160007,160009,160012,160014,160016,160018],{"class":54,"line":132},[52,159999,33065],{"class":308},[52,160001,1216],{"class":79},[52,160003,3273],{"class":58},[52,160005,160006],{"class":62},"\"应付金额:",[52,160008,383],{"class":308},[52,160010,160011],{"class":79},"total",[52,160013,159809],{"class":58},[52,160015,4132],{"class":308},[52,160017,159662],{"class":62},[52,160019,708],{"class":79},[18,160021,160023],{"id":160022},"_213-易错点","2.13 易错点",[1696,160025,160026,160031,160037,160045,160048],{},[32,160027,160028,160030],{},[49,160029,159673],{}," 的结果是字符串，做运算前要转换。",[32,160032,160033,160034,31035],{},"字符串拼接时，数字要先 ",[49,160035,160036],{},"str()",[32,160038,160039,160041,160042,160044],{},[49,160040,292],{}," 是赋值，",[49,160043,5938],{}," 是比较。",[32,160046,160047],{},"Python 没有自增自减运算符。",[32,160049,160050],{},"浮点数计算可能有精度误差：",[42,160052,160054],{"className":33028,"code":160053,"language":33030,"meta":47,"style":47},"print(0.1 + 0.2)\n",[49,160055,160056],{"__ignoreMap":47},[52,160057,160058,160060,160062,160064,160066,160069],{"class":54,"line":55},[52,160059,33065],{"class":308},[52,160061,1216],{"class":79},[52,160063,88860],{"class":308},[52,160065,48216],{"class":58},[52,160067,160068],{"class":308}," 0.2",[52,160070,708],{"class":79},[14,160072,160073,160074,160077],{},"金额计算如果要求严格，可以后续学习 ",[49,160075,160076],{},"decimal"," 模块。",[18,160079,160081],{"id":160080},"_214-本章练习","2.14 本章练习",[1696,160083,160084,160087,160090,160093,160096],{},[32,160085,160086],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[32,160088,160089],{},"输入圆的半径，计算面积，保留两位小数。",[32,160091,160092],{},"输入工资和奖金，计算总收入。",[32,160094,160095],{},"输入摄氏温度，转换为华氏温度。",[32,160097,160098],{},"写一个 BMI 计算程序：",[42,160100,160103],{"className":160101,"code":160102,"language":8154,"meta":47},[8152],"BMI = 体重kg \u002F 身高m ** 2\n",[49,160104,160102],{"__ignoreMap":47},[3141,160106,160107],{},"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":47,"searchDepth":66,"depth":66,"links":160109},[160110,160111,160112,160113,160114,160115,160116,160122,160123,160124,160129,160130,160131,160132],{"id":157671,"depth":66,"text":157672},{"id":157780,"depth":66,"text":157781},{"id":157951,"depth":66,"text":157952},{"id":158028,"depth":66,"text":158029},{"id":53381,"depth":66,"text":53382},{"id":158334,"depth":66,"text":158335},{"id":158560,"depth":66,"text":158561,"children":160117},[160118,160119,160120,160121],{"id":158564,"depth":83,"text":158565},{"id":158758,"depth":83,"text":158759},{"id":158846,"depth":83,"text":158847},{"id":158952,"depth":83,"text":158953},{"id":159061,"depth":66,"text":159062},{"id":159219,"depth":66,"text":159220},{"id":159284,"depth":66,"text":159285,"children":160125},[160126,160127,160128],{"id":159288,"depth":83,"text":159289},{"id":159433,"depth":83,"text":159434},{"id":159536,"depth":83,"text":159537},{"id":159667,"depth":66,"text":159668},{"id":159819,"depth":66,"text":159820},{"id":160022,"depth":66,"text":160023},{"id":160080,"depth":66,"text":160081},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":157663,"description":26025},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":160139,"title":160140,"body":160141,"description":26025,"extension":3153,"meta":161777,"navigation":122,"path":161778,"seo":161779,"stem":161780,"__hash__":161781},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":160142,"toc":161758},[160143,160146,160150,160153,160168,160171,160199,160203,160253,160255,160271,160274,160300,160303,160307,160374,160377,160393,160397,160400,160518,160521,160528,160577,160583,160587,160590,160703,160706,160710,160714,160717,160767,160771,160774,160824,160828,160831,160869,160873,160876,160922,160925,160960,160964,160969,160972,161018,161020,161087,161091,161097,161208,161217,161221,161223,161234,161236,161402,161406,161408,161422,161424,161638,161642,161661,161678,161681,161727,161731,161755],[10,160144,160140],{"id":160145},"_3-判断语句",[18,160147,160149],{"id":160148},"_31-布尔值","3.1 布尔值",[14,160151,160152],{},"判断语句依赖布尔值：",[42,160154,160156],{"className":33028,"code":160155,"language":33030,"meta":47,"style":47},"True\nFalse\n",[49,160157,160158,160163],{"__ignoreMap":47},[52,160159,160160],{"class":54,"line":55},[52,160161,160162],{"class":308},"True\n",[52,160164,160165],{"class":54,"line":66},[52,160166,160167],{"class":308},"False\n",[14,160169,160170],{},"比较表达式会产生布尔值：",[42,160172,160174],{"className":33028,"code":160173,"language":33030,"meta":47,"style":47},"age = 18\nprint(age >= 18)  # True\n",[49,160175,160176,160184],{"__ignoreMap":47},[52,160177,160178,160180,160182],{"class":54,"line":55},[52,160179,149196],{"class":79},[52,160181,292],{"class":58},[52,160183,149201],{"class":308},[52,160185,160186,160188,160190,160192,160194,160196],{"class":54,"line":66},[52,160187,33065],{"class":308},[52,160189,158418],{"class":79},[52,160191,4742],{"class":58},[52,160193,158935],{"class":308},[52,160195,48458],{"class":79},[52,160197,160198],{"class":94},"# True\n",[18,160200,160202],{"id":160201},"_32-if基础语法","3.2 if基础语法",[42,160204,160206],{"className":33028,"code":160205,"language":33030,"meta":47,"style":47},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[49,160207,160208,160226,160230,160242],{"__ignoreMap":47},[52,160209,160210,160212,160214,160216,160218,160220,160222,160224],{"class":54,"line":55},[52,160211,149196],{"class":79},[52,160213,292],{"class":58},[52,160215,2280],{"class":308},[52,160217,1216],{"class":79},[52,160219,56471],{"class":308},[52,160221,1216],{"class":79},[52,160223,155044],{"class":62},[52,160225,33147],{"class":79},[52,160227,160228],{"class":54,"line":66},[52,160229,123],{"emptyLinePlaceholder":122},[52,160231,160232,160234,160236,160238,160240],{"class":54,"line":83},[52,160233,4578],{"class":58},[52,160235,18355],{"class":79},[52,160237,4742],{"class":58},[52,160239,158935],{"class":308},[52,160241,6718],{"class":79},[52,160243,160244,160246,160248,160251],{"class":54,"line":91},[52,160245,33949],{"class":308},[52,160247,1216],{"class":79},[52,160249,160250],{"class":62},"\"可以进入网吧\"",[52,160252,708],{"class":79},[14,160254,1453],{},[1696,160256,160257,160262,160265,160268],{},[32,160258,160259,160261],{},[49,160260,4578],{}," 后面是条件表达式。",[32,160263,160264],{},"条件后面必须写冒号。",[32,160266,160267],{},"条件成立时执行缩进代码块。",[32,160269,160270],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,160272,160273],{},"错误示例：",[42,160275,160277],{"className":33028,"code":160276,"language":33030,"meta":47,"style":47},"if age >= 18\n    print(\"可以进入\")\n",[49,160278,160279,160289],{"__ignoreMap":47},[52,160280,160281,160283,160285,160287],{"class":54,"line":55},[52,160282,4578],{"class":58},[52,160284,18355],{"class":79},[52,160286,4742],{"class":58},[52,160288,149201],{"class":308},[52,160290,160291,160293,160295,160298],{"class":54,"line":66},[52,160292,33949],{"class":308},[52,160294,1216],{"class":79},[52,160296,160297],{"class":62},"\"可以进入\"",[52,160299,708],{"class":79},[14,160301,160302],{},"缺少冒号。",[18,160304,160306],{"id":160305},"_33-if-else","3.3 if else",[42,160308,160310],{"className":33028,"code":160309,"language":33030,"meta":47,"style":47},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[49,160311,160312,160330,160334,160346,160357,160363],{"__ignoreMap":47},[52,160313,160314,160316,160318,160320,160322,160324,160326,160328],{"class":54,"line":55},[52,160315,149196],{"class":79},[52,160317,292],{"class":58},[52,160319,2280],{"class":308},[52,160321,1216],{"class":79},[52,160323,56471],{"class":308},[52,160325,1216],{"class":79},[52,160327,155044],{"class":62},[52,160329,33147],{"class":79},[52,160331,160332],{"class":54,"line":66},[52,160333,123],{"emptyLinePlaceholder":122},[52,160335,160336,160338,160340,160342,160344],{"class":54,"line":83},[52,160337,4578],{"class":58},[52,160339,18355],{"class":79},[52,160341,4742],{"class":58},[52,160343,158935],{"class":308},[52,160345,6718],{"class":79},[52,160347,160348,160350,160352,160355],{"class":54,"line":91},[52,160349,33949],{"class":308},[52,160351,1216],{"class":79},[52,160353,160354],{"class":62},"\"成年人\"",[52,160356,708],{"class":79},[52,160358,160359,160361],{"class":54,"line":98},[52,160360,4733],{"class":58},[52,160362,6718],{"class":79},[52,160364,160365,160367,160369,160372],{"class":54,"line":107},[52,160366,33949],{"class":308},[52,160368,1216],{"class":79},[52,160370,160371],{"class":62},"\"未成年人\"",[52,160373,708],{"class":79},[14,160375,160376],{},"执行逻辑：",[1696,160378,160379,160385,160390],{},[32,160380,160381,160382,160384],{},"条件成立，执行 ",[49,160383,4578],{}," 代码块。",[32,160386,160387,160388,160384],{},"条件不成立，执行 ",[49,160389,4733],{},[32,160391,160392],{},"两个代码块只会执行其中一个。",[18,160394,160396],{"id":160395},"_34-if-elif-else","3.4 if elif else",[14,160398,160399],{},"多条件判断：",[42,160401,160403],{"className":33028,"code":160402,"language":33030,"meta":47,"style":47},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[49,160404,160405,160423,160427,160441,160452,160466,160477,160490,160501,160507],{"__ignoreMap":47},[52,160406,160407,160409,160411,160413,160415,160417,160419,160421],{"class":54,"line":55},[52,160408,158008],{"class":79},[52,160410,292],{"class":58},[52,160412,2280],{"class":308},[52,160414,1216],{"class":79},[52,160416,56471],{"class":308},[52,160418,1216],{"class":79},[52,160420,155059],{"class":62},[52,160422,33147],{"class":79},[52,160424,160425],{"class":54,"line":66},[52,160426,123],{"emptyLinePlaceholder":122},[52,160428,160429,160431,160434,160436,160439],{"class":54,"line":83},[52,160430,4578],{"class":58},[52,160432,160433],{"class":79}," score ",[52,160435,4742],{"class":58},[52,160437,160438],{"class":308}," 90",[52,160440,6718],{"class":79},[52,160442,160443,160445,160447,160450],{"class":54,"line":91},[52,160444,33949],{"class":308},[52,160446,1216],{"class":79},[52,160448,160449],{"class":62},"\"优秀\"",[52,160451,708],{"class":79},[52,160453,160454,160457,160459,160461,160464],{"class":54,"line":98},[52,160455,160456],{"class":58},"elif",[52,160458,160433],{"class":79},[52,160460,4742],{"class":58},[52,160462,160463],{"class":308}," 80",[52,160465,6718],{"class":79},[52,160467,160468,160470,160472,160475],{"class":54,"line":107},[52,160469,33949],{"class":308},[52,160471,1216],{"class":79},[52,160473,160474],{"class":62},"\"良好\"",[52,160476,708],{"class":79},[52,160478,160479,160481,160483,160485,160488],{"class":54,"line":113},[52,160480,160456],{"class":58},[52,160482,160433],{"class":79},[52,160484,4742],{"class":58},[52,160486,160487],{"class":308}," 60",[52,160489,6718],{"class":79},[52,160491,160492,160494,160496,160499],{"class":54,"line":119},[52,160493,33949],{"class":308},[52,160495,1216],{"class":79},[52,160497,160498],{"class":62},"\"及格\"",[52,160500,708],{"class":79},[52,160502,160503,160505],{"class":54,"line":126},[52,160504,4733],{"class":58},[52,160506,6718],{"class":79},[52,160508,160509,160511,160513,160516],{"class":54,"line":132},[52,160510,33949],{"class":308},[52,160512,1216],{"class":79},[52,160514,160515],{"class":62},"\"不及格\"",[52,160517,708],{"class":79},[14,160519,160520],{},"注意判断顺序很重要。",[14,160522,160523,160524,160527],{},"如果把 ",[49,160525,160526],{},"score >= 60"," 放在最前面：",[42,160529,160531],{"className":33028,"code":160530,"language":33030,"meta":47,"style":47},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[49,160532,160533,160545,160555,160567],{"__ignoreMap":47},[52,160534,160535,160537,160539,160541,160543],{"class":54,"line":55},[52,160536,4578],{"class":58},[52,160538,160433],{"class":79},[52,160540,4742],{"class":58},[52,160542,160487],{"class":308},[52,160544,6718],{"class":79},[52,160546,160547,160549,160551,160553],{"class":54,"line":66},[52,160548,33949],{"class":308},[52,160550,1216],{"class":79},[52,160552,160498],{"class":62},[52,160554,708],{"class":79},[52,160556,160557,160559,160561,160563,160565],{"class":54,"line":83},[52,160558,160456],{"class":58},[52,160560,160433],{"class":79},[52,160562,4742],{"class":58},[52,160564,160438],{"class":308},[52,160566,6718],{"class":79},[52,160568,160569,160571,160573,160575],{"class":54,"line":91},[52,160570,33949],{"class":308},[52,160572,1216],{"class":79},[52,160574,160449],{"class":62},[52,160576,708],{"class":79},[14,160578,160579,160580,160582],{},"成绩 95 会先满足 ",[49,160581,160526],{},"，后面的优秀分支就不会执行。",[18,160584,160586],{"id":160585},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,160588,160589],{},"嵌套判断就是在一个判断内部再写判断。",[42,160591,160593],{"className":33028,"code":160592,"language":33030,"meta":47,"style":47},"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",[49,160594,160595,160613,160628,160632,160644,160658,160668,160675,160686,160692],{"__ignoreMap":47},[52,160596,160597,160599,160601,160603,160605,160607,160609,160611],{"class":54,"line":55},[52,160598,149196],{"class":79},[52,160600,292],{"class":58},[52,160602,2280],{"class":308},[52,160604,1216],{"class":79},[52,160606,56471],{"class":308},[52,160608,1216],{"class":79},[52,160610,155044],{"class":62},[52,160612,33147],{"class":79},[52,160614,160615,160617,160619,160621,160623,160626],{"class":54,"line":66},[52,160616,159011],{"class":79},[52,160618,292],{"class":58},[52,160620,63255],{"class":308},[52,160622,1216],{"class":79},[52,160624,160625],{"class":62},"\"是否有票(y\u002Fn):\"",[52,160627,708],{"class":79},[52,160629,160630],{"class":54,"line":83},[52,160631,123],{"emptyLinePlaceholder":122},[52,160633,160634,160636,160638,160640,160642],{"class":54,"line":91},[52,160635,4578],{"class":58},[52,160637,18355],{"class":79},[52,160639,4742],{"class":58},[52,160641,158935],{"class":308},[52,160643,6718],{"class":79},[52,160645,160646,160648,160651,160653,160656],{"class":54,"line":98},[52,160647,6088],{"class":58},[52,160649,160650],{"class":79}," has_ticket ",[52,160652,5938],{"class":58},[52,160654,160655],{"class":62}," \"y\"",[52,160657,6718],{"class":79},[52,160659,160660,160662,160664,160666],{"class":54,"line":107},[52,160661,35101],{"class":308},[52,160663,1216],{"class":79},[52,160665,160297],{"class":62},[52,160667,708],{"class":79},[52,160669,160670,160673],{"class":54,"line":113},[52,160671,160672],{"class":58},"    else",[52,160674,6718],{"class":79},[52,160676,160677,160679,160681,160684],{"class":54,"line":119},[52,160678,35101],{"class":308},[52,160680,1216],{"class":79},[52,160682,160683],{"class":62},"\"请先买票\"",[52,160685,708],{"class":79},[52,160687,160688,160690],{"class":54,"line":126},[52,160689,4733],{"class":58},[52,160691,6718],{"class":79},[52,160693,160694,160696,160698,160701],{"class":54,"line":132},[52,160695,33949],{"class":308},[52,160697,1216],{"class":79},[52,160699,160700],{"class":62},"\"未成年人禁止进入\"",[52,160702,708],{"class":79},[14,160704,160705],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[18,160707,160709],{"id":160708},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[3195,160711,160713],{"id":160712},"_361-and","3.6.1 and",[14,160715,160716],{},"两个条件都成立才成立。",[42,160718,160720],{"className":33028,"code":160719,"language":33030,"meta":47,"style":47},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[49,160721,160722,160730,160738,160742,160757],{"__ignoreMap":47},[52,160723,160724,160726,160728],{"class":54,"line":55},[52,160725,149196],{"class":79},[52,160727,292],{"class":58},[52,160729,90715],{"class":308},[52,160731,160732,160734,160736],{"class":54,"line":66},[52,160733,159011],{"class":79},[52,160735,292],{"class":58},[52,160737,156249],{"class":308},[52,160739,160740],{"class":54,"line":83},[52,160741,123],{"emptyLinePlaceholder":122},[52,160743,160744,160746,160748,160750,160752,160754],{"class":54,"line":91},[52,160745,4578],{"class":58},[52,160747,18355],{"class":79},[52,160749,4742],{"class":58},[52,160751,158935],{"class":308},[52,160753,123079],{"class":58},[52,160755,160756],{"class":79}," has_ticket:\n",[52,160758,160759,160761,160763,160765],{"class":54,"line":98},[52,160760,33949],{"class":308},[52,160762,1216],{"class":79},[52,160764,160297],{"class":62},[52,160766,708],{"class":79},[3195,160768,160770],{"id":160769},"_362-or","3.6.2 or",[14,160772,160773],{},"只要一个条件成立就成立。",[42,160775,160777],{"className":33028,"code":160776,"language":33030,"meta":47,"style":47},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[49,160778,160779,160788,160797,160801,160813],{"__ignoreMap":47},[52,160780,160781,160784,160786],{"class":54,"line":55},[52,160782,160783],{"class":79},"is_vip ",[52,160785,292],{"class":58},[52,160787,128457],{"class":308},[52,160789,160790,160793,160795],{"class":54,"line":66},[52,160791,160792],{"class":79},"coupon ",[52,160794,292],{"class":58},[52,160796,156249],{"class":308},[52,160798,160799],{"class":54,"line":83},[52,160800,123],{"emptyLinePlaceholder":122},[52,160802,160803,160805,160808,160810],{"class":54,"line":91},[52,160804,4578],{"class":58},[52,160806,160807],{"class":79}," is_vip ",[52,160809,117740],{"class":58},[52,160811,160812],{"class":79}," coupon:\n",[52,160814,160815,160817,160819,160822],{"class":54,"line":98},[52,160816,33949],{"class":308},[52,160818,1216],{"class":79},[52,160820,160821],{"class":62},"\"可以享受优惠\"",[52,160823,708],{"class":79},[3195,160825,160827],{"id":160826},"_363-not","3.6.3 not",[14,160829,160830],{},"取反。",[42,160832,160834],{"className":33028,"code":160833,"language":33030,"meta":47,"style":47},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[49,160835,160836,160845,160849,160858],{"__ignoreMap":47},[52,160837,160838,160841,160843],{"class":54,"line":55},[52,160839,160840],{"class":79},"is_closed ",[52,160842,292],{"class":58},[52,160844,128457],{"class":308},[52,160846,160847],{"class":54,"line":66},[52,160848,123],{"emptyLinePlaceholder":122},[52,160850,160851,160853,160855],{"class":54,"line":83},[52,160852,4578],{"class":58},[52,160854,41580],{"class":58},[52,160856,160857],{"class":79}," is_closed:\n",[52,160859,160860,160862,160864,160867],{"class":54,"line":91},[52,160861,33949],{"class":308},[52,160863,1216],{"class":79},[52,160865,160866],{"class":62},"\"店铺营业中\"",[52,160868,708],{"class":79},[18,160870,160872],{"id":160871},"_37-链式比较","3.7 链式比较",[14,160874,160875],{},"Python 支持链式比较：",[42,160877,160879],{"className":33028,"code":160878,"language":33030,"meta":47,"style":47},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[49,160880,160881,160890,160894,160911],{"__ignoreMap":47},[52,160882,160883,160885,160887],{"class":54,"line":55},[52,160884,158008],{"class":79},[52,160886,292],{"class":58},[52,160888,160889],{"class":308}," 85\n",[52,160891,160892],{"class":54,"line":66},[52,160893,123],{"emptyLinePlaceholder":122},[52,160895,160896,160898,160900,160903,160905,160907,160909],{"class":54,"line":83},[52,160897,4578],{"class":58},[52,160899,1444],{"class":308},[52,160901,160902],{"class":58}," \u003C=",[52,160904,160433],{"class":79},[52,160906,4632],{"class":58},[52,160908,8719],{"class":308},[52,160910,6718],{"class":79},[52,160912,160913,160915,160917,160920],{"class":54,"line":91},[52,160914,33949],{"class":308},[52,160916,1216],{"class":79},[52,160918,160919],{"class":62},"\"成绩合法\"",[52,160921,708],{"class":79},[14,160923,160924],{},"等价于：",[42,160926,160928],{"className":33028,"code":160927,"language":33030,"meta":47,"style":47},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[49,160929,160930,160950],{"__ignoreMap":47},[52,160931,160932,160934,160936,160938,160940,160942,160944,160946,160948],{"class":54,"line":55},[52,160933,4578],{"class":58},[52,160935,160433],{"class":79},[52,160937,4742],{"class":58},[52,160939,1444],{"class":308},[52,160941,123079],{"class":58},[52,160943,160433],{"class":79},[52,160945,4632],{"class":58},[52,160947,8719],{"class":308},[52,160949,6718],{"class":79},[52,160951,160952,160954,160956,160958],{"class":54,"line":66},[52,160953,33949],{"class":308},[52,160955,1216],{"class":79},[52,160957,160919],{"class":62},[52,160959,708],{"class":79},[18,160961,160963],{"id":160962},"_38-真值和假值","3.8 真值和假值",[14,160965,119117,160966,160968],{},[49,160967,4578],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,160970,160971],{},"假值：",[42,160973,160975],{"className":33028,"code":160974,"language":33030,"meta":47,"style":47},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[49,160976,160977,160981,160986,160990,160994,160999,161003,161007,161012],{"__ignoreMap":47},[52,160978,160979],{"class":54,"line":55},[52,160980,160167],{"class":308},[52,160982,160983],{"class":54,"line":66},[52,160984,160985],{"class":308},"None\n",[52,160987,160988],{"class":54,"line":83},[52,160989,6072],{"class":308},[52,160991,160992],{"class":54,"line":91},[52,160993,34992],{"class":308},[52,160995,160996],{"class":54,"line":98},[52,160997,160998],{"class":62},"\"\"\n",[52,161000,161001],{"class":54,"line":107},[52,161002,35007],{"class":79},[52,161004,161005],{"class":54,"line":113},[52,161006,248],{"class":79},[52,161008,161009],{"class":54,"line":119},[52,161010,161011],{"class":79},"{}\n",[52,161013,161014,161016],{"class":54,"line":126},[52,161015,157940],{"class":308},[52,161017,248],{"class":79},[14,161019,17783],{},[42,161021,161023],{"className":33028,"code":161022,"language":33030,"meta":47,"style":47},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[49,161024,161025,161039,161043,161050,161070,161076],{"__ignoreMap":47},[52,161026,161027,161029,161031,161033,161035,161037],{"class":54,"line":55},[52,161028,149186],{"class":79},[52,161030,292],{"class":58},[52,161032,63255],{"class":308},[52,161034,1216],{"class":79},[52,161036,155029],{"class":62},[52,161038,708],{"class":79},[52,161040,161041],{"class":54,"line":66},[52,161042,123],{"emptyLinePlaceholder":122},[52,161044,161045,161047],{"class":54,"line":83},[52,161046,4578],{"class":58},[52,161048,161049],{"class":79}," name:\n",[52,161051,161052,161054,161056,161058,161060,161062,161064,161066,161068],{"class":54,"line":91},[52,161053,33949],{"class":308},[52,161055,1216],{"class":79},[52,161057,3273],{"class":58},[52,161059,159704],{"class":62},[52,161061,383],{"class":308},[52,161063,82460],{"class":79},[52,161065,4132],{"class":308},[52,161067,2844],{"class":62},[52,161069,708],{"class":79},[52,161071,161072,161074],{"class":54,"line":98},[52,161073,4733],{"class":58},[52,161075,6718],{"class":79},[52,161077,161078,161080,161082,161085],{"class":54,"line":107},[52,161079,33949],{"class":308},[52,161081,1216],{"class":79},[52,161083,161084],{"class":62},"\"姓名不能为空\"",[52,161086,708],{"class":79},[18,161088,161090],{"id":161089},"_39-match语句","3.9 match语句",[14,161092,161093,161094,161096],{},"Python 3.10 开始支持 ",[49,161095,73915],{},"。它适合处理固定选项。",[42,161098,161100],{"className":33028,"code":161099,"language":33030,"meta":47,"style":47},"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",[49,161101,161102,161118,161122,161129,161139,161150,161159,161170,161179,161190,161197],{"__ignoreMap":47},[52,161103,161104,161107,161109,161111,161113,161116],{"class":54,"line":55},[52,161105,161106],{"class":79},"command ",[52,161108,292],{"class":58},[52,161110,63255],{"class":308},[52,161112,1216],{"class":79},[52,161114,161115],{"class":62},"\"请输入命令:\"",[52,161117,708],{"class":79},[52,161119,161120],{"class":54,"line":66},[52,161121,123],{"emptyLinePlaceholder":122},[52,161123,161124,161126],{"class":54,"line":83},[52,161125,73915],{"class":58},[52,161127,161128],{"class":79}," command:\n",[52,161130,161131,161134,161137],{"class":54,"line":91},[52,161132,161133],{"class":58},"    case",[52,161135,161136],{"class":62}," \"start\"",[52,161138,6718],{"class":79},[52,161140,161141,161143,161145,161148],{"class":54,"line":98},[52,161142,35101],{"class":308},[52,161144,1216],{"class":79},[52,161146,161147],{"class":62},"\"启动\"",[52,161149,708],{"class":79},[52,161151,161152,161154,161157],{"class":54,"line":107},[52,161153,161133],{"class":58},[52,161155,161156],{"class":62}," \"stop\"",[52,161158,6718],{"class":79},[52,161160,161161,161163,161165,161168],{"class":54,"line":113},[52,161162,35101],{"class":308},[52,161164,1216],{"class":79},[52,161166,161167],{"class":62},"\"停止\"",[52,161169,708],{"class":79},[52,161171,161172,161174,161177],{"class":54,"line":119},[52,161173,161133],{"class":58},[52,161175,161176],{"class":62}," \"restart\"",[52,161178,6718],{"class":79},[52,161180,161181,161183,161185,161188],{"class":54,"line":126},[52,161182,35101],{"class":308},[52,161184,1216],{"class":79},[52,161186,161187],{"class":62},"\"重启\"",[52,161189,708],{"class":79},[52,161191,161192,161194],{"class":54,"line":132},[52,161193,161133],{"class":58},[52,161195,161196],{"class":79}," _:\n",[52,161198,161199,161201,161203,161206],{"class":54,"line":138},[52,161200,35101],{"class":308},[52,161202,1216],{"class":79},[52,161204,161205],{"class":62},"\"未知命令\"",[52,161207,708],{"class":79},[14,161209,161210,161211,161213,161214,161216],{},"入门阶段掌握 ",[49,161212,157308],{}," 更重要，",[49,161215,73915],{}," 可以作为补充。",[18,161218,161220],{"id":161219},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,161222,125942],{},[1696,161224,161225,161228,161231],{},[32,161226,161227],{},"输入成绩。",[32,161229,161230],{},"判断成绩是否合法。",[32,161232,161233],{},"输出等级。",[14,161235,2496],{},[42,161237,161239],{"className":33028,"code":161238,"language":33030,"meta":47,"style":47},"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",[49,161240,161241,161259,161263,161281,161292,161304,161315,161327,161338,161351,161362,161374,161385,161391],{"__ignoreMap":47},[52,161242,161243,161245,161247,161249,161251,161253,161255,161257],{"class":54,"line":55},[52,161244,158008],{"class":79},[52,161246,292],{"class":58},[52,161248,112447],{"class":308},[52,161250,1216],{"class":79},[52,161252,56471],{"class":308},[52,161254,1216],{"class":79},[52,161256,155059],{"class":62},[52,161258,33147],{"class":79},[52,161260,161261],{"class":54,"line":66},[52,161262,123],{"emptyLinePlaceholder":122},[52,161264,161265,161267,161269,161271,161273,161275,161277,161279],{"class":54,"line":83},[52,161266,4578],{"class":58},[52,161268,41580],{"class":58},[52,161270,1444],{"class":308},[52,161272,160902],{"class":58},[52,161274,160433],{"class":79},[52,161276,4632],{"class":58},[52,161278,8719],{"class":308},[52,161280,6718],{"class":79},[52,161282,161283,161285,161287,161290],{"class":54,"line":91},[52,161284,33949],{"class":308},[52,161286,1216],{"class":79},[52,161288,161289],{"class":62},"\"成绩不合法\"",[52,161291,708],{"class":79},[52,161293,161294,161296,161298,161300,161302],{"class":54,"line":98},[52,161295,160456],{"class":58},[52,161297,160433],{"class":79},[52,161299,4742],{"class":58},[52,161301,160438],{"class":308},[52,161303,6718],{"class":79},[52,161305,161306,161308,161310,161313],{"class":54,"line":107},[52,161307,33949],{"class":308},[52,161309,1216],{"class":79},[52,161311,161312],{"class":62},"\"等级:A\"",[52,161314,708],{"class":79},[52,161316,161317,161319,161321,161323,161325],{"class":54,"line":113},[52,161318,160456],{"class":58},[52,161320,160433],{"class":79},[52,161322,4742],{"class":58},[52,161324,160463],{"class":308},[52,161326,6718],{"class":79},[52,161328,161329,161331,161333,161336],{"class":54,"line":119},[52,161330,33949],{"class":308},[52,161332,1216],{"class":79},[52,161334,161335],{"class":62},"\"等级:B\"",[52,161337,708],{"class":79},[52,161339,161340,161342,161344,161346,161349],{"class":54,"line":126},[52,161341,160456],{"class":58},[52,161343,160433],{"class":79},[52,161345,4742],{"class":58},[52,161347,161348],{"class":308}," 70",[52,161350,6718],{"class":79},[52,161352,161353,161355,161357,161360],{"class":54,"line":132},[52,161354,33949],{"class":308},[52,161356,1216],{"class":79},[52,161358,161359],{"class":62},"\"等级:C\"",[52,161361,708],{"class":79},[52,161363,161364,161366,161368,161370,161372],{"class":54,"line":138},[52,161365,160456],{"class":58},[52,161367,160433],{"class":79},[52,161369,4742],{"class":58},[52,161371,160487],{"class":308},[52,161373,6718],{"class":79},[52,161375,161376,161378,161380,161383],{"class":54,"line":144},[52,161377,33949],{"class":308},[52,161379,1216],{"class":79},[52,161381,161382],{"class":62},"\"等级:D\"",[52,161384,708],{"class":79},[52,161386,161387,161389],{"class":54,"line":153},[52,161388,4733],{"class":58},[52,161390,6718],{"class":79},[52,161392,161393,161395,161397,161400],{"class":54,"line":159},[52,161394,33949],{"class":308},[52,161396,1216],{"class":79},[52,161398,161399],{"class":62},"\"等级:E\"",[52,161401,708],{"class":79},[18,161403,161405],{"id":161404},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,161407,125942],{},[1696,161409,161410,161413,161416,161419],{},[32,161411,161412],{},"输入消费金额。",[32,161414,161415],{},"输入会员等级，普通、银卡、金卡。",[32,161417,161418],{},"普通不打折，银卡 9 折，金卡 8 折。",[32,161420,161421],{},"满 500 再减 50。",[14,161423,2496],{},[42,161425,161427],{"className":33028,"code":161426,"language":33030,"meta":47,"style":47},"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",[49,161428,161429,161449,161465,161469,161477,161481,161495,161505,161518,161527,161540,161548,161554,161565,161569,161583,161587,161601,161611,161615],{"__ignoreMap":47},[52,161430,161431,161434,161436,161438,161440,161442,161444,161447],{"class":54,"line":55},[52,161432,161433],{"class":79},"amount ",[52,161435,292],{"class":58},[52,161437,112447],{"class":308},[52,161439,1216],{"class":79},[52,161441,56471],{"class":308},[52,161443,1216],{"class":79},[52,161445,161446],{"class":62},"\"请输入消费金额:\"",[52,161448,33147],{"class":79},[52,161450,161451,161454,161456,161458,161460,161463],{"class":54,"line":66},[52,161452,161453],{"class":79},"level ",[52,161455,292],{"class":58},[52,161457,63255],{"class":308},[52,161459,1216],{"class":79},[52,161461,161462],{"class":62},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[52,161464,708],{"class":79},[52,161466,161467],{"class":54,"line":83},[52,161468,123],{"emptyLinePlaceholder":122},[52,161470,161471,161473,161475],{"class":54,"line":91},[52,161472,159886],{"class":79},[52,161474,292],{"class":58},[52,161476,58349],{"class":308},[52,161478,161479],{"class":54,"line":98},[52,161480,123],{"emptyLinePlaceholder":122},[52,161482,161483,161485,161488,161490,161493],{"class":54,"line":107},[52,161484,4578],{"class":58},[52,161486,161487],{"class":79}," level ",[52,161489,5938],{"class":58},[52,161491,161492],{"class":62}," \"银卡\"",[52,161494,6718],{"class":79},[52,161496,161497,161500,161502],{"class":54,"line":113},[52,161498,161499],{"class":79},"    discount ",[52,161501,292],{"class":58},[52,161503,161504],{"class":308}," 0.9\n",[52,161506,161507,161509,161511,161513,161516],{"class":54,"line":119},[52,161508,160456],{"class":58},[52,161510,161487],{"class":79},[52,161512,5938],{"class":58},[52,161514,161515],{"class":62}," \"金卡\"",[52,161517,6718],{"class":79},[52,161519,161520,161522,161524],{"class":54,"line":126},[52,161521,161499],{"class":79},[52,161523,292],{"class":58},[52,161525,161526],{"class":308}," 0.8\n",[52,161528,161529,161531,161533,161535,161538],{"class":54,"line":132},[52,161530,160456],{"class":58},[52,161532,161487],{"class":79},[52,161534,5938],{"class":58},[52,161536,161537],{"class":62}," \"普通\"",[52,161539,6718],{"class":79},[52,161541,161542,161544,161546],{"class":54,"line":138},[52,161543,161499],{"class":79},[52,161545,292],{"class":58},[52,161547,58349],{"class":308},[52,161549,161550,161552],{"class":54,"line":144},[52,161551,4733],{"class":58},[52,161553,6718],{"class":79},[52,161555,161556,161558,161560,161563],{"class":54,"line":153},[52,161557,33949],{"class":308},[52,161559,1216],{"class":79},[52,161561,161562],{"class":62},"\"会员等级输入错误，按普通会员计算\"",[52,161564,708],{"class":79},[52,161566,161567],{"class":54,"line":159},[52,161568,123],{"emptyLinePlaceholder":122},[52,161570,161571,161574,161576,161579,161581],{"class":54,"line":167},[52,161572,161573],{"class":79},"pay ",[52,161575,292],{"class":58},[52,161577,161578],{"class":79}," amount ",[52,161580,3053],{"class":58},[52,161582,159925],{"class":79},[52,161584,161585],{"class":54,"line":173},[52,161586,123],{"emptyLinePlaceholder":122},[52,161588,161589,161591,161594,161596,161599],{"class":54,"line":181},[52,161590,4578],{"class":58},[52,161592,161593],{"class":79}," pay ",[52,161595,4742],{"class":58},[52,161597,161598],{"class":308}," 500",[52,161600,6718],{"class":79},[52,161602,161603,161606,161608],{"class":54,"line":186},[52,161604,161605],{"class":79},"    pay ",[52,161607,152902],{"class":58},[52,161609,161610],{"class":308}," 50\n",[52,161612,161613],{"class":54,"line":191},[52,161614,123],{"emptyLinePlaceholder":122},[52,161616,161617,161619,161621,161623,161625,161627,161630,161632,161634,161636],{"class":54,"line":196},[52,161618,33065],{"class":308},[52,161620,1216],{"class":79},[52,161622,3273],{"class":58},[52,161624,160006],{"class":62},[52,161626,383],{"class":308},[52,161628,161629],{"class":79},"pay",[52,161631,159809],{"class":58},[52,161633,4132],{"class":308},[52,161635,159662],{"class":62},[52,161637,708],{"class":79},[18,161639,161641],{"id":161640},"_312-易错点","3.12 易错点",[1696,161643,161644,161647,161650,161653,161658],{},[32,161645,161646],{},"冒号不能漏。",[32,161648,161649],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[32,161651,161652],{},"多分支判断要注意顺序。",[32,161654,161655,161656,31035],{},"判断相等用 ",[49,161657,5938],{},[32,161659,161660],{},"字符串比较区分大小写：",[42,161662,161664],{"className":33028,"code":161663,"language":33030,"meta":47,"style":47},"\"Y\" == \"y\"  # False\n",[49,161665,161666],{"__ignoreMap":47},[52,161667,161668,161671,161673,161675],{"class":54,"line":55},[52,161669,161670],{"class":62},"\"Y\"",[52,161672,104209],{"class":58},[52,161674,160655],{"class":62},[52,161676,161677],{"class":94},"  # False\n",[14,161679,161680],{},"可转换后再判断：",[42,161682,161684],{"className":33028,"code":161683,"language":33030,"meta":47,"style":47},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[49,161685,161686,161703,161716],{"__ignoreMap":47},[52,161687,161688,161691,161693,161695,161697,161700],{"class":54,"line":55},[52,161689,161690],{"class":79},"answer ",[52,161692,292],{"class":58},[52,161694,63255],{"class":308},[52,161696,1216],{"class":79},[52,161698,161699],{"class":62},"\"是否继续(y\u002Fn):\"",[52,161701,161702],{"class":79},").lower()\n",[52,161704,161705,161707,161710,161712,161714],{"class":54,"line":66},[52,161706,4578],{"class":58},[52,161708,161709],{"class":79}," answer ",[52,161711,5938],{"class":58},[52,161713,160655],{"class":62},[52,161715,6718],{"class":79},[52,161717,161718,161720,161722,161725],{"class":54,"line":83},[52,161719,33949],{"class":308},[52,161721,1216],{"class":79},[52,161723,161724],{"class":62},"\"继续\"",[52,161726,708],{"class":79},[18,161728,161730],{"id":161729},"_313-本章练习","3.13 本章练习",[1696,161732,161733,161736,161739,161742,161752],{},[32,161734,161735],{},"输入年龄，判断是否成年。",[32,161737,161738],{},"输入年份，判断是否为闰年。",[32,161740,161741],{},"输入三个数字，输出最大值。",[32,161743,161744,161745,161748,161749,161751],{},"写登录判断：用户名是 ",[49,161746,161747],{},"admin"," 且密码是 ",[49,161750,17732],{}," 才登录成功。",[32,161753,161754],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[3141,161756,161757],{},"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":47,"searchDepth":66,"depth":66,"links":161759},[161760,161761,161762,161763,161764,161765,161770,161771,161772,161773,161774,161775,161776],{"id":160148,"depth":66,"text":160149},{"id":160201,"depth":66,"text":160202},{"id":160305,"depth":66,"text":160306},{"id":160395,"depth":66,"text":160396},{"id":160585,"depth":66,"text":160586},{"id":160708,"depth":66,"text":160709,"children":161766},[161767,161768,161769],{"id":160712,"depth":83,"text":160713},{"id":160769,"depth":83,"text":160770},{"id":160826,"depth":83,"text":160827},{"id":160871,"depth":66,"text":160872},{"id":160962,"depth":66,"text":160963},{"id":161089,"depth":66,"text":161090},{"id":161219,"depth":66,"text":161220},{"id":161404,"depth":66,"text":161405},{"id":161640,"depth":66,"text":161641},{"id":161729,"depth":66,"text":161730},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":160140,"description":26025},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":161783,"title":161784,"body":161785,"description":26025,"extension":3153,"meta":163554,"navigation":122,"path":163555,"seo":163556,"stem":163557,"__hash__":163558},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":161786,"toc":163534},[161787,161790,161794,161800,161803,161820,161824,161826,161843,161845,161890,161892,161909,161913,161916,161982,161985,162003,162007,162168,162177,162181,162185,162190,162237,162239,162245,162249,162254,162301,162303,162309,162313,162318,162354,162357,162404,162408,162414,162472,162477,162508,162513,162517,162572,162575,162647,162650,162709,162713,162716,162791,162794,162798,162904,162907,162933,162937,162949,163018,163021,163113,163117,163119,163130,163132,163262,163266,163468,163476,163480,163510,163514,163531],[10,161788,161784],{"id":161789},"_4-循环语句",[18,161791,161793],{"id":161792},"_41-为什么需要循环","4.1 为什么需要循环",[14,161795,161796,161797,161799],{},"如果要输出 1 到 100，不应该写 100 行 ",[49,161798,149122],{},"，而应该用循环。",[14,161801,161802],{},"循环适合处理重复任务：",[1696,161804,161805,161808,161811,161814,161817],{},[32,161806,161807],{},"重复输出。",[32,161809,161810],{},"重复输入。",[32,161812,161813],{},"遍历数据。",[32,161815,161816],{},"持续执行菜单。",[32,161818,161819],{},"批量处理文件或数据。",[18,161821,161823],{"id":161822},"_42-while循环","4.2 while循环",[14,161825,8148],{},[42,161827,161829],{"className":33028,"code":161828,"language":33030,"meta":47,"style":47},"while 条件:\n    循环体\n",[49,161830,161831,161838],{"__ignoreMap":47},[52,161832,161833,161835],{"class":54,"line":55},[52,161834,111313],{"class":58},[52,161836,161837],{"class":79}," 条件:\n",[52,161839,161840],{"class":54,"line":66},[52,161841,161842],{"class":79},"    循环体\n",[14,161844,17783],{},[42,161846,161848],{"className":33028,"code":161847,"language":33030,"meta":47,"style":47},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[49,161849,161850,161858,161862,161874,161881],{"__ignoreMap":47},[52,161851,161852,161854,161856],{"class":54,"line":55},[52,161853,102798],{"class":79},[52,161855,292],{"class":58},[52,161857,58349],{"class":308},[52,161859,161860],{"class":54,"line":66},[52,161861,123],{"emptyLinePlaceholder":122},[52,161863,161864,161866,161868,161870,161872],{"class":54,"line":83},[52,161865,111313],{"class":58},[52,161867,1871],{"class":79},[52,161869,4632],{"class":58},[52,161871,1946],{"class":308},[52,161873,6718],{"class":79},[52,161875,161876,161878],{"class":54,"line":91},[52,161877,33949],{"class":308},[52,161879,161880],{"class":79},"(i)\n",[52,161882,161883,161886,161888],{"class":54,"line":98},[52,161884,161885],{"class":79},"    i ",[52,161887,1910],{"class":58},[52,161889,58349],{"class":308},[14,161891,83579],{},[1696,161893,161894,161900,161903,161906],{},[32,161895,161896,161897,31035],{},"判断条件 ",[49,161898,161899],{},"i \u003C= 5",[32,161901,161902],{},"条件成立，执行循环体。",[32,161904,161905],{},"执行完后回到条件判断。",[32,161907,161908],{},"条件不成立，退出循环。",[18,161910,161912],{"id":161911},"_43-while累加","4.3 while累加",[14,161914,161915],{},"计算 1 到 100 的和：",[42,161917,161919],{"className":33028,"code":161918,"language":33030,"meta":47,"style":47},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[49,161920,161921,161929,161937,161941,161953,161963,161971,161975],{"__ignoreMap":47},[52,161922,161923,161925,161927],{"class":54,"line":55},[52,161924,102798],{"class":79},[52,161926,292],{"class":58},[52,161928,58349],{"class":308},[52,161930,161931,161933,161935],{"class":54,"line":66},[52,161932,159910],{"class":79},[52,161934,292],{"class":58},[52,161936,49983],{"class":308},[52,161938,161939],{"class":54,"line":83},[52,161940,123],{"emptyLinePlaceholder":122},[52,161942,161943,161945,161947,161949,161951],{"class":54,"line":91},[52,161944,111313],{"class":58},[52,161946,1871],{"class":79},[52,161948,4632],{"class":58},[52,161950,8719],{"class":308},[52,161952,6718],{"class":79},[52,161954,161955,161958,161960],{"class":54,"line":98},[52,161956,161957],{"class":79},"    total ",[52,161959,1910],{"class":58},[52,161961,161962],{"class":79}," i\n",[52,161964,161965,161967,161969],{"class":54,"line":107},[52,161966,161885],{"class":79},[52,161968,1910],{"class":58},[52,161970,58349],{"class":308},[52,161972,161973],{"class":54,"line":113},[52,161974,123],{"emptyLinePlaceholder":122},[52,161976,161977,161979],{"class":54,"line":119},[52,161978,33065],{"class":308},[52,161980,161981],{"class":79},"(total)\n",[14,161983,161984],{},"核心思想：",[1696,161986,161987,161992,161997],{},[32,161988,161989,161991],{},[49,161990,3644],{}," 控制循环次数。",[32,161993,161994,161996],{},[49,161995,160011],{}," 保存累加结果。",[32,161998,161999,162000,162002],{},"每轮循环都要更新 ",[49,162001,3644],{},"，否则可能死循环。",[18,162004,162006],{"id":162005},"_44-while猜数字","4.4 while猜数字",[42,162008,162010],{"className":33028,"code":162009,"language":33030,"meta":47,"style":47},"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",[49,162011,162012,162018,162022,162039,162047,162051,162059,162079,162088,162092,162104,162115,162125,162136,162142,162164],{"__ignoreMap":47},[52,162013,162014,162016],{"class":54,"line":55},[52,162015,33042],{"class":58},[52,162017,47978],{"class":79},[52,162019,162020],{"class":54,"line":66},[52,162021,123],{"emptyLinePlaceholder":122},[52,162023,162024,162026,162028,162031,162033,162035,162037],{"class":54,"line":83},[52,162025,161690],{"class":79},[52,162027,292],{"class":58},[52,162029,162030],{"class":79}," random.randint(",[52,162032,629],{"class":308},[52,162034,15083],{"class":79},[52,162036,591],{"class":308},[52,162038,708],{"class":79},[52,162040,162041,162043,162045],{"class":54,"line":91},[52,162042,149341],{"class":79},[52,162044,292],{"class":58},[52,162046,49983],{"class":308},[52,162048,162049],{"class":54,"line":98},[52,162050,123],{"emptyLinePlaceholder":122},[52,162052,162053,162055,162057],{"class":54,"line":107},[52,162054,111313],{"class":58},[52,162056,97942],{"class":308},[52,162058,6718],{"class":79},[52,162060,162061,162064,162066,162068,162070,162072,162074,162077],{"class":54,"line":113},[52,162062,162063],{"class":79},"    guess ",[52,162065,292],{"class":58},[52,162067,2280],{"class":308},[52,162069,1216],{"class":79},[52,162071,56471],{"class":308},[52,162073,1216],{"class":79},[52,162075,162076],{"class":62},"\"请输入1到100之间的数字:\"",[52,162078,33147],{"class":79},[52,162080,162081,162084,162086],{"class":54,"line":119},[52,162082,162083],{"class":79},"    count ",[52,162085,1910],{"class":58},[52,162087,58349],{"class":308},[52,162089,162090],{"class":54,"line":126},[52,162091,123],{"emptyLinePlaceholder":122},[52,162093,162094,162096,162099,162101],{"class":54,"line":132},[52,162095,6088],{"class":58},[52,162097,162098],{"class":79}," guess ",[52,162100,2674],{"class":58},[52,162102,162103],{"class":79}," answer:\n",[52,162105,162106,162108,162110,162113],{"class":54,"line":138},[52,162107,35101],{"class":308},[52,162109,1216],{"class":79},[52,162111,162112],{"class":62},"\"猜大了\"",[52,162114,708],{"class":79},[52,162116,162117,162119,162121,162123],{"class":54,"line":144},[52,162118,41943],{"class":58},[52,162120,162098],{"class":79},[52,162122,698],{"class":58},[52,162124,162103],{"class":79},[52,162126,162127,162129,162131,162134],{"class":54,"line":153},[52,162128,35101],{"class":308},[52,162130,1216],{"class":79},[52,162132,162133],{"class":62},"\"猜小了\"",[52,162135,708],{"class":79},[52,162137,162138,162140],{"class":54,"line":159},[52,162139,160672],{"class":58},[52,162141,6718],{"class":79},[52,162143,162144,162146,162148,162150,162153,162155,162157,162159,162162],{"class":54,"line":167},[52,162145,35101],{"class":308},[52,162147,1216],{"class":79},[52,162149,3273],{"class":58},[52,162151,162152],{"class":62},"\"猜对了，一共猜了",[52,162154,383],{"class":308},[52,162156,87084],{"class":79},[52,162158,4132],{"class":308},[52,162160,162161],{"class":62},"次\"",[52,162163,708],{"class":79},[52,162165,162166],{"class":54,"line":173},[52,162167,34277],{"class":58},[14,162169,162170,162173,162174,162176],{},[49,162171,162172],{},"while True"," 表示无限循环，通常配合 ",[49,162175,5066],{}," 使用。",[18,162178,162180],{"id":162179},"_45-break和continue","4.5 break和continue",[3195,162182,162184],{"id":162183},"_451-break","4.5.1 break",[14,162186,162187,162189],{},[49,162188,5066],{}," 直接结束整个循环。",[42,162191,162193],{"className":33028,"code":162192,"language":33030,"meta":47,"style":47},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[49,162194,162195,162215,162227,162231],{"__ignoreMap":47},[52,162196,162197,162199,162201,162203,162205,162207,162209,162211,162213],{"class":54,"line":55},[52,162198,6014],{"class":58},[52,162200,1871],{"class":79},[52,162202,28693],{"class":58},[52,162204,35093],{"class":308},[52,162206,1216],{"class":79},[52,162208,629],{"class":308},[52,162210,15083],{"class":79},[52,162212,1125],{"class":308},[52,162214,33436],{"class":79},[52,162216,162217,162219,162221,162223,162225],{"class":54,"line":66},[52,162218,6088],{"class":58},[52,162220,1871],{"class":79},[52,162222,5938],{"class":58},[52,162224,80720],{"class":308},[52,162226,6718],{"class":79},[52,162228,162229],{"class":54,"line":83},[52,162230,34277],{"class":58},[52,162232,162233,162235],{"class":54,"line":91},[52,162234,33949],{"class":308},[52,162236,161880],{"class":79},[14,162238,149107],{},[42,162240,162243],{"className":162241,"code":162242,"language":8154,"meta":47},[8152],"1\n2\n",[49,162244,162242],{"__ignoreMap":47},[3195,162246,162248],{"id":162247},"_452-continue","4.5.2 continue",[14,162250,162251,162253],{},[49,162252,157322],{}," 跳过本轮剩余代码，进入下一轮循环。",[42,162255,162257],{"className":33028,"code":162256,"language":33030,"meta":47,"style":47},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[49,162258,162259,162279,162291,162295],{"__ignoreMap":47},[52,162260,162261,162263,162265,162267,162269,162271,162273,162275,162277],{"class":54,"line":55},[52,162262,6014],{"class":58},[52,162264,1871],{"class":79},[52,162266,28693],{"class":58},[52,162268,35093],{"class":308},[52,162270,1216],{"class":79},[52,162272,629],{"class":308},[52,162274,15083],{"class":79},[52,162276,1125],{"class":308},[52,162278,33436],{"class":79},[52,162280,162281,162283,162285,162287,162289],{"class":54,"line":66},[52,162282,6088],{"class":58},[52,162284,1871],{"class":79},[52,162286,5938],{"class":58},[52,162288,80720],{"class":308},[52,162290,6718],{"class":79},[52,162292,162293],{"class":54,"line":83},[52,162294,151162],{"class":58},[52,162296,162297,162299],{"class":54,"line":91},[52,162298,33949],{"class":308},[52,162300,161880],{"class":79},[14,162302,149107],{},[42,162304,162307],{"className":162305,"code":162306,"language":8154,"meta":47},[8152],"1\n2\n4\n5\n",[49,162308,162306],{"__ignoreMap":47},[18,162310,162312],{"id":162311},"_46-for循环","4.6 for循环",[14,162314,162315,162317],{},[49,162316,6014],{}," 常用于遍历序列。",[42,162319,162321],{"className":33028,"code":162320,"language":33030,"meta":47,"style":47},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[49,162322,162323,162332,162336,162347],{"__ignoreMap":47},[52,162324,162325,162327,162329],{"class":54,"line":55},[52,162326,149186],{"class":79},[52,162328,292],{"class":58},[52,162330,162331],{"class":62}," \"python\"\n",[52,162333,162334],{"class":54,"line":66},[52,162335,123],{"emptyLinePlaceholder":122},[52,162337,162338,162340,162343,162345],{"class":54,"line":83},[52,162339,6014],{"class":58},[52,162341,162342],{"class":79}," ch ",[52,162344,28693],{"class":58},[52,162346,161049],{"class":79},[52,162348,162349,162351],{"class":54,"line":91},[52,162350,33949],{"class":308},[52,162352,162353],{"class":79},"(ch)\n",[14,162355,162356],{},"遍历列表：",[42,162358,162360],{"className":33028,"code":162359,"language":33030,"meta":47,"style":47},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[49,162361,162362,162384,162388,162398],{"__ignoreMap":47},[52,162363,162364,162367,162369,162371,162373,162375,162377,162379,162382],{"class":54,"line":55},[52,162365,162366],{"class":79},"students ",[52,162368,292],{"class":58},[52,162370,54876],{"class":79},[52,162372,152538],{"class":62},[52,162374,15083],{"class":79},[52,162376,153586],{"class":62},[52,162378,15083],{"class":79},[52,162380,162381],{"class":62},"\"小刚\"",[52,162383,35896],{"class":79},[52,162385,162386],{"class":54,"line":66},[52,162387,123],{"emptyLinePlaceholder":122},[52,162389,162390,162392,162394,162396],{"class":54,"line":83},[52,162391,6014],{"class":58},[52,162393,154787],{"class":79},[52,162395,28693],{"class":58},[52,162397,154792],{"class":79},[52,162399,162400,162402],{"class":54,"line":91},[52,162401,33949],{"class":308},[52,162403,152692],{"class":79},[18,162405,162407],{"id":162406},"_47-range函数","4.7 range函数",[14,162409,162410,162413],{},[49,162411,162412],{},"range()"," 用于生成整数序列。",[42,162415,162417],{"className":33028,"code":162416,"language":33030,"meta":47,"style":47},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[49,162418,162419,162433,162451],{"__ignoreMap":47},[52,162420,162421,162423,162425,162427,162430],{"class":54,"line":55},[52,162422,36066],{"class":308},[52,162424,1216],{"class":79},[52,162426,1805],{"class":308},[52,162428,162429],{"class":79},")          ",[52,162431,162432],{"class":94},"# 0,1,2,3,4\n",[52,162434,162435,162437,162439,162441,162443,162445,162448],{"class":54,"line":66},[52,162436,36066],{"class":308},[52,162438,1216],{"class":79},[52,162440,629],{"class":308},[52,162442,15083],{"class":79},[52,162444,1805],{"class":308},[52,162446,162447],{"class":79},")       ",[52,162449,162450],{"class":94},"# 1,2,3,4\n",[52,162452,162453,162455,162457,162459,162461,162463,162465,162467,162469],{"class":54,"line":83},[52,162454,36066],{"class":308},[52,162456,1216],{"class":79},[52,162458,629],{"class":308},[52,162460,15083],{"class":79},[52,162462,3649],{"class":308},[52,162464,15083],{"class":79},[52,162466,564],{"class":308},[52,162468,158311],{"class":79},[52,162470,162471],{"class":94},"# 1,3,5,7,9\n",[14,162473,162474,162475,27268],{},"配合 ",[49,162476,6014],{},[42,162478,162480],{"className":33028,"code":162479,"language":33030,"meta":47,"style":47},"for i in range(1, 6):\n    print(i)\n",[49,162481,162482,162502],{"__ignoreMap":47},[52,162483,162484,162486,162488,162490,162492,162494,162496,162498,162500],{"class":54,"line":55},[52,162485,6014],{"class":58},[52,162487,1871],{"class":79},[52,162489,28693],{"class":58},[52,162491,35093],{"class":308},[52,162493,1216],{"class":79},[52,162495,629],{"class":308},[52,162497,15083],{"class":79},[52,162499,1125],{"class":308},[52,162501,33436],{"class":79},[52,162503,162504,162506],{"class":54,"line":66},[52,162505,33949],{"class":308},[52,162507,161880],{"class":79},[14,162509,1453,162510,162512],{},[49,162511,36066],{}," 的结束值不包含在内。",[18,162514,162516],{"id":162515},"_48-for循环求和","4.8 for循环求和",[42,162518,162520],{"className":33028,"code":162519,"language":33030,"meta":47,"style":47},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[49,162521,162522,162530,162534,162554,162562,162566],{"__ignoreMap":47},[52,162523,162524,162526,162528],{"class":54,"line":55},[52,162525,159910],{"class":79},[52,162527,292],{"class":58},[52,162529,49983],{"class":308},[52,162531,162532],{"class":54,"line":66},[52,162533,123],{"emptyLinePlaceholder":122},[52,162535,162536,162538,162540,162542,162544,162546,162548,162550,162552],{"class":54,"line":83},[52,162537,6014],{"class":58},[52,162539,1871],{"class":79},[52,162541,28693],{"class":58},[52,162543,35093],{"class":308},[52,162545,1216],{"class":79},[52,162547,629],{"class":308},[52,162549,15083],{"class":79},[52,162551,3545],{"class":308},[52,162553,33436],{"class":79},[52,162555,162556,162558,162560],{"class":54,"line":91},[52,162557,161957],{"class":79},[52,162559,1910],{"class":58},[52,162561,161962],{"class":79},[52,162563,162564],{"class":54,"line":98},[52,162565,123],{"emptyLinePlaceholder":122},[52,162567,162568,162570],{"class":54,"line":107},[52,162569,33065],{"class":308},[52,162571,161981],{"class":79},[14,162573,162574],{},"求偶数和：",[42,162576,162578],{"className":33028,"code":162577,"language":33030,"meta":47,"style":47},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[49,162579,162580,162588,162592,162612,162628,162637,162641],{"__ignoreMap":47},[52,162581,162582,162584,162586],{"class":54,"line":55},[52,162583,159910],{"class":79},[52,162585,292],{"class":58},[52,162587,49983],{"class":308},[52,162589,162590],{"class":54,"line":66},[52,162591,123],{"emptyLinePlaceholder":122},[52,162593,162594,162596,162598,162600,162602,162604,162606,162608,162610],{"class":54,"line":83},[52,162595,6014],{"class":58},[52,162597,1871],{"class":79},[52,162599,28693],{"class":58},[52,162601,35093],{"class":308},[52,162603,1216],{"class":79},[52,162605,629],{"class":308},[52,162607,15083],{"class":79},[52,162609,3545],{"class":308},[52,162611,33436],{"class":79},[52,162613,162614,162616,162618,162620,162622,162624,162626],{"class":54,"line":91},[52,162615,6088],{"class":58},[52,162617,1871],{"class":79},[52,162619,1998],{"class":58},[52,162621,17403],{"class":308},[52,162623,104209],{"class":58},[52,162625,1444],{"class":308},[52,162627,6718],{"class":79},[52,162629,162630,162633,162635],{"class":54,"line":98},[52,162631,162632],{"class":79},"        total ",[52,162634,1910],{"class":58},[52,162636,161962],{"class":79},[52,162638,162639],{"class":54,"line":107},[52,162640,123],{"emptyLinePlaceholder":122},[52,162642,162643,162645],{"class":54,"line":113},[52,162644,33065],{"class":308},[52,162646,161981],{"class":79},[14,162648,162649],{},"也可以：",[42,162651,162653],{"className":33028,"code":162652,"language":33030,"meta":47,"style":47},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[49,162654,162655,162663,162667,162691,162699,162703],{"__ignoreMap":47},[52,162656,162657,162659,162661],{"class":54,"line":55},[52,162658,159910],{"class":79},[52,162660,292],{"class":58},[52,162662,49983],{"class":308},[52,162664,162665],{"class":54,"line":66},[52,162666,123],{"emptyLinePlaceholder":122},[52,162668,162669,162671,162673,162675,162677,162679,162681,162683,162685,162687,162689],{"class":54,"line":83},[52,162670,6014],{"class":58},[52,162672,1871],{"class":79},[52,162674,28693],{"class":58},[52,162676,35093],{"class":308},[52,162678,1216],{"class":79},[52,162680,564],{"class":308},[52,162682,15083],{"class":79},[52,162684,3545],{"class":308},[52,162686,15083],{"class":79},[52,162688,564],{"class":308},[52,162690,33436],{"class":79},[52,162692,162693,162695,162697],{"class":54,"line":91},[52,162694,161957],{"class":79},[52,162696,1910],{"class":58},[52,162698,161962],{"class":79},[52,162700,162701],{"class":54,"line":98},[52,162702,123],{"emptyLinePlaceholder":122},[52,162704,162705,162707],{"class":54,"line":107},[52,162706,33065],{"class":308},[52,162708,161981],{"class":79},[18,162710,162712],{"id":162711},"_49-循环嵌套","4.9 循环嵌套",[14,162714,162715],{},"嵌套循环就是循环里面再写循环。",[42,162717,162719],{"className":33028,"code":162718,"language":33030,"meta":47,"style":47},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[49,162720,162721,162741,162761],{"__ignoreMap":47},[52,162722,162723,162725,162727,162729,162731,162733,162735,162737,162739],{"class":54,"line":55},[52,162724,6014],{"class":58},[52,162726,1871],{"class":79},[52,162728,28693],{"class":58},[52,162730,35093],{"class":308},[52,162732,1216],{"class":79},[52,162734,629],{"class":308},[52,162736,15083],{"class":79},[52,162738,3504],{"class":308},[52,162740,33436],{"class":79},[52,162742,162743,162745,162747,162749,162751,162753,162755,162757,162759],{"class":54,"line":66},[52,162744,679],{"class":58},[52,162746,1934],{"class":79},[52,162748,28693],{"class":58},[52,162750,35093],{"class":308},[52,162752,1216],{"class":79},[52,162754,629],{"class":308},[52,162756,15083],{"class":79},[52,162758,3504],{"class":308},[52,162760,33436],{"class":79},[52,162762,162763,162765,162767,162769,162772,162774,162776,162778,162781,162783,162785,162787,162789],{"class":54,"line":83},[52,162764,35101],{"class":308},[52,162766,1216],{"class":79},[52,162768,3273],{"class":58},[52,162770,162771],{"class":62},"\"i=",[52,162773,383],{"class":308},[52,162775,3644],{"class":79},[52,162777,4132],{"class":308},[52,162779,162780],{"class":62},", j=",[52,162782,383],{"class":308},[52,162784,2682],{"class":79},[52,162786,4132],{"class":308},[52,162788,2844],{"class":62},[52,162790,708],{"class":79},[14,162792,162793],{},"外层循环执行一次，内层循环执行完整一轮。",[18,162795,162797],{"id":162796},"_410-九九乘法表","4.10 九九乘法表",[42,162799,162801],{"className":33028,"code":162800,"language":33030,"meta":47,"style":47},"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",[49,162802,162803,162823,162846,162898],{"__ignoreMap":47},[52,162804,162805,162807,162809,162811,162813,162815,162817,162819,162821],{"class":54,"line":55},[52,162806,6014],{"class":58},[52,162808,1871],{"class":79},[52,162810,28693],{"class":58},[52,162812,35093],{"class":308},[52,162814,1216],{"class":79},[52,162816,629],{"class":308},[52,162818,15083],{"class":79},[52,162820,3649],{"class":308},[52,162822,33436],{"class":79},[52,162824,162825,162827,162829,162831,162833,162835,162837,162840,162842,162844],{"class":54,"line":66},[52,162826,679],{"class":58},[52,162828,1934],{"class":79},[52,162830,28693],{"class":58},[52,162832,35093],{"class":308},[52,162834,1216],{"class":79},[52,162836,629],{"class":308},[52,162838,162839],{"class":79},", i ",[52,162841,2004],{"class":58},[52,162843,27768],{"class":308},[52,162845,33436],{"class":79},[52,162847,162848,162850,162852,162854,162856,162858,162860,162862,162864,162866,162868,162870,162872,162874,162876,162878,162880,162882,162884,162886,162888,162890,162892,162894,162896],{"class":54,"line":83},[52,162849,35101],{"class":308},[52,162851,1216],{"class":79},[52,162853,3273],{"class":58},[52,162855,2844],{"class":62},[52,162857,383],{"class":308},[52,162859,2682],{"class":79},[52,162861,4132],{"class":308},[52,162863,3053],{"class":62},[52,162865,383],{"class":308},[52,162867,3644],{"class":79},[52,162869,4132],{"class":308},[52,162871,292],{"class":62},[52,162873,383],{"class":308},[52,162875,102798],{"class":79},[52,162877,3053],{"class":58},[52,162879,2627],{"class":79},[52,162881,4132],{"class":308},[52,162883,2844],{"class":62},[52,162885,15083],{"class":79},[52,162887,48451],{"class":1223},[52,162889,292],{"class":58},[52,162891,2844],{"class":62},[52,162893,2171],{"class":308},[52,162895,2844],{"class":62},[52,162897,708],{"class":79},[52,162899,162900,162902],{"class":54,"line":91},[52,162901,33949],{"class":308},[52,162903,248],{"class":79},[14,162905,162906],{},"关键点：",[1696,162908,162909,162915,162921,162927],{},[32,162910,162911,162912,162914],{},"外层 ",[49,162913,3644],{}," 控制行。",[32,162916,162917,162918,162920],{},"内层 ",[49,162919,2682],{}," 控制列。",[32,162922,162923,162924,162926],{},"每行结束后用 ",[49,162925,149122],{}," 换行。",[32,162928,162929,162932],{},[49,162930,162931],{},"end=\"\\t\""," 让同一行的内容横向排列。",[18,162934,162936],{"id":162935},"_411-循环else","4.11 循环else",[14,162938,162939,162940,162942,162943,162945,162946,162948],{},"Python 的循环可以带 ",[49,162941,4733],{},"。当循环正常结束时执行 ",[49,162944,4733],{},"，如果被 ",[49,162947,5066],{}," 打断，则不执行。",[42,162950,162952],{"className":33028,"code":162951,"language":33030,"meta":47,"style":47},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[49,162953,162954,162974,162986,162997,163001,163007],{"__ignoreMap":47},[52,162955,162956,162958,162960,162962,162964,162966,162968,162970,162972],{"class":54,"line":55},[52,162957,6014],{"class":58},[52,162959,1871],{"class":79},[52,162961,28693],{"class":58},[52,162963,35093],{"class":308},[52,162965,1216],{"class":79},[52,162967,629],{"class":308},[52,162969,15083],{"class":79},[52,162971,1125],{"class":308},[52,162973,33436],{"class":79},[52,162975,162976,162978,162980,162982,162984],{"class":54,"line":66},[52,162977,6088],{"class":58},[52,162979,1871],{"class":79},[52,162981,5938],{"class":58},[52,162983,5051],{"class":308},[52,162985,6718],{"class":79},[52,162987,162988,162990,162992,162995],{"class":54,"line":83},[52,162989,35101],{"class":308},[52,162991,1216],{"class":79},[52,162993,162994],{"class":62},"\"找到了\"",[52,162996,708],{"class":79},[52,162998,162999],{"class":54,"line":91},[52,163000,34277],{"class":58},[52,163002,163003,163005],{"class":54,"line":98},[52,163004,4733],{"class":58},[52,163006,6718],{"class":79},[52,163008,163009,163011,163013,163016],{"class":54,"line":107},[52,163010,33949],{"class":308},[52,163012,1216],{"class":79},[52,163014,163015],{"class":62},"\"没找到\"",[52,163017,708],{"class":79},[14,163019,163020],{},"常用于搜索。",[42,163022,163024],{"className":33028,"code":163023,"language":33030,"meta":47,"style":47},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[49,163025,163026,163047,163056,163060,163072,163083,163093,163097,163103],{"__ignoreMap":47},[52,163027,163028,163031,163033,163035,163037,163039,163041,163043,163045],{"class":54,"line":55},[52,163029,163030],{"class":79},"names ",[52,163032,292],{"class":58},[52,163034,54876],{"class":79},[52,163036,152538],{"class":62},[52,163038,15083],{"class":79},[52,163040,153586],{"class":62},[52,163042,15083],{"class":79},[52,163044,162381],{"class":62},[52,163046,35896],{"class":79},[52,163048,163049,163051,163053],{"class":54,"line":66},[52,163050,114228],{"class":79},[52,163052,292],{"class":58},[52,163054,163055],{"class":62}," \"小李\"\n",[52,163057,163058],{"class":54,"line":83},[52,163059,123],{"emptyLinePlaceholder":122},[52,163061,163062,163064,163067,163069],{"class":54,"line":91},[52,163063,6014],{"class":58},[52,163065,163066],{"class":79}," name ",[52,163068,28693],{"class":58},[52,163070,163071],{"class":79}," names:\n",[52,163073,163074,163076,163078,163080],{"class":54,"line":98},[52,163075,6088],{"class":58},[52,163077,163066],{"class":79},[52,163079,5938],{"class":58},[52,163081,163082],{"class":79}," target:\n",[52,163084,163085,163087,163089,163091],{"class":54,"line":107},[52,163086,35101],{"class":308},[52,163088,1216],{"class":79},[52,163090,162994],{"class":62},[52,163092,708],{"class":79},[52,163094,163095],{"class":54,"line":113},[52,163096,34277],{"class":58},[52,163098,163099,163101],{"class":54,"line":119},[52,163100,4733],{"class":58},[52,163102,6718],{"class":79},[52,163104,163105,163107,163109,163111],{"class":54,"line":126},[52,163106,33949],{"class":308},[52,163108,1216],{"class":79},[52,163110,163015],{"class":62},[52,163112,708],{"class":79},[18,163114,163116],{"id":163115},"_412-小案例登录重试","4.12 小案例：登录重试",[14,163118,125942],{},[1696,163120,163121,163124,163127],{},[32,163122,163123],{},"用户最多输入 3 次密码。",[32,163125,163126],{},"密码正确则登录成功。",[32,163128,163129],{},"3 次都错误则锁定账号。",[14,163131,2496],{},[42,163133,163135],{"className":33028,"code":163134,"language":33030,"meta":47,"style":47},"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",[49,163136,163137,163147,163151,163167,163183,163187,163199,163210,163214,163220,163245,163251],{"__ignoreMap":47},[52,163138,163139,163142,163144],{"class":54,"line":55},[52,163140,163141],{"class":79},"password ",[52,163143,292],{"class":58},[52,163145,163146],{"class":62}," \"123456\"\n",[52,163148,163149],{"class":54,"line":66},[52,163150,123],{"emptyLinePlaceholder":122},[52,163152,163153,163155,163157,163159,163161,163163,163165],{"class":54,"line":83},[52,163154,6014],{"class":58},[52,163156,1871],{"class":79},[52,163158,28693],{"class":58},[52,163160,35093],{"class":308},[52,163162,1216],{"class":79},[52,163164,2313],{"class":308},[52,163166,33436],{"class":79},[52,163168,163169,163172,163174,163176,163178,163181],{"class":54,"line":91},[52,163170,163171],{"class":79},"    user_password ",[52,163173,292],{"class":58},[52,163175,63255],{"class":308},[52,163177,1216],{"class":79},[52,163179,163180],{"class":62},"\"请输入密码:\"",[52,163182,708],{"class":79},[52,163184,163185],{"class":54,"line":98},[52,163186,123],{"emptyLinePlaceholder":122},[52,163188,163189,163191,163194,163196],{"class":54,"line":107},[52,163190,6088],{"class":58},[52,163192,163193],{"class":79}," user_password ",[52,163195,5938],{"class":58},[52,163197,163198],{"class":79}," password:\n",[52,163200,163201,163203,163205,163208],{"class":54,"line":113},[52,163202,35101],{"class":308},[52,163204,1216],{"class":79},[52,163206,163207],{"class":62},"\"登录成功\"",[52,163209,708],{"class":79},[52,163211,163212],{"class":54,"line":119},[52,163213,34277],{"class":58},[52,163215,163216,163218],{"class":54,"line":126},[52,163217,160672],{"class":58},[52,163219,6718],{"class":79},[52,163221,163222,163224,163226,163228,163231,163234,163236,163238,163240,163243],{"class":54,"line":132},[52,163223,35101],{"class":308},[52,163225,1216],{"class":79},[52,163227,3273],{"class":58},[52,163229,163230],{"class":62},"\"密码错误，还剩",[52,163232,163233],{"class":308},"{2",[52,163235,54921],{"class":58},[52,163237,687],{"class":79},[52,163239,4132],{"class":308},[52,163241,163242],{"class":62},"次机会\"",[52,163244,708],{"class":79},[52,163246,163247,163249],{"class":54,"line":138},[52,163248,4733],{"class":58},[52,163250,6718],{"class":79},[52,163252,163253,163255,163257,163260],{"class":54,"line":144},[52,163254,33949],{"class":308},[52,163256,1216],{"class":79},[52,163258,163259],{"class":62},"\"账号已锁定\"",[52,163261,708],{"class":79},[18,163263,163265],{"id":163264},"_413-小案例菜单程序","4.13 小案例：菜单程序",[42,163267,163269],{"className":33028,"code":163268,"language":33030,"meta":47,"style":47},"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",[49,163270,163271,163279,163290,163301,163312,163323,163334,163338,163353,163357,163369,163380,163392,163403,163415,163426,163438,163448,163452,163458],{"__ignoreMap":47},[52,163272,163273,163275,163277],{"class":54,"line":55},[52,163274,111313],{"class":58},[52,163276,97942],{"class":308},[52,163278,6718],{"class":79},[52,163280,163281,163283,163285,163288],{"class":54,"line":66},[52,163282,33949],{"class":308},[52,163284,1216],{"class":79},[52,163286,163287],{"class":62},"\"====== 菜单 ======\"",[52,163289,708],{"class":79},[52,163291,163292,163294,163296,163299],{"class":54,"line":83},[52,163293,33949],{"class":308},[52,163295,1216],{"class":79},[52,163297,163298],{"class":62},"\"1. 查询余额\"",[52,163300,708],{"class":79},[52,163302,163303,163305,163307,163310],{"class":54,"line":91},[52,163304,33949],{"class":308},[52,163306,1216],{"class":79},[52,163308,163309],{"class":62},"\"2. 存款\"",[52,163311,708],{"class":79},[52,163313,163314,163316,163318,163321],{"class":54,"line":98},[52,163315,33949],{"class":308},[52,163317,1216],{"class":79},[52,163319,163320],{"class":62},"\"3. 取款\"",[52,163322,708],{"class":79},[52,163324,163325,163327,163329,163332],{"class":54,"line":107},[52,163326,33949],{"class":308},[52,163328,1216],{"class":79},[52,163330,163331],{"class":62},"\"0. 退出\"",[52,163333,708],{"class":79},[52,163335,163336],{"class":54,"line":113},[52,163337,123],{"emptyLinePlaceholder":122},[52,163339,163340,163343,163345,163347,163349,163351],{"class":54,"line":119},[52,163341,163342],{"class":79},"    choice ",[52,163344,292],{"class":58},[52,163346,63255],{"class":308},[52,163348,1216],{"class":79},[52,163350,155723],{"class":62},[52,163352,708],{"class":79},[52,163354,163355],{"class":54,"line":126},[52,163356,123],{"emptyLinePlaceholder":122},[52,163358,163359,163361,163363,163365,163367],{"class":54,"line":132},[52,163360,6088],{"class":58},[52,163362,155736],{"class":79},[52,163364,5938],{"class":58},[52,163366,155741],{"class":62},[52,163368,6718],{"class":79},[52,163370,163371,163373,163375,163378],{"class":54,"line":138},[52,163372,35101],{"class":308},[52,163374,1216],{"class":79},[52,163376,163377],{"class":62},"\"余额为1000元\"",[52,163379,708],{"class":79},[52,163381,163382,163384,163386,163388,163390],{"class":54,"line":144},[52,163383,41943],{"class":58},[52,163385,155736],{"class":79},[52,163387,5938],{"class":58},[52,163389,155760],{"class":62},[52,163391,6718],{"class":79},[52,163393,163394,163396,163398,163401],{"class":54,"line":153},[52,163395,35101],{"class":308},[52,163397,1216],{"class":79},[52,163399,163400],{"class":62},"\"存款功能\"",[52,163402,708],{"class":79},[52,163404,163405,163407,163409,163411,163413],{"class":54,"line":159},[52,163406,41943],{"class":58},[52,163408,155736],{"class":79},[52,163410,5938],{"class":58},[52,163412,155778],{"class":62},[52,163414,6718],{"class":79},[52,163416,163417,163419,163421,163424],{"class":54,"line":167},[52,163418,35101],{"class":308},[52,163420,1216],{"class":79},[52,163422,163423],{"class":62},"\"取款功能\"",[52,163425,708],{"class":79},[52,163427,163428,163430,163432,163434,163436],{"class":54,"line":173},[52,163429,41943],{"class":58},[52,163431,155736],{"class":79},[52,163433,5938],{"class":58},[52,163435,155832],{"class":62},[52,163437,6718],{"class":79},[52,163439,163440,163442,163444,163446],{"class":54,"line":181},[52,163441,35101],{"class":308},[52,163443,1216],{"class":79},[52,163445,155843],{"class":62},[52,163447,708],{"class":79},[52,163449,163450],{"class":54,"line":186},[52,163451,34277],{"class":58},[52,163453,163454,163456],{"class":54,"line":191},[52,163455,160672],{"class":58},[52,163457,6718],{"class":79},[52,163459,163460,163462,163464,163466],{"class":54,"line":196},[52,163461,35101],{"class":308},[52,163463,1216],{"class":79},[52,163465,155864],{"class":62},[52,163467,708],{"class":79},[14,163469,163470,163471,163473,163474,31035],{},"菜单类程序通常使用 ",[49,163472,162172],{},"，用户选择退出时 ",[49,163475,5066],{},[18,163477,163479],{"id":163478},"_414-易错点","4.14 易错点",[1696,163481,163482,163487,163493,163501,163507],{},[32,163483,163484,163486],{},[49,163485,111313],{}," 循环必须更新控制变量。",[32,163488,163489,163492],{},[49,163490,163491],{},"range(1, 10)"," 不包含 10。",[32,163494,163495,163497,163498,163500],{},[49,163496,5066],{}," 结束整个循环，",[49,163499,157322],{}," 只跳过本轮。",[32,163502,163503,163504,163506],{},"嵌套循环中，",[49,163505,5066],{}," 只跳出当前所在的一层循环。",[32,163508,163509],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[18,163511,163513],{"id":163512},"_415-本章练习","4.15 本章练习",[1696,163515,163516,163519,163522,163525,163528],{},[32,163517,163518],{},"输出 1 到 100。",[32,163520,163521],{},"计算 1 到 100 的偶数和。",[32,163523,163524],{},"输出 100 以内能被 3 和 5 同时整除的数。",[32,163526,163527],{},"编写猜数字游戏，限制最多猜 7 次。",[32,163529,163530],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[3141,163532,163533],{},"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":47,"searchDepth":66,"depth":66,"links":163535},[163536,163537,163538,163539,163540,163544,163545,163546,163547,163548,163549,163550,163551,163552,163553],{"id":161792,"depth":66,"text":161793},{"id":161822,"depth":66,"text":161823},{"id":161911,"depth":66,"text":161912},{"id":162005,"depth":66,"text":162006},{"id":162179,"depth":66,"text":162180,"children":163541},[163542,163543],{"id":162183,"depth":83,"text":162184},{"id":162247,"depth":83,"text":162248},{"id":162311,"depth":66,"text":162312},{"id":162406,"depth":66,"text":162407},{"id":162515,"depth":66,"text":162516},{"id":162711,"depth":66,"text":162712},{"id":162796,"depth":66,"text":162797},{"id":162935,"depth":66,"text":162936},{"id":163115,"depth":66,"text":163116},{"id":163264,"depth":66,"text":163265},{"id":163478,"depth":66,"text":163479},{"id":163512,"depth":66,"text":163513},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":161784,"description":26025},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163560,"title":163561,"body":163562,"description":26025,"extension":3153,"meta":165567,"navigation":122,"path":165568,"seo":165569,"stem":165570,"__hash__":165571},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163563,"toc":165547},[163564,163567,163571,163574,163577,163591,163594,163608,163612,163614,163633,163635,163682,163684,163698,163702,163776,163779,163783,163786,163845,163853,163856,163909,163912,163916,163921,163976,163984,164034,164038,164043,164051,164150,164156,164160,164165,164168,164179,164220,164233,164237,164240,164276,164279,164292,164295,164355,164359,164363,164366,164417,164421,164424,164471,164477,164543,164546,164550,164553,164669,164672,164676,164679,164785,164789,164792,164830,164833,164875,164878,164938,164941,164945,165409,165412,165416,165443,165449,165510,165514,165544],[10,163565,163561],{"id":163566},"_5-函数基础",[18,163568,163570],{"id":163569},"_51-为什么需要函数","5.1 为什么需要函数",[14,163572,163573],{},"函数用于封装一段可以重复使用的代码。",[14,163575,163576],{},"不使用函数的问题：",[1696,163578,163579,163582,163585,163588],{},[32,163580,163581],{},"重复代码多。",[32,163583,163584],{},"修改逻辑时容易漏改。",[32,163586,163587],{},"主流程不清晰。",[32,163589,163590],{},"程序越写越长，难以维护。",[14,163592,163593],{},"使用函数后的好处：",[1696,163595,163596,163599,163602,163605],{},[32,163597,163598],{},"提高复用性。",[32,163600,163601],{},"提高可读性。",[32,163603,163604],{},"便于调试。",[32,163606,163607],{},"便于分工。",[18,163609,163611],{"id":163610},"_52-函数定义","5.2 函数定义",[14,163613,8148],{},[42,163615,163617],{"className":33028,"code":163616,"language":33030,"meta":47,"style":47},"def 函数名():\n    函数体\n",[49,163618,163619,163628],{"__ignoreMap":47},[52,163620,163621,163623,163626],{"class":54,"line":55},[52,163622,34597],{"class":58},[52,163624,163625],{"class":75}," 函数名",[52,163627,34603],{"class":79},[52,163629,163630],{"class":54,"line":66},[52,163631,163632],{"class":79},"    函数体\n",[14,163634,17783],{},[42,163636,163638],{"className":33028,"code":163637,"language":33030,"meta":47,"style":47},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[49,163639,163640,163649,163659,163669,163673,163677],{"__ignoreMap":47},[52,163641,163642,163644,163647],{"class":54,"line":55},[52,163643,34597],{"class":58},[52,163645,163646],{"class":75}," say_hello",[52,163648,34603],{"class":79},[52,163650,163651,163653,163655,163657],{"class":54,"line":66},[52,163652,33949],{"class":308},[52,163654,1216],{"class":79},[52,163656,8809],{"class":62},[52,163658,708],{"class":79},[52,163660,163661,163663,163665,163667],{"class":54,"line":83},[52,163662,33949],{"class":308},[52,163664,1216],{"class":79},[52,163666,149289],{"class":62},[52,163668,708],{"class":79},[52,163670,163671],{"class":54,"line":91},[52,163672,123],{"emptyLinePlaceholder":122},[52,163674,163675],{"class":54,"line":98},[52,163676,123],{"emptyLinePlaceholder":122},[52,163678,163679],{"class":54,"line":107},[52,163680,163681],{"class":79},"say_hello()\n",[14,163683,1453],{},[1696,163685,163686,163689,163692,163695],{},[32,163687,163688],{},"函数必须先定义，再调用。",[32,163690,163691],{},"函数名遵循变量命名规则。",[32,163693,163694],{},"函数体需要缩进。",[32,163696,163697],{},"函数不调用就不会执行。",[18,163699,163701],{"id":163700},"_53-函数调用","5.3 函数调用",[42,163703,163705],{"className":33028,"code":163704,"language":33030,"meta":47,"style":47},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[49,163706,163707,163716,163727,163738,163749,163759,163763,163767,163772],{"__ignoreMap":47},[52,163708,163709,163711,163714],{"class":54,"line":55},[52,163710,34597],{"class":58},[52,163712,163713],{"class":75}," print_menu",[52,163715,34603],{"class":79},[52,163717,163718,163720,163722,163725],{"class":54,"line":66},[52,163719,33949],{"class":308},[52,163721,1216],{"class":79},[52,163723,163724],{"class":62},"\"1. 查询\"",[52,163726,708],{"class":79},[52,163728,163729,163731,163733,163736],{"class":54,"line":83},[52,163730,33949],{"class":308},[52,163732,1216],{"class":79},[52,163734,163735],{"class":62},"\"2. 添加\"",[52,163737,708],{"class":79},[52,163739,163740,163742,163744,163747],{"class":54,"line":91},[52,163741,33949],{"class":308},[52,163743,1216],{"class":79},[52,163745,163746],{"class":62},"\"3. 删除\"",[52,163748,708],{"class":79},[52,163750,163751,163753,163755,163757],{"class":54,"line":98},[52,163752,33949],{"class":308},[52,163754,1216],{"class":79},[52,163756,163331],{"class":62},[52,163758,708],{"class":79},[52,163760,163761],{"class":54,"line":107},[52,163762,123],{"emptyLinePlaceholder":122},[52,163764,163765],{"class":54,"line":113},[52,163766,123],{"emptyLinePlaceholder":122},[52,163768,163769],{"class":54,"line":119},[52,163770,163771],{"class":79},"print_menu()\n",[52,163773,163774],{"class":54,"line":126},[52,163775,163771],{"class":79},[14,163777,163778],{},"函数可以多次调用，每次调用都会执行函数体。",[18,163780,163782],{"id":163781},"_54-参数","5.4 参数",[14,163784,163785],{},"参数用于向函数传递数据。",[42,163787,163789],{"className":33028,"code":163788,"language":33030,"meta":47,"style":47},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[49,163790,163791,163800,163820,163824,163828,163837],{"__ignoreMap":47},[52,163792,163793,163795,163797],{"class":54,"line":55},[52,163794,34597],{"class":58},[52,163796,163646],{"class":75},[52,163798,163799],{"class":79},"(name):\n",[52,163801,163802,163804,163806,163808,163810,163812,163814,163816,163818],{"class":54,"line":66},[52,163803,33949],{"class":308},[52,163805,1216],{"class":79},[52,163807,3273],{"class":58},[52,163809,159704],{"class":62},[52,163811,383],{"class":308},[52,163813,82460],{"class":79},[52,163815,4132],{"class":308},[52,163817,2844],{"class":62},[52,163819,708],{"class":79},[52,163821,163822],{"class":54,"line":83},[52,163823,123],{"emptyLinePlaceholder":122},[52,163825,163826],{"class":54,"line":91},[52,163827,123],{"emptyLinePlaceholder":122},[52,163829,163830,163833,163835],{"class":54,"line":98},[52,163831,163832],{"class":79},"say_hello(",[52,163834,152538],{"class":62},[52,163836,708],{"class":79},[52,163838,163839,163841,163843],{"class":54,"line":107},[52,163840,163832],{"class":79},[52,163842,153586],{"class":62},[52,163844,708],{"class":79},[14,163846,163847,163849,163850,163852],{},[49,163848,82460],{}," 是形参，",[49,163851,152538],{}," 是实参。",[14,163854,163855],{},"多个参数：",[42,163857,163859],{"className":33028,"code":163858,"language":33030,"meta":47,"style":47},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[49,163860,163861,163869,163882,163888,163892,163896],{"__ignoreMap":47},[52,163862,163863,163865,163867],{"class":54,"line":55},[52,163864,34597],{"class":58},[52,163866,8176],{"class":75},[52,163868,153743],{"class":79},[52,163870,163871,163874,163876,163878,163880],{"class":54,"line":66},[52,163872,163873],{"class":79},"    result ",[52,163875,292],{"class":58},[52,163877,13517],{"class":79},[52,163879,2004],{"class":58},[52,163881,153754],{"class":79},[52,163883,163884,163886],{"class":54,"line":83},[52,163885,33949],{"class":308},[52,163887,79235],{"class":79},[52,163889,163890],{"class":54,"line":91},[52,163891,123],{"emptyLinePlaceholder":122},[52,163893,163894],{"class":54,"line":98},[52,163895,123],{"emptyLinePlaceholder":122},[52,163897,163898,163901,163903,163905,163907],{"class":54,"line":107},[52,163899,163900],{"class":79},"add(",[52,163902,3649],{"class":308},[52,163904,15083],{"class":79},[52,163906,444],{"class":308},[52,163908,708],{"class":79},[14,163910,163911],{},"调用时参数数量必须匹配。",[18,163913,163915],{"id":163914},"_55-返回值","5.5 返回值",[14,163917,163918,163920],{},[49,163919,19694],{}," 用于把函数内部的结果返回给调用者。",[42,163922,163924],{"className":33028,"code":163923,"language":33030,"meta":47,"style":47},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[49,163925,163926,163934,163944,163948,163952,163970],{"__ignoreMap":47},[52,163927,163928,163930,163932],{"class":54,"line":55},[52,163929,34597],{"class":58},[52,163931,8176],{"class":75},[52,163933,153743],{"class":79},[52,163935,163936,163938,163940,163942],{"class":54,"line":66},[52,163937,1441],{"class":58},[52,163939,13517],{"class":79},[52,163941,2004],{"class":58},[52,163943,153754],{"class":79},[52,163945,163946],{"class":54,"line":83},[52,163947,123],{"emptyLinePlaceholder":122},[52,163949,163950],{"class":54,"line":91},[52,163951,123],{"emptyLinePlaceholder":122},[52,163953,163954,163957,163959,163962,163964,163966,163968],{"class":54,"line":98},[52,163955,163956],{"class":79},"result ",[52,163958,292],{"class":58},[52,163960,163961],{"class":79}," add(",[52,163963,3649],{"class":308},[52,163965,15083],{"class":79},[52,163967,444],{"class":308},[52,163969,708],{"class":79},[52,163971,163972,163974],{"class":54,"line":107},[52,163973,33065],{"class":308},[52,163975,79235],{"class":79},[14,163977,163978,163979,163981,163982,31035],{},"如果函数没有写 ",[49,163980,19694],{},"，默认返回 ",[49,163983,98336],{},[42,163985,163987],{"className":33028,"code":163986,"language":33030,"meta":47,"style":47},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[49,163988,163989,163997,164007,164011,164015,164024],{"__ignoreMap":47},[52,163990,163991,163993,163995],{"class":54,"line":55},[52,163992,34597],{"class":58},[52,163994,163646],{"class":75},[52,163996,34603],{"class":79},[52,163998,163999,164001,164003,164005],{"class":54,"line":66},[52,164000,33949],{"class":308},[52,164002,1216],{"class":79},[52,164004,8809],{"class":62},[52,164006,708],{"class":79},[52,164008,164009],{"class":54,"line":83},[52,164010,123],{"emptyLinePlaceholder":122},[52,164012,164013],{"class":54,"line":91},[52,164014,123],{"emptyLinePlaceholder":122},[52,164016,164017,164019,164021],{"class":54,"line":98},[52,164018,163956],{"class":79},[52,164020,292],{"class":58},[52,164022,164023],{"class":79}," say_hello()\n",[52,164025,164026,164028,164031],{"class":54,"line":107},[52,164027,33065],{"class":308},[52,164029,164030],{"class":79},"(result)  ",[52,164032,164033],{"class":94},"# None\n",[18,164035,164037],{"id":164036},"_56-return的作用","5.6 return的作用",[14,164039,164040,164042],{},[49,164041,19694],{}," 有两个作用：",[1696,164044,164045,164048],{},[32,164046,164047],{},"返回结果。",[32,164049,164050],{},"结束函数。",[42,164052,164054],{"className":33028,"code":164053,"language":33030,"meta":47,"style":47},"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",[49,164055,164056,164066,164078,164085,164089,164101,164108,164112,164119,164123,164127,164138],{"__ignoreMap":47},[52,164057,164058,164060,164063],{"class":54,"line":55},[52,164059,34597],{"class":58},[52,164061,164062],{"class":75}," check_age",[52,164064,164065],{"class":79},"(age):\n",[52,164067,164068,164070,164072,164074,164076],{"class":54,"line":66},[52,164069,6088],{"class":58},[52,164071,18355],{"class":79},[52,164073,698],{"class":58},[52,164075,1444],{"class":308},[52,164077,6718],{"class":79},[52,164079,164080,164082],{"class":54,"line":83},[52,164081,17400],{"class":58},[52,164083,164084],{"class":62}," \"年龄不合法\"\n",[52,164086,164087],{"class":54,"line":91},[52,164088,123],{"emptyLinePlaceholder":122},[52,164090,164091,164093,164095,164097,164099],{"class":54,"line":98},[52,164092,6088],{"class":58},[52,164094,18355],{"class":79},[52,164096,4742],{"class":58},[52,164098,158935],{"class":308},[52,164100,6718],{"class":79},[52,164102,164103,164105],{"class":54,"line":107},[52,164104,17400],{"class":58},[52,164106,164107],{"class":62}," \"成年人\"\n",[52,164109,164110],{"class":54,"line":113},[52,164111,123],{"emptyLinePlaceholder":122},[52,164113,164114,164116],{"class":54,"line":119},[52,164115,1441],{"class":58},[52,164117,164118],{"class":62}," \"未成年人\"\n",[52,164120,164121],{"class":54,"line":126},[52,164122,123],{"emptyLinePlaceholder":122},[52,164124,164125],{"class":54,"line":132},[52,164126,123],{"emptyLinePlaceholder":122},[52,164128,164129,164131,164134,164136],{"class":54,"line":138},[52,164130,33065],{"class":308},[52,164132,164133],{"class":79},"(check_age(",[52,164135,444],{"class":308},[52,164137,33147],{"class":79},[52,164139,164140,164142,164144,164146,164148],{"class":54,"line":144},[52,164141,33065],{"class":308},[52,164143,164133],{"class":79},[52,164145,2642],{"class":58},[52,164147,629],{"class":308},[52,164149,33147],{"class":79},[14,164151,164152,164153,164155],{},"函数执行到 ",[49,164154,19694],{}," 后，后面的代码不会继续执行。",[18,164157,164159],{"id":164158},"_57-none","5.7 None",[14,164161,164162,164164],{},[49,164163,98336],{}," 表示空值或没有结果。",[14,164166,164167],{},"常见使用场景：",[1696,164169,164170,164173,164176],{},[32,164171,164172],{},"函数没有返回值。",[32,164174,164175],{},"变量暂时没有具体值。",[32,164177,164178],{},"表示查询不到结果。",[42,164180,164182],{"className":33028,"code":164181,"language":33030,"meta":47,"style":47},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[49,164183,164184,164192,164196,164209],{"__ignoreMap":47},[52,164185,164186,164188,164190],{"class":54,"line":55},[52,164187,163956],{"class":79},[52,164189,292],{"class":58},[52,164191,154822],{"class":308},[52,164193,164194],{"class":54,"line":66},[52,164195,123],{"emptyLinePlaceholder":122},[52,164197,164198,164200,164203,164205,164207],{"class":54,"line":83},[52,164199,4578],{"class":58},[52,164201,164202],{"class":79}," result ",[52,164204,41577],{"class":58},[52,164206,41583],{"class":308},[52,164208,6718],{"class":79},[52,164210,164211,164213,164215,164218],{"class":54,"line":91},[52,164212,33949],{"class":308},[52,164214,1216],{"class":79},[52,164216,164217],{"class":62},"\"没有数据\"",[52,164219,708],{"class":79},[14,164221,164222,164223,164225,164226,164229,164230,31035],{},"判断 ",[49,164224,98336],{}," 推荐使用 ",[49,164227,164228],{},"is None","，不要写成 ",[49,164231,164232],{},"== None",[18,164234,164236],{"id":164235},"_58-函数文档字符串","5.8 函数文档字符串",[14,164238,164239],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[42,164241,164243],{"className":33028,"code":164242,"language":33030,"meta":47,"style":47},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[49,164244,164245,164255,164260],{"__ignoreMap":47},[52,164246,164247,164249,164252],{"class":54,"line":55},[52,164248,34597],{"class":58},[52,164250,164251],{"class":75}," calculate_bmi",[52,164253,164254],{"class":79},"(weight, height):\n",[52,164256,164257],{"class":54,"line":66},[52,164258,164259],{"class":62},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[52,164261,164262,164264,164267,164269,164272,164274],{"class":54,"line":83},[52,164263,1441],{"class":58},[52,164265,164266],{"class":79}," weight ",[52,164268,2340],{"class":58},[52,164270,164271],{"class":79}," height ",[52,164273,3139],{"class":58},[52,164275,50373],{"class":308},[14,164277,164278],{},"查看说明：",[42,164280,164282],{"className":33028,"code":164281,"language":33030,"meta":47,"style":47},"help(calculate_bmi)\n",[49,164283,164284],{"__ignoreMap":47},[52,164285,164286,164289],{"class":54,"line":55},[52,164287,164288],{"class":308},"help",[52,164290,164291],{"class":79},"(calculate_bmi)\n",[14,164293,164294],{},"较完整的写法：",[42,164296,164298],{"className":33028,"code":164297,"language":33030,"meta":47,"style":47},"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",[49,164299,164300,164308,164313,164318,164322,164327,164332,164337,164341],{"__ignoreMap":47},[52,164301,164302,164304,164306],{"class":54,"line":55},[52,164303,34597],{"class":58},[52,164305,164251],{"class":75},[52,164307,164254],{"class":79},[52,164309,164310],{"class":54,"line":66},[52,164311,164312],{"class":62},"    \"\"\"\n",[52,164314,164315],{"class":54,"line":83},[52,164316,164317],{"class":62},"    计算BMI。\n",[52,164319,164320],{"class":54,"line":91},[52,164321,123],{"emptyLinePlaceholder":122},[52,164323,164324],{"class":54,"line":98},[52,164325,164326],{"class":62},"    :param weight: 体重，单位kg\n",[52,164328,164329],{"class":54,"line":107},[52,164330,164331],{"class":62},"    :param height: 身高，单位m\n",[52,164333,164334],{"class":54,"line":113},[52,164335,164336],{"class":62},"    :return: BMI数值\n",[52,164338,164339],{"class":54,"line":119},[52,164340,164312],{"class":62},[52,164342,164343,164345,164347,164349,164351,164353],{"class":54,"line":126},[52,164344,1441],{"class":58},[52,164346,164266],{"class":79},[52,164348,2340],{"class":58},[52,164350,164271],{"class":79},[52,164352,3139],{"class":58},[52,164354,50373],{"class":308},[18,164356,164358],{"id":164357},"_59-变量作用域","5.9 变量作用域",[3195,164360,164362],{"id":164361},"_591-局部变量","5.9.1 局部变量",[14,164364,164365],{},"在函数内部定义的变量，只能在函数内部使用。",[42,164367,164369],{"className":33028,"code":164368,"language":33030,"meta":47,"style":47},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[49,164370,164371,164380,164388,164394,164398,164402,164407],{"__ignoreMap":47},[52,164372,164373,164375,164378],{"class":54,"line":55},[52,164374,34597],{"class":58},[52,164376,164377],{"class":75}," test",[52,164379,34603],{"class":79},[52,164381,164382,164384,164386],{"class":54,"line":66},[52,164383,48243],{"class":79},[52,164385,292],{"class":58},[52,164387,61078],{"class":308},[52,164389,164390,164392],{"class":54,"line":83},[52,164391,33949],{"class":308},[52,164393,3236],{"class":79},[52,164395,164396],{"class":54,"line":91},[52,164397,123],{"emptyLinePlaceholder":122},[52,164399,164400],{"class":54,"line":98},[52,164401,123],{"emptyLinePlaceholder":122},[52,164403,164404],{"class":54,"line":107},[52,164405,164406],{"class":79},"test()\n",[52,164408,164409,164411,164414],{"class":54,"line":113},[52,164410,33065],{"class":308},[52,164412,164413],{"class":79},"(num)  ",[52,164415,164416],{"class":94},"# 报错\n",[3195,164418,164420],{"id":164419},"_592-全局变量","5.9.2 全局变量",[14,164422,164423],{},"在函数外部定义的变量，可以在函数内部读取。",[42,164425,164427],{"className":33028,"code":164426,"language":33030,"meta":47,"style":47},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[49,164428,164429,164437,164441,164445,164453,164459,164463,164467],{"__ignoreMap":47},[52,164430,164431,164433,164435],{"class":54,"line":55},[52,164432,149186],{"class":79},[52,164434,292],{"class":58},[52,164436,152003],{"class":62},[52,164438,164439],{"class":54,"line":66},[52,164440,123],{"emptyLinePlaceholder":122},[52,164442,164443],{"class":54,"line":83},[52,164444,123],{"emptyLinePlaceholder":122},[52,164446,164447,164449,164451],{"class":54,"line":91},[52,164448,34597],{"class":58},[52,164450,163646],{"class":75},[52,164452,34603],{"class":79},[52,164454,164455,164457],{"class":54,"line":98},[52,164456,33949],{"class":308},[52,164458,153310],{"class":79},[52,164460,164461],{"class":54,"line":107},[52,164462,123],{"emptyLinePlaceholder":122},[52,164464,164465],{"class":54,"line":113},[52,164466,123],{"emptyLinePlaceholder":122},[52,164468,164469],{"class":54,"line":119},[52,164470,163681],{"class":79},[14,164472,164473,164474,31035],{},"如果要在函数内部修改全局变量，需要 ",[49,164475,164476],{},"global",[42,164478,164480],{"className":33028,"code":164479,"language":33030,"meta":47,"style":47},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[49,164481,164482,164490,164494,164498,164507,164515,164523,164527,164531,164536],{"__ignoreMap":47},[52,164483,164484,164486,164488],{"class":54,"line":55},[52,164485,149341],{"class":79},[52,164487,292],{"class":58},[52,164489,49983],{"class":308},[52,164491,164492],{"class":54,"line":66},[52,164493,123],{"emptyLinePlaceholder":122},[52,164495,164496],{"class":54,"line":83},[52,164497,123],{"emptyLinePlaceholder":122},[52,164499,164500,164502,164505],{"class":54,"line":91},[52,164501,34597],{"class":58},[52,164503,164504],{"class":75}," add_count",[52,164506,34603],{"class":79},[52,164508,164509,164512],{"class":54,"line":98},[52,164510,164511],{"class":58},"    global",[52,164513,164514],{"class":79}," count\n",[52,164516,164517,164519,164521],{"class":54,"line":107},[52,164518,162083],{"class":79},[52,164520,1910],{"class":58},[52,164522,58349],{"class":308},[52,164524,164525],{"class":54,"line":113},[52,164526,123],{"emptyLinePlaceholder":122},[52,164528,164529],{"class":54,"line":119},[52,164530,123],{"emptyLinePlaceholder":122},[52,164532,164533],{"class":54,"line":126},[52,164534,164535],{"class":79},"add_count()\n",[52,164537,164538,164540],{"class":54,"line":132},[52,164539,33065],{"class":308},[52,164541,164542],{"class":79},"(count)\n",[14,164544,164545],{},"不建议大量使用全局变量，项目变大后很难维护。",[18,164547,164549],{"id":164548},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,164551,164552],{},"一个函数中可以调用另一个函数。",[42,164554,164556],{"className":33028,"code":164555,"language":33030,"meta":47,"style":47},"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",[49,164557,164558,164567,164581,164585,164589,164598,164603,164623,164644,164648,164652,164656],{"__ignoreMap":47},[52,164559,164560,164562,164565],{"class":54,"line":55},[52,164561,34597],{"class":58},[52,164563,164564],{"class":75}," print_line",[52,164566,34603],{"class":79},[52,164568,164569,164571,164573,164575,164577,164579],{"class":54,"line":66},[52,164570,33949],{"class":308},[52,164572,1216],{"class":79},[52,164574,35133],{"class":62},[52,164576,872],{"class":58},[52,164578,81315],{"class":308},[52,164580,708],{"class":79},[52,164582,164583],{"class":54,"line":83},[52,164584,123],{"emptyLinePlaceholder":122},[52,164586,164587],{"class":54,"line":91},[52,164588,123],{"emptyLinePlaceholder":122},[52,164590,164591,164593,164596],{"class":54,"line":98},[52,164592,34597],{"class":58},[52,164594,164595],{"class":75}," print_info",[52,164597,152025],{"class":79},[52,164599,164600],{"class":54,"line":107},[52,164601,164602],{"class":79},"    print_line()\n",[52,164604,164605,164607,164609,164611,164613,164615,164617,164619,164621],{"class":54,"line":113},[52,164606,33949],{"class":308},[52,164608,1216],{"class":79},[52,164610,3273],{"class":58},[52,164612,159332],{"class":62},[52,164614,383],{"class":308},[52,164616,82460],{"class":79},[52,164618,4132],{"class":308},[52,164620,2844],{"class":62},[52,164622,708],{"class":79},[52,164624,164625,164627,164629,164631,164634,164636,164638,164640,164642],{"class":54,"line":119},[52,164626,33949],{"class":308},[52,164628,1216],{"class":79},[52,164630,3273],{"class":58},[52,164632,164633],{"class":62},"\"年龄:",[52,164635,383],{"class":308},[52,164637,72871],{"class":79},[52,164639,4132],{"class":308},[52,164641,2844],{"class":62},[52,164643,708],{"class":79},[52,164645,164646],{"class":54,"line":126},[52,164647,164602],{"class":79},[52,164649,164650],{"class":54,"line":132},[52,164651,123],{"emptyLinePlaceholder":122},[52,164653,164654],{"class":54,"line":138},[52,164655,123],{"emptyLinePlaceholder":122},[52,164657,164658,164661,164663,164665,164667],{"class":54,"line":144},[52,164659,164660],{"class":79},"print_info(",[52,164662,152538],{"class":62},[52,164664,15083],{"class":79},[52,164666,309],{"class":308},[52,164668,708],{"class":79},[14,164670,164671],{},"这种方式可以把小功能组合成大功能。",[18,164673,164675],{"id":164674},"_511-参数检查","5.11 参数检查",[14,164677,164678],{},"函数内部可以检查参数是否合法。",[42,164680,164682],{"className":33028,"code":164681,"language":33030,"meta":47,"style":47},"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",[49,164683,164684,164693,164705,164711,164721,164725,164729,164746,164750,164762,164773,164779],{"__ignoreMap":47},[52,164685,164686,164688,164691],{"class":54,"line":55},[52,164687,34597],{"class":58},[52,164689,164690],{"class":75}," divide",[52,164692,153743],{"class":79},[52,164694,164695,164697,164699,164701,164703],{"class":54,"line":66},[52,164696,6088],{"class":58},[52,164698,13530],{"class":79},[52,164700,5938],{"class":58},[52,164702,1444],{"class":308},[52,164704,6718],{"class":79},[52,164706,164707,164709],{"class":54,"line":83},[52,164708,17400],{"class":58},[52,164710,154822],{"class":308},[52,164712,164713,164715,164717,164719],{"class":54,"line":91},[52,164714,1441],{"class":58},[52,164716,13517],{"class":79},[52,164718,2340],{"class":58},[52,164720,153754],{"class":79},[52,164722,164723],{"class":54,"line":98},[52,164724,123],{"emptyLinePlaceholder":122},[52,164726,164727],{"class":54,"line":107},[52,164728,123],{"emptyLinePlaceholder":122},[52,164730,164731,164733,164735,164738,164740,164742,164744],{"class":54,"line":113},[52,164732,163956],{"class":79},[52,164734,292],{"class":58},[52,164736,164737],{"class":79}," divide(",[52,164739,3649],{"class":308},[52,164741,15083],{"class":79},[52,164743,692],{"class":308},[52,164745,708],{"class":79},[52,164747,164748],{"class":54,"line":119},[52,164749,123],{"emptyLinePlaceholder":122},[52,164751,164752,164754,164756,164758,164760],{"class":54,"line":126},[52,164753,4578],{"class":58},[52,164755,164202],{"class":79},[52,164757,41577],{"class":58},[52,164759,41583],{"class":308},[52,164761,6718],{"class":79},[52,164763,164764,164766,164768,164771],{"class":54,"line":132},[52,164765,33949],{"class":308},[52,164767,1216],{"class":79},[52,164769,164770],{"class":62},"\"除数不能为0\"",[52,164772,708],{"class":79},[52,164774,164775,164777],{"class":54,"line":138},[52,164776,4733],{"class":58},[52,164778,6718],{"class":79},[52,164780,164781,164783],{"class":54,"line":144},[52,164782,33949],{"class":308},[52,164784,79235],{"class":79},[18,164786,164788],{"id":164787},"_512-类型提示","5.12 类型提示",[14,164790,164791],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[42,164793,164795],{"className":33028,"code":164794,"language":33030,"meta":47,"style":47},"def add(a: int, b: int) -> int:\n    return a + b\n",[49,164796,164797,164820],{"__ignoreMap":47},[52,164798,164799,164801,164803,164806,164808,164811,164813,164816,164818],{"class":54,"line":55},[52,164800,34597],{"class":58},[52,164802,8176],{"class":75},[52,164804,164805],{"class":79},"(a: ",[52,164807,242],{"class":308},[52,164809,164810],{"class":79},", b: ",[52,164812,242],{"class":308},[52,164814,164815],{"class":79},") -> ",[52,164817,242],{"class":308},[52,164819,6718],{"class":79},[52,164821,164822,164824,164826,164828],{"class":54,"line":66},[52,164823,1441],{"class":58},[52,164825,13517],{"class":79},[52,164827,2004],{"class":58},[52,164829,153754],{"class":79},[14,164831,164832],{},"字符串参数：",[42,164834,164836],{"className":33028,"code":164835,"language":33030,"meta":47,"style":47},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[49,164837,164838,164855],{"__ignoreMap":47},[52,164839,164840,164842,164844,164847,164849,164851,164853],{"class":54,"line":55},[52,164841,34597],{"class":58},[52,164843,163646],{"class":75},[52,164845,164846],{"class":79},"(name: ",[52,164848,4350],{"class":308},[52,164850,164815],{"class":79},[52,164852,98336],{"class":308},[52,164854,6718],{"class":79},[52,164856,164857,164859,164861,164863,164865,164867,164869,164871,164873],{"class":54,"line":66},[52,164858,33949],{"class":308},[52,164860,1216],{"class":79},[52,164862,3273],{"class":58},[52,164864,159704],{"class":62},[52,164866,383],{"class":308},[52,164868,82460],{"class":79},[52,164870,4132],{"class":308},[52,164872,2844],{"class":62},[52,164874,708],{"class":79},[14,164876,164877],{},"列表参数：",[42,164879,164881],{"className":33028,"code":164880,"language":33030,"meta":47,"style":47},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[49,164882,164883,164902,164910,164922,164931],{"__ignoreMap":47},[52,164884,164885,164887,164890,164893,164895,164898,164900],{"class":54,"line":55},[52,164886,34597],{"class":58},[52,164888,164889],{"class":75}," get_total",[52,164891,164892],{"class":79},"(numbers: list[",[52,164894,242],{"class":308},[52,164896,164897],{"class":79},"]) -> ",[52,164899,242],{"class":308},[52,164901,6718],{"class":79},[52,164903,164904,164906,164908],{"class":54,"line":66},[52,164905,161957],{"class":79},[52,164907,292],{"class":58},[52,164909,49983],{"class":308},[52,164911,164912,164914,164917,164919],{"class":54,"line":83},[52,164913,679],{"class":58},[52,164915,164916],{"class":79}," number ",[52,164918,28693],{"class":58},[52,164920,164921],{"class":79}," numbers:\n",[52,164923,164924,164926,164928],{"class":54,"line":91},[52,164925,162632],{"class":79},[52,164927,1910],{"class":58},[52,164929,164930],{"class":79}," number\n",[52,164932,164933,164935],{"class":54,"line":98},[52,164934,1441],{"class":58},[52,164936,164937],{"class":79}," total\n",[14,164939,164940],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[18,164942,164944],{"id":164943},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[42,164946,164948],{"className":33028,"code":164947,"language":33030,"meta":47,"style":47},"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",[49,164949,164950,164960,164964,164968,164976,164987,164997,165007,165017,165027,165031,165035,165044,165066,165070,165074,165083,165089,165109,165121,165132,165136,165145,165156,165161,165165,165169,165178,165184,165203,165215,165225,165229,165240,165250,165254,165262,165273,165277,165281,165285,165293,165298,165312,165316,165328,165333,165345,165350,165362,165367,165379,165389,165393,165399],{"__ignoreMap":47},[52,164951,164952,164955,164957],{"class":54,"line":55},[52,164953,164954],{"class":79},"balance ",[52,164956,292],{"class":58},[52,164958,164959],{"class":308}," 1000\n",[52,164961,164962],{"class":54,"line":66},[52,164963,123],{"emptyLinePlaceholder":122},[52,164965,164966],{"class":54,"line":83},[52,164967,123],{"emptyLinePlaceholder":122},[52,164969,164970,164972,164974],{"class":54,"line":91},[52,164971,34597],{"class":58},[52,164973,154683],{"class":75},[52,164975,34603],{"class":79},[52,164977,164978,164980,164982,164985],{"class":54,"line":98},[52,164979,33949],{"class":308},[52,164981,1216],{"class":79},[52,164983,164984],{"class":62},"\"====== ATM ======\"",[52,164986,708],{"class":79},[52,164988,164989,164991,164993,164995],{"class":54,"line":107},[52,164990,33949],{"class":308},[52,164992,1216],{"class":79},[52,164994,163298],{"class":62},[52,164996,708],{"class":79},[52,164998,164999,165001,165003,165005],{"class":54,"line":113},[52,165000,33949],{"class":308},[52,165002,1216],{"class":79},[52,165004,163309],{"class":62},[52,165006,708],{"class":79},[52,165008,165009,165011,165013,165015],{"class":54,"line":119},[52,165010,33949],{"class":308},[52,165012,1216],{"class":79},[52,165014,163320],{"class":62},[52,165016,708],{"class":79},[52,165018,165019,165021,165023,165025],{"class":54,"line":126},[52,165020,33949],{"class":308},[52,165022,1216],{"class":79},[52,165024,163331],{"class":62},[52,165026,708],{"class":79},[52,165028,165029],{"class":54,"line":132},[52,165030,123],{"emptyLinePlaceholder":122},[52,165032,165033],{"class":54,"line":138},[52,165034,123],{"emptyLinePlaceholder":122},[52,165036,165037,165039,165042],{"class":54,"line":144},[52,165038,34597],{"class":58},[52,165040,165041],{"class":75}," show_balance",[52,165043,34603],{"class":79},[52,165045,165046,165048,165050,165052,165055,165057,165060,165062,165064],{"class":54,"line":153},[52,165047,33949],{"class":308},[52,165049,1216],{"class":79},[52,165051,3273],{"class":58},[52,165053,165054],{"class":62},"\"当前余额:",[52,165056,383],{"class":308},[52,165058,165059],{"class":79},"balance",[52,165061,4132],{"class":308},[52,165063,159662],{"class":62},[52,165065,708],{"class":79},[52,165067,165068],{"class":54,"line":159},[52,165069,123],{"emptyLinePlaceholder":122},[52,165071,165072],{"class":54,"line":167},[52,165073,123],{"emptyLinePlaceholder":122},[52,165075,165076,165078,165081],{"class":54,"line":173},[52,165077,34597],{"class":58},[52,165079,165080],{"class":75}," save_money",[52,165082,34603],{"class":79},[52,165084,165085,165087],{"class":54,"line":181},[52,165086,164511],{"class":58},[52,165088,152749],{"class":79},[52,165090,165091,165094,165096,165098,165100,165102,165104,165107],{"class":54,"line":186},[52,165092,165093],{"class":79},"    money ",[52,165095,292],{"class":58},[52,165097,112447],{"class":308},[52,165099,1216],{"class":79},[52,165101,56471],{"class":308},[52,165103,1216],{"class":79},[52,165105,165106],{"class":62},"\"请输入存款金额:\"",[52,165108,33147],{"class":79},[52,165110,165111,165113,165115,165117,165119],{"class":54,"line":191},[52,165112,6088],{"class":58},[52,165114,152792],{"class":79},[52,165116,4632],{"class":58},[52,165118,1444],{"class":308},[52,165120,6718],{"class":79},[52,165122,165123,165125,165127,165130],{"class":54,"line":196},[52,165124,35101],{"class":308},[52,165126,1216],{"class":79},[52,165128,165129],{"class":62},"\"金额必须大于0\"",[52,165131,708],{"class":79},[52,165133,165134],{"class":54,"line":201},[52,165135,155011],{"class":58},[52,165137,165138,165141,165143],{"class":54,"line":206},[52,165139,165140],{"class":79},"    balance ",[52,165142,1910],{"class":58},[52,165144,152825],{"class":79},[52,165146,165147,165149,165151,165154],{"class":54,"line":211},[52,165148,33949],{"class":308},[52,165150,1216],{"class":79},[52,165152,165153],{"class":62},"\"存款成功\"",[52,165155,708],{"class":79},[52,165157,165158],{"class":54,"line":218},[52,165159,165160],{"class":79},"    show_balance()\n",[52,165162,165163],{"class":54,"line":223},[52,165164,123],{"emptyLinePlaceholder":122},[52,165166,165167],{"class":54,"line":230},[52,165168,123],{"emptyLinePlaceholder":122},[52,165170,165171,165173,165176],{"class":54,"line":239},[52,165172,34597],{"class":58},[52,165174,165175],{"class":75}," withdraw_money",[52,165177,34603],{"class":79},[52,165179,165180,165182],{"class":54,"line":251},[52,165181,164511],{"class":58},[52,165183,152749],{"class":79},[52,165185,165186,165188,165190,165192,165194,165196,165198,165201],{"class":54,"line":256},[52,165187,165093],{"class":79},[52,165189,292],{"class":58},[52,165191,112447],{"class":308},[52,165193,1216],{"class":79},[52,165195,56471],{"class":308},[52,165197,1216],{"class":79},[52,165199,165200],{"class":62},"\"请输入取款金额:\"",[52,165202,33147],{"class":79},[52,165204,165205,165207,165209,165211,165213],{"class":54,"line":262},[52,165206,6088],{"class":58},[52,165208,152792],{"class":79},[52,165210,4632],{"class":58},[52,165212,1444],{"class":308},[52,165214,6718],{"class":79},[52,165216,165217,165219,165221,165223],{"class":54,"line":268},[52,165218,35101],{"class":308},[52,165220,1216],{"class":79},[52,165222,165129],{"class":62},[52,165224,708],{"class":79},[52,165226,165227],{"class":54,"line":280},[52,165228,155011],{"class":58},[52,165230,165231,165233,165235,165237],{"class":54,"line":286},[52,165232,6088],{"class":58},[52,165234,152792],{"class":79},[52,165236,2674],{"class":58},[52,165238,165239],{"class":79}," balance:\n",[52,165241,165242,165244,165246,165248],{"class":54,"line":300},[52,165243,35101],{"class":308},[52,165245,1216],{"class":79},[52,165247,152887],{"class":62},[52,165249,708],{"class":79},[52,165251,165252],{"class":54,"line":314},[52,165253,155011],{"class":58},[52,165255,165256,165258,165260],{"class":54,"line":327},[52,165257,165140],{"class":79},[52,165259,152902],{"class":58},[52,165261,152825],{"class":79},[52,165263,165264,165266,165268,165271],{"class":54,"line":333},[52,165265,33949],{"class":308},[52,165267,1216],{"class":79},[52,165269,165270],{"class":62},"\"取款成功\"",[52,165272,708],{"class":79},[52,165274,165275],{"class":54,"line":360},[52,165276,165160],{"class":79},[52,165278,165279],{"class":54,"line":365},[52,165280,123],{"emptyLinePlaceholder":122},[52,165282,165283],{"class":54,"line":371},[52,165284,123],{"emptyLinePlaceholder":122},[52,165286,165287,165289,165291],{"class":54,"line":400},[52,165288,111313],{"class":58},[52,165290,97942],{"class":308},[52,165292,6718],{"class":79},[52,165294,165295],{"class":54,"line":405},[52,165296,165297],{"class":79},"    show_menu()\n",[52,165299,165300,165302,165304,165306,165308,165310],{"class":54,"line":411},[52,165301,163342],{"class":79},[52,165303,292],{"class":58},[52,165305,63255],{"class":308},[52,165307,1216],{"class":79},[52,165309,155723],{"class":62},[52,165311,708],{"class":79},[52,165313,165314],{"class":54,"line":424},[52,165315,123],{"emptyLinePlaceholder":122},[52,165317,165318,165320,165322,165324,165326],{"class":54,"line":436},[52,165319,6088],{"class":58},[52,165321,155736],{"class":79},[52,165323,5938],{"class":58},[52,165325,155741],{"class":62},[52,165327,6718],{"class":79},[52,165329,165330],{"class":54,"line":449},[52,165331,165332],{"class":79},"        show_balance()\n",[52,165334,165335,165337,165339,165341,165343],{"class":54,"line":2160},[52,165336,41943],{"class":58},[52,165338,155736],{"class":79},[52,165340,5938],{"class":58},[52,165342,155760],{"class":62},[52,165344,6718],{"class":79},[52,165346,165347],{"class":54,"line":2186},[52,165348,165349],{"class":79},"        save_money()\n",[52,165351,165352,165354,165356,165358,165360],{"class":54,"line":2209},[52,165353,41943],{"class":58},[52,165355,155736],{"class":79},[52,165357,5938],{"class":58},[52,165359,155778],{"class":62},[52,165361,6718],{"class":79},[52,165363,165364],{"class":54,"line":2233},[52,165365,165366],{"class":79},"        withdraw_money()\n",[52,165368,165369,165371,165373,165375,165377],{"class":54,"line":2238},[52,165370,41943],{"class":58},[52,165372,155736],{"class":79},[52,165374,5938],{"class":58},[52,165376,155832],{"class":62},[52,165378,6718],{"class":79},[52,165380,165381,165383,165385,165387],{"class":54,"line":2243},[52,165382,35101],{"class":308},[52,165384,1216],{"class":79},[52,165386,155843],{"class":62},[52,165388,708],{"class":79},[52,165390,165391],{"class":54,"line":2248},[52,165392,34277],{"class":58},[52,165394,165395,165397],{"class":54,"line":2257},[52,165396,160672],{"class":58},[52,165398,6718],{"class":79},[52,165400,165401,165403,165405,165407],{"class":54,"line":2262},[52,165402,35101],{"class":308},[52,165404,1216],{"class":79},[52,165406,155864],{"class":62},[52,165408,708],{"class":79},[14,165410,165411],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[18,165413,165415],{"id":165414},"_514-易错点","5.14 易错点",[1696,165417,165418,165421,165424,165429,165434,165437],{},[32,165419,165420],{},"函数定义后必须调用才会执行。",[32,165422,165423],{},"函数名后面有括号才是调用。",[32,165425,165426,165428],{},[49,165427,19694],{}," 后面的代码不会执行。",[32,165430,165431,165432,31035],{},"没有返回值的函数默认返回 ",[49,165433,98336],{},[32,165435,165436],{},"局部变量不能在函数外部访问。",[32,165438,165439,165440,165442],{},"不要滥用 ",[49,165441,164476],{},"，更好的方式是让函数返回新值。",[14,165444,165445,165446,165448],{},"例如不用 ",[49,165447,164476],{}," 改写存款：",[42,165450,165452],{"className":33028,"code":165451,"language":33030,"meta":47,"style":47},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[49,165453,165454,165463,165474,165478,165482,165490,165503],{"__ignoreMap":47},[52,165455,165456,165458,165460],{"class":54,"line":55},[52,165457,34597],{"class":58},[52,165459,165080],{"class":75},[52,165461,165462],{"class":79},"(balance, money):\n",[52,165464,165465,165467,165470,165472],{"class":54,"line":66},[52,165466,1441],{"class":58},[52,165468,165469],{"class":79}," balance ",[52,165471,2004],{"class":58},[52,165473,152825],{"class":79},[52,165475,165476],{"class":54,"line":83},[52,165477,123],{"emptyLinePlaceholder":122},[52,165479,165480],{"class":54,"line":91},[52,165481,123],{"emptyLinePlaceholder":122},[52,165483,165484,165486,165488],{"class":54,"line":98},[52,165485,164954],{"class":79},[52,165487,292],{"class":58},[52,165489,164959],{"class":308},[52,165491,165492,165494,165496,165499,165501],{"class":54,"line":107},[52,165493,164954],{"class":79},[52,165495,292],{"class":58},[52,165497,165498],{"class":79}," save_money(balance, ",[52,165500,856],{"class":308},[52,165502,708],{"class":79},[52,165504,165505,165507],{"class":54,"line":113},[52,165506,33065],{"class":308},[52,165508,165509],{"class":79},"(balance)\n",[18,165511,165513],{"id":165512},"_515-本章练习","5.15 本章练习",[1696,165515,165516,165523,165529,165535,165541],{},[32,165517,165518,165519,165522],{},"定义函数 ",[49,165520,165521],{},"print_student(name, age)","，输出学生信息。",[32,165524,165518,165525,165528],{},[49,165526,165527],{},"get_max(a, b, c)","，返回三个数中的最大值。",[32,165530,165518,165531,165534],{},[49,165532,165533],{},"is_even(num)","，判断一个数是否为偶数。",[32,165536,165518,165537,165540],{},[49,165538,165539],{},"calculate_bmi(weight, height)","，返回 BMI。",[32,165542,165543],{},"把第 4 章的菜单程序拆分成多个函数。",[3141,165545,165546],{},"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":47,"searchDepth":66,"depth":66,"links":165548},[165549,165550,165551,165552,165553,165554,165555,165556,165557,165561,165562,165563,165564,165565,165566],{"id":163569,"depth":66,"text":163570},{"id":163610,"depth":66,"text":163611},{"id":163700,"depth":66,"text":163701},{"id":163781,"depth":66,"text":163782},{"id":163914,"depth":66,"text":163915},{"id":164036,"depth":66,"text":164037},{"id":164158,"depth":66,"text":164159},{"id":164235,"depth":66,"text":164236},{"id":164357,"depth":66,"text":164358,"children":165558},[165559,165560],{"id":164361,"depth":83,"text":164362},{"id":164419,"depth":83,"text":164420},{"id":164548,"depth":66,"text":164549},{"id":164674,"depth":66,"text":164675},{"id":164787,"depth":66,"text":164788},{"id":164943,"depth":66,"text":164944},{"id":165414,"depth":66,"text":165415},{"id":165512,"depth":66,"text":165513},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163561,"description":26025},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":165573,"title":165574,"body":165575,"description":26025,"extension":3153,"meta":168619,"navigation":122,"path":168620,"seo":168621,"stem":168622,"__hash__":168623},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":165576,"toc":168600},[165577,165580,165584,165587,165590,165694,165697,165701,165704,165784,165787,165791,165794,165854,165857,165893,165896,165911,165915,165988,165991,166046,166049,166119,166122,166206,166216,166274,166278,166323,166326,166352,166355,166461,166465,166468,166510,166513,166577,166580,166584,166587,166648,166651,166681,166684,166722,166726,166729,166738,166741,166865,166868,166909,166913,166916,166927,166967,166970,166985,166990,166993,167060,167063,167153,167157,167160,167208,167211,167238,167240,167270,167273,167293,167296,167327,167330,167363,167367,167370,167394,167397,167421,167424,167448,167452,167455,167585,167588,167668,167671,167746,167750,167753,167803,167806,167848,167851,167875,167877,167901,167904,167959,167962,168028,168032,168035,168038,168076,168079,168132,168135,168181,168184,168217,168220,168224,168543,168547,168576,168580,168597],[10,165578,165574],{"id":165579},"_6-数据容器",[18,165581,165583],{"id":165582},"_61-什么是数据容器","6.1 什么是数据容器",[14,165585,165586],{},"数据容器用于一次保存多个数据。",[14,165588,165589],{},"常见容器：",[3353,165591,165592,165609],{},[3356,165593,165594],{},[3359,165595,165596,165598,165601,165604,165607],{},[3362,165597,28421],{},[3362,165599,165600],{},"是否有序",[3362,165602,165603],{},"是否可变",[3362,165605,165606],{},"是否允许重复",[3362,165608,30142],{},[3399,165610,165611,165629,165645,165660,165677],{},[3359,165612,165613,165616,165619,165622,165625],{},[3404,165614,165615],{},"list列表",[3404,165617,165618],{},"有序",[3404,165620,165621],{},"可变",[3404,165623,165624],{},"允许",[3404,165626,165627],{},[49,165628,157907],{},[3359,165630,165631,165634,165636,165639,165641],{},[3404,165632,165633],{},"tuple元组",[3404,165635,165618],{},[3404,165637,165638],{},"不可变",[3404,165640,165624],{},[3404,165642,165643],{},[49,165644,157920],{},[3359,165646,165647,165650,165652,165654,165656],{},[3404,165648,165649],{},"str字符串",[3404,165651,165618],{},[3404,165653,165638],{},[3404,165655,165624],{},[3404,165657,165658],{},[49,165659,158530],{},[3359,165661,165662,165665,165668,165670,165673],{},[3404,165663,165664],{},"set集合",[3404,165666,165667],{},"无序",[3404,165669,165621],{},[3404,165671,165672],{},"不允许",[3404,165674,165675],{},[49,165676,157945],{},[3359,165678,165679,165682,165684,165686,165689],{},[3404,165680,165681],{},"dict字典",[3404,165683,165618],{},[3404,165685,165621],{},[3404,165687,165688],{},"key不允许重复",[3404,165690,165691],{},[49,165692,165693],{},"{\"name\": \"小明\"}",[14,165695,165696],{},"Python 3.7 之后，字典保持插入顺序。",[18,165698,165700],{"id":165699},"_62-列表list","6.2 列表list",[14,165702,165703],{},"列表用于保存一组有顺序的数据。",[42,165705,165707],{"className":33028,"code":165706,"language":33030,"meta":47,"style":47},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[49,165708,165709,165729,165754,165775],{"__ignoreMap":47},[52,165710,165711,165713,165715,165717,165719,165721,165723,165725,165727],{"class":54,"line":55},[52,165712,163030],{"class":79},[52,165714,292],{"class":58},[52,165716,54876],{"class":79},[52,165718,152538],{"class":62},[52,165720,15083],{"class":79},[52,165722,153586],{"class":62},[52,165724,15083],{"class":79},[52,165726,162381],{"class":62},[52,165728,35896],{"class":79},[52,165730,165731,165734,165736,165738,165740,165742,165744,165746,165748,165750,165752],{"class":54,"line":66},[52,165732,165733],{"class":79},"numbers ",[52,165735,292],{"class":58},[52,165737,54876],{"class":79},[52,165739,629],{"class":308},[52,165741,15083],{"class":79},[52,165743,564],{"class":308},[52,165745,15083],{"class":79},[52,165747,2313],{"class":308},[52,165749,15083],{"class":79},[52,165751,3504],{"class":308},[52,165753,35896],{"class":79},[52,165755,165756,165759,165761,165763,165765,165767,165769,165771,165773],{"class":54,"line":83},[52,165757,165758],{"class":79},"mixed ",[52,165760,292],{"class":58},[52,165762,54876],{"class":79},[52,165764,152538],{"class":62},[52,165766,15083],{"class":79},[52,165768,309],{"class":308},[52,165770,15083],{"class":79},[52,165772,34126],{"class":308},[52,165774,35896],{"class":79},[52,165776,165777,165780,165782],{"class":54,"line":91},[52,165778,165779],{"class":79},"empty ",[52,165781,292],{"class":58},[52,165783,54488],{"class":79},[14,165785,165786],{},"推荐一个列表中保存同类数据，代码更清晰。",[18,165788,165790],{"id":165789},"_63-列表索引","6.3 列表索引",[14,165792,165793],{},"正向索引从 0 开始：",[42,165795,165797],{"className":33028,"code":165796,"language":33030,"meta":47,"style":47},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[49,165798,165799,165819,165823,165834,165844],{"__ignoreMap":47},[52,165800,165801,165803,165805,165807,165809,165811,165813,165815,165817],{"class":54,"line":55},[52,165802,163030],{"class":79},[52,165804,292],{"class":58},[52,165806,54876],{"class":79},[52,165808,152538],{"class":62},[52,165810,15083],{"class":79},[52,165812,153586],{"class":62},[52,165814,15083],{"class":79},[52,165816,162381],{"class":62},[52,165818,35896],{"class":79},[52,165820,165821],{"class":54,"line":66},[52,165822,123],{"emptyLinePlaceholder":122},[52,165824,165825,165827,165830,165832],{"class":54,"line":83},[52,165826,33065],{"class":308},[52,165828,165829],{"class":79},"(names[",[52,165831,692],{"class":308},[52,165833,7629],{"class":79},[52,165835,165836,165838,165840,165842],{"class":54,"line":91},[52,165837,33065],{"class":308},[52,165839,165829],{"class":79},[52,165841,629],{"class":308},[52,165843,7629],{"class":79},[52,165845,165846,165848,165850,165852],{"class":54,"line":98},[52,165847,33065],{"class":308},[52,165849,165829],{"class":79},[52,165851,564],{"class":308},[52,165853,7629],{"class":79},[14,165855,165856],{},"反向索引从 -1 开始：",[42,165858,165860],{"className":33028,"code":165859,"language":33030,"meta":47,"style":47},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[49,165861,165862,165878],{"__ignoreMap":47},[52,165863,165864,165866,165868,165870,165872,165875],{"class":54,"line":55},[52,165865,33065],{"class":308},[52,165867,165829],{"class":79},[52,165869,2642],{"class":58},[52,165871,629],{"class":308},[52,165873,165874],{"class":79},"])  ",[52,165876,165877],{"class":94},"# 小刚\n",[52,165879,165880,165882,165884,165886,165888,165890],{"class":54,"line":66},[52,165881,33065],{"class":308},[52,165883,165829],{"class":79},[52,165885,2642],{"class":58},[52,165887,564],{"class":308},[52,165889,165874],{"class":79},[52,165891,165892],{"class":94},"# 小红\n",[14,165894,165895],{},"索引越界会报错：",[42,165897,165899],{"className":33028,"code":165898,"language":33030,"meta":47,"style":47},"print(names[3])\n",[49,165900,165901],{"__ignoreMap":47},[52,165902,165903,165905,165907,165909],{"class":54,"line":55},[52,165904,33065],{"class":308},[52,165906,165829],{"class":79},[52,165908,2313],{"class":308},[52,165910,7629],{"class":79},[18,165912,165914],{"id":165913},"_64-列表常用方法","6.4 列表常用方法",[42,165916,165918],{"className":33028,"code":165917,"language":33030,"meta":47,"style":47},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[49,165919,165920,165936,165940,165949,165963,165977,165981],{"__ignoreMap":47},[52,165921,165922,165924,165926,165928,165930,165932,165934],{"class":54,"line":55},[52,165923,163030],{"class":79},[52,165925,292],{"class":58},[52,165927,54876],{"class":79},[52,165929,152538],{"class":62},[52,165931,15083],{"class":79},[52,165933,153586],{"class":62},[52,165935,35896],{"class":79},[52,165937,165938],{"class":54,"line":66},[52,165939,123],{"emptyLinePlaceholder":122},[52,165941,165942,165945,165947],{"class":54,"line":83},[52,165943,165944],{"class":79},"names.append(",[52,165946,162381],{"class":62},[52,165948,708],{"class":79},[52,165950,165951,165954,165956,165958,165961],{"class":54,"line":91},[52,165952,165953],{"class":79},"names.insert(",[52,165955,629],{"class":308},[52,165957,15083],{"class":79},[52,165959,165960],{"class":62},"\"小李\"",[52,165962,708],{"class":79},[52,165964,165965,165968,165970,165972,165975],{"class":54,"line":98},[52,165966,165967],{"class":79},"names.extend([",[52,165969,1101],{"class":62},[52,165971,15083],{"class":79},[52,165973,165974],{"class":62},"\"小赵\"",[52,165976,7629],{"class":79},[52,165978,165979],{"class":54,"line":107},[52,165980,123],{"emptyLinePlaceholder":122},[52,165982,165983,165985],{"class":54,"line":113},[52,165984,33065],{"class":308},[52,165986,165987],{"class":79},"(names)\n",[14,165989,165990],{},"删除元素：",[42,165992,165994],{"className":33028,"code":165993,"language":33030,"meta":47,"style":47},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[49,165995,165996,166005,166015,166029,166041],{"__ignoreMap":47},[52,165997,165998,166001,166003],{"class":54,"line":55},[52,165999,166000],{"class":79},"names.remove(",[52,166002,153586],{"class":62},[52,166004,708],{"class":79},[52,166006,166007,166010,166012],{"class":54,"line":66},[52,166008,166009],{"class":79},"last ",[52,166011,292],{"class":58},[52,166013,166014],{"class":79}," names.pop()\n",[52,166016,166017,166020,166022,166025,166027],{"class":54,"line":83},[52,166018,166019],{"class":79},"first ",[52,166021,292],{"class":58},[52,166023,166024],{"class":79}," names.pop(",[52,166026,692],{"class":308},[52,166028,708],{"class":79},[52,166030,166031,166034,166037,166039],{"class":54,"line":91},[52,166032,166033],{"class":58},"del",[52,166035,166036],{"class":79}," names[",[52,166038,692],{"class":308},[52,166040,35896],{"class":79},[52,166042,166043],{"class":54,"line":98},[52,166044,166045],{"class":79},"names.clear()\n",[14,166047,166048],{},"查询和统计：",[42,166050,166052],{"className":33028,"code":166051,"language":33030,"meta":47,"style":47},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[49,166053,166054,166082,166086,166097,166108],{"__ignoreMap":47},[52,166055,166056,166058,166060,166062,166064,166066,166068,166070,166072,166074,166076,166078,166080],{"class":54,"line":55},[52,166057,165733],{"class":79},[52,166059,292],{"class":58},[52,166061,54876],{"class":79},[52,166063,629],{"class":308},[52,166065,15083],{"class":79},[52,166067,564],{"class":308},[52,166069,15083],{"class":79},[52,166071,2313],{"class":308},[52,166073,15083],{"class":79},[52,166075,564],{"class":308},[52,166077,15083],{"class":79},[52,166079,3504],{"class":308},[52,166081,35896],{"class":79},[52,166083,166084],{"class":54,"line":66},[52,166085,123],{"emptyLinePlaceholder":122},[52,166087,166088,166090,166093,166095],{"class":54,"line":83},[52,166089,33065],{"class":308},[52,166091,166092],{"class":79},"(numbers.index(",[52,166094,2313],{"class":308},[52,166096,33147],{"class":79},[52,166098,166099,166101,166104,166106],{"class":54,"line":91},[52,166100,33065],{"class":308},[52,166102,166103],{"class":79},"(numbers.count(",[52,166105,564],{"class":308},[52,166107,33147],{"class":79},[52,166109,166110,166112,166114,166116],{"class":54,"line":98},[52,166111,33065],{"class":308},[52,166113,1216],{"class":79},[52,166115,2639],{"class":308},[52,166117,166118],{"class":79},"(numbers))\n",[14,166120,166121],{},"排序：",[42,166123,166125],{"className":33028,"code":166124,"language":33030,"meta":47,"style":47},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[49,166126,166127,166151,166155,166160,166167,166171,166185,166191,166195,166200],{"__ignoreMap":47},[52,166128,166129,166131,166133,166135,166137,166139,166141,166143,166145,166147,166149],{"class":54,"line":55},[52,166130,165733],{"class":79},[52,166132,292],{"class":58},[52,166134,54876],{"class":79},[52,166136,2313],{"class":308},[52,166138,15083],{"class":79},[52,166140,629],{"class":308},[52,166142,15083],{"class":79},[52,166144,1805],{"class":308},[52,166146,15083],{"class":79},[52,166148,564],{"class":308},[52,166150,35896],{"class":79},[52,166152,166153],{"class":54,"line":66},[52,166154,123],{"emptyLinePlaceholder":122},[52,166156,166157],{"class":54,"line":83},[52,166158,166159],{"class":79},"numbers.sort()\n",[52,166161,166162,166164],{"class":54,"line":91},[52,166163,33065],{"class":308},[52,166165,166166],{"class":79},"(numbers)\n",[52,166168,166169],{"class":54,"line":98},[52,166170,123],{"emptyLinePlaceholder":122},[52,166172,166173,166176,166179,166181,166183],{"class":54,"line":107},[52,166174,166175],{"class":79},"numbers.sort(",[52,166177,166178],{"class":1223},"reverse",[52,166180,292],{"class":58},[52,166182,34126],{"class":308},[52,166184,708],{"class":79},[52,166186,166187,166189],{"class":54,"line":113},[52,166188,33065],{"class":308},[52,166190,166166],{"class":79},[52,166192,166193],{"class":54,"line":119},[52,166194,123],{"emptyLinePlaceholder":122},[52,166196,166197],{"class":54,"line":126},[52,166198,166199],{"class":79},"numbers.reverse()\n",[52,166201,166202,166204],{"class":54,"line":132},[52,166203,33065],{"class":308},[52,166205,166166],{"class":79},[14,166207,166208,166211,166212,166215],{},[49,166209,166210],{},"sort()"," 会修改原列表，",[49,166213,166214],{},"sorted()"," 返回新列表。",[42,166217,166219],{"className":33028,"code":166218,"language":33030,"meta":47,"style":47},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[49,166220,166221,166245,166257,166261,166267],{"__ignoreMap":47},[52,166222,166223,166225,166227,166229,166231,166233,166235,166237,166239,166241,166243],{"class":54,"line":55},[52,166224,165733],{"class":79},[52,166226,292],{"class":58},[52,166228,54876],{"class":79},[52,166230,2313],{"class":308},[52,166232,15083],{"class":79},[52,166234,629],{"class":308},[52,166236,15083],{"class":79},[52,166238,1805],{"class":308},[52,166240,15083],{"class":79},[52,166242,564],{"class":308},[52,166244,35896],{"class":79},[52,166246,166247,166250,166252,166255],{"class":54,"line":66},[52,166248,166249],{"class":79},"new_numbers ",[52,166251,292],{"class":58},[52,166253,166254],{"class":308}," sorted",[52,166256,166166],{"class":79},[52,166258,166259],{"class":54,"line":83},[52,166260,123],{"emptyLinePlaceholder":122},[52,166262,166263,166265],{"class":54,"line":91},[52,166264,33065],{"class":308},[52,166266,166166],{"class":79},[52,166268,166269,166271],{"class":54,"line":98},[52,166270,33065],{"class":308},[52,166272,166273],{"class":79},"(new_numbers)\n",[18,166275,166277],{"id":166276},"_65-列表遍历","6.5 列表遍历",[42,166279,166281],{"className":33028,"code":166280,"language":33030,"meta":47,"style":47},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[49,166282,166283,166303,166307,166317],{"__ignoreMap":47},[52,166284,166285,166287,166289,166291,166293,166295,166297,166299,166301],{"class":54,"line":55},[52,166286,163030],{"class":79},[52,166288,292],{"class":58},[52,166290,54876],{"class":79},[52,166292,152538],{"class":62},[52,166294,15083],{"class":79},[52,166296,153586],{"class":62},[52,166298,15083],{"class":79},[52,166300,162381],{"class":62},[52,166302,35896],{"class":79},[52,166304,166305],{"class":54,"line":66},[52,166306,123],{"emptyLinePlaceholder":122},[52,166308,166309,166311,166313,166315],{"class":54,"line":83},[52,166310,6014],{"class":58},[52,166312,163066],{"class":79},[52,166314,28693],{"class":58},[52,166316,163071],{"class":79},[52,166318,166319,166321],{"class":54,"line":91},[52,166320,33949],{"class":308},[52,166322,153310],{"class":79},[14,166324,166325],{},"需要索引时：",[42,166327,166329],{"className":33028,"code":166328,"language":33030,"meta":47,"style":47},"for index, name in enumerate(names):\n    print(index, name)\n",[49,166330,166331,166345],{"__ignoreMap":47},[52,166332,166333,166335,166338,166340,166342],{"class":54,"line":55},[52,166334,6014],{"class":58},[52,166336,166337],{"class":79}," index, name ",[52,166339,28693],{"class":58},[52,166341,34256],{"class":308},[52,166343,166344],{"class":79},"(names):\n",[52,166346,166347,166349],{"class":54,"line":66},[52,166348,33949],{"class":308},[52,166350,166351],{"class":79},"(index, name)\n",[14,166353,166354],{},"统计总分：",[42,166356,166358],{"className":33028,"code":166357,"language":33030,"meta":47,"style":47},"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",[49,166359,166360,166385,166393,166397,166408,166416,166420,166437],{"__ignoreMap":47},[52,166361,166362,166365,166367,166369,166371,166373,166375,166377,166379,166381,166383],{"class":54,"line":55},[52,166363,166364],{"class":79},"scores ",[52,166366,292],{"class":58},[52,166368,54876],{"class":79},[52,166370,4052],{"class":308},[52,166372,15083],{"class":79},[52,166374,3928],{"class":308},[52,166376,15083],{"class":79},[52,166378,322],{"class":308},[52,166380,15083],{"class":79},[52,166382,3760],{"class":308},[52,166384,35896],{"class":79},[52,166386,166387,166389,166391],{"class":54,"line":66},[52,166388,159910],{"class":79},[52,166390,292],{"class":58},[52,166392,49983],{"class":308},[52,166394,166395],{"class":54,"line":83},[52,166396,123],{"emptyLinePlaceholder":122},[52,166398,166399,166401,166403,166405],{"class":54,"line":91},[52,166400,6014],{"class":58},[52,166402,160433],{"class":79},[52,166404,28693],{"class":58},[52,166406,166407],{"class":79}," scores:\n",[52,166409,166410,166412,166414],{"class":54,"line":98},[52,166411,161957],{"class":79},[52,166413,1910],{"class":58},[52,166415,4623],{"class":79},[52,166417,166418],{"class":54,"line":107},[52,166419,123],{"emptyLinePlaceholder":122},[52,166421,166422,166425,166427,166430,166432,166434],{"class":54,"line":113},[52,166423,166424],{"class":79},"avg ",[52,166426,292],{"class":58},[52,166428,166429],{"class":79}," total ",[52,166431,2340],{"class":58},[52,166433,1842],{"class":308},[52,166435,166436],{"class":79},"(scores)\n",[52,166438,166439,166441,166443,166445,166448,166450,166453,166455,166457,166459],{"class":54,"line":119},[52,166440,33065],{"class":308},[52,166442,1216],{"class":79},[52,166444,3273],{"class":58},[52,166446,166447],{"class":62},"\"平均分:",[52,166449,383],{"class":308},[52,166451,166452],{"class":79},"avg",[52,166454,159809],{"class":58},[52,166456,4132],{"class":308},[52,166458,2844],{"class":62},[52,166460,708],{"class":79},[18,166462,166464],{"id":166463},"_66-元组tuple","6.6 元组tuple",[14,166466,166467],{},"元组和列表类似，但不可修改。",[42,166469,166471],{"className":33028,"code":166470,"language":33030,"meta":47,"style":47},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[49,166472,166473,166490],{"__ignoreMap":47},[52,166474,166475,166478,166480,166482,166484,166486,166488],{"class":54,"line":55},[52,166476,166477],{"class":79},"point ",[52,166479,292],{"class":58},[52,166481,682],{"class":79},[52,166483,3649],{"class":308},[52,166485,15083],{"class":79},[52,166487,444],{"class":308},[52,166489,708],{"class":79},[52,166491,166492,166494,166496,166498,166500,166502,166504,166506,166508],{"class":54,"line":66},[52,166493,118964],{"class":79},[52,166495,292],{"class":58},[52,166497,682],{"class":79},[52,166499,152538],{"class":62},[52,166501,15083],{"class":79},[52,166503,309],{"class":308},[52,166505,15083],{"class":79},[52,166507,71919],{"class":62},[52,166509,708],{"class":79},[14,166511,166512],{},"单元素元组必须加逗号：",[42,166514,166516],{"className":33028,"code":166515,"language":33030,"meta":47,"style":47},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[49,166517,166518,166532,166545,166549,166563],{"__ignoreMap":47},[52,166519,166520,166523,166525,166527,166529],{"class":54,"line":55},[52,166521,166522],{"class":79},"t1 ",[52,166524,292],{"class":58},[52,166526,682],{"class":79},[52,166528,3649],{"class":308},[52,166530,166531],{"class":79},",)\n",[52,166533,166534,166537,166539,166541,166543],{"class":54,"line":66},[52,166535,166536],{"class":79},"t2 ",[52,166538,292],{"class":58},[52,166540,682],{"class":79},[52,166542,3649],{"class":308},[52,166544,708],{"class":79},[52,166546,166547],{"class":54,"line":83},[52,166548,123],{"emptyLinePlaceholder":122},[52,166550,166551,166553,166555,166557,166560],{"class":54,"line":91},[52,166552,33065],{"class":308},[52,166554,1216],{"class":79},[52,166556,105757],{"class":308},[52,166558,166559],{"class":79},"(t1))  ",[52,166561,166562],{"class":94},"# tuple\n",[52,166564,166565,166567,166569,166571,166574],{"class":54,"line":98},[52,166566,33065],{"class":308},[52,166568,1216],{"class":79},[52,166570,105757],{"class":308},[52,166572,166573],{"class":79},"(t2))  ",[52,166575,166576],{"class":94},"# int\n",[14,166578,166579],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[18,166581,166583],{"id":166582},"_67-字符串str","6.7 字符串str",[14,166585,166586],{},"字符串也是序列，可以索引、切片和遍历。",[42,166588,166590],{"className":33028,"code":166589,"language":33030,"meta":47,"style":47},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[49,166591,166592,166600,166604,166615,166627,166631,166642],{"__ignoreMap":47},[52,166593,166594,166596,166598],{"class":54,"line":55},[52,166595,159094],{"class":79},[52,166597,292],{"class":58},[52,166599,162331],{"class":62},[52,166601,166602],{"class":54,"line":66},[52,166603,123],{"emptyLinePlaceholder":122},[52,166605,166606,166608,166611,166613],{"class":54,"line":83},[52,166607,33065],{"class":308},[52,166609,166610],{"class":79},"(text[",[52,166612,692],{"class":308},[52,166614,7629],{"class":79},[52,166616,166617,166619,166621,166623,166625],{"class":54,"line":91},[52,166618,33065],{"class":308},[52,166620,166610],{"class":79},[52,166622,2642],{"class":58},[52,166624,629],{"class":308},[52,166626,7629],{"class":79},[52,166628,166629],{"class":54,"line":98},[52,166630,123],{"emptyLinePlaceholder":122},[52,166632,166633,166635,166637,166639],{"class":54,"line":107},[52,166634,6014],{"class":58},[52,166636,162342],{"class":79},[52,166638,28693],{"class":58},[52,166640,166641],{"class":79}," text:\n",[52,166643,166644,166646],{"class":54,"line":113},[52,166645,33949],{"class":308},[52,166647,162353],{"class":79},[14,166649,166650],{},"字符串不可变：",[42,166652,166654],{"className":33028,"code":166653,"language":33030,"meta":47,"style":47},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[49,166655,166656,166664],{"__ignoreMap":47},[52,166657,166658,166660,166662],{"class":54,"line":55},[52,166659,159094],{"class":79},[52,166661,292],{"class":58},[52,166663,162331],{"class":62},[52,166665,166666,166669,166671,166673,166675,166678],{"class":54,"line":66},[52,166667,166668],{"class":79},"text[",[52,166670,692],{"class":308},[52,166672,7415],{"class":79},[52,166674,292],{"class":58},[52,166676,166677],{"class":62}," \"P\"",[52,166679,166680],{"class":94},"  # 报错\n",[14,166682,166683],{},"如果要得到新字符串：",[42,166685,166687],{"className":33028,"code":166686,"language":33030,"meta":47,"style":47},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[49,166688,166689,166697,166715],{"__ignoreMap":47},[52,166690,166691,166693,166695],{"class":54,"line":55},[52,166692,159094],{"class":79},[52,166694,292],{"class":58},[52,166696,162331],{"class":62},[52,166698,166699,166701,166703,166705,166707,166710,166712],{"class":54,"line":66},[52,166700,159094],{"class":79},[52,166702,292],{"class":58},[52,166704,166677],{"class":62},[52,166706,48216],{"class":58},[52,166708,166709],{"class":79}," text[",[52,166711,629],{"class":308},[52,166713,166714],{"class":79},":]\n",[52,166716,166717,166719],{"class":54,"line":83},[52,166718,33065],{"class":308},[52,166720,166721],{"class":79},"(text)\n",[18,166723,166725],{"id":166724},"_68-切片","6.8 切片",[14,166727,166728],{},"切片用于从序列中取一部分。",[42,166730,166732],{"className":33028,"code":166731,"language":33030,"meta":47,"style":47},"序列[开始:结束:步长]\n",[49,166733,166734],{"__ignoreMap":47},[52,166735,166736],{"class":54,"line":55},[52,166737,166731],{"class":79},[14,166739,166740],{},"结束位置不包含。",[42,166742,166744],{"className":33028,"code":166743,"language":33030,"meta":47,"style":47},"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",[49,166745,166746,166783,166787,166806,166821,166835,166849],{"__ignoreMap":47},[52,166747,166748,166751,166753,166755,166757,166759,166761,166763,166765,166767,166769,166771,166773,166775,166777,166779,166781],{"class":54,"line":55},[52,166749,166750],{"class":79},"nums ",[52,166752,292],{"class":58},[52,166754,54876],{"class":79},[52,166756,692],{"class":308},[52,166758,15083],{"class":79},[52,166760,629],{"class":308},[52,166762,15083],{"class":79},[52,166764,564],{"class":308},[52,166766,15083],{"class":79},[52,166768,2313],{"class":308},[52,166770,15083],{"class":79},[52,166772,3504],{"class":308},[52,166774,15083],{"class":79},[52,166776,1805],{"class":308},[52,166778,15083],{"class":79},[52,166780,1125],{"class":308},[52,166782,35896],{"class":79},[52,166784,166785],{"class":54,"line":66},[52,166786,123],{"emptyLinePlaceholder":122},[52,166788,166789,166791,166794,166796,166798,166800,166803],{"class":54,"line":83},[52,166790,33065],{"class":308},[52,166792,166793],{"class":79},"(nums[",[52,166795,629],{"class":308},[52,166797,4049],{"class":79},[52,166799,3504],{"class":308},[52,166801,166802],{"class":79},"])    ",[52,166804,166805],{"class":94},"# [1, 2, 3]\n",[52,166807,166808,166810,166813,166815,166818],{"class":54,"line":91},[52,166809,33065],{"class":308},[52,166811,166812],{"class":79},"(nums[:",[52,166814,2313],{"class":308},[52,166816,166817],{"class":79},"])     ",[52,166819,166820],{"class":94},"# [0, 1, 2]\n",[52,166822,166823,166825,166827,166829,166832],{"class":54,"line":98},[52,166824,33065],{"class":308},[52,166826,166793],{"class":79},[52,166828,2313],{"class":308},[52,166830,166831],{"class":79},":])     ",[52,166833,166834],{"class":94},"# [3, 4, 5, 6]\n",[52,166836,166837,166839,166842,166844,166846],{"class":54,"line":107},[52,166838,33065],{"class":308},[52,166840,166841],{"class":79},"(nums[::",[52,166843,564],{"class":308},[52,166845,166802],{"class":79},[52,166847,166848],{"class":94},"# [0, 2, 4, 6]\n",[52,166850,166851,166853,166855,166857,166859,166862],{"class":54,"line":113},[52,166852,33065],{"class":308},[52,166854,166841],{"class":79},[52,166856,2642],{"class":58},[52,166858,629],{"class":308},[52,166860,166861],{"class":79},"])   ",[52,166863,166864],{"class":94},"# 反转\n",[14,166866,166867],{},"字符串切片：",[42,166869,166871],{"className":33028,"code":166870,"language":33030,"meta":47,"style":47},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[49,166872,166873,166882,166896],{"__ignoreMap":47},[52,166874,166875,166877,166879],{"class":54,"line":55},[52,166876,159094],{"class":79},[52,166878,292],{"class":58},[52,166880,166881],{"class":62}," \"abcdef\"\n",[52,166883,166884,166886,166888,166890,166892,166894],{"class":54,"line":66},[52,166885,33065],{"class":308},[52,166887,166610],{"class":79},[52,166889,629],{"class":308},[52,166891,4049],{"class":79},[52,166893,3504],{"class":308},[52,166895,7629],{"class":79},[52,166897,166898,166900,166903,166905,166907],{"class":54,"line":83},[52,166899,33065],{"class":308},[52,166901,166902],{"class":79},"(text[::",[52,166904,2642],{"class":58},[52,166906,629],{"class":308},[52,166908,7629],{"class":79},[18,166910,166912],{"id":166911},"_69-集合set","6.9 集合set",[14,166914,166915],{},"集合特点：",[1696,166917,166918,166921,166924],{},[32,166919,166920],{},"无序。",[32,166922,166923],{},"元素不重复。",[32,166925,166926],{},"可以做交集、并集、差集。",[42,166928,166930],{"className":33028,"code":166929,"language":33030,"meta":47,"style":47},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[49,166931,166932,166960],{"__ignoreMap":47},[52,166933,166934,166936,166938,166940,166942,166944,166946,166948,166950,166952,166954,166956,166958],{"class":54,"line":55},[52,166935,166750],{"class":79},[52,166937,292],{"class":58},[52,166939,7420],{"class":79},[52,166941,629],{"class":308},[52,166943,15083],{"class":79},[52,166945,564],{"class":308},[52,166947,15083],{"class":79},[52,166949,2313],{"class":308},[52,166951,15083],{"class":79},[52,166953,2313],{"class":308},[52,166955,15083],{"class":79},[52,166957,3504],{"class":308},[52,166959,452],{"class":79},[52,166961,166962,166964],{"class":54,"line":66},[52,166963,33065],{"class":308},[52,166965,166966],{"class":79},"(nums)\n",[14,166968,166969],{},"创建空集合：",[42,166971,166973],{"className":33028,"code":166972,"language":33030,"meta":47,"style":47},"s = set()\n",[49,166974,166975],{"__ignoreMap":47},[52,166976,166977,166979,166981,166983],{"class":54,"line":55},[52,166978,3056],{"class":79},[52,166980,292],{"class":58},[52,166982,122372],{"class":308},[52,166984,248],{"class":79},[14,166986,1453,166987,166989],{},[49,166988,35109],{}," 是空字典，不是空集合。",[14,166991,166992],{},"集合常用操作：",[42,166994,166996],{"className":33028,"code":166995,"language":33030,"meta":47,"style":47},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[49,166997,166998,167018,167022,167031,167040,167049],{"__ignoreMap":47},[52,166999,167000,167002,167004,167006,167008,167010,167012,167014,167016],{"class":54,"line":55},[52,167001,3056],{"class":79},[52,167003,292],{"class":58},[52,167005,7420],{"class":79},[52,167007,629],{"class":308},[52,167009,15083],{"class":79},[52,167011,564],{"class":308},[52,167013,15083],{"class":79},[52,167015,2313],{"class":308},[52,167017,452],{"class":79},[52,167019,167020],{"class":54,"line":66},[52,167021,123],{"emptyLinePlaceholder":122},[52,167023,167024,167027,167029],{"class":54,"line":83},[52,167025,167026],{"class":79},"s.add(",[52,167028,3504],{"class":308},[52,167030,708],{"class":79},[52,167032,167033,167036,167038],{"class":54,"line":91},[52,167034,167035],{"class":79},"s.remove(",[52,167037,564],{"class":308},[52,167039,708],{"class":79},[52,167041,167042,167045,167047],{"class":54,"line":98},[52,167043,167044],{"class":79},"s.discard(",[52,167046,3649],{"class":308},[52,167048,708],{"class":79},[52,167050,167051,167053,167055,167057],{"class":54,"line":107},[52,167052,33065],{"class":308},[52,167054,1216],{"class":79},[52,167056,2639],{"class":308},[52,167058,167059],{"class":79},"(s))\n",[14,167061,167062],{},"交并差：",[42,167064,167066],{"className":33028,"code":167065,"language":33030,"meta":47,"style":47},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[49,167067,167068,167088,167108,167112,167127,167140],{"__ignoreMap":47},[52,167069,167070,167072,167074,167076,167078,167080,167082,167084,167086],{"class":54,"line":55},[52,167071,13567],{"class":79},[52,167073,292],{"class":58},[52,167075,7420],{"class":79},[52,167077,629],{"class":308},[52,167079,15083],{"class":79},[52,167081,564],{"class":308},[52,167083,15083],{"class":79},[52,167085,2313],{"class":308},[52,167087,452],{"class":79},[52,167089,167090,167092,167094,167096,167098,167100,167102,167104,167106],{"class":54,"line":66},[52,167091,13593],{"class":79},[52,167093,292],{"class":58},[52,167095,7420],{"class":79},[52,167097,2313],{"class":308},[52,167099,15083],{"class":79},[52,167101,3504],{"class":308},[52,167103,15083],{"class":79},[52,167105,1805],{"class":308},[52,167107,452],{"class":79},[52,167109,167110],{"class":54,"line":83},[52,167111,123],{"emptyLinePlaceholder":122},[52,167113,167114,167116,167119,167121,167124],{"class":54,"line":91},[52,167115,33065],{"class":308},[52,167117,167118],{"class":79},"(a ",[52,167120,1433],{"class":58},[52,167122,167123],{"class":79}," b)  ",[52,167125,167126],{"class":94},"# 交集\n",[52,167128,167129,167131,167133,167135,167137],{"class":54,"line":98},[52,167130,33065],{"class":308},[52,167132,167118],{"class":79},[52,167134,4108],{"class":58},[52,167136,167123],{"class":79},[52,167138,167139],{"class":94},"# 并集\n",[52,167141,167142,167144,167146,167148,167150],{"class":54,"line":107},[52,167143,33065],{"class":308},[52,167145,167118],{"class":79},[52,167147,2642],{"class":58},[52,167149,167123],{"class":79},[52,167151,167152],{"class":94},"# 差集\n",[18,167154,167156],{"id":167155},"_610-字典dict","6.10 字典dict",[14,167158,167159],{},"字典通过 key-value 保存数据。",[42,167161,167163],{"className":33028,"code":167162,"language":33030,"meta":47,"style":47},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[49,167164,167165,167173,167183,167194,167204],{"__ignoreMap":47},[52,167166,167167,167169,167171],{"class":54,"line":55},[52,167168,152131],{"class":79},[52,167170,292],{"class":58},[52,167172,18220],{"class":79},[52,167174,167175,167177,167179,167181],{"class":54,"line":66},[52,167176,149670],{"class":62},[52,167178,54087],{"class":79},[52,167180,152538],{"class":62},[52,167182,34116],{"class":79},[52,167184,167185,167188,167190,167192],{"class":54,"line":83},[52,167186,167187],{"class":62},"    \"age\"",[52,167189,54087],{"class":79},[52,167191,309],{"class":308},[52,167193,34116],{"class":79},[52,167195,167196,167199,167201],{"class":54,"line":91},[52,167197,167198],{"class":62},"    \"score\"",[52,167200,54087],{"class":79},[52,167202,167203],{"class":308},"95\n",[52,167205,167206],{"class":54,"line":98},[52,167207,452],{"class":79},[14,167209,167210],{},"获取值：",[42,167212,167214],{"className":33028,"code":167213,"language":33030,"meta":47,"style":47},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[49,167215,167216,167227],{"__ignoreMap":47},[52,167217,167218,167220,167223,167225],{"class":54,"line":55},[52,167219,33065],{"class":308},[52,167221,167222],{"class":79},"(student[",[52,167224,65329],{"class":62},[52,167226,7629],{"class":79},[52,167228,167229,167231,167234,167236],{"class":54,"line":66},[52,167230,33065],{"class":308},[52,167232,167233],{"class":79},"(student.get(",[52,167235,65329],{"class":62},[52,167237,33147],{"class":79},[14,167239,18036],{},[42,167241,167243],{"className":33028,"code":167242,"language":33030,"meta":47,"style":47},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[49,167244,167245,167258],{"__ignoreMap":47},[52,167246,167247,167249,167252,167255],{"class":54,"line":55},[52,167248,155509],{"class":79},[52,167250,167251],{"class":62},"\"address\"",[52,167253,167254],{"class":79},"]     ",[52,167256,167257],{"class":94},"# key不存在会报错\n",[52,167259,167260,167263,167265,167267],{"class":54,"line":66},[52,167261,167262],{"class":79},"student.get(",[52,167264,167251],{"class":62},[52,167266,16362],{"class":79},[52,167268,167269],{"class":94},"# key不存在返回None\n",[14,167271,167272],{},"设置默认值：",[42,167274,167276],{"className":33028,"code":167275,"language":33030,"meta":47,"style":47},"print(student.get(\"address\", \"未知\"))\n",[49,167277,167278],{"__ignoreMap":47},[52,167279,167280,167282,167284,167286,167288,167291],{"class":54,"line":55},[52,167281,33065],{"class":308},[52,167283,167233],{"class":79},[52,167285,167251],{"class":62},[52,167287,15083],{"class":79},[52,167289,167290],{"class":62},"\"未知\"",[52,167292,33147],{"class":79},[14,167294,167295],{},"新增和修改：",[42,167297,167299],{"className":33028,"code":167298,"language":33030,"meta":47,"style":47},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[49,167300,167301,167314],{"__ignoreMap":47},[52,167302,167303,167305,167307,167309,167311],{"class":54,"line":55},[52,167304,155509],{"class":79},[52,167306,71774],{"class":62},[52,167308,7415],{"class":79},[52,167310,292],{"class":58},[52,167312,167313],{"class":308}," 19\n",[52,167315,167316,167318,167320,167322,167324],{"class":54,"line":66},[52,167317,155509],{"class":79},[52,167319,167251],{"class":62},[52,167321,7415],{"class":79},[52,167323,292],{"class":58},[52,167325,167326],{"class":62}," \"北京\"\n",[14,167328,167329],{},"删除：",[42,167331,167333],{"className":33028,"code":167332,"language":33030,"meta":47,"style":47},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[49,167334,167335,167348,167358],{"__ignoreMap":47},[52,167336,167337,167339,167341,167344,167346],{"class":54,"line":55},[52,167338,158008],{"class":79},[52,167340,292],{"class":58},[52,167342,167343],{"class":79}," student.pop(",[52,167345,154122],{"class":62},[52,167347,708],{"class":79},[52,167349,167350,167352,167354,167356],{"class":54,"line":66},[52,167351,166033],{"class":58},[52,167353,154799],{"class":79},[52,167355,71774],{"class":62},[52,167357,35896],{"class":79},[52,167359,167360],{"class":54,"line":83},[52,167361,167362],{"class":79},"student.clear()\n",[18,167364,167366],{"id":167365},"_611-字典遍历","6.11 字典遍历",[14,167368,167369],{},"遍历 key：",[42,167371,167373],{"className":33028,"code":167372,"language":33030,"meta":47,"style":47},"for key in student:\n    print(key, student[key])\n",[49,167374,167375,167387],{"__ignoreMap":47},[52,167376,167377,167379,167382,167384],{"class":54,"line":55},[52,167378,6014],{"class":58},[52,167380,167381],{"class":79}," key ",[52,167383,28693],{"class":58},[52,167385,167386],{"class":79}," student:\n",[52,167388,167389,167391],{"class":54,"line":66},[52,167390,33949],{"class":308},[52,167392,167393],{"class":79},"(key, student[key])\n",[14,167395,167396],{},"遍历 value：",[42,167398,167400],{"className":33028,"code":167399,"language":33030,"meta":47,"style":47},"for value in student.values():\n    print(value)\n",[49,167401,167402,167414],{"__ignoreMap":47},[52,167403,167404,167406,167409,167411],{"class":54,"line":55},[52,167405,6014],{"class":58},[52,167407,167408],{"class":79}," value ",[52,167410,28693],{"class":58},[52,167412,167413],{"class":79}," student.values():\n",[52,167415,167416,167418],{"class":54,"line":66},[52,167417,33949],{"class":308},[52,167419,167420],{"class":79},"(value)\n",[14,167422,167423],{},"遍历 key 和 value：",[42,167425,167427],{"className":33028,"code":167426,"language":33030,"meta":47,"style":47},"for key, value in student.items():\n    print(key, value)\n",[49,167428,167429,167441],{"__ignoreMap":47},[52,167430,167431,167433,167436,167438],{"class":54,"line":55},[52,167432,6014],{"class":58},[52,167434,167435],{"class":79}," key, value ",[52,167437,28693],{"class":58},[52,167439,167440],{"class":79}," student.items():\n",[52,167442,167443,167445],{"class":54,"line":66},[52,167444,33949],{"class":308},[52,167446,167447],{"class":79},"(key, value)\n",[18,167449,167451],{"id":167450},"_612-嵌套容器","6.12 嵌套容器",[14,167453,167454],{},"列表中保存字典，是项目中最常见的结构之一。",[42,167456,167458],{"className":33028,"code":167457,"language":33030,"meta":47,"style":47},"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",[49,167459,167460,167468,167496,167524,167552,167556,167560,167570],{"__ignoreMap":47},[52,167461,167462,167464,167466],{"class":54,"line":55},[52,167463,162366],{"class":79},[52,167465,292],{"class":58},[52,167467,58097],{"class":79},[52,167469,167470,167472,167474,167476,167478,167480,167482,167484,167486,167488,167490,167492,167494],{"class":54,"line":66},[52,167471,151035],{"class":79},[52,167473,65329],{"class":62},[52,167475,54087],{"class":79},[52,167477,152538],{"class":62},[52,167479,15083],{"class":79},[52,167481,71774],{"class":62},[52,167483,54087],{"class":79},[52,167485,309],{"class":308},[52,167487,15083],{"class":79},[52,167489,154122],{"class":62},[52,167491,54087],{"class":79},[52,167493,4174],{"class":308},[52,167495,594],{"class":79},[52,167497,167498,167500,167502,167504,167506,167508,167510,167512,167514,167516,167518,167520,167522],{"class":54,"line":83},[52,167499,151035],{"class":79},[52,167501,65329],{"class":62},[52,167503,54087],{"class":79},[52,167505,153586],{"class":62},[52,167507,15083],{"class":79},[52,167509,71774],{"class":62},[52,167511,54087],{"class":79},[52,167513,3822],{"class":308},[52,167515,15083],{"class":79},[52,167517,154122],{"class":62},[52,167519,54087],{"class":79},[52,167521,4001],{"class":308},[52,167523,594],{"class":79},[52,167525,167526,167528,167530,167532,167534,167536,167538,167540,167542,167544,167546,167548,167550],{"class":54,"line":91},[52,167527,151035],{"class":79},[52,167529,65329],{"class":62},[52,167531,54087],{"class":79},[52,167533,162381],{"class":62},[52,167535,15083],{"class":79},[52,167537,71774],{"class":62},[52,167539,54087],{"class":79},[52,167541,2486],{"class":308},[52,167543,15083],{"class":79},[52,167545,154122],{"class":62},[52,167547,54087],{"class":79},[52,167549,3610],{"class":308},[52,167551,594],{"class":79},[52,167553,167554],{"class":54,"line":98},[52,167555,35896],{"class":79},[52,167557,167558],{"class":54,"line":107},[52,167559,123],{"emptyLinePlaceholder":122},[52,167561,167562,167564,167566,167568],{"class":54,"line":113},[52,167563,6014],{"class":58},[52,167565,154787],{"class":79},[52,167567,28693],{"class":58},[52,167569,154792],{"class":79},[52,167571,167572,167574,167576,167578,167581,167583],{"class":54,"line":119},[52,167573,33949],{"class":308},[52,167575,167222],{"class":79},[52,167577,65329],{"class":62},[52,167579,167580],{"class":79},"], student[",[52,167582,154122],{"class":62},[52,167584,7629],{"class":79},[14,167586,167587],{},"统计平均分：",[42,167589,167591],{"className":33028,"code":167590,"language":33030,"meta":47,"style":47},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[49,167592,167593,167601,167605,167615,167627,167631,167646],{"__ignoreMap":47},[52,167594,167595,167597,167599],{"class":54,"line":55},[52,167596,159910],{"class":79},[52,167598,292],{"class":58},[52,167600,49983],{"class":308},[52,167602,167603],{"class":54,"line":66},[52,167604,123],{"emptyLinePlaceholder":122},[52,167606,167607,167609,167611,167613],{"class":54,"line":83},[52,167608,6014],{"class":58},[52,167610,154787],{"class":79},[52,167612,28693],{"class":58},[52,167614,154792],{"class":79},[52,167616,167617,167619,167621,167623,167625],{"class":54,"line":91},[52,167618,161957],{"class":79},[52,167620,1910],{"class":58},[52,167622,154799],{"class":79},[52,167624,154122],{"class":62},[52,167626,35896],{"class":79},[52,167628,167629],{"class":54,"line":98},[52,167630,123],{"emptyLinePlaceholder":122},[52,167632,167633,167635,167637,167639,167641,167643],{"class":54,"line":107},[52,167634,166424],{"class":79},[52,167636,292],{"class":58},[52,167638,166429],{"class":79},[52,167640,2340],{"class":58},[52,167642,1842],{"class":308},[52,167644,167645],{"class":79},"(students)\n",[52,167647,167648,167650,167652,167654,167656,167658,167660,167662,167664,167666],{"class":54,"line":113},[52,167649,33065],{"class":308},[52,167651,1216],{"class":79},[52,167653,3273],{"class":58},[52,167655,166447],{"class":62},[52,167657,383],{"class":308},[52,167659,166452],{"class":79},[52,167661,159809],{"class":58},[52,167663,4132],{"class":308},[52,167665,2844],{"class":62},[52,167667,708],{"class":79},[14,167669,167670],{},"查找学生：",[42,167672,167674],{"className":33028,"code":167673,"language":33030,"meta":47,"style":47},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[49,167675,167676,167691,167695,167705,167719,167725,167729,167735],{"__ignoreMap":47},[52,167677,167678,167680,167682,167684,167686,167689],{"class":54,"line":55},[52,167679,114228],{"class":79},[52,167681,292],{"class":58},[52,167683,63255],{"class":308},[52,167685,1216],{"class":79},[52,167687,167688],{"class":62},"\"请输入学生姓名:\"",[52,167690,708],{"class":79},[52,167692,167693],{"class":54,"line":66},[52,167694,123],{"emptyLinePlaceholder":122},[52,167696,167697,167699,167701,167703],{"class":54,"line":83},[52,167698,6014],{"class":58},[52,167700,154787],{"class":79},[52,167702,28693],{"class":58},[52,167704,154792],{"class":79},[52,167706,167707,167709,167711,167713,167715,167717],{"class":54,"line":91},[52,167708,6088],{"class":58},[52,167710,154799],{"class":79},[52,167712,65329],{"class":62},[52,167714,7415],{"class":79},[52,167716,5938],{"class":58},[52,167718,163082],{"class":79},[52,167720,167721,167723],{"class":54,"line":98},[52,167722,35101],{"class":308},[52,167724,152692],{"class":79},[52,167726,167727],{"class":54,"line":107},[52,167728,34277],{"class":58},[52,167730,167731,167733],{"class":54,"line":113},[52,167732,4733],{"class":58},[52,167734,6718],{"class":79},[52,167736,167737,167739,167741,167744],{"class":54,"line":119},[52,167738,33949],{"class":308},[52,167740,1216],{"class":79},[52,167742,167743],{"class":62},"\"没有找到\"",[52,167745,708],{"class":79},[18,167747,167749],{"id":167748},"_613-容器通用操作","6.13 容器通用操作",[14,167751,167752],{},"长度：",[42,167754,167756],{"className":33028,"code":167755,"language":33030,"meta":47,"style":47},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[49,167757,167758,167777,167787],{"__ignoreMap":47},[52,167759,167760,167762,167765,167767,167769,167771,167773,167775],{"class":54,"line":55},[52,167761,2639],{"class":308},[52,167763,167764],{"class":79},"([",[52,167766,629],{"class":308},[52,167768,15083],{"class":79},[52,167770,564],{"class":308},[52,167772,15083],{"class":79},[52,167774,2313],{"class":308},[52,167776,7629],{"class":79},[52,167778,167779,167781,167783,167785],{"class":54,"line":66},[52,167780,2639],{"class":308},[52,167782,1216],{"class":79},[52,167784,158530],{"class":62},[52,167786,708],{"class":79},[52,167788,167789,167791,167794,167796,167798,167800],{"class":54,"line":83},[52,167790,2639],{"class":308},[52,167792,167793],{"class":79},"({",[52,167795,65329],{"class":62},[52,167797,54087],{"class":79},[52,167799,152538],{"class":62},[52,167801,167802],{"class":79},"})\n",[14,167804,167805],{},"最大最小：",[42,167807,167809],{"className":33028,"code":167808,"language":33030,"meta":47,"style":47},"max([1, 2, 3])\nmin([1, 2, 3])\n",[49,167810,167811,167829],{"__ignoreMap":47},[52,167812,167813,167815,167817,167819,167821,167823,167825,167827],{"class":54,"line":55},[52,167814,8979],{"class":308},[52,167816,167764],{"class":79},[52,167818,629],{"class":308},[52,167820,15083],{"class":79},[52,167822,564],{"class":308},[52,167824,15083],{"class":79},[52,167826,2313],{"class":308},[52,167828,7629],{"class":79},[52,167830,167831,167834,167836,167838,167840,167842,167844,167846],{"class":54,"line":66},[52,167832,167833],{"class":308},"min",[52,167835,167764],{"class":79},[52,167837,629],{"class":308},[52,167839,15083],{"class":79},[52,167841,564],{"class":308},[52,167843,15083],{"class":79},[52,167845,2313],{"class":308},[52,167847,7629],{"class":79},[14,167849,167850],{},"求和：",[42,167852,167854],{"className":33028,"code":167853,"language":33030,"meta":47,"style":47},"sum([1, 2, 3])\n",[49,167855,167856],{"__ignoreMap":47},[52,167857,167858,167861,167863,167865,167867,167869,167871,167873],{"class":54,"line":55},[52,167859,167860],{"class":308},"sum",[52,167862,167764],{"class":79},[52,167864,629],{"class":308},[52,167866,15083],{"class":79},[52,167868,564],{"class":308},[52,167870,15083],{"class":79},[52,167872,2313],{"class":308},[52,167874,7629],{"class":79},[14,167876,166121],{},[42,167878,167880],{"className":33028,"code":167879,"language":33030,"meta":47,"style":47},"sorted([3, 1, 2])\n",[49,167881,167882],{"__ignoreMap":47},[52,167883,167884,167887,167889,167891,167893,167895,167897,167899],{"class":54,"line":55},[52,167885,167886],{"class":308},"sorted",[52,167888,167764],{"class":79},[52,167890,2313],{"class":308},[52,167892,15083],{"class":79},[52,167894,629],{"class":308},[52,167896,15083],{"class":79},[52,167898,564],{"class":308},[52,167900,7629],{"class":79},[14,167902,167903],{},"类型转换：",[42,167905,167907],{"className":33028,"code":167906,"language":33030,"meta":47,"style":47},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[49,167908,167909,167919,167937],{"__ignoreMap":47},[52,167910,167911,167913,167915,167917],{"class":54,"line":55},[52,167912,156720],{"class":308},[52,167914,1216],{"class":79},[52,167916,158530],{"class":62},[52,167918,708],{"class":79},[52,167920,167921,167923,167925,167927,167929,167931,167933,167935],{"class":54,"line":66},[52,167922,157915],{"class":308},[52,167924,167764],{"class":79},[52,167926,629],{"class":308},[52,167928,15083],{"class":79},[52,167930,564],{"class":308},[52,167932,15083],{"class":79},[52,167934,2313],{"class":308},[52,167936,7629],{"class":79},[52,167938,167939,167941,167943,167945,167947,167949,167951,167953,167955,167957],{"class":54,"line":83},[52,167940,157940],{"class":308},[52,167942,167764],{"class":79},[52,167944,629],{"class":308},[52,167946,15083],{"class":79},[52,167948,629],{"class":308},[52,167950,15083],{"class":79},[52,167952,564],{"class":308},[52,167954,15083],{"class":79},[52,167956,2313],{"class":308},[52,167958,7629],{"class":79},[14,167960,167961],{},"成员判断：",[42,167963,167965],{"className":33028,"code":167964,"language":33030,"meta":47,"style":47},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[49,167966,167967,167984,168008],{"__ignoreMap":47},[52,167968,167969,167971,167973,167976,167979,167982],{"class":54,"line":55},[52,167970,33065],{"class":308},[52,167972,1216],{"class":79},[52,167974,167975],{"class":62},"\"a\"",[52,167977,167978],{"class":58}," in",[52,167980,167981],{"class":62}," \"abc\"",[52,167983,708],{"class":79},[52,167985,167986,167988,167990,167992,167994,167996,167998,168000,168002,168004,168006],{"class":54,"line":66},[52,167987,33065],{"class":308},[52,167989,1216],{"class":79},[52,167991,629],{"class":308},[52,167993,167978],{"class":58},[52,167995,54876],{"class":79},[52,167997,629],{"class":308},[52,167999,15083],{"class":79},[52,168001,564],{"class":308},[52,168003,15083],{"class":79},[52,168005,2313],{"class":308},[52,168007,7629],{"class":79},[52,168009,168010,168012,168014,168016,168018,168020,168022,168024,168026],{"class":54,"line":83},[52,168011,33065],{"class":308},[52,168013,1216],{"class":79},[52,168015,65329],{"class":62},[52,168017,167978],{"class":58},[52,168019,7420],{"class":79},[52,168021,65329],{"class":62},[52,168023,54087],{"class":79},[52,168025,152538],{"class":62},[52,168027,167802],{"class":79},[18,168029,168031],{"id":168030},"_614-推导式","6.14 推导式",[14,168033,168034],{},"推导式用于快速生成容器。",[14,168036,168037],{},"列表推导式：",[42,168039,168041],{"className":33028,"code":168040,"language":33030,"meta":47,"style":47},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[49,168042,168043,168070],{"__ignoreMap":47},[52,168044,168045,168047,168049,168052,168054,168056,168058,168060,168062,168064,168066,168068],{"class":54,"line":55},[52,168046,166750],{"class":79},[52,168048,292],{"class":58},[52,168050,168051],{"class":79}," [i ",[52,168053,6014],{"class":58},[52,168055,1871],{"class":79},[52,168057,28693],{"class":58},[52,168059,35093],{"class":308},[52,168061,1216],{"class":79},[52,168063,629],{"class":308},[52,168065,15083],{"class":79},[52,168067,1125],{"class":308},[52,168069,99950],{"class":79},[52,168071,168072,168074],{"class":54,"line":66},[52,168073,33065],{"class":308},[52,168075,166966],{"class":79},[14,168077,168078],{},"带条件：",[42,168080,168082],{"className":33028,"code":168081,"language":33030,"meta":47,"style":47},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[49,168083,168084,168125],{"__ignoreMap":47},[52,168085,168086,168089,168091,168093,168095,168097,168099,168101,168103,168105,168107,168109,168111,168113,168115,168117,168119,168121,168123],{"class":54,"line":55},[52,168087,168088],{"class":79},"even_nums ",[52,168090,292],{"class":58},[52,168092,168051],{"class":79},[52,168094,6014],{"class":58},[52,168096,1871],{"class":79},[52,168098,28693],{"class":58},[52,168100,35093],{"class":308},[52,168102,1216],{"class":79},[52,168104,629],{"class":308},[52,168106,15083],{"class":79},[52,168108,3545],{"class":308},[52,168110,16362],{"class":79},[52,168112,4578],{"class":58},[52,168114,1871],{"class":79},[52,168116,1998],{"class":58},[52,168118,17403],{"class":308},[52,168120,104209],{"class":58},[52,168122,1444],{"class":308},[52,168124,35896],{"class":79},[52,168126,168127,168129],{"class":54,"line":66},[52,168128,33065],{"class":308},[52,168130,168131],{"class":79},"(even_nums)\n",[14,168133,168134],{},"字典推导式：",[42,168136,168138],{"className":33028,"code":168137,"language":33030,"meta":47,"style":47},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[49,168139,168140,168174],{"__ignoreMap":47},[52,168141,168142,168145,168147,168150,168152,168154,168157,168159,168161,168163,168165,168167,168169,168171],{"class":54,"line":55},[52,168143,168144],{"class":79},"squares ",[52,168146,292],{"class":58},[52,168148,168149],{"class":79}," {i: i ",[52,168151,3139],{"class":58},[52,168153,17403],{"class":308},[52,168155,168156],{"class":58}," for",[52,168158,1871],{"class":79},[52,168160,28693],{"class":58},[52,168162,35093],{"class":308},[52,168164,1216],{"class":79},[52,168166,629],{"class":308},[52,168168,15083],{"class":79},[52,168170,1125],{"class":308},[52,168172,168173],{"class":79},")}\n",[52,168175,168176,168178],{"class":54,"line":66},[52,168177,33065],{"class":308},[52,168179,168180],{"class":79},"(squares)\n",[14,168182,168183],{},"集合推导式：",[42,168185,168187],{"className":33028,"code":168186,"language":33030,"meta":47,"style":47},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[49,168188,168189,168210],{"__ignoreMap":47},[52,168190,168191,168194,168196,168199,168201,168203,168205,168208],{"class":54,"line":55},[52,168192,168193],{"class":79},"chars ",[52,168195,292],{"class":58},[52,168197,168198],{"class":79}," {ch ",[52,168200,6014],{"class":58},[52,168202,162342],{"class":79},[52,168204,28693],{"class":58},[52,168206,168207],{"class":62}," \"hello\"",[52,168209,452],{"class":79},[52,168211,168212,168214],{"class":54,"line":66},[52,168213,33065],{"class":308},[52,168215,168216],{"class":79},"(chars)\n",[14,168218,168219],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[18,168221,168223],{"id":168222},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[42,168225,168227],{"className":33028,"code":168226,"language":33030,"meta":47,"style":47},"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",[49,168228,168229,168237,168257,168277,168297,168317,168321,168325,168333,168347,168356,168360,168370,168382,168386,168406,168415,168419,168435,168440,168444,168458,168462,168484,168520],{"__ignoreMap":47},[52,168230,168231,168233,168235],{"class":54,"line":55},[52,168232,162366],{"class":79},[52,168234,292],{"class":58},[52,168236,58097],{"class":79},[52,168238,168239,168241,168243,168245,168247,168249,168251,168253,168255],{"class":54,"line":66},[52,168240,151035],{"class":79},[52,168242,65329],{"class":62},[52,168244,54087],{"class":79},[52,168246,152538],{"class":62},[52,168248,15083],{"class":79},[52,168250,154122],{"class":62},[52,168252,54087],{"class":79},[52,168254,4174],{"class":308},[52,168256,594],{"class":79},[52,168258,168259,168261,168263,168265,168267,168269,168271,168273,168275],{"class":54,"line":83},[52,168260,151035],{"class":79},[52,168262,65329],{"class":62},[52,168264,54087],{"class":79},[52,168266,153586],{"class":62},[52,168268,15083],{"class":79},[52,168270,154122],{"class":62},[52,168272,54087],{"class":79},[52,168274,4001],{"class":308},[52,168276,594],{"class":79},[52,168278,168279,168281,168283,168285,168287,168289,168291,168293,168295],{"class":54,"line":91},[52,168280,151035],{"class":79},[52,168282,65329],{"class":62},[52,168284,54087],{"class":79},[52,168286,162381],{"class":62},[52,168288,15083],{"class":79},[52,168290,154122],{"class":62},[52,168292,54087],{"class":79},[52,168294,3610],{"class":308},[52,168296,594],{"class":79},[52,168298,168299,168301,168303,168305,168307,168309,168311,168313,168315],{"class":54,"line":98},[52,168300,151035],{"class":79},[52,168302,65329],{"class":62},[52,168304,54087],{"class":79},[52,168306,165960],{"class":62},[52,168308,15083],{"class":79},[52,168310,154122],{"class":62},[52,168312,54087],{"class":79},[52,168314,4072],{"class":308},[52,168316,594],{"class":79},[52,168318,168319],{"class":54,"line":107},[52,168320,35896],{"class":79},[52,168322,168323],{"class":54,"line":113},[52,168324,123],{"emptyLinePlaceholder":122},[52,168326,168327,168329,168331],{"class":54,"line":119},[52,168328,159910],{"class":79},[52,168330,292],{"class":58},[52,168332,49983],{"class":308},[52,168334,168335,168338,168340,168343,168345],{"class":54,"line":126},[52,168336,168337],{"class":79},"max_student ",[52,168339,292],{"class":58},[52,168341,168342],{"class":79}," students[",[52,168344,692],{"class":308},[52,168346,35896],{"class":79},[52,168348,168349,168352,168354],{"class":54,"line":132},[52,168350,168351],{"class":79},"passed ",[52,168353,292],{"class":58},[52,168355,54488],{"class":79},[52,168357,168358],{"class":54,"line":138},[52,168359,123],{"emptyLinePlaceholder":122},[52,168361,168362,168364,168366,168368],{"class":54,"line":144},[52,168363,6014],{"class":58},[52,168365,154787],{"class":79},[52,168367,28693],{"class":58},[52,168369,154792],{"class":79},[52,168371,168372,168374,168376,168378,168380],{"class":54,"line":153},[52,168373,161957],{"class":79},[52,168375,1910],{"class":58},[52,168377,154799],{"class":79},[52,168379,154122],{"class":62},[52,168381,35896],{"class":79},[52,168383,168384],{"class":54,"line":159},[52,168385,123],{"emptyLinePlaceholder":122},[52,168387,168388,168390,168392,168394,168396,168398,168401,168403],{"class":54,"line":167},[52,168389,6088],{"class":58},[52,168391,154799],{"class":79},[52,168393,154122],{"class":62},[52,168395,7415],{"class":79},[52,168397,2674],{"class":58},[52,168399,168400],{"class":79}," max_student[",[52,168402,154122],{"class":62},[52,168404,168405],{"class":79},"]:\n",[52,168407,168408,168411,168413],{"class":54,"line":173},[52,168409,168410],{"class":79},"        max_student ",[52,168412,292],{"class":58},[52,168414,154815],{"class":79},[52,168416,168417],{"class":54,"line":181},[52,168418,123],{"emptyLinePlaceholder":122},[52,168420,168421,168423,168425,168427,168429,168431,168433],{"class":54,"line":186},[52,168422,6088],{"class":58},[52,168424,154799],{"class":79},[52,168426,154122],{"class":62},[52,168428,7415],{"class":79},[52,168430,4742],{"class":58},[52,168432,160487],{"class":308},[52,168434,6718],{"class":79},[52,168436,168437],{"class":54,"line":191},[52,168438,168439],{"class":79},"        passed.append(student)\n",[52,168441,168442],{"class":54,"line":196},[52,168443,123],{"emptyLinePlaceholder":122},[52,168445,168446,168448,168450,168452,168454,168456],{"class":54,"line":201},[52,168447,166424],{"class":79},[52,168449,292],{"class":58},[52,168451,166429],{"class":79},[52,168453,2340],{"class":58},[52,168455,1842],{"class":308},[52,168457,167645],{"class":79},[52,168459,168460],{"class":54,"line":206},[52,168461,123],{"emptyLinePlaceholder":122},[52,168463,168464,168466,168468,168470,168472,168474,168476,168478,168480,168482],{"class":54,"line":211},[52,168465,33065],{"class":308},[52,168467,1216],{"class":79},[52,168469,3273],{"class":58},[52,168471,166447],{"class":62},[52,168473,383],{"class":308},[52,168475,166452],{"class":79},[52,168477,159809],{"class":58},[52,168479,4132],{"class":308},[52,168481,2844],{"class":62},[52,168483,708],{"class":79},[52,168485,168486,168488,168490,168492,168495,168497,168500,168502,168504,168506,168508,168510,168512,168514,168516,168518],{"class":54,"line":218},[52,168487,33065],{"class":308},[52,168489,1216],{"class":79},[52,168491,3273],{"class":58},[52,168493,168494],{"class":62},"\"最高分学生:",[52,168496,383],{"class":308},[52,168498,168499],{"class":79},"max_student[",[52,168501,155532],{"class":62},[52,168503,567],{"class":79},[52,168505,4132],{"class":308},[52,168507,7420],{"class":308},[52,168509,168499],{"class":79},[52,168511,155570],{"class":62},[52,168513,567],{"class":79},[52,168515,4132],{"class":308},[52,168517,2844],{"class":62},[52,168519,708],{"class":79},[52,168521,168522,168524,168526,168528,168531,168534,168537,168539,168541],{"class":54,"line":223},[52,168523,33065],{"class":308},[52,168525,1216],{"class":79},[52,168527,3273],{"class":58},[52,168529,168530],{"class":62},"\"及格人数:",[52,168532,168533],{"class":308},"{len",[52,168535,168536],{"class":79},"(passed)",[52,168538,4132],{"class":308},[52,168540,2844],{"class":62},[52,168542,708],{"class":79},[18,168544,168546],{"id":168545},"_616-易错点","6.16 易错点",[1696,168548,168549,168552,168555,168558,168564,168573],{},[32,168550,168551],{},"列表可变，元组和字符串不可变。",[32,168553,168554],{},"切片结束位置不包含。",[32,168556,168557],{},"字典通过 key 取值，不是通过索引。",[32,168559,168560,168561,31035],{},"空集合要用 ",[49,168562,168563],{},"set()",[32,168565,107016,168566,168569,168570,31035],{},[49,168567,168568],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[49,168571,168572],{},"get()",[32,168574,168575],{},"嵌套容器要先看清楚每一层是什么类型。",[18,168577,168579],{"id":168578},"_617-本章练习","6.17 本章练习",[1696,168581,168582,168585,168588,168591,168594],{},[32,168583,168584],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[32,168586,168587],{},"输入一句话，统计每个字符出现次数。",[32,168589,168590],{},"使用集合去除列表中的重复元素。",[32,168592,168593],{},"使用字典保存一个学生的信息，并实现修改成绩。",[32,168595,168596],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[3141,168598,168599],{},"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":47,"searchDepth":66,"depth":66,"links":168601},[168602,168603,168604,168605,168606,168607,168608,168609,168610,168611,168612,168613,168614,168615,168616,168617,168618],{"id":165582,"depth":66,"text":165583},{"id":165699,"depth":66,"text":165700},{"id":165789,"depth":66,"text":165790},{"id":165913,"depth":66,"text":165914},{"id":166276,"depth":66,"text":166277},{"id":166463,"depth":66,"text":166464},{"id":166582,"depth":66,"text":166583},{"id":166724,"depth":66,"text":166725},{"id":166911,"depth":66,"text":166912},{"id":167155,"depth":66,"text":167156},{"id":167365,"depth":66,"text":167366},{"id":167450,"depth":66,"text":167451},{"id":167748,"depth":66,"text":167749},{"id":168030,"depth":66,"text":168031},{"id":168222,"depth":66,"text":168223},{"id":168545,"depth":66,"text":168546},{"id":168578,"depth":66,"text":168579},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":165574,"description":26025},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":168625,"title":168626,"body":168627,"description":26025,"extension":3153,"meta":170799,"navigation":122,"path":170800,"seo":170801,"stem":170802,"__hash__":170803},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":168628,"toc":170774},[168629,168632,168636,168639,168719,168722,168743,168746,168750,168753,168815,168818,168835,168839,168842,168887,168889,168897,168901,168904,168986,168989,168992,169017,169020,169043,169047,169050,169052,169114,169117,169119,169170,169174,169178,169184,169289,169293,169299,169370,169374,169377,169445,169448,169528,169532,169538,169574,169577,169580,169690,169696,169700,169703,169775,169778,169782,169786,169791,169853,169857,169862,169930,169934,169939,170055,170059,170062,170142,170145,170149,170152,170256,170258,170273,170276,170280,170418,170426,170430,170432,170443,170445,170703,170707,170739,170743,170771],[10,168630,168626],{"id":168631},"_7-函数进阶",[18,168633,168635],{"id":168634},"_71-多返回值","7.1 多返回值",[14,168637,168638],{},"Python 函数可以返回多个值，本质上返回的是元组。",[42,168640,168642],{"className":33028,"code":168641,"language":33030,"meta":47,"style":47},"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",[49,168643,168644,168653,168661,168669,168678,168685,168689,168693,168702,168708],{"__ignoreMap":47},[52,168645,168646,168648,168651],{"class":54,"line":55},[52,168647,34597],{"class":58},[52,168649,168650],{"class":75}," get_info",[52,168652,34603],{"class":79},[52,168654,168655,168657,168659],{"class":54,"line":66},[52,168656,155020],{"class":79},[52,168658,292],{"class":58},[52,168660,152003],{"class":62},[52,168662,168663,168665,168667],{"class":54,"line":83},[52,168664,155036],{"class":79},[52,168666,292],{"class":58},[52,168668,149201],{"class":308},[52,168670,168671,168673,168675],{"class":54,"line":91},[52,168672,155051],{"class":79},[52,168674,292],{"class":58},[52,168676,168677],{"class":308}," 95\n",[52,168679,168680,168682],{"class":54,"line":98},[52,168681,1441],{"class":58},[52,168683,168684],{"class":79}," name, age, score\n",[52,168686,168687],{"class":54,"line":107},[52,168688,123],{"emptyLinePlaceholder":122},[52,168690,168691],{"class":54,"line":113},[52,168692,123],{"emptyLinePlaceholder":122},[52,168694,168695,168697,168699],{"class":54,"line":119},[52,168696,163956],{"class":79},[52,168698,292],{"class":58},[52,168700,168701],{"class":79}," get_info()\n",[52,168703,168704,168706],{"class":54,"line":126},[52,168705,33065],{"class":308},[52,168707,79235],{"class":79},[52,168709,168710,168712,168714,168716],{"class":54,"line":132},[52,168711,33065],{"class":308},[52,168713,1216],{"class":79},[52,168715,105757],{"class":308},[52,168717,168718],{"class":79},"(result))\n",[14,168720,168721],{},"可以直接解包：",[42,168723,168725],{"className":33028,"code":168724,"language":33030,"meta":47,"style":47},"name, age, score = get_info()\nprint(name, age, score)\n",[49,168726,168727,168736],{"__ignoreMap":47},[52,168728,168729,168732,168734],{"class":54,"line":55},[52,168730,168731],{"class":79},"name, age, score ",[52,168733,292],{"class":58},[52,168735,168701],{"class":79},[52,168737,168738,168740],{"class":54,"line":66},[52,168739,33065],{"class":308},[52,168741,168742],{"class":79},"(name, age, score)\n",[14,168744,168745],{},"返回多个值适合函数需要同时给出多个结果时使用。",[18,168747,168749],{"id":168748},"_72-位置参数","7.2 位置参数",[14,168751,168752],{},"位置参数按顺序传递。",[42,168754,168756],{"className":33028,"code":168755,"language":33030,"meta":47,"style":47},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[49,168757,168758,168766,168794,168798,168802],{"__ignoreMap":47},[52,168759,168760,168762,168764],{"class":54,"line":55},[52,168761,34597],{"class":58},[52,168763,152022],{"class":75},[52,168765,152025],{"class":79},[52,168767,168768,168770,168772,168774,168776,168778,168780,168782,168784,168786,168788,168790,168792],{"class":54,"line":66},[52,168769,33949],{"class":308},[52,168771,1216],{"class":79},[52,168773,3273],{"class":58},[52,168775,152036],{"class":62},[52,168777,383],{"class":308},[52,168779,82460],{"class":79},[52,168781,4132],{"class":308},[52,168783,152045],{"class":62},[52,168785,383],{"class":308},[52,168787,72871],{"class":79},[52,168789,4132],{"class":308},[52,168791,152054],{"class":62},[52,168793,708],{"class":79},[52,168795,168796],{"class":54,"line":83},[52,168797,123],{"emptyLinePlaceholder":122},[52,168799,168800],{"class":54,"line":91},[52,168801,123],{"emptyLinePlaceholder":122},[52,168803,168804,168807,168809,168811,168813],{"class":54,"line":98},[52,168805,168806],{"class":79},"introduce(",[52,168808,152538],{"class":62},[52,168810,15083],{"class":79},[52,168812,309],{"class":308},[52,168814,708],{"class":79},[14,168816,168817],{},"顺序错了就会得到错误含义：",[42,168819,168821],{"className":33028,"code":168820,"language":33030,"meta":47,"style":47},"introduce(18, \"小明\")\n",[49,168822,168823],{"__ignoreMap":47},[52,168824,168825,168827,168829,168831,168833],{"class":54,"line":55},[52,168826,168806],{"class":79},[52,168828,309],{"class":308},[52,168830,15083],{"class":79},[52,168832,152538],{"class":62},[52,168834,708],{"class":79},[18,168836,168838],{"id":168837},"_73-关键字参数","7.3 关键字参数",[14,168840,168841],{},"关键字参数按参数名传递。",[42,168843,168845],{"className":33028,"code":168844,"language":33030,"meta":47,"style":47},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[49,168846,168847,168867],{"__ignoreMap":47},[52,168848,168849,168851,168853,168855,168857,168859,168861,168863,168865],{"class":54,"line":55},[52,168850,168806],{"class":79},[52,168852,82460],{"class":1223},[52,168854,292],{"class":58},[52,168856,152538],{"class":62},[52,168858,15083],{"class":79},[52,168860,72871],{"class":1223},[52,168862,292],{"class":58},[52,168864,309],{"class":308},[52,168866,708],{"class":79},[52,168868,168869,168871,168873,168875,168877,168879,168881,168883,168885],{"class":54,"line":66},[52,168870,168806],{"class":79},[52,168872,72871],{"class":1223},[52,168874,292],{"class":58},[52,168876,309],{"class":308},[52,168878,15083],{"class":79},[52,168880,82460],{"class":1223},[52,168882,292],{"class":58},[52,168884,152538],{"class":62},[52,168886,708],{"class":79},[14,168888,120584],{},[1696,168890,168891,168894],{},[32,168892,168893],{},"顺序不容易错。",[32,168895,168896],{},"调用时可读性更强。",[18,168898,168900],{"id":168899},"_74-默认参数","7.4 默认参数",[14,168902,168903],{},"默认参数给参数设置默认值。",[42,168905,168907],{"className":33028,"code":168906,"language":33030,"meta":47,"style":47},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[49,168908,168909,168925,168955,168959,168963,168973],{"__ignoreMap":47},[52,168910,168911,168913,168915,168918,168920,168923],{"class":54,"line":55},[52,168912,34597],{"class":58},[52,168914,124743],{"class":75},[52,168916,168917],{"class":79},"(host, port",[52,168919,292],{"class":58},[52,168921,168922],{"class":308},"3306",[52,168924,33436],{"class":79},[52,168926,168927,168929,168931,168933,168936,168938,168940,168942,168944,168946,168949,168951,168953],{"class":54,"line":66},[52,168928,33949],{"class":308},[52,168930,1216],{"class":79},[52,168932,3273],{"class":58},[52,168934,168935],{"class":62},"\"连接",[52,168937,383],{"class":308},[52,168939,30045],{"class":79},[52,168941,4132],{"class":308},[52,168943,4049],{"class":62},[52,168945,383],{"class":308},[52,168947,168948],{"class":79},"port",[52,168950,4132],{"class":308},[52,168952,2844],{"class":62},[52,168954,708],{"class":79},[52,168956,168957],{"class":54,"line":83},[52,168958,123],{"emptyLinePlaceholder":122},[52,168960,168961],{"class":54,"line":91},[52,168962,123],{"emptyLinePlaceholder":122},[52,168964,168965,168968,168971],{"class":54,"line":98},[52,168966,168967],{"class":79},"connect(",[52,168969,168970],{"class":62},"\"localhost\"",[52,168972,708],{"class":79},[52,168974,168975,168977,168979,168981,168984],{"class":54,"line":107},[52,168976,168967],{"class":79},[52,168978,168970],{"class":62},[52,168980,15083],{"class":79},[52,168982,168983],{"class":308},"6379",[52,168985,708],{"class":79},[14,168987,168988],{},"注意：默认参数必须放在非默认参数后面。",[14,168990,168991],{},"错误：",[42,168993,168995],{"className":33028,"code":168994,"language":33030,"meta":47,"style":47},"def connect(port=3306, host):\n    pass\n",[49,168996,168997,169013],{"__ignoreMap":47},[52,168998,168999,169001,169003,169006,169008,169010],{"class":54,"line":55},[52,169000,34597],{"class":58},[52,169002,124743],{"class":75},[52,169004,169005],{"class":79},"(port",[52,169007,292],{"class":58},[52,169009,168922],{"class":308},[52,169011,169012],{"class":79},", host):\n",[52,169014,169015],{"class":54,"line":66},[52,169016,152187],{"class":58},[14,169018,169019],{},"正确：",[42,169021,169023],{"className":33028,"code":169022,"language":33030,"meta":47,"style":47},"def connect(host, port=3306):\n    pass\n",[49,169024,169025,169039],{"__ignoreMap":47},[52,169026,169027,169029,169031,169033,169035,169037],{"class":54,"line":55},[52,169028,34597],{"class":58},[52,169030,124743],{"class":75},[52,169032,168917],{"class":79},[52,169034,292],{"class":58},[52,169036,168922],{"class":308},[52,169038,33436],{"class":79},[52,169040,169041],{"class":54,"line":66},[52,169042,152187],{"class":58},[18,169044,169046],{"id":169045},"_75-默认参数的坑","7.5 默认参数的坑",[14,169048,169049],{},"不要使用可变对象作为默认参数。",[14,169051,160273],{},[42,169053,169055],{"className":33028,"code":169054,"language":33030,"meta":47,"style":47},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[49,169056,169057,169072,169077,169084,169088,169092,169103],{"__ignoreMap":47},[52,169058,169059,169061,169064,169067,169069],{"class":54,"line":55},[52,169060,34597],{"class":58},[52,169062,169063],{"class":75}," add_item",[52,169065,169066],{"class":79},"(item, items",[52,169068,292],{"class":58},[52,169070,169071],{"class":79},"[]):\n",[52,169073,169074],{"class":54,"line":66},[52,169075,169076],{"class":79},"    items.append(item)\n",[52,169078,169079,169081],{"class":54,"line":83},[52,169080,1441],{"class":58},[52,169082,169083],{"class":79}," items\n",[52,169085,169086],{"class":54,"line":91},[52,169087,123],{"emptyLinePlaceholder":122},[52,169089,169090],{"class":54,"line":98},[52,169091,123],{"emptyLinePlaceholder":122},[52,169093,169094,169096,169099,169101],{"class":54,"line":107},[52,169095,33065],{"class":308},[52,169097,169098],{"class":79},"(add_item(",[52,169100,167975],{"class":62},[52,169102,33147],{"class":79},[52,169104,169105,169107,169109,169112],{"class":54,"line":113},[52,169106,33065],{"class":308},[52,169108,169098],{"class":79},[52,169110,169111],{"class":62},"\"b\"",[52,169113,33147],{"class":79},[14,169115,169116],{},"第二次调用会复用第一次的列表。",[14,169118,158538],{},[42,169120,169122],{"className":33028,"code":169121,"language":33030,"meta":47,"style":47},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[49,169123,169124,169138,169151,169160,169164],{"__ignoreMap":47},[52,169125,169126,169128,169130,169132,169134,169136],{"class":54,"line":55},[52,169127,34597],{"class":58},[52,169129,169063],{"class":75},[52,169131,169066],{"class":79},[52,169133,292],{"class":58},[52,169135,98336],{"class":308},[52,169137,33436],{"class":79},[52,169139,169140,169142,169145,169147,169149],{"class":54,"line":66},[52,169141,6088],{"class":58},[52,169143,169144],{"class":79}," items ",[52,169146,41577],{"class":58},[52,169148,41583],{"class":308},[52,169150,6718],{"class":79},[52,169152,169153,169156,169158],{"class":54,"line":83},[52,169154,169155],{"class":79},"        items ",[52,169157,292],{"class":58},[52,169159,54488],{"class":79},[52,169161,169162],{"class":54,"line":91},[52,169163,169076],{"class":79},[52,169165,169166,169168],{"class":54,"line":98},[52,169167,1441],{"class":58},[52,169169,169083],{"class":79},[18,169171,169173],{"id":169172},"_76-不定长参数","7.6 不定长参数",[3195,169175,169177],{"id":169176},"_761-args","7.6.1 *args",[14,169179,169180,169183],{},[49,169181,169182],{},"*args"," 接收任意数量的位置参数，得到元组。",[42,169185,169187],{"className":33028,"code":169186,"language":33030,"meta":47,"style":47},"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",[49,169188,169189,169202,169210,169221,169230,169236,169240,169244,169263],{"__ignoreMap":47},[52,169190,169191,169193,169195,169197,169199],{"class":54,"line":55},[52,169192,34597],{"class":58},[52,169194,8176],{"class":75},[52,169196,1216],{"class":79},[52,169198,3053],{"class":58},[52,169200,169201],{"class":79},"args):\n",[52,169203,169204,169206,169208],{"class":54,"line":66},[52,169205,161957],{"class":79},[52,169207,292],{"class":58},[52,169209,49983],{"class":308},[52,169211,169212,169214,169216,169218],{"class":54,"line":83},[52,169213,679],{"class":58},[52,169215,158830],{"class":79},[52,169217,28693],{"class":58},[52,169219,169220],{"class":79}," args:\n",[52,169222,169223,169225,169227],{"class":54,"line":91},[52,169224,162632],{"class":79},[52,169226,1910],{"class":58},[52,169228,169229],{"class":79}," num\n",[52,169231,169232,169234],{"class":54,"line":98},[52,169233,1441],{"class":58},[52,169235,164937],{"class":79},[52,169237,169238],{"class":54,"line":107},[52,169239,123],{"emptyLinePlaceholder":122},[52,169241,169242],{"class":54,"line":113},[52,169243,123],{"emptyLinePlaceholder":122},[52,169245,169246,169248,169251,169253,169255,169257,169259,169261],{"class":54,"line":119},[52,169247,33065],{"class":308},[52,169249,169250],{"class":79},"(add(",[52,169252,629],{"class":308},[52,169254,15083],{"class":79},[52,169256,564],{"class":308},[52,169258,15083],{"class":79},[52,169260,2313],{"class":308},[52,169262,33147],{"class":79},[52,169264,169265,169267,169269,169271,169273,169275,169277,169279,169281,169283,169285,169287],{"class":54,"line":126},[52,169266,33065],{"class":308},[52,169268,169250],{"class":79},[52,169270,629],{"class":308},[52,169272,15083],{"class":79},[52,169274,564],{"class":308},[52,169276,15083],{"class":79},[52,169278,2313],{"class":308},[52,169280,15083],{"class":79},[52,169282,3504],{"class":308},[52,169284,15083],{"class":79},[52,169286,1805],{"class":308},[52,169288,33147],{"class":79},[3195,169290,169292],{"id":169291},"_762-kwargs","7.6.2 **kwargs",[14,169294,169295,169298],{},[49,169296,169297],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[42,169300,169302],{"className":33028,"code":169301,"language":33030,"meta":47,"style":47},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[49,169303,169304,169317,169328,169334,169338,169342],{"__ignoreMap":47},[52,169305,169306,169308,169310,169312,169314],{"class":54,"line":55},[52,169307,34597],{"class":58},[52,169309,164595],{"class":75},[52,169311,1216],{"class":79},[52,169313,3139],{"class":58},[52,169315,169316],{"class":79},"kwargs):\n",[52,169318,169319,169321,169323,169325],{"class":54,"line":66},[52,169320,679],{"class":58},[52,169322,167435],{"class":79},[52,169324,28693],{"class":58},[52,169326,169327],{"class":79}," kwargs.items():\n",[52,169329,169330,169332],{"class":54,"line":83},[52,169331,35101],{"class":308},[52,169333,167447],{"class":79},[52,169335,169336],{"class":54,"line":91},[52,169337,123],{"emptyLinePlaceholder":122},[52,169339,169340],{"class":54,"line":98},[52,169341,123],{"emptyLinePlaceholder":122},[52,169343,169344,169346,169348,169350,169352,169354,169356,169358,169360,169362,169364,169366,169368],{"class":54,"line":107},[52,169345,164660],{"class":79},[52,169347,82460],{"class":1223},[52,169349,292],{"class":58},[52,169351,152538],{"class":62},[52,169353,15083],{"class":79},[52,169355,72871],{"class":1223},[52,169357,292],{"class":58},[52,169359,309],{"class":308},[52,169361,15083],{"class":79},[52,169363,72922],{"class":1223},[52,169365,292],{"class":58},[52,169367,71919],{"class":62},[52,169369,708],{"class":79},[18,169371,169373],{"id":169372},"_77-参数解包","7.7 参数解包",[14,169375,169376],{},"列表或元组解包为位置参数：",[42,169378,169380],{"className":33028,"code":169379,"language":33030,"meta":47,"style":47},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[49,169381,169382,169391,169406,169410,169414,169434],{"__ignoreMap":47},[52,169383,169384,169386,169388],{"class":54,"line":55},[52,169385,34597],{"class":58},[52,169387,8176],{"class":75},[52,169389,169390],{"class":79},"(a, b, c):\n",[52,169392,169393,169395,169397,169399,169401,169403],{"class":54,"line":66},[52,169394,1441],{"class":58},[52,169396,13517],{"class":79},[52,169398,2004],{"class":58},[52,169400,13530],{"class":79},[52,169402,2004],{"class":58},[52,169404,169405],{"class":79}," c\n",[52,169407,169408],{"class":54,"line":83},[52,169409,123],{"emptyLinePlaceholder":122},[52,169411,169412],{"class":54,"line":91},[52,169413,123],{"emptyLinePlaceholder":122},[52,169415,169416,169418,169420,169422,169424,169426,169428,169430,169432],{"class":54,"line":98},[52,169417,166750],{"class":79},[52,169419,292],{"class":58},[52,169421,54876],{"class":79},[52,169423,629],{"class":308},[52,169425,15083],{"class":79},[52,169427,564],{"class":308},[52,169429,15083],{"class":79},[52,169431,2313],{"class":308},[52,169433,35896],{"class":79},[52,169435,169436,169438,169440,169442],{"class":54,"line":107},[52,169437,33065],{"class":308},[52,169439,169250],{"class":79},[52,169441,3053],{"class":58},[52,169443,169444],{"class":79},"nums))\n",[14,169446,169447],{},"字典解包为关键字参数：",[42,169449,169451],{"className":33028,"code":169450,"language":33030,"meta":47,"style":47},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[49,169452,169453,169461,169487,169491,169495,169519],{"__ignoreMap":47},[52,169454,169455,169457,169459],{"class":54,"line":55},[52,169456,34597],{"class":58},[52,169458,152022],{"class":75},[52,169460,152025],{"class":79},[52,169462,169463,169465,169467,169469,169471,169473,169475,169477,169479,169481,169483,169485],{"class":54,"line":66},[52,169464,33949],{"class":308},[52,169466,1216],{"class":79},[52,169468,3273],{"class":58},[52,169470,2844],{"class":62},[52,169472,383],{"class":308},[52,169474,82460],{"class":79},[52,169476,4132],{"class":308},[52,169478,7420],{"class":308},[52,169480,72871],{"class":79},[52,169482,4132],{"class":308},[52,169484,2844],{"class":62},[52,169486,708],{"class":79},[52,169488,169489],{"class":54,"line":83},[52,169490,123],{"emptyLinePlaceholder":122},[52,169492,169493],{"class":54,"line":91},[52,169494,123],{"emptyLinePlaceholder":122},[52,169496,169497,169499,169501,169503,169505,169507,169509,169511,169513,169515,169517],{"class":54,"line":98},[52,169498,118964],{"class":79},[52,169500,292],{"class":58},[52,169502,7420],{"class":79},[52,169504,65329],{"class":62},[52,169506,54087],{"class":79},[52,169508,152538],{"class":62},[52,169510,15083],{"class":79},[52,169512,71774],{"class":62},[52,169514,54087],{"class":79},[52,169516,309],{"class":308},[52,169518,452],{"class":79},[52,169520,169521,169523,169525],{"class":54,"line":107},[52,169522,168806],{"class":79},[52,169524,3139],{"class":58},[52,169526,169527],{"class":79},"info)\n",[18,169529,169531],{"id":169530},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,169533,169534,169537],{},[49,169535,169536],{},"lambda"," 用于定义简单匿名函数。",[42,169539,169541],{"className":33028,"code":169540,"language":33030,"meta":47,"style":47},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[49,169542,169543,169560],{"__ignoreMap":47},[52,169544,169545,169548,169550,169553,169556,169558],{"class":54,"line":55},[52,169546,169547],{"class":79},"add ",[52,169549,292],{"class":58},[52,169551,169552],{"class":58}," lambda",[52,169554,169555],{"class":79}," a, b: a ",[52,169557,2004],{"class":58},[52,169559,153754],{"class":79},[52,169561,169562,169564,169566,169568,169570,169572],{"class":54,"line":66},[52,169563,33065],{"class":308},[52,169565,169250],{"class":79},[52,169567,629],{"class":308},[52,169569,15083],{"class":79},[52,169571,564],{"class":308},[52,169573,33147],{"class":79},[14,169575,169576],{},"常和排序、过滤等函数一起使用。",[14,169578,169579],{},"按分数排序：",[42,169581,169583],{"className":33028,"code":169582,"language":33030,"meta":47,"style":47},"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",[49,169584,169585,169593,169613,169633,169653,169657,169661,169684],{"__ignoreMap":47},[52,169586,169587,169589,169591],{"class":54,"line":55},[52,169588,162366],{"class":79},[52,169590,292],{"class":58},[52,169592,58097],{"class":79},[52,169594,169595,169597,169599,169601,169603,169605,169607,169609,169611],{"class":54,"line":66},[52,169596,151035],{"class":79},[52,169598,65329],{"class":62},[52,169600,54087],{"class":79},[52,169602,152538],{"class":62},[52,169604,15083],{"class":79},[52,169606,154122],{"class":62},[52,169608,54087],{"class":79},[52,169610,4174],{"class":308},[52,169612,594],{"class":79},[52,169614,169615,169617,169619,169621,169623,169625,169627,169629,169631],{"class":54,"line":83},[52,169616,151035],{"class":79},[52,169618,65329],{"class":62},[52,169620,54087],{"class":79},[52,169622,153586],{"class":62},[52,169624,15083],{"class":79},[52,169626,154122],{"class":62},[52,169628,54087],{"class":79},[52,169630,4001],{"class":308},[52,169632,594],{"class":79},[52,169634,169635,169637,169639,169641,169643,169645,169647,169649,169651],{"class":54,"line":91},[52,169636,151035],{"class":79},[52,169638,65329],{"class":62},[52,169640,54087],{"class":79},[52,169642,162381],{"class":62},[52,169644,15083],{"class":79},[52,169646,154122],{"class":62},[52,169648,54087],{"class":79},[52,169650,3610],{"class":308},[52,169652,594],{"class":79},[52,169654,169655],{"class":54,"line":98},[52,169656,35896],{"class":79},[52,169658,169659],{"class":54,"line":107},[52,169660,123],{"emptyLinePlaceholder":122},[52,169662,169663,169666,169668,169670,169672,169674,169676,169678,169680,169682],{"class":54,"line":113},[52,169664,169665],{"class":79},"students.sort(",[52,169667,156596],{"class":1223},[52,169669,156599],{"class":58},[52,169671,156602],{"class":79},[52,169673,154122],{"class":62},[52,169675,114852],{"class":79},[52,169677,166178],{"class":1223},[52,169679,292],{"class":58},[52,169681,34126],{"class":308},[52,169683,708],{"class":79},[52,169685,169686,169688],{"class":54,"line":119},[52,169687,33065],{"class":308},[52,169689,167645],{"class":79},[14,169691,169692,169693,169695],{},"如果逻辑复杂，不要硬写 ",[49,169694,169536],{},"，定义普通函数更清晰。",[18,169697,169699],{"id":169698},"_79-函数作为参数","7.9 函数作为参数",[14,169701,169702],{},"函数可以作为参数传给另一个函数。",[42,169704,169706],{"className":33028,"code":169705,"language":33030,"meta":47,"style":47},"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",[49,169707,169708,169716,169726,169730,169734,169744,169751,169755,169759],{"__ignoreMap":47},[52,169709,169710,169712,169714],{"class":54,"line":55},[52,169711,34597],{"class":58},[52,169713,8176],{"class":75},[52,169715,153743],{"class":79},[52,169717,169718,169720,169722,169724],{"class":54,"line":66},[52,169719,1441],{"class":58},[52,169721,13517],{"class":79},[52,169723,2004],{"class":58},[52,169725,153754],{"class":79},[52,169727,169728],{"class":54,"line":83},[52,169729,123],{"emptyLinePlaceholder":122},[52,169731,169732],{"class":54,"line":91},[52,169733,123],{"emptyLinePlaceholder":122},[52,169735,169736,169738,169741],{"class":54,"line":98},[52,169737,34597],{"class":58},[52,169739,169740],{"class":75}," calculate",[52,169742,169743],{"class":79},"(a, b, func):\n",[52,169745,169746,169748],{"class":54,"line":107},[52,169747,1441],{"class":58},[52,169749,169750],{"class":79}," func(a, b)\n",[52,169752,169753],{"class":54,"line":113},[52,169754,123],{"emptyLinePlaceholder":122},[52,169756,169757],{"class":54,"line":119},[52,169758,123],{"emptyLinePlaceholder":122},[52,169760,169761,169763,169766,169768,169770,169772],{"class":54,"line":126},[52,169762,33065],{"class":308},[52,169764,169765],{"class":79},"(calculate(",[52,169767,3649],{"class":308},[52,169769,15083],{"class":79},[52,169771,444],{"class":308},[52,169773,169774],{"class":79},", add))\n",[14,169776,169777],{},"这种思想在排序、回调、框架中经常出现。",[18,169779,169781],{"id":169780},"_710-mapfiltersorted","7.10 map、filter、sorted",[3195,169783,169785],{"id":169784},"_7101-map","7.10.1 map",[14,169787,169788,169790],{},[49,169789,76694],{}," 对每个元素执行函数。",[42,169792,169794],{"className":33028,"code":169793,"language":33030,"meta":47,"style":47},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[49,169795,169796,169820,169843],{"__ignoreMap":47},[52,169797,169798,169800,169802,169804,169806,169808,169810,169812,169814,169816,169818],{"class":54,"line":55},[52,169799,166750],{"class":79},[52,169801,292],{"class":58},[52,169803,54876],{"class":79},[52,169805,629],{"class":308},[52,169807,15083],{"class":79},[52,169809,564],{"class":308},[52,169811,15083],{"class":79},[52,169813,2313],{"class":308},[52,169815,15083],{"class":79},[52,169817,3504],{"class":308},[52,169819,35896],{"class":79},[52,169821,169822,169824,169826,169829,169831,169833,169836,169838,169840],{"class":54,"line":66},[52,169823,163956],{"class":79},[52,169825,292],{"class":58},[52,169827,169828],{"class":308}," map",[52,169830,1216],{"class":79},[52,169832,169536],{"class":58},[52,169834,169835],{"class":79}," x: x ",[52,169837,3053],{"class":58},[52,169839,17403],{"class":308},[52,169841,169842],{"class":79},", nums)\n",[52,169844,169845,169847,169849,169851],{"class":54,"line":83},[52,169846,33065],{"class":308},[52,169848,1216],{"class":79},[52,169850,156720],{"class":308},[52,169852,168718],{"class":79},[3195,169854,169856],{"id":169855},"_7102-filter","7.10.2 filter",[14,169858,169859,169861],{},[49,169860,82701],{}," 保留满足条件的元素。",[42,169863,169865],{"className":33028,"code":169864,"language":33030,"meta":47,"style":47},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[49,169866,169867,169895,169920],{"__ignoreMap":47},[52,169868,169869,169871,169873,169875,169877,169879,169881,169883,169885,169887,169889,169891,169893],{"class":54,"line":55},[52,169870,166750],{"class":79},[52,169872,292],{"class":58},[52,169874,54876],{"class":79},[52,169876,629],{"class":308},[52,169878,15083],{"class":79},[52,169880,564],{"class":308},[52,169882,15083],{"class":79},[52,169884,2313],{"class":308},[52,169886,15083],{"class":79},[52,169888,3504],{"class":308},[52,169890,15083],{"class":79},[52,169892,1805],{"class":308},[52,169894,35896],{"class":79},[52,169896,169897,169899,169901,169904,169906,169908,169910,169912,169914,169916,169918],{"class":54,"line":66},[52,169898,163956],{"class":79},[52,169900,292],{"class":58},[52,169902,169903],{"class":308}," filter",[52,169905,1216],{"class":79},[52,169907,169536],{"class":58},[52,169909,169835],{"class":79},[52,169911,1998],{"class":58},[52,169913,17403],{"class":308},[52,169915,104209],{"class":58},[52,169917,1444],{"class":308},[52,169919,169842],{"class":79},[52,169921,169922,169924,169926,169928],{"class":54,"line":83},[52,169923,33065],{"class":308},[52,169925,1216],{"class":79},[52,169927,156720],{"class":308},[52,169929,168718],{"class":79},[3195,169931,169933],{"id":169932},"_7103-sorted","7.10.3 sorted",[14,169935,169936,169938],{},[49,169937,167886],{}," 返回排序后的新列表。",[42,169940,169942],{"className":33028,"code":169941,"language":33030,"meta":47,"style":47},"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",[49,169943,169944,169952,169972,169992,170012,170016,170020,170049],{"__ignoreMap":47},[52,169945,169946,169948,169950],{"class":54,"line":55},[52,169947,162366],{"class":79},[52,169949,292],{"class":58},[52,169951,58097],{"class":79},[52,169953,169954,169956,169958,169960,169962,169964,169966,169968,169970],{"class":54,"line":66},[52,169955,151035],{"class":79},[52,169957,65329],{"class":62},[52,169959,54087],{"class":79},[52,169961,152538],{"class":62},[52,169963,15083],{"class":79},[52,169965,154122],{"class":62},[52,169967,54087],{"class":79},[52,169969,4174],{"class":308},[52,169971,594],{"class":79},[52,169973,169974,169976,169978,169980,169982,169984,169986,169988,169990],{"class":54,"line":83},[52,169975,151035],{"class":79},[52,169977,65329],{"class":62},[52,169979,54087],{"class":79},[52,169981,153586],{"class":62},[52,169983,15083],{"class":79},[52,169985,154122],{"class":62},[52,169987,54087],{"class":79},[52,169989,4001],{"class":308},[52,169991,594],{"class":79},[52,169993,169994,169996,169998,170000,170002,170004,170006,170008,170010],{"class":54,"line":91},[52,169995,151035],{"class":79},[52,169997,65329],{"class":62},[52,169999,54087],{"class":79},[52,170001,162381],{"class":62},[52,170003,15083],{"class":79},[52,170005,154122],{"class":62},[52,170007,54087],{"class":79},[52,170009,3610],{"class":308},[52,170011,594],{"class":79},[52,170013,170014],{"class":54,"line":98},[52,170015,35896],{"class":79},[52,170017,170018],{"class":54,"line":107},[52,170019,123],{"emptyLinePlaceholder":122},[52,170021,170022,170024,170026,170028,170031,170033,170035,170037,170039,170041,170043,170045,170047],{"class":54,"line":113},[52,170023,163956],{"class":79},[52,170025,292],{"class":58},[52,170027,166254],{"class":308},[52,170029,170030],{"class":79},"(students, ",[52,170032,156596],{"class":1223},[52,170034,156599],{"class":58},[52,170036,156602],{"class":79},[52,170038,154122],{"class":62},[52,170040,114852],{"class":79},[52,170042,166178],{"class":1223},[52,170044,292],{"class":58},[52,170046,34126],{"class":308},[52,170048,708],{"class":79},[52,170050,170051,170053],{"class":54,"line":119},[52,170052,33065],{"class":308},[52,170054,79235],{"class":79},[18,170056,170058],{"id":170057},"_711-闭包入门","7.11 闭包入门",[14,170060,170061],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[42,170063,170065],{"className":33028,"code":170064,"language":33030,"meta":47,"style":47},"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",[49,170066,170067,170077,170087,170098,170102,170109,170113,170117,170131],{"__ignoreMap":47},[52,170068,170069,170071,170074],{"class":54,"line":55},[52,170070,34597],{"class":58},[52,170072,170073],{"class":75}," outer",[52,170075,170076],{"class":79},"(base):\n",[52,170078,170079,170081,170084],{"class":54,"line":66},[52,170080,33451],{"class":58},[52,170082,170083],{"class":75}," inner",[52,170085,170086],{"class":79},"(num):\n",[52,170088,170089,170091,170094,170096],{"class":54,"line":83},[52,170090,17400],{"class":58},[52,170092,170093],{"class":79}," base ",[52,170095,2004],{"class":58},[52,170097,169229],{"class":79},[52,170099,170100],{"class":54,"line":91},[52,170101,123],{"emptyLinePlaceholder":122},[52,170103,170104,170106],{"class":54,"line":98},[52,170105,1441],{"class":58},[52,170107,170108],{"class":79}," inner\n",[52,170110,170111],{"class":54,"line":107},[52,170112,123],{"emptyLinePlaceholder":122},[52,170114,170115],{"class":54,"line":113},[52,170116,123],{"emptyLinePlaceholder":122},[52,170118,170119,170122,170124,170127,170129],{"class":54,"line":119},[52,170120,170121],{"class":79},"add_10 ",[52,170123,292],{"class":58},[52,170125,170126],{"class":79}," outer(",[52,170128,3649],{"class":308},[52,170130,708],{"class":79},[52,170132,170133,170135,170138,170140],{"class":54,"line":126},[52,170134,33065],{"class":308},[52,170136,170137],{"class":79},"(add_10(",[52,170139,1805],{"class":308},[52,170141,33147],{"class":79},[14,170143,170144],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[18,170146,170148],{"id":170147},"_712-装饰器入门","7.12 装饰器入门",[14,170150,170151],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[42,170153,170155],{"className":33028,"code":170154,"language":33030,"meta":47,"style":47},"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",[49,170156,170157,170166,170175,170186,170191,170202,170206,170213,170217,170221,170226,170234,170244,170248,170252],{"__ignoreMap":47},[52,170158,170159,170161,170163],{"class":54,"line":55},[52,170160,34597],{"class":58},[52,170162,89841],{"class":75},[52,170164,170165],{"class":79},"(func):\n",[52,170167,170168,170170,170173],{"class":54,"line":66},[52,170169,33451],{"class":58},[52,170171,170172],{"class":75}," wrapper",[52,170174,34603],{"class":79},[52,170176,170177,170179,170181,170184],{"class":54,"line":83},[52,170178,35101],{"class":308},[52,170180,1216],{"class":79},[52,170182,170183],{"class":62},"\"函数开始执行\"",[52,170185,708],{"class":79},[52,170187,170188],{"class":54,"line":91},[52,170189,170190],{"class":79},"        func()\n",[52,170192,170193,170195,170197,170200],{"class":54,"line":98},[52,170194,35101],{"class":308},[52,170196,1216],{"class":79},[52,170198,170199],{"class":62},"\"函数执行结束\"",[52,170201,708],{"class":79},[52,170203,170204],{"class":54,"line":107},[52,170205,123],{"emptyLinePlaceholder":122},[52,170207,170208,170210],{"class":54,"line":113},[52,170209,1441],{"class":58},[52,170211,170212],{"class":79}," wrapper\n",[52,170214,170215],{"class":54,"line":119},[52,170216,123],{"emptyLinePlaceholder":122},[52,170218,170219],{"class":54,"line":126},[52,170220,123],{"emptyLinePlaceholder":122},[52,170222,170223],{"class":54,"line":132},[52,170224,170225],{"class":75},"@log\n",[52,170227,170228,170230,170232],{"class":54,"line":138},[52,170229,34597],{"class":58},[52,170231,163646],{"class":75},[52,170233,34603],{"class":79},[52,170235,170236,170238,170240,170242],{"class":54,"line":144},[52,170237,33949],{"class":308},[52,170239,1216],{"class":79},[52,170241,8809],{"class":62},[52,170243,708],{"class":79},[52,170245,170246],{"class":54,"line":153},[52,170247,123],{"emptyLinePlaceholder":122},[52,170249,170250],{"class":54,"line":159},[52,170251,123],{"emptyLinePlaceholder":122},[52,170253,170254],{"class":54,"line":167},[52,170255,163681],{"class":79},[14,170257,160924],{},[42,170259,170261],{"className":33028,"code":170260,"language":33030,"meta":47,"style":47},"say_hello = log(say_hello)\n",[49,170262,170263],{"__ignoreMap":47},[52,170264,170265,170268,170270],{"class":54,"line":55},[52,170266,170267],{"class":79},"say_hello ",[52,170269,292],{"class":58},[52,170271,170272],{"class":79}," log(say_hello)\n",[14,170274,170275],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[18,170277,170279],{"id":170278},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[42,170281,170283],{"className":33028,"code":170282,"language":33030,"meta":47,"style":47},"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",[49,170284,170285,170293,170310,170320,170339,170349,170356,170360,170366,170370,170374,170378,170386,170396,170400,170404],{"__ignoreMap":47},[52,170286,170287,170289,170291],{"class":54,"line":55},[52,170288,34597],{"class":58},[52,170290,89841],{"class":75},[52,170292,170165],{"class":79},[52,170294,170295,170297,170299,170301,170303,170306,170308],{"class":54,"line":66},[52,170296,33451],{"class":58},[52,170298,170172],{"class":75},[52,170300,1216],{"class":79},[52,170302,3053],{"class":58},[52,170304,170305],{"class":79},"args, ",[52,170307,3139],{"class":58},[52,170309,169316],{"class":79},[52,170311,170312,170314,170316,170318],{"class":54,"line":83},[52,170313,35101],{"class":308},[52,170315,1216],{"class":79},[52,170317,170183],{"class":62},[52,170319,708],{"class":79},[52,170321,170322,170325,170327,170330,170332,170334,170336],{"class":54,"line":91},[52,170323,170324],{"class":79},"        result ",[52,170326,292],{"class":58},[52,170328,170329],{"class":79}," func(",[52,170331,3053],{"class":58},[52,170333,170305],{"class":79},[52,170335,3139],{"class":58},[52,170337,170338],{"class":79},"kwargs)\n",[52,170340,170341,170343,170345,170347],{"class":54,"line":98},[52,170342,35101],{"class":308},[52,170344,1216],{"class":79},[52,170346,170199],{"class":62},[52,170348,708],{"class":79},[52,170350,170351,170353],{"class":54,"line":107},[52,170352,17400],{"class":58},[52,170354,170355],{"class":79}," result\n",[52,170357,170358],{"class":54,"line":113},[52,170359,123],{"emptyLinePlaceholder":122},[52,170361,170362,170364],{"class":54,"line":119},[52,170363,1441],{"class":58},[52,170365,170212],{"class":79},[52,170367,170368],{"class":54,"line":126},[52,170369,123],{"emptyLinePlaceholder":122},[52,170371,170372],{"class":54,"line":132},[52,170373,123],{"emptyLinePlaceholder":122},[52,170375,170376],{"class":54,"line":138},[52,170377,170225],{"class":75},[52,170379,170380,170382,170384],{"class":54,"line":144},[52,170381,34597],{"class":58},[52,170383,8176],{"class":75},[52,170385,153743],{"class":79},[52,170387,170388,170390,170392,170394],{"class":54,"line":153},[52,170389,1441],{"class":58},[52,170391,13517],{"class":79},[52,170393,2004],{"class":58},[52,170395,153754],{"class":79},[52,170397,170398],{"class":54,"line":159},[52,170399,123],{"emptyLinePlaceholder":122},[52,170401,170402],{"class":54,"line":167},[52,170403,123],{"emptyLinePlaceholder":122},[52,170405,170406,170408,170410,170412,170414,170416],{"class":54,"line":173},[52,170407,33065],{"class":308},[52,170409,169250],{"class":79},[52,170411,3649],{"class":308},[52,170413,15083],{"class":79},[52,170415,444],{"class":308},[52,170417,33147],{"class":79},[14,170419,170420,170421,103668,170423,170425],{},"这个写法使用 ",[49,170422,169182],{},[49,170424,169297],{}," 接收原函数的所有参数。",[18,170427,170429],{"id":170428},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,170431,125942],{},[1696,170433,170434,170437,170440],{},[32,170435,170436],{},"给定一组学生数据。",[32,170438,170439],{},"封装函数，根据传入规则筛选学生。",[32,170441,170442],{},"筛选及格、优秀、未成年学生。",[14,170444,2496],{},[42,170446,170448],{"className":33028,"code":170447,"language":33030,"meta":47,"style":47},"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",[49,170449,170450,170458,170486,170514,170542,170546,170550,170554,170564,170572,170582,170589,170594,170600,170604,170608,170632,170655,170678,170682,170689,170696],{"__ignoreMap":47},[52,170451,170452,170454,170456],{"class":54,"line":55},[52,170453,162366],{"class":79},[52,170455,292],{"class":58},[52,170457,58097],{"class":79},[52,170459,170460,170462,170464,170466,170468,170470,170472,170474,170476,170478,170480,170482,170484],{"class":54,"line":66},[52,170461,151035],{"class":79},[52,170463,65329],{"class":62},[52,170465,54087],{"class":79},[52,170467,152538],{"class":62},[52,170469,15083],{"class":79},[52,170471,71774],{"class":62},[52,170473,54087],{"class":79},[52,170475,309],{"class":308},[52,170477,15083],{"class":79},[52,170479,154122],{"class":62},[52,170481,54087],{"class":79},[52,170483,4174],{"class":308},[52,170485,594],{"class":79},[52,170487,170488,170490,170492,170494,170496,170498,170500,170502,170504,170506,170508,170510,170512],{"class":54,"line":83},[52,170489,151035],{"class":79},[52,170491,65329],{"class":62},[52,170493,54087],{"class":79},[52,170495,153586],{"class":62},[52,170497,15083],{"class":79},[52,170499,71774],{"class":62},[52,170501,54087],{"class":79},[52,170503,3822],{"class":308},[52,170505,15083],{"class":79},[52,170507,154122],{"class":62},[52,170509,54087],{"class":79},[52,170511,4001],{"class":308},[52,170513,594],{"class":79},[52,170515,170516,170518,170520,170522,170524,170526,170528,170530,170532,170534,170536,170538,170540],{"class":54,"line":91},[52,170517,151035],{"class":79},[52,170519,65329],{"class":62},[52,170521,54087],{"class":79},[52,170523,162381],{"class":62},[52,170525,15083],{"class":79},[52,170527,71774],{"class":62},[52,170529,54087],{"class":79},[52,170531,2486],{"class":308},[52,170533,15083],{"class":79},[52,170535,154122],{"class":62},[52,170537,54087],{"class":79},[52,170539,4072],{"class":308},[52,170541,594],{"class":79},[52,170543,170544],{"class":54,"line":98},[52,170545,35896],{"class":79},[52,170547,170548],{"class":54,"line":107},[52,170549,123],{"emptyLinePlaceholder":122},[52,170551,170552],{"class":54,"line":113},[52,170553,123],{"emptyLinePlaceholder":122},[52,170555,170556,170558,170561],{"class":54,"line":119},[52,170557,34597],{"class":58},[52,170559,170560],{"class":75}," filter_students",[52,170562,170563],{"class":79},"(students, condition):\n",[52,170565,170566,170568,170570],{"class":54,"line":126},[52,170567,163873],{"class":79},[52,170569,292],{"class":58},[52,170571,54488],{"class":79},[52,170573,170574,170576,170578,170580],{"class":54,"line":132},[52,170575,679],{"class":58},[52,170577,154787],{"class":79},[52,170579,28693],{"class":58},[52,170581,154792],{"class":79},[52,170583,170584,170586],{"class":54,"line":138},[52,170585,5497],{"class":58},[52,170587,170588],{"class":79}," condition(student):\n",[52,170590,170591],{"class":54,"line":144},[52,170592,170593],{"class":79},"            result.append(student)\n",[52,170595,170596,170598],{"class":54,"line":153},[52,170597,1441],{"class":58},[52,170599,170355],{"class":79},[52,170601,170602],{"class":54,"line":159},[52,170603,123],{"emptyLinePlaceholder":122},[52,170605,170606],{"class":54,"line":167},[52,170607,123],{"emptyLinePlaceholder":122},[52,170609,170610,170612,170614,170617,170619,170622,170624,170626,170628,170630],{"class":54,"line":173},[52,170611,168351],{"class":79},[52,170613,292],{"class":58},[52,170615,170616],{"class":79}," filter_students(students, ",[52,170618,169536],{"class":58},[52,170620,170621],{"class":79}," s: s[",[52,170623,154122],{"class":62},[52,170625,7415],{"class":79},[52,170627,4742],{"class":58},[52,170629,160487],{"class":308},[52,170631,708],{"class":79},[52,170633,170634,170637,170639,170641,170643,170645,170647,170649,170651,170653],{"class":54,"line":181},[52,170635,170636],{"class":79},"excellent ",[52,170638,292],{"class":58},[52,170640,170616],{"class":79},[52,170642,169536],{"class":58},[52,170644,170621],{"class":79},[52,170646,154122],{"class":62},[52,170648,7415],{"class":79},[52,170650,4742],{"class":58},[52,170652,160438],{"class":308},[52,170654,708],{"class":79},[52,170656,170657,170660,170662,170664,170666,170668,170670,170672,170674,170676],{"class":54,"line":186},[52,170658,170659],{"class":79},"under_age ",[52,170661,292],{"class":58},[52,170663,170616],{"class":79},[52,170665,169536],{"class":58},[52,170667,170621],{"class":79},[52,170669,71774],{"class":62},[52,170671,7415],{"class":79},[52,170673,698],{"class":58},[52,170675,158935],{"class":308},[52,170677,708],{"class":79},[52,170679,170680],{"class":54,"line":191},[52,170681,123],{"emptyLinePlaceholder":122},[52,170683,170684,170686],{"class":54,"line":196},[52,170685,33065],{"class":308},[52,170687,170688],{"class":79},"(passed)\n",[52,170690,170691,170693],{"class":54,"line":201},[52,170692,33065],{"class":308},[52,170694,170695],{"class":79},"(excellent)\n",[52,170697,170698,170700],{"class":54,"line":206},[52,170699,33065],{"class":308},[52,170701,170702],{"class":79},"(under_age)\n",[18,170704,170706],{"id":170705},"_715-易错点","7.15 易错点",[1696,170708,170709,170712,170720,170725,170736],{},[32,170710,170711],{},"默认参数不要写可变对象。",[32,170713,170714,170716,170717,170719],{},[49,170715,169182],{}," 是元组，",[49,170718,169297],{}," 是字典。",[32,170721,170722,170724],{},[49,170723,169536],{}," 只适合简单表达式。",[32,170726,170727,103668,170729,170731,170732,170735],{},[49,170728,76694],{},[49,170730,82701],{}," 的结果是迭代器，常用 ",[49,170733,170734],{},"list()"," 转换查看。",[32,170737,170738],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[18,170740,170742],{"id":170741},"_716-本章练习","7.16 本章练习",[1696,170744,170745,170752,170758,170763,170768],{},[32,170746,170747,170748,170751],{},"写函数 ",[49,170749,170750],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[32,170753,170747,170754,170757],{},[49,170755,170756],{},"print_user(**kwargs)","，输出用户所有字段。",[32,170759,107016,170760,170762],{},[49,170761,169536],{}," 对学生列表按年龄排序。",[32,170764,107016,170765,170767],{},[49,170766,82701],{}," 找出成绩不及格的学生。",[32,170769,170770],{},"写一个装饰器，统计函数执行前后的提示信息。",[3141,170772,170773],{},"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":47,"searchDepth":66,"depth":66,"links":170775},[170776,170777,170778,170779,170780,170781,170785,170786,170787,170788,170793,170794,170795,170796,170797,170798],{"id":168634,"depth":66,"text":168635},{"id":168748,"depth":66,"text":168749},{"id":168837,"depth":66,"text":168838},{"id":168899,"depth":66,"text":168900},{"id":169045,"depth":66,"text":169046},{"id":169172,"depth":66,"text":169173,"children":170782},[170783,170784],{"id":169176,"depth":83,"text":169177},{"id":169291,"depth":83,"text":169292},{"id":169372,"depth":66,"text":169373},{"id":169530,"depth":66,"text":169531},{"id":169698,"depth":66,"text":169699},{"id":169780,"depth":66,"text":169781,"children":170789},[170790,170791,170792],{"id":169784,"depth":83,"text":169785},{"id":169855,"depth":83,"text":169856},{"id":169932,"depth":83,"text":169933},{"id":170057,"depth":66,"text":170058},{"id":170147,"depth":66,"text":170148},{"id":170278,"depth":66,"text":170279},{"id":170428,"depth":66,"text":170429},{"id":170705,"depth":66,"text":170706},{"id":170741,"depth":66,"text":170742},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":168626,"description":26025},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":170805,"title":170806,"body":170807,"description":26025,"extension":3153,"meta":173326,"navigation":122,"path":173327,"seo":173328,"stem":173329,"__hash__":173330},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":170808,"toc":173301},[170809,170812,170816,170819,170822,170853,170857,170861,170864,170891,170895,170898,170949,170952,170967,170970,171005,171009,171011,171035,171038,171098,171102,171106,171109,171166,171169,171189,171193,171196,171259,171263,171266,171322,171329,171353,171357,171360,171423,171427,171432,171483,171486,171490,171495,171562,171565,171647,171651,171656,171707,171710,171714,171717,171720,171728,171731,171777,171780,171826,171830,171836,171880,171883,171929,171932,171972,171975,172036,172040,172043,172133,172136,172278,172281,172348,172352,172355,172358,172499,172502,172580,172583,172759,172763,172765,172776,172778,172977,172981,173225,173229,173263,173267,173298],[10,170810,170806],{"id":170811},"_8-文件操作",[18,170813,170815],{"id":170814},"_81-文件操作的意义","8.1 文件操作的意义",[14,170817,170818],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,170820,170821],{},"常见文件类型：",[1696,170823,170824,170830,170836,170842,170848],{},[32,170825,170826,170829],{},[49,170827,170828],{},".txt","：普通文本。",[32,170831,170832,170835],{},[49,170833,170834],{},".csv","：表格文本。",[32,170837,170838,170841],{},[49,170839,170840],{},".json","：结构化数据。",[32,170843,170844,170847],{},[49,170845,170846],{},".log","：日志文件。",[32,170849,170850,170852],{},[49,170851,149002],{},"：Python 源代码。",[18,170854,170856],{"id":170855},"_82-路径","8.2 路径",[3195,170858,170860],{"id":170859},"_821-相对路径","8.2.1 相对路径",[14,170862,170863],{},"相对当前运行目录：",[42,170865,170867],{"className":33028,"code":170866,"language":33030,"meta":47,"style":47},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[49,170868,170869],{"__ignoreMap":47},[52,170870,170871,170873,170875,170877,170879,170881,170883,170885,170887,170889],{"class":54,"line":55},[52,170872,89565],{"class":308},[52,170874,1216],{"class":79},[52,170876,149446],{"class":62},[52,170878,15083],{"class":79},[52,170880,149451],{"class":62},[52,170882,15083],{"class":79},[52,170884,149456],{"class":1223},[52,170886,292],{"class":58},[52,170888,149461],{"class":62},[52,170890,708],{"class":79},[3195,170892,170894],{"id":170893},"_822-绝对路径","8.2.2 绝对路径",[14,170896,170897],{},"从根目录或盘符开始：",[42,170899,170901],{"className":33028,"code":170900,"language":33030,"meta":47,"style":47},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[49,170902,170903,170926],{"__ignoreMap":47},[52,170904,170905,170907,170909,170912,170914,170916,170918,170920,170922,170924],{"class":54,"line":55},[52,170906,89565],{"class":308},[52,170908,1216],{"class":79},[52,170910,170911],{"class":62},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[52,170913,15083],{"class":79},[52,170915,149451],{"class":62},[52,170917,15083],{"class":79},[52,170919,149456],{"class":1223},[52,170921,292],{"class":58},[52,170923,149461],{"class":62},[52,170925,708],{"class":79},[52,170927,170928,170930,170932,170935,170937,170939,170941,170943,170945,170947],{"class":54,"line":66},[52,170929,89565],{"class":308},[52,170931,1216],{"class":79},[52,170933,170934],{"class":62},"\"D:\u002Fdata\u002Fdata.txt\"",[52,170936,15083],{"class":79},[52,170938,149451],{"class":62},[52,170940,15083],{"class":79},[52,170942,149456],{"class":1223},[52,170944,292],{"class":58},[52,170946,149461],{"class":62},[52,170948,708],{"class":79},[14,170950,170951],{},"Windows 路径建议写成：",[42,170953,170955],{"className":33028,"code":170954,"language":33030,"meta":47,"style":47},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[49,170956,170957],{"__ignoreMap":47},[52,170958,170959,170962,170964],{"class":54,"line":55},[52,170960,170961],{"class":79},"path ",[52,170963,292],{"class":58},[52,170965,170966],{"class":62}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,170968,170969],{},"或原始字符串：",[42,170971,170973],{"className":33028,"code":170972,"language":33030,"meta":47,"style":47},"path = r\"D:\\data\\data.txt\"\n",[49,170974,170975],{"__ignoreMap":47},[52,170976,170977,170979,170981,170983,170985,170988,170991,170994,170996,170998,171000,171003],{"class":54,"line":55},[52,170978,170961],{"class":79},[52,170980,292],{"class":58},[52,170982,19769],{"class":58},[52,170984,2844],{"class":62},[52,170986,170987],{"class":50627},"D:",[52,170989,170990],{"class":308},"\\d",[52,170992,170993],{"class":50627},"ata",[52,170995,170990],{"class":308},[52,170997,170993],{"class":50627},[52,170999,3757],{"class":308},[52,171001,171002],{"class":50627},"txt",[52,171004,27783],{"class":62},[18,171006,171008],{"id":171007},"_83-open函数","8.3 open函数",[14,171010,8148],{},[42,171012,171014],{"className":33028,"code":171013,"language":33030,"meta":47,"style":47},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[49,171015,171016],{"__ignoreMap":47},[52,171017,171018,171020,171022,171024,171027,171029,171031,171033],{"class":54,"line":55},[52,171019,48004],{"class":1223},[52,171021,16212],{"class":58},[52,171023,149441],{"class":308},[52,171025,171026],{"class":79},"(文件路径, 打开模式, ",[52,171028,149456],{"class":1223},[52,171030,292],{"class":58},[52,171032,149461],{"class":62},[52,171034,708],{"class":79},[14,171036,171037],{},"常见模式：",[3353,171039,171040,171049],{},[3356,171041,171042],{},[3359,171043,171044,171047],{},[3362,171045,171046],{},"模式",[3362,171048,28519],{},[3399,171050,171051,171060,171069,171078,171088],{},[3359,171052,171053,171057],{},[3404,171054,171055],{},[49,171056,3866],{},[3404,171058,171059],{},"只读，文件不存在会报错",[3359,171061,171062,171066],{},[3404,171063,171064],{},[49,171065,3985],{},[3404,171067,171068],{},"只写，文件不存在会创建，存在会清空",[3359,171070,171071,171075],{},[3404,171072,171073],{},[49,171074,3451],{},[3404,171076,171077],{},"追加，文件不存在会创建",[3359,171079,171080,171085],{},[3404,171081,171082],{},[49,171083,171084],{},"rb",[3404,171086,171087],{},"二进制只读",[3359,171089,171090,171095],{},[3404,171091,171092],{},[49,171093,171094],{},"wb",[3404,171096,171097],{},"二进制只写",[18,171099,171101],{"id":171100},"_84-读取文件","8.4 读取文件",[3195,171103,171105],{"id":171104},"_841-read","8.4.1 read",[14,171107,171108],{},"一次读取全部内容：",[42,171110,171112],{"className":33028,"code":171111,"language":33030,"meta":47,"style":47},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[49,171113,171114,171140,171152,171159],{"__ignoreMap":47},[52,171115,171116,171118,171120,171122,171124,171126,171128,171130,171132,171134,171136,171138],{"class":54,"line":55},[52,171117,48004],{"class":1223},[52,171119,16212],{"class":58},[52,171121,149441],{"class":308},[52,171123,1216],{"class":79},[52,171125,149446],{"class":62},[52,171127,15083],{"class":79},[52,171129,149451],{"class":62},[52,171131,15083],{"class":79},[52,171133,149456],{"class":1223},[52,171135,292],{"class":58},[52,171137,149461],{"class":62},[52,171139,708],{"class":79},[52,171141,171142,171145,171147,171149],{"class":54,"line":66},[52,171143,171144],{"class":79},"content ",[52,171146,292],{"class":58},[52,171148,150803],{"class":1223},[52,171150,171151],{"class":79},".read()\n",[52,171153,171154,171156],{"class":54,"line":83},[52,171155,33065],{"class":308},[52,171157,171158],{"class":79},"(content)\n",[52,171160,171161,171163],{"class":54,"line":91},[52,171162,48004],{"class":1223},[52,171164,171165],{"class":79},".close()\n",[14,171167,171168],{},"可以指定读取字符数：",[42,171170,171172],{"className":33028,"code":171171,"language":33030,"meta":47,"style":47},"content = file.read(10)\n",[49,171173,171174],{"__ignoreMap":47},[52,171175,171176,171178,171180,171182,171185,171187],{"class":54,"line":55},[52,171177,171144],{"class":79},[52,171179,292],{"class":58},[52,171181,150803],{"class":1223},[52,171183,171184],{"class":79},".read(",[52,171186,3649],{"class":308},[52,171188,708],{"class":79},[3195,171190,171192],{"id":171191},"_842-readline","8.4.2 readline",[14,171194,171195],{},"一次读取一行：",[42,171197,171199],{"className":33028,"code":171198,"language":33030,"meta":47,"style":47},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[49,171200,171201,171227,171231,171242,171249,171253],{"__ignoreMap":47},[52,171202,171203,171205,171207,171209,171211,171213,171215,171217,171219,171221,171223,171225],{"class":54,"line":55},[52,171204,48004],{"class":1223},[52,171206,16212],{"class":58},[52,171208,149441],{"class":308},[52,171210,1216],{"class":79},[52,171212,149446],{"class":62},[52,171214,15083],{"class":79},[52,171216,149451],{"class":62},[52,171218,15083],{"class":79},[52,171220,149456],{"class":1223},[52,171222,292],{"class":58},[52,171224,149461],{"class":62},[52,171226,708],{"class":79},[52,171228,171229],{"class":54,"line":66},[52,171230,123],{"emptyLinePlaceholder":122},[52,171232,171233,171235,171237,171239],{"class":54,"line":83},[52,171234,149902],{"class":79},[52,171236,292],{"class":58},[52,171238,150803],{"class":1223},[52,171240,171241],{"class":79},".readline()\n",[52,171243,171244,171246],{"class":54,"line":91},[52,171245,33065],{"class":308},[52,171247,171248],{"class":79},"(line)\n",[52,171250,171251],{"class":54,"line":98},[52,171252,123],{"emptyLinePlaceholder":122},[52,171254,171255,171257],{"class":54,"line":107},[52,171256,48004],{"class":1223},[52,171258,171165],{"class":79},[3195,171260,171262],{"id":171261},"_843-readlines","8.4.3 readlines",[14,171264,171265],{},"读取所有行，返回列表：",[42,171267,171269],{"className":33028,"code":171268,"language":33030,"meta":47,"style":47},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[49,171270,171271,171297,171309,171316],{"__ignoreMap":47},[52,171272,171273,171275,171277,171279,171281,171283,171285,171287,171289,171291,171293,171295],{"class":54,"line":55},[52,171274,48004],{"class":1223},[52,171276,16212],{"class":58},[52,171278,149441],{"class":308},[52,171280,1216],{"class":79},[52,171282,149446],{"class":62},[52,171284,15083],{"class":79},[52,171286,149451],{"class":62},[52,171288,15083],{"class":79},[52,171290,149456],{"class":1223},[52,171292,292],{"class":58},[52,171294,149461],{"class":62},[52,171296,708],{"class":79},[52,171298,171299,171302,171304,171306],{"class":54,"line":66},[52,171300,171301],{"class":79},"lines ",[52,171303,292],{"class":58},[52,171305,150803],{"class":1223},[52,171307,171308],{"class":79},".readlines()\n",[52,171310,171311,171313],{"class":54,"line":83},[52,171312,33065],{"class":308},[52,171314,171315],{"class":79},"(lines)\n",[52,171317,171318,171320],{"class":54,"line":91},[52,171319,48004],{"class":1223},[52,171321,171165],{"class":79},[14,171323,171324,171325,171328],{},"每一行通常带有换行符，可以用 ",[49,171326,171327],{},"strip()"," 去掉：",[42,171330,171332],{"className":33028,"code":171331,"language":33030,"meta":47,"style":47},"for line in lines:\n    print(line.strip())\n",[49,171333,171334,171346],{"__ignoreMap":47},[52,171335,171336,171338,171341,171343],{"class":54,"line":55},[52,171337,6014],{"class":58},[52,171339,171340],{"class":79}," line ",[52,171342,28693],{"class":58},[52,171344,171345],{"class":79}," lines:\n",[52,171347,171348,171350],{"class":54,"line":66},[52,171349,33949],{"class":308},[52,171351,171352],{"class":79},"(line.strip())\n",[3195,171354,171356],{"id":171355},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,171358,171359],{},"推荐读取大文件时使用：",[42,171361,171363],{"className":33028,"code":171362,"language":33030,"meta":47,"style":47},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[49,171364,171365,171391,171395,171407,171413,171417],{"__ignoreMap":47},[52,171366,171367,171369,171371,171373,171375,171377,171379,171381,171383,171385,171387,171389],{"class":54,"line":55},[52,171368,48004],{"class":1223},[52,171370,16212],{"class":58},[52,171372,149441],{"class":308},[52,171374,1216],{"class":79},[52,171376,149446],{"class":62},[52,171378,15083],{"class":79},[52,171380,149451],{"class":62},[52,171382,15083],{"class":79},[52,171384,149456],{"class":1223},[52,171386,292],{"class":58},[52,171388,149461],{"class":62},[52,171390,708],{"class":79},[52,171392,171393],{"class":54,"line":66},[52,171394,123],{"emptyLinePlaceholder":122},[52,171396,171397,171399,171401,171403,171405],{"class":54,"line":83},[52,171398,6014],{"class":58},[52,171400,171340],{"class":79},[52,171402,28693],{"class":58},[52,171404,150803],{"class":1223},[52,171406,6718],{"class":79},[52,171408,171409,171411],{"class":54,"line":91},[52,171410,33949],{"class":308},[52,171412,171352],{"class":79},[52,171414,171415],{"class":54,"line":98},[52,171416,123],{"emptyLinePlaceholder":122},[52,171418,171419,171421],{"class":54,"line":107},[52,171420,48004],{"class":1223},[52,171422,171165],{"class":79},[18,171424,171426],{"id":171425},"_85-with语句","8.5 with语句",[14,171428,171429,171431],{},[49,171430,110483],{}," 会自动关闭文件，推荐使用。",[42,171433,171435],{"className":33028,"code":171434,"language":33030,"meta":47,"style":47},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[49,171436,171437,171467,171477],{"__ignoreMap":47},[52,171438,171439,171441,171443,171445,171447,171449,171451,171453,171455,171457,171459,171461,171463,171465],{"class":54,"line":55},[52,171440,110483],{"class":58},[52,171442,149441],{"class":308},[52,171444,1216],{"class":79},[52,171446,149446],{"class":62},[52,171448,15083],{"class":79},[52,171450,149451],{"class":62},[52,171452,15083],{"class":79},[52,171454,149456],{"class":1223},[52,171456,292],{"class":58},[52,171458,149461],{"class":62},[52,171460,16362],{"class":79},[52,171462,34033],{"class":58},[52,171464,150803],{"class":1223},[52,171466,6718],{"class":79},[52,171468,171469,171471,171473,171475],{"class":54,"line":66},[52,171470,149473],{"class":79},[52,171472,292],{"class":58},[52,171474,150803],{"class":1223},[52,171476,171151],{"class":79},[52,171478,171479,171481],{"class":54,"line":83},[52,171480,33949],{"class":308},[52,171482,171158],{"class":79},[14,171484,171485],{},"等价于打开文件、读取、最后关闭，但更安全。",[18,171487,171489],{"id":171488},"_86-写入文件","8.6 写入文件",[14,171491,171492,171494],{},[49,171493,3985],{}," 模式会清空原文件。",[42,171496,171498],{"className":33028,"code":171497,"language":33030,"meta":47,"style":47},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[49,171499,171500,171530,171547],{"__ignoreMap":47},[52,171501,171502,171504,171506,171508,171510,171512,171514,171516,171518,171520,171522,171524,171526,171528],{"class":54,"line":55},[52,171503,110483],{"class":58},[52,171505,149441],{"class":308},[52,171507,1216],{"class":79},[52,171509,149446],{"class":62},[52,171511,15083],{"class":79},[52,171513,154626],{"class":62},[52,171515,15083],{"class":79},[52,171517,149456],{"class":1223},[52,171519,292],{"class":58},[52,171521,149461],{"class":62},[52,171523,16362],{"class":79},[52,171525,34033],{"class":58},[52,171527,150803],{"class":1223},[52,171529,6718],{"class":79},[52,171531,171532,171535,171538,171541,171543,171545],{"class":54,"line":66},[52,171533,171534],{"class":1223},"    file",[52,171536,171537],{"class":79},".write(",[52,171539,171540],{"class":62},"\"hello",[52,171542,159175],{"class":308},[52,171544,2844],{"class":62},[52,171546,708],{"class":79},[52,171548,171549,171551,171553,171556,171558,171560],{"class":54,"line":83},[52,171550,171534],{"class":1223},[52,171552,171537],{"class":79},[52,171554,171555],{"class":62},"\"python",[52,171557,159175],{"class":308},[52,171559,2844],{"class":62},[52,171561,708],{"class":79},[14,171563,171564],{},"写入多行：",[42,171566,171568],{"className":33028,"code":171567,"language":33030,"meta":47,"style":47},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[49,171569,171570,171605,171609,171640],{"__ignoreMap":47},[52,171571,171572,171574,171576,171578,171581,171583,171585,171587,171590,171592,171594,171596,171599,171601,171603],{"class":54,"line":55},[52,171573,171301],{"class":79},[52,171575,292],{"class":58},[52,171577,54876],{"class":79},[52,171579,171580],{"class":62},"\"小明,18",[52,171582,159175],{"class":308},[52,171584,2844],{"class":62},[52,171586,15083],{"class":79},[52,171588,171589],{"class":62},"\"小红,17",[52,171591,159175],{"class":308},[52,171593,2844],{"class":62},[52,171595,15083],{"class":79},[52,171597,171598],{"class":62},"\"小刚,19",[52,171600,159175],{"class":308},[52,171602,2844],{"class":62},[52,171604,35896],{"class":79},[52,171606,171607],{"class":54,"line":66},[52,171608,123],{"emptyLinePlaceholder":122},[52,171610,171611,171613,171615,171617,171620,171622,171624,171626,171628,171630,171632,171634,171636,171638],{"class":54,"line":83},[52,171612,110483],{"class":58},[52,171614,149441],{"class":308},[52,171616,1216],{"class":79},[52,171618,171619],{"class":62},"\"students.txt\"",[52,171621,15083],{"class":79},[52,171623,154626],{"class":62},[52,171625,15083],{"class":79},[52,171627,149456],{"class":1223},[52,171629,292],{"class":58},[52,171631,149461],{"class":62},[52,171633,16362],{"class":79},[52,171635,34033],{"class":58},[52,171637,150803],{"class":1223},[52,171639,6718],{"class":79},[52,171641,171642,171644],{"class":54,"line":91},[52,171643,171534],{"class":1223},[52,171645,171646],{"class":79},".writelines(lines)\n",[18,171648,171650],{"id":171649},"_87-追加文件","8.7 追加文件",[14,171652,171653,171655],{},[49,171654,3451],{}," 模式不会清空原内容，而是在末尾追加。",[42,171657,171659],{"className":33028,"code":171658,"language":33030,"meta":47,"style":47},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[49,171660,171661,171692],{"__ignoreMap":47},[52,171662,171663,171665,171667,171669,171672,171674,171676,171678,171680,171682,171684,171686,171688,171690],{"class":54,"line":55},[52,171664,110483],{"class":58},[52,171666,149441],{"class":308},[52,171668,1216],{"class":79},[52,171670,171671],{"class":62},"\"log.txt\"",[52,171673,15083],{"class":79},[52,171675,167975],{"class":62},[52,171677,15083],{"class":79},[52,171679,149456],{"class":1223},[52,171681,292],{"class":58},[52,171683,149461],{"class":62},[52,171685,16362],{"class":79},[52,171687,34033],{"class":58},[52,171689,150803],{"class":1223},[52,171691,6718],{"class":79},[52,171693,171694,171696,171698,171701,171703,171705],{"class":54,"line":66},[52,171695,171534],{"class":1223},[52,171697,171537],{"class":79},[52,171699,171700],{"class":62},"\"程序启动",[52,171702,159175],{"class":308},[52,171704,2844],{"class":62},[52,171706,708],{"class":79},[14,171708,171709],{},"日志类文件常用追加模式。",[18,171711,171713],{"id":171712},"_88-文件编码","8.8 文件编码",[14,171715,171716],{},"编码决定文字如何保存为字节。",[14,171718,171719],{},"常见编码：",[1696,171721,171722,171725],{},[32,171723,171724],{},"UTF-8：推荐。",[32,171726,171727],{},"GBK：部分 Windows 中文文件常见。",[14,171729,171730],{},"读取文件乱码时，可以尝试：",[42,171732,171734],{"className":33028,"code":171733,"language":33030,"meta":47,"style":47},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[49,171735,171736,171767],{"__ignoreMap":47},[52,171737,171738,171740,171742,171744,171746,171748,171750,171752,171754,171756,171759,171761,171763,171765],{"class":54,"line":55},[52,171739,110483],{"class":58},[52,171741,149441],{"class":308},[52,171743,1216],{"class":79},[52,171745,149446],{"class":62},[52,171747,15083],{"class":79},[52,171749,149451],{"class":62},[52,171751,15083],{"class":79},[52,171753,149456],{"class":1223},[52,171755,292],{"class":58},[52,171757,171758],{"class":62},"\"gbk\"",[52,171760,16362],{"class":79},[52,171762,34033],{"class":58},[52,171764,150803],{"class":1223},[52,171766,6718],{"class":79},[52,171768,171769,171771,171773,171775],{"class":54,"line":66},[52,171770,149473],{"class":79},[52,171772,292],{"class":58},[52,171774,150803],{"class":1223},[52,171776,171151],{"class":79},[14,171778,171779],{},"写文件时建议统一 UTF-8：",[42,171781,171783],{"className":33028,"code":171782,"language":33030,"meta":47,"style":47},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[49,171784,171785,171815],{"__ignoreMap":47},[52,171786,171787,171789,171791,171793,171795,171797,171799,171801,171803,171805,171807,171809,171811,171813],{"class":54,"line":55},[52,171788,110483],{"class":58},[52,171790,149441],{"class":308},[52,171792,1216],{"class":79},[52,171794,149446],{"class":62},[52,171796,15083],{"class":79},[52,171798,154626],{"class":62},[52,171800,15083],{"class":79},[52,171802,149456],{"class":1223},[52,171804,292],{"class":58},[52,171806,149461],{"class":62},[52,171808,16362],{"class":79},[52,171810,34033],{"class":58},[52,171812,150803],{"class":1223},[52,171814,6718],{"class":79},[52,171816,171817,171819,171821,171824],{"class":54,"line":66},[52,171818,171534],{"class":1223},[52,171820,171537],{"class":79},[52,171822,171823],{"class":62},"\"中文内容\"",[52,171825,708],{"class":79},[18,171827,171829],{"id":171828},"_89-pathlib","8.9 pathlib",[14,171831,171832,171835],{},[49,171833,171834],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[42,171837,171839],{"className":33028,"code":171838,"language":33030,"meta":47,"style":47},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[49,171840,171841,171851,171855,171873],{"__ignoreMap":47},[52,171842,171843,171845,171847,171849],{"class":54,"line":55},[52,171844,33387],{"class":58},[52,171846,110961],{"class":79},[52,171848,33042],{"class":58},[52,171850,110966],{"class":79},[52,171852,171853],{"class":54,"line":66},[52,171854,123],{"emptyLinePlaceholder":122},[52,171856,171857,171859,171861,171863,171866,171868,171870],{"class":54,"line":83},[52,171858,170961],{"class":79},[52,171860,292],{"class":58},[52,171862,111195],{"class":79},[52,171864,171865],{"class":62},"\"data\"",[52,171867,16362],{"class":79},[52,171869,2340],{"class":58},[52,171871,171872],{"class":62}," \"students.txt\"\n",[52,171874,171875,171877],{"class":54,"line":91},[52,171876,33065],{"class":308},[52,171878,171879],{"class":79},"(path)\n",[14,171881,171882],{},"创建目录：",[42,171884,171886],{"className":33028,"code":171885,"language":33030,"meta":47,"style":47},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[49,171887,171888,171898,171902,171915],{"__ignoreMap":47},[52,171889,171890,171892,171894,171896],{"class":54,"line":55},[52,171891,33387],{"class":58},[52,171893,110961],{"class":79},[52,171895,33042],{"class":58},[52,171897,110966],{"class":79},[52,171899,171900],{"class":54,"line":66},[52,171901,123],{"emptyLinePlaceholder":122},[52,171903,171904,171907,171909,171911,171913],{"class":54,"line":83},[52,171905,171906],{"class":79},"data_dir ",[52,171908,292],{"class":58},[52,171910,111195],{"class":79},[52,171912,171865],{"class":62},[52,171914,708],{"class":79},[52,171916,171917,171920,171923,171925,171927],{"class":54,"line":91},[52,171918,171919],{"class":79},"data_dir.mkdir(",[52,171921,171922],{"class":1223},"exist_ok",[52,171924,292],{"class":58},[52,171926,34126],{"class":308},[52,171928,708],{"class":79},[14,171930,171931],{},"判断文件是否存在：",[42,171933,171935],{"className":33028,"code":171934,"language":33030,"meta":47,"style":47},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[49,171936,171937,171950,171954,171961],{"__ignoreMap":47},[52,171938,171939,171941,171943,171945,171948],{"class":54,"line":55},[52,171940,170961],{"class":79},[52,171942,292],{"class":58},[52,171944,111195],{"class":79},[52,171946,171947],{"class":62},"\"data\u002Fstudents.txt\"",[52,171949,708],{"class":79},[52,171951,171952],{"class":54,"line":66},[52,171953,123],{"emptyLinePlaceholder":122},[52,171955,171956,171958],{"class":54,"line":83},[52,171957,4578],{"class":58},[52,171959,171960],{"class":79}," path.exists():\n",[52,171962,171963,171965,171967,171970],{"class":54,"line":91},[52,171964,33949],{"class":308},[52,171966,1216],{"class":79},[52,171968,171969],{"class":62},"\"文件存在\"",[52,171971,708],{"class":79},[14,171973,171974],{},"读写文本：",[42,171976,171978],{"className":33028,"code":171977,"language":33030,"meta":47,"style":47},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[49,171979,171980,171992,171996,172013,172030],{"__ignoreMap":47},[52,171981,171982,171984,171986,171988,171990],{"class":54,"line":55},[52,171983,170961],{"class":79},[52,171985,292],{"class":58},[52,171987,111195],{"class":79},[52,171989,149446],{"class":62},[52,171991,708],{"class":79},[52,171993,171994],{"class":54,"line":66},[52,171995,123],{"emptyLinePlaceholder":122},[52,171997,171998,172001,172003,172005,172007,172009,172011],{"class":54,"line":83},[52,171999,172000],{"class":79},"path.write_text(",[52,172002,148526],{"class":62},[52,172004,15083],{"class":79},[52,172006,149456],{"class":1223},[52,172008,292],{"class":58},[52,172010,149461],{"class":62},[52,172012,708],{"class":79},[52,172014,172015,172017,172019,172022,172024,172026,172028],{"class":54,"line":91},[52,172016,171144],{"class":79},[52,172018,292],{"class":58},[52,172020,172021],{"class":79}," path.read_text(",[52,172023,149456],{"class":1223},[52,172025,292],{"class":58},[52,172027,149461],{"class":62},[52,172029,708],{"class":79},[52,172031,172032,172034],{"class":54,"line":98},[52,172033,33065],{"class":308},[52,172035,171158],{"class":79},[18,172037,172039],{"id":172038},"_810-json文件","8.10 JSON文件",[14,172041,172042],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[42,172044,172046],{"className":33028,"code":172045,"language":33030,"meta":47,"style":47},"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",[49,172047,172048,172054,172058,172066,172076,172086,172094,172098,172102,172127],{"__ignoreMap":47},[52,172049,172050,172052],{"class":54,"line":55},[52,172051,33042],{"class":58},[52,172053,149741],{"class":79},[52,172055,172056],{"class":54,"line":66},[52,172057,123],{"emptyLinePlaceholder":122},[52,172059,172060,172062,172064],{"class":54,"line":83},[52,172061,152131],{"class":79},[52,172063,292],{"class":58},[52,172065,18220],{"class":79},[52,172067,172068,172070,172072,172074],{"class":54,"line":91},[52,172069,149670],{"class":62},[52,172071,54087],{"class":79},[52,172073,152538],{"class":62},[52,172075,34116],{"class":79},[52,172077,172078,172080,172082,172084],{"class":54,"line":98},[52,172079,167187],{"class":62},[52,172081,54087],{"class":79},[52,172083,309],{"class":308},[52,172085,34116],{"class":79},[52,172087,172088,172090,172092],{"class":54,"line":107},[52,172089,167198],{"class":62},[52,172091,54087],{"class":79},[52,172093,167203],{"class":308},[52,172095,172096],{"class":54,"line":113},[52,172097,452],{"class":79},[52,172099,172100],{"class":54,"line":119},[52,172101,123],{"emptyLinePlaceholder":122},[52,172103,172104,172106,172108,172111,172113,172115,172117,172119,172121,172123,172125],{"class":54,"line":126},[52,172105,159094],{"class":79},[52,172107,292],{"class":58},[52,172109,172110],{"class":79}," json.dumps(student, ",[52,172112,149787],{"class":1223},[52,172114,292],{"class":58},[52,172116,36637],{"class":308},[52,172118,15083],{"class":79},[52,172120,154662],{"class":1223},[52,172122,292],{"class":58},[52,172124,564],{"class":308},[52,172126,708],{"class":79},[52,172128,172129,172131],{"class":54,"line":132},[52,172130,33065],{"class":308},[52,172132,166721],{"class":79},[14,172134,172135],{},"写入 JSON 文件：",[42,172137,172139],{"className":33028,"code":172138,"language":33030,"meta":47,"style":47},"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",[49,172140,172141,172147,172151,172159,172187,172215,172219,172223,172253],{"__ignoreMap":47},[52,172142,172143,172145],{"class":54,"line":55},[52,172144,33042],{"class":58},[52,172146,149741],{"class":79},[52,172148,172149],{"class":54,"line":66},[52,172150,123],{"emptyLinePlaceholder":122},[52,172152,172153,172155,172157],{"class":54,"line":83},[52,172154,162366],{"class":79},[52,172156,292],{"class":58},[52,172158,58097],{"class":79},[52,172160,172161,172163,172165,172167,172169,172171,172173,172175,172177,172179,172181,172183,172185],{"class":54,"line":91},[52,172162,151035],{"class":79},[52,172164,65329],{"class":62},[52,172166,54087],{"class":79},[52,172168,152538],{"class":62},[52,172170,15083],{"class":79},[52,172172,71774],{"class":62},[52,172174,54087],{"class":79},[52,172176,309],{"class":308},[52,172178,15083],{"class":79},[52,172180,154122],{"class":62},[52,172182,54087],{"class":79},[52,172184,4174],{"class":308},[52,172186,594],{"class":79},[52,172188,172189,172191,172193,172195,172197,172199,172201,172203,172205,172207,172209,172211,172213],{"class":54,"line":98},[52,172190,151035],{"class":79},[52,172192,65329],{"class":62},[52,172194,54087],{"class":79},[52,172196,153586],{"class":62},[52,172198,15083],{"class":79},[52,172200,71774],{"class":62},[52,172202,54087],{"class":79},[52,172204,3822],{"class":308},[52,172206,15083],{"class":79},[52,172208,154122],{"class":62},[52,172210,54087],{"class":79},[52,172212,4001],{"class":308},[52,172214,594],{"class":79},[52,172216,172217],{"class":54,"line":107},[52,172218,35896],{"class":79},[52,172220,172221],{"class":54,"line":113},[52,172222,123],{"emptyLinePlaceholder":122},[52,172224,172225,172227,172229,172231,172233,172235,172237,172239,172241,172243,172245,172247,172249,172251],{"class":54,"line":119},[52,172226,110483],{"class":58},[52,172228,149441],{"class":308},[52,172230,1216],{"class":79},[52,172232,154481],{"class":62},[52,172234,15083],{"class":79},[52,172236,154626],{"class":62},[52,172238,15083],{"class":79},[52,172240,149456],{"class":1223},[52,172242,292],{"class":58},[52,172244,149461],{"class":62},[52,172246,16362],{"class":79},[52,172248,34033],{"class":58},[52,172250,150803],{"class":1223},[52,172252,6718],{"class":79},[52,172254,172255,172258,172260,172262,172264,172266,172268,172270,172272,172274,172276],{"class":54,"line":126},[52,172256,172257],{"class":79},"    json.dump(students, ",[52,172259,48004],{"class":1223},[52,172261,15083],{"class":79},[52,172263,149787],{"class":1223},[52,172265,292],{"class":58},[52,172267,36637],{"class":308},[52,172269,15083],{"class":79},[52,172271,154662],{"class":1223},[52,172273,292],{"class":58},[52,172275,564],{"class":308},[52,172277,708],{"class":79},[14,172279,172280],{},"读取 JSON 文件：",[42,172282,172284],{"className":33028,"code":172283,"language":33030,"meta":47,"style":47},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[49,172285,172286,172292,172296,172326,172338,172342],{"__ignoreMap":47},[52,172287,172288,172290],{"class":54,"line":55},[52,172289,33042],{"class":58},[52,172291,149741],{"class":79},[52,172293,172294],{"class":54,"line":66},[52,172295,123],{"emptyLinePlaceholder":122},[52,172297,172298,172300,172302,172304,172306,172308,172310,172312,172314,172316,172318,172320,172322,172324],{"class":54,"line":83},[52,172299,110483],{"class":58},[52,172301,149441],{"class":308},[52,172303,1216],{"class":79},[52,172305,154481],{"class":62},[52,172307,15083],{"class":79},[52,172309,149451],{"class":62},[52,172311,15083],{"class":79},[52,172313,149456],{"class":1223},[52,172315,292],{"class":58},[52,172317,149461],{"class":62},[52,172319,16362],{"class":79},[52,172321,34033],{"class":58},[52,172323,150803],{"class":1223},[52,172325,6718],{"class":79},[52,172327,172328,172330,172332,172334,172336],{"class":54,"line":91},[52,172329,155687],{"class":79},[52,172331,292],{"class":58},[52,172333,150814],{"class":79},[52,172335,48004],{"class":1223},[52,172337,708],{"class":79},[52,172339,172340],{"class":54,"line":98},[52,172341,123],{"emptyLinePlaceholder":122},[52,172343,172344,172346],{"class":54,"line":107},[52,172345,33065],{"class":308},[52,172347,167645],{"class":79},[18,172349,172351],{"id":172350},"_811-csv文件","8.11 CSV文件",[14,172353,172354],{},"CSV 是逗号分隔值，常用于表格数据。",[14,172356,172357],{},"写入 CSV：",[42,172359,172361],{"className":33028,"code":172360,"language":33030,"meta":47,"style":47},"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",[49,172362,172363,172370,172374,172382,172400,172416,172432,172436,172440,172480,172494],{"__ignoreMap":47},[52,172364,172365,172367],{"class":54,"line":55},[52,172366,33042],{"class":58},[52,172368,172369],{"class":79}," csv\n",[52,172371,172372],{"class":54,"line":66},[52,172373,123],{"emptyLinePlaceholder":122},[52,172375,172376,172378,172380],{"class":54,"line":83},[52,172377,162366],{"class":79},[52,172379,292],{"class":58},[52,172381,58097],{"class":79},[52,172383,172384,172387,172389,172391,172393,172395,172398],{"class":54,"line":91},[52,172385,172386],{"class":79},"    [",[52,172388,75749],{"class":62},[52,172390,15083],{"class":79},[52,172392,75782],{"class":62},[52,172394,15083],{"class":79},[52,172396,172397],{"class":62},"\"成绩\"",[52,172399,90486],{"class":79},[52,172401,172402,172404,172406,172408,172410,172412,172414],{"class":54,"line":98},[52,172403,172386],{"class":79},[52,172405,152538],{"class":62},[52,172407,15083],{"class":79},[52,172409,309],{"class":308},[52,172411,15083],{"class":79},[52,172413,4174],{"class":308},[52,172415,90486],{"class":79},[52,172417,172418,172420,172422,172424,172426,172428,172430],{"class":54,"line":107},[52,172419,172386],{"class":79},[52,172421,153586],{"class":62},[52,172423,15083],{"class":79},[52,172425,3822],{"class":308},[52,172427,15083],{"class":79},[52,172429,4001],{"class":308},[52,172431,90486],{"class":79},[52,172433,172434],{"class":54,"line":113},[52,172435,35896],{"class":79},[52,172437,172438],{"class":54,"line":119},[52,172439,123],{"emptyLinePlaceholder":122},[52,172441,172442,172444,172446,172448,172451,172453,172455,172457,172459,172461,172463,172465,172468,172470,172472,172474,172476,172478],{"class":54,"line":126},[52,172443,110483],{"class":58},[52,172445,149441],{"class":308},[52,172447,1216],{"class":79},[52,172449,172450],{"class":62},"\"students.csv\"",[52,172452,15083],{"class":79},[52,172454,154626],{"class":62},[52,172456,15083],{"class":79},[52,172458,149456],{"class":1223},[52,172460,292],{"class":58},[52,172462,149461],{"class":62},[52,172464,15083],{"class":79},[52,172466,172467],{"class":1223},"newline",[52,172469,292],{"class":58},[52,172471,10607],{"class":62},[52,172473,16362],{"class":79},[52,172475,34033],{"class":58},[52,172477,150803],{"class":1223},[52,172479,6718],{"class":79},[52,172481,172482,172485,172487,172490,172492],{"class":54,"line":132},[52,172483,172484],{"class":79},"    writer ",[52,172486,292],{"class":58},[52,172488,172489],{"class":79}," csv.writer(",[52,172491,48004],{"class":1223},[52,172493,708],{"class":79},[52,172495,172496],{"class":54,"line":138},[52,172497,172498],{"class":79},"    writer.writerows(students)\n",[14,172500,172501],{},"读取 CSV：",[42,172503,172505],{"className":33028,"code":172504,"language":33030,"meta":47,"style":47},"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",[49,172506,172507,172513,172517,172547,172561,172573],{"__ignoreMap":47},[52,172508,172509,172511],{"class":54,"line":55},[52,172510,33042],{"class":58},[52,172512,172369],{"class":79},[52,172514,172515],{"class":54,"line":66},[52,172516,123],{"emptyLinePlaceholder":122},[52,172518,172519,172521,172523,172525,172527,172529,172531,172533,172535,172537,172539,172541,172543,172545],{"class":54,"line":83},[52,172520,110483],{"class":58},[52,172522,149441],{"class":308},[52,172524,1216],{"class":79},[52,172526,172450],{"class":62},[52,172528,15083],{"class":79},[52,172530,149451],{"class":62},[52,172532,15083],{"class":79},[52,172534,149456],{"class":1223},[52,172536,292],{"class":58},[52,172538,149461],{"class":62},[52,172540,16362],{"class":79},[52,172542,34033],{"class":58},[52,172544,150803],{"class":1223},[52,172546,6718],{"class":79},[52,172548,172549,172552,172554,172557,172559],{"class":54,"line":91},[52,172550,172551],{"class":79},"    reader ",[52,172553,292],{"class":58},[52,172555,172556],{"class":79}," csv.reader(",[52,172558,48004],{"class":1223},[52,172560,708],{"class":79},[52,172562,172563,172565,172568,172570],{"class":54,"line":98},[52,172564,679],{"class":58},[52,172566,172567],{"class":79}," row ",[52,172569,28693],{"class":58},[52,172571,172572],{"class":79}," reader:\n",[52,172574,172575,172577],{"class":54,"line":107},[52,172576,35101],{"class":308},[52,172578,172579],{"class":79},"(row)\n",[14,172581,172582],{},"使用字典写入：",[42,172584,172586],{"className":33028,"code":172585,"language":33030,"meta":47,"style":47},"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",[49,172587,172588,172594,172598,172606,172634,172662,172666,172670,172708,172729,172750,172755],{"__ignoreMap":47},[52,172589,172590,172592],{"class":54,"line":55},[52,172591,33042],{"class":58},[52,172593,172369],{"class":79},[52,172595,172596],{"class":54,"line":66},[52,172597,123],{"emptyLinePlaceholder":122},[52,172599,172600,172602,172604],{"class":54,"line":83},[52,172601,162366],{"class":79},[52,172603,292],{"class":58},[52,172605,58097],{"class":79},[52,172607,172608,172610,172612,172614,172616,172618,172620,172622,172624,172626,172628,172630,172632],{"class":54,"line":91},[52,172609,151035],{"class":79},[52,172611,65329],{"class":62},[52,172613,54087],{"class":79},[52,172615,152538],{"class":62},[52,172617,15083],{"class":79},[52,172619,71774],{"class":62},[52,172621,54087],{"class":79},[52,172623,309],{"class":308},[52,172625,15083],{"class":79},[52,172627,154122],{"class":62},[52,172629,54087],{"class":79},[52,172631,4174],{"class":308},[52,172633,594],{"class":79},[52,172635,172636,172638,172640,172642,172644,172646,172648,172650,172652,172654,172656,172658,172660],{"class":54,"line":98},[52,172637,151035],{"class":79},[52,172639,65329],{"class":62},[52,172641,54087],{"class":79},[52,172643,153586],{"class":62},[52,172645,15083],{"class":79},[52,172647,71774],{"class":62},[52,172649,54087],{"class":79},[52,172651,3822],{"class":308},[52,172653,15083],{"class":79},[52,172655,154122],{"class":62},[52,172657,54087],{"class":79},[52,172659,4001],{"class":308},[52,172661,594],{"class":79},[52,172663,172664],{"class":54,"line":107},[52,172665,35896],{"class":79},[52,172667,172668],{"class":54,"line":113},[52,172669,123],{"emptyLinePlaceholder":122},[52,172671,172672,172674,172676,172678,172680,172682,172684,172686,172688,172690,172692,172694,172696,172698,172700,172702,172704,172706],{"class":54,"line":119},[52,172673,110483],{"class":58},[52,172675,149441],{"class":308},[52,172677,1216],{"class":79},[52,172679,172450],{"class":62},[52,172681,15083],{"class":79},[52,172683,154626],{"class":62},[52,172685,15083],{"class":79},[52,172687,149456],{"class":1223},[52,172689,292],{"class":58},[52,172691,149461],{"class":62},[52,172693,15083],{"class":79},[52,172695,172467],{"class":1223},[52,172697,292],{"class":58},[52,172699,10607],{"class":62},[52,172701,16362],{"class":79},[52,172703,34033],{"class":58},[52,172705,150803],{"class":1223},[52,172707,6718],{"class":79},[52,172709,172710,172713,172715,172717,172719,172721,172723,172725,172727],{"class":54,"line":126},[52,172711,172712],{"class":79},"    fieldnames ",[52,172714,292],{"class":58},[52,172716,54876],{"class":79},[52,172718,65329],{"class":62},[52,172720,15083],{"class":79},[52,172722,71774],{"class":62},[52,172724,15083],{"class":79},[52,172726,154122],{"class":62},[52,172728,35896],{"class":79},[52,172730,172731,172733,172735,172738,172740,172742,172745,172747],{"class":54,"line":132},[52,172732,172484],{"class":79},[52,172734,292],{"class":58},[52,172736,172737],{"class":79}," csv.DictWriter(",[52,172739,48004],{"class":1223},[52,172741,15083],{"class":79},[52,172743,172744],{"class":1223},"fieldnames",[52,172746,292],{"class":58},[52,172748,172749],{"class":79},"fieldnames)\n",[52,172751,172752],{"class":54,"line":138},[52,172753,172754],{"class":79},"    writer.writeheader()\n",[52,172756,172757],{"class":54,"line":144},[52,172758,172498],{"class":79},[18,172760,172762],{"id":172761},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,172764,125942],{},[1696,172766,172767,172770,172773],{},[32,172768,172769],{},"读取文本文件。",[32,172771,172772],{},"统计每个单词出现次数。",[32,172774,172775],{},"输出出现次数最多的前 10 个单词。",[14,172777,2496],{},[42,172779,172781],{"className":33028,"code":172780,"language":33030,"meta":47,"style":47},"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",[49,172782,172783,172793,172797,172810,172826,172830,172840,172849,172853,172865,172885,172894,172898,172916,172920,172950,172954,172970],{"__ignoreMap":47},[52,172784,172785,172787,172789,172791],{"class":54,"line":55},[52,172786,33387],{"class":58},[52,172788,110961],{"class":79},[52,172790,33042],{"class":58},[52,172792,110966],{"class":79},[52,172794,172795],{"class":54,"line":66},[52,172796,123],{"emptyLinePlaceholder":122},[52,172798,172799,172801,172803,172805,172808],{"class":54,"line":83},[52,172800,170961],{"class":79},[52,172802,292],{"class":58},[52,172804,111195],{"class":79},[52,172806,172807],{"class":62},"\"article.txt\"",[52,172809,708],{"class":79},[52,172811,172812,172814,172816,172818,172820,172822,172824],{"class":54,"line":91},[52,172813,171144],{"class":79},[52,172815,292],{"class":58},[52,172817,172021],{"class":79},[52,172819,149456],{"class":1223},[52,172821,292],{"class":58},[52,172823,149461],{"class":62},[52,172825,708],{"class":79},[52,172827,172828],{"class":54,"line":98},[52,172829,123],{"emptyLinePlaceholder":122},[52,172831,172832,172835,172837],{"class":54,"line":107},[52,172833,172834],{"class":79},"words ",[52,172836,292],{"class":58},[52,172838,172839],{"class":79}," content.lower().split()\n",[52,172841,172842,172845,172847],{"class":54,"line":113},[52,172843,172844],{"class":79},"counter ",[52,172846,292],{"class":58},[52,172848,90518],{"class":79},[52,172850,172851],{"class":54,"line":119},[52,172852,123],{"emptyLinePlaceholder":122},[52,172854,172855,172857,172860,172862],{"class":54,"line":126},[52,172856,6014],{"class":58},[52,172858,172859],{"class":79}," word ",[52,172861,28693],{"class":58},[52,172863,172864],{"class":79}," words:\n",[52,172866,172867,172870,172872,172875,172878,172880,172883],{"class":54,"line":132},[52,172868,172869],{"class":79},"    word ",[52,172871,292],{"class":58},[52,172873,172874],{"class":79}," word.strip(",[52,172876,172877],{"class":62},"\".,!?;:",[52,172879,159145],{"class":308},[52,172881,172882],{"class":62},"'()[]\"",[52,172884,708],{"class":79},[52,172886,172887,172889,172891],{"class":54,"line":138},[52,172888,6088],{"class":58},[52,172890,41580],{"class":58},[52,172892,172893],{"class":79}," word:\n",[52,172895,172896],{"class":54,"line":144},[52,172897,151162],{"class":58},[52,172899,172900,172903,172905,172908,172910,172912,172914],{"class":54,"line":153},[52,172901,172902],{"class":79},"    counter[word] ",[52,172904,292],{"class":58},[52,172906,172907],{"class":79}," counter.get(word, ",[52,172909,692],{"class":308},[52,172911,16362],{"class":79},[52,172913,2004],{"class":58},[52,172915,58349],{"class":308},[52,172917,172918],{"class":54,"line":159},[52,172919,123],{"emptyLinePlaceholder":122},[52,172921,172922,172925,172927,172929,172932,172934,172936,172938,172940,172942,172944,172946,172948],{"class":54,"line":167},[52,172923,172924],{"class":79},"items ",[52,172926,292],{"class":58},[52,172928,166254],{"class":308},[52,172930,172931],{"class":79},"(counter.items(), ",[52,172933,156596],{"class":1223},[52,172935,156599],{"class":58},[52,172937,156602],{"class":79},[52,172939,629],{"class":308},[52,172941,114852],{"class":79},[52,172943,166178],{"class":1223},[52,172945,292],{"class":58},[52,172947,34126],{"class":308},[52,172949,708],{"class":79},[52,172951,172952],{"class":54,"line":173},[52,172953,123],{"emptyLinePlaceholder":122},[52,172955,172956,172958,172961,172963,172966,172968],{"class":54,"line":181},[52,172957,6014],{"class":58},[52,172959,172960],{"class":79}," word, count ",[52,172962,28693],{"class":58},[52,172964,172965],{"class":79}," items[:",[52,172967,3649],{"class":308},[52,172969,168405],{"class":79},[52,172971,172972,172974],{"class":54,"line":186},[52,172973,33949],{"class":308},[52,172975,172976],{"class":79},"(word, count)\n",[18,172978,172980],{"id":172979},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[42,172982,172984],{"className":33028,"code":172983,"language":33030,"meta":47,"style":47},"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",[49,172985,172986,172992,173002,173006,173018,173022,173026,173034,173044,173050,173054,173084,173094,173098,173102,173110,173140,173164,173168,173172,173180,173209,173214],{"__ignoreMap":47},[52,172987,172988,172990],{"class":54,"line":55},[52,172989,33042],{"class":58},[52,172991,149741],{"class":79},[52,172993,172994,172996,172998,173000],{"class":54,"line":66},[52,172995,33387],{"class":58},[52,172997,110961],{"class":79},[52,172999,33042],{"class":58},[52,173001,110966],{"class":79},[52,173003,173004],{"class":54,"line":83},[52,173005,123],{"emptyLinePlaceholder":122},[52,173007,173008,173010,173012,173014,173016],{"class":54,"line":91},[52,173009,154474],{"class":308},[52,173011,16212],{"class":58},[52,173013,111195],{"class":79},[52,173015,154481],{"class":62},[52,173017,708],{"class":79},[52,173019,173020],{"class":54,"line":98},[52,173021,123],{"emptyLinePlaceholder":122},[52,173023,173024],{"class":54,"line":107},[52,173025,123],{"emptyLinePlaceholder":122},[52,173027,173028,173030,173032],{"class":54,"line":113},[52,173029,34597],{"class":58},[52,173031,154498],{"class":75},[52,173033,34603],{"class":79},[52,173035,173036,173038,173040,173042],{"class":54,"line":119},[52,173037,6088],{"class":58},[52,173039,41580],{"class":58},[52,173041,154509],{"class":308},[52,173043,154512],{"class":79},[52,173045,173046,173048],{"class":54,"line":126},[52,173047,17400],{"class":58},[52,173049,54488],{"class":79},[52,173051,173052],{"class":54,"line":132},[52,173053,123],{"emptyLinePlaceholder":122},[52,173055,173056,173058,173060,173062,173064,173066,173068,173070,173072,173074,173076,173078,173080,173082],{"class":54,"line":138},[52,173057,36828],{"class":58},[52,173059,149441],{"class":308},[52,173061,1216],{"class":79},[52,173063,154474],{"class":308},[52,173065,15083],{"class":79},[52,173067,149451],{"class":62},[52,173069,15083],{"class":79},[52,173071,149456],{"class":1223},[52,173073,292],{"class":58},[52,173075,149461],{"class":62},[52,173077,16362],{"class":79},[52,173079,34033],{"class":58},[52,173081,150803],{"class":1223},[52,173083,6718],{"class":79},[52,173085,173086,173088,173090,173092],{"class":54,"line":144},[52,173087,17400],{"class":58},[52,173089,150814],{"class":79},[52,173091,48004],{"class":1223},[52,173093,708],{"class":79},[52,173095,173096],{"class":54,"line":153},[52,173097,123],{"emptyLinePlaceholder":122},[52,173099,173100],{"class":54,"line":159},[52,173101,123],{"emptyLinePlaceholder":122},[52,173103,173104,173106,173108],{"class":54,"line":167},[52,173105,34597],{"class":58},[52,173107,154608],{"class":75},[52,173109,154611],{"class":79},[52,173111,173112,173114,173116,173118,173120,173122,173124,173126,173128,173130,173132,173134,173136,173138],{"class":54,"line":173},[52,173113,36828],{"class":58},[52,173115,149441],{"class":308},[52,173117,1216],{"class":79},[52,173119,154474],{"class":308},[52,173121,15083],{"class":79},[52,173123,154626],{"class":62},[52,173125,15083],{"class":79},[52,173127,149456],{"class":1223},[52,173129,292],{"class":58},[52,173131,149461],{"class":62},[52,173133,16362],{"class":79},[52,173135,34033],{"class":58},[52,173137,150803],{"class":1223},[52,173139,6718],{"class":79},[52,173141,173142,173144,173146,173148,173150,173152,173154,173156,173158,173160,173162],{"class":54,"line":181},[52,173143,154647],{"class":79},[52,173145,48004],{"class":1223},[52,173147,15083],{"class":79},[52,173149,149787],{"class":1223},[52,173151,292],{"class":58},[52,173153,36637],{"class":308},[52,173155,15083],{"class":79},[52,173157,154662],{"class":1223},[52,173159,292],{"class":58},[52,173161,564],{"class":308},[52,173163,708],{"class":79},[52,173165,173166],{"class":54,"line":186},[52,173167,123],{"emptyLinePlaceholder":122},[52,173169,173170],{"class":54,"line":191},[52,173171,123],{"emptyLinePlaceholder":122},[52,173173,173174,173176,173178],{"class":54,"line":196},[52,173175,162366],{"class":79},[52,173177,292],{"class":58},[52,173179,155692],{"class":79},[52,173181,173182,173185,173187,173189,173191,173193,173195,173197,173199,173201,173203,173205,173207],{"class":54,"line":201},[52,173183,173184],{"class":79},"students.append({",[52,173186,65329],{"class":62},[52,173188,54087],{"class":79},[52,173190,152538],{"class":62},[52,173192,15083],{"class":79},[52,173194,71774],{"class":62},[52,173196,54087],{"class":79},[52,173198,309],{"class":308},[52,173200,15083],{"class":79},[52,173202,154122],{"class":62},[52,173204,54087],{"class":79},[52,173206,4174],{"class":308},[52,173208,167802],{"class":79},[52,173210,173211],{"class":54,"line":206},[52,173212,173213],{"class":79},"save_students(students)\n",[52,173215,173216,173218,173220,173223],{"class":54,"line":211},[52,173217,33065],{"class":308},[52,173219,1216],{"class":79},[52,173221,173222],{"class":62},"\"保存成功\"",[52,173224,708],{"class":79},[18,173226,173228],{"id":173227},"_814-易错点","8.14 易错点",[1696,173230,173231,173235,173241,173246,173253,173260],{},[32,173232,173233,171494],{},[49,173234,3985],{},[32,173236,173237,173238,31035],{},"读写中文要指定 ",[49,173239,173240],{},"encoding=\"utf-8\"",[32,173242,173243,173244,31035],{},"打开文件后要关闭，推荐使用 ",[49,173245,110483],{},[32,173247,173248,173249,173252],{},"读取大文件不要直接 ",[49,173250,173251],{},"read()"," 全部内容。",[32,173254,173255,173256,173259],{},"Windows 写 CSV 时建议加 ",[49,173257,173258],{},"newline=\"\"","，避免空行。",[32,173261,173262],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[18,173264,173266],{"id":173265},"_815-本章练习","8.15 本章练习",[1696,173268,173269,173276,173281,173284,173287],{},[32,173270,173271,173272,173275],{},"写入一个 ",[49,173273,173274],{},"students.txt","，每行保存一个学生姓名。",[32,173277,107005,173278,173280],{},[49,173279,173274],{}," 并输出所有学生。",[32,173282,173283],{},"把学生列表保存为 JSON 文件。",[32,173285,173286],{},"从 JSON 文件读取学生数据，计算平均分。",[32,173288,173289,173290,173293,173294,173297],{},"写一个日志函数 ",[49,173291,173292],{},"write_log(message)","，每次调用向 ",[49,173295,173296],{},"app.log"," 追加一行。",[3141,173299,173300],{},"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":47,"searchDepth":66,"depth":66,"links":173302},[173303,173304,173308,173309,173315,173316,173317,173318,173319,173320,173321,173322,173323,173324,173325],{"id":170814,"depth":66,"text":170815},{"id":170855,"depth":66,"text":170856,"children":173305},[173306,173307],{"id":170859,"depth":83,"text":170860},{"id":170893,"depth":83,"text":170894},{"id":171007,"depth":66,"text":171008},{"id":171100,"depth":66,"text":171101,"children":173310},[173311,173312,173313,173314],{"id":171104,"depth":83,"text":171105},{"id":171191,"depth":83,"text":171192},{"id":171261,"depth":83,"text":171262},{"id":171355,"depth":83,"text":171356},{"id":171425,"depth":66,"text":171426},{"id":171488,"depth":66,"text":171489},{"id":171649,"depth":66,"text":171650},{"id":171712,"depth":66,"text":171713},{"id":171828,"depth":66,"text":171829},{"id":172038,"depth":66,"text":172039},{"id":172350,"depth":66,"text":172351},{"id":172761,"depth":66,"text":172762},{"id":172979,"depth":66,"text":172980},{"id":173227,"depth":66,"text":173228},{"id":173265,"depth":66,"text":173266},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":170806,"description":26025},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":173332,"title":173333,"body":173334,"description":26025,"extension":3153,"meta":175520,"navigation":122,"path":175521,"seo":175522,"stem":175523,"__hash__":175524},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":173335,"toc":175487},[173336,173339,173343,173346,173349,173441,173443,173462,173467,173471,173474,173477,173506,173513,173516,173520,173523,173552,173554,173606,173612,173665,173669,173767,173770,173837,173841,173898,173900,173906,173910,173915,173921,174012,174017,174021,174024,174102,174105,174143,174147,174265,174268,174272,174275,174320,174323,174327,174332,174338,174388,174391,174422,174426,174430,174460,174464,174499,174503,174538,174578,174582,174598,174601,174605,174609,174688,174692,174733,174737,174792,174796,174830,174834,174864,174873,174880,174886,174943,174946,174954,174957,174961,174968,174971,174977,174980,174997,175002,175006,175012,175025,175028,175065,175068,175079,175082,175096,175099,175113,175117,175124,175157,175160,175162,175168,175171,175175,175177,175183,175188,175361,175365,175428,175432,175456,175460,175484],[10,173337,173333],{"id":173338},"_9-异常模块与包",[18,173340,173342],{"id":173341},"_91-什么是异常","9.1 什么是异常",[14,173344,173345],{},"异常是程序运行过程中出现的错误。",[14,173347,173348],{},"常见异常：",[3353,173350,173351,173360],{},[3356,173352,173353],{},[3359,173354,173355,173358],{},[3362,173356,173357],{},"异常",[3362,173359,28519],{},[3399,173361,173362,173372,173382,173391,173401,173411,173421,173431],{},[3359,173363,173364,173369],{},[3404,173365,173366],{},[49,173367,173368],{},"NameError",[3404,173370,173371],{},"使用了未定义变量",[3359,173373,173374,173379],{},[3404,173375,173376],{},[49,173377,173378],{},"TypeError",[3404,173380,173381],{},"类型不匹配",[3359,173383,173384,173388],{},[3404,173385,173386],{},[49,173387,157484],{},[3404,173389,173390],{},"值不合法",[3359,173392,173393,173398],{},[3404,173394,173395],{},[49,173396,173397],{},"IndexError",[3404,173399,173400],{},"列表索引越界",[3359,173402,173403,173408],{},[3404,173404,173405],{},[49,173406,173407],{},"KeyError",[3404,173409,173410],{},"字典 key 不存在",[3359,173412,173413,173418],{},[3404,173414,173415],{},[49,173416,173417],{},"FileNotFoundError",[3404,173419,173420],{},"文件不存在",[3359,173422,173423,173428],{},[3404,173424,173425],{},[49,173426,173427],{},"ZeroDivisionError",[3404,173429,173430],{},"除数为 0",[3359,173432,173433,173438],{},[3404,173434,173435],{},[49,173436,173437],{},"ImportError",[3404,173439,173440],{},"导入失败",[14,173442,17783],{},[42,173444,173446],{"className":33028,"code":173445,"language":33030,"meta":47,"style":47},"num = int(\"abc\")\n",[49,173447,173448],{"__ignoreMap":47},[52,173449,173450,173452,173454,173456,173458,173460],{"class":54,"line":55},[52,173451,158437],{"class":79},[52,173453,292],{"class":58},[52,173455,2280],{"class":308},[52,173457,1216],{"class":79},[52,173459,158530],{"class":62},[52,173461,708],{"class":79},[14,173463,173464,173465,31035],{},"会触发 ",[49,173466,157484],{},[18,173468,173470],{"id":173469},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,173472,173473],{},"如果不处理异常，程序会直接终止。",[14,173475,173476],{},"例如用户输入年龄：",[42,173478,173480],{"className":33028,"code":173479,"language":33030,"meta":47,"style":47},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[49,173481,173482,173500],{"__ignoreMap":47},[52,173483,173484,173486,173488,173490,173492,173494,173496,173498],{"class":54,"line":55},[52,173485,149196],{"class":79},[52,173487,292],{"class":58},[52,173489,2280],{"class":308},[52,173491,1216],{"class":79},[52,173493,56471],{"class":308},[52,173495,1216],{"class":79},[52,173497,155044],{"class":62},[52,173499,33147],{"class":79},[52,173501,173502,173504],{"class":54,"line":66},[52,173503,33065],{"class":308},[52,173505,158411],{"class":79},[14,173507,173508,173509,173512],{},"用户输入 ",[49,173510,173511],{},"abc","，程序就会报错退出。",[14,173514,173515],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[18,173517,173519],{"id":173518},"_93-try-except","9.3 try except",[14,173521,173522],{},"基础语法：",[42,173524,173526],{"className":33028,"code":173525,"language":33030,"meta":47,"style":47},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[49,173527,173528,173535,173540,173547],{"__ignoreMap":47},[52,173529,173530,173533],{"class":54,"line":55},[52,173531,173532],{"class":58},"try",[52,173534,6718],{"class":79},[52,173536,173537],{"class":54,"line":66},[52,173538,173539],{"class":79},"    可能出错的代码\n",[52,173541,173542,173545],{"class":54,"line":83},[52,173543,173544],{"class":58},"except",[52,173546,6718],{"class":79},[52,173548,173549],{"class":54,"line":91},[52,173550,173551],{"class":79},"    出错后的处理代码\n",[14,173553,17783],{},[42,173555,173557],{"className":33028,"code":173556,"language":33030,"meta":47,"style":47},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[49,173558,173559,173565,173583,173589,173595],{"__ignoreMap":47},[52,173560,173561,173563],{"class":54,"line":55},[52,173562,173532],{"class":58},[52,173564,6718],{"class":79},[52,173566,173567,173569,173571,173573,173575,173577,173579,173581],{"class":54,"line":66},[52,173568,155036],{"class":79},[52,173570,292],{"class":58},[52,173572,2280],{"class":308},[52,173574,1216],{"class":79},[52,173576,56471],{"class":308},[52,173578,1216],{"class":79},[52,173580,155044],{"class":62},[52,173582,33147],{"class":79},[52,173584,173585,173587],{"class":54,"line":83},[52,173586,33949],{"class":308},[52,173588,158411],{"class":79},[52,173590,173591,173593],{"class":54,"line":91},[52,173592,173544],{"class":58},[52,173594,6718],{"class":79},[52,173596,173597,173599,173601,173604],{"class":54,"line":98},[52,173598,33949],{"class":308},[52,173600,1216],{"class":79},[52,173602,173603],{"class":62},"\"年龄必须是数字\"",[52,173605,708],{"class":79},[14,173607,173608,173609,173611],{},"不建议裸写 ",[49,173610,173544],{},"，最好指定异常类型。",[42,173613,173615],{"className":33028,"code":173614,"language":33030,"meta":47,"style":47},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[49,173616,173617,173623,173641,173647,173655],{"__ignoreMap":47},[52,173618,173619,173621],{"class":54,"line":55},[52,173620,173532],{"class":58},[52,173622,6718],{"class":79},[52,173624,173625,173627,173629,173631,173633,173635,173637,173639],{"class":54,"line":66},[52,173626,155036],{"class":79},[52,173628,292],{"class":58},[52,173630,2280],{"class":308},[52,173632,1216],{"class":79},[52,173634,56471],{"class":308},[52,173636,1216],{"class":79},[52,173638,155044],{"class":62},[52,173640,33147],{"class":79},[52,173642,173643,173645],{"class":54,"line":83},[52,173644,33949],{"class":308},[52,173646,158411],{"class":79},[52,173648,173649,173651,173653],{"class":54,"line":91},[52,173650,173544],{"class":58},[52,173652,154876],{"class":308},[52,173654,6718],{"class":79},[52,173656,173657,173659,173661,173663],{"class":54,"line":98},[52,173658,33949],{"class":308},[52,173660,1216],{"class":79},[52,173662,173603],{"class":62},[52,173664,708],{"class":79},[18,173666,173668],{"id":173667},"_94-捕获多个异常","9.4 捕获多个异常",[42,173670,173672],{"className":33028,"code":173671,"language":33030,"meta":47,"style":47},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[49,173673,173674,173680,173701,173721,173728,173736,173747,173756],{"__ignoreMap":47},[52,173675,173676,173678],{"class":54,"line":55},[52,173677,173532],{"class":58},[52,173679,6718],{"class":79},[52,173681,173682,173685,173687,173689,173691,173693,173695,173697,173699],{"class":54,"line":66},[52,173683,173684],{"class":79},"    nums ",[52,173686,292],{"class":58},[52,173688,54876],{"class":79},[52,173690,629],{"class":308},[52,173692,15083],{"class":79},[52,173694,564],{"class":308},[52,173696,15083],{"class":79},[52,173698,2313],{"class":308},[52,173700,35896],{"class":79},[52,173702,173703,173706,173708,173710,173712,173714,173716,173719],{"class":54,"line":83},[52,173704,173705],{"class":79},"    index ",[52,173707,292],{"class":58},[52,173709,2280],{"class":308},[52,173711,1216],{"class":79},[52,173713,56471],{"class":308},[52,173715,1216],{"class":79},[52,173717,173718],{"class":62},"\"请输入索引:\"",[52,173720,33147],{"class":79},[52,173722,173723,173725],{"class":54,"line":91},[52,173724,33949],{"class":308},[52,173726,173727],{"class":79},"(nums[index])\n",[52,173729,173730,173732,173734],{"class":54,"line":98},[52,173731,173544],{"class":58},[52,173733,154876],{"class":308},[52,173735,6718],{"class":79},[52,173737,173738,173740,173742,173745],{"class":54,"line":107},[52,173739,33949],{"class":308},[52,173741,1216],{"class":79},[52,173743,173744],{"class":62},"\"索引必须是整数\"",[52,173746,708],{"class":79},[52,173748,173749,173751,173754],{"class":54,"line":113},[52,173750,173544],{"class":58},[52,173752,173753],{"class":308}," IndexError",[52,173755,6718],{"class":79},[52,173757,173758,173760,173762,173765],{"class":54,"line":119},[52,173759,33949],{"class":308},[52,173761,1216],{"class":79},[52,173763,173764],{"class":62},"\"索引越界\"",[52,173766,708],{"class":79},[14,173768,173769],{},"多个异常使用相同处理逻辑：",[42,173771,173773],{"className":33028,"code":173772,"language":33030,"meta":47,"style":47},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[49,173774,173775,173781,173799,173812,173826],{"__ignoreMap":47},[52,173776,173777,173779],{"class":54,"line":55},[52,173778,173532],{"class":58},[52,173780,6718],{"class":79},[52,173782,173783,173785,173787,173789,173791,173793,173795,173797],{"class":54,"line":66},[52,173784,48243],{"class":79},[52,173786,292],{"class":58},[52,173788,2280],{"class":308},[52,173790,1216],{"class":79},[52,173792,56471],{"class":308},[52,173794,1216],{"class":79},[52,173796,158446],{"class":62},[52,173798,33147],{"class":79},[52,173800,173801,173803,173805,173807,173809],{"class":54,"line":83},[52,173802,33949],{"class":308},[52,173804,1216],{"class":79},[52,173806,3649],{"class":308},[52,173808,158696],{"class":58},[52,173810,173811],{"class":79}," num)\n",[52,173813,173814,173816,173818,173820,173822,173824],{"class":54,"line":91},[52,173815,173544],{"class":58},[52,173817,682],{"class":79},[52,173819,157484],{"class":308},[52,173821,15083],{"class":79},[52,173823,173427],{"class":308},[52,173825,33436],{"class":79},[52,173827,173828,173830,173832,173835],{"class":54,"line":98},[52,173829,33949],{"class":308},[52,173831,1216],{"class":79},[52,173833,173834],{"class":62},"\"输入不合法\"",[52,173836,708],{"class":79},[18,173838,173840],{"id":173839},"_95-获取异常信息","9.5 获取异常信息",[42,173842,173844],{"className":33028,"code":173843,"language":33030,"meta":47,"style":47},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[49,173845,173846,173852,173866,173877],{"__ignoreMap":47},[52,173847,173848,173850],{"class":54,"line":55},[52,173849,173532],{"class":58},[52,173851,6718],{"class":79},[52,173853,173854,173856,173858,173860,173862,173864],{"class":54,"line":66},[52,173855,48243],{"class":79},[52,173857,292],{"class":58},[52,173859,2280],{"class":308},[52,173861,1216],{"class":79},[52,173863,158530],{"class":62},[52,173865,708],{"class":79},[52,173867,173868,173870,173872,173874],{"class":54,"line":83},[52,173869,173544],{"class":58},[52,173871,154876],{"class":308},[52,173873,67254],{"class":58},[52,173875,173876],{"class":79}," e:\n",[52,173878,173879,173881,173883,173885,173888,173890,173892,173894,173896],{"class":54,"line":91},[52,173880,33949],{"class":308},[52,173882,1216],{"class":79},[52,173884,3273],{"class":58},[52,173886,173887],{"class":62},"\"出错了:",[52,173889,383],{"class":308},[52,173891,3292],{"class":79},[52,173893,4132],{"class":308},[52,173895,2844],{"class":62},[52,173897,708],{"class":79},[14,173899,149107],{},[42,173901,173904],{"className":173902,"code":173903,"language":8154,"meta":47},[8152],"出错了:invalid literal for int() with base 10: 'abc'\n",[49,173905,173903],{"__ignoreMap":47},[18,173907,173909],{"id":173908},"_96-else和finally","9.6 else和finally",[14,173911,173912,173914],{},[49,173913,4733],{},"：没有异常时执行。",[14,173916,173917,173920],{},[49,173918,173919],{},"finally","：无论是否异常都会执行。",[42,173922,173924],{"className":33028,"code":173923,"language":33030,"meta":47,"style":47},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[49,173925,173926,173932,173950,173958,173968,173974,173995,174001],{"__ignoreMap":47},[52,173927,173928,173930],{"class":54,"line":55},[52,173929,173532],{"class":58},[52,173931,6718],{"class":79},[52,173933,173934,173936,173938,173940,173942,173944,173946,173948],{"class":54,"line":66},[52,173935,48243],{"class":79},[52,173937,292],{"class":58},[52,173939,2280],{"class":308},[52,173941,1216],{"class":79},[52,173943,56471],{"class":308},[52,173945,1216],{"class":79},[52,173947,158446],{"class":62},[52,173949,33147],{"class":79},[52,173951,173952,173954,173956],{"class":54,"line":83},[52,173953,173544],{"class":58},[52,173955,154876],{"class":308},[52,173957,6718],{"class":79},[52,173959,173960,173962,173964,173966],{"class":54,"line":91},[52,173961,33949],{"class":308},[52,173963,1216],{"class":79},[52,173965,155864],{"class":62},[52,173967,708],{"class":79},[52,173969,173970,173972],{"class":54,"line":98},[52,173971,4733],{"class":58},[52,173973,6718],{"class":79},[52,173975,173976,173978,173980,173982,173985,173987,173989,173991,173993],{"class":54,"line":107},[52,173977,33949],{"class":308},[52,173979,1216],{"class":79},[52,173981,3273],{"class":58},[52,173983,173984],{"class":62},"\"输入正确:",[52,173986,383],{"class":308},[52,173988,4701],{"class":79},[52,173990,4132],{"class":308},[52,173992,2844],{"class":62},[52,173994,708],{"class":79},[52,173996,173997,173999],{"class":54,"line":113},[52,173998,173919],{"class":58},[52,174000,6718],{"class":79},[52,174002,174003,174005,174007,174010],{"class":54,"line":119},[52,174004,33949],{"class":308},[52,174006,1216],{"class":79},[52,174008,174009],{"class":62},"\"程序结束\"",[52,174011,708],{"class":79},[14,174013,174014,174016],{},[49,174015,173919],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[18,174018,174020],{"id":174019},"_97-抛出异常","9.7 抛出异常",[14,174022,174023],{},"程序可以主动抛出异常。",[42,174025,174027],{"className":33028,"code":174026,"language":33030,"meta":47,"style":47},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[49,174028,174029,174038,174050,174063,174083,174087,174091],{"__ignoreMap":47},[52,174030,174031,174033,174036],{"class":54,"line":55},[52,174032,34597],{"class":58},[52,174034,174035],{"class":75}," set_age",[52,174037,164065],{"class":79},[52,174039,174040,174042,174044,174046,174048],{"class":54,"line":66},[52,174041,6088],{"class":58},[52,174043,18355],{"class":79},[52,174045,698],{"class":58},[52,174047,1444],{"class":308},[52,174049,6718],{"class":79},[52,174051,174052,174054,174056,174058,174061],{"class":54,"line":83},[52,174053,106082],{"class":58},[52,174055,154876],{"class":308},[52,174057,1216],{"class":79},[52,174059,174060],{"class":62},"\"年龄不能为负数\"",[52,174062,708],{"class":79},[52,174064,174065,174067,174069,174071,174073,174075,174077,174079,174081],{"class":54,"line":91},[52,174066,33949],{"class":308},[52,174068,1216],{"class":79},[52,174070,3273],{"class":58},[52,174072,164633],{"class":62},[52,174074,383],{"class":308},[52,174076,72871],{"class":79},[52,174078,4132],{"class":308},[52,174080,2844],{"class":62},[52,174082,708],{"class":79},[52,174084,174085],{"class":54,"line":98},[52,174086,123],{"emptyLinePlaceholder":122},[52,174088,174089],{"class":54,"line":107},[52,174090,123],{"emptyLinePlaceholder":122},[52,174092,174093,174096,174098,174100],{"class":54,"line":113},[52,174094,174095],{"class":79},"set_age(",[52,174097,2642],{"class":58},[52,174099,629],{"class":308},[52,174101,708],{"class":79},[14,174103,174104],{},"调用者可以捕获：",[42,174106,174108],{"className":33028,"code":174107,"language":33030,"meta":47,"style":47},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[49,174109,174110,174116,174127,174137],{"__ignoreMap":47},[52,174111,174112,174114],{"class":54,"line":55},[52,174113,173532],{"class":58},[52,174115,6718],{"class":79},[52,174117,174118,174121,174123,174125],{"class":54,"line":66},[52,174119,174120],{"class":79},"    set_age(",[52,174122,2642],{"class":58},[52,174124,629],{"class":308},[52,174126,708],{"class":79},[52,174128,174129,174131,174133,174135],{"class":54,"line":83},[52,174130,173544],{"class":58},[52,174132,154876],{"class":308},[52,174134,67254],{"class":58},[52,174136,173876],{"class":79},[52,174138,174139,174141],{"class":54,"line":91},[52,174140,33949],{"class":308},[52,174142,69649],{"class":79},[18,174144,174146],{"id":174145},"_98-自定义异常","9.8 自定义异常",[42,174148,174150],{"className":33028,"code":174149,"language":33030,"meta":47,"style":47},"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",[49,174151,174152,174166,174170,174174,174178,174186,174196,174207,174217,174221,174225,174231,174248,174259],{"__ignoreMap":47},[52,174153,174154,174156,174159,174161,174164],{"class":54,"line":55},[52,174155,17342],{"class":58},[52,174157,174158],{"class":75}," BalanceNotEnoughError",[52,174160,1216],{"class":79},[52,174162,174163],{"class":308},"Exception",[52,174165,33436],{"class":79},[52,174167,174168],{"class":54,"line":66},[52,174169,152187],{"class":58},[52,174171,174172],{"class":54,"line":83},[52,174173,123],{"emptyLinePlaceholder":122},[52,174175,174176],{"class":54,"line":91},[52,174177,123],{"emptyLinePlaceholder":122},[52,174179,174180,174182,174184],{"class":54,"line":98},[52,174181,34597],{"class":58},[52,174183,152836],{"class":75},[52,174185,165462],{"class":79},[52,174187,174188,174190,174192,174194],{"class":54,"line":107},[52,174189,6088],{"class":58},[52,174191,152792],{"class":79},[52,174193,2674],{"class":58},[52,174195,165239],{"class":79},[52,174197,174198,174200,174203,174205],{"class":54,"line":113},[52,174199,106082],{"class":58},[52,174201,174202],{"class":79}," BalanceNotEnoughError(",[52,174204,152887],{"class":62},[52,174206,708],{"class":79},[52,174208,174209,174211,174213,174215],{"class":54,"line":119},[52,174210,1441],{"class":58},[52,174212,165469],{"class":79},[52,174214,2642],{"class":58},[52,174216,152825],{"class":79},[52,174218,174219],{"class":54,"line":126},[52,174220,123],{"emptyLinePlaceholder":122},[52,174222,174223],{"class":54,"line":132},[52,174224,123],{"emptyLinePlaceholder":122},[52,174226,174227,174229],{"class":54,"line":138},[52,174228,173532],{"class":58},[52,174230,6718],{"class":79},[52,174232,174233,174235,174237,174240,174242,174244,174246],{"class":54,"line":144},[52,174234,165140],{"class":79},[52,174236,292],{"class":58},[52,174238,174239],{"class":79}," withdraw(",[52,174241,591],{"class":308},[52,174243,15083],{"class":79},[52,174245,856],{"class":308},[52,174247,708],{"class":79},[52,174249,174250,174252,174255,174257],{"class":54,"line":153},[52,174251,173544],{"class":58},[52,174253,174254],{"class":79}," BalanceNotEnoughError ",[52,174256,34033],{"class":58},[52,174258,173876],{"class":79},[52,174260,174261,174263],{"class":54,"line":159},[52,174262,33949],{"class":308},[52,174264,69649],{"class":79},[14,174266,174267],{},"入门阶段大多数情况使用内置异常即可。",[18,174269,174271],{"id":174270},"_99-traceback","9.9 traceback",[14,174273,174274],{},"调试时可以输出完整异常堆栈。",[42,174276,174278],{"className":33028,"code":174277,"language":33030,"meta":47,"style":47},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[49,174279,174280,174287,174291,174297,174307,174315],{"__ignoreMap":47},[52,174281,174282,174284],{"class":54,"line":55},[52,174283,33042],{"class":58},[52,174285,174286],{"class":79}," traceback\n",[52,174288,174289],{"class":54,"line":66},[52,174290,123],{"emptyLinePlaceholder":122},[52,174292,174293,174295],{"class":54,"line":83},[52,174294,173532],{"class":58},[52,174296,6718],{"class":79},[52,174298,174299,174301,174303,174305],{"class":54,"line":91},[52,174300,147],{"class":308},[52,174302,1216],{"class":79},[52,174304,158530],{"class":62},[52,174306,708],{"class":79},[52,174308,174309,174311,174313],{"class":54,"line":98},[52,174310,173544],{"class":58},[52,174312,154876],{"class":308},[52,174314,6718],{"class":79},[52,174316,174317],{"class":54,"line":107},[52,174318,174319],{"class":79},"    traceback.print_exc()\n",[14,174321,174322],{},"日志系统中常把异常堆栈记录到文件。",[18,174324,174326],{"id":174325},"_910-什么是模块","9.10 什么是模块",[14,174328,174329,174330,128633],{},"模块就是一个 ",[49,174331,149002],{},[14,174333,174334,174335,27268],{},"例如创建 ",[49,174336,174337],{},"my_math.py",[42,174339,174341],{"className":33028,"code":174340,"language":33030,"meta":47,"style":47},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[49,174342,174343,174351,174361,174365,174369,174378],{"__ignoreMap":47},[52,174344,174345,174347,174349],{"class":54,"line":55},[52,174346,34597],{"class":58},[52,174348,8176],{"class":75},[52,174350,153743],{"class":79},[52,174352,174353,174355,174357,174359],{"class":54,"line":66},[52,174354,1441],{"class":58},[52,174356,13517],{"class":79},[52,174358,2004],{"class":58},[52,174360,153754],{"class":79},[52,174362,174363],{"class":54,"line":83},[52,174364,123],{"emptyLinePlaceholder":122},[52,174366,174367],{"class":54,"line":91},[52,174368,123],{"emptyLinePlaceholder":122},[52,174370,174371,174373,174376],{"class":54,"line":98},[52,174372,34597],{"class":58},[52,174374,174375],{"class":75}," sub",[52,174377,153743],{"class":79},[52,174379,174380,174382,174384,174386],{"class":54,"line":107},[52,174381,1441],{"class":58},[52,174383,13517],{"class":79},[52,174385,2642],{"class":58},[52,174387,153754],{"class":79},[14,174389,174390],{},"在另一个文件中导入：",[42,174392,174394],{"className":33028,"code":174393,"language":33030,"meta":47,"style":47},"import my_math\n\nprint(my_math.add(1, 2))\n",[49,174395,174396,174403,174407],{"__ignoreMap":47},[52,174397,174398,174400],{"class":54,"line":55},[52,174399,33042],{"class":58},[52,174401,174402],{"class":79}," my_math\n",[52,174404,174405],{"class":54,"line":66},[52,174406,123],{"emptyLinePlaceholder":122},[52,174408,174409,174411,174414,174416,174418,174420],{"class":54,"line":83},[52,174410,33065],{"class":308},[52,174412,174413],{"class":79},"(my_math.add(",[52,174415,629],{"class":308},[52,174417,15083],{"class":79},[52,174419,564],{"class":308},[52,174421,33147],{"class":79},[18,174423,174425],{"id":174424},"_911-import导入","9.11 import导入",[3195,174427,174429],{"id":174428},"_9111-导入模块","9.11.1 导入模块",[42,174431,174433],{"className":33028,"code":174432,"language":33030,"meta":47,"style":47},"import random\n\nprint(random.randint(1, 10))\n",[49,174434,174435,174441,174445],{"__ignoreMap":47},[52,174436,174437,174439],{"class":54,"line":55},[52,174438,33042],{"class":58},[52,174440,47978],{"class":79},[52,174442,174443],{"class":54,"line":66},[52,174444,123],{"emptyLinePlaceholder":122},[52,174446,174447,174449,174452,174454,174456,174458],{"class":54,"line":83},[52,174448,33065],{"class":308},[52,174450,174451],{"class":79},"(random.randint(",[52,174453,629],{"class":308},[52,174455,15083],{"class":79},[52,174457,3649],{"class":308},[52,174459,33147],{"class":79},[3195,174461,174463],{"id":174462},"_9112-导入指定内容","9.11.2 导入指定内容",[42,174465,174467],{"className":33028,"code":174466,"language":33030,"meta":47,"style":47},"from random import randint\n\nprint(randint(1, 10))\n",[49,174468,174469,174480,174484],{"__ignoreMap":47},[52,174470,174471,174473,174475,174477],{"class":54,"line":55},[52,174472,33387],{"class":58},[52,174474,60446],{"class":79},[52,174476,33042],{"class":58},[52,174478,174479],{"class":79}," randint\n",[52,174481,174482],{"class":54,"line":66},[52,174483,123],{"emptyLinePlaceholder":122},[52,174485,174486,174488,174491,174493,174495,174497],{"class":54,"line":83},[52,174487,33065],{"class":308},[52,174489,174490],{"class":79},"(randint(",[52,174492,629],{"class":308},[52,174494,15083],{"class":79},[52,174496,3649],{"class":308},[52,174498,33147],{"class":79},[3195,174500,174502],{"id":174501},"_9113-起别名","9.11.3 起别名",[42,174504,174506],{"className":33028,"code":174505,"language":33030,"meta":47,"style":47},"import random as rd\n\nprint(rd.randint(1, 10))\n",[49,174507,174508,174519,174523],{"__ignoreMap":47},[52,174509,174510,174512,174514,174516],{"class":54,"line":55},[52,174511,33042],{"class":58},[52,174513,60446],{"class":79},[52,174515,34033],{"class":58},[52,174517,174518],{"class":79}," rd\n",[52,174520,174521],{"class":54,"line":66},[52,174522,123],{"emptyLinePlaceholder":122},[52,174524,174525,174527,174530,174532,174534,174536],{"class":54,"line":83},[52,174526,33065],{"class":308},[52,174528,174529],{"class":79},"(rd.randint(",[52,174531,629],{"class":308},[52,174533,15083],{"class":79},[52,174535,3649],{"class":308},[52,174537,33147],{"class":79},[42,174539,174541],{"className":33028,"code":174540,"language":33030,"meta":47,"style":47},"from random import randint as rint\n\nprint(rint(1, 10))\n",[49,174542,174543,174559,174563],{"__ignoreMap":47},[52,174544,174545,174547,174549,174551,174554,174556],{"class":54,"line":55},[52,174546,33387],{"class":58},[52,174548,60446],{"class":79},[52,174550,33042],{"class":58},[52,174552,174553],{"class":79}," randint ",[52,174555,34033],{"class":58},[52,174557,174558],{"class":79}," rint\n",[52,174560,174561],{"class":54,"line":66},[52,174562,123],{"emptyLinePlaceholder":122},[52,174564,174565,174567,174570,174572,174574,174576],{"class":54,"line":83},[52,174566,33065],{"class":308},[52,174568,174569],{"class":79},"(rint(",[52,174571,629],{"class":308},[52,174573,15083],{"class":79},[52,174575,3649],{"class":308},[52,174577,33147],{"class":79},[3195,174579,174581],{"id":174580},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[42,174583,174585],{"className":33028,"code":174584,"language":33030,"meta":47,"style":47},"from random import *\n",[49,174586,174587],{"__ignoreMap":47},[52,174588,174589,174591,174593,174595],{"class":54,"line":55},[52,174590,33387],{"class":58},[52,174592,60446],{"class":79},[52,174594,33042],{"class":58},[52,174596,174597],{"class":58}," *\n",[14,174599,174600],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[18,174602,174604],{"id":174603},"_912-常用内置模块","9.12 常用内置模块",[3195,174606,174608],{"id":174607},"_9121-random","9.12.1 random",[42,174610,174612],{"className":33028,"code":174611,"language":33030,"meta":47,"style":47},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[49,174613,174614,174620,174624,174638,174657],{"__ignoreMap":47},[52,174615,174616,174618],{"class":54,"line":55},[52,174617,33042],{"class":58},[52,174619,47978],{"class":79},[52,174621,174622],{"class":54,"line":66},[52,174623,123],{"emptyLinePlaceholder":122},[52,174625,174626,174628,174630,174632,174634,174636],{"class":54,"line":83},[52,174627,33065],{"class":308},[52,174629,174451],{"class":79},[52,174631,629],{"class":308},[52,174633,15083],{"class":79},[52,174635,3649],{"class":308},[52,174637,33147],{"class":79},[52,174639,174640,174642,174645,174647,174649,174651,174653,174655],{"class":54,"line":91},[52,174641,33065],{"class":308},[52,174643,174644],{"class":79},"(random.choice([",[52,174646,152538],{"class":62},[52,174648,15083],{"class":79},[52,174650,153586],{"class":62},[52,174652,15083],{"class":79},[52,174654,162381],{"class":62},[52,174656,35793],{"class":79},[52,174658,174659,174661,174664,174666,174668,174670,174672,174674,174676,174678,174680,174682,174684,174686],{"class":54,"line":98},[52,174660,33065],{"class":308},[52,174662,174663],{"class":79},"(random.sample([",[52,174665,629],{"class":308},[52,174667,15083],{"class":79},[52,174669,564],{"class":308},[52,174671,15083],{"class":79},[52,174673,2313],{"class":308},[52,174675,15083],{"class":79},[52,174677,3504],{"class":308},[52,174679,15083],{"class":79},[52,174681,1805],{"class":308},[52,174683,114852],{"class":79},[52,174685,564],{"class":308},[52,174687,33147],{"class":79},[3195,174689,174691],{"id":174690},"_9122-time","9.12.2 time",[42,174693,174695],{"className":33028,"code":174694,"language":33030,"meta":47,"style":47},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[49,174696,174697,174703,174707,174714,174722],{"__ignoreMap":47},[52,174698,174699,174701],{"class":54,"line":55},[52,174700,33042],{"class":58},[52,174702,34479],{"class":79},[52,174704,174705],{"class":54,"line":66},[52,174706,123],{"emptyLinePlaceholder":122},[52,174708,174709,174711],{"class":54,"line":83},[52,174710,33065],{"class":308},[52,174712,174713],{"class":79},"(time.time())\n",[52,174715,174716,174718,174720],{"class":54,"line":91},[52,174717,97721],{"class":79},[52,174719,629],{"class":308},[52,174721,708],{"class":79},[52,174723,174724,174726,174728,174731],{"class":54,"line":98},[52,174725,33065],{"class":308},[52,174727,1216],{"class":79},[52,174729,174730],{"class":62},"\"1秒后执行\"",[52,174732,708],{"class":79},[3195,174734,174736],{"id":174735},"_9123-datetime","9.12.3 datetime",[42,174738,174740],{"className":33028,"code":174739,"language":33030,"meta":47,"style":47},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[49,174741,174742,174754,174758,174768,174775],{"__ignoreMap":47},[52,174743,174744,174746,174749,174751],{"class":54,"line":55},[52,174745,33387],{"class":58},[52,174747,174748],{"class":79}," datetime ",[52,174750,33042],{"class":58},[52,174752,174753],{"class":79}," datetime\n",[52,174755,174756],{"class":54,"line":66},[52,174757,123],{"emptyLinePlaceholder":122},[52,174759,174760,174763,174765],{"class":54,"line":83},[52,174761,174762],{"class":79},"now ",[52,174764,292],{"class":58},[52,174766,174767],{"class":79}," datetime.now()\n",[52,174769,174770,174772],{"class":54,"line":91},[52,174771,33065],{"class":308},[52,174773,174774],{"class":79},"(now)\n",[52,174776,174777,174779,174782,174785,174787,174790],{"class":54,"line":98},[52,174778,33065],{"class":308},[52,174780,174781],{"class":79},"(now.strftime(",[52,174783,174784],{"class":62},"\"%Y-%m-",[52,174786,159341],{"class":308},[52,174788,174789],{"class":62}," %H:%M:%S\"",[52,174791,33147],{"class":79},[3195,174793,174795],{"id":174794},"_9124-os","9.12.4 os",[42,174797,174799],{"className":33028,"code":174798,"language":33030,"meta":47,"style":47},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[49,174800,174801,174807,174811,174818],{"__ignoreMap":47},[52,174802,174803,174805],{"class":54,"line":55},[52,174804,33042],{"class":58},[52,174806,47955],{"class":79},[52,174808,174809],{"class":54,"line":66},[52,174810,123],{"emptyLinePlaceholder":122},[52,174812,174813,174815],{"class":54,"line":83},[52,174814,33065],{"class":308},[52,174816,174817],{"class":79},"(os.getcwd())\n",[52,174819,174820,174822,174825,174828],{"class":54,"line":91},[52,174821,33065],{"class":308},[52,174823,174824],{"class":79},"(os.listdir(",[52,174826,174827],{"class":62},"\".\"",[52,174829,33147],{"class":79},[3195,174831,174833],{"id":174832},"_9125-sys","9.12.5 sys",[42,174835,174837],{"className":33028,"code":174836,"language":33030,"meta":47,"style":47},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[49,174838,174839,174846,174850,174857],{"__ignoreMap":47},[52,174840,174841,174843],{"class":54,"line":55},[52,174842,33042],{"class":58},[52,174844,174845],{"class":79}," sys\n",[52,174847,174848],{"class":54,"line":66},[52,174849,123],{"emptyLinePlaceholder":122},[52,174851,174852,174854],{"class":54,"line":83},[52,174853,33065],{"class":308},[52,174855,174856],{"class":79},"(sys.version)\n",[52,174858,174859,174861],{"class":54,"line":91},[52,174860,33065],{"class":308},[52,174862,174863],{"class":79},"(sys.path)\n",[18,174865,174867,174868,174870,174871,2844],{"id":174866},"_913-if-name-main","9.13 if ",[2389,174869,82460],{}," == \"",[2389,174872,104708],{},[14,174874,174875,174876,174879],{},"模块被直接运行和被导入时，",[49,174877,174878],{},"__name__"," 的值不同。",[14,174881,174882,174883,27268],{},"创建 ",[49,174884,174885],{},"my_module.py",[42,174887,174889],{"className":33028,"code":174888,"language":33030,"meta":47,"style":47},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[49,174890,174891,174899,174909,174913,174917,174929],{"__ignoreMap":47},[52,174892,174893,174895,174897],{"class":54,"line":55},[52,174894,34597],{"class":58},[52,174896,8176],{"class":75},[52,174898,153743],{"class":79},[52,174900,174901,174903,174905,174907],{"class":54,"line":66},[52,174902,1441],{"class":58},[52,174904,13517],{"class":79},[52,174906,2004],{"class":58},[52,174908,153754],{"class":79},[52,174910,174911],{"class":54,"line":83},[52,174912,123],{"emptyLinePlaceholder":122},[52,174914,174915],{"class":54,"line":91},[52,174916,123],{"emptyLinePlaceholder":122},[52,174918,174919,174921,174923,174925,174927],{"class":54,"line":98},[52,174920,4578],{"class":58},[52,174922,33870],{"class":308},[52,174924,104209],{"class":58},[52,174926,104212],{"class":62},[52,174928,6718],{"class":79},[52,174930,174931,174933,174935,174937,174939,174941],{"class":54,"line":107},[52,174932,33949],{"class":308},[52,174934,169250],{"class":79},[52,174936,629],{"class":308},[52,174938,15083],{"class":79},[52,174940,564],{"class":308},[52,174942,33147],{"class":79},[14,174944,174945],{},"作用：",[1696,174947,174948,174951],{},[32,174949,174950],{},"直接运行该文件时，执行测试代码。",[32,174952,174953],{},"被其他文件导入时，不执行测试代码。",[14,174955,174956],{},"这是写模块时很常用的习惯。",[18,174958,174960],{"id":174959},"_914-包","9.14 包",[14,174962,174963,174964,174967],{},"包是包含 ",[49,174965,174966],{},"__init__.py"," 的目录，用于组织多个模块。",[14,174969,174970],{},"目录结构：",[42,174972,174975],{"className":174973,"code":174974,"language":8154,"meta":47},[8152],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[49,174976,174974],{"__ignoreMap":47},[14,174978,174979],{},"导入：",[42,174981,174983],{"className":33028,"code":174982,"language":33030,"meta":47,"style":47},"from utils.file_utils import read_file\n",[49,174984,174985],{"__ignoreMap":47},[52,174986,174987,174989,174992,174994],{"class":54,"line":55},[52,174988,33387],{"class":58},[52,174990,174991],{"class":79}," utils.file_utils ",[52,174993,33042],{"class":58},[52,174995,174996],{"class":79}," read_file\n",[14,174998,174999,175001],{},[49,175000,174966],{}," 可以为空，也可以写包初始化逻辑。",[18,175003,175005],{"id":175004},"_915-第三方包","9.15 第三方包",[14,175007,175008,175009,175011],{},"第三方包通过 ",[49,175010,26480],{}," 安装。",[42,175013,175015],{"className":26471,"code":175014,"language":26473,"meta":47,"style":47},"pip install requests\n",[49,175016,175017],{"__ignoreMap":47},[52,175018,175019,175021,175023],{"class":54,"line":55},[52,175020,26480],{"class":75},[52,175022,26483],{"class":62},[52,175024,148748],{"class":62},[14,175026,175027],{},"使用：",[42,175029,175031],{"className":33028,"code":175030,"language":33030,"meta":47,"style":47},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[49,175032,175033,175039,175043,175058],{"__ignoreMap":47},[52,175034,175035,175037],{"class":54,"line":55},[52,175036,33042],{"class":58},[52,175038,148748],{"class":79},[52,175040,175041],{"class":54,"line":66},[52,175042,123],{"emptyLinePlaceholder":122},[52,175044,175045,175048,175050,175053,175056],{"class":54,"line":83},[52,175046,175047],{"class":79},"response ",[52,175049,292],{"class":58},[52,175051,175052],{"class":79}," requests.get(",[52,175054,175055],{"class":62},"\"https:\u002F\u002Fwww.example.com\"",[52,175057,708],{"class":79},[52,175059,175060,175062],{"class":54,"line":91},[52,175061,33065],{"class":308},[52,175063,175064],{"class":79},"(response.status_code)\n",[14,175066,175067],{},"查看已安装包：",[42,175069,175071],{"className":26471,"code":175070,"language":26473,"meta":47,"style":47},"pip list\n",[49,175072,175073],{"__ignoreMap":47},[52,175074,175075,175077],{"class":54,"line":55},[52,175076,26480],{"class":75},[52,175078,121605],{"class":62},[14,175080,175081],{},"导出项目依赖：",[42,175083,175084],{"className":26471,"code":148943,"language":26473,"meta":47,"style":47},[49,175085,175086],{"__ignoreMap":47},[52,175087,175088,175090,175092,175094],{"class":54,"line":55},[52,175089,26480],{"class":75},[52,175091,148952],{"class":62},[52,175093,28872],{"class":58},[52,175095,148957],{"class":62},[14,175097,175098],{},"安装项目依赖：",[42,175100,175101],{"className":26471,"code":148963,"language":26473,"meta":47,"style":47},[49,175102,175103],{"__ignoreMap":47},[52,175104,175105,175107,175109,175111],{"class":54,"line":55},[52,175106,26480],{"class":75},[52,175108,26483],{"class":62},[52,175110,122289],{"class":308},[52,175112,148957],{"class":62},[18,175114,175116],{"id":175115},"_916-模块搜索路径","9.16 模块搜索路径",[14,175118,175119,175120,175123],{},"Python 导入模块时会在 ",[49,175121,175122],{},"sys.path"," 中查找。",[42,175125,175127],{"className":33028,"code":175126,"language":33030,"meta":47,"style":47},"import sys\n\nfor path in sys.path:\n    print(path)\n",[49,175128,175129,175135,175139,175151],{"__ignoreMap":47},[52,175130,175131,175133],{"class":54,"line":55},[52,175132,33042],{"class":58},[52,175134,174845],{"class":79},[52,175136,175137],{"class":54,"line":66},[52,175138,123],{"emptyLinePlaceholder":122},[52,175140,175141,175143,175146,175148],{"class":54,"line":83},[52,175142,6014],{"class":58},[52,175144,175145],{"class":79}," path ",[52,175147,28693],{"class":58},[52,175149,175150],{"class":79}," sys.path:\n",[52,175152,175153,175155],{"class":54,"line":91},[52,175154,33949],{"class":308},[52,175156,171879],{"class":79},[14,175158,175159],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,175161,160273],{},[42,175163,175166],{"className":175164,"code":175165,"language":8154,"meta":47},[8152],"random.py\njson.py\ntime.py\n",[49,175167,175165],{"__ignoreMap":47},[14,175169,175170],{},"这些文件名可能导致导入异常。",[18,175172,175174],{"id":175173},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,175176,174970],{},[42,175178,175181],{"className":175179,"code":175180,"language":8154,"meta":47},[8152],"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",[49,175182,175180],{"__ignoreMap":47},[14,175184,175185,27268],{},[49,175186,175187],{},"utils\u002Ffile_utils.py",[42,175189,175191],{"className":33028,"code":175190,"language":33030,"meta":47,"style":47},"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",[49,175192,175193,175199,175209,175213,175217,175227,175237,175245,175251,175255,175282,175292,175296,175300,175310,175336],{"__ignoreMap":47},[52,175194,175195,175197],{"class":54,"line":55},[52,175196,33042],{"class":58},[52,175198,149741],{"class":79},[52,175200,175201,175203,175205,175207],{"class":54,"line":66},[52,175202,33387],{"class":58},[52,175204,110961],{"class":79},[52,175206,33042],{"class":58},[52,175208,110966],{"class":79},[52,175210,175211],{"class":54,"line":83},[52,175212,123],{"emptyLinePlaceholder":122},[52,175214,175215],{"class":54,"line":91},[52,175216,123],{"emptyLinePlaceholder":122},[52,175218,175219,175221,175224],{"class":54,"line":98},[52,175220,34597],{"class":58},[52,175222,175223],{"class":75}," read_json",[52,175225,175226],{"class":79},"(path):\n",[52,175228,175229,175232,175234],{"class":54,"line":107},[52,175230,175231],{"class":79},"    path ",[52,175233,292],{"class":58},[52,175235,175236],{"class":79}," Path(path)\n",[52,175238,175239,175241,175243],{"class":54,"line":113},[52,175240,6088],{"class":58},[52,175242,41580],{"class":58},[52,175244,171960],{"class":79},[52,175246,175247,175249],{"class":54,"line":119},[52,175248,17400],{"class":58},[52,175250,54488],{"class":79},[52,175252,175253],{"class":54,"line":126},[52,175254,123],{"emptyLinePlaceholder":122},[52,175256,175257,175259,175261,175264,175266,175268,175270,175272,175274,175276,175278,175280],{"class":54,"line":132},[52,175258,36828],{"class":58},[52,175260,149441],{"class":308},[52,175262,175263],{"class":79},"(path, ",[52,175265,149451],{"class":62},[52,175267,15083],{"class":79},[52,175269,149456],{"class":1223},[52,175271,292],{"class":58},[52,175273,149461],{"class":62},[52,175275,16362],{"class":79},[52,175277,34033],{"class":58},[52,175279,150803],{"class":1223},[52,175281,6718],{"class":79},[52,175283,175284,175286,175288,175290],{"class":54,"line":138},[52,175285,17400],{"class":58},[52,175287,150814],{"class":79},[52,175289,48004],{"class":1223},[52,175291,708],{"class":79},[52,175293,175294],{"class":54,"line":144},[52,175295,123],{"emptyLinePlaceholder":122},[52,175297,175298],{"class":54,"line":153},[52,175299,123],{"emptyLinePlaceholder":122},[52,175301,175302,175304,175307],{"class":54,"line":159},[52,175303,34597],{"class":58},[52,175305,175306],{"class":75}," write_json",[52,175308,175309],{"class":79},"(path, data):\n",[52,175311,175312,175314,175316,175318,175320,175322,175324,175326,175328,175330,175332,175334],{"class":54,"line":167},[52,175313,36828],{"class":58},[52,175315,149441],{"class":308},[52,175317,175263],{"class":79},[52,175319,154626],{"class":62},[52,175321,15083],{"class":79},[52,175323,149456],{"class":1223},[52,175325,292],{"class":58},[52,175327,149461],{"class":62},[52,175329,16362],{"class":79},[52,175331,34033],{"class":58},[52,175333,150803],{"class":1223},[52,175335,6718],{"class":79},[52,175337,175338,175341,175343,175345,175347,175349,175351,175353,175355,175357,175359],{"class":54,"line":173},[52,175339,175340],{"class":79},"        json.dump(data, ",[52,175342,48004],{"class":1223},[52,175344,15083],{"class":79},[52,175346,149787],{"class":1223},[52,175348,292],{"class":58},[52,175350,36637],{"class":308},[52,175352,15083],{"class":79},[52,175354,154662],{"class":1223},[52,175356,292],{"class":58},[52,175358,564],{"class":308},[52,175360,708],{"class":79},[14,175362,175363,27268],{},[49,175364,157257],{},[42,175366,175368],{"className":33028,"code":175367,"language":33030,"meta":47,"style":47},"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",[49,175369,175370,175381,175385,175398,175418],{"__ignoreMap":47},[52,175371,175372,175374,175376,175378],{"class":54,"line":55},[52,175373,33387],{"class":58},[52,175375,174991],{"class":79},[52,175377,33042],{"class":58},[52,175379,175380],{"class":79}," read_json, write_json\n",[52,175382,175383],{"class":54,"line":66},[52,175384,123],{"emptyLinePlaceholder":122},[52,175386,175387,175389,175391,175394,175396],{"class":54,"line":83},[52,175388,162366],{"class":79},[52,175390,292],{"class":58},[52,175392,175393],{"class":79}," read_json(",[52,175395,154481],{"class":62},[52,175397,708],{"class":79},[52,175399,175400,175402,175404,175406,175408,175410,175412,175414,175416],{"class":54,"line":91},[52,175401,173184],{"class":79},[52,175403,65329],{"class":62},[52,175405,54087],{"class":79},[52,175407,152538],{"class":62},[52,175409,15083],{"class":79},[52,175411,154122],{"class":62},[52,175413,54087],{"class":79},[52,175415,4174],{"class":308},[52,175417,167802],{"class":79},[52,175419,175420,175423,175425],{"class":54,"line":98},[52,175421,175422],{"class":79},"write_json(",[52,175424,154481],{"class":62},[52,175426,175427],{"class":79},", students)\n",[18,175429,175431],{"id":175430},"_918-易错点","9.18 易错点",[1696,175433,175434,175437,175442,175447,175450,175453],{},[32,175435,175436],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[32,175438,175439,175440,31035],{},"能指定异常类型就不要裸写 ",[49,175441,173544],{},[32,175443,175444,175446],{},[49,175445,173919],{}," 无论是否出错都会执行。",[32,175448,175449],{},"模块文件名不要和标准库重名。",[32,175451,175452],{},"导入自己写的模块时，要注意运行目录。",[32,175454,175455],{},"第三方包要安装到当前解释器或虚拟环境中。",[18,175457,175459],{"id":175458},"_919-本章练习","9.19 本章练习",[1696,175461,175462,175465,175468,175474,175481],{},[32,175463,175464],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[32,175466,175467],{},"写函数读取文件，如果文件不存在则返回空字符串。",[32,175469,174882,175470,175473],{},[49,175471,175472],{},"math_utils.py","，实现加减乘除函数并导入使用。",[32,175475,175476,175477,175480],{},"创建一个 ",[49,175478,175479],{},"utils"," 包，把 JSON 读写函数放进去。",[32,175482,175483],{},"写一个程序，捕获除零异常和输入格式异常。",[3141,175485,175486],{},"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":47,"searchDepth":66,"depth":66,"links":175488},[175489,175490,175491,175492,175493,175494,175495,175496,175497,175498,175499,175505,175512,175514,175515,175516,175517,175518,175519],{"id":173341,"depth":66,"text":173342},{"id":173469,"depth":66,"text":173470},{"id":173518,"depth":66,"text":173519},{"id":173667,"depth":66,"text":173668},{"id":173839,"depth":66,"text":173840},{"id":173908,"depth":66,"text":173909},{"id":174019,"depth":66,"text":174020},{"id":174145,"depth":66,"text":174146},{"id":174270,"depth":66,"text":174271},{"id":174325,"depth":66,"text":174326},{"id":174424,"depth":66,"text":174425,"children":175500},[175501,175502,175503,175504],{"id":174428,"depth":83,"text":174429},{"id":174462,"depth":83,"text":174463},{"id":174501,"depth":83,"text":174502},{"id":174580,"depth":83,"text":174581},{"id":174603,"depth":66,"text":174604,"children":175506},[175507,175508,175509,175510,175511],{"id":174607,"depth":83,"text":174608},{"id":174690,"depth":83,"text":174691},{"id":174735,"depth":83,"text":174736},{"id":174794,"depth":83,"text":174795},{"id":174832,"depth":83,"text":174833},{"id":174866,"depth":66,"text":175513},"9.13 if name == \"main\"",{"id":174959,"depth":66,"text":174960},{"id":175004,"depth":66,"text":175005},{"id":175115,"depth":66,"text":175116},{"id":175173,"depth":66,"text":175174},{"id":175430,"depth":66,"text":175431},{"id":175458,"depth":66,"text":175459},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":173333,"description":26025},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":175526,"title":175527,"body":175528,"description":175691,"extension":3153,"meta":175692,"navigation":122,"path":175693,"seo":175694,"stem":175695,"__hash__":175696},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":175529,"toc":175686},[175530,175533,175536,175539,175550,175552,175626,175629,175632,175635,175638,175641,175644,175647,175650,175653,175656],[10,175531,175527],{"id":175532},"python教程",[14,175534,175535],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,175537,175538],{},"建议学习环境：",[1696,175540,175541,175544,175547],{},[32,175542,175543],{},"Python 版本：Python 3.10 及以上。",[32,175545,175546],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[32,175548,175549],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[18,175551,119728],{"id":119728},[1696,175553,175554,175560,175566,175572,175578,175584,175590,175596,175602,175608,175614,175620],{},[32,175555,175556],{},[3451,175557,175559],{"href":175558},".\u002Fch1-Python","Python环境与第一个程序",[32,175561,175562],{},[3451,175563,175565],{"href":175564},".\u002Fch2","基础语法、变量与字符串",[32,175567,175568],{},[3451,175569,175571],{"href":175570},".\u002Fch3","判断语句",[32,175573,175574],{},[3451,175575,175577],{"href":175576},".\u002Fch4","循环语句",[32,175579,175580],{},[3451,175581,175583],{"href":175582},".\u002Fch5","函数基础",[32,175585,175586],{},[3451,175587,175589],{"href":175588},".\u002Fch6","数据容器",[32,175591,175592],{},[3451,175593,175595],{"href":175594},".\u002Fch7","函数进阶",[32,175597,175598],{},[3451,175599,175601],{"href":175600},".\u002Fch8","文件操作",[32,175603,175604],{},[3451,175605,175607],{"href":175606},".\u002Fch9","异常、模块与包",[32,175609,175610],{},[3451,175611,175613],{"href":175612},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[32,175615,175616],{},[3451,175617,175619],{"href":175618},".\u002Fch11","面向对象基础",[32,175621,175622],{},[3451,175623,175625],{"href":175624},".\u002Fch12","综合案例与复习路线",[18,175627,175628],{"id":175628},"学习路线",[14,175630,175631],{},"第一阶段：能运行程序。",[14,175633,175634],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,175636,175637],{},"第二阶段：能组织数据。",[14,175639,175640],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,175642,175643],{},"第三阶段：能封装逻辑。",[14,175645,175646],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,175648,175649],{},"第四阶段：能做小项目。",[14,175651,175652],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[18,175654,175655],{"id":175655},"参考资料",[1696,175657,175658,175665,175672,175679],{},[32,175659,175660,175661],{},"黑马程序员 Python 入门教程推荐：",[3451,175662,175663],{"href":175663,"rel":175664},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[26514],[32,175666,175667,175668],{},"Python 官方中文教程：",[3451,175669,175670],{"href":175670,"rel":175671},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[26514],[32,175673,175674,175675],{},"Python 标准库文档：",[3451,175676,175677],{"href":175677,"rel":175678},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[26514],[32,175680,175681,175682],{},"pyecharts 文档：",[3451,175683,175684],{"href":175684,"rel":175685},"https:\u002F\u002Fpyecharts.org\u002F",[26514],{"title":47,"searchDepth":66,"depth":66,"links":175687},[175688,175689,175690],{"id":119728,"depth":66,"text":119728},{"id":175628,"depth":66,"text":175628},{"id":175655,"depth":66,"text":175655},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":26027},"\u002Fwiki\u002F2024-10-10-python",{"title":175527,"description":175691},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379620]